@kintone/rest-api-client 2.0.24 → 2.0.25

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.
@@ -2281,7 +2281,7 @@
2281
2281
  return "".concat(protocol, "//").concat(host);
2282
2282
  };
2283
2283
  var getVersion = function getVersion() {
2284
- return "2.0.24";
2284
+ return "2.0.25";
2285
2285
  };
2286
2286
 
2287
2287
  var browserDeps = /*#__PURE__*/Object.freeze({
@@ -3646,6 +3646,25 @@
3646
3646
  redefine$2(global$2, NUMBER, NumberWrapper);
3647
3647
  }
3648
3648
 
3649
+ var TO_STRING_TAG_SUPPORT$1 = toStringTagSupport;
3650
+ var classof = classof$4;
3651
+
3652
+ // `Object.prototype.toString` method implementation
3653
+ // https://tc39.es/ecma262/#sec-object.prototype.tostring
3654
+ var objectToString$1 = TO_STRING_TAG_SUPPORT$1 ? {}.toString : function toString() {
3655
+ return '[object ' + classof(this) + ']';
3656
+ };
3657
+
3658
+ var TO_STRING_TAG_SUPPORT = toStringTagSupport;
3659
+ var redefine$1 = redefine$5.exports;
3660
+ var toString$1 = objectToString$1;
3661
+
3662
+ // `Object.prototype.toString` method
3663
+ // https://tc39.es/ecma262/#sec-object.prototype.tostring
3664
+ if (!TO_STRING_TAG_SUPPORT) {
3665
+ redefine$1(Object.prototype, 'toString', toString$1, { unsafe: true });
3666
+ }
3667
+
3649
3668
  var $$2 = _export;
3650
3669
  var isArray$5 = isArray$8;
3651
3670
  var isConstructor = isConstructor$2;
@@ -4897,7 +4916,7 @@
4897
4916
 
4898
4917
  // utils is a library of generic helper functions non-specific to axios
4899
4918
 
4900
- var toString$1 = Object.prototype.toString;
4919
+ var toString = Object.prototype.toString;
4901
4920
 
4902
4921
  /**
4903
4922
  * Determine if a value is an Array
@@ -4906,7 +4925,7 @@
4906
4925
  * @returns {boolean} True if value is an Array, otherwise false
4907
4926
  */
4908
4927
  function isArray$4(val) {
4909
- return toString$1.call(val) === '[object Array]';
4928
+ return toString.call(val) === '[object Array]';
4910
4929
  }
4911
4930
 
4912
4931
  /**
@@ -4937,7 +4956,7 @@
4937
4956
  * @returns {boolean} True if value is an ArrayBuffer, otherwise false
4938
4957
  */
4939
4958
  function isArrayBuffer(val) {
4940
- return toString$1.call(val) === '[object ArrayBuffer]';
4959
+ return toString.call(val) === '[object ArrayBuffer]';
4941
4960
  }
4942
4961
 
4943
4962
  /**
@@ -5003,7 +5022,7 @@
5003
5022
  * @return {boolean} True if value is a plain Object, otherwise false
5004
5023
  */
5005
5024
  function isPlainObject(val) {
5006
- if (toString$1.call(val) !== '[object Object]') {
5025
+ if (toString.call(val) !== '[object Object]') {
5007
5026
  return false;
5008
5027
  }
5009
5028
 
@@ -5018,7 +5037,7 @@
5018
5037
  * @returns {boolean} True if value is a Date, otherwise false
5019
5038
  */
5020
5039
  function isDate$1(val) {
5021
- return toString$1.call(val) === '[object Date]';
5040
+ return toString.call(val) === '[object Date]';
5022
5041
  }
5023
5042
 
5024
5043
  /**
@@ -5028,7 +5047,7 @@
5028
5047
  * @returns {boolean} True if value is a File, otherwise false
5029
5048
  */
5030
5049
  function isFile(val) {
5031
- return toString$1.call(val) === '[object File]';
5050
+ return toString.call(val) === '[object File]';
5032
5051
  }
5033
5052
 
5034
5053
  /**
@@ -5038,7 +5057,7 @@
5038
5057
  * @returns {boolean} True if value is a Blob, otherwise false
5039
5058
  */
5040
5059
  function isBlob(val) {
5041
- return toString$1.call(val) === '[object Blob]';
5060
+ return toString.call(val) === '[object Blob]';
5042
5061
  }
5043
5062
 
5044
5063
  /**
@@ -5048,7 +5067,7 @@
5048
5067
  * @returns {boolean} True if value is a Function, otherwise false
5049
5068
  */
5050
5069
  function isFunction(val) {
5051
- return toString$1.call(val) === '[object Function]';
5070
+ return toString.call(val) === '[object Function]';
5052
5071
  }
5053
5072
 
5054
5073
  /**
@@ -6471,7 +6490,7 @@
6471
6490
  };
6472
6491
 
6473
6492
  var data = {
6474
- "version": "0.23.0"
6493
+ "version": "0.24.0"
6475
6494
  };
6476
6495
 
6477
6496
  var VERSION = data.version;
@@ -7977,7 +7996,7 @@
7977
7996
  var hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;
7978
7997
  var weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;
7979
7998
  var booleanValueOf = Boolean.prototype.valueOf;
7980
- var objectToString$1 = Object.prototype.toString;
7999
+ var objectToString = Object.prototype.toString;
7981
8000
  var functionToString = Function.prototype.toString;
7982
8001
  var match = String.prototype.match;
7983
8002
  var bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;
@@ -8178,7 +8197,7 @@
8178
8197
  }
8179
8198
 
8180
8199
  function toStr(obj) {
8181
- return objectToString$1.call(obj);
8200
+ return objectToString.call(obj);
8182
8201
  }
8183
8202
 
8184
8203
  function nameOf(f) {
@@ -9849,25 +9868,6 @@
9849
9868
  return KintoneRequestConfigBuilder;
9850
9869
  }();
9851
9870
 
9852
- var TO_STRING_TAG_SUPPORT$1 = toStringTagSupport;
9853
- var classof = classof$4;
9854
-
9855
- // `Object.prototype.toString` method implementation
9856
- // https://tc39.es/ecma262/#sec-object.prototype.tostring
9857
- var objectToString = TO_STRING_TAG_SUPPORT$1 ? {}.toString : function toString() {
9858
- return '[object ' + classof(this) + ']';
9859
- };
9860
-
9861
- var TO_STRING_TAG_SUPPORT = toStringTagSupport;
9862
- var redefine$1 = redefine$5.exports;
9863
- var toString = objectToString;
9864
-
9865
- // `Object.prototype.toString` method
9866
- // https://tc39.es/ecma262/#sec-object.prototype.tostring
9867
- if (!TO_STRING_TAG_SUPPORT) {
9868
- redefine$1(Object.prototype, 'toString', toString, { unsafe: true });
9869
- }
9870
-
9871
9871
  var PROPER_FUNCTION_NAME = functionName.PROPER;
9872
9872
  var redefine = redefine$5.exports;
9873
9873
  var anObject = anObject$9;
@@ -10142,4 +10142,4 @@
10142
10142
  Object.defineProperty(exports, '__esModule', { value: true });
10143
10143
 
10144
10144
  }));
10145
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiS2ludG9uZVJlc3RBUElDbGllbnQuanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9wbGF0Zm9ybS9pbmRleC50cyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZmFpbHMuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWNhbGxhYmxlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtYnVpbHQtaW4uanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24uanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbmF0aXZlLXN5bWJvbC5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1zeW1ib2wuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZy5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1tZXRob2QuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1nbG9iYWwuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NoYXJlZC5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1vYmplY3QuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91aWQuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleS5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eS5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9uYXRpdmUtd2Vhay1tYXAuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLWtleS5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9oaWRkZW4ta2V5cy5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZGVmaW5lLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHkuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VudW0tYnVnLWtleXMuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vd24ta2V5cy5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2V4cG9ydC5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1hcnJheS5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHkuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NsYXNzb2YuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3IuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydC5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuZnVuY3Rpb24ubmFtZS5qcyIsIi4uL3NyYy9wbGF0Zm9ybS9VbnN1cHBvcnRlZFBsYXRmb3JtRXJyb3IudHMiLCIuLi9zcmMvcGxhdGZvcm0vYnJvd3Nlci50cyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5tYXAuanMiLCIuLi9zcmMvdXJsLnRzIiwiLi4vc3JjL2NsaWVudC9CdWxrUmVxdWVzdENsaWVudC50cyIsIi4uL3NyYy9jbGllbnQvQXBwQ2xpZW50LnRzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1hc3NpZ24uanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5hc3NpZ24uanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tc3RyaW5nLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1mbGFncy5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtc3RpY2t5LWhlbHBlcnMuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2h0bWwuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtZG90LWFsbC5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtbmNnLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1leGVjLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuZXhlYy5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYWR2YW5jZS1zdHJpbmctaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMtYWJzdHJhY3QuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5tYXRjaC5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZi5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmhlcml0LWlmLXJlcXVpcmVkLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RoaXMtbnVtYmVyLXZhbHVlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3doaXRlc3BhY2VzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N0cmluZy10cmltLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5udW1iZXIuY29uc3RydWN0b3IuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnNsaWNlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3Qua2V5cy5qcyIsIi4uL3NyYy9lcnJvci9LaW50b25lQWxsUmVjb3Jkc0Vycm9yLnRzIiwiLi4vc3JjL2NsaWVudC9SZWNvcmRDbGllbnQudHMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZm9ybS1kYXRhL2xpYi9icm93c2VyLmpzIiwiLi4vc3JjL2NsaWVudC9GaWxlQ2xpZW50LnRzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2JpbmQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3V0aWxzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2J1aWxkVVJMLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0ludGVyY2VwdG9yTWFuYWdlci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9yb2xsdXAtcGx1Z2luLW5vZGUtZ2xvYmFscy9zcmMvZ2xvYmFsLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MtZXM2L2Jyb3dzZXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvbm9ybWFsaXplSGVhZGVyTmFtZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9lbmhhbmNlRXJyb3IuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvY3JlYXRlRXJyb3IuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvc2V0dGxlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Nvb2tpZXMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb21iaW5lVVJMcy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9idWlsZEZ1bGxQYXRoLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3BhcnNlSGVhZGVycy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc1VSTFNhbWVPcmlnaW4uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9DYW5jZWwuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL3hoci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvdHJhbnNmb3JtRGF0YS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL2lzQ2FuY2VsLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2Rpc3BhdGNoUmVxdWVzdC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9tZXJnZUNvbmZpZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZW52L2RhdGEuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdmFsaWRhdG9yLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0F4aW9zLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsVG9rZW4uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvc3ByZWFkLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzQXhpb3NFcnJvci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYXhpb3MuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvaW5kZXguanMiLCIuLi9zcmMvaHR0cC9BeGlvc0NsaWVudC50cyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5qb2luLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2hhcy1zeW1ib2xzL3NoYW1zLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2hhcy1zeW1ib2xzL2luZGV4LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW1wbGVtZW50YXRpb24uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9oYXMvc3JjL2luZGV4LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2dldC1pbnRyaW5zaWMvaW5kZXguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvc2lkZS1jaGFubmVsL25vZGVfbW9kdWxlcy9jYWxsLWJpbmQvbm9kZV9tb2R1bGVzL2dldC1pbnRyaW5zaWMvaW5kZXguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvc2lkZS1jaGFubmVsL25vZGVfbW9kdWxlcy9jYWxsLWJpbmQvaW5kZXguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvc2lkZS1jaGFubmVsL25vZGVfbW9kdWxlcy9jYWxsLWJpbmQvY2FsbEJvdW5kLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3NpZGUtY2hhbm5lbC9ub2RlX21vZHVsZXMvb2JqZWN0LWluc3BlY3QvaW5kZXguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvc2lkZS1jaGFubmVsL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3FzL2xpYi9mb3JtYXRzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3FzL2xpYi91dGlscy5qcyIsIi4uL25vZGVfbW9kdWxlcy9xcy9saWIvc3RyaW5naWZ5LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3FzL2xpYi9wYXJzZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9xcy9saWIvaW5kZXguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvanMtYmFzZTY0L2Jhc2U2NC5qcyIsIi4uL3NyYy9LaW50b25lUmVxdWVzdENvbmZpZ0J1aWxkZXIudHMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXRvLXN0cmluZy5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZy5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLnRvLXN0cmluZy5qcyIsIi4uL3NyYy9lcnJvci9LaW50b25lQWJvcnRTZWFyY2hFcnJvci50cyIsIi4uL3NyYy9lcnJvci9LaW50b25lUmVzdEFQSUVycm9yLnRzIiwiLi4vc3JjL0tpbnRvbmVSZXNwb25zZUhhbmRsZXIudHMiLCIuLi9zcmMvS2ludG9uZVJlc3RBUElDbGllbnQudHMiLCIuLi9zcmMvaW5kZXguYnJvd3Nlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXNjcmltaW5hdGVkQXV0aCB9IGZyb20gXCIuLi90eXBlcy9hdXRoXCI7XG50eXBlIFBsYXRmb3JtRGVwcyA9IHtcbiAgcmVhZEZpbGVGcm9tUGF0aDogKFxuICAgIGZpbGVQYXRoOiBzdHJpbmdcbiAgKSA9PiBQcm9taXNlPHsgbmFtZTogc3RyaW5nOyBkYXRhOiB1bmtub3duIH0+O1xuICBnZXRSZXF1ZXN0VG9rZW46ICgpID0+IFByb21pc2U8c3RyaW5nPjtcbiAgZ2V0RGVmYXVsdEF1dGg6ICgpID0+IERpc2NyaW1pbmF0ZWRBdXRoO1xuICBidWlsZFBsYXRmb3JtRGVwZW5kZW50Q29uZmlnOiAocGFyYW1zOiBvYmplY3QpID0+IG9iamVjdDtcbiAgYnVpbGRIZWFkZXJzOiAocGFyYW1zOiB7IHVzZXJBZ2VudD86IHN0cmluZyB9KSA9PiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBidWlsZEZvcm1EYXRhVmFsdWU6IChkYXRhOiB1bmtub3duKSA9PiB1bmtub3duO1xuICBidWlsZEJhc2VVcmw6IChiYXNlVXJsPzogc3RyaW5nKSA9PiBzdHJpbmc7XG4gIGdldFZlcnNpb246ICgpID0+IHN0cmluZztcbn07XG5cbmV4cG9ydCBjb25zdCBwbGF0Zm9ybURlcHM6IFBsYXRmb3JtRGVwcyA9IHtcbiAgcmVhZEZpbGVGcm9tUGF0aDogKCkgPT4ge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfSxcbiAgZ2V0UmVxdWVzdFRva2VuOiAoKSA9PiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwibm90IGltcGxlbWVudGVkXCIpO1xuICB9LFxuICBnZXREZWZhdWx0QXV0aDogKCkgPT4ge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfSxcbiAgYnVpbGRQbGF0Zm9ybURlcGVuZGVudENvbmZpZzogKCkgPT4ge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfSxcbiAgYnVpbGRIZWFkZXJzOiAoKSA9PiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwibm90IGltcGxlbWVudGVkXCIpO1xuICB9LFxuICBidWlsZEZvcm1EYXRhVmFsdWU6ICgpID0+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJub3QgaW1wbGVtZW50ZWRcIik7XG4gIH0sXG4gIGJ1aWxkQmFzZVVybDogKCkgPT4ge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfSxcbiAgZ2V0VmVyc2lvbjogKCkgPT4ge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBpbmplY3RQbGF0Zm9ybURlcHMgPSAoZGVwczogUGFydGlhbDxQbGF0Zm9ybURlcHM+KSA9PiB7XG4gIHBsYXRmb3JtRGVwcy5yZWFkRmlsZUZyb21QYXRoID0gZGVwcy5yZWFkRmlsZUZyb21QYXRoITtcbiAgcGxhdGZvcm1EZXBzLmdldFJlcXVlc3RUb2tlbiA9IGRlcHMuZ2V0UmVxdWVzdFRva2VuITtcbiAgcGxhdGZvcm1EZXBzLmdldERlZmF1bHRBdXRoID0gZGVwcy5nZXREZWZhdWx0QXV0aCE7XG4gIHBsYXRmb3JtRGVwcy5idWlsZFBsYXRmb3JtRGVwZW5kZW50Q29uZmlnID1cbiAgICBkZXBzLmJ1aWxkUGxhdGZvcm1EZXBlbmRlbnRDb25maWchO1xuICBwbGF0Zm9ybURlcHMuYnVpbGRIZWFkZXJzID0gZGVwcy5idWlsZEhlYWRlcnMhO1xuICBwbGF0Zm9ybURlcHMuYnVpbGRGb3JtRGF0YVZhbHVlID0gZGVwcy5idWlsZEZvcm1EYXRhVmFsdWUhO1xuICBwbGF0Zm9ybURlcHMuYnVpbGRCYXNlVXJsID0gZGVwcy5idWlsZEJhc2VVcmwhO1xuICBwbGF0Zm9ybURlcHMuZ2V0VmVyc2lvbiA9IGRlcHMuZ2V0VmVyc2lvbiE7XG59O1xuIiwidmFyIGNoZWNrID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAmJiBpdC5NYXRoID09IE1hdGggJiYgaXQ7XG59O1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxubW9kdWxlLmV4cG9ydHMgPVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZ2xvYmFsLXRoaXMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2YgZ2xvYmFsVGhpcyA9PSAnb2JqZWN0JyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYpIHx8XG4gIGNoZWNrKHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsKSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmMgLS0gZmFsbGJhY2tcbiAgKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pKCkgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gRGV0ZWN0IElFOCdzIGluY29tcGxldGUgZGVmaW5lUHJvcGVydHkgaW1wbGVtZW50YXRpb25cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAxLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KVsxXSAhPSA3O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gTmFzaG9ybiB+IEpESzggYnVnXG52YXIgTkFTSE9STl9CVUcgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgJiYgISRwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHsgMTogMiB9LCAxKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGVgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnByb3BlcnR5aXNlbnVtZXJhYmxlXG5leHBvcnRzLmYgPSBOQVNIT1JOX0JVRyA/IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKFYpIHtcbiAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcywgVik7XG4gIHJldHVybiAhIWRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlO1xufSA6ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbnZhciBzcGxpdCA9ICcnLnNwbGl0O1xuXG4vLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHRocm93cyBhbiBlcnJvciBpbiByaGlubywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3JoaW5vL2lzc3Vlcy8zNDZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiAhT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCk7XG59KSA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY2xhc3NvZihpdCkgPT0gJ1N0cmluZycgPyBzcGxpdC5jYWxsKGl0LCAnJykgOiBPYmplY3QoaXQpO1xufSA6IE9iamVjdDtcbiIsIi8vIGBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVxdWlyZW9iamVjdGNvZXJjaWJsZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCIvLyB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSW5kZXhlZE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGl0KSk7XG59O1xuIiwiLy8gYElzQ2FsbGFibGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NhbGxhYmxlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nO1xufTtcbiIsInZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiBpc0NhbGxhYmxlKGl0KTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIGFGdW5jdGlvbiA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gaXNDYWxsYWJsZShhcmd1bWVudCkgPyBhcmd1bWVudCA6IHVuZGVmaW5lZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWV0aG9kKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGFGdW5jdGlvbihnbG9iYWxbbmFtZXNwYWNlXSkgOiBnbG9iYWxbbmFtZXNwYWNlXSAmJiBnbG9iYWxbbmFtZXNwYWNlXVttZXRob2RdO1xufTtcbiIsInZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ25hdmlnYXRvcicsICd1c2VyQWdlbnQnKSB8fCAnJztcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgRGVubyA9IGdsb2JhbC5EZW5vO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zIHx8IERlbm8gJiYgRGVuby52ZXJzaW9uO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjg7XG52YXIgbWF0Y2gsIHZlcnNpb247XG5cbmlmICh2OCkge1xuICBtYXRjaCA9IHY4LnNwbGl0KCcuJyk7XG4gIHZlcnNpb24gPSBtYXRjaFswXSA8IDQgPyAxIDogbWF0Y2hbMF0gKyBtYXRjaFsxXTtcbn0gZWxzZSBpZiAodXNlckFnZW50KSB7XG4gIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9FZGdlXFwvKFxcZCspLyk7XG4gIGlmICghbWF0Y2ggfHwgbWF0Y2hbMV0gPj0gNzQpIHtcbiAgICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLyk7XG4gICAgaWYgKG1hdGNoKSB2ZXJzaW9uID0gbWF0Y2hbMV07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2ZXJzaW9uICYmICt2ZXJzaW9uO1xuIiwiLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9ICEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgc3ltYm9sID0gU3ltYm9sKCk7XG4gIC8vIENocm9tZSAzOCBTeW1ib2wgaGFzIGluY29ycmVjdCB0b1N0cmluZyBjb252ZXJzaW9uXG4gIC8vIGBnZXQtb3duLXByb3BlcnR5LXN5bWJvbHNgIHBvbHlmaWxsIHN5bWJvbHMgY29udmVydGVkIHRvIG9iamVjdCBhcmUgbm90IFN5bWJvbCBpbnN0YW5jZXNcbiAgcmV0dXJuICFTdHJpbmcoc3ltYm9sKSB8fCAhKE9iamVjdChzeW1ib2wpIGluc3RhbmNlb2YgU3ltYm9sKSB8fFxuICAgIC8vIENocm9tZSAzOC00MCBzeW1ib2xzIGFyZSBub3QgaW5oZXJpdGVkIGZyb20gRE9NIGNvbGxlY3Rpb25zIHByb3RvdHlwZXMgdG8gaW5zdGFuY2VzXG4gICAgIVN5bWJvbC5zaGFtICYmIFY4X1ZFUlNJT04gJiYgVjhfVkVSU0lPTiA8IDQxO1xufSk7XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25hdGl2ZS1zeW1ib2wnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MXG4gICYmICFTeW1ib2wuc2hhbVxuICAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnO1xuIiwidmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gVVNFX1NZTUJPTF9BU19VSUQgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyICRTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoJFN5bWJvbCkgJiYgT2JqZWN0KGl0KSBpbnN0YW5jZW9mICRTeW1ib2w7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gU3RyaW5nKGFyZ3VtZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gJ09iamVjdCc7XG4gIH1cbn07XG4iLCJ2YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxuLy8gYEFzc2VydDogSXNDYWxsYWJsZShhcmd1bWVudCkgaXMgdHJ1ZWBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xufTtcbiIsInZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xuXG4vLyBgR2V0TWV0aG9kYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0bWV0aG9kXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChWLCBQKSB7XG4gIHZhciBmdW5jID0gVltQXTtcbiAgcmV0dXJuIGZ1bmMgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGFDYWxsYWJsZShmdW5jKTtcbn07XG4iLCJ2YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG4vLyBgT3JkaW5hcnlUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9yZGluYXJ5dG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAocHJlZiA9PT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAoaXNDYWxsYWJsZShmbiA9IGlucHV0LnZhbHVlT2YpICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChwcmVmICE9PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGlucHV0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbCwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBnbG9iYWxba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNldEdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtZ2xvYmFsJyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IGdsb2JhbFtTSEFSRURdIHx8IHNldEdsb2JhbChTSEFSRUQsIHt9KTtcblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZTtcbiIsInZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiB7fSk7XG59KSgndmVyc2lvbnMnLCBbXSkucHVzaCh7XG4gIHZlcnNpb246ICczLjE4LjMnLFxuICBtb2RlOiBJU19QVVJFID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMjEgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknXG59KTtcbiIsInZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG4vLyBgVG9PYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b29iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KSk7XG59O1xuIiwidmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuLy8gYEhhc093blByb3BlcnR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaGFzb3ducHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0Lmhhc093biB8fCBmdW5jdGlvbiBoYXNPd24oaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbCh0b09iamVjdChpdCksIGtleSk7XG59O1xuIiwidmFyIGlkID0gMDtcbnZhciBwb3N0Zml4ID0gTWF0aC5yYW5kb20oKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyBTdHJpbmcoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgKCsraWQgKyBwb3N0Zml4KS50b1N0cmluZygzNik7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtc3ltYm9sJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG52YXIgU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciBjcmVhdGVXZWxsS25vd25TeW1ib2wgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IFN5bWJvbCA6IFN5bWJvbCAmJiBTeW1ib2wud2l0aG91dFNldHRlciB8fCB1aWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCFoYXNPd24oV2VsbEtub3duU3ltYm9sc1N0b3JlLCBuYW1lKSB8fCAhKE5BVElWRV9TWU1CT0wgfHwgdHlwZW9mIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9PSAnc3RyaW5nJykpIHtcbiAgICBpZiAoTkFUSVZFX1NZTUJPTCAmJiBoYXNPd24oU3ltYm9sLCBuYW1lKSkge1xuICAgICAgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gU3ltYm9sW25hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV0gPSBjcmVhdGVXZWxsS25vd25TeW1ib2woJ1N5bWJvbC4nICsgbmFtZSk7XG4gICAgfVxuICB9IHJldHVybiBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV07XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1BSSU1JVElWRSA9IHdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIGlmICghaXNPYmplY3QoaW5wdXQpIHx8IGlzU3ltYm9sKGlucHV0KSkgcmV0dXJuIGlucHV0O1xuICB2YXIgZXhvdGljVG9QcmltID0gZ2V0TWV0aG9kKGlucHV0LCBUT19QUklNSVRJVkUpO1xuICB2YXIgcmVzdWx0O1xuICBpZiAoZXhvdGljVG9QcmltKSB7XG4gICAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdkZWZhdWx0JztcbiAgICByZXN1bHQgPSBleG90aWNUb1ByaW0uY2FsbChpbnB1dCwgcHJlZik7XG4gICAgaWYgKCFpc09iamVjdChyZXN1bHQpIHx8IGlzU3ltYm9sKHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xuICB9XG4gIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnbnVtYmVyJztcbiAgcmV0dXJuIG9yZGluYXJ5VG9QcmltaXRpdmUoaW5wdXQsIHByZWYpO1xufTtcbiIsInZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcblxuLy8gYFRvUHJvcGVydHlLZXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3Byb3BlcnR5a2V5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsICdzdHJpbmcnKTtcbiAgcmV0dXJuIGlzU3ltYm9sKGtleSkgPyBrZXkgOiBTdHJpbmcoa2V5KTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgZG9jdW1lbnQgPSBnbG9iYWwuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBFWElTVFMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBFWElTVFMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xuXG4vLyBUaGFuaydzIElFOCBmb3IgaGlzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjcmVhdGVFbGVtZW50KCdkaXYnKSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9XG4gIH0pLmEgIT0gNztcbn0pO1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhc093bihPLCBQKSkgcmV0dXJuIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcighcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZi5jYWxsKE8sIFApLCBPW1BdKTtcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbi8vIGBBc3NlcnQ6IFR5cGUoYXJndW1lbnQpIGlzIE9iamVjdGBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc09iamVjdChhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgVHlwZUVycm9yKFN0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhbiBvYmplY3QnKTtcbn07XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyAkZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCJ2YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG52YXIgZnVuY3Rpb25Ub1N0cmluZyA9IEZ1bmN0aW9uLnRvU3RyaW5nO1xuXG4vLyB0aGlzIGhlbHBlciBicm9rZW4gaW4gYGNvcmUtanNAMy40LjEtMy40LjRgLCBzbyB3ZSBjYW4ndCB1c2UgYHNoYXJlZGAgaGVscGVyXG5pZiAoIWlzQ2FsbGFibGUoc3RvcmUuaW5zcGVjdFNvdXJjZSkpIHtcbiAgc3RvcmUuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBmdW5jdGlvblRvU3RyaW5nLmNhbGwoaXQpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlLmluc3BlY3RTb3VyY2U7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsLldlYWtNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNDYWxsYWJsZShXZWFrTWFwKSAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoaW5zcGVjdFNvdXJjZShXZWFrTWFwKSk7XG4iLCJ2YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcblxudmFyIGtleXMgPSBzaGFyZWQoJ2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBrZXlzW2tleV0gfHwgKGtleXNba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwidmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtd2Vhay1tYXAnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQgPSAnT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQnO1xudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcbnZhciBzZXQsIGdldCwgaGFzO1xuXG52YXIgZW5mb3JjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaGFzKGl0KSA/IGdldChpdCkgOiBzZXQoaXQsIHt9KTtcbn07XG5cbnZhciBnZXR0ZXJGb3IgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIHN0YXRlO1xuICAgIGlmICghaXNPYmplY3QoaXQpIHx8IChzdGF0ZSA9IGdldChpdCkpLnR5cGUgIT09IFRZUEUpIHtcbiAgICAgIHRocm93IFR5cGVFcnJvcignSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAnICsgVFlQRSArICcgcmVxdWlyZWQnKTtcbiAgICB9IHJldHVybiBzdGF0ZTtcbiAgfTtcbn07XG5cbmlmIChOQVRJVkVfV0VBS19NQVAgfHwgc2hhcmVkLnN0YXRlKSB7XG4gIHZhciBzdG9yZSA9IHNoYXJlZC5zdGF0ZSB8fCAoc2hhcmVkLnN0YXRlID0gbmV3IFdlYWtNYXAoKSk7XG4gIHZhciB3bWdldCA9IHN0b3JlLmdldDtcbiAgdmFyIHdtaGFzID0gc3RvcmUuaGFzO1xuICB2YXIgd21zZXQgPSBzdG9yZS5zZXQ7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAod21oYXMuY2FsbChzdG9yZSwgaXQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICB3bXNldC5jYWxsKHN0b3JlLCBpdCwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHdtZ2V0LmNhbGwoc3RvcmUsIGl0KSB8fCB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHdtaGFzLmNhbGwoc3RvcmUsIGl0KTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBTVEFURSA9IHNoYXJlZEtleSgnc3RhdGUnKTtcbiAgaGlkZGVuS2V5c1tTVEFURV0gPSB0cnVlO1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKGhhc093bihpdCwgU1RBVEUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoaXQsIFNUQVRFLCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSkgPyBpdFtTVEFURV0gOiB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGdldDogZ2V0LFxuICBoYXM6IGhhcyxcbiAgZW5mb3JjZTogZW5mb3JjZSxcbiAgZ2V0dGVyRm9yOiBnZXR0ZXJGb3Jcbn07XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0RGVzY3JpcHRvciA9IERFU0NSSVBUT1JTICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbnZhciBFWElTVFMgPSBoYXNPd24oRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJyk7XG4vLyBhZGRpdGlvbmFsIHByb3RlY3Rpb24gZnJvbSBtaW5pZmllZCAvIG1hbmdsZWQgLyBkcm9wcGVkIGZ1bmN0aW9uIG5hbWVzXG52YXIgUFJPUEVSID0gRVhJU1RTICYmIChmdW5jdGlvbiBzb21ldGhpbmcoKSB7IC8qIGVtcHR5ICovIH0pLm5hbWUgPT09ICdzb21ldGhpbmcnO1xudmFyIENPTkZJR1VSQUJMRSA9IEVYSVNUUyAmJiAoIURFU0NSSVBUT1JTIHx8IChERVNDUklQVE9SUyAmJiBnZXREZXNjcmlwdG9yKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpLmNvbmZpZ3VyYWJsZSkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgRVhJU1RTOiBFWElTVFMsXG4gIFBST1BFUjogUFJPUEVSLFxuICBDT05GSUdVUkFCTEU6IENPTkZJR1VSQUJMRVxufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIHNldEdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtZ2xvYmFsJyk7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJykuQ09ORklHVVJBQkxFO1xuXG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0O1xudmFyIGVuZm9yY2VJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5lbmZvcmNlO1xudmFyIFRFTVBMQVRFID0gU3RyaW5nKFN0cmluZykuc3BsaXQoJ1N0cmluZycpO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICB2YXIgdW5zYWZlID0gb3B0aW9ucyA/ICEhb3B0aW9ucy51bnNhZmUgOiBmYWxzZTtcbiAgdmFyIHNpbXBsZSA9IG9wdGlvbnMgPyAhIW9wdGlvbnMuZW51bWVyYWJsZSA6IGZhbHNlO1xuICB2YXIgbm9UYXJnZXRHZXQgPSBvcHRpb25zID8gISFvcHRpb25zLm5vVGFyZ2V0R2V0IDogZmFsc2U7XG4gIHZhciBuYW1lID0gb3B0aW9ucyAmJiBvcHRpb25zLm5hbWUgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubmFtZSA6IGtleTtcbiAgdmFyIHN0YXRlO1xuICBpZiAoaXNDYWxsYWJsZSh2YWx1ZSkpIHtcbiAgICBpZiAoU3RyaW5nKG5hbWUpLnNsaWNlKDAsIDcpID09PSAnU3ltYm9sKCcpIHtcbiAgICAgIG5hbWUgPSAnWycgKyBTdHJpbmcobmFtZSkucmVwbGFjZSgvXlN5bWJvbFxcKChbXildKilcXCkvLCAnJDEnKSArICddJztcbiAgICB9XG4gICAgaWYgKCFoYXNPd24odmFsdWUsICduYW1lJykgfHwgKENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FICYmIHZhbHVlLm5hbWUgIT09IG5hbWUpKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodmFsdWUsICduYW1lJywgbmFtZSk7XG4gICAgfVxuICAgIHN0YXRlID0gZW5mb3JjZUludGVybmFsU3RhdGUodmFsdWUpO1xuICAgIGlmICghc3RhdGUuc291cmNlKSB7XG4gICAgICBzdGF0ZS5zb3VyY2UgPSBURU1QTEFURS5qb2luKHR5cGVvZiBuYW1lID09ICdzdHJpbmcnID8gbmFtZSA6ICcnKTtcbiAgICB9XG4gIH1cbiAgaWYgKE8gPT09IGdsb2JhbCkge1xuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2Ugc2V0R2xvYmFsKGtleSwgdmFsdWUpO1xuICAgIHJldHVybjtcbiAgfSBlbHNlIGlmICghdW5zYWZlKSB7XG4gICAgZGVsZXRlIE9ba2V5XTtcbiAgfSBlbHNlIGlmICghbm9UYXJnZXRHZXQgJiYgT1trZXldKSB7XG4gICAgc2ltcGxlID0gdHJ1ZTtcbiAgfVxuICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgZWxzZSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoTywga2V5LCB2YWx1ZSk7XG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbn0pKEZ1bmN0aW9uLnByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKHRoaXMpICYmIGdldEludGVybmFsU3RhdGUodGhpcykuc291cmNlIHx8IGluc3BlY3RTb3VyY2UodGhpcyk7XG59KTtcbiIsInZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYFRvSW50ZWdlck9ySW5maW5pdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJvcmluZmluaXR5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbnVtYmVyID0gK2FyZ3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIHNhZmVcbiAgcmV0dXJuIG51bWJlciAhPT0gbnVtYmVyIHx8IG51bWJlciA9PT0gMCA/IDAgOiAobnVtYmVyID4gMCA/IGZsb29yIDogY2VpbCkobnVtYmVyKTtcbn07XG4iLCJ2YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gSGVscGVyIGZvciBhIHBvcHVsYXIgcmVwZWF0aW5nIGNhc2Ugb2YgdGhlIHNwZWM6XG4vLyBMZXQgaW50ZWdlciBiZSA/IFRvSW50ZWdlcihpbmRleCkuXG4vLyBJZiBpbnRlZ2VyIDwgMCwgbGV0IHJlc3VsdCBiZSBtYXgoKGxlbmd0aCArIGludGVnZXIpLCAwKTsgZWxzZSBsZXQgcmVzdWx0IGJlIG1pbihpbnRlZ2VyLCBsZW5ndGgpLlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICB2YXIgaW50ZWdlciA9IHRvSW50ZWdlck9ySW5maW5pdHkoaW5kZXgpO1xuICByZXR1cm4gaW50ZWdlciA8IDAgPyBtYXgoaW50ZWdlciArIGxlbmd0aCwgMCkgOiBtaW4oaW50ZWdlciwgbGVuZ3RoKTtcbn07XG4iLCJ2YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gYFRvTGVuZ3RoYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9sZW5ndGhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBhcmd1bWVudCA+IDAgPyBtaW4odG9JbnRlZ2VyT3JJbmZpbml0eShhcmd1bWVudCksIDB4MUZGRkZGRkZGRkZGRkYpIDogMDsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsInZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcblxuLy8gYExlbmd0aE9mQXJyYXlMaWtlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbGVuZ3Rob2ZhcnJheWxpa2Vcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gdG9MZW5ndGgob2JqLmxlbmd0aCk7XG59O1xuIiwidmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBpbmRleE9mLCBpbmNsdWRlcyB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICBpZiAoKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pICYmIE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xuICBpbmNsdWRlczogY3JlYXRlTWV0aG9kKHRydWUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmluZGV4T2ZgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmRleG9mXG4gIGluZGV4T2Y6IGNyZWF0ZU1ldGhvZChmYWxzZSlcbn07XG4iLCJ2YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBpbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5kZXhPZjtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pICFoYXNPd24oaGlkZGVuS2V5cywga2V5KSAmJiBoYXNPd24oTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzT3duKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHJlc3VsdC5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIvLyBJRTgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gW1xuICAnY29uc3RydWN0b3InLFxuICAnaGFzT3duUHJvcGVydHknLFxuICAnaXNQcm90b3R5cGVPZicsXG4gICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG4gICd0b0xvY2FsZVN0cmluZycsXG4gICd0b1N0cmluZycsXG4gICd2YWx1ZU9mJ1xuXTtcbiIsInZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbnZhciBoaWRkZW5LZXlzID0gZW51bUJ1Z0tleXMuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIiwiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsInZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG4vLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnb3duS2V5cycpIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICByZXR1cm4gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8ga2V5cy5jb25jYXQoZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiIsInZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIG93bktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3duLWtleXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcbiAgdmFyIGtleXMgPSBvd25LZXlzKHNvdXJjZSk7XG4gIHZhciBkZWZpbmVQcm9wZXJ0eSA9IGRlZmluZVByb3BlcnR5TW9kdWxlLmY7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgaWYgKCFoYXNPd24odGFyZ2V0LCBrZXkpKSBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gIH1cbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciByZXBsYWNlbWVudCA9IC8jfFxcLnByb3RvdHlwZVxcLi87XG5cbnZhciBpc0ZvcmNlZCA9IGZ1bmN0aW9uIChmZWF0dXJlLCBkZXRlY3Rpb24pIHtcbiAgdmFyIHZhbHVlID0gZGF0YVtub3JtYWxpemUoZmVhdHVyZSldO1xuICByZXR1cm4gdmFsdWUgPT0gUE9MWUZJTEwgPyB0cnVlXG4gICAgOiB2YWx1ZSA9PSBOQVRJVkUgPyBmYWxzZVxuICAgIDogaXNDYWxsYWJsZShkZXRlY3Rpb24pID8gZmFpbHMoZGV0ZWN0aW9uKVxuICAgIDogISFkZXRlY3Rpb247XG59O1xuXG52YXIgbm9ybWFsaXplID0gaXNGb3JjZWQubm9ybWFsaXplID0gZnVuY3Rpb24gKHN0cmluZykge1xuICByZXR1cm4gU3RyaW5nKHN0cmluZykucmVwbGFjZShyZXBsYWNlbWVudCwgJy4nKS50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIGRhdGEgPSBpc0ZvcmNlZC5kYXRhID0ge307XG52YXIgTkFUSVZFID0gaXNGb3JjZWQuTkFUSVZFID0gJ04nO1xudmFyIFBPTFlGSUxMID0gaXNGb3JjZWQuUE9MWUZJTEwgPSAnUCc7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGb3JjZWQ7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcbnZhciBzZXRHbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWdsb2JhbCcpO1xudmFyIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzJyk7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG5cbi8qXG4gIG9wdGlvbnMudGFyZ2V0ICAgICAgLSBuYW1lIG9mIHRoZSB0YXJnZXQgb2JqZWN0XG4gIG9wdGlvbnMuZ2xvYmFsICAgICAgLSB0YXJnZXQgaXMgdGhlIGdsb2JhbCBvYmplY3RcbiAgb3B0aW9ucy5zdGF0ICAgICAgICAtIGV4cG9ydCBhcyBzdGF0aWMgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5wcm90byAgICAgICAtIGV4cG9ydCBhcyBwcm90b3R5cGUgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5yZWFsICAgICAgICAtIHJlYWwgcHJvdG90eXBlIG1ldGhvZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMuZm9yY2VkICAgICAgLSBleHBvcnQgZXZlbiBpZiB0aGUgbmF0aXZlIGZlYXR1cmUgaXMgYXZhaWxhYmxlXG4gIG9wdGlvbnMuYmluZCAgICAgICAgLSBiaW5kIG1ldGhvZHMgdG8gdGhlIHRhcmdldCwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLndyYXAgICAgICAgIC0gd3JhcCBjb25zdHJ1Y3RvcnMgdG8gcHJldmVudGluZyBnbG9iYWwgcG9sbHV0aW9uLCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMudW5zYWZlICAgICAgLSB1c2UgdGhlIHNpbXBsZSBhc3NpZ25tZW50IG9mIHByb3BlcnR5IGluc3RlYWQgb2YgZGVsZXRlICsgZGVmaW5lUHJvcGVydHlcbiAgb3B0aW9ucy5zaGFtICAgICAgICAtIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgb3B0aW9ucy5lbnVtZXJhYmxlICAtIGV4cG9ydCBhcyBlbnVtZXJhYmxlIHByb3BlcnR5XG4gIG9wdGlvbnMubm9UYXJnZXRHZXQgLSBwcmV2ZW50IGNhbGxpbmcgYSBnZXR0ZXIgb24gdGFyZ2V0XG4gIG9wdGlvbnMubmFtZSAgICAgICAgLSB0aGUgLm5hbWUgb2YgdGhlIGZ1bmN0aW9uIGlmIGl0IGRvZXMgbm90IG1hdGNoIHRoZSBrZXlcbiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcHRpb25zLCBzb3VyY2UpIHtcbiAgdmFyIFRBUkdFVCA9IG9wdGlvbnMudGFyZ2V0O1xuICB2YXIgR0xPQkFMID0gb3B0aW9ucy5nbG9iYWw7XG4gIHZhciBTVEFUSUMgPSBvcHRpb25zLnN0YXQ7XG4gIHZhciBGT1JDRUQsIHRhcmdldCwga2V5LCB0YXJnZXRQcm9wZXJ0eSwgc291cmNlUHJvcGVydHksIGRlc2NyaXB0b3I7XG4gIGlmIChHTE9CQUwpIHtcbiAgICB0YXJnZXQgPSBnbG9iYWw7XG4gIH0gZWxzZSBpZiAoU1RBVElDKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsW1RBUkdFVF0gfHwgc2V0R2xvYmFsKFRBUkdFVCwge30pO1xuICB9IGVsc2Uge1xuICAgIHRhcmdldCA9IChnbG9iYWxbVEFSR0VUXSB8fCB7fSkucHJvdG90eXBlO1xuICB9XG4gIGlmICh0YXJnZXQpIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIHNvdXJjZVByb3BlcnR5ID0gc291cmNlW2tleV07XG4gICAgaWYgKG9wdGlvbnMubm9UYXJnZXRHZXQpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpO1xuICAgICAgdGFyZ2V0UHJvcGVydHkgPSBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IudmFsdWU7XG4gICAgfSBlbHNlIHRhcmdldFByb3BlcnR5ID0gdGFyZ2V0W2tleV07XG4gICAgRk9SQ0VEID0gaXNGb3JjZWQoR0xPQkFMID8ga2V5IDogVEFSR0VUICsgKFNUQVRJQyA/ICcuJyA6ICcjJykgKyBrZXksIG9wdGlvbnMuZm9yY2VkKTtcbiAgICAvLyBjb250YWluZWQgaW4gdGFyZ2V0XG4gICAgaWYgKCFGT1JDRUQgJiYgdGFyZ2V0UHJvcGVydHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSA9PT0gdHlwZW9mIHRhcmdldFByb3BlcnR5KSBjb250aW51ZTtcbiAgICAgIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoc291cmNlUHJvcGVydHksIHRhcmdldFByb3BlcnR5KTtcbiAgICB9XG4gICAgLy8gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICAgIGlmIChvcHRpb25zLnNoYW0gfHwgKHRhcmdldFByb3BlcnR5ICYmIHRhcmdldFByb3BlcnR5LnNoYW0pKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoc291cmNlUHJvcGVydHksICdzaGFtJywgdHJ1ZSk7XG4gICAgfVxuICAgIC8vIGV4dGVuZCBnbG9iYWxcbiAgICByZWRlZmluZSh0YXJnZXQsIGtleSwgc291cmNlUHJvcGVydHksIG9wdGlvbnMpO1xuICB9XG59O1xuIiwidmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxuLy8gYElzQXJyYXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2FycmF5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktaXNhcnJheSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmd1bWVudCkge1xuICByZXR1cm4gY2xhc3NvZihhcmd1bWVudCkgPT0gJ0FycmF5Jztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICB2YXIgcHJvcGVydHlLZXkgPSB0b1Byb3BlcnR5S2V5KGtleSk7XG4gIGlmIChwcm9wZXJ0eUtleSBpbiBvYmplY3QpIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBwcm9wZXJ0eUtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W3Byb3BlcnR5S2V5XSA9IHZhbHVlO1xufTtcbiIsInZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgdGVzdCA9IHt9O1xuXG50ZXN0W1RPX1NUUklOR19UQUddID0gJ3onO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0cmluZyh0ZXN0KSA9PT0gJ1tvYmplY3Qgel0nO1xuIiwidmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY2xhc3NvZlJhdyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQ09SUkVDVF9BUkdVTUVOVFMgPSBjbGFzc29mUmF3KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuXG4vLyBnZXR0aW5nIHRhZyBmcm9tIEVTNisgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgXG5tb2R1bGUuZXhwb3J0cyA9IFRPX1NUUklOR19UQUdfU1VQUE9SVCA/IGNsYXNzb2ZSYXcgOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIHRhZywgcmVzdWx0O1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAodGFnID0gdHJ5R2V0KE8gPSBPYmplY3QoaXQpLCBUT19TVFJJTkdfVEFHKSkgPT0gJ3N0cmluZycgPyB0YWdcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IENPUlJFQ1RfQVJHVU1FTlRTID8gY2xhc3NvZlJhdyhPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChyZXN1bHQgPSBjbGFzc29mUmF3KE8pKSA9PSAnT2JqZWN0JyAmJiBpc0NhbGxhYmxlKE8uY2FsbGVlKSA/ICdBcmd1bWVudHMnIDogcmVzdWx0O1xufTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcblxudmFyIGVtcHR5ID0gW107XG52YXIgY29uc3RydWN0ID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdjb25zdHJ1Y3QnKTtcbnZhciBjb25zdHJ1Y3RvclJlZ0V4cCA9IC9eXFxzKig/OmNsYXNzfGZ1bmN0aW9uKVxcYi87XG52YXIgZXhlYyA9IGNvbnN0cnVjdG9yUmVnRXhwLmV4ZWM7XG52YXIgSU5DT1JSRUNUX1RPX1NUUklORyA9ICFjb25zdHJ1Y3RvclJlZ0V4cC5leGVjKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG5cbnZhciBpc0NvbnN0cnVjdG9yTW9kZXJuID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmICghaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdHJ1Y3QoT2JqZWN0LCBlbXB0eSwgYXJndW1lbnQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxudmFyIGlzQ29uc3RydWN0b3JMZWdhY3kgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKCFpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGZhbHNlO1xuICBzd2l0Y2ggKGNsYXNzb2YoYXJndW1lbnQpKSB7XG4gICAgY2FzZSAnQXN5bmNGdW5jdGlvbic6XG4gICAgY2FzZSAnR2VuZXJhdG9yRnVuY3Rpb24nOlxuICAgIGNhc2UgJ0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24nOiByZXR1cm4gZmFsc2U7XG4gICAgLy8gd2UgY2FuJ3QgY2hlY2sgLnByb3RvdHlwZSBzaW5jZSBjb25zdHJ1Y3RvcnMgcHJvZHVjZWQgYnkgLmJpbmQgaGF2ZW4ndCBpdFxuICB9IHJldHVybiBJTkNPUlJFQ1RfVE9fU1RSSU5HIHx8ICEhZXhlYy5jYWxsKGNvbnN0cnVjdG9yUmVnRXhwLCBpbnNwZWN0U291cmNlKGFyZ3VtZW50KSk7XG59O1xuXG4vLyBgSXNDb25zdHJ1Y3RvcmAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzY29uc3RydWN0b3Jcbm1vZHVsZS5leHBvcnRzID0gIWNvbnN0cnVjdCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBjYWxsZWQ7XG4gIHJldHVybiBpc0NvbnN0cnVjdG9yTW9kZXJuKGlzQ29uc3RydWN0b3JNb2Rlcm4uY2FsbClcbiAgICB8fCAhaXNDb25zdHJ1Y3Rvck1vZGVybihPYmplY3QpXG4gICAgfHwgIWlzQ29uc3RydWN0b3JNb2Rlcm4oZnVuY3Rpb24gKCkgeyBjYWxsZWQgPSB0cnVlOyB9KVxuICAgIHx8IGNhbGxlZDtcbn0pID8gaXNDb25zdHJ1Y3RvckxlZ2FjeSA6IGlzQ29uc3RydWN0b3JNb2Rlcm47XG4iLCJ2YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxuLy8gYSBwYXJ0IG9mIGBBcnJheVNwZWNpZXNDcmVhdGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheXNwZWNpZXNjcmVhdGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsQXJyYXkpIHtcbiAgdmFyIEM7XG4gIGlmIChpc0FycmF5KG9yaWdpbmFsQXJyYXkpKSB7XG4gICAgQyA9IG9yaWdpbmFsQXJyYXkuY29uc3RydWN0b3I7XG4gICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICBpZiAoaXNDb25zdHJ1Y3RvcihDKSAmJiAoQyA9PT0gQXJyYXkgfHwgaXNBcnJheShDLnByb3RvdHlwZSkpKSBDID0gdW5kZWZpbmVkO1xuICAgIGVsc2UgaWYgKGlzT2JqZWN0KEMpKSB7XG4gICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgIGlmIChDID09PSBudWxsKSBDID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSByZXR1cm4gQyA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDO1xufTtcbiIsInZhciBhcnJheVNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG5cbi8vIGBBcnJheVNwZWNpZXNDcmVhdGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheXNwZWNpZXNjcmVhdGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsQXJyYXksIGxlbmd0aCkge1xuICByZXR1cm4gbmV3IChhcnJheVNwZWNpZXNDb25zdHJ1Y3RvcihvcmlnaW5hbEFycmF5KSkobGVuZ3RoID09PSAwID8gMCA6IGxlbmd0aCk7XG59O1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICAvLyBXZSBjYW4ndCB1c2UgdGhpcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbiAgLy8gZGVvcHRpbWl6YXRpb24gYW5kIHNlcmlvdXMgcGVyZm9ybWFuY2UgZGVncmFkYXRpb25cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY3N1xuICByZXR1cm4gVjhfVkVSU0lPTiA+PSA1MSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIHZhciBjb25zdHJ1Y3RvciA9IGFycmF5LmNvbnN0cnVjdG9yID0ge307XG4gICAgY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4geyBmb286IDEgfTtcbiAgICB9O1xuICAgIHJldHVybiBhcnJheVtNRVRIT0RfTkFNRV0oQm9vbGVhbikuZm9vICE9PSAxO1xuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG5cbnZhciBJU19DT05DQVRfU1BSRUFEQUJMRSA9IHdlbGxLbm93blN5bWJvbCgnaXNDb25jYXRTcHJlYWRhYmxlJyk7XG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDB4MUZGRkZGRkZGRkZGRkY7XG52YXIgTUFYSU1VTV9BTExPV0VEX0lOREVYX0VYQ0VFREVEID0gJ01heGltdW0gYWxsb3dlZCBpbmRleCBleGNlZWRlZCc7XG5cbi8vIFdlIGNhbid0IHVzZSB0aGlzIGZlYXR1cmUgZGV0ZWN0aW9uIGluIFY4IHNpbmNlIGl0IGNhdXNlc1xuLy8gZGVvcHRpbWl6YXRpb24gYW5kIHNlcmlvdXMgcGVyZm9ybWFuY2UgZGVncmFkYXRpb25cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzlcbnZhciBJU19DT05DQVRfU1BSRUFEQUJMRV9TVVBQT1JUID0gVjhfVkVSU0lPTiA+PSA1MSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgYXJyYXkgPSBbXTtcbiAgYXJyYXlbSVNfQ09OQ0FUX1NQUkVBREFCTEVdID0gZmFsc2U7XG4gIHJldHVybiBhcnJheS5jb25jYXQoKVswXSAhPT0gYXJyYXk7XG59KTtcblxudmFyIFNQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ2NvbmNhdCcpO1xuXG52YXIgaXNDb25jYXRTcHJlYWRhYmxlID0gZnVuY3Rpb24gKE8pIHtcbiAgaWYgKCFpc09iamVjdChPKSkgcmV0dXJuIGZhbHNlO1xuICB2YXIgc3ByZWFkYWJsZSA9IE9bSVNfQ09OQ0FUX1NQUkVBREFCTEVdO1xuICByZXR1cm4gc3ByZWFkYWJsZSAhPT0gdW5kZWZpbmVkID8gISFzcHJlYWRhYmxlIDogaXNBcnJheShPKTtcbn07XG5cbnZhciBGT1JDRUQgPSAhSVNfQ09OQ0FUX1NQUkVBREFCTEVfU1VQUE9SVCB8fCAhU1BFQ0lFU19TVVBQT1JUO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmNvbmNhdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5jb25jYXRcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBpc0NvbmNhdFNwcmVhZGFibGUgYW5kIEBAc3BlY2llc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgY29uY2F0OiBmdW5jdGlvbiBjb25jYXQoYXJnKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgQSA9IGFycmF5U3BlY2llc0NyZWF0ZShPLCAwKTtcbiAgICB2YXIgbiA9IDA7XG4gICAgdmFyIGksIGssIGxlbmd0aCwgbGVuLCBFO1xuICAgIGZvciAoaSA9IC0xLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIEUgPSBpID09PSAtMSA/IE8gOiBhcmd1bWVudHNbaV07XG4gICAgICBpZiAoaXNDb25jYXRTcHJlYWRhYmxlKEUpKSB7XG4gICAgICAgIGxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKEUpO1xuICAgICAgICBpZiAobiArIGxlbiA+IE1BWF9TQUZFX0lOVEVHRVIpIHRocm93IFR5cGVFcnJvcihNQVhJTVVNX0FMTE9XRURfSU5ERVhfRVhDRUVERUQpO1xuICAgICAgICBmb3IgKGsgPSAwOyBrIDwgbGVuOyBrKyssIG4rKykgaWYgKGsgaW4gRSkgY3JlYXRlUHJvcGVydHkoQSwgbiwgRVtrXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobiA+PSBNQVhfU0FGRV9JTlRFR0VSKSB0aHJvdyBUeXBlRXJyb3IoTUFYSU1VTV9BTExPV0VEX0lOREVYX0VYQ0VFREVEKTtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkoQSwgbisrLCBFKTtcbiAgICAgIH1cbiAgICB9XG4gICAgQS5sZW5ndGggPSBuO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE0LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxudmFyIHJ1bnRpbWUgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgdmFyIE9wID0gT2JqZWN0LnByb3RvdHlwZTtcbiAgdmFyIGhhc093biA9IE9wLmhhc093blByb3BlcnR5O1xuICB2YXIgdW5kZWZpbmVkOyAvLyBNb3JlIGNvbXByZXNzaWJsZSB0aGFuIHZvaWQgMC5cbiAgdmFyICRTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgPyBTeW1ib2wgOiB7fTtcbiAgdmFyIGl0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5pdGVyYXRvciB8fCBcIkBAaXRlcmF0b3JcIjtcbiAgdmFyIGFzeW5jSXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLmFzeW5jSXRlcmF0b3IgfHwgXCJAQGFzeW5jSXRlcmF0b3JcIjtcbiAgdmFyIHRvU3RyaW5nVGFnU3ltYm9sID0gJFN5bWJvbC50b1N0cmluZ1RhZyB8fCBcIkBAdG9TdHJpbmdUYWdcIjtcblxuICBmdW5jdGlvbiBkZWZpbmUob2JqLCBrZXksIHZhbHVlKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgICByZXR1cm4gb2JqW2tleV07XG4gIH1cbiAgdHJ5IHtcbiAgICAvLyBJRSA4IGhhcyBhIGJyb2tlbiBPYmplY3QuZGVmaW5lUHJvcGVydHkgdGhhdCBvbmx5IHdvcmtzIG9uIERPTSBvYmplY3RzLlxuICAgIGRlZmluZSh7fSwgXCJcIik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGRlZmluZSA9IGZ1bmN0aW9uKG9iaiwga2V5LCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIG9ialtrZXldID0gdmFsdWU7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBJZiBvdXRlckZuIHByb3ZpZGVkIGFuZCBvdXRlckZuLnByb3RvdHlwZSBpcyBhIEdlbmVyYXRvciwgdGhlbiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvci5cbiAgICB2YXIgcHJvdG9HZW5lcmF0b3IgPSBvdXRlckZuICYmIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gb3V0ZXJGbiA6IEdlbmVyYXRvcjtcbiAgICB2YXIgZ2VuZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShwcm90b0dlbmVyYXRvci5wcm90b3R5cGUpO1xuICAgIHZhciBjb250ZXh0ID0gbmV3IENvbnRleHQodHJ5TG9jc0xpc3QgfHwgW10pO1xuXG4gICAgLy8gVGhlIC5faW52b2tlIG1ldGhvZCB1bmlmaWVzIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcy5cbiAgICBnZW5lcmF0b3IuX2ludm9rZSA9IG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZ2VuZXJhdG9yO1xuICB9XG4gIGV4cG9ydHMud3JhcCA9IHdyYXA7XG5cbiAgLy8gVHJ5L2NhdGNoIGhlbHBlciB0byBtaW5pbWl6ZSBkZW9wdGltaXphdGlvbnMuIFJldHVybnMgYSBjb21wbGV0aW9uXG4gIC8vIHJlY29yZCBsaWtlIGNvbnRleHQudHJ5RW50cmllc1tpXS5jb21wbGV0aW9uLiBUaGlzIGludGVyZmFjZSBjb3VsZFxuICAvLyBoYXZlIGJlZW4gKGFuZCB3YXMgcHJldmlvdXNseSkgZGVzaWduZWQgdG8gdGFrZSBhIGNsb3N1cmUgdG8gYmVcbiAgLy8gaW52b2tlZCB3aXRob3V0IGFyZ3VtZW50cywgYnV0IGluIGFsbCB0aGUgY2FzZXMgd2UgY2FyZSBhYm91dCB3ZVxuICAvLyBhbHJlYWR5IGhhdmUgYW4gZXhpc3RpbmcgbWV0aG9kIHdlIHdhbnQgdG8gY2FsbCwgc28gdGhlcmUncyBubyBuZWVkXG4gIC8vIHRvIGNyZWF0ZSBhIG5ldyBmdW5jdGlvbiBvYmplY3QuIFdlIGNhbiBldmVuIGdldCBhd2F5IHdpdGggYXNzdW1pbmdcbiAgLy8gdGhlIG1ldGhvZCB0YWtlcyBleGFjdGx5IG9uZSBhcmd1bWVudCwgc2luY2UgdGhhdCBoYXBwZW5zIHRvIGJlIHRydWVcbiAgLy8gaW4gZXZlcnkgY2FzZSwgc28gd2UgZG9uJ3QgaGF2ZSB0byB0b3VjaCB0aGUgYXJndW1lbnRzIG9iamVjdC4gVGhlXG4gIC8vIG9ubHkgYWRkaXRpb25hbCBhbGxvY2F0aW9uIHJlcXVpcmVkIGlzIHRoZSBjb21wbGV0aW9uIHJlY29yZCwgd2hpY2hcbiAgLy8gaGFzIGEgc3RhYmxlIHNoYXBlIGFuZCBzbyBob3BlZnVsbHkgc2hvdWxkIGJlIGNoZWFwIHRvIGFsbG9jYXRlLlxuICBmdW5jdGlvbiB0cnlDYXRjaChmbiwgb2JqLCBhcmcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJub3JtYWxcIiwgYXJnOiBmbi5jYWxsKG9iaiwgYXJnKSB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJ0aHJvd1wiLCBhcmc6IGVyciB9O1xuICAgIH1cbiAgfVxuXG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0ID0gXCJzdXNwZW5kZWRTdGFydFwiO1xuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRZaWVsZCA9IFwic3VzcGVuZGVkWWllbGRcIjtcbiAgdmFyIEdlblN0YXRlRXhlY3V0aW5nID0gXCJleGVjdXRpbmdcIjtcbiAgdmFyIEdlblN0YXRlQ29tcGxldGVkID0gXCJjb21wbGV0ZWRcIjtcblxuICAvLyBSZXR1cm5pbmcgdGhpcyBvYmplY3QgZnJvbSB0aGUgaW5uZXJGbiBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzXG4gIC8vIGJyZWFraW5nIG91dCBvZiB0aGUgZGlzcGF0Y2ggc3dpdGNoIHN0YXRlbWVudC5cbiAgdmFyIENvbnRpbnVlU2VudGluZWwgPSB7fTtcblxuICAvLyBEdW1teSBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgdGhhdCB3ZSB1c2UgYXMgdGhlIC5jb25zdHJ1Y3RvciBhbmRcbiAgLy8gLmNvbnN0cnVjdG9yLnByb3RvdHlwZSBwcm9wZXJ0aWVzIGZvciBmdW5jdGlvbnMgdGhhdCByZXR1cm4gR2VuZXJhdG9yXG4gIC8vIG9iamVjdHMuIEZvciBmdWxsIHNwZWMgY29tcGxpYW5jZSwgeW91IG1heSB3aXNoIHRvIGNvbmZpZ3VyZSB5b3VyXG4gIC8vIG1pbmlmaWVyIG5vdCB0byBtYW5nbGUgdGhlIG5hbWVzIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMuXG4gIGZ1bmN0aW9uIEdlbmVyYXRvcigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUoKSB7fVxuXG4gIC8vIFRoaXMgaXMgYSBwb2x5ZmlsbCBmb3IgJUl0ZXJhdG9yUHJvdG90eXBlJSBmb3IgZW52aXJvbm1lbnRzIHRoYXRcbiAgLy8gZG9uJ3QgbmF0aXZlbHkgc3VwcG9ydCBpdC5cbiAgdmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG4gIEl0ZXJhdG9yUHJvdG90eXBlW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICB2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG4gIHZhciBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvICYmIGdldFByb3RvKGdldFByb3RvKHZhbHVlcyhbXSkpKTtcbiAgaWYgKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICYmXG4gICAgICBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAhPT0gT3AgJiZcbiAgICAgIGhhc093bi5jYWxsKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlLCBpdGVyYXRvclN5bWJvbCkpIHtcbiAgICAvLyBUaGlzIGVudmlyb25tZW50IGhhcyBhIG5hdGl2ZSAlSXRlcmF0b3JQcm90b3R5cGUlOyB1c2UgaXQgaW5zdGVhZFxuICAgIC8vIG9mIHRoZSBwb2x5ZmlsbC5cbiAgICBJdGVyYXRvclByb3RvdHlwZSA9IE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG5cbiAgdmFyIEdwID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID1cbiAgICBHZW5lcmF0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG4gIEdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA9IEdwLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb247XG4gIEdlbmVyYXRvckZ1bmN0aW9uLmRpc3BsYXlOYW1lID0gZGVmaW5lKFxuICAgIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLFxuICAgIHRvU3RyaW5nVGFnU3ltYm9sLFxuICAgIFwiR2VuZXJhdG9yRnVuY3Rpb25cIlxuICApO1xuXG4gIC8vIEhlbHBlciBmb3IgZGVmaW5pbmcgdGhlIC5uZXh0LCAudGhyb3csIGFuZCAucmV0dXJuIG1ldGhvZHMgb2YgdGhlXG4gIC8vIEl0ZXJhdG9yIGludGVyZmFjZSBpbiB0ZXJtcyBvZiBhIHNpbmdsZSAuX2ludm9rZSBtZXRob2QuXG4gIGZ1bmN0aW9uIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhwcm90b3R5cGUpIHtcbiAgICBbXCJuZXh0XCIsIFwidGhyb3dcIiwgXCJyZXR1cm5cIl0uZm9yRWFjaChmdW5jdGlvbihtZXRob2QpIHtcbiAgICAgIGRlZmluZShwcm90b3R5cGUsIG1ldGhvZCwgZnVuY3Rpb24oYXJnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnZva2UobWV0aG9kLCBhcmcpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBleHBvcnRzLmlzR2VuZXJhdG9yRnVuY3Rpb24gPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICB2YXIgY3RvciA9IHR5cGVvZiBnZW5GdW4gPT09IFwiZnVuY3Rpb25cIiAmJiBnZW5GdW4uY29uc3RydWN0b3I7XG4gICAgcmV0dXJuIGN0b3JcbiAgICAgID8gY3RvciA9PT0gR2VuZXJhdG9yRnVuY3Rpb24gfHxcbiAgICAgICAgLy8gRm9yIHRoZSBuYXRpdmUgR2VuZXJhdG9yRnVuY3Rpb24gY29uc3RydWN0b3IsIHRoZSBiZXN0IHdlIGNhblxuICAgICAgICAvLyBkbyBpcyB0byBjaGVjayBpdHMgLm5hbWUgcHJvcGVydHkuXG4gICAgICAgIChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkgPT09IFwiR2VuZXJhdG9yRnVuY3Rpb25cIlxuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuICBleHBvcnRzLm1hcmsgPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSB7XG4gICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoZ2VuRnVuLCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdlbkZ1bi5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgICAgIGRlZmluZShnZW5GdW4sIHRvU3RyaW5nVGFnU3ltYm9sLCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIpO1xuICAgIH1cbiAgICBnZW5GdW4ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShHcCk7XG4gICAgcmV0dXJuIGdlbkZ1bjtcbiAgfTtcblxuICAvLyBXaXRoaW4gdGhlIGJvZHkgb2YgYW55IGFzeW5jIGZ1bmN0aW9uLCBgYXdhaXQgeGAgaXMgdHJhbnNmb3JtZWQgdG9cbiAgLy8gYHlpZWxkIHJlZ2VuZXJhdG9yUnVudGltZS5hd3JhcCh4KWAsIHNvIHRoYXQgdGhlIHJ1bnRpbWUgY2FuIHRlc3RcbiAgLy8gYGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIilgIHRvIGRldGVybWluZSBpZiB0aGUgeWllbGRlZCB2YWx1ZSBpc1xuICAvLyBtZWFudCB0byBiZSBhd2FpdGVkLlxuICBleHBvcnRzLmF3cmFwID0gZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIHsgX19hd2FpdDogYXJnIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gQXN5bmNJdGVyYXRvcihnZW5lcmF0b3IsIFByb21pc2VJbXBsKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChnZW5lcmF0b3JbbWV0aG9kXSwgZ2VuZXJhdG9yLCBhcmcpO1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgcmVqZWN0KHJlY29yZC5hcmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlY29yZC5hcmc7XG4gICAgICAgIHZhciB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlICYmXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIikpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZUltcGwucmVzb2x2ZSh2YWx1ZS5fX2F3YWl0KS50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJuZXh0XCIsIHZhbHVlLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0sIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgaW52b2tlKFwidGhyb3dcIiwgZXJyLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2VJbXBsLnJlc29sdmUodmFsdWUpLnRoZW4oZnVuY3Rpb24odW53cmFwcGVkKSB7XG4gICAgICAgICAgLy8gV2hlbiBhIHlpZWxkZWQgUHJvbWlzZSBpcyByZXNvbHZlZCwgaXRzIGZpbmFsIHZhbHVlIGJlY29tZXNcbiAgICAgICAgICAvLyB0aGUgLnZhbHVlIG9mIHRoZSBQcm9taXNlPHt2YWx1ZSxkb25lfT4gcmVzdWx0IGZvciB0aGVcbiAgICAgICAgICAvLyBjdXJyZW50IGl0ZXJhdGlvbi5cbiAgICAgICAgICByZXN1bHQudmFsdWUgPSB1bndyYXBwZWQ7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9LCBmdW5jdGlvbihlcnJvcikge1xuICAgICAgICAgIC8vIElmIGEgcmVqZWN0ZWQgUHJvbWlzZSB3YXMgeWllbGRlZCwgdGhyb3cgdGhlIHJlamVjdGlvbiBiYWNrXG4gICAgICAgICAgLy8gaW50byB0aGUgYXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIHNvIGl0IGNhbiBiZSBoYW5kbGVkIHRoZXJlLlxuICAgICAgICAgIHJldHVybiBpbnZva2UoXCJ0aHJvd1wiLCBlcnJvciwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHByZXZpb3VzUHJvbWlzZTtcblxuICAgIGZ1bmN0aW9uIGVucXVldWUobWV0aG9kLCBhcmcpIHtcbiAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2VJbXBsKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcmV2aW91c1Byb21pc2UgPVxuICAgICAgICAvLyBJZiBlbnF1ZXVlIGhhcyBiZWVuIGNhbGxlZCBiZWZvcmUsIHRoZW4gd2Ugd2FudCB0byB3YWl0IHVudGlsXG4gICAgICAgIC8vIGFsbCBwcmV2aW91cyBQcm9taXNlcyBoYXZlIGJlZW4gcmVzb2x2ZWQgYmVmb3JlIGNhbGxpbmcgaW52b2tlLFxuICAgICAgICAvLyBzbyB0aGF0IHJlc3VsdHMgYXJlIGFsd2F5cyBkZWxpdmVyZWQgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuIElmXG4gICAgICAgIC8vIGVucXVldWUgaGFzIG5vdCBiZWVuIGNhbGxlZCBiZWZvcmUsIHRoZW4gaXQgaXMgaW1wb3J0YW50IHRvXG4gICAgICAgIC8vIGNhbGwgaW52b2tlIGltbWVkaWF0ZWx5LCB3aXRob3V0IHdhaXRpbmcgb24gYSBjYWxsYmFjayB0byBmaXJlLFxuICAgICAgICAvLyBzbyB0aGF0IHRoZSBhc3luYyBnZW5lcmF0b3IgZnVuY3Rpb24gaGFzIHRoZSBvcHBvcnR1bml0eSB0byBkb1xuICAgICAgICAvLyBhbnkgbmVjZXNzYXJ5IHNldHVwIGluIGEgcHJlZGljdGFibGUgd2F5LiBUaGlzIHByZWRpY3RhYmlsaXR5XG4gICAgICAgIC8vIGlzIHdoeSB0aGUgUHJvbWlzZSBjb25zdHJ1Y3RvciBzeW5jaHJvbm91c2x5IGludm9rZXMgaXRzXG4gICAgICAgIC8vIGV4ZWN1dG9yIGNhbGxiYWNrLCBhbmQgd2h5IGFzeW5jIGZ1bmN0aW9ucyBzeW5jaHJvbm91c2x5XG4gICAgICAgIC8vIGV4ZWN1dGUgY29kZSBiZWZvcmUgdGhlIGZpcnN0IGF3YWl0LiBTaW5jZSB3ZSBpbXBsZW1lbnQgc2ltcGxlXG4gICAgICAgIC8vIGFzeW5jIGZ1bmN0aW9ucyBpbiB0ZXJtcyBvZiBhc3luYyBnZW5lcmF0b3JzLCBpdCBpcyBlc3BlY2lhbGx5XG4gICAgICAgIC8vIGltcG9ydGFudCB0byBnZXQgdGhpcyByaWdodCwgZXZlbiB0aG91Z2ggaXQgcmVxdWlyZXMgY2FyZS5cbiAgICAgICAgcHJldmlvdXNQcm9taXNlID8gcHJldmlvdXNQcm9taXNlLnRoZW4oXG4gICAgICAgICAgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcsXG4gICAgICAgICAgLy8gQXZvaWQgcHJvcGFnYXRpbmcgZmFpbHVyZXMgdG8gUHJvbWlzZXMgcmV0dXJuZWQgYnkgbGF0ZXJcbiAgICAgICAgICAvLyBpbnZvY2F0aW9ucyBvZiB0aGUgaXRlcmF0b3IuXG4gICAgICAgICAgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmdcbiAgICAgICAgKSA6IGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCk7XG4gICAgfVxuXG4gICAgLy8gRGVmaW5lIHRoZSB1bmlmaWVkIGhlbHBlciBtZXRob2QgdGhhdCBpcyB1c2VkIHRvIGltcGxlbWVudCAubmV4dCxcbiAgICAvLyAudGhyb3csIGFuZCAucmV0dXJuIChzZWUgZGVmaW5lSXRlcmF0b3JNZXRob2RzKS5cbiAgICB0aGlzLl9pbnZva2UgPSBlbnF1ZXVlO1xuICB9XG5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlKTtcbiAgQXN5bmNJdGVyYXRvci5wcm90b3R5cGVbYXN5bmNJdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIGV4cG9ydHMuQXN5bmNJdGVyYXRvciA9IEFzeW5jSXRlcmF0b3I7XG5cbiAgLy8gTm90ZSB0aGF0IHNpbXBsZSBhc3luYyBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkIG9uIHRvcCBvZlxuICAvLyBBc3luY0l0ZXJhdG9yIG9iamVjdHM7IHRoZXkganVzdCByZXR1cm4gYSBQcm9taXNlIGZvciB0aGUgdmFsdWUgb2ZcbiAgLy8gdGhlIGZpbmFsIHJlc3VsdCBwcm9kdWNlZCBieSB0aGUgaXRlcmF0b3IuXG4gIGV4cG9ydHMuYXN5bmMgPSBmdW5jdGlvbihpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCwgUHJvbWlzZUltcGwpIHtcbiAgICBpZiAoUHJvbWlzZUltcGwgPT09IHZvaWQgMCkgUHJvbWlzZUltcGwgPSBQcm9taXNlO1xuXG4gICAgdmFyIGl0ZXIgPSBuZXcgQXN5bmNJdGVyYXRvcihcbiAgICAgIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpLFxuICAgICAgUHJvbWlzZUltcGxcbiAgICApO1xuXG4gICAgcmV0dXJuIGV4cG9ydHMuaXNHZW5lcmF0b3JGdW5jdGlvbihvdXRlckZuKVxuICAgICAgPyBpdGVyIC8vIElmIG91dGVyRm4gaXMgYSBnZW5lcmF0b3IsIHJldHVybiB0aGUgZnVsbCBpdGVyYXRvci5cbiAgICAgIDogaXRlci5uZXh0KCkudGhlbihmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0LmRvbmUgPyByZXN1bHQudmFsdWUgOiBpdGVyLm5leHQoKTtcbiAgICAgICAgfSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KSB7XG4gICAgdmFyIHN0YXRlID0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydDtcblxuICAgIHJldHVybiBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcpIHtcbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVFeGVjdXRpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUNvbXBsZXRlZCkge1xuICAgICAgICBpZiAobWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICB0aHJvdyBhcmc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCZSBmb3JnaXZpbmcsIHBlciAyNS4zLjMuMy4zIG9mIHRoZSBzcGVjOlxuICAgICAgICAvLyBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtZ2VuZXJhdG9ycmVzdW1lXG4gICAgICAgIHJldHVybiBkb25lUmVzdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQubWV0aG9kID0gbWV0aG9kO1xuICAgICAgY29udGV4dC5hcmcgPSBhcmc7XG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGNvbnRleHQuZGVsZWdhdGU7XG4gICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgICAgIHZhciBkZWxlZ2F0ZVJlc3VsdCA9IG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0ID09PSBDb250aW51ZVNlbnRpbmVsKSBjb250aW51ZTtcbiAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZVJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgICBjb250ZXh0LnNlbnQgPSBjb250ZXh0Ll9zZW50ID0gY29udGV4dC5hcmc7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0KSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgICAgdGhyb3cgY29udGV4dC5hcmc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZyk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICAgIGNvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGNvbnRleHQuYXJnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlID0gR2VuU3RhdGVFeGVjdXRpbmc7XG5cbiAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIpIHtcbiAgICAgICAgICAvLyBJZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGZyb20gaW5uZXJGbiwgd2UgbGVhdmUgc3RhdGUgPT09XG4gICAgICAgICAgLy8gR2VuU3RhdGVFeGVjdXRpbmcgYW5kIGxvb3AgYmFjayBmb3IgYW5vdGhlciBpbnZvY2F0aW9uLlxuICAgICAgICAgIHN0YXRlID0gY29udGV4dC5kb25lXG4gICAgICAgICAgICA/IEdlblN0YXRlQ29tcGxldGVkXG4gICAgICAgICAgICA6IEdlblN0YXRlU3VzcGVuZGVkWWllbGQ7XG5cbiAgICAgICAgICBpZiAocmVjb3JkLmFyZyA9PT0gQ29udGludWVTZW50aW5lbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiByZWNvcmQuYXJnLFxuICAgICAgICAgICAgZG9uZTogY29udGV4dC5kb25lXG4gICAgICAgICAgfTtcblxuICAgICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgIC8vIERpc3BhdGNoIHRoZSBleGNlcHRpb24gYnkgbG9vcGluZyBiYWNrIGFyb3VuZCB0byB0aGVcbiAgICAgICAgICAvLyBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKSBjYWxsIGFib3ZlLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBDYWxsIGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXShjb250ZXh0LmFyZykgYW5kIGhhbmRsZSB0aGVcbiAgLy8gcmVzdWx0LCBlaXRoZXIgYnkgcmV0dXJuaW5nIGEgeyB2YWx1ZSwgZG9uZSB9IHJlc3VsdCBmcm9tIHRoZVxuICAvLyBkZWxlZ2F0ZSBpdGVyYXRvciwgb3IgYnkgbW9kaWZ5aW5nIGNvbnRleHQubWV0aG9kIGFuZCBjb250ZXh0LmFyZyxcbiAgLy8gc2V0dGluZyBjb250ZXh0LmRlbGVnYXRlIHRvIG51bGwsIGFuZCByZXR1cm5pbmcgdGhlIENvbnRpbnVlU2VudGluZWwuXG4gIGZ1bmN0aW9uIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdO1xuICAgIGlmIChtZXRob2QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQSAudGhyb3cgb3IgLnJldHVybiB3aGVuIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgbm8gLnRocm93XG4gICAgICAvLyBtZXRob2QgYWx3YXlzIHRlcm1pbmF0ZXMgdGhlIHlpZWxkKiBsb29wLlxuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIC8vIE5vdGU6IFtcInJldHVyblwiXSBtdXN0IGJlIHVzZWQgZm9yIEVTMyBwYXJzaW5nIGNvbXBhdGliaWxpdHkuXG4gICAgICAgIGlmIChkZWxlZ2F0ZS5pdGVyYXRvcltcInJldHVyblwiXSkge1xuICAgICAgICAgIC8vIElmIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgYSByZXR1cm4gbWV0aG9kLCBnaXZlIGl0IGFcbiAgICAgICAgICAvLyBjaGFuY2UgdG8gY2xlYW4gdXAuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInJldHVyblwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICAgIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgIC8vIElmIG1heWJlSW52b2tlRGVsZWdhdGUoY29udGV4dCkgY2hhbmdlZCBjb250ZXh0Lm1ldGhvZCBmcm9tXG4gICAgICAgICAgICAvLyBcInJldHVyblwiIHRvIFwidGhyb3dcIiwgbGV0IHRoYXQgb3ZlcnJpZGUgdGhlIFR5cGVFcnJvciBiZWxvdy5cbiAgICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgXCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICd0aHJvdycgbWV0aG9kXCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2gobWV0aG9kLCBkZWxlZ2F0ZS5pdGVyYXRvciwgY29udGV4dC5hcmcpO1xuXG4gICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICB2YXIgaW5mbyA9IHJlY29yZC5hcmc7XG5cbiAgICBpZiAoISBpbmZvKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0XCIpO1xuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICBpZiAoaW5mby5kb25lKSB7XG4gICAgICAvLyBBc3NpZ24gdGhlIHJlc3VsdCBvZiB0aGUgZmluaXNoZWQgZGVsZWdhdGUgdG8gdGhlIHRlbXBvcmFyeVxuICAgICAgLy8gdmFyaWFibGUgc3BlY2lmaWVkIGJ5IGRlbGVnYXRlLnJlc3VsdE5hbWUgKHNlZSBkZWxlZ2F0ZVlpZWxkKS5cbiAgICAgIGNvbnRleHRbZGVsZWdhdGUucmVzdWx0TmFtZV0gPSBpbmZvLnZhbHVlO1xuXG4gICAgICAvLyBSZXN1bWUgZXhlY3V0aW9uIGF0IHRoZSBkZXNpcmVkIGxvY2F0aW9uIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0Lm5leHQgPSBkZWxlZ2F0ZS5uZXh0TG9jO1xuXG4gICAgICAvLyBJZiBjb250ZXh0Lm1ldGhvZCB3YXMgXCJ0aHJvd1wiIGJ1dCB0aGUgZGVsZWdhdGUgaGFuZGxlZCB0aGVcbiAgICAgIC8vIGV4Y2VwdGlvbiwgbGV0IHRoZSBvdXRlciBnZW5lcmF0b3IgcHJvY2VlZCBub3JtYWxseS4gSWZcbiAgICAgIC8vIGNvbnRleHQubWV0aG9kIHdhcyBcIm5leHRcIiwgZm9yZ2V0IGNvbnRleHQuYXJnIHNpbmNlIGl0IGhhcyBiZWVuXG4gICAgICAvLyBcImNvbnN1bWVkXCIgYnkgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yLiBJZiBjb250ZXh0Lm1ldGhvZCB3YXNcbiAgICAgIC8vIFwicmV0dXJuXCIsIGFsbG93IHRoZSBvcmlnaW5hbCAucmV0dXJuIGNhbGwgdG8gY29udGludWUgaW4gdGhlXG4gICAgICAvLyBvdXRlciBnZW5lcmF0b3IuXG4gICAgICBpZiAoY29udGV4dC5tZXRob2QgIT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgY29udGV4dC5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmUteWllbGQgdGhlIHJlc3VsdCByZXR1cm5lZCBieSB0aGUgZGVsZWdhdGUgbWV0aG9kLlxuICAgICAgcmV0dXJuIGluZm87XG4gICAgfVxuXG4gICAgLy8gVGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGlzIGZpbmlzaGVkLCBzbyBmb3JnZXQgaXQgYW5kIGNvbnRpbnVlIHdpdGhcbiAgICAvLyB0aGUgb3V0ZXIgZ2VuZXJhdG9yLlxuICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICB9XG5cbiAgLy8gRGVmaW5lIEdlbmVyYXRvci5wcm90b3R5cGUue25leHQsdGhyb3cscmV0dXJufSBpbiB0ZXJtcyBvZiB0aGVcbiAgLy8gdW5pZmllZCAuX2ludm9rZSBoZWxwZXIgbWV0aG9kLlxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoR3ApO1xuXG4gIGRlZmluZShHcCwgdG9TdHJpbmdUYWdTeW1ib2wsIFwiR2VuZXJhdG9yXCIpO1xuXG4gIC8vIEEgR2VuZXJhdG9yIHNob3VsZCBhbHdheXMgcmV0dXJuIGl0c2VsZiBhcyB0aGUgaXRlcmF0b3Igb2JqZWN0IHdoZW4gdGhlXG4gIC8vIEBAaXRlcmF0b3IgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGl0LiBTb21lIGJyb3dzZXJzJyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlXG4gIC8vIGl0ZXJhdG9yIHByb3RvdHlwZSBjaGFpbiBpbmNvcnJlY3RseSBpbXBsZW1lbnQgdGhpcywgY2F1c2luZyB0aGUgR2VuZXJhdG9yXG4gIC8vIG9iamVjdCB0byBub3QgYmUgcmV0dXJuZWQgZnJvbSB0aGlzIGNhbGwuIFRoaXMgZW5zdXJlcyB0aGF0IGRvZXNuJ3QgaGFwcGVuLlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2lzc3Vlcy8yNzQgZm9yIG1vcmUgZGV0YWlscy5cbiAgR3BbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgR3AudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfTtcblxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuICAgIHZhciBlbnRyeSA9IHsgdHJ5TG9jOiBsb2NzWzBdIH07XG5cbiAgICBpZiAoMSBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV07XG4gICAgfVxuXG4gICAgaWYgKDIgaW4gbG9jcykge1xuICAgICAgZW50cnkuZmluYWxseUxvYyA9IGxvY3NbMl07XG4gICAgICBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM107XG4gICAgfVxuXG4gICAgdGhpcy50cnlFbnRyaWVzLnB1c2goZW50cnkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIjtcbiAgICBkZWxldGUgcmVjb3JkLmFyZztcbiAgICBlbnRyeS5jb21wbGV0aW9uID0gcmVjb3JkO1xuICB9XG5cbiAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuICAgIC8vIFRoZSByb290IGVudHJ5IG9iamVjdCAoZWZmZWN0aXZlbHkgYSB0cnkgc3RhdGVtZW50IHdpdGhvdXQgYSBjYXRjaFxuICAgIC8vIG9yIGEgZmluYWxseSBibG9jaykgZ2l2ZXMgdXMgYSBwbGFjZSB0byBzdG9yZSB2YWx1ZXMgdGhyb3duIGZyb21cbiAgICAvLyBsb2NhdGlvbnMgd2hlcmUgdGhlcmUgaXMgbm8gZW5jbG9zaW5nIHRyeSBzdGF0ZW1lbnQuXG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3sgdHJ5TG9jOiBcInJvb3RcIiB9XTtcbiAgICB0cnlMb2NzTGlzdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyk7XG4gICAgdGhpcy5yZXNldCh0cnVlKTtcbiAgfVxuXG4gIGV4cG9ydHMua2V5cyA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICAgIGtleXMucmV2ZXJzZSgpO1xuXG4gICAgLy8gUmF0aGVyIHRoYW4gcmV0dXJuaW5nIGFuIG9iamVjdCB3aXRoIGEgbmV4dCBtZXRob2QsIHdlIGtlZXBcbiAgICAvLyB0aGluZ3Mgc2ltcGxlIGFuZCByZXR1cm4gdGhlIG5leHQgZnVuY3Rpb24gaXRzZWxmLlxuICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgd2hpbGUgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkge1xuICAgICAgICAgIG5leHQudmFsdWUgPSBrZXk7XG4gICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVG8gYXZvaWQgY3JlYXRpbmcgYW4gYWRkaXRpb25hbCBvYmplY3QsIHdlIGp1c3QgaGFuZyB0aGUgLnZhbHVlXG4gICAgICAvLyBhbmQgLmRvbmUgcHJvcGVydGllcyBvZmYgdGhlIG5leHQgZnVuY3Rpb24gb2JqZWN0IGl0c2VsZi4gVGhpc1xuICAgICAgLy8gYWxzbyBlbnN1cmVzIHRoYXQgdGhlIG1pbmlmaWVyIHdpbGwgbm90IGFub255bWl6ZSB0aGUgZnVuY3Rpb24uXG4gICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiB2YWx1ZXMoaXRlcmFibGUpIHtcbiAgICBpZiAoaXRlcmFibGUpIHtcbiAgICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGl0ZXJhYmxlW2l0ZXJhdG9yU3ltYm9sXTtcbiAgICAgIGlmIChpdGVyYXRvck1ldGhvZCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JNZXRob2QuY2FsbChpdGVyYWJsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmFibGUubmV4dCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBpdGVyYWJsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc05hTihpdGVyYWJsZS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBpID0gLTEsIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgIHdoaWxlICgrK2kgPCBpdGVyYWJsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd24uY2FsbChpdGVyYWJsZSwgaSkpIHtcbiAgICAgICAgICAgICAgbmV4dC52YWx1ZSA9IGl0ZXJhYmxlW2ldO1xuICAgICAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV4dC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuXG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG5leHQubmV4dCA9IG5leHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGFuIGl0ZXJhdG9yIHdpdGggbm8gdmFsdWVzLlxuICAgIHJldHVybiB7IG5leHQ6IGRvbmVSZXN1bHQgfTtcbiAgfVxuICBleHBvcnRzLnZhbHVlcyA9IHZhbHVlcztcblxuICBmdW5jdGlvbiBkb25lUmVzdWx0KCkge1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuXG4gIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKHNraXBUZW1wUmVzZXQpIHtcbiAgICAgIHRoaXMucHJldiA9IDA7XG4gICAgICB0aGlzLm5leHQgPSAwO1xuICAgICAgLy8gUmVzZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuXG4gICAgICB0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChyZXNldFRyeUVudHJ5KTtcblxuICAgICAgaWYgKCFza2lwVGVtcFJlc2V0KSB7XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcykge1xuICAgICAgICAgIC8vIE5vdCBzdXJlIGFib3V0IHRoZSBvcHRpbWFsIG9yZGVyIG9mIHRoZXNlIGNvbmRpdGlvbnM6XG4gICAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09PSBcInRcIiAmJlxuICAgICAgICAgICAgICBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJlxuICAgICAgICAgICAgICAhaXNOYU4oK25hbWUuc2xpY2UoMSkpKSB7XG4gICAgICAgICAgICB0aGlzW25hbWVdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG5cbiAgICAgIHZhciByb290RW50cnkgPSB0aGlzLnRyeUVudHJpZXNbMF07XG4gICAgICB2YXIgcm9vdFJlY29yZCA9IHJvb3RFbnRyeS5jb21wbGV0aW9uO1xuICAgICAgaWYgKHJvb3RSZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJvb3RSZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG5cbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24oZXhjZXB0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgIHRocm93IGV4Y2VwdGlvbjtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKGxvYywgY2F1Z2h0KSB7XG4gICAgICAgIHJlY29yZC50eXBlID0gXCJ0aHJvd1wiO1xuICAgICAgICByZWNvcmQuYXJnID0gZXhjZXB0aW9uO1xuICAgICAgICBjb250ZXh0Lm5leHQgPSBsb2M7XG5cbiAgICAgICAgaWYgKGNhdWdodCkge1xuICAgICAgICAgIC8vIElmIHRoZSBkaXNwYXRjaGVkIGV4Y2VwdGlvbiB3YXMgY2F1Z2h0IGJ5IGEgY2F0Y2ggYmxvY2ssXG4gICAgICAgICAgLy8gdGhlbiBsZXQgdGhhdCBjYXRjaCBibG9jayBoYW5kbGUgdGhlIGV4Y2VwdGlvbiBub3JtYWxseS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICEhIGNhdWdodDtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IFwicm9vdFwiKSB7XG4gICAgICAgICAgLy8gRXhjZXB0aW9uIHRocm93biBvdXRzaWRlIG9mIGFueSB0cnkgYmxvY2sgdGhhdCBjb3VsZCBoYW5kbGVcbiAgICAgICAgICAvLyBpdCwgc28gc2V0IHRoZSBjb21wbGV0aW9uIHZhbHVlIG9mIHRoZSBlbnRpcmUgZnVuY3Rpb24gdG9cbiAgICAgICAgICAvLyB0aHJvdyB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpO1xuICAgICAgICAgIHZhciBoYXNGaW5hbGx5ID0gaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKTtcblxuICAgICAgICAgIGlmIChoYXNDYXRjaCAmJiBoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2F0Y2gpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWJydXB0OiBmdW5jdGlvbih0eXBlLCBhcmcpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKSAmJlxuICAgICAgICAgICAgdGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmluYWxseUVudHJ5ICYmXG4gICAgICAgICAgKHR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgICB0eXBlID09PSBcImNvbnRpbnVlXCIpICYmXG4gICAgICAgICAgZmluYWxseUVudHJ5LnRyeUxvYyA8PSBhcmcgJiZcbiAgICAgICAgICBhcmcgPD0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgLy8gSWdub3JlIHRoZSBmaW5hbGx5IGVudHJ5IGlmIGNvbnRyb2wgaXMgbm90IGp1bXBpbmcgdG8gYVxuICAgICAgICAvLyBsb2NhdGlvbiBvdXRzaWRlIHRoZSB0cnkvY2F0Y2ggYmxvY2suXG4gICAgICAgIGZpbmFsbHlFbnRyeSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWNvcmQgPSBmaW5hbGx5RW50cnkgPyBmaW5hbGx5RW50cnkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmVjb3JkLnR5cGUgPSB0eXBlO1xuICAgICAgcmVjb3JkLmFyZyA9IGFyZztcblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSkge1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICB0aGlzLm5leHQgPSBmaW5hbGx5RW50cnkuZmluYWxseUxvYztcbiAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBsZXRlKHJlY29yZCk7XG4gICAgfSxcblxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbihyZWNvcmQsIGFmdGVyTG9jKSB7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgIHJlY29yZC50eXBlID09PSBcImNvbnRpbnVlXCIpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gcmVjb3JkLmFyZztcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgdGhpcy5ydmFsID0gdGhpcy5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgIHRoaXMubmV4dCA9IFwiZW5kXCI7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiICYmIGFmdGVyTG9jKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IGFmdGVyTG9jO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9LFxuXG4gICAgZmluaXNoOiBmdW5jdGlvbihmaW5hbGx5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LmZpbmFsbHlMb2MgPT09IGZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB0aGlzLmNvbXBsZXRlKGVudHJ5LmNvbXBsZXRpb24sIGVudHJ5LmFmdGVyTG9jKTtcbiAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uKHRyeUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IHRyeUxvYykge1xuICAgICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICB2YXIgdGhyb3duID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhyb3duO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBjb250ZXh0LmNhdGNoIG1ldGhvZCBtdXN0IG9ubHkgYmUgY2FsbGVkIHdpdGggYSBsb2NhdGlvblxuICAgICAgLy8gYXJndW1lbnQgdGhhdCBjb3JyZXNwb25kcyB0byBhIGtub3duIGNhdGNoIGJsb2NrLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG5cbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbihpdGVyYWJsZSwgcmVzdWx0TmFtZSwgbmV4dExvYykge1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhpdGVyYWJsZSksXG4gICAgICAgIHJlc3VsdE5hbWU6IHJlc3VsdE5hbWUsXG4gICAgICAgIG5leHRMb2M6IG5leHRMb2NcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgLy8gRGVsaWJlcmF0ZWx5IGZvcmdldCB0aGUgbGFzdCBzZW50IHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3RcbiAgICAgICAgLy8gYWNjaWRlbnRhbGx5IHBhc3MgaXQgb24gdG8gdGhlIGRlbGVnYXRlLlxuICAgICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuICB9O1xuXG4gIC8vIFJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGlzIHNjcmlwdCBpcyBleGVjdXRpbmcgYXMgYSBDb21tb25KUyBtb2R1bGVcbiAgLy8gb3Igbm90LCByZXR1cm4gdGhlIHJ1bnRpbWUgb2JqZWN0IHNvIHRoYXQgd2UgY2FuIGRlY2xhcmUgdGhlIHZhcmlhYmxlXG4gIC8vIHJlZ2VuZXJhdG9yUnVudGltZSBpbiB0aGUgb3V0ZXIgc2NvcGUsIHdoaWNoIGFsbG93cyB0aGlzIG1vZHVsZSB0byBiZVxuICAvLyBpbmplY3RlZCBlYXNpbHkgYnkgYGJpbi9yZWdlbmVyYXRvciAtLWluY2x1ZGUtcnVudGltZSBzY3JpcHQuanNgLlxuICByZXR1cm4gZXhwb3J0cztcblxufShcbiAgLy8gSWYgdGhpcyBzY3JpcHQgaXMgZXhlY3V0aW5nIGFzIGEgQ29tbW9uSlMgbW9kdWxlLCB1c2UgbW9kdWxlLmV4cG9ydHNcbiAgLy8gYXMgdGhlIHJlZ2VuZXJhdG9yUnVudGltZSBuYW1lc3BhY2UuIE90aGVyd2lzZSBjcmVhdGUgYSBuZXcgZW1wdHlcbiAgLy8gb2JqZWN0LiBFaXRoZXIgd2F5LCB0aGUgcmVzdWx0aW5nIG9iamVjdCB3aWxsIGJlIHVzZWQgdG8gaW5pdGlhbGl6ZVxuICAvLyB0aGUgcmVnZW5lcmF0b3JSdW50aW1lIHZhcmlhYmxlIGF0IHRoZSB0b3Agb2YgdGhpcyBmaWxlLlxuICB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiID8gbW9kdWxlLmV4cG9ydHMgOiB7fVxuKSk7XG5cbnRyeSB7XG4gIHJlZ2VuZXJhdG9yUnVudGltZSA9IHJ1bnRpbWU7XG59IGNhdGNoIChhY2NpZGVudGFsU3RyaWN0TW9kZSkge1xuICAvLyBUaGlzIG1vZHVsZSBzaG91bGQgbm90IGJlIHJ1bm5pbmcgaW4gc3RyaWN0IG1vZGUsIHNvIHRoZSBhYm92ZVxuICAvLyBhc3NpZ25tZW50IHNob3VsZCBhbHdheXMgd29yayB1bmxlc3Mgc29tZXRoaW5nIGlzIG1pc2NvbmZpZ3VyZWQuIEp1c3RcbiAgLy8gaW4gY2FzZSBydW50aW1lLmpzIGFjY2lkZW50YWxseSBydW5zIGluIHN0cmljdCBtb2RlLCB3ZSBjYW4gZXNjYXBlXG4gIC8vIHN0cmljdCBtb2RlIHVzaW5nIGEgZ2xvYmFsIEZ1bmN0aW9uIGNhbGwuIFRoaXMgY291bGQgY29uY2VpdmFibHkgZmFpbFxuICAvLyBpZiBhIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IGZvcmJpZHMgdXNpbmcgRnVuY3Rpb24sIGJ1dCBpbiB0aGF0IGNhc2VcbiAgLy8gdGhlIHByb3BlciBzb2x1dGlvbiBpcyB0byBmaXggdGhlIGFjY2lkZW50YWwgc3RyaWN0IG1vZGUgcHJvYmxlbS4gSWZcbiAgLy8geW91J3ZlIG1pc2NvbmZpZ3VyZWQgeW91ciBidW5kbGVyIHRvIGZvcmNlIHN0cmljdCBtb2RlIGFuZCBhcHBsaWVkIGFcbiAgLy8gQ1NQIHRvIGZvcmJpZCBGdW5jdGlvbiwgYW5kIHlvdSdyZSBub3Qgd2lsbGluZyB0byBmaXggZWl0aGVyIG9mIHRob3NlXG4gIC8vIHByb2JsZW1zLCBwbGVhc2UgZGV0YWlsIHlvdXIgdW5pcXVlIHByZWRpY2FtZW50IGluIGEgR2l0SHViIGlzc3VlLlxuICBGdW5jdGlvbihcInJcIiwgXCJyZWdlbmVyYXRvclJ1bnRpbWUgPSByXCIpKHJ1bnRpbWUpO1xufVxuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgRlVOQ1RJT05fTkFNRV9FWElTVFMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpLkVYSVNUUztcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIEZ1bmN0aW9uUHJvdG90eXBlVG9TdHJpbmcgPSBGdW5jdGlvblByb3RvdHlwZS50b1N0cmluZztcbnZhciBuYW1lUkUgPSAvXlxccypmdW5jdGlvbiAoW14gKF0qKS87XG52YXIgTkFNRSA9ICduYW1lJztcblxuLy8gRnVuY3Rpb24gaW5zdGFuY2VzIGAubmFtZWAgcHJvcGVydHlcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZnVuY3Rpb24taW5zdGFuY2VzLW5hbWVcbmlmIChERVNDUklQVE9SUyAmJiAhRlVOQ1RJT05fTkFNRV9FWElTVFMpIHtcbiAgZGVmaW5lUHJvcGVydHkoRnVuY3Rpb25Qcm90b3R5cGUsIE5BTUUsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gRnVuY3Rpb25Qcm90b3R5cGVUb1N0cmluZy5jYWxsKHRoaXMpLm1hdGNoKG5hbWVSRSlbMV07XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cbiIsInR5cGUgUGxhdGZvcm0gPSBcIkJyb3dzZXJcIiB8IFwiTm9kZS5qc1wiO1xuXG5leHBvcnQgY2xhc3MgVW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBwdWJsaWMgcGxhdGZvcm06IFBsYXRmb3JtO1xuXG4gIGNvbnN0cnVjdG9yKHBsYXRmb3JtOiBQbGF0Zm9ybSkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBgVGhpcyBmdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGluICR7cGxhdGZvcm19IGVudmlyb25tZW50YDtcbiAgICBzdXBlcihtZXNzYWdlKTtcblxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0Vycm9yI0N1c3RvbV9FcnJvcl9UeXBlc1xuICAgIC8vIE1haW50YWlucyBwcm9wZXIgc3RhY2sgdHJhY2UgZm9yIHdoZXJlIG91ciBlcnJvciB3YXMgdGhyb3duIChvbmx5IGF2YWlsYWJsZSBvbiBWOClcbiAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFVuc3VwcG9ydGVkUGxhdGZvcm1FcnJvcik7XG4gICAgfVxuXG4gICAgdGhpcy5uYW1lID0gXCJVbnN1cHBvcnRlZFBsYXRmb3JtRXJyb3JcIjtcbiAgICB0aGlzLnBsYXRmb3JtID0gcGxhdGZvcm07XG5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0L1R5cGVTY3JpcHQvd2lraS9CcmVha2luZy1DaGFuZ2VzI2V4dGVuZGluZy1idWlsdC1pbnMtbGlrZS1lcnJvci1hcnJheS1hbmQtbWFwLW1heS1uby1sb25nZXItd29ya1xuICAgIC8vIFNldCB0aGUgcHJvdG90eXBlIGV4cGxpY2l0bHkuXG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIFVuc3VwcG9ydGVkUGxhdGZvcm1FcnJvci5wcm90b3R5cGUpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBVbnN1cHBvcnRlZFBsYXRmb3JtRXJyb3IgfSBmcm9tIFwiLi9VbnN1cHBvcnRlZFBsYXRmb3JtRXJyb3JcIjtcbmltcG9ydCB7IERpc2NyaW1pbmF0ZWRBdXRoIH0gZnJvbSBcIi4uL3R5cGVzL2F1dGhcIjtcblxuZXhwb3J0IGNvbnN0IHJlYWRGaWxlRnJvbVBhdGggPSAoZmlsZVBhdGg6IHN0cmluZykgPT4ge1xuICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yKFwiQnJvd3NlclwiKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRSZXF1ZXN0VG9rZW4gPSBhc3luYyAoKSA9PiB7XG4gIGlmIChcbiAgICB0eXBlb2Yga2ludG9uZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgIGtpbnRvbmUgIT09IG51bGwgJiZcbiAgICB0eXBlb2Yga2ludG9uZS5nZXRSZXF1ZXN0VG9rZW4gPT09IFwiZnVuY3Rpb25cIlxuICApIHtcbiAgICByZXR1cm4ga2ludG9uZS5nZXRSZXF1ZXN0VG9rZW4oKTtcbiAgfVxuXG4gIGlmIChcbiAgICB0eXBlb2YgZ2Fyb29uID09PSBcIm9iamVjdFwiICYmXG4gICAgZ2Fyb29uICE9PSBudWxsICYmXG4gICAgdHlwZW9mIGdhcm9vbi5jb25uZWN0Py5raW50b25lPy5nZXRSZXF1ZXN0VG9rZW4gPT09IFwiZnVuY3Rpb25cIlxuICApIHtcbiAgICByZXR1cm4gZ2Fyb29uLmNvbm5lY3Qua2ludG9uZS5nZXRSZXF1ZXN0VG9rZW4oKTtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihcInNlc3Npb24gYXV0aGVudGljYXRpb24gbXVzdCBzcGVjaWZ5IGEgcmVxdWVzdCB0b2tlblwiKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXREZWZhdWx0QXV0aCA9ICgpOiBEaXNjcmltaW5hdGVkQXV0aCA9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJzZXNzaW9uXCIsXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgYnVpbGRQbGF0Zm9ybURlcGVuZGVudENvbmZpZyA9ICgpID0+IHtcbiAgcmV0dXJuIHt9O1xufTtcblxuZXhwb3J0IGNvbnN0IGJ1aWxkSGVhZGVycyA9ICgpID0+IHtcbiAgcmV0dXJuIHt9O1xufTtcblxuZXhwb3J0IGNvbnN0IGJ1aWxkRm9ybURhdGFWYWx1ZSA9IChkYXRhOiB1bmtub3duKSA9PiB7XG4gIHJldHVybiBuZXcgQmxvYihbZGF0YV0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGJ1aWxkQmFzZVVybCA9IChiYXNlVXJsPzogc3RyaW5nKSA9PiB7XG4gIGlmIChiYXNlVXJsKSB7XG4gICAgcmV0dXJuIGJhc2VVcmw7XG4gIH1cblxuICBjb25zdCB7IGhvc3QsIHByb3RvY29sIH0gPSBsb2NhdGlvbiE7XG4gIHJldHVybiBgJHtwcm90b2NvbH0vLyR7aG9zdH1gO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFZlcnNpb24gPSAoKSA9PiB7XG4gIHJldHVybiBQQUNLQUdFX1ZFUlNJT047XG59O1xuIiwidmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG5cbi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIHRoYXQsIGxlbmd0aCkge1xuICBhQ2FsbGFibGUoZm4pO1xuICBpZiAodGhhdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZm47XG4gIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCk7XG4gICAgfTtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbiAoYSkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSk7XG4gICAgfTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYik7XG4gICAgfTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYiwgYyk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCJ2YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxudmFyIHB1c2ggPSBbXS5wdXNoO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgZm9yRWFjaCwgbWFwLCBmaWx0ZXIsIHNvbWUsIGV2ZXJ5LCBmaW5kLCBmaW5kSW5kZXgsIGZpbHRlclJlamVjdCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgdmFyIElTX01BUCA9IFRZUEUgPT0gMTtcbiAgdmFyIElTX0ZJTFRFUiA9IFRZUEUgPT0gMjtcbiAgdmFyIElTX1NPTUUgPSBUWVBFID09IDM7XG4gIHZhciBJU19FVkVSWSA9IFRZUEUgPT0gNDtcbiAgdmFyIElTX0ZJTkRfSU5ERVggPSBUWVBFID09IDY7XG4gIHZhciBJU19GSUxURVJfUkVKRUNUID0gVFlQRSA9PSA3O1xuICB2YXIgTk9fSE9MRVMgPSBUWVBFID09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgY2FsbGJhY2tmbiwgdGhhdCwgc3BlY2lmaWNDcmVhdGUpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgc2VsZiA9IEluZGV4ZWRPYmplY3QoTyk7XG4gICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIHRoYXQsIDMpO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShzZWxmKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBjcmVhdGUgPSBzcGVjaWZpY0NyZWF0ZSB8fCBhcnJheVNwZWNpZXNDcmVhdGU7XG4gICAgdmFyIHRhcmdldCA9IElTX01BUCA/IGNyZWF0ZSgkdGhpcywgbGVuZ3RoKSA6IElTX0ZJTFRFUiB8fCBJU19GSUxURVJfUkVKRUNUID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgdmFsdWUsIHJlc3VsdDtcbiAgICBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKE5PX0hPTEVTIHx8IGluZGV4IGluIHNlbGYpIHtcbiAgICAgIHZhbHVlID0gc2VsZltpbmRleF07XG4gICAgICByZXN1bHQgPSBib3VuZEZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgTyk7XG4gICAgICBpZiAoVFlQRSkge1xuICAgICAgICBpZiAoSVNfTUFQKSB0YXJnZXRbaW5kZXhdID0gcmVzdWx0OyAvLyBtYXBcbiAgICAgICAgZWxzZSBpZiAocmVzdWx0KSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiB0cnVlOyAgICAgICAgICAgICAgLy8gc29tZVxuICAgICAgICAgIGNhc2UgNTogcmV0dXJuIHZhbHVlOyAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgIC8vIGZpbmRJbmRleFxuICAgICAgICAgIGNhc2UgMjogcHVzaC5jYWxsKHRhcmdldCwgdmFsdWUpOyAvLyBmaWx0ZXJcbiAgICAgICAgfSBlbHNlIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgNDogcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAvLyBldmVyeVxuICAgICAgICAgIGNhc2UgNzogcHVzaC5jYWxsKHRhcmdldCwgdmFsdWUpOyAvLyBmaWx0ZXJSZWplY3RcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gSVNfRklORF9JTkRFWCA/IC0xIDogSVNfU09NRSB8fCBJU19FVkVSWSA/IElTX0VWRVJZIDogdGFyZ2V0O1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbiAgZm9yRWFjaDogY3JlYXRlTWV0aG9kKDApLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLm1hcGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLm1hcFxuICBtYXA6IGNyZWF0ZU1ldGhvZCgxKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWx0ZXJcbiAgZmlsdGVyOiBjcmVhdGVNZXRob2QoMiksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuc29tZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNvbWVcbiAgc29tZTogY3JlYXRlTWV0aG9kKDMpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmV2ZXJ5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZXZlcnlcbiAgZXZlcnk6IGNyZWF0ZU1ldGhvZCg0KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maW5kYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZFxuICBmaW5kOiBjcmVhdGVNZXRob2QoNSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmluZEluZGV4YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZEluZGV4XG4gIGZpbmRJbmRleDogY3JlYXRlTWV0aG9kKDYpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlclJlamVjdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWFycmF5LWZpbHRlcmluZ1xuICBmaWx0ZXJSZWplY3Q6IGNyZWF0ZU1ldGhvZCg3KVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRtYXAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykubWFwO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcblxudmFyIEhBU19TUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdtYXAnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5tYXBgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUubWFwXG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAc3BlY2llc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIUhBU19TUEVDSUVTX1NVUFBPUlQgfSwge1xuICBtYXA6IGZ1bmN0aW9uIG1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkbWFwKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCJleHBvcnQgY29uc3QgYnVpbGRQYXRoID0gKHBhcmFtczoge1xuICBlbmRwb2ludE5hbWU6IHN0cmluZztcbiAgZ3Vlc3RTcGFjZUlkPzogbnVtYmVyIHwgc3RyaW5nO1xuICBwcmV2aWV3PzogYm9vbGVhbjtcbn0pID0+IHtcbiAgY29uc3QgeyBlbmRwb2ludE5hbWUsIGd1ZXN0U3BhY2VJZCwgcHJldmlldyB9ID0gcGFyYW1zO1xuICBjb25zdCBndWVzdFBhdGggPSBndWVzdFNwYWNlSWQgIT09IHVuZGVmaW5lZCA/IGAvZ3Vlc3QvJHtndWVzdFNwYWNlSWR9YCA6IFwiXCI7XG4gIGNvbnN0IHByZXZpZXdQYXRoID0gcHJldmlldyA/IFwiL3ByZXZpZXdcIiA6IFwiXCI7XG4gIHJldHVybiBgL2ske2d1ZXN0UGF0aH0vdjEke3ByZXZpZXdQYXRofS8ke2VuZHBvaW50TmFtZX0uanNvbmA7XG59O1xuIiwiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gXCIuLi9odHRwXCI7XG5pbXBvcnQgeyBidWlsZFBhdGggfSBmcm9tIFwiLi4vdXJsXCI7XG5cbmV4cG9ydCB0eXBlIEVuZHBvaW50TmFtZSA9XG4gIHwgXCJyZWNvcmRcIlxuICB8IFwicmVjb3Jkc1wiXG4gIHwgXCJyZWNvcmQvc3RhdHVzXCJcbiAgfCBcInJlY29yZHMvc3RhdHVzXCJcbiAgfCBcInJlY29yZC9hc3NpZ25lZXNcIjtcblxuZXhwb3J0IGNsYXNzIEJ1bGtSZXF1ZXN0Q2xpZW50IHtcbiAgcHJpdmF0ZSBjbGllbnQ6IEh0dHBDbGllbnQ7XG4gIHByaXZhdGUgZ3Vlc3RTcGFjZUlkPzogbnVtYmVyIHwgc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgUkVRVUVTVFNfTEVOR1RIX0xJTUlUOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoY2xpZW50OiBIdHRwQ2xpZW50LCBndWVzdFNwYWNlSWQ/OiBudW1iZXIgfCBzdHJpbmcpIHtcbiAgICB0aGlzLmNsaWVudCA9IGNsaWVudDtcbiAgICB0aGlzLmd1ZXN0U3BhY2VJZCA9IGd1ZXN0U3BhY2VJZDtcbiAgICB0aGlzLlJFUVVFU1RTX0xFTkdUSF9MSU1JVCA9IDIwO1xuICB9XG5cbiAgcHVibGljIHNlbmQocGFyYW1zOiB7XG4gICAgcmVxdWVzdHM6IEFycmF5PFxuICAgICAgfCB7XG4gICAgICAgICAgbWV0aG9kOiBzdHJpbmc7XG4gICAgICAgICAgYXBpOiBzdHJpbmc7XG4gICAgICAgICAgcGF5bG9hZDogb2JqZWN0O1xuICAgICAgICB9XG4gICAgICB8IHtcbiAgICAgICAgICBtZXRob2Q6IHN0cmluZztcbiAgICAgICAgICBlbmRwb2ludE5hbWU6IEVuZHBvaW50TmFtZTtcbiAgICAgICAgICBwYXlsb2FkOiBvYmplY3Q7XG4gICAgICAgIH1cbiAgICA+O1xuICB9KTogUHJvbWlzZTx7IHJlc3VsdHM6IEFycmF5PHsgW0s6IHN0cmluZ106IGFueSB9PiB9PiB7XG4gICAgY29uc3QgeyByZXF1ZXN0czogcmVxdWVzdHNQYXJhbSB9ID0gcGFyYW1zO1xuXG4gICAgY29uc3QgcmVxdWVzdHMgPSByZXF1ZXN0c1BhcmFtLm1hcCgocmVxdWVzdCkgPT4ge1xuICAgICAgaWYgKFwiZW5kcG9pbnROYW1lXCIgaW4gcmVxdWVzdCkge1xuICAgICAgICBjb25zdCB7IGVuZHBvaW50TmFtZSwgLi4ucmVzdCB9ID0gcmVxdWVzdDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhcGk6IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7IGVuZHBvaW50TmFtZSB9KSxcbiAgICAgICAgICAuLi5yZXN0LFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlcXVlc3Q7XG4gICAgfSk7XG5cbiAgICBjb25zdCBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgIGVuZHBvaW50TmFtZTogXCJidWxrUmVxdWVzdFwiLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmNsaWVudC5wb3N0KHBhdGgsIHsgcmVxdWVzdHMgfSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQocGFyYW1zOiB7IGVuZHBvaW50TmFtZTogc3RyaW5nIH0pIHtcbiAgICByZXR1cm4gYnVpbGRQYXRoKHtcbiAgICAgIC4uLnBhcmFtcyxcbiAgICAgIGd1ZXN0U3BhY2VJZDogdGhpcy5ndWVzdFNwYWNlSWQsXG4gICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tIFwiLi4vaHR0cFwiO1xuaW1wb3J0IHsgYnVpbGRQYXRoIH0gZnJvbSBcIi4uL3VybFwiO1xuaW1wb3J0IHtcbiAgQXBwSUQsXG4gIFJlY29yZElELFxuICBSZXZpc2lvbixcbiAgUHJvcGVydGllcyxcbiAgTGFuZyxcbiAgTGF5b3V0LFxuICBWaWV3Rm9yUmVzcG9uc2UsXG4gIFZpZXdGb3JQYXJhbWV0ZXIsXG4gIEFwcCxcbiAgU3RhdGVGb3JSZXNwb25zZSxcbiAgU3RhdGVGb3JQYXJhbWV0ZXIsXG4gIEFjdGlvbkZvclJlc3BvbnNlLFxuICBBY3Rpb25Gb3JQYXJhbWV0ZXIsXG4gIERlcGxveVN0YXR1cyxcbiAgRmllbGRSaWdodEZvclJlc3BvbnNlLFxuICBGaWVsZFJpZ2h0Rm9yUGFyYW1ldGVyLFxuICBBcHBSaWdodEVudGl0eUZvclJlc3BvbnNlLFxuICBBcHBSaWdodEVudGl0eUZvclBhcmFtZXRlcixcbiAgRXZhbHVhdGVkUmVjb3JkUmlnaHQsXG4gIFJlY29yZFJpZ2h0Rm9yUmVzcG9uc2UsXG4gIFJlY29yZFJpZ2h0Rm9yUGFyYW1ldGVyLFxuICBBcHBDdXN0b21pemVTY29wZSxcbiAgQXBwQ3VzdG9taXplRm9yUmVzcG9uc2UsXG4gIEFwcEN1c3RvbWl6ZUZvclBhcmFtZXRlcixcbiAgR2VuZXJhbE5vdGlmaWNhdGlvbkZvclBhcmFtZXRlcixcbiAgR2VuZXJhbE5vdGlmaWNhdGlvbkZvclJlc3BvbnNlLFxuICBQZXJSZWNvcmROb3RpZmljYXRpb25Gb3JQYXJhbWV0ZXIsXG4gIFBlclJlY29yZE5vdGlmaWNhdGlvbkZvclJlc3BvbnNlLFxuICBSZW1pbmRlck5vdGlmaWNhdGlvbkZvclBhcmFtZXRlcixcbiAgUmVtaW5kZXJOb3RpZmljYXRpb25Gb3JSZXNwb25zZSxcbiAgUmVwb3J0Rm9yUGFyYW1ldGVyLFxuICBSZXBvcnRGb3JSZXNwb25zZSxcbiAgQXBwQWN0aW9uc0ZvclBhcmFtZXRlcixcbiAgQXBwQWN0aW9uc0ZvclJlc3BvbnNlLFxufSBmcm9tIFwiLi90eXBlc1wiO1xudHlwZSBSb3dMYXlvdXRGb3JQYXJhbWV0ZXIgPSB7XG4gIHR5cGU6IFwiUk9XXCI7XG4gIGZpZWxkczogQXJyYXk8eyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0+O1xufTtcbnR5cGUgU3VidGFibGVMYXlvdXRGb3JQYXJhbWV0ZXIgPSB7XG4gIHR5cGU6IFwiU1VCVEFCTEVcIjtcbiAgY29kZTogc3RyaW5nO1xuICBmaWVsZHM6IEFycmF5PHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9Pjtcbn07XG50eXBlIEdyb3VwTGF5b3V0Rm9yUGFyYW1ldGVyID0ge1xuICB0eXBlOiBcIkdST1VQXCI7XG4gIGNvZGU6IHN0cmluZztcbiAgbGF5b3V0OiBSb3dMYXlvdXRGb3JQYXJhbWV0ZXJbXTtcbn07XG50eXBlIExheW91dEZvclBhcmFtZXRlciA9IEFycmF5PFxuICBSb3dMYXlvdXRGb3JQYXJhbWV0ZXIgfCBTdWJ0YWJsZUxheW91dEZvclBhcmFtZXRlciB8IEdyb3VwTGF5b3V0Rm9yUGFyYW1ldGVyXG4+O1xudHlwZSBOZXN0ZWRQYXJ0aWFsPFQ+ID0gVCBleHRlbmRzIG9iamVjdFxuICA/IHtcbiAgICAgIFtLIGluIGtleW9mIFRdPzogTmVzdGVkUGFydGlhbDxUW0tdPjtcbiAgICB9XG4gIDogVDtcblxudHlwZSBQcm9wZXJ0aWVzRm9yUGFyYW1ldGVyID0gTmVzdGVkUGFydGlhbDxQcm9wZXJ0aWVzPjtcblxuZXhwb3J0IGNsYXNzIEFwcENsaWVudCB7XG4gIHByaXZhdGUgY2xpZW50OiBIdHRwQ2xpZW50O1xuICBwcml2YXRlIGd1ZXN0U3BhY2VJZD86IG51bWJlciB8IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihjbGllbnQ6IEh0dHBDbGllbnQsIGd1ZXN0U3BhY2VJZD86IG51bWJlciB8IHN0cmluZykge1xuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50O1xuICAgIHRoaXMuZ3Vlc3RTcGFjZUlkID0gZ3Vlc3RTcGFjZUlkO1xuICB9XG5cbiAgcHVibGljIGdldEZvcm1GaWVsZHM8VCBleHRlbmRzIFByb3BlcnRpZXM+KHBhcmFtczoge1xuICAgIGFwcDogQXBwSUQ7XG4gICAgbGFuZz86IExhbmc7XG4gICAgcHJldmlldz86IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPHsgcHJvcGVydGllczogVDsgcmV2aXNpb246IHN0cmluZyB9PiB7XG4gICAgY29uc3QgeyBwcmV2aWV3LCAuLi5yZXN0IH0gPSBwYXJhbXM7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL2Zvcm0vZmllbGRzXCIsXG4gICAgICBwcmV2aWV3LFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmNsaWVudC5nZXQocGF0aCwgeyAuLi5yZXN0IH0pO1xuICB9XG5cbiAgcHVibGljIGFkZEZvcm1GaWVsZHMocGFyYW1zOiB7XG4gICAgYXBwOiBBcHBJRDtcbiAgICBwcm9wZXJ0aWVzOiBQcm9wZXJ0aWVzRm9yUGFyYW1ldGVyO1xuICAgIHJldmlzaW9uPzogUmV2aXNpb247XG4gIH0pOiBQcm9taXNlPHsgcmV2aXNpb246IHN0cmluZyB9PiB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL2Zvcm0vZmllbGRzXCIsXG4gICAgICBwcmV2aWV3OiB0cnVlLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmNsaWVudC5wb3N0KHBhdGgsIHBhcmFtcyk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlRm9ybUZpZWxkcyhwYXJhbXM6IHtcbiAgICBhcHA6IEFwcElEO1xuICAgIHByb3BlcnRpZXM6IFByb3BlcnRpZXNGb3JQYXJhbWV0ZXI7XG4gICAgcmV2aXNpb24/OiBSZXZpc2lvbjtcbiAgfSk6IFByb21pc2U8eyByZXZpc2lvbjogc3RyaW5nIH0+IHtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvZm9ybS9maWVsZHNcIixcbiAgICAgIHByZXZpZXc6IHRydWUsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LnB1dChwYXRoLCBwYXJhbXMpO1xuICB9XG5cbiAgcHVibGljIGRlbGV0ZUZvcm1GaWVsZHMocGFyYW1zOiB7XG4gICAgYXBwOiBBcHBJRDtcbiAgICBmaWVsZHM6IHN0cmluZ1tdO1xuICAgIHJldmlzaW9uPzogUmV2aXNpb247XG4gIH0pIHtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvZm9ybS9maWVsZHNcIixcbiAgICAgIHByZXZpZXc6IHRydWUsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LmRlbGV0ZShwYXRoLCBwYXJhbXMpO1xuICB9XG5cbiAgcHVibGljIGdldEZvcm1MYXlvdXQ8VCBleHRlbmRzIExheW91dD4ocGFyYW1zOiB7XG4gICAgYXBwOiBBcHBJRDtcbiAgICBwcmV2aWV3PzogYm9vbGVhbjtcbiAgfSk6IFByb21pc2U8eyBsYXlvdXQ6IFQ7IHJldmlzaW9uOiBzdHJpbmcgfT4ge1xuICAgIGNvbnN0IHsgcHJldmlldywgLi4ucmVzdCB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC9mb3JtL2xheW91dFwiLFxuICAgICAgcHJldmlldyxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHBhdGgsIHsgLi4ucmVzdCB9KTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVGb3JtTGF5b3V0KHBhcmFtczoge1xuICAgIGFwcDogQXBwSUQ7XG4gICAgbGF5b3V0OiBMYXlvdXRGb3JQYXJhbWV0ZXI7XG4gICAgcmV2aXNpb24/OiBSZXZpc2lvbjtcbiAgfSk6IFByb21pc2U8eyByZXZpc2lvbjogc3RyaW5nIH0+IHtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvZm9ybS9sYXlvdXRcIixcbiAgICAgIHByZXZpZXc6IHRydWUsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LnB1dChwYXRoLCBwYXJhbXMpO1xuICB9XG5cbiAgcHVibGljIGdldFZpZXdzKHBhcmFtczoge1xuICAgIGFwcDogQXBwSUQ7XG4gICAgbGFuZz86IExhbmc7XG4gICAgcHJldmlldz86IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPHtcbiAgICB2aWV3czogeyBbdmlld05hbWU6IHN0cmluZ106IFZpZXdGb3JSZXNwb25zZSB9O1xuICAgIHJldmlzaW9uOiBzdHJpbmc7XG4gIH0+IHtcbiAgICBjb25zdCB7IHByZXZpZXcsIC4uLnJlc3QgfSA9IHBhcmFtcztcbiAgICBjb25zdCBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvdmlld3NcIixcbiAgICAgIHByZXZpZXcsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCByZXN0KTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVWaWV3cyhwYXJhbXM6IHtcbiAgICBhcHA6IEFwcElEO1xuICAgIHZpZXdzOiB7IFt2aWV3TmFtZTogc3RyaW5nXTogVmlld0ZvclBhcmFtZXRlciB9O1xuICAgIHJldmlzaW9uPzogUmV2aXNpb247XG4gIH0pOiBQcm9taXNlPHtcbiAgICB2aWV3czogeyBbdmlld05hbWU6IHN0cmluZ106IHsgaWQ6IHN0cmluZyB9IH07XG4gICAgcmV2aXNpb246IHN0cmluZztcbiAgfT4ge1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC92aWV3c1wiLFxuICAgICAgcHJldmlldzogdHJ1ZSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQucHV0KHBhdGgsIHBhcmFtcyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QXBwKHBhcmFtczogeyBpZDogQXBwSUQgfSk6IFByb21pc2U8QXBwPiB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICBlbmRwb2ludE5hbWU6IFwiYXBwXCIsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCBwYXJhbXMpO1xuICB9XG5cbiAgcHVibGljIGdldEFwcHMocGFyYW1zOiB7XG4gICAgaWRzPzogQXBwSURbXSB8IG51bGw7XG4gICAgY29kZXM/OiBzdHJpbmdbXSB8IG51bGw7XG4gICAgbmFtZT86IHN0cmluZyB8IG51bGw7XG4gICAgc3BhY2VJZHM/OiBBcnJheTxzdHJpbmcgfCBudW1iZXI+IHwgbnVsbDtcbiAgICBsaW1pdD86IHN0cmluZyB8IG51bWJlcjtcbiAgICBvZmZzZXQ/OiBzdHJpbmcgfCBudW1iZXI7XG4gIH0pOiBQcm9taXNlPHsgYXBwczogQXBwW10gfT4ge1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgZW5kcG9pbnROYW1lOiBcImFwcHNcIixcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHBhdGgsIHBhcmFtcyk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYWRkQXBwKHBhcmFtczoge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBzcGFjZT86IHN0cmluZyB8IG51bWJlcjtcbiAgfSk6IFByb21pc2U8eyBhcHA6IHN0cmluZzsgcmV2aXNpb246IHN0cmluZyB9PiB7XG4gICAgY29uc3QgeyBuYW1lLCBzcGFjZSB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgZW5kcG9pbnROYW1lOiBcImFwcFwiLFxuICAgICAgcHJldmlldzogdHJ1ZSxcbiAgICB9KTtcbiAgICBpZiAoc3BhY2UpIHtcbiAgICAgIC8vIE5PVEU6IEFsdGhvdWdoIGB0aHJlYWRgIHBhcmFtZXRlciBpcyByZXF1aXJlZCBpbiBSRVNUIEFQSSxcbiAgICAgIC8vIHRoZXJlIGFyZSBubyB2aXN1YWwgcmVwcmVzZW50YXRpb25zIG9mIGFwcHMgYmVpbmcgcmVsYXRlZCB0byB0aHJlYWRzLlxuICAgICAgLy8gTW9yZW92ZXIsIHRoZXJlIGlzIGN1cnJlbnRseSBubyBoZWxwZnVsIHJlYXNvbiB0byBjcmVhdGUgYXBwcyBpbiB0aHJlYWRzIG90aGVyIHRoYW4gdGhlIGRlZmF1bHQgdGhyZWFkLFxuICAgICAgLy8gc28gdGhlIEFQSSBDbGllbnQgc2V0cyB0aGUgZGVmYXVsdCB0aHJlYWQgaWQgaGVyZS5cbiAgICAgIGNvbnN0IHNwYWNlUGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgIGVuZHBvaW50TmFtZTogXCJzcGFjZVwiLFxuICAgICAgfSk7XG4gICAgICBjb25zdCB7IGRlZmF1bHRUaHJlYWQgfSA9IGF3YWl0IHRoaXMuY2xpZW50LmdldChzcGFjZVBhdGgsIHtcbiAgICAgICAgaWQ6IHNwYWNlLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gdGhpcy5jbGllbnQucG9zdChwYXRoLCB7IC4uLnBhcmFtcywgdGhyZWFkOiBkZWZhdWx0VGhyZWFkIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jbGllbnQucG9zdChwYXRoLCB7IG5hbWUgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QXBwU2V0dGluZ3MocGFyYW1zOiB7XG4gICAgYXBwOiBBcHBJRDtcbiAgICBsYW5nPzogTGFuZztcbiAgICBwcmV2aWV3PzogYm9vbGVhbjtcbiAgfSk6IFByb21pc2U8e1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgIGljb246XG4gICAgICB8IHtcbiAgICAgICAgICB0eXBlOiBcIkZJTEVcIjtcbiAgICAgICAgICBmaWxlOiB7XG4gICAgICAgICAgICBjb250ZW50VHlwZTogc3RyaW5nO1xuICAgICAgICAgICAgZmlsZUtleTogc3RyaW5nO1xuICAgICAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICAgICAgc2l6ZTogc3RyaW5nO1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIHwgeyB0eXBlOiBcIlBSRVNFVFwiOyBrZXk6IHN0cmluZyB9O1xuICAgIHRoZW1lOlxuICAgICAgfCBcIldISVRFXCJcbiAgICAgIHwgXCJDTElQQk9BUkRcIlxuICAgICAgfCBcIkJJTkRFUlwiXG4gICAgICB8IFwiUEVOQ0lMXCJcbiAgICAgIHwgXCJDTElQU1wiXG4gICAgICB8IFwiUkVEXCJcbiAgICAgIHwgXCJCTFVFXCJcbiAgICAgIHwgXCJHUkVFTlwiXG4gICAgICB8IFwiWUVMTE9XXCJcbiAgICAgIHwgXCJCTEFDS1wiO1xuICAgIHJldmlzaW9uOiBzdHJpbmc7XG4gIH0+IHtcbiAgICBjb25zdCB7IHByZXZpZXcsIC4uLnJlc3QgfSA9IHBhcmFtcztcbiAgICBjb25zdCBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvc2V0dGluZ3NcIixcbiAgICAgIHByZXZpZXcsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCByZXN0KTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVBcHBTZXR0aW5ncyhwYXJhbXM6IHtcbiAgICBhcHA6IEFwcElEO1xuICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgaWNvbj86XG4gICAgICB8IHtcbiAgICAgICAgICB0eXBlOiBcIkZJTEVcIjtcbiAgICAgICAgICBmaWxlOiB7XG4gICAgICAgICAgICBmaWxlS2V5OiBzdHJpbmc7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfCB7IHR5cGU6IFwiUFJFU0VUXCI7IGtleTogc3RyaW5nIH07XG4gICAgdGhlbWU/OlxuICAgICAgfCBcIldISVRFXCJcbiAgICAgIHwgXCJDTElQQk9BUkRcIlxuICAgICAgfCBcIkJJTkRFUlwiXG4gICAgICB8IFwiUEVOQ0lMXCJcbiAgICAgIHwgXCJDTElQU1wiXG4gICAgICB8IFwiUkVEXCJcbiAgICAgIHwgXCJCTFVFXCJcbiAgICAgIHwgXCJHUkVFTlwiXG4gICAgICB8IFwiWUVMTE9XXCJcbiAgICAgIHwgXCJCTEFDS1wiO1xuICAgIHJldmlzaW9uPzogUmV2aXNpb247XG4gIH0pOiBQcm9taXNlPHsgcmV2aXNpb246IHN0cmluZyB9PiB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL3NldHRpbmdzXCIsXG4gICAgICBwcmV2aWV3OiB0cnVlLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmNsaWVudC5wdXQocGF0aCwgcGFyYW1zKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQcm9jZXNzTWFuYWdlbWVudChwYXJhbXM6IHtcbiAgICBhcHA6IEFwcElEO1xuICAgIGxhbmc/OiBMYW5nO1xuICAgIHByZXZpZXc/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTx7XG4gICAgZW5hYmxlOiBib29sZWFuO1xuICAgIHN0YXRlczoge1xuICAgICAgW3N0YXR1c05hbWU6IHN0cmluZ106IFN0YXRlRm9yUmVzcG9uc2U7XG4gICAgfTtcbiAgICBhY3Rpb25zOiBBY3Rpb25Gb3JSZXNwb25zZVtdO1xuICAgIHJldmlzaW9uOiBzdHJpbmc7XG4gIH0+IHtcbiAgICBjb25zdCB7IHByZXZpZXcsIC4uLnJlc3QgfSA9IHBhcmFtcztcbiAgICBjb25zdCBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvc3RhdHVzXCIsXG4gICAgICBwcmV2aWV3LFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmNsaWVudC5nZXQocGF0aCwgcmVzdCk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlUHJvY2Vzc01hbmFnZW1lbnQocGFyYW1zOiB7XG4gICAgYXBwOiBBcHBJRDtcbiAgICBlbmFibGU/OiBib29sZWFuO1xuICAgIHN0YXRlcz86IHsgW3N0YXR1c05hbWU6IHN0cmluZ106IFN0YXRlRm9yUGFyYW1ldGVyIH07XG4gICAgYWN0aW9ucz86IEFjdGlvbkZvclBhcmFtZXRlcltdO1xuICAgIHJldmlzaW9uPzogUmV2aXNpb247XG4gIH0pOiBQcm9taXNlPHsgcmV2aXNpb246IHN0cmluZyB9PiB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL3N0YXR1c1wiLFxuICAgICAgcHJldmlldzogdHJ1ZSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQucHV0KHBhdGgsIHBhcmFtcyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RGVwbG95U3RhdHVzKHBhcmFtczoge1xuICAgIGFwcHM6IEFwcElEW107XG4gIH0pOiBQcm9taXNlPHsgYXBwczogQXJyYXk8eyBhcHA6IHN0cmluZzsgc3RhdHVzOiBEZXBsb3lTdGF0dXMgfT4gfT4ge1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC9kZXBsb3lcIixcbiAgICAgIHByZXZpZXc6IHRydWUsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCBwYXJhbXMpO1xuICB9XG5cbiAgcHVibGljIGRlcGxveUFwcChwYXJhbXM6IHtcbiAgICBhcHBzOiBBcnJheTx7IGFwcDogQXBwSUQ7IHJldmlzaW9uPzogUmV2aXNpb24gfT47XG4gICAgcmV2ZXJ0PzogYm9vbGVhbjtcbiAgfSk6IFByb21pc2U8e30+IHtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvZGVwbG95XCIsXG4gICAgICBwcmV2aWV3OiB0cnVlLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmNsaWVudC5wb3N0KHBhdGgsIHBhcmFtcyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RmllbGRBY2wocGFyYW1zOiB7XG4gICAgYXBwOiBBcHBJRDtcbiAgICBwcmV2aWV3PzogYm9vbGVhbjtcbiAgfSk6IFByb21pc2U8eyByaWdodHM6IEZpZWxkUmlnaHRGb3JSZXNwb25zZVtdOyByZXZpc2lvbjogc3RyaW5nIH0+IHtcbiAgICBjb25zdCB7IHByZXZpZXcsIC4uLnJlc3QgfSA9IHBhcmFtcztcbiAgICBjb25zdCBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgIGVuZHBvaW50TmFtZTogXCJmaWVsZC9hY2xcIixcbiAgICAgIHByZXZpZXcsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCB7IC4uLnJlc3QgfSk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlRmllbGRBY2wocGFyYW1zOiB7XG4gICAgYXBwOiBBcHBJRDtcbiAgICByaWdodHM6IEZpZWxkUmlnaHRGb3JQYXJhbWV0ZXJbXTtcbiAgICByZXZpc2lvbj86IFJldmlzaW9uO1xuICB9KTogUHJvbWlzZTx7IHJldmlzaW9uOiBzdHJpbmcgfT4ge1xuICAgIC8vIE5PVEU6IFdoZW4gZXhlY3V0aW5nIHRoaXMgQVBJIHdpdGhvdXQgYHByZXZpZXdgLFxuICAgIC8vIGFsbCBwcmUtbGl2ZSBhcHAncyBzZXR0aW5ncyB3aWxsIGJlIGRlcGxveWVkIHRvIGxpdmUgYXBwLlxuICAgIC8vIFRoaXMgYmVoYXZpb3IgbWF5IG5vdCBiZSB3aGF0IHRoZSB1c2VycyBleHBlY3RlZCxcbiAgICAvLyBzbyB3ZSBkaXNhYmxlIGl0IHRlbXBvcmFyaWx5LlxuICAgIGNvbnN0IHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgZW5kcG9pbnROYW1lOiBcImZpZWxkL2FjbFwiLFxuICAgICAgcHJldmlldzogdHJ1ZSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQucHV0KHBhdGgsIHBhcmFtcyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QXBwQWNsKHBhcmFtczoge1xuICAgIGFwcDogQXBwSUQ7XG4gICAgcHJldmlldz86IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPHsgcmlnaHRzOiBBcHBSaWdodEVudGl0eUZvclJlc3BvbnNlW107IHJldmlzaW9uOiBzdHJpbmcgfT4ge1xuICAgIGNvbnN0IHsgcHJldmlldywgLi4ucmVzdCB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC9hY2xcIixcbiAgICAgIHByZXZpZXcsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCB7IC4uLnJlc3QgfSk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlQXBwQWNsKHBhcmFtczoge1xuICAgIGFwcDogQXBwSUQ7XG4gICAgcmlnaHRzOiBBcHBSaWdodEVudGl0eUZvclBhcmFtZXRlcltdO1xuICAgIHJldmlzaW9uPzogUmV2aXNpb247XG4gIH0pOiBQcm9taXNlPHsgcmV2aXNpb246IHN0cmluZyB9PiB7XG4gICAgLy8gTk9URTogV2hlbiBleGVjdXRpbmcgdGhpcyBBUEkgd2l0aG91dCBgcHJldmlld2AsXG4gICAgLy8gYWxsIHByZS1saXZlIGFwcCdzIHNldHRpbmdzIHdpbGwgYmUgZGVwbG95ZWQgdG8gbGl2ZSBhcHAuXG4gICAgLy8gVGhpcyBiZWhhdmlvciBtYXkgbm90IGJlIHdoYXQgdGhlIHVzZXJzIGV4cGVjdGVkLFxuICAgIC8vIHNvIHdlIGRpc2FibGUgaXQgdGVtcG9yYXJpbHkuXG4gICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL2FjbFwiLFxuICAgICAgcHJldmlldzogdHJ1ZSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQucHV0KHBhdGgsIHBhcmFtcyk7XG4gIH1cblxuICBwdWJsaWMgZXZhbHVhdGVSZWNvcmRzQWNsKHBhcmFtczoge1xuICAgIGFwcDogQXBwSUQ7XG4gICAgaWRzOiBSZWNvcmRJRFtdO1xuICB9KTogUHJvbWlzZTx7IHJpZ2h0czogRXZhbHVhdGVkUmVjb3JkUmlnaHRbXSB9PiB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICBlbmRwb2ludE5hbWU6IFwicmVjb3Jkcy9hY2wvZXZhbHVhdGVcIixcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHBhdGgsIHBhcmFtcyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0UmVjb3JkQWNsKHBhcmFtczoge1xuICAgIGFwcDogQXBwSUQ7XG4gICAgbGFuZz86IExhbmc7XG4gICAgcHJldmlldz86IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPHsgcmlnaHRzOiBSZWNvcmRSaWdodEZvclJlc3BvbnNlW107IHJldmlzaW9uOiBzdHJpbmcgfT4ge1xuICAgIGNvbnN0IHsgcHJldmlldywgLi4ucmVzdCB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgZW5kcG9pbnROYW1lOiBcInJlY29yZC9hY2xcIixcbiAgICAgIHByZXZpZXcsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCB7IC4uLnJlc3QgfSk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlUmVjb3JkQWNsKHBhcmFtczoge1xuICAgIGFwcDogQXBwSUQ7XG4gICAgcmlnaHRzOiBSZWNvcmRSaWdodEZvclBhcmFtZXRlcltdO1xuICAgIHJldmlzaW9uPzogUmV2aXNpb247XG4gIH0pOiBQcm9taXNlPHsgcmV2aXNpb246IHN0cmluZyB9PiB7XG4gICAgLy8gTk9URTogV2hlbiBleGVjdXRpbmcgdGhpcyBBUEkgd2l0aG91dCBgcHJldmlld2AsXG4gICAgLy8gYWxsIHByZS1saXZlIGFwcCdzIHNldHRpbmdzIHdpbGwgYmUgZGVwbG95ZWQgdG8gbGl2ZSBhcHAuXG4gICAgLy8gVGhpcyBiZWhhdmlvciBtYXkgbm90IGJlIHdoYXQgdGhlIHVzZXJzIGV4cGVjdGVkLFxuICAgIC8vIHNvIHdlIGRpc2FibGUgaXQgdGVtcG9yYXJpbHkuXG4gICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICBlbmRwb2ludE5hbWU6IFwicmVjb3JkL2FjbFwiLFxuICAgICAgcHJldmlldzogdHJ1ZSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQucHV0KHBhdGgsIHBhcmFtcyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QXBwQ3VzdG9taXplKHBhcmFtczogeyBhcHA6IEFwcElEOyBwcmV2aWV3PzogYm9vbGVhbiB9KTogUHJvbWlzZTx7XG4gICAgc2NvcGU6IEFwcEN1c3RvbWl6ZVNjb3BlO1xuICAgIGRlc2t0b3A6IEFwcEN1c3RvbWl6ZUZvclJlc3BvbnNlO1xuICAgIG1vYmlsZTogQXBwQ3VzdG9taXplRm9yUmVzcG9uc2U7XG4gICAgcmV2aXNpb246IHN0cmluZztcbiAgfT4ge1xuICAgIGNvbnN0IHsgcHJldmlldywgLi4ucmVzdCB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC9jdXN0b21pemVcIixcbiAgICAgIHByZXZpZXcsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCB7IC4uLnJlc3QgfSk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlQXBwQ3VzdG9taXplKHBhcmFtczoge1xuICAgIGFwcDogQXBwSUQ7XG4gICAgc2NvcGU/OiBBcHBDdXN0b21pemVTY29wZTtcbiAgICBkZXNrdG9wPzogQXBwQ3VzdG9taXplRm9yUGFyYW1ldGVyO1xuICAgIG1vYmlsZT86IEFwcEN1c3RvbWl6ZUZvclBhcmFtZXRlcjtcbiAgICByZXZpc2lvbj86IFJldmlzaW9uO1xuICB9KTogUHJvbWlzZTx7IHJldmlzaW9uOiBzdHJpbmcgfT4ge1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC9jdXN0b21pemVcIixcbiAgICAgIHByZXZpZXc6IHRydWUsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LnB1dChwYXRoLCBwYXJhbXMpO1xuICB9XG5cbiAgcHVibGljIGdldEdlbmVyYWxOb3RpZmljYXRpb25zKHBhcmFtczoge1xuICAgIGFwcDogQXBwSUQ7XG4gICAgcHJldmlldz86IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPHtcbiAgICBub3RpZmljYXRpb25zOiBHZW5lcmFsTm90aWZpY2F0aW9uRm9yUmVzcG9uc2VbXTtcbiAgICBub3RpZnlUb0NvbW1lbnRlcjogYm9vbGVhbjtcbiAgICByZXZpc2lvbjogc3RyaW5nO1xuICB9PiB7XG4gICAgY29uc3QgeyBwcmV2aWV3LCAuLi5yZXN0IH0gPSBwYXJhbXM7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL25vdGlmaWNhdGlvbnMvZ2VuZXJhbFwiLFxuICAgICAgcHJldmlldyxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHBhdGgsIHsgLi4ucmVzdCB9KTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVHZW5lcmFsTm90aWZpY2F0aW9ucyhwYXJhbXM6IHtcbiAgICBhcHA6IEFwcElEO1xuICAgIG5vdGlmaWNhdGlvbnM/OiBHZW5lcmFsTm90aWZpY2F0aW9uRm9yUGFyYW1ldGVyW107XG4gICAgbm90aWZ5VG9Db21tZW50ZXI/OiBib29sZWFuO1xuICAgIHJldmlzaW9uPzogUmV2aXNpb247XG4gIH0pOiBQcm9taXNlPHsgcmV2aXNpb246IHN0cmluZyB9PiB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL25vdGlmaWNhdGlvbnMvZ2VuZXJhbFwiLFxuICAgICAgcHJldmlldzogdHJ1ZSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQucHV0KHBhdGgsIHBhcmFtcyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0UGVyUmVjb3JkTm90aWZpY2F0aW9ucyhwYXJhbXM6IHtcbiAgICBhcHA6IEFwcElEO1xuICAgIGxhbmc/OiBMYW5nO1xuICAgIHByZXZpZXc/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTx7XG4gICAgbm90aWZpY2F0aW9uczogUGVyUmVjb3JkTm90aWZpY2F0aW9uRm9yUmVzcG9uc2VbXTtcbiAgICByZXZpc2lvbjogc3RyaW5nO1xuICB9PiB7XG4gICAgY29uc3QgeyBwcmV2aWV3LCAuLi5yZXN0IH0gPSBwYXJhbXM7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL25vdGlmaWNhdGlvbnMvcGVyUmVjb3JkXCIsXG4gICAgICBwcmV2aWV3LFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmNsaWVudC5nZXQocGF0aCwgcmVzdCk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlUGVyUmVjb3JkTm90aWZpY2F0aW9ucyhwYXJhbXM6IHtcbiAgICBhcHA6IEFwcElEO1xuICAgIG5vdGlmaWNhdGlvbnM6IFBlclJlY29yZE5vdGlmaWNhdGlvbkZvclBhcmFtZXRlcltdO1xuICAgIHJldmlzaW9uPzogUmV2aXNpb247XG4gIH0pOiBQcm9taXNlPHsgcmV2aXNpb246IHN0cmluZyB9PiB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL25vdGlmaWNhdGlvbnMvcGVyUmVjb3JkXCIsXG4gICAgICBwcmV2aWV3OiB0cnVlLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmNsaWVudC5wdXQocGF0aCwgcGFyYW1zKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSZW1pbmRlck5vdGlmaWNhdGlvbnMocGFyYW1zOiB7XG4gICAgYXBwOiBBcHBJRDtcbiAgICBsYW5nPzogTGFuZztcbiAgICBwcmV2aWV3PzogYm9vbGVhbjtcbiAgfSk6IFByb21pc2U8e1xuICAgIG5vdGlmaWNhdGlvbnM6IFJlbWluZGVyTm90aWZpY2F0aW9uRm9yUmVzcG9uc2VbXTtcbiAgICB0aW1lem9uZTogc3RyaW5nO1xuICAgIHJldmlzaW9uOiBzdHJpbmc7XG4gIH0+IHtcbiAgICBjb25zdCB7IHByZXZpZXcsIC4uLnJlc3QgfSA9IHBhcmFtcztcbiAgICBjb25zdCBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvbm90aWZpY2F0aW9ucy9yZW1pbmRlclwiLFxuICAgICAgcHJldmlldyxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHBhdGgsIHJlc3QpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVJlbWluZGVyTm90aWZpY2F0aW9ucyhwYXJhbXM6IHtcbiAgICBhcHA6IEFwcElEO1xuICAgIG5vdGlmaWNhdGlvbnM/OiBSZW1pbmRlck5vdGlmaWNhdGlvbkZvclBhcmFtZXRlcltdO1xuICAgIHRpbWV6b25lPzogc3RyaW5nO1xuICAgIHJldmlzaW9uPzogUmV2aXNpb247XG4gIH0pOiBQcm9taXNlPHsgcmV2aXNpb246IHN0cmluZyB9PiB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL25vdGlmaWNhdGlvbnMvcmVtaW5kZXJcIixcbiAgICAgIHByZXZpZXc6IHRydWUsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LnB1dChwYXRoLCBwYXJhbXMpO1xuICB9XG5cbiAgcHVibGljIGdldFJlcG9ydHMocGFyYW1zOiB7XG4gICAgYXBwOiBBcHBJRDtcbiAgICBsYW5nPzogTGFuZztcbiAgICBwcmV2aWV3PzogYm9vbGVhbjtcbiAgfSk6IFByb21pc2U8e1xuICAgIHJlcG9ydHM6IHsgW3JlcG9ydE5hbWU6IHN0cmluZ106IFJlcG9ydEZvclJlc3BvbnNlIH07XG4gICAgcmV2aXNpb246IHN0cmluZztcbiAgfT4ge1xuICAgIGNvbnN0IHsgcHJldmlldywgLi4ucmVzdCB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC9yZXBvcnRzXCIsXG4gICAgICBwcmV2aWV3LFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmNsaWVudC5nZXQocGF0aCwgcmVzdCk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlUmVwb3J0cyhwYXJhbXM6IHtcbiAgICBhcHA6IEFwcElEO1xuICAgIHJlcG9ydHM6IFJlcG9ydEZvclBhcmFtZXRlcjtcbiAgICByZXZpc2lvbj86IFJldmlzaW9uO1xuICB9KTogUHJvbWlzZTx7XG4gICAgcmV2aXNpb246IHN0cmluZztcbiAgICByZXBvcnRzOiB7IFtyZXBvcnROYW1lOiBzdHJpbmddOiB7IGlkOiBzdHJpbmcgfSB9O1xuICB9PiB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL3JlcG9ydHNcIixcbiAgICAgIHByZXZpZXc6IHRydWUsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LnB1dChwYXRoLCBwYXJhbXMpO1xuICB9XG5cbiAgcHVibGljIGdldEFwcEFjdGlvbnMocGFyYW1zOiB7XG4gICAgYXBwOiBBcHBJRDtcbiAgICBsYW5nPzogTGFuZztcbiAgICBwcmV2aWV3PzogYm9vbGVhbjtcbiAgfSk6IFByb21pc2U8e1xuICAgIGFjdGlvbnM6IEFwcEFjdGlvbnNGb3JSZXNwb25zZTtcbiAgICByZXZpc2lvbjogc3RyaW5nO1xuICB9PiB7XG4gICAgY29uc3QgeyBwcmV2aWV3LCAuLi5yZXN0IH0gPSBwYXJhbXM7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL2FjdGlvbnNcIixcbiAgICAgIHByZXZpZXcsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCByZXN0KTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVBcHBBY3Rpb25zKHBhcmFtczoge1xuICAgIGFwcDogQXBwSUQ7XG4gICAgYWN0aW9uczogQXBwQWN0aW9uc0ZvclBhcmFtZXRlcjtcbiAgICByZXZpc2lvbj86IFJldmlzaW9uO1xuICB9KTogUHJvbWlzZTx7XG4gICAgcmV2aXNpb246IHN0cmluZztcbiAgICBhY3Rpb25zOiB7IFthY3Rpb25OYW1lOiBzdHJpbmddOiB7IGlkOiBzdHJpbmcgfSB9O1xuICB9PiB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL2FjdGlvbnNcIixcbiAgICAgIHByZXZpZXc6IHRydWUsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LnB1dChwYXRoLCBwYXJhbXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHBhcmFtczoge1xuICAgIGVuZHBvaW50TmFtZTogc3RyaW5nO1xuICAgIHByZXZpZXc/OiBib29sZWFuO1xuICB9KSB7XG4gICAgcmV0dXJuIGJ1aWxkUGF0aCh7XG4gICAgICAuLi5wYXJhbXMsXG4gICAgICBndWVzdFNwYWNlSWQ6IHRoaXMuZ3Vlc3RTcGFjZUlkLFxuICAgIH0pO1xuICB9XG59XG4iLCJ2YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG4vLyBgT2JqZWN0LmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Qua2V5c1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1rZXlzIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgZW51bUJ1Z0tleXMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtYXNzaWduIC0tIHNhZmVcbnZhciAkYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxuLy8gYE9iamVjdC5hc3NpZ25gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuYXNzaWduXG5tb2R1bGUuZXhwb3J0cyA9ICEkYXNzaWduIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gc2hvdWxkIGhhdmUgY29ycmVjdCBvcmRlciBvZiBvcGVyYXRpb25zIChFZGdlIGJ1ZylcbiAgaWYgKERFU0NSSVBUT1JTICYmICRhc3NpZ24oeyBiOiAxIH0sICRhc3NpZ24oZGVmaW5lUHJvcGVydHkoe30sICdhJywge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0aGlzLCAnYicsIHtcbiAgICAgICAgdmFsdWU6IDMsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9XG4gIH0pLCB7IGI6IDIgfSkpLmIgIT09IDEpIHJldHVybiB0cnVlO1xuICAvLyBzaG91bGQgd29yayB3aXRoIHN5bWJvbHMgYW5kIHNob3VsZCBoYXZlIGRldGVybWluaXN0aWMgcHJvcGVydHkgb3JkZXIgKFY4IGJ1ZylcbiAgdmFyIEEgPSB7fTtcbiAgdmFyIEIgPSB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXN5bWJvbCAtLSBzYWZlXG4gIHZhciBzeW1ib2wgPSBTeW1ib2woKTtcbiAgdmFyIGFscGhhYmV0ID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0JztcbiAgQVtzeW1ib2xdID0gNztcbiAgYWxwaGFiZXQuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGNocikgeyBCW2Nocl0gPSBjaHI7IH0pO1xuICByZXR1cm4gJGFzc2lnbih7fSwgQSlbc3ltYm9sXSAhPSA3IHx8IG9iamVjdEtleXMoJGFzc2lnbih7fSwgQikpLmpvaW4oJycpICE9IGFscGhhYmV0O1xufSkgPyBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCBzb3VyY2UpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIHZhciBUID0gdG9PYmplY3QodGFyZ2V0KTtcbiAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDE7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgdmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZjtcbiAgd2hpbGUgKGFyZ3VtZW50c0xlbmd0aCA+IGluZGV4KSB7XG4gICAgdmFyIFMgPSBJbmRleGVkT2JqZWN0KGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBvYmplY3RLZXlzKFMpLmNvbmNhdChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoUykpIDogb2JqZWN0S2V5cyhTKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGogPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGopIHtcbiAgICAgIGtleSA9IGtleXNbaisrXTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMgfHwgcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChTLCBrZXkpKSBUW2tleV0gPSBTW2tleV07XG4gICAgfVxuICB9IHJldHVybiBUO1xufSA6ICRhc3NpZ247XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWFzc2lnbicpO1xuXG4vLyBgT2JqZWN0LmFzc2lnbmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5hc3NpZ25cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtYXNzaWduIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBPYmplY3QuYXNzaWduICE9PSBhc3NpZ24gfSwge1xuICBhc3NpZ246IGFzc2lnblxufSk7XG4iLCJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChjbGFzc29mKGFyZ3VtZW50KSA9PT0gJ1N5bWJvbCcpIHRocm93IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcnKTtcbiAgcmV0dXJuIFN0cmluZyhhcmd1bWVudCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG4vLyBgUmVnRXhwLnByb3RvdHlwZS5mbGFnc2AgZ2V0dGVyIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1yZWdleHAucHJvdG90eXBlLmZsYWdzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSBhbk9iamVjdCh0aGlzKTtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICBpZiAodGhhdC5nbG9iYWwpIHJlc3VsdCArPSAnZyc7XG4gIGlmICh0aGF0Lmlnbm9yZUNhc2UpIHJlc3VsdCArPSAnaSc7XG4gIGlmICh0aGF0Lm11bHRpbGluZSkgcmVzdWx0ICs9ICdtJztcbiAgaWYgKHRoYXQuZG90QWxsKSByZXN1bHQgKz0gJ3MnO1xuICBpZiAodGhhdC51bmljb2RlKSByZXN1bHQgKz0gJ3UnO1xuICBpZiAodGhhdC5zdGlja3kpIHJlc3VsdCArPSAneSc7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG4vLyBiYWJlbC1taW5pZnkgYW5kIENsb3N1cmUgQ29tcGlsZXIgdHJhbnNwaWxlcyBSZWdFeHAoJ2EnLCAneScpIC0+IC9hL3kgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyICRSZWdFeHAgPSBnbG9iYWwuUmVnRXhwO1xuXG5leHBvcnRzLlVOU1VQUE9SVEVEX1kgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciByZSA9ICRSZWdFeHAoJ2EnLCAneScpO1xuICByZS5sYXN0SW5kZXggPSAyO1xuICByZXR1cm4gcmUuZXhlYygnYWJjZCcpICE9IG51bGw7XG59KTtcblxuZXhwb3J0cy5CUk9LRU5fQ0FSRVQgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTc3MzY4N1xuICB2YXIgcmUgPSAkUmVnRXhwKCdecicsICdneScpO1xuICByZS5sYXN0SW5kZXggPSAyO1xuICByZXR1cm4gcmUuZXhlYygnc3RyJykgIT0gbnVsbDtcbn0pO1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnRpZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydGllcyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBrZXlzID0gb2JqZWN0S2V5cyhQcm9wZXJ0aWVzKTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoTywga2V5ID0ga2V5c1tpbmRleCsrXSwgUHJvcGVydGllc1trZXldKTtcbiAgcmV0dXJuIE87XG59O1xuIiwidmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignZG9jdW1lbnQnLCAnZG9jdW1lbnRFbGVtZW50Jyk7XG4iLCIvKiBnbG9iYWwgQWN0aXZlWE9iamVjdCAtLSBvbGQgSUUsIFdTSCAqL1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGRlZmluZVByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2h0bWwnKTtcbnZhciBkb2N1bWVudENyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xuXG52YXIgR1QgPSAnPic7XG52YXIgTFQgPSAnPCc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgU0NSSVBUID0gJ3NjcmlwdCc7XG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG5cbnZhciBFbXB0eUNvbnN0cnVjdG9yID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuXG52YXIgc2NyaXB0VGFnID0gZnVuY3Rpb24gKGNvbnRlbnQpIHtcbiAgcmV0dXJuIExUICsgU0NSSVBUICsgR1QgKyBjb250ZW50ICsgTFQgKyAnLycgKyBTQ1JJUFQgKyBHVDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBBY3RpdmVYIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWCA9IGZ1bmN0aW9uIChhY3RpdmVYRG9jdW1lbnQpIHtcbiAgYWN0aXZlWERvY3VtZW50LndyaXRlKHNjcmlwdFRhZygnJykpO1xuICBhY3RpdmVYRG9jdW1lbnQuY2xvc2UoKTtcbiAgdmFyIHRlbXAgPSBhY3RpdmVYRG9jdW1lbnQucGFyZW50V2luZG93Lk9iamVjdDtcbiAgYWN0aXZlWERvY3VtZW50ID0gbnVsbDsgLy8gYXZvaWQgbWVtb3J5IGxlYWtcbiAgcmV0dXJuIHRlbXA7XG59O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhSUZyYW1lID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gZG9jdW1lbnRDcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgdmFyIEpTID0gJ2phdmEnICsgU0NSSVBUICsgJzonO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICBodG1sLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy80NzVcbiAgaWZyYW1lLnNyYyA9IFN0cmluZyhKUyk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUoc2NyaXB0VGFnKCdkb2N1bWVudC5GPU9iamVjdCcpKTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgcmV0dXJuIGlmcmFtZURvY3VtZW50LkY7XG59O1xuXG4vLyBDaGVjayBmb3IgZG9jdW1lbnQuZG9tYWluIGFuZCBhY3RpdmUgeCBzdXBwb3J0XG4vLyBObyBuZWVkIHRvIHVzZSBhY3RpdmUgeCBhcHByb2FjaCB3aGVuIGRvY3VtZW50LmRvbWFpbiBpcyBub3Qgc2V0XG4vLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2lzc3Vlcy8xNTBcbi8vIHZhcmlhdGlvbiBvZiBodHRwczovL2dpdGh1Yi5jb20va2l0Y2FtYnJpZGdlL2VzNS1zaGltL2NvbW1pdC80ZjczOGFjMDY2MzQ2XG4vLyBhdm9pZCBJRSBHQyBidWdcbnZhciBhY3RpdmVYRG9jdW1lbnQ7XG52YXIgTnVsbFByb3RvT2JqZWN0ID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIGFjdGl2ZVhEb2N1bWVudCA9IG5ldyBBY3RpdmVYT2JqZWN0KCdodG1sZmlsZScpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBpZ25vcmUgKi8gfVxuICBOdWxsUHJvdG9PYmplY3QgPSB0eXBlb2YgZG9jdW1lbnQgIT0gJ3VuZGVmaW5lZCdcbiAgICA/IGRvY3VtZW50LmRvbWFpbiAmJiBhY3RpdmVYRG9jdW1lbnRcbiAgICAgID8gTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhY3RpdmVYRG9jdW1lbnQpIC8vIG9sZCBJRVxuICAgICAgOiBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUoKVxuICAgIDogTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhY3RpdmVYRG9jdW1lbnQpOyAvLyBXU0hcbiAgdmFyIGxlbmd0aCA9IGVudW1CdWdLZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSBkZWxldGUgTnVsbFByb3RvT2JqZWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbbGVuZ3RoXV07XG4gIHJldHVybiBOdWxsUHJvdG9PYmplY3QoKTtcbn07XG5cbmhpZGRlbktleXNbSUVfUFJPVE9dID0gdHJ1ZTtcblxuLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eUNvbnN0cnVjdG9yW1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHlDb25zdHJ1Y3RvcigpO1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gTnVsbFByb3RvT2JqZWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkZWZpbmVQcm9wZXJ0aWVzKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG4vLyBiYWJlbC1taW5pZnkgYW5kIENsb3N1cmUgQ29tcGlsZXIgdHJhbnNwaWxlcyBSZWdFeHAoJy4nLCAncycpIC0+IC8uL3MgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyICRSZWdFeHAgPSBnbG9iYWwuUmVnRXhwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlID0gJFJlZ0V4cCgnLicsICdzJyk7XG4gIHJldHVybiAhKHJlLmRvdEFsbCAmJiByZS5leGVjKCdcXG4nKSAmJiByZS5mbGFncyA9PT0gJ3MnKTtcbn0pO1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG4vLyBiYWJlbC1taW5pZnkgYW5kIENsb3N1cmUgQ29tcGlsZXIgdHJhbnNwaWxlcyBSZWdFeHAoJyg/PGE+YiknLCAnZycpIC0+IC8oPzxhPmIpL2cgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyICRSZWdFeHAgPSBnbG9iYWwuUmVnRXhwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlID0gJFJlZ0V4cCgnKD88YT5iKScsICdnJyk7XG4gIHJldHVybiByZS5leGVjKCdiJykuZ3JvdXBzLmEgIT09ICdiJyB8fFxuICAgICdiJy5yZXBsYWNlKHJlLCAnJDxhPmMnKSAhPT0gJ2JjJztcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgcmVnZXhwL25vLWVtcHR5LWNhcHR1cmluZy1ncm91cCwgcmVnZXhwL25vLWVtcHR5LWdyb3VwLCByZWdleHAvbm8tbGF6eS1lbmRzIC0tIHRlc3RpbmcgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlZ2V4cC9uby11c2VsZXNzLXF1YW50aWZpZXIgLS0gdGVzdGluZyAqL1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHJlZ2V4cEZsYWdzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1mbGFncycpO1xudmFyIHN0aWNreUhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLXN0aWNreS1oZWxwZXJzJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpLmdldDtcbnZhciBVTlNVUFBPUlRFRF9ET1RfQUxMID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC11bnN1cHBvcnRlZC1kb3QtYWxsJyk7XG52YXIgVU5TVVBQT1JURURfTkNHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC11bnN1cHBvcnRlZC1uY2cnKTtcblxudmFyIG5hdGl2ZUV4ZWMgPSBSZWdFeHAucHJvdG90eXBlLmV4ZWM7XG52YXIgbmF0aXZlUmVwbGFjZSA9IHNoYXJlZCgnbmF0aXZlLXN0cmluZy1yZXBsYWNlJywgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcblxudmFyIHBhdGNoZWRFeGVjID0gbmF0aXZlRXhlYztcblxudmFyIFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciByZTEgPSAvYS87XG4gIHZhciByZTIgPSAvYiovZztcbiAgbmF0aXZlRXhlYy5jYWxsKHJlMSwgJ2EnKTtcbiAgbmF0aXZlRXhlYy5jYWxsKHJlMiwgJ2EnKTtcbiAgcmV0dXJuIHJlMS5sYXN0SW5kZXggIT09IDAgfHwgcmUyLmxhc3RJbmRleCAhPT0gMDtcbn0pKCk7XG5cbnZhciBVTlNVUFBPUlRFRF9ZID0gc3RpY2t5SGVscGVycy5VTlNVUFBPUlRFRF9ZIHx8IHN0aWNreUhlbHBlcnMuQlJPS0VOX0NBUkVUO1xuXG4vLyBub25wYXJ0aWNpcGF0aW5nIGNhcHR1cmluZyBncm91cCwgY29waWVkIGZyb20gZXM1LXNoaW0ncyBTdHJpbmcjc3BsaXQgcGF0Y2guXG52YXIgTlBDR19JTkNMVURFRCA9IC8oKT8/Ly5leGVjKCcnKVsxXSAhPT0gdW5kZWZpbmVkO1xuXG52YXIgUEFUQ0ggPSBVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgfHwgTlBDR19JTkNMVURFRCB8fCBVTlNVUFBPUlRFRF9ZIHx8IFVOU1VQUE9SVEVEX0RPVF9BTEwgfHwgVU5TVVBQT1JURURfTkNHO1xuXG5pZiAoUEFUQ0gpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1zdGF0ZW1lbnRzIC0tIFRPRE9cbiAgcGF0Y2hlZEV4ZWMgPSBmdW5jdGlvbiBleGVjKHN0cmluZykge1xuICAgIHZhciByZSA9IHRoaXM7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZShyZSk7XG4gICAgdmFyIHN0ciA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgdmFyIHJhdyA9IHN0YXRlLnJhdztcbiAgICB2YXIgcmVzdWx0LCByZUNvcHksIGxhc3RJbmRleCwgbWF0Y2gsIGksIG9iamVjdCwgZ3JvdXA7XG5cbiAgICBpZiAocmF3KSB7XG4gICAgICByYXcubGFzdEluZGV4ID0gcmUubGFzdEluZGV4O1xuICAgICAgcmVzdWx0ID0gcGF0Y2hlZEV4ZWMuY2FsbChyYXcsIHN0cik7XG4gICAgICByZS5sYXN0SW5kZXggPSByYXcubGFzdEluZGV4O1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB2YXIgZ3JvdXBzID0gc3RhdGUuZ3JvdXBzO1xuICAgIHZhciBzdGlja3kgPSBVTlNVUFBPUlRFRF9ZICYmIHJlLnN0aWNreTtcbiAgICB2YXIgZmxhZ3MgPSByZWdleHBGbGFncy5jYWxsKHJlKTtcbiAgICB2YXIgc291cmNlID0gcmUuc291cmNlO1xuICAgIHZhciBjaGFyc0FkZGVkID0gMDtcbiAgICB2YXIgc3RyQ29weSA9IHN0cjtcblxuICAgIGlmIChzdGlja3kpIHtcbiAgICAgIGZsYWdzID0gZmxhZ3MucmVwbGFjZSgneScsICcnKTtcbiAgICAgIGlmIChmbGFncy5pbmRleE9mKCdnJykgPT09IC0xKSB7XG4gICAgICAgIGZsYWdzICs9ICdnJztcbiAgICAgIH1cblxuICAgICAgc3RyQ29weSA9IHN0ci5zbGljZShyZS5sYXN0SW5kZXgpO1xuICAgICAgLy8gU3VwcG9ydCBhbmNob3JlZCBzdGlja3kgYmVoYXZpb3IuXG4gICAgICBpZiAocmUubGFzdEluZGV4ID4gMCAmJiAoIXJlLm11bHRpbGluZSB8fCByZS5tdWx0aWxpbmUgJiYgc3RyLmNoYXJBdChyZS5sYXN0SW5kZXggLSAxKSAhPT0gJ1xcbicpKSB7XG4gICAgICAgIHNvdXJjZSA9ICcoPzogJyArIHNvdXJjZSArICcpJztcbiAgICAgICAgc3RyQ29weSA9ICcgJyArIHN0ckNvcHk7XG4gICAgICAgIGNoYXJzQWRkZWQrKztcbiAgICAgIH1cbiAgICAgIC8vIF4oPyArIHJ4ICsgKSBpcyBuZWVkZWQsIGluIGNvbWJpbmF0aW9uIHdpdGggc29tZSBzdHIgc2xpY2luZywgdG9cbiAgICAgIC8vIHNpbXVsYXRlIHRoZSAneScgZmxhZy5cbiAgICAgIHJlQ29weSA9IG5ldyBSZWdFeHAoJ14oPzonICsgc291cmNlICsgJyknLCBmbGFncyk7XG4gICAgfVxuXG4gICAgaWYgKE5QQ0dfSU5DTFVERUQpIHtcbiAgICAgIHJlQ29weSA9IG5ldyBSZWdFeHAoJ14nICsgc291cmNlICsgJyQoPyFcXFxccyknLCBmbGFncyk7XG4gICAgfVxuICAgIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcpIGxhc3RJbmRleCA9IHJlLmxhc3RJbmRleDtcblxuICAgIG1hdGNoID0gbmF0aXZlRXhlYy5jYWxsKHN0aWNreSA/IHJlQ29weSA6IHJlLCBzdHJDb3B5KTtcblxuICAgIGlmIChzdGlja3kpIHtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBtYXRjaC5pbnB1dCA9IG1hdGNoLmlucHV0LnNsaWNlKGNoYXJzQWRkZWQpO1xuICAgICAgICBtYXRjaFswXSA9IG1hdGNoWzBdLnNsaWNlKGNoYXJzQWRkZWQpO1xuICAgICAgICBtYXRjaC5pbmRleCA9IHJlLmxhc3RJbmRleDtcbiAgICAgICAgcmUubGFzdEluZGV4ICs9IG1hdGNoWzBdLmxlbmd0aDtcbiAgICAgIH0gZWxzZSByZS5sYXN0SW5kZXggPSAwO1xuICAgIH0gZWxzZSBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HICYmIG1hdGNoKSB7XG4gICAgICByZS5sYXN0SW5kZXggPSByZS5nbG9iYWwgPyBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCA6IGxhc3RJbmRleDtcbiAgICB9XG4gICAgaWYgKE5QQ0dfSU5DTFVERUQgJiYgbWF0Y2ggJiYgbWF0Y2gubGVuZ3RoID4gMSkge1xuICAgICAgLy8gRml4IGJyb3dzZXJzIHdob3NlIGBleGVjYCBtZXRob2RzIGRvbid0IGNvbnNpc3RlbnRseSByZXR1cm4gYHVuZGVmaW5lZGBcbiAgICAgIC8vIGZvciBOUENHLCBsaWtlIElFOC4gTk9URTogVGhpcyBkb2Vzbicgd29yayBmb3IgLyguPyk/L1xuICAgICAgbmF0aXZlUmVwbGFjZS5jYWxsKG1hdGNoWzBdLCByZUNvcHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAyOyBpKyspIHtcbiAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldID09PSB1bmRlZmluZWQpIG1hdGNoW2ldID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAobWF0Y2ggJiYgZ3JvdXBzKSB7XG4gICAgICBtYXRjaC5ncm91cHMgPSBvYmplY3QgPSBjcmVhdGUobnVsbCk7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgZ3JvdXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGdyb3VwID0gZ3JvdXBzW2ldO1xuICAgICAgICBvYmplY3RbZ3JvdXBbMF1dID0gbWF0Y2hbZ3JvdXBbMV1dO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXRjaDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXRjaGVkRXhlYztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMnKTtcblxuLy8gYFJlZ0V4cC5wcm90b3R5cGUuZXhlY2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUuZXhlY1xuJCh7IHRhcmdldDogJ1JlZ0V4cCcsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IC8uLy5leGVjICE9PSBleGVjIH0sIHtcbiAgZXhlYzogZXhlY1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YCBzaW5jZSBpdCdzIG1vdmVkIHRvIGVudHJ5IHBvaW50c1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5yZWdleHAuZXhlYycpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZXhlYycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xudmFyIFJlZ0V4cFByb3RvdHlwZSA9IFJlZ0V4cC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgZXhlYywgRk9SQ0VELCBTSEFNKSB7XG4gIHZhciBTWU1CT0wgPSB3ZWxsS25vd25TeW1ib2woS0VZKTtcblxuICB2YXIgREVMRUdBVEVTX1RPX1NZTUJPTCA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3RyaW5nIG1ldGhvZHMgY2FsbCBzeW1ib2wtbmFtZWQgUmVnRXAgbWV0aG9kc1xuICAgIHZhciBPID0ge307XG4gICAgT1tTWU1CT0xdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfTtcbiAgICByZXR1cm4gJydbS0VZXShPKSAhPSA3O1xuICB9KTtcblxuICB2YXIgREVMRUdBVEVTX1RPX0VYRUMgPSBERUxFR0FURVNfVE9fU1lNQk9MICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3ltYm9sLW5hbWVkIFJlZ0V4cCBtZXRob2RzIGNhbGwgLmV4ZWNcbiAgICB2YXIgZXhlY0NhbGxlZCA9IGZhbHNlO1xuICAgIHZhciByZSA9IC9hLztcblxuICAgIGlmIChLRVkgPT09ICdzcGxpdCcpIHtcbiAgICAgIC8vIFdlIGNhbid0IHVzZSByZWFsIHJlZ2V4IGhlcmUgc2luY2UgaXQgY2F1c2VzIGRlb3B0aW1pemF0aW9uXG4gICAgICAvLyBhbmQgc2VyaW91cyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiBpbiBWOFxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzMwNlxuICAgICAgcmUgPSB7fTtcbiAgICAgIC8vIFJlZ0V4cFtAQHNwbGl0XSBkb2Vzbid0IGNhbGwgdGhlIHJlZ2V4J3MgZXhlYyBtZXRob2QsIGJ1dCBmaXJzdCBjcmVhdGVzXG4gICAgICAvLyBhIG5ldyBvbmUuIFdlIG5lZWQgdG8gcmV0dXJuIHRoZSBwYXRjaGVkIHJlZ2V4IHdoZW4gY3JlYXRpbmcgdGhlIG5ldyBvbmUuXG4gICAgICByZS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgICAgcmUuY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7IHJldHVybiByZTsgfTtcbiAgICAgIHJlLmZsYWdzID0gJyc7XG4gICAgICByZVtTWU1CT0xdID0gLy4vW1NZTUJPTF07XG4gICAgfVxuXG4gICAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgZXhlY0NhbGxlZCA9IHRydWU7IHJldHVybiBudWxsOyB9O1xuXG4gICAgcmVbU1lNQk9MXSgnJyk7XG4gICAgcmV0dXJuICFleGVjQ2FsbGVkO1xuICB9KTtcblxuICBpZiAoXG4gICAgIURFTEVHQVRFU19UT19TWU1CT0wgfHxcbiAgICAhREVMRUdBVEVTX1RPX0VYRUMgfHxcbiAgICBGT1JDRURcbiAgKSB7XG4gICAgdmFyIG5hdGl2ZVJlZ0V4cE1ldGhvZCA9IC8uL1tTWU1CT0xdO1xuICAgIHZhciBtZXRob2RzID0gZXhlYyhTWU1CT0wsICcnW0tFWV0sIGZ1bmN0aW9uIChuYXRpdmVNZXRob2QsIHJlZ2V4cCwgc3RyLCBhcmcyLCBmb3JjZVN0cmluZ01ldGhvZCkge1xuICAgICAgdmFyICRleGVjID0gcmVnZXhwLmV4ZWM7XG4gICAgICBpZiAoJGV4ZWMgPT09IHJlZ2V4cEV4ZWMgfHwgJGV4ZWMgPT09IFJlZ0V4cFByb3RvdHlwZS5leGVjKSB7XG4gICAgICAgIGlmIChERUxFR0FURVNfVE9fU1lNQk9MICYmICFmb3JjZVN0cmluZ01ldGhvZCkge1xuICAgICAgICAgIC8vIFRoZSBuYXRpdmUgU3RyaW5nIG1ldGhvZCBhbHJlYWR5IGRlbGVnYXRlcyB0byBAQG1ldGhvZCAodGhpc1xuICAgICAgICAgIC8vIHBvbHlmaWxsZWQgZnVuY3Rpb24pLCBsZWFzaW5nIHRvIGluZmluaXRlIHJlY3Vyc2lvbi5cbiAgICAgICAgICAvLyBXZSBhdm9pZCBpdCBieSBkaXJlY3RseSBjYWxsaW5nIHRoZSBuYXRpdmUgQEBtZXRob2QgbWV0aG9kLlxuICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBuYXRpdmVSZWdFeHBNZXRob2QuY2FsbChyZWdleHAsIHN0ciwgYXJnMikgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogbmF0aXZlTWV0aG9kLmNhbGwoc3RyLCByZWdleHAsIGFyZzIpIH07XG4gICAgICB9XG4gICAgICByZXR1cm4geyBkb25lOiBmYWxzZSB9O1xuICAgIH0pO1xuXG4gICAgcmVkZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgS0VZLCBtZXRob2RzWzBdKTtcbiAgICByZWRlZmluZShSZWdFeHBQcm90b3R5cGUsIFNZTUJPTCwgbWV0aG9kc1sxXSk7XG4gIH1cblxuICBpZiAoU0hBTSkgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KFJlZ0V4cFByb3RvdHlwZVtTWU1CT0xdLCAnc2hhbScsIHRydWUpO1xufTtcbiIsInZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKENPTlZFUlRfVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIHBvcykge1xuICAgIHZhciBTID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSgkdGhpcykpO1xuICAgIHZhciBwb3NpdGlvbiA9IHRvSW50ZWdlck9ySW5maW5pdHkocG9zKTtcbiAgICB2YXIgc2l6ZSA9IFMubGVuZ3RoO1xuICAgIHZhciBmaXJzdCwgc2Vjb25kO1xuICAgIGlmIChwb3NpdGlvbiA8IDAgfHwgcG9zaXRpb24gPj0gc2l6ZSkgcmV0dXJuIENPTlZFUlRfVE9fU1RSSU5HID8gJycgOiB1bmRlZmluZWQ7XG4gICAgZmlyc3QgPSBTLmNoYXJDb2RlQXQocG9zaXRpb24pO1xuICAgIHJldHVybiBmaXJzdCA8IDB4RDgwMCB8fCBmaXJzdCA+IDB4REJGRiB8fCBwb3NpdGlvbiArIDEgPT09IHNpemVcbiAgICAgIHx8IChzZWNvbmQgPSBTLmNoYXJDb2RlQXQocG9zaXRpb24gKyAxKSkgPCAweERDMDAgfHwgc2Vjb25kID4gMHhERkZGXG4gICAgICAgID8gQ09OVkVSVF9UT19TVFJJTkcgPyBTLmNoYXJBdChwb3NpdGlvbikgOiBmaXJzdFxuICAgICAgICA6IENPTlZFUlRfVE9fU1RSSU5HID8gUy5zbGljZShwb3NpdGlvbiwgcG9zaXRpb24gKyAyKSA6IChmaXJzdCAtIDB4RDgwMCA8PCAxMCkgKyAoc2Vjb25kIC0gMHhEQzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuY29kZXBvaW50YXRcbiAgY29kZUF0OiBjcmVhdGVNZXRob2QoZmFsc2UpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5hdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUuYXRcbiAgY2hhckF0OiBjcmVhdGVNZXRob2QodHJ1ZSlcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2hhckF0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUnKS5jaGFyQXQ7XG5cbi8vIGBBZHZhbmNlU3RyaW5nSW5kZXhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hZHZhbmNlc3RyaW5naW5kZXhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFMsIGluZGV4LCB1bmljb2RlKSB7XG4gIHJldHVybiBpbmRleCArICh1bmljb2RlID8gY2hhckF0KFMsIGluZGV4KS5sZW5ndGggOiAxKTtcbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjJyk7XG5cbi8vIGBSZWdFeHBFeGVjYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVnZXhwZXhlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUiwgUykge1xuICB2YXIgZXhlYyA9IFIuZXhlYztcbiAgaWYgKGlzQ2FsbGFibGUoZXhlYykpIHtcbiAgICB2YXIgcmVzdWx0ID0gZXhlYy5jYWxsKFIsIFMpO1xuICAgIGlmIChyZXN1bHQgIT09IG51bGwpIGFuT2JqZWN0KHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAoY2xhc3NvZihSKSA9PT0gJ1JlZ0V4cCcpIHJldHVybiByZWdleHBFeGVjLmNhbGwoUiwgUyk7XG4gIHRocm93IFR5cGVFcnJvcignUmVnRXhwI2V4ZWMgY2FsbGVkIG9uIGluY29tcGF0aWJsZSByZWNlaXZlcicpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmaXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxuLy8gQEBtYXRjaCBsb2dpY1xuZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMoJ21hdGNoJywgZnVuY3Rpb24gKE1BVENILCBuYXRpdmVNYXRjaCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUubWF0Y2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5tYXRjaFxuICAgIGZ1bmN0aW9uIG1hdGNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSByZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuICAgICAgdmFyIG1hdGNoZXIgPSByZWdleHAgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogZ2V0TWV0aG9kKHJlZ2V4cCwgTUFUQ0gpO1xuICAgICAgcmV0dXJuIG1hdGNoZXIgPyBtYXRjaGVyLmNhbGwocmVnZXhwLCBPKSA6IG5ldyBSZWdFeHAocmVnZXhwKVtNQVRDSF0odG9TdHJpbmcoTykpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBtYXRjaF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQG1hdGNoXG4gICAgZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QodGhpcyk7XG4gICAgICB2YXIgUyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKG5hdGl2ZU1hdGNoLCByeCwgUyk7XG5cbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcblxuICAgICAgaWYgKCFyeC5nbG9iYWwpIHJldHVybiByZWdFeHBFeGVjKHJ4LCBTKTtcblxuICAgICAgdmFyIGZ1bGxVbmljb2RlID0gcngudW5pY29kZTtcbiAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB2YXIgQSA9IFtdO1xuICAgICAgdmFyIG4gPSAwO1xuICAgICAgdmFyIHJlc3VsdDtcbiAgICAgIHdoaWxlICgocmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUykpICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBtYXRjaFN0ciA9IHRvU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIEFbbl0gPSBtYXRjaFN0cjtcbiAgICAgICAgaWYgKG1hdGNoU3RyID09PSAnJykgcngubGFzdEluZGV4ID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHRvTGVuZ3RoKHJ4Lmxhc3RJbmRleCksIGZ1bGxVbmljb2RlKTtcbiAgICAgICAgbisrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG4gPT09IDAgPyBudWxsIDogQTtcbiAgICB9XG4gIF07XG59KTtcbiIsInZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmICh0eXBlb2YgYXJndW1lbnQgPT09ICdvYmplY3QnIHx8IGlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IHNldCBcIiArIFN0cmluZyhhcmd1bWVudCkgKyAnIGFzIGEgcHJvdG90eXBlJyk7XG59O1xuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gLS0gc2FmZSAqL1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGFQb3NzaWJsZVByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LnNldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnNldHByb3RvdHlwZW9mXG4vLyBXb3JrcyB3aXRoIF9fcHJvdG9fXyBvbmx5LiBPbGQgdjggY2FuJ3Qgd29yayB3aXRoIG51bGwgcHJvdG8gb2JqZWN0cy5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3Qtc2V0cHJvdG90eXBlb2YgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gZnVuY3Rpb24gKCkge1xuICB2YXIgQ09SUkVDVF9TRVRURVIgPSBmYWxzZTtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgdmFyIHNldHRlcjtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG4gICAgc2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3QucHJvdG90eXBlLCAnX19wcm90b19fJykuc2V0O1xuICAgIHNldHRlci5jYWxsKHRlc3QsIFtdKTtcbiAgICBDT1JSRUNUX1NFVFRFUiA9IHRlc3QgaW5zdGFuY2VvZiBBcnJheTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pIHtcbiAgICBhbk9iamVjdChPKTtcbiAgICBhUG9zc2libGVQcm90b3R5cGUocHJvdG8pO1xuICAgIGlmIChDT1JSRUNUX1NFVFRFUikgc2V0dGVyLmNhbGwoTywgcHJvdG8pO1xuICAgIGVsc2UgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICByZXR1cm4gTztcbiAgfTtcbn0oKSA6IHVuZGVmaW5lZCk7XG4iLCJ2YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG5cbi8vIG1ha2VzIHN1YmNsYXNzaW5nIHdvcmsgY29ycmVjdCBmb3Igd3JhcHBlZCBidWlsdC1pbnNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCR0aGlzLCBkdW1teSwgV3JhcHBlcikge1xuICB2YXIgTmV3VGFyZ2V0LCBOZXdUYXJnZXRQcm90b3R5cGU7XG4gIGlmIChcbiAgICAvLyBpdCBjYW4gd29yayBvbmx5IHdpdGggbmF0aXZlIGBzZXRQcm90b3R5cGVPZmBcbiAgICBzZXRQcm90b3R5cGVPZiAmJlxuICAgIC8vIHdlIGhhdmVuJ3QgY29tcGxldGVseSBjb3JyZWN0IHByZS1FUzYgd2F5IGZvciBnZXR0aW5nIGBuZXcudGFyZ2V0YCwgc28gdXNlIHRoaXNcbiAgICBpc0NhbGxhYmxlKE5ld1RhcmdldCA9IGR1bW15LmNvbnN0cnVjdG9yKSAmJlxuICAgIE5ld1RhcmdldCAhPT0gV3JhcHBlciAmJlxuICAgIGlzT2JqZWN0KE5ld1RhcmdldFByb3RvdHlwZSA9IE5ld1RhcmdldC5wcm90b3R5cGUpICYmXG4gICAgTmV3VGFyZ2V0UHJvdG90eXBlICE9PSBXcmFwcGVyLnByb3RvdHlwZVxuICApIHNldFByb3RvdHlwZU9mKCR0aGlzLCBOZXdUYXJnZXRQcm90b3R5cGUpO1xuICByZXR1cm4gJHRoaXM7XG59O1xuIiwidmFyIHZhbHVlT2YgPSAxLjAudmFsdWVPZjtcblxuLy8gYHRoaXNOdW1iZXJWYWx1ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRoaXNudW1iZXJ2YWx1ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlT2YuY2FsbCh2YWx1ZSk7XG59O1xuIiwiLy8gYSBzdHJpbmcgb2YgYWxsIHZhbGlkIHVuaWNvZGUgd2hpdGVzcGFjZXNcbm1vZHVsZS5leHBvcnRzID0gJ1xcdTAwMDlcXHUwMDBBXFx1MDAwQlxcdTAwMENcXHUwMDBEXFx1MDAyMFxcdTAwQTBcXHUxNjgwXFx1MjAwMFxcdTIwMDFcXHUyMDAyJyArXG4gICdcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwQVxcdTIwMkZcXHUyMDVGXFx1MzAwMFxcdTIwMjhcXHUyMDI5XFx1RkVGRic7XG4iLCJ2YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciB3aGl0ZXNwYWNlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93aGl0ZXNwYWNlcycpO1xuXG52YXIgd2hpdGVzcGFjZSA9ICdbJyArIHdoaXRlc3BhY2VzICsgJ10nO1xudmFyIGx0cmltID0gUmVnRXhwKCdeJyArIHdoaXRlc3BhY2UgKyB3aGl0ZXNwYWNlICsgJyonKTtcbnZhciBydHJpbSA9IFJlZ0V4cCh3aGl0ZXNwYWNlICsgd2hpdGVzcGFjZSArICcqJCcpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW0sIHRyaW1TdGFydCwgdHJpbUVuZCwgdHJpbUxlZnQsIHRyaW1SaWdodCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcykge1xuICAgIHZhciBzdHJpbmcgPSB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKCR0aGlzKSk7XG4gICAgaWYgKFRZUEUgJiAxKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShsdHJpbSwgJycpO1xuICAgIGlmIChUWVBFICYgMikgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UocnRyaW0sICcnKTtcbiAgICByZXR1cm4gc3RyaW5nO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLnsgdHJpbUxlZnQsIHRyaW1TdGFydCB9YCBtZXRob2RzXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltc3RhcnRcbiAgc3RhcnQ6IGNyZWF0ZU1ldGhvZCgxKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltUmlnaHQsIHRyaW1FbmQgfWAgbWV0aG9kc1xuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUudHJpbWVuZFxuICBlbmQ6IGNyZWF0ZU1ldGhvZCgyKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUudHJpbWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltXG4gIHRyaW06IGNyZWF0ZU1ldGhvZCgzKVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpLmY7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIHRoaXNOdW1iZXJWYWx1ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90aGlzLW51bWJlci12YWx1ZScpO1xudmFyIHRyaW0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXRyaW0nKS50cmltO1xuXG52YXIgTlVNQkVSID0gJ051bWJlcic7XG52YXIgTmF0aXZlTnVtYmVyID0gZ2xvYmFsW05VTUJFUl07XG52YXIgTnVtYmVyUHJvdG90eXBlID0gTmF0aXZlTnVtYmVyLnByb3RvdHlwZTtcblxuLy8gYFRvTnVtZXJpY2AgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbnVtZXJpY1xudmFyIHRvTnVtZXJpYyA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICB2YXIgcHJpbVZhbHVlID0gdG9QcmltaXRpdmUodmFsdWUsICdudW1iZXInKTtcbiAgcmV0dXJuIHR5cGVvZiBwcmltVmFsdWUgPT09ICdiaWdpbnQnID8gcHJpbVZhbHVlIDogdG9OdW1iZXIocHJpbVZhbHVlKTtcbn07XG5cbi8vIGBUb051bWJlcmAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbnVtYmVyXG52YXIgdG9OdW1iZXIgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGl0ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsICdudW1iZXInKTtcbiAgdmFyIGZpcnN0LCB0aGlyZCwgcmFkaXgsIG1heENvZGUsIGRpZ2l0cywgbGVuZ3RoLCBpbmRleCwgY29kZTtcbiAgaWYgKGlzU3ltYm9sKGl0KSkgdGhyb3cgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCBhIFN5bWJvbCB2YWx1ZSB0byBhIG51bWJlcicpO1xuICBpZiAodHlwZW9mIGl0ID09ICdzdHJpbmcnICYmIGl0Lmxlbmd0aCA+IDIpIHtcbiAgICBpdCA9IHRyaW0oaXQpO1xuICAgIGZpcnN0ID0gaXQuY2hhckNvZGVBdCgwKTtcbiAgICBpZiAoZmlyc3QgPT09IDQzIHx8IGZpcnN0ID09PSA0NSkge1xuICAgICAgdGhpcmQgPSBpdC5jaGFyQ29kZUF0KDIpO1xuICAgICAgaWYgKHRoaXJkID09PSA4OCB8fCB0aGlyZCA9PT0gMTIwKSByZXR1cm4gTmFOOyAvLyBOdW1iZXIoJysweDEnKSBzaG91bGQgYmUgTmFOLCBvbGQgVjggZml4XG4gICAgfSBlbHNlIGlmIChmaXJzdCA9PT0gNDgpIHtcbiAgICAgIHN3aXRjaCAoaXQuY2hhckNvZGVBdCgxKSkge1xuICAgICAgICBjYXNlIDY2OiBjYXNlIDk4OiByYWRpeCA9IDI7IG1heENvZGUgPSA0OTsgYnJlYWs7IC8vIGZhc3QgZXF1YWwgb2YgL14wYlswMV0rJC9pXG4gICAgICAgIGNhc2UgNzk6IGNhc2UgMTExOiByYWRpeCA9IDg7IG1heENvZGUgPSA1NTsgYnJlYWs7IC8vIGZhc3QgZXF1YWwgb2YgL14wb1swLTddKyQvaVxuICAgICAgICBkZWZhdWx0OiByZXR1cm4gK2l0O1xuICAgICAgfVxuICAgICAgZGlnaXRzID0gaXQuc2xpY2UoMik7XG4gICAgICBsZW5ndGggPSBkaWdpdHMubGVuZ3RoO1xuICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIGNvZGUgPSBkaWdpdHMuY2hhckNvZGVBdChpbmRleCk7XG4gICAgICAgIC8vIHBhcnNlSW50IHBhcnNlcyBhIHN0cmluZyB0byBhIGZpcnN0IHVuYXZhaWxhYmxlIHN5bWJvbFxuICAgICAgICAvLyBidXQgVG9OdW1iZXIgc2hvdWxkIHJldHVybiBOYU4gaWYgYSBzdHJpbmcgY29udGFpbnMgdW5hdmFpbGFibGUgc3ltYm9sc1xuICAgICAgICBpZiAoY29kZSA8IDQ4IHx8IGNvZGUgPiBtYXhDb2RlKSByZXR1cm4gTmFOO1xuICAgICAgfSByZXR1cm4gcGFyc2VJbnQoZGlnaXRzLCByYWRpeCk7XG4gICAgfVxuICB9IHJldHVybiAraXQ7XG59O1xuXG4vLyBgTnVtYmVyYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1udW1iZXItY29uc3RydWN0b3JcbmlmIChpc0ZvcmNlZChOVU1CRVIsICFOYXRpdmVOdW1iZXIoJyAwbzEnKSB8fCAhTmF0aXZlTnVtYmVyKCcwYjEnKSB8fCBOYXRpdmVOdW1iZXIoJysweDEnKSkpIHtcbiAgdmFyIE51bWJlcldyYXBwZXIgPSBmdW5jdGlvbiBOdW1iZXIodmFsdWUpIHtcbiAgICB2YXIgbiA9IGFyZ3VtZW50cy5sZW5ndGggPCAxID8gMCA6IE5hdGl2ZU51bWJlcih0b051bWVyaWModmFsdWUpKTtcbiAgICB2YXIgZHVtbXkgPSB0aGlzO1xuICAgIC8vIGNoZWNrIG9uIDEuLmNvbnN0cnVjdG9yKGZvbykgY2FzZVxuICAgIHJldHVybiBkdW1teSBpbnN0YW5jZW9mIE51bWJlcldyYXBwZXIgJiYgZmFpbHMoZnVuY3Rpb24gKCkgeyB0aGlzTnVtYmVyVmFsdWUoZHVtbXkpOyB9KVxuICAgICAgPyBpbmhlcml0SWZSZXF1aXJlZChPYmplY3QobiksIGR1bW15LCBOdW1iZXJXcmFwcGVyKSA6IG47XG4gIH07XG4gIGZvciAodmFyIGtleXMgPSBERVNDUklQVE9SUyA/IGdldE93blByb3BlcnR5TmFtZXMoTmF0aXZlTnVtYmVyKSA6IChcbiAgICAvLyBFUzM6XG4gICAgJ01BWF9WQUxVRSxNSU5fVkFMVUUsTmFOLE5FR0FUSVZFX0lORklOSVRZLFBPU0lUSVZFX0lORklOSVRZLCcgK1xuICAgIC8vIEVTMjAxNSAoaW4gY2FzZSwgaWYgbW9kdWxlcyB3aXRoIEVTMjAxNSBOdW1iZXIgc3RhdGljcyByZXF1aXJlZCBiZWZvcmUpOlxuICAgICdFUFNJTE9OLE1BWF9TQUZFX0lOVEVHRVIsTUlOX1NBRkVfSU5URUdFUixpc0Zpbml0ZSxpc0ludGVnZXIsaXNOYU4saXNTYWZlSW50ZWdlcixwYXJzZUZsb2F0LHBhcnNlSW50LCcgK1xuICAgIC8vIEVTTmV4dFxuICAgICdmcm9tU3RyaW5nLHJhbmdlJ1xuICApLnNwbGl0KCcsJyksIGogPSAwLCBrZXk7IGtleXMubGVuZ3RoID4gajsgaisrKSB7XG4gICAgaWYgKGhhc093bihOYXRpdmVOdW1iZXIsIGtleSA9IGtleXNbal0pICYmICFoYXNPd24oTnVtYmVyV3JhcHBlciwga2V5KSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkoTnVtYmVyV3JhcHBlciwga2V5LCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTmF0aXZlTnVtYmVyLCBrZXkpKTtcbiAgICB9XG4gIH1cbiAgTnVtYmVyV3JhcHBlci5wcm90b3R5cGUgPSBOdW1iZXJQcm90b3R5cGU7XG4gIE51bWJlclByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE51bWJlcldyYXBwZXI7XG4gIHJlZGVmaW5lKGdsb2JhbCwgTlVNQkVSLCBOdW1iZXJXcmFwcGVyKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG5cbnZhciBIQVNfU1BFQ0lFU19TVVBQT1JUID0gYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnc2xpY2UnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbnZhciBuYXRpdmVTbGljZSA9IFtdLnNsaWNlO1xudmFyIG1heCA9IE1hdGgubWF4O1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnNsaWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNsaWNlXG4vLyBmYWxsYmFjayBmb3Igbm90IGFycmF5LWxpa2UgRVMzIHN0cmluZ3MgYW5kIERPTSBvYmplY3RzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhSEFTX1NQRUNJRVNfU1VQUE9SVCB9LCB7XG4gIHNsaWNlOiBmdW5jdGlvbiBzbGljZShzdGFydCwgZW5kKSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3QodGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBrID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW5ndGgpO1xuICAgIHZhciBmaW4gPSB0b0Fic29sdXRlSW5kZXgoZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiBlbmQsIGxlbmd0aCk7XG4gICAgLy8gaW5saW5lIGBBcnJheVNwZWNpZXNDcmVhdGVgIGZvciB1c2FnZSBuYXRpdmUgYEFycmF5I3NsaWNlYCB3aGVyZSBpdCdzIHBvc3NpYmxlXG4gICAgdmFyIENvbnN0cnVjdG9yLCByZXN1bHQsIG47XG4gICAgaWYgKGlzQXJyYXkoTykpIHtcbiAgICAgIENvbnN0cnVjdG9yID0gTy5jb25zdHJ1Y3RvcjtcbiAgICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgICBpZiAoaXNDb25zdHJ1Y3RvcihDb25zdHJ1Y3RvcikgJiYgKENvbnN0cnVjdG9yID09PSBBcnJheSB8fCBpc0FycmF5KENvbnN0cnVjdG9yLnByb3RvdHlwZSkpKSB7XG4gICAgICAgIENvbnN0cnVjdG9yID0gdW5kZWZpbmVkO1xuICAgICAgfSBlbHNlIGlmIChpc09iamVjdChDb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgQ29uc3RydWN0b3IgPSBDb25zdHJ1Y3RvcltTUEVDSUVTXTtcbiAgICAgICAgaWYgKENvbnN0cnVjdG9yID09PSBudWxsKSBDb25zdHJ1Y3RvciA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChDb25zdHJ1Y3RvciA9PT0gQXJyYXkgfHwgQ29uc3RydWN0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gbmF0aXZlU2xpY2UuY2FsbChPLCBrLCBmaW4pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQgPSBuZXcgKENvbnN0cnVjdG9yID09PSB1bmRlZmluZWQgPyBBcnJheSA6IENvbnN0cnVjdG9yKShtYXgoZmluIC0gaywgMCkpO1xuICAgIGZvciAobiA9IDA7IGsgPCBmaW47IGsrKywgbisrKSBpZiAoayBpbiBPKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIG4sIE9ba10pO1xuICAgIHJlc3VsdC5sZW5ndGggPSBuO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbmF0aXZlS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbnZhciBGQUlMU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyBuYXRpdmVLZXlzKDEpOyB9KTtcblxuLy8gYE9iamVjdC5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmtleXNcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZBSUxTX09OX1BSSU1JVElWRVMgfSwge1xuICBrZXlzOiBmdW5jdGlvbiBrZXlzKGl0KSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXModG9PYmplY3QoaXQpKTtcbiAgfVxufSk7XG4iLCJpbXBvcnQgeyBLaW50b25lUmVzdEFQSUVycm9yIH0gZnJvbSBcIi4vS2ludG9uZVJlc3RBUElFcnJvclwiO1xuXG5leHBvcnQgY2xhc3MgS2ludG9uZUFsbFJlY29yZHNFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcHJvY2Vzc2VkUmVjb3Jkc1Jlc3VsdDogYW55O1xuICB1bnByb2Nlc3NlZFJlY29yZHM6IGFueVtdO1xuICBlcnJvcjogS2ludG9uZVJlc3RBUElFcnJvcjtcbiAgZXJyb3JJbmRleD86IG51bWJlcjtcblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUVycm9ySW5kZXgoZXJyb3JzOiB7IFtrOiBzdHJpbmddOiBhbnkgfSkge1xuICAgIGNvbnN0IGZpcnN0RXJyb3JLZXkgPSBPYmplY3Qua2V5cyhlcnJvcnMpWzBdO1xuICAgIGNvbnN0IHJlc3VsdCA9IGZpcnN0RXJyb3JLZXkubWF0Y2goL3JlY29yZHNcXFsoXFxkKylcXF0vKTtcbiAgICByZXR1cm4gcmVzdWx0ID8gTnVtYmVyKHJlc3VsdFsxXSkgOiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZXh0cmFjdEVycm9ySW5kZXgoXG4gICAgbnVtT2ZQcm9jZXNzZWRSZWNvcmRzOiBudW1iZXIsXG4gICAgZXJyb3I6IEtpbnRvbmVSZXN0QVBJRXJyb3IsXG4gICAgY2h1bmtMZW5ndGg6IG51bWJlclxuICApIHtcbiAgICBpZiAoZXJyb3IuYnVsa1JlcXVlc3RJbmRleCAhPT0gdW5kZWZpbmVkICYmIGVycm9yLmVycm9ycykge1xuICAgICAgY29uc3QgZXJyb3JQYXJzZVJlc3VsdCA9IEtpbnRvbmVBbGxSZWNvcmRzRXJyb3IucGFyc2VFcnJvckluZGV4KFxuICAgICAgICBlcnJvci5lcnJvcnNcbiAgICAgICk7XG4gICAgICBpZiAoZXJyb3JQYXJzZVJlc3VsdCAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIG51bU9mUHJvY2Vzc2VkUmVjb3JkcyArXG4gICAgICAgICAgZXJyb3IuYnVsa1JlcXVlc3RJbmRleCAqIGNodW5rTGVuZ3RoICtcbiAgICAgICAgICBlcnJvclBhcnNlUmVzdWx0XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBidWlsZEVycm9yTWVzc2FnZShcbiAgICBudW1PZlByb2Nlc3NlZFJlY29yZHM6IG51bWJlcixcbiAgICBudW1PZkFsbFJlY29yZHM6IG51bWJlcixcbiAgICBlcnJvckluZGV4OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgKSB7XG4gICAgbGV0IG1lc3NhZ2UgPSBcIlwiO1xuICAgIGlmIChlcnJvckluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG1lc3NhZ2UgPSBgQW4gZXJyb3Igb2NjdXJyZWQgYXQgcmVjb3Jkc1ske2Vycm9ySW5kZXh9XS4gYDtcbiAgICB9XG4gICAgbWVzc2FnZSArPSBgJHtudW1PZlByb2Nlc3NlZFJlY29yZHN9LyR7bnVtT2ZBbGxSZWNvcmRzfSByZWNvcmRzIGFyZSBwcm9jZXNzZWQgc3VjY2Vzc2Z1bGx5YDtcblxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvY2Vzc2VkUmVjb3Jkc1Jlc3VsdDogYW55LFxuICAgIHVucHJvY2Vzc2VkUmVjb3JkczogYW55W10sXG4gICAgbnVtT2ZBbGxSZWNvcmRzOiBudW1iZXIsXG4gICAgZXJyb3I6IEtpbnRvbmVSZXN0QVBJRXJyb3IsXG4gICAgY2h1bmtMZW5ndGg6IG51bWJlclxuICApIHtcbiAgICBjb25zdCBudW1PZlByb2Nlc3NlZFJlY29yZHMgPSBudW1PZkFsbFJlY29yZHMgLSB1bnByb2Nlc3NlZFJlY29yZHMubGVuZ3RoO1xuXG4gICAgY29uc3QgZXJyb3JJbmRleCA9IEtpbnRvbmVBbGxSZWNvcmRzRXJyb3IuZXh0cmFjdEVycm9ySW5kZXgoXG4gICAgICBudW1PZlByb2Nlc3NlZFJlY29yZHMsXG4gICAgICBlcnJvcixcbiAgICAgIGNodW5rTGVuZ3RoXG4gICAgKTtcblxuICAgIGNvbnN0IG1lc3NhZ2UgPSBLaW50b25lQWxsUmVjb3Jkc0Vycm9yLmJ1aWxkRXJyb3JNZXNzYWdlKFxuICAgICAgbnVtT2ZQcm9jZXNzZWRSZWNvcmRzLFxuICAgICAgbnVtT2ZBbGxSZWNvcmRzLFxuICAgICAgZXJyb3JJbmRleFxuICAgICk7XG4gICAgc3VwZXIobWVzc2FnZSk7XG5cbiAgICB0aGlzLm5hbWUgPSBcIktpbnRvbmVBbGxSZWNvcmRzRXJyb3JcIjtcbiAgICB0aGlzLnByb2Nlc3NlZFJlY29yZHNSZXN1bHQgPSBwcm9jZXNzZWRSZWNvcmRzUmVzdWx0O1xuICAgIHRoaXMudW5wcm9jZXNzZWRSZWNvcmRzID0gdW5wcm9jZXNzZWRSZWNvcmRzO1xuICAgIHRoaXMuZXJyb3IgPSBlcnJvcjtcbiAgICB0aGlzLmVycm9ySW5kZXggPSBlcnJvckluZGV4O1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0L1R5cGVTY3JpcHQvd2lraS9CcmVha2luZy1DaGFuZ2VzI2V4dGVuZGluZy1idWlsdC1pbnMtbGlrZS1lcnJvci1hcnJheS1hbmQtbWFwLW1heS1uby1sb25nZXItd29ya1xuICAgIC8vIFNldCB0aGUgcHJvdG90eXBlIGV4cGxpY2l0bHkuXG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIEtpbnRvbmVBbGxSZWNvcmRzRXJyb3IucHJvdG90eXBlKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgYnVpbGRQYXRoIH0gZnJvbSBcIi4vLi4vdXJsXCI7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSBcIi4vLi4vaHR0cC9cIjtcbmltcG9ydCB7IEJ1bGtSZXF1ZXN0Q2xpZW50IH0gZnJvbSBcIi4vQnVsa1JlcXVlc3RDbGllbnRcIjtcbmltcG9ydCB7IEtpbnRvbmVBbGxSZWNvcmRzRXJyb3IgfSBmcm9tIFwiLi4vZXJyb3IvS2ludG9uZUFsbFJlY29yZHNFcnJvclwiO1xuaW1wb3J0IHtcbiAgQXBwSUQsXG4gIFJlY29yZElELFxuICBSZXZpc2lvbixcbiAgUmVjb3JkLFxuICBVcGRhdGVLZXksXG4gIENvbW1lbnRJRCxcbiAgQ29tbWVudCxcbiAgTWVudGlvbixcbn0gZnJvbSBcIi4vdHlwZXNcIjtcblxuY29uc3QgQUREX1JFQ09SRFNfTElNSVQgPSAxMDA7XG5jb25zdCBVUERBVEVfUkVDT1JEU19MSU1JVCA9IDEwMDtcbmNvbnN0IERFTEVURV9SRUNPUkRTX0xJTUlUID0gMTAwO1xuXG50eXBlIFJlY29yZEZvclBhcmFtZXRlciA9IHtcbiAgW2ZpZWxkQ29kZTogc3RyaW5nXToge1xuICAgIHZhbHVlOiB1bmtub3duO1xuICB9O1xufTtcblxuZXhwb3J0IGNsYXNzIFJlY29yZENsaWVudCB7XG4gIHByaXZhdGUgY2xpZW50OiBIdHRwQ2xpZW50O1xuICBwcml2YXRlIGJ1bGtSZXF1ZXN0Q2xpZW50OiBCdWxrUmVxdWVzdENsaWVudDtcbiAgcHJpdmF0ZSBndWVzdFNwYWNlSWQ/OiBudW1iZXIgfCBzdHJpbmc7XG4gIHByaXZhdGUgZGlkV2Fybk1heGltdW1PZmZzZXRWYWx1ZTogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBjbGllbnQ6IEh0dHBDbGllbnQsXG4gICAgYnVsa1JlcXVlc3RDbGllbnQ6IEJ1bGtSZXF1ZXN0Q2xpZW50LFxuICAgIGd1ZXN0U3BhY2VJZD86IG51bWJlciB8IHN0cmluZ1xuICApIHtcbiAgICB0aGlzLmNsaWVudCA9IGNsaWVudDtcbiAgICB0aGlzLmJ1bGtSZXF1ZXN0Q2xpZW50ID0gYnVsa1JlcXVlc3RDbGllbnQ7XG4gICAgdGhpcy5ndWVzdFNwYWNlSWQgPSBndWVzdFNwYWNlSWQ7XG4gICAgdGhpcy5kaWRXYXJuTWF4aW11bU9mZnNldFZhbHVlID0gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgZ2V0UmVjb3JkPFQgZXh0ZW5kcyBSZWNvcmQ+KHBhcmFtczoge1xuICAgIGFwcDogQXBwSUQ7XG4gICAgaWQ6IFJlY29yZElEO1xuICB9KTogUHJvbWlzZTx7IHJlY29yZDogVCB9PiB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICBlbmRwb2ludE5hbWU6IFwicmVjb3JkXCIsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCBwYXJhbXMpO1xuICB9XG5cbiAgcHVibGljIGFkZFJlY29yZChwYXJhbXM6IHtcbiAgICBhcHA6IEFwcElEO1xuICAgIHJlY29yZD86IFJlY29yZEZvclBhcmFtZXRlcjtcbiAgfSk6IFByb21pc2U8eyBpZDogc3RyaW5nOyByZXZpc2lvbjogc3RyaW5nIH0+IHtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgIGVuZHBvaW50TmFtZTogXCJyZWNvcmRcIixcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQucG9zdChwYXRoLCBwYXJhbXMpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVJlY29yZChcbiAgICBwYXJhbXM6XG4gICAgICB8IHtcbiAgICAgICAgICBhcHA6IEFwcElEO1xuICAgICAgICAgIGlkOiBSZWNvcmRJRDtcbiAgICAgICAgICByZWNvcmQ/OiBSZWNvcmRGb3JQYXJhbWV0ZXI7XG4gICAgICAgICAgcmV2aXNpb24/OiBSZXZpc2lvbjtcbiAgICAgICAgfVxuICAgICAgfCB7XG4gICAgICAgICAgYXBwOiBBcHBJRDtcbiAgICAgICAgICB1cGRhdGVLZXk6IFVwZGF0ZUtleTtcbiAgICAgICAgICByZWNvcmQ/OiBSZWNvcmRGb3JQYXJhbWV0ZXI7XG4gICAgICAgICAgcmV2aXNpb24/OiBSZXZpc2lvbjtcbiAgICAgICAgfVxuICApOiBQcm9taXNlPHsgcmV2aXNpb246IHN0cmluZyB9PiB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICBlbmRwb2ludE5hbWU6IFwicmVjb3JkXCIsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LnB1dChwYXRoLCBwYXJhbXMpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwc2VydFJlY29yZChwYXJhbXM6IHtcbiAgICBhcHA6IEFwcElEO1xuICAgIHVwZGF0ZUtleTogVXBkYXRlS2V5O1xuICAgIHJlY29yZD86IFJlY29yZEZvclBhcmFtZXRlcjtcbiAgICByZXZpc2lvbj86IFJldmlzaW9uO1xuICB9KTogUHJvbWlzZTx7IGlkOiBzdHJpbmc7IHJldmlzaW9uOiBzdHJpbmcgfT4ge1xuICAgIGNvbnN0IHsgYXBwLCB1cGRhdGVLZXksIHJlY29yZCB9ID0gcGFyYW1zO1xuICAgIC8vIGlmIHRoZSBjbGllbnQgY2FuJ3QgZ2V0IGEgcmVjb3JkIG1hdGNoZXMgYHVwZGF0ZUtleWAsIHVzZSBgYWRkUmVjb3JkYFxuICAgIGNvbnN0IHsgcmVjb3JkcyB9ID0gYXdhaXQgdGhpcy5nZXRSZWNvcmRzKHtcbiAgICAgIGFwcCxcbiAgICAgIHF1ZXJ5OiBgJHt1cGRhdGVLZXkuZmllbGR9ID0gXCIke3VwZGF0ZUtleS52YWx1ZX1cImAsXG4gICAgfSk7XG4gICAgaWYgKHJlY29yZHMubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHJlY29yZHNbMF0uJGlkLnR5cGUgPT09IFwiX19JRF9fXCIpIHtcbiAgICAgICAgY29uc3QgeyByZXZpc2lvbiB9ID0gYXdhaXQgdGhpcy51cGRhdGVSZWNvcmQocGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHsgaWQ6IHJlY29yZHNbMF0uJGlkLnZhbHVlLCByZXZpc2lvbiB9O1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIk1pc3NpbmcgYCRpZGAgaW4gYGdldFJlY29yZHNgIHJlc3BvbnNlLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gS2ludG9uZSBSRVNUIEFQSSBDbGllbnQuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hZGRSZWNvcmQoe1xuICAgICAgYXBwLFxuICAgICAgcmVjb3JkOiBPYmplY3QuYXNzaWduKHt9LCByZWNvcmQsIHtcbiAgICAgICAgW3VwZGF0ZUtleS5maWVsZF06IHsgdmFsdWU6IHVwZGF0ZUtleS52YWx1ZSB9LFxuICAgICAgfSksXG4gICAgfSk7XG4gIH1cblxuICAvLyBUT0RPOiBgcmVjb3Jkc2AgdHlwZSBpbiByZXR1cm4gdHlwZSBzaG91bGQgYmUgZmlsdGVyZWQgYnkgYGZpZWxkc2AuXG4gIHB1YmxpYyBhc3luYyBnZXRSZWNvcmRzPFQgZXh0ZW5kcyBSZWNvcmQ+KHBhcmFtczoge1xuICAgIGFwcDogQXBwSUQ7XG4gICAgZmllbGRzPzogc3RyaW5nW107XG4gICAgcXVlcnk/OiBzdHJpbmc7XG4gICAgdG90YWxDb3VudD86IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPHsgcmVjb3JkczogVFtdOyB0b3RhbENvdW50OiBzdHJpbmcgfCBudWxsIH0+IHtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgIGVuZHBvaW50TmFtZTogXCJyZWNvcmRzXCIsXG4gICAgfSk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsaWVudC5nZXQ8e1xuICAgICAgcmVjb3JkczogVFtdO1xuICAgICAgdG90YWxDb3VudDogc3RyaW5nIHwgbnVsbDtcbiAgICB9PihwYXRoLCBwYXJhbXMpO1xuICAgIHRoaXMud2Fybk1heGltdW1PZmZzZXRWYWx1ZUlmTmVlZGVkKHBhcmFtcy5xdWVyeSk7XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSB3YXJuTWF4aW11bU9mZnNldFZhbHVlSWZOZWVkZWQocXVlcnk/OiBzdHJpbmcpIHtcbiAgICBpZiAocXVlcnkpIHtcbiAgICAgIGNvbnN0IHJlZ2V4cCA9IC9vZmZzZXRcXHMrKFxcZCspL2k7XG4gICAgICBjb25zdCByZXN1bHQgPSBxdWVyeS5tYXRjaChyZWdleHApO1xuICAgICAgaWYgKFxuICAgICAgICAhdGhpcy5kaWRXYXJuTWF4aW11bU9mZnNldFZhbHVlICYmXG4gICAgICAgIHJlc3VsdCAmJlxuICAgICAgICBOdW1iZXIocmVzdWx0WzFdKSA+IDEwMDAwXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5kaWRXYXJuTWF4aW11bU9mZnNldFZhbHVlID0gdHJ1ZTtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIFwiV2FybmluZzogVGhlIG1heGltdW0gb2Zmc2V0IHZhbHVlIHdpbGwgYmUgbGltaXRlZCB0byAxMCwwMDAgaW4gdGhlIGZ1dHVyZS4gUGxlYXNlIHVzZSBgY3JlYXRlQ3Vyc29yKClgIGFuZCBgZ2V0UmVjb3Jkc0J5Q3Vyc29yKClgIGluc3RlYWQuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYWRkUmVjb3JkcyhwYXJhbXM6IHtcbiAgICBhcHA6IEFwcElEO1xuICAgIHJlY29yZHM6IFJlY29yZEZvclBhcmFtZXRlcltdO1xuICB9KTogUHJvbWlzZTx7XG4gICAgaWRzOiBzdHJpbmdbXTtcbiAgICByZXZpc2lvbnM6IHN0cmluZ1tdO1xuICAgIHJlY29yZHM6IEFycmF5PHsgaWQ6IHN0cmluZzsgcmV2aXNpb246IHN0cmluZyB9PjtcbiAgfT4ge1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgZW5kcG9pbnROYW1lOiBcInJlY29yZHNcIixcbiAgICB9KTtcbiAgICBjb25zdCB7IGlkcywgcmV2aXNpb25zIH0gPSBhd2FpdCB0aGlzLmNsaWVudC5wb3N0PHtcbiAgICAgIGlkczogc3RyaW5nW107XG4gICAgICByZXZpc2lvbnM6IHN0cmluZ1tdO1xuICAgIH0+KHBhdGgsIHBhcmFtcyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkcyxcbiAgICAgIHJldmlzaW9ucyxcbiAgICAgIHJlY29yZHM6IGlkcy5tYXAoKGlkLCBpKSA9PiAoeyBpZCwgcmV2aXNpb246IHJldmlzaW9uc1tpXSB9KSksXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVSZWNvcmRzKHBhcmFtczoge1xuICAgIGFwcDogQXBwSUQ7XG4gICAgcmVjb3JkczogQXJyYXk8XG4gICAgICB8IHsgaWQ6IFJlY29yZElEOyByZWNvcmQ/OiBSZWNvcmRGb3JQYXJhbWV0ZXI7IHJldmlzaW9uPzogUmV2aXNpb24gfVxuICAgICAgfCB7XG4gICAgICAgICAgdXBkYXRlS2V5OiBVcGRhdGVLZXk7XG4gICAgICAgICAgcmVjb3JkPzogUmVjb3JkRm9yUGFyYW1ldGVyO1xuICAgICAgICAgIHJldmlzaW9uPzogUmV2aXNpb247XG4gICAgICAgIH1cbiAgICA+O1xuICB9KTogUHJvbWlzZTx7IHJlY29yZHM6IEFycmF5PHsgaWQ6IHN0cmluZzsgcmV2aXNpb246IHN0cmluZyB9PiB9PiB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICBlbmRwb2ludE5hbWU6IFwicmVjb3Jkc1wiLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmNsaWVudC5wdXQocGF0aCwgcGFyYW1zKTtcbiAgfVxuXG4gIHB1YmxpYyBkZWxldGVSZWNvcmRzKHBhcmFtczoge1xuICAgIGFwcDogQXBwSUQ7XG4gICAgaWRzOiBSZWNvcmRJRFtdO1xuICAgIHJldmlzaW9ucz86IFJldmlzaW9uW107XG4gIH0pOiBQcm9taXNlPHt9PiB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICBlbmRwb2ludE5hbWU6IFwicmVjb3Jkc1wiLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmNsaWVudC5kZWxldGUocGF0aCwgcGFyYW1zKTtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVDdXJzb3IocGFyYW1zOiB7XG4gICAgYXBwOiBBcHBJRDtcbiAgICBmaWVsZHM/OiBzdHJpbmdbXTtcbiAgICBxdWVyeT86IHN0cmluZztcbiAgICBzaXplPzogbnVtYmVyIHwgc3RyaW5nO1xuICB9KTogUHJvbWlzZTx7IGlkOiBzdHJpbmc7IHRvdGFsQ291bnQ6IHN0cmluZyB9PiB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICBlbmRwb2ludE5hbWU6IFwicmVjb3Jkcy9jdXJzb3JcIixcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQucG9zdChwYXRoLCBwYXJhbXMpO1xuICB9XG5cbiAgcHVibGljIGdldFJlY29yZHNCeUN1cnNvcjxUIGV4dGVuZHMgUmVjb3JkPihwYXJhbXM6IHtcbiAgICBpZDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTx7XG4gICAgcmVjb3JkczogVFtdO1xuICAgIG5leHQ6IGJvb2xlYW47XG4gIH0+IHtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgIGVuZHBvaW50TmFtZTogXCJyZWNvcmRzL2N1cnNvclwiLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmNsaWVudC5nZXQocGF0aCwgcGFyYW1zKTtcbiAgfVxuXG4gIHB1YmxpYyBkZWxldGVDdXJzb3IocGFyYW1zOiB7IGlkOiBzdHJpbmcgfSk6IFByb21pc2U8e30+IHtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgIGVuZHBvaW50TmFtZTogXCJyZWNvcmRzL2N1cnNvclwiLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmNsaWVudC5kZWxldGUocGF0aCwgcGFyYW1zKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRBbGxSZWNvcmRzPFQgZXh0ZW5kcyBSZWNvcmQ+KHBhcmFtczoge1xuICAgIGFwcDogQXBwSUQ7XG4gICAgZmllbGRzPzogc3RyaW5nW107XG4gICAgY29uZGl0aW9uPzogc3RyaW5nO1xuICAgIG9yZGVyQnk/OiBzdHJpbmc7XG4gICAgd2l0aEN1cnNvcj86IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPFRbXT4ge1xuICAgIGNvbnN0IHsgY29uZGl0aW9uLCBvcmRlckJ5LCB3aXRoQ3Vyc29yID0gdHJ1ZSwgLi4ucmVzdCB9ID0gcGFyYW1zO1xuICAgIGlmICghb3JkZXJCeSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QWxsUmVjb3Jkc1dpdGhJZCh7IC4uLnJlc3QsIGNvbmRpdGlvbiB9KTtcbiAgICB9XG4gICAgaWYgKHdpdGhDdXJzb3IpIHtcbiAgICAgIGNvbnN0IGNvbmRpdGlvblF1ZXJ5ID0gY29uZGl0aW9uID8gYCR7Y29uZGl0aW9ufSBgIDogXCJcIjtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gYCR7Y29uZGl0aW9uUXVlcnl9JHtvcmRlckJ5ID8gYG9yZGVyIGJ5ICR7b3JkZXJCeX1gIDogXCJcIn1gO1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QWxsUmVjb3Jkc1dpdGhDdXJzb3IoeyAuLi5yZXN0LCBxdWVyeSB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0QWxsUmVjb3Jkc1dpdGhPZmZzZXQoeyAuLi5yZXN0LCBvcmRlckJ5LCBjb25kaXRpb24gfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0QWxsUmVjb3Jkc1dpdGhJZDxUIGV4dGVuZHMgUmVjb3JkPihwYXJhbXM6IHtcbiAgICBhcHA6IEFwcElEO1xuICAgIGZpZWxkcz86IHN0cmluZ1tdO1xuICAgIGNvbmRpdGlvbj86IHN0cmluZztcbiAgfSk6IFByb21pc2U8VFtdPiB7XG4gICAgY29uc3QgeyBmaWVsZHM6IG9yaWdpbmFsRmllbGRzLCAuLi5yZXN0IH0gPSBwYXJhbXM7XG4gICAgbGV0IGZpZWxkcyA9IG9yaWdpbmFsRmllbGRzO1xuICAgIC8vIEFwcGVuZCAkaWQgaWYgJGlkIGRvZXNuJ3QgZXhpc3QgaW4gZmllbGRzXG4gICAgaWYgKGZpZWxkcyAmJiBmaWVsZHMubGVuZ3RoID4gMCAmJiBmaWVsZHMuaW5kZXhPZihcIiRpZFwiKSA9PT0gLTEpIHtcbiAgICAgIGZpZWxkcyA9IFsuLi5maWVsZHMsIFwiJGlkXCJdO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nZXRBbGxSZWNvcmRzUmVjdXJzaXZlV2l0aElkKHsgLi4ucmVzdCwgZmllbGRzIH0sIFwiMFwiLCBbXSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldEFsbFJlY29yZHNSZWN1cnNpdmVXaXRoSWQ8VCBleHRlbmRzIFJlY29yZD4oXG4gICAgcGFyYW1zOiB7XG4gICAgICBhcHA6IEFwcElEO1xuICAgICAgZmllbGRzPzogc3RyaW5nW107XG4gICAgICBjb25kaXRpb24/OiBzdHJpbmc7XG4gICAgfSxcbiAgICBpZDogc3RyaW5nLFxuICAgIHJlY29yZHM6IFRbXVxuICApOiBQcm9taXNlPFRbXT4ge1xuICAgIGNvbnN0IEdFVF9SRUNPUkRTX0xJTUlUID0gNTAwO1xuXG4gICAgY29uc3QgeyBjb25kaXRpb24sIC4uLnJlc3QgfSA9IHBhcmFtcztcbiAgICBjb25zdCBjb25kaXRpb25RdWVyeSA9IGNvbmRpdGlvbiA/IGAoJHtjb25kaXRpb259KSBhbmQgYCA6IFwiXCI7XG4gICAgY29uc3QgcXVlcnkgPSBgJHtjb25kaXRpb25RdWVyeX0kaWQgPiAke2lkfSBvcmRlciBieSAkaWQgYXNjIGxpbWl0ICR7R0VUX1JFQ09SRFNfTElNSVR9YDtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmdldFJlY29yZHM8VD4oeyAuLi5yZXN0LCBxdWVyeSB9KTtcbiAgICBjb25zdCBhbGxSZWNvcmRzID0gcmVjb3Jkcy5jb25jYXQocmVzdWx0LnJlY29yZHMpO1xuICAgIGlmIChyZXN1bHQucmVjb3Jkcy5sZW5ndGggPCBHRVRfUkVDT1JEU19MSU1JVCkge1xuICAgICAgcmV0dXJuIGFsbFJlY29yZHM7XG4gICAgfVxuICAgIGNvbnN0IGxhc3RSZWNvcmQgPSByZXN1bHQucmVjb3Jkc1tyZXN1bHQucmVjb3Jkcy5sZW5ndGggLSAxXTtcbiAgICBpZiAobGFzdFJlY29yZC4kaWQudHlwZSA9PT0gXCJfX0lEX19cIikge1xuICAgICAgY29uc3QgbGFzdElkID0gbGFzdFJlY29yZC4kaWQudmFsdWU7XG4gICAgICByZXR1cm4gdGhpcy5nZXRBbGxSZWNvcmRzUmVjdXJzaXZlV2l0aElkKHBhcmFtcywgbGFzdElkLCBhbGxSZWNvcmRzKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJNaXNzaW5nIGAkaWRgIGluIGBnZXRSZWNvcmRzYCByZXNwb25zZS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIEtpbnRvbmUgUkVTVCBBUEkgQ2xpZW50LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0QWxsUmVjb3Jkc1dpdGhPZmZzZXQ8VCBleHRlbmRzIFJlY29yZD4ocGFyYW1zOiB7XG4gICAgYXBwOiBBcHBJRDtcbiAgICBmaWVsZHM/OiBzdHJpbmdbXTtcbiAgICBjb25kaXRpb24/OiBzdHJpbmc7XG4gICAgb3JkZXJCeT86IHN0cmluZztcbiAgfSk6IFByb21pc2U8VFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QWxsUmVjb3Jkc1JlY3Vyc2l2ZVdpdGhPZmZzZXQocGFyYW1zLCAwLCBbXSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldEFsbFJlY29yZHNSZWN1cnNpdmVXaXRoT2Zmc2V0PFQgZXh0ZW5kcyBSZWNvcmQ+KFxuICAgIHBhcmFtczoge1xuICAgICAgYXBwOiBBcHBJRDtcbiAgICAgIGZpZWxkcz86IHN0cmluZ1tdO1xuICAgICAgY29uZGl0aW9uPzogc3RyaW5nO1xuICAgICAgb3JkZXJCeT86IHN0cmluZztcbiAgICB9LFxuICAgIG9mZnNldDogbnVtYmVyLFxuICAgIHJlY29yZHM6IFRbXVxuICApOiBQcm9taXNlPFRbXT4ge1xuICAgIGNvbnN0IEdFVF9SRUNPUkRTX0xJTUlUID0gNTAwO1xuXG4gICAgY29uc3QgeyBjb25kaXRpb24sIG9yZGVyQnksIC4uLnJlc3QgfSA9IHBhcmFtcztcbiAgICBjb25zdCBjb25kaXRpb25RdWVyeSA9IGNvbmRpdGlvbiA/IGAke2NvbmRpdGlvbn0gYCA6IFwiXCI7XG4gICAgY29uc3QgcXVlcnkgPSBgJHtjb25kaXRpb25RdWVyeX0ke1xuICAgICAgb3JkZXJCeSA/IGBvcmRlciBieSAke29yZGVyQnl9IGAgOiBcIlwiXG4gICAgfWxpbWl0ICR7R0VUX1JFQ09SRFNfTElNSVR9IG9mZnNldCAke29mZnNldH1gO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0UmVjb3JkczxUPih7IC4uLnJlc3QsIHF1ZXJ5IH0pO1xuICAgIGNvbnN0IGFsbFJlY29yZHMgPSByZWNvcmRzLmNvbmNhdChyZXN1bHQucmVjb3Jkcyk7XG4gICAgaWYgKHJlc3VsdC5yZWNvcmRzLmxlbmd0aCA8IEdFVF9SRUNPUkRTX0xJTUlUKSB7XG4gICAgICByZXR1cm4gYWxsUmVjb3JkcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5nZXRBbGxSZWNvcmRzUmVjdXJzaXZlV2l0aE9mZnNldChcbiAgICAgIHBhcmFtcyxcbiAgICAgIG9mZnNldCArIEdFVF9SRUNPUkRTX0xJTUlULFxuICAgICAgYWxsUmVjb3Jkc1xuICAgICk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0QWxsUmVjb3Jkc1dpdGhDdXJzb3I8VCBleHRlbmRzIFJlY29yZD4ocGFyYW1zOiB7XG4gICAgYXBwOiBBcHBJRDtcbiAgICBmaWVsZHM/OiBzdHJpbmdbXTtcbiAgICBxdWVyeT86IHN0cmluZztcbiAgfSk6IFByb21pc2U8VFtdPiB7XG4gICAgY29uc3QgeyBpZCB9ID0gYXdhaXQgdGhpcy5jcmVhdGVDdXJzb3IocGFyYW1zKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0QWxsUmVjb3Jkc1JlY3Vyc2l2ZUJ5Q3Vyc29yPFQ+KGlkLCBbXSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGF3YWl0IHRoaXMuZGVsZXRlQ3Vyc29yKHsgaWQgfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldEFsbFJlY29yZHNSZWN1cnNpdmVCeUN1cnNvcjxUIGV4dGVuZHMgUmVjb3JkPihcbiAgICBpZDogc3RyaW5nLFxuICAgIHJlY29yZHM6IFRbXVxuICApOiBQcm9taXNlPFRbXT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0UmVjb3Jkc0J5Q3Vyc29yPFQ+KHsgaWQgfSk7XG4gICAgY29uc3QgYWxsUmVjb3JkcyA9IHJlY29yZHMuY29uY2F0KHJlc3VsdC5yZWNvcmRzKTtcbiAgICBpZiAocmVzdWx0Lm5leHQpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEFsbFJlY29yZHNSZWN1cnNpdmVCeUN1cnNvcihpZCwgYWxsUmVjb3Jkcyk7XG4gICAgfVxuICAgIHJldHVybiBhbGxSZWNvcmRzO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGFkZEFsbFJlY29yZHMocGFyYW1zOiB7XG4gICAgYXBwOiBBcHBJRDtcbiAgICByZWNvcmRzOiBSZWNvcmRGb3JQYXJhbWV0ZXJbXTtcbiAgfSk6IFByb21pc2U8eyByZWNvcmRzOiBBcnJheTx7IGlkOiBzdHJpbmc7IHJldmlzaW9uOiBzdHJpbmcgfT4gfT4ge1xuICAgIGlmIChcbiAgICAgICFwYXJhbXMucmVjb3Jkcy5ldmVyeShcbiAgICAgICAgKHJlY29yZCkgPT4gIUFycmF5LmlzQXJyYXkocmVjb3JkKSAmJiByZWNvcmQgaW5zdGFuY2VvZiBPYmplY3RcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInRoZSBgcmVjb3Jkc2AgcGFyYW1ldGVyIG11c3QgYmUgYW4gYXJyYXkgb2Ygb2JqZWN0LlwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYWRkQWxsUmVjb3Jkc1JlY3Vyc2l2ZShwYXJhbXMsIHBhcmFtcy5yZWNvcmRzLmxlbmd0aCwgW10pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhZGRBbGxSZWNvcmRzUmVjdXJzaXZlKFxuICAgIHBhcmFtczogeyBhcHA6IEFwcElEOyByZWNvcmRzOiBSZWNvcmRGb3JQYXJhbWV0ZXJbXSB9LFxuICAgIG51bU9mQWxsUmVjb3JkczogbnVtYmVyLFxuICAgIHJlc3VsdHM6IEFycmF5PHsgaWQ6IHN0cmluZzsgcmV2aXNpb246IHN0cmluZyB9PlxuICApOiBQcm9taXNlPHsgcmVjb3JkczogQXJyYXk8eyBpZDogc3RyaW5nOyByZXZpc2lvbjogc3RyaW5nIH0+IH0+IHtcbiAgICBjb25zdCBDSFVOS19MRU5HVEggPVxuICAgICAgdGhpcy5idWxrUmVxdWVzdENsaWVudC5SRVFVRVNUU19MRU5HVEhfTElNSVQgKiBBRERfUkVDT1JEU19MSU1JVDtcbiAgICBjb25zdCB7IGFwcCwgcmVjb3JkcyB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IHJlY29yZHNDaHVuayA9IHJlY29yZHMuc2xpY2UoMCwgQ0hVTktfTEVOR1RIKTtcbiAgICBpZiAocmVjb3Jkc0NodW5rLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHsgcmVjb3JkczogcmVzdWx0cyB9O1xuICAgIH1cbiAgICBsZXQgbmV3UmVzdWx0cztcbiAgICB0cnkge1xuICAgICAgbmV3UmVzdWx0cyA9IGF3YWl0IHRoaXMuYWRkQWxsUmVjb3Jkc1dpdGhCdWxrUmVxdWVzdCh7XG4gICAgICAgIGFwcCxcbiAgICAgICAgcmVjb3JkczogcmVjb3Jkc0NodW5rLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aHJvdyBuZXcgS2ludG9uZUFsbFJlY29yZHNFcnJvcihcbiAgICAgICAgeyByZWNvcmRzOiByZXN1bHRzIH0sXG4gICAgICAgIHJlY29yZHMsXG4gICAgICAgIG51bU9mQWxsUmVjb3JkcyxcbiAgICAgICAgZSxcbiAgICAgICAgQUREX1JFQ09SRFNfTElNSVRcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmFkZEFsbFJlY29yZHNSZWN1cnNpdmUoXG4gICAgICB7XG4gICAgICAgIGFwcCxcbiAgICAgICAgcmVjb3JkczogcmVjb3Jkcy5zbGljZShDSFVOS19MRU5HVEgpLFxuICAgICAgfSxcbiAgICAgIG51bU9mQWxsUmVjb3JkcyxcbiAgICAgIHJlc3VsdHMuY29uY2F0KG5ld1Jlc3VsdHMpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYWRkQWxsUmVjb3Jkc1dpdGhCdWxrUmVxdWVzdChwYXJhbXM6IHtcbiAgICBhcHA6IEFwcElEO1xuICAgIHJlY29yZHM6IFJlY29yZEZvclBhcmFtZXRlcltdO1xuICB9KTogUHJvbWlzZTxcbiAgICBBcnJheTx7XG4gICAgICBpZDogc3RyaW5nO1xuICAgICAgcmV2aXNpb246IHN0cmluZztcbiAgICB9PlxuICA+IHtcbiAgICBjb25zdCBzZXBhcmF0ZWRSZWNvcmRzID0gdGhpcy5zZXBhcmF0ZUFycmF5UmVjdXJzaXZlKFxuICAgICAgQUREX1JFQ09SRFNfTElNSVQsXG4gICAgICBbXSxcbiAgICAgIHBhcmFtcy5yZWNvcmRzXG4gICAgKTtcbiAgICBjb25zdCByZXF1ZXN0cyA9IHNlcGFyYXRlZFJlY29yZHMubWFwKChyZWNvcmRzKSA9PiAoe1xuICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgIGVuZHBvaW50TmFtZTogXCJyZWNvcmRzXCIgYXMgY29uc3QsXG4gICAgICBwYXlsb2FkOiB7XG4gICAgICAgIGFwcDogcGFyYW1zLmFwcCxcbiAgICAgICAgcmVjb3JkcyxcbiAgICAgIH0sXG4gICAgfSkpO1xuICAgIGNvbnN0IHJlc3VsdHMgPSAoYXdhaXQgdGhpcy5idWxrUmVxdWVzdENsaWVudC5zZW5kKHsgcmVxdWVzdHMgfSkpXG4gICAgICAucmVzdWx0cyBhcyBBcnJheTx7IGlkczogc3RyaW5nW107IHJldmlzaW9uczogc3RyaW5nW10gfT47XG4gICAgcmV0dXJuIHJlc3VsdHNcbiAgICAgIC5tYXAoKHJlc3VsdCkgPT4ge1xuICAgICAgICBjb25zdCB7IGlkcywgcmV2aXNpb25zIH0gPSByZXN1bHQ7XG4gICAgICAgIHJldHVybiBpZHMubWFwKChpZCwgaSkgPT4gKHsgaWQsIHJldmlzaW9uOiByZXZpc2lvbnNbaV0gfSkpO1xuICAgICAgfSlcbiAgICAgIC5yZWR1Y2UoKGFjYywgcmVjb3JkcykgPT4ge1xuICAgICAgICByZXR1cm4gYWNjLmNvbmNhdChyZWNvcmRzKTtcbiAgICAgIH0sIFtdKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVBbGxSZWNvcmRzKHBhcmFtczoge1xuICAgIGFwcDogQXBwSUQ7XG4gICAgcmVjb3JkczogQXJyYXk8XG4gICAgICB8IHsgaWQ6IFJlY29yZElEOyByZWNvcmQ/OiBSZWNvcmRGb3JQYXJhbWV0ZXI7IHJldmlzaW9uPzogUmV2aXNpb24gfVxuICAgICAgfCB7XG4gICAgICAgICAgdXBkYXRlS2V5OiBVcGRhdGVLZXk7XG4gICAgICAgICAgcmVjb3JkPzogUmVjb3JkRm9yUGFyYW1ldGVyO1xuICAgICAgICAgIHJldmlzaW9uPzogUmV2aXNpb247XG4gICAgICAgIH1cbiAgICA+O1xuICB9KTogUHJvbWlzZTx7IHJlY29yZHM6IEFycmF5PHsgaWQ6IHN0cmluZzsgcmV2aXNpb246IHN0cmluZyB9PiB9PiB7XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlQWxsUmVjb3Jkc1JlY3Vyc2l2ZShwYXJhbXMsIHBhcmFtcy5yZWNvcmRzLmxlbmd0aCwgW10pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVBbGxSZWNvcmRzUmVjdXJzaXZlKFxuICAgIHBhcmFtczoge1xuICAgICAgYXBwOiBBcHBJRDtcbiAgICAgIHJlY29yZHM6IEFycmF5PFxuICAgICAgICB8IHsgaWQ6IFJlY29yZElEOyByZWNvcmQ/OiBSZWNvcmRGb3JQYXJhbWV0ZXI7IHJldmlzaW9uPzogUmV2aXNpb24gfVxuICAgICAgICB8IHtcbiAgICAgICAgICAgIHVwZGF0ZUtleTogVXBkYXRlS2V5O1xuICAgICAgICAgICAgcmVjb3JkPzogUmVjb3JkRm9yUGFyYW1ldGVyO1xuICAgICAgICAgICAgcmV2aXNpb24/OiBSZXZpc2lvbjtcbiAgICAgICAgICB9XG4gICAgICA+O1xuICAgIH0sXG4gICAgbnVtT2ZBbGxSZWNvcmRzOiBudW1iZXIsXG4gICAgcmVzdWx0czogQXJyYXk8eyBpZDogc3RyaW5nOyByZXZpc2lvbjogc3RyaW5nIH0+XG4gICk6IFByb21pc2U8eyByZWNvcmRzOiBBcnJheTx7IGlkOiBzdHJpbmc7IHJldmlzaW9uOiBzdHJpbmcgfT4gfT4ge1xuICAgIGNvbnN0IENIVU5LX0xFTkdUSCA9XG4gICAgICB0aGlzLmJ1bGtSZXF1ZXN0Q2xpZW50LlJFUVVFU1RTX0xFTkdUSF9MSU1JVCAqIFVQREFURV9SRUNPUkRTX0xJTUlUO1xuICAgIGNvbnN0IHsgYXBwLCByZWNvcmRzIH0gPSBwYXJhbXM7XG4gICAgY29uc3QgcmVjb3Jkc0NodW5rID0gcmVjb3Jkcy5zbGljZSgwLCBDSFVOS19MRU5HVEgpO1xuICAgIGlmIChyZWNvcmRzQ2h1bmsubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4geyByZWNvcmRzOiByZXN1bHRzIH07XG4gICAgfVxuICAgIGxldCBuZXdSZXN1bHRzO1xuICAgIHRyeSB7XG4gICAgICBuZXdSZXN1bHRzID0gYXdhaXQgdGhpcy51cGRhdGVBbGxSZWNvcmRzV2l0aEJ1bGtSZXF1ZXN0KHtcbiAgICAgICAgYXBwLFxuICAgICAgICByZWNvcmRzOiByZWNvcmRzQ2h1bmssXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IG5ldyBLaW50b25lQWxsUmVjb3Jkc0Vycm9yKFxuICAgICAgICB7IHJlY29yZHM6IHJlc3VsdHMgfSxcbiAgICAgICAgcmVjb3JkcyxcbiAgICAgICAgbnVtT2ZBbGxSZWNvcmRzLFxuICAgICAgICBlLFxuICAgICAgICBVUERBVEVfUkVDT1JEU19MSU1JVFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlQWxsUmVjb3Jkc1JlY3Vyc2l2ZShcbiAgICAgIHtcbiAgICAgICAgYXBwLFxuICAgICAgICByZWNvcmRzOiByZWNvcmRzLnNsaWNlKENIVU5LX0xFTkdUSCksXG4gICAgICB9LFxuICAgICAgbnVtT2ZBbGxSZWNvcmRzLFxuICAgICAgcmVzdWx0cy5jb25jYXQobmV3UmVzdWx0cylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVBbGxSZWNvcmRzV2l0aEJ1bGtSZXF1ZXN0KHBhcmFtczoge1xuICAgIGFwcDogQXBwSUQ7XG4gICAgcmVjb3JkczogQXJyYXk8XG4gICAgICB8IHsgaWQ6IFJlY29yZElEOyByZWNvcmQ/OiBSZWNvcmRGb3JQYXJhbWV0ZXI7IHJldmlzaW9uPzogUmV2aXNpb24gfVxuICAgICAgfCB7XG4gICAgICAgICAgdXBkYXRlS2V5OiBVcGRhdGVLZXk7XG4gICAgICAgICAgcmVjb3JkPzogUmVjb3JkRm9yUGFyYW1ldGVyO1xuICAgICAgICAgIHJldmlzaW9uPzogUmV2aXNpb247XG4gICAgICAgIH1cbiAgICA+O1xuICB9KTogUHJvbWlzZTxBcnJheTx7IGlkOiBzdHJpbmc7IHJldmlzaW9uOiBzdHJpbmcgfT4+IHtcbiAgICBjb25zdCBzZXBhcmF0ZWRSZWNvcmRzID0gdGhpcy5zZXBhcmF0ZUFycmF5UmVjdXJzaXZlKFxuICAgICAgVVBEQVRFX1JFQ09SRFNfTElNSVQsXG4gICAgICBbXSxcbiAgICAgIHBhcmFtcy5yZWNvcmRzXG4gICAgKTtcbiAgICBjb25zdCByZXF1ZXN0cyA9IHNlcGFyYXRlZFJlY29yZHMubWFwKChyZWNvcmRzKSA9PiAoe1xuICAgICAgbWV0aG9kOiBcIlBVVFwiLFxuICAgICAgZW5kcG9pbnROYW1lOiBcInJlY29yZHNcIiBhcyBjb25zdCxcbiAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgYXBwOiBwYXJhbXMuYXBwLFxuICAgICAgICByZWNvcmRzLFxuICAgICAgfSxcbiAgICB9KSk7XG4gICAgY29uc3QgcmVzdWx0cyA9IChhd2FpdCB0aGlzLmJ1bGtSZXF1ZXN0Q2xpZW50LnNlbmQoeyByZXF1ZXN0cyB9KSlcbiAgICAgIC5yZXN1bHRzIGFzIEFycmF5PHsgcmVjb3JkczogQXJyYXk8eyBpZDogc3RyaW5nOyByZXZpc2lvbjogc3RyaW5nIH0+IH0+O1xuICAgIHJldHVybiByZXN1bHRzXG4gICAgICAubWFwKChyZXN1bHQpID0+IHJlc3VsdC5yZWNvcmRzKVxuICAgICAgLnJlZHVjZSgoYWNjLCByZWNvcmRzKSA9PiB7XG4gICAgICAgIHJldHVybiBhY2MuY29uY2F0KHJlY29yZHMpO1xuICAgICAgfSwgW10pO1xuICB9XG5cbiAgcHVibGljIGRlbGV0ZUFsbFJlY29yZHMocGFyYW1zOiB7XG4gICAgYXBwOiBBcHBJRDtcbiAgICByZWNvcmRzOiBBcnJheTx7XG4gICAgICBpZDogUmVjb3JkSUQ7XG4gICAgICByZXZpc2lvbj86IFJldmlzaW9uO1xuICAgIH0+O1xuICB9KTogUHJvbWlzZTx7fT4ge1xuICAgIHJldHVybiB0aGlzLmRlbGV0ZUFsbFJlY29yZHNSZWN1cnNpdmUocGFyYW1zLCBwYXJhbXMucmVjb3Jkcy5sZW5ndGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkZWxldGVBbGxSZWNvcmRzUmVjdXJzaXZlKFxuICAgIHBhcmFtczoge1xuICAgICAgYXBwOiBBcHBJRDtcbiAgICAgIHJlY29yZHM6IEFycmF5PHtcbiAgICAgICAgaWQ6IFJlY29yZElEO1xuICAgICAgICByZXZpc2lvbj86IFJldmlzaW9uO1xuICAgICAgfT47XG4gICAgfSxcbiAgICBudW1PZkFsbFJlY29yZHM6IG51bWJlclxuICApOiBQcm9taXNlPHt9PiB7XG4gICAgY29uc3QgQ0hVTktfTEVOR1RIID1cbiAgICAgIHRoaXMuYnVsa1JlcXVlc3RDbGllbnQuUkVRVUVTVFNfTEVOR1RIX0xJTUlUICogREVMRVRFX1JFQ09SRFNfTElNSVQ7XG4gICAgY29uc3QgeyBhcHAsIHJlY29yZHMgfSA9IHBhcmFtcztcbiAgICBjb25zdCByZWNvcmRzQ2h1bmsgPSByZWNvcmRzLnNsaWNlKDAsIENIVU5LX0xFTkdUSCk7XG4gICAgaWYgKHJlY29yZHNDaHVuay5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuZGVsZXRlQWxsUmVjb3Jkc1dpdGhCdWxrUmVxdWVzdCh7XG4gICAgICAgIGFwcCxcbiAgICAgICAgcmVjb3JkczogcmVjb3Jkc0NodW5rLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aHJvdyBuZXcgS2ludG9uZUFsbFJlY29yZHNFcnJvcihcbiAgICAgICAge30sXG4gICAgICAgIHJlY29yZHMsXG4gICAgICAgIG51bU9mQWxsUmVjb3JkcyxcbiAgICAgICAgZSxcbiAgICAgICAgREVMRVRFX1JFQ09SRFNfTElNSVRcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRlbGV0ZUFsbFJlY29yZHNSZWN1cnNpdmUoXG4gICAgICB7XG4gICAgICAgIGFwcCxcbiAgICAgICAgcmVjb3JkczogcmVjb3Jkcy5zbGljZShDSFVOS19MRU5HVEgpLFxuICAgICAgfSxcbiAgICAgIG51bU9mQWxsUmVjb3Jkc1xuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRlbGV0ZUFsbFJlY29yZHNXaXRoQnVsa1JlcXVlc3QocGFyYW1zOiB7XG4gICAgYXBwOiBBcHBJRDtcbiAgICByZWNvcmRzOiBBcnJheTx7XG4gICAgICBpZDogUmVjb3JkSUQ7XG4gICAgICByZXZpc2lvbj86IFJldmlzaW9uO1xuICAgIH0+O1xuICB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc2VwYXJhdGVkUmVjb3JkcyA9IHRoaXMuc2VwYXJhdGVBcnJheVJlY3Vyc2l2ZShcbiAgICAgIERFTEVURV9SRUNPUkRTX0xJTUlULFxuICAgICAgW10sXG4gICAgICBwYXJhbXMucmVjb3Jkc1xuICAgICk7XG4gICAgY29uc3QgcmVxdWVzdHMgPSBzZXBhcmF0ZWRSZWNvcmRzLm1hcCgocmVjb3JkcykgPT4gKHtcbiAgICAgIG1ldGhvZDogXCJERUxFVEVcIixcbiAgICAgIGVuZHBvaW50TmFtZTogXCJyZWNvcmRzXCIgYXMgY29uc3QsXG4gICAgICBwYXlsb2FkOiB7XG4gICAgICAgIGFwcDogcGFyYW1zLmFwcCxcbiAgICAgICAgaWRzOiByZWNvcmRzLm1hcCgocmVjb3JkKSA9PiByZWNvcmQuaWQpLFxuICAgICAgICByZXZpc2lvbnM6IHJlY29yZHMubWFwKChyZWNvcmQpID0+IHJlY29yZC5yZXZpc2lvbiksXG4gICAgICB9LFxuICAgIH0pKTtcbiAgICBhd2FpdCB0aGlzLmJ1bGtSZXF1ZXN0Q2xpZW50LnNlbmQoeyByZXF1ZXN0cyB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2VwYXJhdGVBcnJheVJlY3Vyc2l2ZTxUPihcbiAgICBzaXplOiBudW1iZXIsXG4gICAgc2VwYXJhdGVkOiBUW11bXSxcbiAgICBhcnJheTogVFtdXG4gICk6IFRbXVtdIHtcbiAgICBjb25zdCBjaHVuayA9IGFycmF5LnNsaWNlKDAsIHNpemUpO1xuICAgIGlmIChjaHVuay5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBzZXBhcmF0ZWQ7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNlcGFyYXRlQXJyYXlSZWN1cnNpdmUoXG4gICAgICBzaXplLFxuICAgICAgWy4uLnNlcGFyYXRlZCwgY2h1bmtdLFxuICAgICAgYXJyYXkuc2xpY2Uoc2l6ZSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFkZFJlY29yZENvbW1lbnQocGFyYW1zOiB7XG4gICAgYXBwOiBBcHBJRDtcbiAgICByZWNvcmQ6IFJlY29yZElEO1xuICAgIGNvbW1lbnQ6IHtcbiAgICAgIHRleHQ6IHN0cmluZztcbiAgICAgIG1lbnRpb25zPzogTWVudGlvbltdO1xuICAgIH07XG4gIH0pOiBQcm9taXNlPHsgaWQ6IHN0cmluZyB9PiB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICBlbmRwb2ludE5hbWU6IFwicmVjb3JkL2NvbW1lbnRcIixcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQucG9zdChwYXRoLCBwYXJhbXMpO1xuICB9XG5cbiAgcHVibGljIGRlbGV0ZVJlY29yZENvbW1lbnQocGFyYW1zOiB7XG4gICAgYXBwOiBBcHBJRDtcbiAgICByZWNvcmQ6IFJlY29yZElEO1xuICAgIGNvbW1lbnQ6IENvbW1lbnRJRDtcbiAgfSk6IFByb21pc2U8e30+IHtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgIGVuZHBvaW50TmFtZTogXCJyZWNvcmQvY29tbWVudFwiLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmNsaWVudC5kZWxldGUocGF0aCwgcGFyYW1zKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSZWNvcmRDb21tZW50cyhwYXJhbXM6IHtcbiAgICBhcHA6IEFwcElEO1xuICAgIHJlY29yZDogUmVjb3JkSUQ7XG4gICAgb3JkZXI/OiBcImFzY1wiIHwgXCJkZXNjXCI7XG4gICAgb2Zmc2V0PzogbnVtYmVyO1xuICAgIGxpbWl0PzogbnVtYmVyO1xuICB9KTogUHJvbWlzZTx7IGNvbW1lbnRzOiBDb21tZW50W107IG9sZGVyOiBib29sZWFuOyBuZXdlcjogYm9vbGVhbiB9PiB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICBlbmRwb2ludE5hbWU6IFwicmVjb3JkL2NvbW1lbnRzXCIsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCBwYXJhbXMpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVJlY29yZEFzc2lnbmVlcyhwYXJhbXM6IHtcbiAgICBhcHA6IEFwcElEO1xuICAgIGlkOiBSZWNvcmRJRDtcbiAgICBhc3NpZ25lZXM6IHN0cmluZ1tdO1xuICAgIHJldmlzaW9uPzogUmV2aXNpb247XG4gIH0pOiBQcm9taXNlPHsgcmV2aXNpb246IHN0cmluZyB9PiB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICBlbmRwb2ludE5hbWU6IFwicmVjb3JkL2Fzc2lnbmVlc1wiLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmNsaWVudC5wdXQocGF0aCwgcGFyYW1zKTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVSZWNvcmRTdGF0dXMocGFyYW1zOiB7XG4gICAgYWN0aW9uOiBzdHJpbmc7XG4gICAgYXBwOiBBcHBJRDtcbiAgICBhc3NpZ25lZT86IHN0cmluZztcbiAgICBpZDogUmVjb3JkSUQ7XG4gICAgcmV2aXNpb24/OiBSZXZpc2lvbjtcbiAgfSk6IFByb21pc2U8eyByZXZpc2lvbjogc3RyaW5nIH0+IHtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgIGVuZHBvaW50TmFtZTogXCJyZWNvcmQvc3RhdHVzXCIsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LnB1dChwYXRoLCBwYXJhbXMpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVJlY29yZHNTdGF0dXMocGFyYW1zOiB7XG4gICAgYXBwOiBBcHBJRDtcbiAgICByZWNvcmRzOiBBcnJheTx7XG4gICAgICBhY3Rpb246IHN0cmluZztcbiAgICAgIGFzc2lnbmVlPzogc3RyaW5nO1xuICAgICAgaWQ6IFJlY29yZElEO1xuICAgICAgcmV2aXNpb24/OiBSZXZpc2lvbjtcbiAgICB9PjtcbiAgfSk6IFByb21pc2U8eyByZWNvcmRzOiBBcnJheTx7IGlkOiBzdHJpbmc7IHJldmlzaW9uOiBzdHJpbmcgfT4gfT4ge1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgZW5kcG9pbnROYW1lOiBcInJlY29yZHMvc3RhdHVzXCIsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LnB1dChwYXRoLCBwYXJhbXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHBhcmFtczogeyBlbmRwb2ludE5hbWU6IHN0cmluZyB9KSB7XG4gICAgcmV0dXJuIGJ1aWxkUGF0aCh7XG4gICAgICAuLi5wYXJhbXMsXG4gICAgICBndWVzdFNwYWNlSWQ6IHRoaXMuZ3Vlc3RTcGFjZUlkLFxuICAgIH0pO1xuICB9XG59XG4iLCIvKiBlc2xpbnQtZW52IGJyb3dzZXIgKi9cbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgPyBzZWxmLkZvcm1EYXRhIDogd2luZG93LkZvcm1EYXRhO1xuIiwiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gXCIuLi9odHRwXCI7XG5pbXBvcnQgeyBidWlsZFBhdGggfSBmcm9tIFwiLi4vdXJsXCI7XG5pbXBvcnQgRm9ybURhdGEgZnJvbSBcImZvcm0tZGF0YVwiO1xuaW1wb3J0IHsgcGxhdGZvcm1EZXBzIH0gZnJvbSBcIi4uL3BsYXRmb3JtXCI7XG5pbXBvcnQgeyBVbnN1cHBvcnRlZFBsYXRmb3JtRXJyb3IgfSBmcm9tIFwiLi4vcGxhdGZvcm0vVW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yXCI7XG5cbmV4cG9ydCBjbGFzcyBGaWxlQ2xpZW50IHtcbiAgcHJpdmF0ZSBjbGllbnQ6IEh0dHBDbGllbnQ7XG4gIHByaXZhdGUgZ3Vlc3RTcGFjZUlkPzogbnVtYmVyIHwgc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKGNsaWVudDogSHR0cENsaWVudCwgZ3Vlc3RTcGFjZUlkPzogbnVtYmVyIHwgc3RyaW5nKSB7XG4gICAgdGhpcy5jbGllbnQgPSBjbGllbnQ7XG4gICAgdGhpcy5ndWVzdFNwYWNlSWQgPSBndWVzdFNwYWNlSWQ7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBsb2FkRmlsZShwYXJhbXM6IHtcbiAgICBmaWxlOiB7IG5hbWU6IHN0cmluZzsgZGF0YTogdW5rbm93biB9IHwgeyBwYXRoOiBzdHJpbmcgfTtcbiAgfSk6IFByb21pc2U8eyBmaWxlS2V5OiBzdHJpbmcgfT4ge1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgZW5kcG9pbnROYW1lOiBcImZpbGVcIixcbiAgICB9KTtcblxuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgaWYgKFwicGF0aFwiIGluIHBhcmFtcy5maWxlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IG5hbWUsIGRhdGEgfSA9IGF3YWl0IHBsYXRmb3JtRGVwcy5yZWFkRmlsZUZyb21QYXRoKFxuICAgICAgICAgIHBhcmFtcy5maWxlLnBhdGhcbiAgICAgICAgKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKFwiZmlsZVwiLCBkYXRhLCBuYW1lKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBVbnN1cHBvcnRlZFBsYXRmb3JtRXJyb3IpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgdXBsb2FkRmlsZSBkb2Vzbid0IGFsbG93IHRvIGFjY2VwdCBhIGZpbGUgcGF0aCBpbiAke2UucGxhdGZvcm19IGVudmlyb25tZW50LmBcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgeyBuYW1lLCBkYXRhIH0gPSBwYXJhbXMuZmlsZTtcbiAgICAgIGZvcm1EYXRhLmFwcGVuZChcImZpbGVcIiwgcGxhdGZvcm1EZXBzLmJ1aWxkRm9ybURhdGFWYWx1ZShkYXRhKSwgbmFtZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNsaWVudC5wb3N0RGF0YShwYXRoLCBmb3JtRGF0YSk7XG4gIH1cblxuICBwdWJsaWMgZG93bmxvYWRGaWxlKHBhcmFtczogeyBmaWxlS2V5OiBzdHJpbmcgfSk6IFByb21pc2U8QXJyYXlCdWZmZXI+IHtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgIGVuZHBvaW50TmFtZTogXCJmaWxlXCIsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldERhdGEocGF0aCwgcGFyYW1zKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZChwYXJhbXM6IHsgZW5kcG9pbnROYW1lOiBzdHJpbmcgfSkge1xuICAgIHJldHVybiBidWlsZFBhdGgoe1xuICAgICAgLi4ucGFyYW1zLFxuICAgICAgZ3Vlc3RTcGFjZUlkOiB0aGlzLmd1ZXN0U3BhY2VJZCxcbiAgICB9KTtcbiAgfVxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZywgYXJncyk7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJy4vaGVscGVycy9iaW5kJyk7XG5cbi8vIHV0aWxzIGlzIGEgbGlicmFyeSBvZiBnZW5lcmljIGhlbHBlciBmdW5jdGlvbnMgbm9uLXNwZWNpZmljIHRvIGF4aW9zXG5cbnZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXkodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgdW5kZWZpbmVkXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3VuZGVmaW5lZCc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCdWZmZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQnVmZmVyKHZhbCkge1xuICByZXR1cm4gdmFsICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwpICYmIHZhbC5jb25zdHJ1Y3RvciAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsLmNvbnN0cnVjdG9yKVxuICAgICYmIHR5cGVvZiB2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIgPT09ICdmdW5jdGlvbicgJiYgdmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKHZhbCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXIodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEFycmF5QnVmZmVyXSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEZvcm1EYXRhLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGb3JtRGF0YSh2YWwpIHtcbiAgcmV0dXJuICh0eXBlb2YgRm9ybURhdGEgIT09ICd1bmRlZmluZWQnKSAmJiAodmFsIGluc3RhbmNlb2YgRm9ybURhdGEpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXJWaWV3KHZhbCkge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcpICYmIChBcnJheUJ1ZmZlci5pc1ZpZXcpKSB7XG4gICAgcmVzdWx0ID0gQXJyYXlCdWZmZXIuaXNWaWV3KHZhbCk7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gKHZhbCkgJiYgKHZhbC5idWZmZXIpICYmICh2YWwuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJpbmdcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmluZywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZyc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBOdW1iZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIE51bWJlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTnVtYmVyKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ251bWJlcic7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IG51bGwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWwpIHtcbiAgaWYgKHRvU3RyaW5nLmNhbGwodmFsKSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbCk7XG4gIHJldHVybiBwcm90b3R5cGUgPT09IG51bGwgfHwgcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRGF0ZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRGF0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRGF0ZSh2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRmlsZSh2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRmlsZV0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQmxvYlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQmxvYiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQmxvYih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgQmxvYl0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZ1bmN0aW9uLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmVhbVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyZWFtLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJlYW0odmFsKSB7XG4gIHJldHVybiBpc09iamVjdCh2YWwpICYmIGlzRnVuY3Rpb24odmFsLnBpcGUpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzVVJMU2VhcmNoUGFyYW1zKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIFVSTFNlYXJjaFBhcmFtcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsIGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zO1xufVxuXG4vKipcbiAqIFRyaW0gZXhjZXNzIHdoaXRlc3BhY2Ugb2ZmIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgVGhlIFN0cmluZyB0byB0cmltXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgU3RyaW5nIGZyZWVkIG9mIGV4Y2VzcyB3aGl0ZXNwYWNlXG4gKi9cbmZ1bmN0aW9uIHRyaW0oc3RyKSB7XG4gIHJldHVybiBzdHIudHJpbSA/IHN0ci50cmltKCkgOiBzdHIucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudFxuICpcbiAqIFRoaXMgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXIsIGFuZCByZWFjdC1uYXRpdmUuXG4gKiBCb3RoIGVudmlyb25tZW50cyBzdXBwb3J0IFhNTEh0dHBSZXF1ZXN0LCBidXQgbm90IGZ1bGx5IHN0YW5kYXJkIGdsb2JhbHMuXG4gKlxuICogd2ViIHdvcmtlcnM6XG4gKiAgdHlwZW9mIHdpbmRvdyAtPiB1bmRlZmluZWRcbiAqICB0eXBlb2YgZG9jdW1lbnQgLT4gdW5kZWZpbmVkXG4gKlxuICogcmVhY3QtbmF0aXZlOlxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdSZWFjdE5hdGl2ZSdcbiAqIG5hdGl2ZXNjcmlwdFxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdOYXRpdmVTY3JpcHQnIG9yICdOUydcbiAqL1xuZnVuY3Rpb24gaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gIGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiAobmF2aWdhdG9yLnByb2R1Y3QgPT09ICdSZWFjdE5hdGl2ZScgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ05hdGl2ZVNjcmlwdCcgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ05TJykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIChcbiAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdcbiAgKTtcbn1cblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYW4gQXJyYXkgb3IgYW4gT2JqZWN0IGludm9raW5nIGEgZnVuY3Rpb24gZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiBgb2JqYCBpcyBhbiBBcnJheSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGluZGV4LCBhbmQgY29tcGxldGUgYXJyYXkgZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiAnb2JqJyBpcyBhbiBPYmplY3QgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBrZXksIGFuZCBjb21wbGV0ZSBvYmplY3QgZm9yIGVhY2ggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG9iaiBUaGUgb2JqZWN0IHRvIGl0ZXJhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBjYWxsYmFjayB0byBpbnZva2UgZm9yIGVhY2ggaXRlbVxuICovXG5mdW5jdGlvbiBmb3JFYWNoKG9iaiwgZm4pIHtcbiAgLy8gRG9uJ3QgYm90aGVyIGlmIG5vIHZhbHVlIHByb3ZpZGVkXG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBGb3JjZSBhbiBhcnJheSBpZiBub3QgYWxyZWFkeSBzb21ldGhpbmcgaXRlcmFibGVcbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgb2JqID0gW29ial07XG4gIH1cblxuICBpZiAoaXNBcnJheShvYmopKSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIGFycmF5IHZhbHVlc1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gb2JqLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpbaV0sIGksIG9iaik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBvYmplY3Qga2V5c1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2tleV0sIGtleSwgb2JqKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBY2NlcHRzIHZhcmFyZ3MgZXhwZWN0aW5nIGVhY2ggYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0LCB0aGVuXG4gKiBpbW11dGFibHkgbWVyZ2VzIHRoZSBwcm9wZXJ0aWVzIG9mIGVhY2ggb2JqZWN0IGFuZCByZXR1cm5zIHJlc3VsdC5cbiAqXG4gKiBXaGVuIG11bHRpcGxlIG9iamVjdHMgY29udGFpbiB0aGUgc2FtZSBrZXkgdGhlIGxhdGVyIG9iamVjdCBpblxuICogdGhlIGFyZ3VtZW50cyBsaXN0IHdpbGwgdGFrZSBwcmVjZWRlbmNlLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciByZXN1bHQgPSBtZXJnZSh7Zm9vOiAxMjN9LCB7Zm9vOiA0NTZ9KTtcbiAqIGNvbnNvbGUubG9nKHJlc3VsdC5mb28pOyAvLyBvdXRwdXRzIDQ1NlxuICogYGBgXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iajEgT2JqZWN0IHRvIG1lcmdlXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXN1bHQgb2YgYWxsIG1lcmdlIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gbWVyZ2UoLyogb2JqMSwgb2JqMiwgb2JqMywgLi4uICovKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgZnVuY3Rpb24gYXNzaWduVmFsdWUodmFsLCBrZXkpIHtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChyZXN1bHRba2V5XSkgJiYgaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG1lcmdlKHJlc3VsdFtrZXldLCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG1lcmdlKHt9LCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheSh2YWwpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbC5zbGljZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbDtcbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBmb3JFYWNoKGFyZ3VtZW50c1tpXSwgYXNzaWduVmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRXh0ZW5kcyBvYmplY3QgYSBieSBtdXRhYmx5IGFkZGluZyB0byBpdCB0aGUgcHJvcGVydGllcyBvZiBvYmplY3QgYi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYSBUaGUgb2JqZWN0IHRvIGJlIGV4dGVuZGVkXG4gKiBAcGFyYW0ge09iamVjdH0gYiBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tXG4gKiBAcGFyYW0ge09iamVjdH0gdGhpc0FyZyBUaGUgb2JqZWN0IHRvIGJpbmQgZnVuY3Rpb24gdG9cbiAqIEByZXR1cm4ge09iamVjdH0gVGhlIHJlc3VsdGluZyB2YWx1ZSBvZiBvYmplY3QgYVxuICovXG5mdW5jdGlvbiBleHRlbmQoYSwgYiwgdGhpc0FyZykge1xuICBmb3JFYWNoKGIsIGZ1bmN0aW9uIGFzc2lnblZhbHVlKHZhbCwga2V5KSB7XG4gICAgaWYgKHRoaXNBcmcgJiYgdHlwZW9mIHZhbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgYVtrZXldID0gYmluZCh2YWwsIHRoaXNBcmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhW2tleV0gPSB2YWw7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGE7XG59XG5cbi8qKlxuICogUmVtb3ZlIGJ5dGUgb3JkZXIgbWFya2VyLiBUaGlzIGNhdGNoZXMgRUYgQkIgQkYgKHRoZSBVVEYtOCBCT00pXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgd2l0aCBCT01cbiAqIEByZXR1cm4ge3N0cmluZ30gY29udGVudCB2YWx1ZSB3aXRob3V0IEJPTVxuICovXG5mdW5jdGlvbiBzdHJpcEJPTShjb250ZW50KSB7XG4gIGlmIChjb250ZW50LmNoYXJDb2RlQXQoMCkgPT09IDB4RkVGRikge1xuICAgIGNvbnRlbnQgPSBjb250ZW50LnNsaWNlKDEpO1xuICB9XG4gIHJldHVybiBjb250ZW50O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNBcnJheTogaXNBcnJheSxcbiAgaXNBcnJheUJ1ZmZlcjogaXNBcnJheUJ1ZmZlcixcbiAgaXNCdWZmZXI6IGlzQnVmZmVyLFxuICBpc0Zvcm1EYXRhOiBpc0Zvcm1EYXRhLFxuICBpc0FycmF5QnVmZmVyVmlldzogaXNBcnJheUJ1ZmZlclZpZXcsXG4gIGlzU3RyaW5nOiBpc1N0cmluZyxcbiAgaXNOdW1iZXI6IGlzTnVtYmVyLFxuICBpc09iamVjdDogaXNPYmplY3QsXG4gIGlzUGxhaW5PYmplY3Q6IGlzUGxhaW5PYmplY3QsXG4gIGlzVW5kZWZpbmVkOiBpc1VuZGVmaW5lZCxcbiAgaXNEYXRlOiBpc0RhdGUsXG4gIGlzRmlsZTogaXNGaWxlLFxuICBpc0Jsb2I6IGlzQmxvYixcbiAgaXNGdW5jdGlvbjogaXNGdW5jdGlvbixcbiAgaXNTdHJlYW06IGlzU3RyZWFtLFxuICBpc1VSTFNlYXJjaFBhcmFtczogaXNVUkxTZWFyY2hQYXJhbXMsXG4gIGlzU3RhbmRhcmRCcm93c2VyRW52OiBpc1N0YW5kYXJkQnJvd3NlckVudixcbiAgZm9yRWFjaDogZm9yRWFjaCxcbiAgbWVyZ2U6IG1lcmdlLFxuICBleHRlbmQ6IGV4dGVuZCxcbiAgdHJpbTogdHJpbSxcbiAgc3RyaXBCT006IHN0cmlwQk9NXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbmZ1bmN0aW9uIGVuY29kZSh2YWwpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpLlxuICAgIHJlcGxhY2UoLyUzQS9naSwgJzonKS5cbiAgICByZXBsYWNlKC8lMjQvZywgJyQnKS5cbiAgICByZXBsYWNlKC8lMkMvZ2ksICcsJykuXG4gICAgcmVwbGFjZSgvJTIwL2csICcrJykuXG4gICAgcmVwbGFjZSgvJTVCL2dpLCAnWycpLlxuICAgIHJlcGxhY2UoLyU1RC9naSwgJ10nKTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIFVSTCBieSBhcHBlbmRpbmcgcGFyYW1zIHRvIHRoZSBlbmRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBiYXNlIG9mIHRoZSB1cmwgKGUuZy4sIGh0dHA6Ly93d3cuZ29vZ2xlLmNvbSlcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1zXSBUaGUgcGFyYW1zIHRvIGJlIGFwcGVuZGVkXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIHVybFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJ1aWxkVVJMKHVybCwgcGFyYW1zLCBwYXJhbXNTZXJpYWxpemVyKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICBpZiAoIXBhcmFtcykge1xuICAgIHJldHVybiB1cmw7XG4gIH1cblxuICB2YXIgc2VyaWFsaXplZFBhcmFtcztcbiAgaWYgKHBhcmFtc1NlcmlhbGl6ZXIpIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gcGFyYW1zU2VyaWFsaXplcihwYXJhbXMpO1xuICB9IGVsc2UgaWYgKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKHBhcmFtcykpIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gcGFyYW1zLnRvU3RyaW5nKCk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHBhcnRzID0gW107XG5cbiAgICB1dGlscy5mb3JFYWNoKHBhcmFtcywgZnVuY3Rpb24gc2VyaWFsaXplKHZhbCwga2V5KSB7XG4gICAgICBpZiAodmFsID09PSBudWxsIHx8IHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHV0aWxzLmlzQXJyYXkodmFsKSkge1xuICAgICAgICBrZXkgPSBrZXkgKyAnW10nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsID0gW3ZhbF07XG4gICAgICB9XG5cbiAgICAgIHV0aWxzLmZvckVhY2godmFsLCBmdW5jdGlvbiBwYXJzZVZhbHVlKHYpIHtcbiAgICAgICAgaWYgKHV0aWxzLmlzRGF0ZSh2KSkge1xuICAgICAgICAgIHYgPSB2LnRvSVNPU3RyaW5nKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodXRpbHMuaXNPYmplY3QodikpIHtcbiAgICAgICAgICB2ID0gSlNPTi5zdHJpbmdpZnkodik7XG4gICAgICAgIH1cbiAgICAgICAgcGFydHMucHVzaChlbmNvZGUoa2V5KSArICc9JyArIGVuY29kZSh2KSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBwYXJ0cy5qb2luKCcmJyk7XG4gIH1cblxuICBpZiAoc2VyaWFsaXplZFBhcmFtcykge1xuICAgIHZhciBoYXNobWFya0luZGV4ID0gdXJsLmluZGV4T2YoJyMnKTtcbiAgICBpZiAoaGFzaG1hcmtJbmRleCAhPT0gLTEpIHtcbiAgICAgIHVybCA9IHVybC5zbGljZSgwLCBoYXNobWFya0luZGV4KTtcbiAgICB9XG5cbiAgICB1cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnKSArIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIH1cblxuICByZXR1cm4gdXJsO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5mdW5jdGlvbiBJbnRlcmNlcHRvck1hbmFnZXIoKSB7XG4gIHRoaXMuaGFuZGxlcnMgPSBbXTtcbn1cblxuLyoqXG4gKiBBZGQgYSBuZXcgaW50ZXJjZXB0b3IgdG8gdGhlIHN0YWNrXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVsZmlsbGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHRoZW5gIGZvciBhIGBQcm9taXNlYFxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0ZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgcmVqZWN0YCBmb3IgYSBgUHJvbWlzZWBcbiAqXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IEFuIElEIHVzZWQgdG8gcmVtb3ZlIGludGVyY2VwdG9yIGxhdGVyXG4gKi9cbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUudXNlID0gZnVuY3Rpb24gdXNlKGZ1bGZpbGxlZCwgcmVqZWN0ZWQsIG9wdGlvbnMpIHtcbiAgdGhpcy5oYW5kbGVycy5wdXNoKHtcbiAgICBmdWxmaWxsZWQ6IGZ1bGZpbGxlZCxcbiAgICByZWplY3RlZDogcmVqZWN0ZWQsXG4gICAgc3luY2hyb25vdXM6IG9wdGlvbnMgPyBvcHRpb25zLnN5bmNocm9ub3VzIDogZmFsc2UsXG4gICAgcnVuV2hlbjogb3B0aW9ucyA/IG9wdGlvbnMucnVuV2hlbiA6IG51bGxcbiAgfSk7XG4gIHJldHVybiB0aGlzLmhhbmRsZXJzLmxlbmd0aCAtIDE7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbiBpbnRlcmNlcHRvciBmcm9tIHRoZSBzdGFja1xuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBpZCBUaGUgSUQgdGhhdCB3YXMgcmV0dXJuZWQgYnkgYHVzZWBcbiAqL1xuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS5lamVjdCA9IGZ1bmN0aW9uIGVqZWN0KGlkKSB7XG4gIGlmICh0aGlzLmhhbmRsZXJzW2lkXSkge1xuICAgIHRoaXMuaGFuZGxlcnNbaWRdID0gbnVsbDtcbiAgfVxufTtcblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYWxsIHRoZSByZWdpc3RlcmVkIGludGVyY2VwdG9yc1xuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIHNraXBwaW5nIG92ZXIgYW55XG4gKiBpbnRlcmNlcHRvcnMgdGhhdCBtYXkgaGF2ZSBiZWNvbWUgYG51bGxgIGNhbGxpbmcgYGVqZWN0YC5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBpbnRlcmNlcHRvclxuICovXG5JbnRlcmNlcHRvck1hbmFnZXIucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiBmb3JFYWNoKGZuKSB7XG4gIHV0aWxzLmZvckVhY2godGhpcy5oYW5kbGVycywgZnVuY3Rpb24gZm9yRWFjaEhhbmRsZXIoaCkge1xuICAgIGlmIChoICE9PSBudWxsKSB7XG4gICAgICBmbihoKTtcbiAgICB9XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBJbnRlcmNlcHRvck1hbmFnZXI7XG4iLCJleHBvcnQgZGVmYXVsdCAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6XG4gICAgICAgICAgICB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOlxuICAgICAgICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHt9KTtcbiIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxuLy8gYmFzZWQgb2ZmIGh0dHBzOi8vZ2l0aHViLmNvbS9kZWZ1bmN0em9tYmllL25vZGUtcHJvY2Vzcy9ibG9iL21hc3Rlci9icm93c2VyLmpzXG5cbmZ1bmN0aW9uIGRlZmF1bHRTZXRUaW1vdXQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG5mdW5jdGlvbiBkZWZhdWx0Q2xlYXJUaW1lb3V0ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxudmFyIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG5pZiAodHlwZW9mIGdsb2JhbC5zZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG59XG5pZiAodHlwZW9mIGdsb2JhbC5jbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG59XG5cbmZ1bmN0aW9uIHJ1blRpbWVvdXQoZnVuKSB7XG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIC8vIGlmIHNldFRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0KSAmJiBzZXRUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfSBjYXRjaChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xuICAgICAgICB9IGNhdGNoKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3JcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XG4gICAgaWYgKGNhY2hlZENsZWFyVGltZW91dCA9PT0gY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKG51bGwsIG1hcmtlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXG4gICAgICAgICAgICAvLyBTb21lIHZlcnNpb25zIG9mIEkuRS4gaGF2ZSBkaWZmZXJlbnQgcnVsZXMgZm9yIGNsZWFyVGltZW91dCB2cyBzZXRUaW1lb3V0XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbn1cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIHJ1bkNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBuZXh0VGljayhmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG4gICAgfVxufVxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbmV4cG9ydCB2YXIgdGl0bGUgPSAnYnJvd3Nlcic7XG5leHBvcnQgdmFyIHBsYXRmb3JtID0gJ2Jyb3dzZXInO1xuZXhwb3J0IHZhciBicm93c2VyID0gdHJ1ZTtcbmV4cG9ydCB2YXIgZW52ID0ge307XG5leHBvcnQgdmFyIGFyZ3YgPSBbXTtcbmV4cG9ydCB2YXIgdmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xuZXhwb3J0IHZhciB2ZXJzaW9ucyA9IHt9O1xuZXhwb3J0IHZhciByZWxlYXNlID0ge307XG5leHBvcnQgdmFyIGNvbmZpZyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxuZXhwb3J0IHZhciBvbiA9IG5vb3A7XG5leHBvcnQgdmFyIGFkZExpc3RlbmVyID0gbm9vcDtcbmV4cG9ydCB2YXIgb25jZSA9IG5vb3A7XG5leHBvcnQgdmFyIG9mZiA9IG5vb3A7XG5leHBvcnQgdmFyIHJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbmV4cG9ydCB2YXIgcmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbmV4cG9ydCB2YXIgZW1pdCA9IG5vb3A7XG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5kaW5nKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjd2QgKCkgeyByZXR1cm4gJy8nIH1cbmV4cG9ydCBmdW5jdGlvbiBjaGRpciAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gdW1hc2soKSB7IHJldHVybiAwOyB9XG5cbi8vIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2t1bWF2aXMvYnJvd3Nlci1wcm9jZXNzLWhydGltZS9ibG9iL21hc3Rlci9pbmRleC5qc1xudmFyIHBlcmZvcm1hbmNlID0gZ2xvYmFsLnBlcmZvcm1hbmNlIHx8IHt9XG52YXIgcGVyZm9ybWFuY2VOb3cgPVxuICBwZXJmb3JtYW5jZS5ub3cgICAgICAgIHx8XG4gIHBlcmZvcm1hbmNlLm1vek5vdyAgICAgfHxcbiAgcGVyZm9ybWFuY2UubXNOb3cgICAgICB8fFxuICBwZXJmb3JtYW5jZS5vTm93ICAgICAgIHx8XG4gIHBlcmZvcm1hbmNlLndlYmtpdE5vdyAgfHxcbiAgZnVuY3Rpb24oKXsgcmV0dXJuIChuZXcgRGF0ZSgpKS5nZXRUaW1lKCkgfVxuXG4vLyBnZW5lcmF0ZSB0aW1lc3RhbXAgb3IgZGVsdGFcbi8vIHNlZSBodHRwOi8vbm9kZWpzLm9yZy9hcGkvcHJvY2Vzcy5odG1sI3Byb2Nlc3NfcHJvY2Vzc19ocnRpbWVcbmV4cG9ydCBmdW5jdGlvbiBocnRpbWUocHJldmlvdXNUaW1lc3RhbXApe1xuICB2YXIgY2xvY2t0aW1lID0gcGVyZm9ybWFuY2VOb3cuY2FsbChwZXJmb3JtYW5jZSkqMWUtM1xuICB2YXIgc2Vjb25kcyA9IE1hdGguZmxvb3IoY2xvY2t0aW1lKVxuICB2YXIgbmFub3NlY29uZHMgPSBNYXRoLmZsb29yKChjbG9ja3RpbWUlMSkqMWU5KVxuICBpZiAocHJldmlvdXNUaW1lc3RhbXApIHtcbiAgICBzZWNvbmRzID0gc2Vjb25kcyAtIHByZXZpb3VzVGltZXN0YW1wWzBdXG4gICAgbmFub3NlY29uZHMgPSBuYW5vc2Vjb25kcyAtIHByZXZpb3VzVGltZXN0YW1wWzFdXG4gICAgaWYgKG5hbm9zZWNvbmRzPDApIHtcbiAgICAgIHNlY29uZHMtLVxuICAgICAgbmFub3NlY29uZHMgKz0gMWU5XG4gICAgfVxuICB9XG4gIHJldHVybiBbc2Vjb25kcyxuYW5vc2Vjb25kc11cbn1cblxudmFyIHN0YXJ0VGltZSA9IG5ldyBEYXRlKCk7XG5leHBvcnQgZnVuY3Rpb24gdXB0aW1lKCkge1xuICB2YXIgY3VycmVudFRpbWUgPSBuZXcgRGF0ZSgpO1xuICB2YXIgZGlmID0gY3VycmVudFRpbWUgLSBzdGFydFRpbWU7XG4gIHJldHVybiBkaWYgLyAxMDAwO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5leHRUaWNrOiBuZXh0VGljayxcbiAgdGl0bGU6IHRpdGxlLFxuICBicm93c2VyOiBicm93c2VyLFxuICBlbnY6IGVudixcbiAgYXJndjogYXJndixcbiAgdmVyc2lvbjogdmVyc2lvbixcbiAgdmVyc2lvbnM6IHZlcnNpb25zLFxuICBvbjogb24sXG4gIGFkZExpc3RlbmVyOiBhZGRMaXN0ZW5lcixcbiAgb25jZTogb25jZSxcbiAgb2ZmOiBvZmYsXG4gIHJlbW92ZUxpc3RlbmVyOiByZW1vdmVMaXN0ZW5lcixcbiAgcmVtb3ZlQWxsTGlzdGVuZXJzOiByZW1vdmVBbGxMaXN0ZW5lcnMsXG4gIGVtaXQ6IGVtaXQsXG4gIGJpbmRpbmc6IGJpbmRpbmcsXG4gIGN3ZDogY3dkLFxuICBjaGRpcjogY2hkaXIsXG4gIHVtYXNrOiB1bWFzayxcbiAgaHJ0aW1lOiBocnRpbWUsXG4gIHBsYXRmb3JtOiBwbGF0Zm9ybSxcbiAgcmVsZWFzZTogcmVsZWFzZSxcbiAgY29uZmlnOiBjb25maWcsXG4gIHVwdGltZTogdXB0aW1lXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG5vcm1hbGl6ZUhlYWRlck5hbWUoaGVhZGVycywgbm9ybWFsaXplZE5hbWUpIHtcbiAgdXRpbHMuZm9yRWFjaChoZWFkZXJzLCBmdW5jdGlvbiBwcm9jZXNzSGVhZGVyKHZhbHVlLCBuYW1lKSB7XG4gICAgaWYgKG5hbWUgIT09IG5vcm1hbGl6ZWROYW1lICYmIG5hbWUudG9VcHBlckNhc2UoKSA9PT0gbm9ybWFsaXplZE5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgaGVhZGVyc1tub3JtYWxpemVkTmFtZV0gPSB2YWx1ZTtcbiAgICAgIGRlbGV0ZSBoZWFkZXJzW25hbWVdO1xuICAgIH1cbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFVwZGF0ZSBhbiBFcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgY29uZmlnLCBlcnJvciBjb2RlLCBhbmQgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHtFcnJvcn0gZXJyb3IgVGhlIGVycm9yIHRvIHVwZGF0ZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbY29kZV0gVGhlIGVycm9yIGNvZGUgKGZvciBleGFtcGxlLCAnRUNPTk5BQk9SVEVEJykuXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcXVlc3RdIFRoZSByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXNwb25zZV0gVGhlIHJlc3BvbnNlLlxuICogQHJldHVybnMge0Vycm9yfSBUaGUgZXJyb3IuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZW5oYW5jZUVycm9yKGVycm9yLCBjb25maWcsIGNvZGUsIHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gIGVycm9yLmNvbmZpZyA9IGNvbmZpZztcbiAgaWYgKGNvZGUpIHtcbiAgICBlcnJvci5jb2RlID0gY29kZTtcbiAgfVxuXG4gIGVycm9yLnJlcXVlc3QgPSByZXF1ZXN0O1xuICBlcnJvci5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICBlcnJvci5pc0F4aW9zRXJyb3IgPSB0cnVlO1xuXG4gIGVycm9yLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gU3RhbmRhcmRcbiAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZSxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIC8vIE1pY3Jvc29mdFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICBudW1iZXI6IHRoaXMubnVtYmVyLFxuICAgICAgLy8gTW96aWxsYVxuICAgICAgZmlsZU5hbWU6IHRoaXMuZmlsZU5hbWUsXG4gICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsXG4gICAgICBjb2x1bW5OdW1iZXI6IHRoaXMuY29sdW1uTnVtYmVyLFxuICAgICAgc3RhY2s6IHRoaXMuc3RhY2ssXG4gICAgICAvLyBBeGlvc1xuICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgIGNvZGU6IHRoaXMuY29kZSxcbiAgICAgIHN0YXR1czogdGhpcy5yZXNwb25zZSAmJiB0aGlzLnJlc3BvbnNlLnN0YXR1cyA/IHRoaXMucmVzcG9uc2Uuc3RhdHVzIDogbnVsbFxuICAgIH07XG4gIH07XG4gIHJldHVybiBlcnJvcjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBlbmhhbmNlRXJyb3IgPSByZXF1aXJlKCcuL2VuaGFuY2VFcnJvcicpO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBFcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgbWVzc2FnZSwgY29uZmlnLCBlcnJvciBjb2RlLCByZXF1ZXN0IGFuZCByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbY29kZV0gVGhlIGVycm9yIGNvZGUgKGZvciBleGFtcGxlLCAnRUNPTk5BQk9SVEVEJykuXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcXVlc3RdIFRoZSByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXNwb25zZV0gVGhlIHJlc3BvbnNlLlxuICogQHJldHVybnMge0Vycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjcmVhdGVFcnJvcihtZXNzYWdlLCBjb25maWcsIGNvZGUsIHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gIHZhciBlcnJvciA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgcmV0dXJuIGVuaGFuY2VFcnJvcihlcnJvciwgY29uZmlnLCBjb2RlLCByZXF1ZXN0LCByZXNwb25zZSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY3JlYXRlRXJyb3IgPSByZXF1aXJlKCcuL2NyZWF0ZUVycm9yJyk7XG5cbi8qKlxuICogUmVzb2x2ZSBvciByZWplY3QgYSBQcm9taXNlIGJhc2VkIG9uIHJlc3BvbnNlIHN0YXR1cy5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZXNvbHZlIEEgZnVuY3Rpb24gdGhhdCByZXNvbHZlcyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdCBBIGZ1bmN0aW9uIHRoYXQgcmVqZWN0cyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSByZXNwb25zZSBUaGUgcmVzcG9uc2UuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpIHtcbiAgdmFyIHZhbGlkYXRlU3RhdHVzID0gcmVzcG9uc2UuY29uZmlnLnZhbGlkYXRlU3RhdHVzO1xuICBpZiAoIXJlc3BvbnNlLnN0YXR1cyB8fCAhdmFsaWRhdGVTdGF0dXMgfHwgdmFsaWRhdGVTdGF0dXMocmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICB9IGVsc2Uge1xuICAgIHJlamVjdChjcmVhdGVFcnJvcihcbiAgICAgICdSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICcgKyByZXNwb25zZS5zdGF0dXMsXG4gICAgICByZXNwb25zZS5jb25maWcsXG4gICAgICBudWxsLFxuICAgICAgcmVzcG9uc2UucmVxdWVzdCxcbiAgICAgIHJlc3BvbnNlXG4gICAgKSk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAoXG4gIHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBzdXBwb3J0IGRvY3VtZW50LmNvb2tpZVxuICAgIChmdW5jdGlvbiBzdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3cml0ZTogZnVuY3Rpb24gd3JpdGUobmFtZSwgdmFsdWUsIGV4cGlyZXMsIHBhdGgsIGRvbWFpbiwgc2VjdXJlKSB7XG4gICAgICAgICAgdmFyIGNvb2tpZSA9IFtdO1xuICAgICAgICAgIGNvb2tpZS5wdXNoKG5hbWUgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpKTtcblxuICAgICAgICAgIGlmICh1dGlscy5pc051bWJlcihleHBpcmVzKSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ2V4cGlyZXM9JyArIG5ldyBEYXRlKGV4cGlyZXMpLnRvR01UU3RyaW5nKCkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh1dGlscy5pc1N0cmluZyhwYXRoKSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ3BhdGg9JyArIHBhdGgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh1dGlscy5pc1N0cmluZyhkb21haW4pKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgnZG9tYWluPScgKyBkb21haW4pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzZWN1cmUgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdzZWN1cmUnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkb2N1bWVudC5jb29raWUgPSBjb29raWUuam9pbignOyAnKTtcbiAgICAgICAgfSxcblxuICAgICAgICByZWFkOiBmdW5jdGlvbiByZWFkKG5hbWUpIHtcbiAgICAgICAgICB2YXIgbWF0Y2ggPSBkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgnKF58O1xcXFxzKikoJyArIG5hbWUgKyAnKT0oW147XSopJykpO1xuICAgICAgICAgIHJldHVybiAobWF0Y2ggPyBkZWNvZGVVUklDb21wb25lbnQobWF0Y2hbM10pIDogbnVsbCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUobmFtZSkge1xuICAgICAgICAgIHRoaXMud3JpdGUobmFtZSwgJycsIERhdGUubm93KCkgLSA4NjQwMDAwMCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSkoKSA6XG5cbiAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52ICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAgIChmdW5jdGlvbiBub25TdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3cml0ZTogZnVuY3Rpb24gd3JpdGUoKSB7fSxcbiAgICAgICAgcmVhZDogZnVuY3Rpb24gcmVhZCgpIHsgcmV0dXJuIG51bGw7IH0sXG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge31cbiAgICAgIH07XG4gICAgfSkoKVxuKTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBVUkwgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQWJzb2x1dGVVUkwodXJsKSB7XG4gIC8vIEEgVVJMIGlzIGNvbnNpZGVyZWQgYWJzb2x1dGUgaWYgaXQgYmVnaW5zIHdpdGggXCI8c2NoZW1lPjovL1wiIG9yIFwiLy9cIiAocHJvdG9jb2wtcmVsYXRpdmUgVVJMKS5cbiAgLy8gUkZDIDM5ODYgZGVmaW5lcyBzY2hlbWUgbmFtZSBhcyBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgYmVnaW5uaW5nIHdpdGggYSBsZXR0ZXIgYW5kIGZvbGxvd2VkXG4gIC8vIGJ5IGFueSBjb21iaW5hdGlvbiBvZiBsZXR0ZXJzLCBkaWdpdHMsIHBsdXMsIHBlcmlvZCwgb3IgaHlwaGVuLlxuICByZXR1cm4gL14oW2Etel1bYS16XFxkXFwrXFwtXFwuXSo6KT9cXC9cXC8vaS50ZXN0KHVybCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgc3BlY2lmaWVkIFVSTHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGl2ZVVSTCBUaGUgcmVsYXRpdmUgVVJMXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgVVJMXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVsYXRpdmVVUkwpIHtcbiAgcmV0dXJuIHJlbGF0aXZlVVJMXG4gICAgPyBiYXNlVVJMLnJlcGxhY2UoL1xcLyskLywgJycpICsgJy8nICsgcmVsYXRpdmVVUkwucmVwbGFjZSgvXlxcLysvLCAnJylcbiAgICA6IGJhc2VVUkw7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNBYnNvbHV0ZVVSTCA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTCcpO1xudmFyIGNvbWJpbmVVUkxzID0gcmVxdWlyZSgnLi4vaGVscGVycy9jb21iaW5lVVJMcycpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgYmFzZVVSTCB3aXRoIHRoZSByZXF1ZXN0ZWRVUkwsXG4gKiBvbmx5IHdoZW4gdGhlIHJlcXVlc3RlZFVSTCBpcyBub3QgYWxyZWFkeSBhbiBhYnNvbHV0ZSBVUkwuXG4gKiBJZiB0aGUgcmVxdWVzdFVSTCBpcyBhYnNvbHV0ZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSByZXF1ZXN0ZWRVUkwgdW50b3VjaGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlcXVlc3RlZFVSTCBBYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gY29tYmluZVxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIGZ1bGwgcGF0aFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJ1aWxkRnVsbFBhdGgoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKSB7XG4gIGlmIChiYXNlVVJMICYmICFpc0Fic29sdXRlVVJMKHJlcXVlc3RlZFVSTCkpIHtcbiAgICByZXR1cm4gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKTtcbiAgfVxuICByZXR1cm4gcmVxdWVzdGVkVVJMO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG4vLyBIZWFkZXJzIHdob3NlIGR1cGxpY2F0ZXMgYXJlIGlnbm9yZWQgYnkgbm9kZVxuLy8gYy5mLiBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAuaHRtbCNodHRwX21lc3NhZ2VfaGVhZGVyc1xudmFyIGlnbm9yZUR1cGxpY2F0ZU9mID0gW1xuICAnYWdlJywgJ2F1dGhvcml6YXRpb24nLCAnY29udGVudC1sZW5ndGgnLCAnY29udGVudC10eXBlJywgJ2V0YWcnLFxuICAnZXhwaXJlcycsICdmcm9tJywgJ2hvc3QnLCAnaWYtbW9kaWZpZWQtc2luY2UnLCAnaWYtdW5tb2RpZmllZC1zaW5jZScsXG4gICdsYXN0LW1vZGlmaWVkJywgJ2xvY2F0aW9uJywgJ21heC1mb3J3YXJkcycsICdwcm94eS1hdXRob3JpemF0aW9uJyxcbiAgJ3JlZmVyZXInLCAncmV0cnktYWZ0ZXInLCAndXNlci1hZ2VudCdcbl07XG5cbi8qKlxuICogUGFyc2UgaGVhZGVycyBpbnRvIGFuIG9iamVjdFxuICpcbiAqIGBgYFxuICogRGF0ZTogV2VkLCAyNyBBdWcgMjAxNCAwODo1ODo0OSBHTVRcbiAqIENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvblxuICogQ29ubmVjdGlvbjoga2VlcC1hbGl2ZVxuICogVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWRcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBoZWFkZXJzIEhlYWRlcnMgbmVlZGluZyB0byBiZSBwYXJzZWRcbiAqIEByZXR1cm5zIHtPYmplY3R9IEhlYWRlcnMgcGFyc2VkIGludG8gYW4gb2JqZWN0XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcGFyc2VIZWFkZXJzKGhlYWRlcnMpIHtcbiAgdmFyIHBhcnNlZCA9IHt9O1xuICB2YXIga2V5O1xuICB2YXIgdmFsO1xuICB2YXIgaTtcblxuICBpZiAoIWhlYWRlcnMpIHsgcmV0dXJuIHBhcnNlZDsgfVxuXG4gIHV0aWxzLmZvckVhY2goaGVhZGVycy5zcGxpdCgnXFxuJyksIGZ1bmN0aW9uIHBhcnNlcihsaW5lKSB7XG4gICAgaSA9IGxpbmUuaW5kZXhPZignOicpO1xuICAgIGtleSA9IHV0aWxzLnRyaW0obGluZS5zdWJzdHIoMCwgaSkpLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFsID0gdXRpbHMudHJpbShsaW5lLnN1YnN0cihpICsgMSkpO1xuXG4gICAgaWYgKGtleSkge1xuICAgICAgaWYgKHBhcnNlZFtrZXldICYmIGlnbm9yZUR1cGxpY2F0ZU9mLmluZGV4T2Yoa2V5KSA+PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChrZXkgPT09ICdzZXQtY29va2llJykge1xuICAgICAgICBwYXJzZWRba2V5XSA9IChwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldIDogW10pLmNvbmNhdChbdmFsXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWRba2V5XSA9IHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gKyAnLCAnICsgdmFsIDogdmFsO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAoXG4gIHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBoYXZlIGZ1bGwgc3VwcG9ydCBvZiB0aGUgQVBJcyBuZWVkZWQgdG8gdGVzdFxuICAvLyB3aGV0aGVyIHRoZSByZXF1ZXN0IFVSTCBpcyBvZiB0aGUgc2FtZSBvcmlnaW4gYXMgY3VycmVudCBsb2NhdGlvbi5cbiAgICAoZnVuY3Rpb24gc3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgICAgdmFyIG1zaWUgPSAvKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgICAgdmFyIHVybFBhcnNpbmdOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgdmFyIG9yaWdpblVSTDtcblxuICAgICAgLyoqXG4gICAgKiBQYXJzZSBhIFVSTCB0byBkaXNjb3ZlciBpdCdzIGNvbXBvbmVudHNcbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsIFRoZSBVUkwgdG8gYmUgcGFyc2VkXG4gICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgICovXG4gICAgICBmdW5jdGlvbiByZXNvbHZlVVJMKHVybCkge1xuICAgICAgICB2YXIgaHJlZiA9IHVybDtcblxuICAgICAgICBpZiAobXNpZSkge1xuICAgICAgICAvLyBJRSBuZWVkcyBhdHRyaWJ1dGUgc2V0IHR3aWNlIHRvIG5vcm1hbGl6ZSBwcm9wZXJ0aWVzXG4gICAgICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG4gICAgICAgICAgaHJlZiA9IHVybFBhcnNpbmdOb2RlLmhyZWY7XG4gICAgICAgIH1cblxuICAgICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcblxuICAgICAgICAvLyB1cmxQYXJzaW5nTm9kZSBwcm92aWRlcyB0aGUgVXJsVXRpbHMgaW50ZXJmYWNlIC0gaHR0cDovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3VybHV0aWxzXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaHJlZjogdXJsUGFyc2luZ05vZGUuaHJlZixcbiAgICAgICAgICBwcm90b2NvbDogdXJsUGFyc2luZ05vZGUucHJvdG9jb2wgPyB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbC5yZXBsYWNlKC86JC8sICcnKSA6ICcnLFxuICAgICAgICAgIGhvc3Q6IHVybFBhcnNpbmdOb2RlLmhvc3QsXG4gICAgICAgICAgc2VhcmNoOiB1cmxQYXJzaW5nTm9kZS5zZWFyY2ggPyB1cmxQYXJzaW5nTm9kZS5zZWFyY2gucmVwbGFjZSgvXlxcPy8sICcnKSA6ICcnLFxuICAgICAgICAgIGhhc2g6IHVybFBhcnNpbmdOb2RlLmhhc2ggPyB1cmxQYXJzaW5nTm9kZS5oYXNoLnJlcGxhY2UoL14jLywgJycpIDogJycsXG4gICAgICAgICAgaG9zdG5hbWU6IHVybFBhcnNpbmdOb2RlLmhvc3RuYW1lLFxuICAgICAgICAgIHBvcnQ6IHVybFBhcnNpbmdOb2RlLnBvcnQsXG4gICAgICAgICAgcGF0aG5hbWU6ICh1cmxQYXJzaW5nTm9kZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJykgP1xuICAgICAgICAgICAgdXJsUGFyc2luZ05vZGUucGF0aG5hbWUgOlxuICAgICAgICAgICAgJy8nICsgdXJsUGFyc2luZ05vZGUucGF0aG5hbWVcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgb3JpZ2luVVJMID0gcmVzb2x2ZVVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG5cbiAgICAgIC8qKlxuICAgICogRGV0ZXJtaW5lIGlmIGEgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4gYXMgdGhlIGN1cnJlbnQgbG9jYXRpb25cbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gcmVxdWVzdFVSTCBUaGUgVVJMIHRvIHRlc3RcbiAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luLCBvdGhlcndpc2UgZmFsc2VcbiAgICAqL1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGlzVVJMU2FtZU9yaWdpbihyZXF1ZXN0VVJMKSB7XG4gICAgICAgIHZhciBwYXJzZWQgPSAodXRpbHMuaXNTdHJpbmcocmVxdWVzdFVSTCkpID8gcmVzb2x2ZVVSTChyZXF1ZXN0VVJMKSA6IHJlcXVlc3RVUkw7XG4gICAgICAgIHJldHVybiAocGFyc2VkLnByb3RvY29sID09PSBvcmlnaW5VUkwucHJvdG9jb2wgJiZcbiAgICAgICAgICAgIHBhcnNlZC5ob3N0ID09PSBvcmlnaW5VUkwuaG9zdCk7XG4gICAgICB9O1xuICAgIH0pKCkgOlxuXG4gIC8vIE5vbiBzdGFuZGFyZCBicm93c2VyIGVudnMgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gICAgKGZ1bmN0aW9uIG5vblN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4oKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfTtcbiAgICB9KSgpXG4pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEEgYENhbmNlbGAgaXMgYW4gb2JqZWN0IHRoYXQgaXMgdGhyb3duIHdoZW4gYW4gb3BlcmF0aW9uIGlzIGNhbmNlbGVkLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtzdHJpbmc9fSBtZXNzYWdlIFRoZSBtZXNzYWdlLlxuICovXG5mdW5jdGlvbiBDYW5jZWwobWVzc2FnZSkge1xuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xufVxuXG5DYW5jZWwucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiAnQ2FuY2VsJyArICh0aGlzLm1lc3NhZ2UgPyAnOiAnICsgdGhpcy5tZXNzYWdlIDogJycpO1xufTtcblxuQ2FuY2VsLnByb3RvdHlwZS5fX0NBTkNFTF9fID0gdHJ1ZTtcblxubW9kdWxlLmV4cG9ydHMgPSBDYW5jZWw7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciBzZXR0bGUgPSByZXF1aXJlKCcuLy4uL2NvcmUvc2V0dGxlJyk7XG52YXIgY29va2llcyA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9jb29raWVzJyk7XG52YXIgYnVpbGRVUkwgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvYnVpbGRVUkwnKTtcbnZhciBidWlsZEZ1bGxQYXRoID0gcmVxdWlyZSgnLi4vY29yZS9idWlsZEZ1bGxQYXRoJyk7XG52YXIgcGFyc2VIZWFkZXJzID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL3BhcnNlSGVhZGVycycpO1xudmFyIGlzVVJMU2FtZU9yaWdpbiA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9pc1VSTFNhbWVPcmlnaW4nKTtcbnZhciBjcmVhdGVFcnJvciA9IHJlcXVpcmUoJy4uL2NvcmUvY3JlYXRlRXJyb3InKTtcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJy4uL2RlZmF1bHRzJyk7XG52YXIgQ2FuY2VsID0gcmVxdWlyZSgnLi4vY2FuY2VsL0NhbmNlbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHhockFkYXB0ZXIoY29uZmlnKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiBkaXNwYXRjaFhoclJlcXVlc3QocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIHJlcXVlc3REYXRhID0gY29uZmlnLmRhdGE7XG4gICAgdmFyIHJlcXVlc3RIZWFkZXJzID0gY29uZmlnLmhlYWRlcnM7XG4gICAgdmFyIHJlc3BvbnNlVHlwZSA9IGNvbmZpZy5yZXNwb25zZVR5cGU7XG4gICAgdmFyIG9uQ2FuY2VsZWQ7XG4gICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICAgICAgY29uZmlnLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLnNpZ25hbCkge1xuICAgICAgICBjb25maWcuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25DYW5jZWxlZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzRm9ybURhdGEocmVxdWVzdERhdGEpKSB7XG4gICAgICBkZWxldGUgcmVxdWVzdEhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddOyAvLyBMZXQgdGhlIGJyb3dzZXIgc2V0IGl0XG4gICAgfVxuXG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIC8vIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb25cbiAgICBpZiAoY29uZmlnLmF1dGgpIHtcbiAgICAgIHZhciB1c2VybmFtZSA9IGNvbmZpZy5hdXRoLnVzZXJuYW1lIHx8ICcnO1xuICAgICAgdmFyIHBhc3N3b3JkID0gY29uZmlnLmF1dGgucGFzc3dvcmQgPyB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoY29uZmlnLmF1dGgucGFzc3dvcmQpKSA6ICcnO1xuICAgICAgcmVxdWVzdEhlYWRlcnMuQXV0aG9yaXphdGlvbiA9ICdCYXNpYyAnICsgYnRvYSh1c2VybmFtZSArICc6JyArIHBhc3N3b3JkKTtcbiAgICB9XG5cbiAgICB2YXIgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsKTtcbiAgICByZXF1ZXN0Lm9wZW4oY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpLCBidWlsZFVSTChmdWxsUGF0aCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpLCB0cnVlKTtcblxuICAgIC8vIFNldCB0aGUgcmVxdWVzdCB0aW1lb3V0IGluIE1TXG4gICAgcmVxdWVzdC50aW1lb3V0ID0gY29uZmlnLnRpbWVvdXQ7XG5cbiAgICBmdW5jdGlvbiBvbmxvYWRlbmQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gUHJlcGFyZSB0aGUgcmVzcG9uc2VcbiAgICAgIHZhciByZXNwb25zZUhlYWRlcnMgPSAnZ2V0QWxsUmVzcG9uc2VIZWFkZXJzJyBpbiByZXF1ZXN0ID8gcGFyc2VIZWFkZXJzKHJlcXVlc3QuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpIDogbnVsbDtcbiAgICAgIHZhciByZXNwb25zZURhdGEgPSAhcmVzcG9uc2VUeXBlIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ3RleHQnIHx8ICByZXNwb25zZVR5cGUgPT09ICdqc29uJyA/XG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUZXh0IDogcmVxdWVzdC5yZXNwb25zZTtcbiAgICAgIHZhciByZXNwb25zZSA9IHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICBzdGF0dXM6IHJlcXVlc3Quc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXF1ZXN0LnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICAgICAgY29uZmlnOiBjb25maWcsXG4gICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RcbiAgICAgIH07XG5cbiAgICAgIHNldHRsZShmdW5jdGlvbiBfcmVzb2x2ZSh2YWx1ZSkge1xuICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSwgZnVuY3Rpb24gX3JlamVjdChlcnIpIHtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0sIHJlc3BvbnNlKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKCdvbmxvYWRlbmQnIGluIHJlcXVlc3QpIHtcbiAgICAgIC8vIFVzZSBvbmxvYWRlbmQgaWYgYXZhaWxhYmxlXG4gICAgICByZXF1ZXN0Lm9ubG9hZGVuZCA9IG9ubG9hZGVuZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTGlzdGVuIGZvciByZWFkeSBzdGF0ZSB0byBlbXVsYXRlIG9ubG9hZGVuZFxuICAgICAgcmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBoYW5kbGVMb2FkKCkge1xuICAgICAgICBpZiAoIXJlcXVlc3QgfHwgcmVxdWVzdC5yZWFkeVN0YXRlICE9PSA0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIHJlcXVlc3QgZXJyb3JlZCBvdXQgYW5kIHdlIGRpZG4ndCBnZXQgYSByZXNwb25zZSwgdGhpcyB3aWxsIGJlXG4gICAgICAgIC8vIGhhbmRsZWQgYnkgb25lcnJvciBpbnN0ZWFkXG4gICAgICAgIC8vIFdpdGggb25lIGV4Y2VwdGlvbjogcmVxdWVzdCB0aGF0IHVzaW5nIGZpbGU6IHByb3RvY29sLCBtb3N0IGJyb3dzZXJzXG4gICAgICAgIC8vIHdpbGwgcmV0dXJuIHN0YXR1cyBhcyAwIGV2ZW4gdGhvdWdoIGl0J3MgYSBzdWNjZXNzZnVsIHJlcXVlc3RcbiAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09PSAwICYmICEocmVxdWVzdC5yZXNwb25zZVVSTCAmJiByZXF1ZXN0LnJlc3BvbnNlVVJMLmluZGV4T2YoJ2ZpbGU6JykgPT09IDApKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlYWR5c3RhdGUgaGFuZGxlciBpcyBjYWxsaW5nIGJlZm9yZSBvbmVycm9yIG9yIG9udGltZW91dCBoYW5kbGVycyxcbiAgICAgICAgLy8gc28gd2Ugc2hvdWxkIGNhbGwgb25sb2FkZW5kIG9uIHRoZSBuZXh0ICd0aWNrJ1xuICAgICAgICBzZXRUaW1lb3V0KG9ubG9hZGVuZCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBicm93c2VyIHJlcXVlc3QgY2FuY2VsbGF0aW9uIChhcyBvcHBvc2VkIHRvIGEgbWFudWFsIGNhbmNlbGxhdGlvbilcbiAgICByZXF1ZXN0Lm9uYWJvcnQgPSBmdW5jdGlvbiBoYW5kbGVBYm9ydCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlamVjdChjcmVhdGVFcnJvcignUmVxdWVzdCBhYm9ydGVkJywgY29uZmlnLCAnRUNPTk5BQk9SVEVEJywgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIGxvdyBsZXZlbCBuZXR3b3JrIGVycm9yc1xuICAgIHJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uIGhhbmRsZUVycm9yKCkge1xuICAgICAgLy8gUmVhbCBlcnJvcnMgYXJlIGhpZGRlbiBmcm9tIHVzIGJ5IHRoZSBicm93c2VyXG4gICAgICAvLyBvbmVycm9yIHNob3VsZCBvbmx5IGZpcmUgaWYgaXQncyBhIG5ldHdvcmsgZXJyb3JcbiAgICAgIHJlamVjdChjcmVhdGVFcnJvcignTmV0d29yayBFcnJvcicsIGNvbmZpZywgbnVsbCwgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIHRpbWVvdXRcbiAgICByZXF1ZXN0Lm9udGltZW91dCA9IGZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoKSB7XG4gICAgICB2YXIgdGltZW91dEVycm9yTWVzc2FnZSA9IGNvbmZpZy50aW1lb3V0ID8gJ3RpbWVvdXQgb2YgJyArIGNvbmZpZy50aW1lb3V0ICsgJ21zIGV4Y2VlZGVkJyA6ICd0aW1lb3V0IGV4Y2VlZGVkJztcbiAgICAgIHZhciB0cmFuc2l0aW9uYWwgPSBjb25maWcudHJhbnNpdGlvbmFsIHx8IGRlZmF1bHRzLnRyYW5zaXRpb25hbDtcbiAgICAgIGlmIChjb25maWcudGltZW91dEVycm9yTWVzc2FnZSkge1xuICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlID0gY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2U7XG4gICAgICB9XG4gICAgICByZWplY3QoY3JlYXRlRXJyb3IoXG4gICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgdHJhbnNpdGlvbmFsLmNsYXJpZnlUaW1lb3V0RXJyb3IgPyAnRVRJTUVET1VUJyA6ICdFQ09OTkFCT1JURUQnLFxuICAgICAgICByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgICAvLyBUaGlzIGlzIG9ubHkgZG9uZSBpZiBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudC5cbiAgICAvLyBTcGVjaWZpY2FsbHkgbm90IGlmIHdlJ3JlIGluIGEgd2ViIHdvcmtlciwgb3IgcmVhY3QtbmF0aXZlLlxuICAgIGlmICh1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpKSB7XG4gICAgICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgICAgIHZhciB4c3JmVmFsdWUgPSAoY29uZmlnLndpdGhDcmVkZW50aWFscyB8fCBpc1VSTFNhbWVPcmlnaW4oZnVsbFBhdGgpKSAmJiBjb25maWcueHNyZkNvb2tpZU5hbWUgP1xuICAgICAgICBjb29raWVzLnJlYWQoY29uZmlnLnhzcmZDb29raWVOYW1lKSA6XG4gICAgICAgIHVuZGVmaW5lZDtcblxuICAgICAgaWYgKHhzcmZWYWx1ZSkge1xuICAgICAgICByZXF1ZXN0SGVhZGVyc1tjb25maWcueHNyZkhlYWRlck5hbWVdID0geHNyZlZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFkZCBoZWFkZXJzIHRvIHRoZSByZXF1ZXN0XG4gICAgaWYgKCdzZXRSZXF1ZXN0SGVhZGVyJyBpbiByZXF1ZXN0KSB7XG4gICAgICB1dGlscy5mb3JFYWNoKHJlcXVlc3RIZWFkZXJzLCBmdW5jdGlvbiBzZXRSZXF1ZXN0SGVhZGVyKHZhbCwga2V5KSB7XG4gICAgICAgIGlmICh0eXBlb2YgcmVxdWVzdERhdGEgPT09ICd1bmRlZmluZWQnICYmIGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC10eXBlJykge1xuICAgICAgICAgIC8vIFJlbW92ZSBDb250ZW50LVR5cGUgaWYgZGF0YSBpcyB1bmRlZmluZWRcbiAgICAgICAgICBkZWxldGUgcmVxdWVzdEhlYWRlcnNba2V5XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBPdGhlcndpc2UgYWRkIGhlYWRlciB0byB0aGUgcmVxdWVzdFxuICAgICAgICAgIHJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihrZXksIHZhbCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEFkZCB3aXRoQ3JlZGVudGlhbHMgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZy53aXRoQ3JlZGVudGlhbHMpKSB7XG4gICAgICByZXF1ZXN0LndpdGhDcmVkZW50aWFscyA9ICEhY29uZmlnLndpdGhDcmVkZW50aWFscztcbiAgICB9XG5cbiAgICAvLyBBZGQgcmVzcG9uc2VUeXBlIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKHJlc3BvbnNlVHlwZSAmJiByZXNwb25zZVR5cGUgIT09ICdqc29uJykge1xuICAgICAgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSBjb25maWcucmVzcG9uc2VUeXBlO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBwcm9ncmVzcyBpZiBuZWVkZWRcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5vbkRvd25sb2FkUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBjb25maWcub25Eb3dubG9hZFByb2dyZXNzKTtcbiAgICB9XG5cbiAgICAvLyBOb3QgYWxsIGJyb3dzZXJzIHN1cHBvcnQgdXBsb2FkIGV2ZW50c1xuICAgIGlmICh0eXBlb2YgY29uZmlnLm9uVXBsb2FkUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicgJiYgcmVxdWVzdC51cGxvYWQpIHtcbiAgICAgIHJlcXVlc3QudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgY29uZmlnLm9uVXBsb2FkUHJvZ3Jlc3MpO1xuICAgIH1cblxuICAgIGlmIChjb25maWcuY2FuY2VsVG9rZW4gfHwgY29uZmlnLnNpZ25hbCkge1xuICAgICAgLy8gSGFuZGxlIGNhbmNlbGxhdGlvblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICAgIG9uQ2FuY2VsZWQgPSBmdW5jdGlvbihjYW5jZWwpIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdCghY2FuY2VsIHx8IChjYW5jZWwgJiYgY2FuY2VsLnR5cGUpID8gbmV3IENhbmNlbCgnY2FuY2VsZWQnKSA6IGNhbmNlbCk7XG4gICAgICAgIHJlcXVlc3QuYWJvcnQoKTtcbiAgICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgICB9O1xuXG4gICAgICBjb25maWcuY2FuY2VsVG9rZW4gJiYgY29uZmlnLmNhbmNlbFRva2VuLnN1YnNjcmliZShvbkNhbmNlbGVkKTtcbiAgICAgIGlmIChjb25maWcuc2lnbmFsKSB7XG4gICAgICAgIGNvbmZpZy5zaWduYWwuYWJvcnRlZCA/IG9uQ2FuY2VsZWQoKSA6IGNvbmZpZy5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkNhbmNlbGVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXJlcXVlc3REYXRhKSB7XG4gICAgICByZXF1ZXN0RGF0YSA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gU2VuZCB0aGUgcmVxdWVzdFxuICAgIHJlcXVlc3Quc2VuZChyZXF1ZXN0RGF0YSk7XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIG5vcm1hbGl6ZUhlYWRlck5hbWUgPSByZXF1aXJlKCcuL2hlbHBlcnMvbm9ybWFsaXplSGVhZGVyTmFtZScpO1xudmFyIGVuaGFuY2VFcnJvciA9IHJlcXVpcmUoJy4vY29yZS9lbmhhbmNlRXJyb3InKTtcblxudmFyIERFRkFVTFRfQ09OVEVOVF9UWVBFID0ge1xuICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcbn07XG5cbmZ1bmN0aW9uIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCB2YWx1ZSkge1xuICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGhlYWRlcnMpICYmIHV0aWxzLmlzVW5kZWZpbmVkKGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddKSkge1xuICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gdmFsdWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdEFkYXB0ZXIoKSB7XG4gIHZhciBhZGFwdGVyO1xuICBpZiAodHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9PSAndW5kZWZpbmVkJykge1xuICAgIC8vIEZvciBicm93c2VycyB1c2UgWEhSIGFkYXB0ZXJcbiAgICBhZGFwdGVyID0gcmVxdWlyZSgnLi9hZGFwdGVycy94aHInKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHByb2Nlc3MpID09PSAnW29iamVjdCBwcm9jZXNzXScpIHtcbiAgICAvLyBGb3Igbm9kZSB1c2UgSFRUUCBhZGFwdGVyXG4gICAgYWRhcHRlciA9IHJlcXVpcmUoJy4vYWRhcHRlcnMvaHR0cCcpO1xuICB9XG4gIHJldHVybiBhZGFwdGVyO1xufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlTYWZlbHkocmF3VmFsdWUsIHBhcnNlciwgZW5jb2Rlcikge1xuICBpZiAodXRpbHMuaXNTdHJpbmcocmF3VmFsdWUpKSB7XG4gICAgdHJ5IHtcbiAgICAgIChwYXJzZXIgfHwgSlNPTi5wYXJzZSkocmF3VmFsdWUpO1xuICAgICAgcmV0dXJuIHV0aWxzLnRyaW0ocmF3VmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlLm5hbWUgIT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gKGVuY29kZXIgfHwgSlNPTi5zdHJpbmdpZnkpKHJhd1ZhbHVlKTtcbn1cblxudmFyIGRlZmF1bHRzID0ge1xuXG4gIHRyYW5zaXRpb25hbDoge1xuICAgIHNpbGVudEpTT05QYXJzaW5nOiB0cnVlLFxuICAgIGZvcmNlZEpTT05QYXJzaW5nOiB0cnVlLFxuICAgIGNsYXJpZnlUaW1lb3V0RXJyb3I6IGZhbHNlXG4gIH0sXG5cbiAgYWRhcHRlcjogZ2V0RGVmYXVsdEFkYXB0ZXIoKSxcblxuICB0cmFuc2Zvcm1SZXF1ZXN0OiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVxdWVzdChkYXRhLCBoZWFkZXJzKSB7XG4gICAgbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCAnQWNjZXB0Jyk7XG4gICAgbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCAnQ29udGVudC1UeXBlJyk7XG5cbiAgICBpZiAodXRpbHMuaXNGb3JtRGF0YShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNBcnJheUJ1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzU3RyZWFtKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0ZpbGUoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQmxvYihkYXRhKVxuICAgICkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyVmlldyhkYXRhKSkge1xuICAgICAgcmV0dXJuIGRhdGEuYnVmZmVyO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMoZGF0YSkpIHtcbiAgICAgIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgnKTtcbiAgICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc09iamVjdChkYXRhKSB8fCAoaGVhZGVycyAmJiBoZWFkZXJzWydDb250ZW50LVR5cGUnXSA9PT0gJ2FwcGxpY2F0aW9uL2pzb24nKSkge1xuICAgICAgc2V0Q29udGVudFR5cGVJZlVuc2V0KGhlYWRlcnMsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgICByZXR1cm4gc3RyaW5naWZ5U2FmZWx5KGRhdGEpO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgdHJhbnNmb3JtUmVzcG9uc2U6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXNwb25zZShkYXRhKSB7XG4gICAgdmFyIHRyYW5zaXRpb25hbCA9IHRoaXMudHJhbnNpdGlvbmFsIHx8IGRlZmF1bHRzLnRyYW5zaXRpb25hbDtcbiAgICB2YXIgc2lsZW50SlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLnNpbGVudEpTT05QYXJzaW5nO1xuICAgIHZhciBmb3JjZWRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuZm9yY2VkSlNPTlBhcnNpbmc7XG4gICAgdmFyIHN0cmljdEpTT05QYXJzaW5nID0gIXNpbGVudEpTT05QYXJzaW5nICYmIHRoaXMucmVzcG9uc2VUeXBlID09PSAnanNvbic7XG5cbiAgICBpZiAoc3RyaWN0SlNPTlBhcnNpbmcgfHwgKGZvcmNlZEpTT05QYXJzaW5nICYmIHV0aWxzLmlzU3RyaW5nKGRhdGEpICYmIGRhdGEubGVuZ3RoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChzdHJpY3RKU09OUGFyc2luZykge1xuICAgICAgICAgIGlmIChlLm5hbWUgPT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgICAgIHRocm93IGVuaGFuY2VFcnJvcihlLCB0aGlzLCAnRV9KU09OX1BBUlNFJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgLyoqXG4gICAqIEEgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgdG8gYWJvcnQgYSByZXF1ZXN0LiBJZiBzZXQgdG8gMCAoZGVmYXVsdCkgYVxuICAgKiB0aW1lb3V0IGlzIG5vdCBjcmVhdGVkLlxuICAgKi9cbiAgdGltZW91dDogMCxcblxuICB4c3JmQ29va2llTmFtZTogJ1hTUkYtVE9LRU4nLFxuICB4c3JmSGVhZGVyTmFtZTogJ1gtWFNSRi1UT0tFTicsXG5cbiAgbWF4Q29udGVudExlbmd0aDogLTEsXG4gIG1heEJvZHlMZW5ndGg6IC0xLFxuXG4gIHZhbGlkYXRlU3RhdHVzOiBmdW5jdGlvbiB2YWxpZGF0ZVN0YXR1cyhzdGF0dXMpIHtcbiAgICByZXR1cm4gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDA7XG4gIH0sXG5cbiAgaGVhZGVyczoge1xuICAgIGNvbW1vbjoge1xuICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonXG4gICAgfVxuICB9XG59O1xuXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHt9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHV0aWxzLm1lcmdlKERFRkFVTFRfQ09OVEVOVF9UWVBFKTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmF1bHRzO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuLy4uL2RlZmF1bHRzJyk7XG5cbi8qKlxuICogVHJhbnNmb3JtIHRoZSBkYXRhIGZvciBhIHJlcXVlc3Qgb3IgYSByZXNwb25zZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fFN0cmluZ30gZGF0YSBUaGUgZGF0YSB0byBiZSB0cmFuc2Zvcm1lZFxuICogQHBhcmFtIHtBcnJheX0gaGVhZGVycyBUaGUgaGVhZGVycyBmb3IgdGhlIHJlcXVlc3Qgb3IgcmVzcG9uc2VcbiAqIEBwYXJhbSB7QXJyYXl8RnVuY3Rpb259IGZucyBBIHNpbmdsZSBmdW5jdGlvbiBvciBBcnJheSBvZiBmdW5jdGlvbnNcbiAqIEByZXR1cm5zIHsqfSBUaGUgcmVzdWx0aW5nIHRyYW5zZm9ybWVkIGRhdGFcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB0cmFuc2Zvcm1EYXRhKGRhdGEsIGhlYWRlcnMsIGZucykge1xuICB2YXIgY29udGV4dCA9IHRoaXMgfHwgZGVmYXVsdHM7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICB1dGlscy5mb3JFYWNoKGZucywgZnVuY3Rpb24gdHJhbnNmb3JtKGZuKSB7XG4gICAgZGF0YSA9IGZuLmNhbGwoY29udGV4dCwgZGF0YSwgaGVhZGVycyk7XG4gIH0pO1xuXG4gIHJldHVybiBkYXRhO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0NhbmNlbCh2YWx1ZSkge1xuICByZXR1cm4gISEodmFsdWUgJiYgdmFsdWUuX19DQU5DRUxfXyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgdHJhbnNmb3JtRGF0YSA9IHJlcXVpcmUoJy4vdHJhbnNmb3JtRGF0YScpO1xudmFyIGlzQ2FuY2VsID0gcmVxdWlyZSgnLi4vY2FuY2VsL2lzQ2FuY2VsJyk7XG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuLi9kZWZhdWx0cycpO1xudmFyIENhbmNlbCA9IHJlcXVpcmUoJy4uL2NhbmNlbC9DYW5jZWwnKTtcblxuLyoqXG4gKiBUaHJvd3MgYSBgQ2FuY2VsYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICovXG5mdW5jdGlvbiB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZykge1xuICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgY29uZmlnLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKTtcbiAgfVxuXG4gIGlmIChjb25maWcuc2lnbmFsICYmIGNvbmZpZy5zaWduYWwuYWJvcnRlZCkge1xuICAgIHRocm93IG5ldyBDYW5jZWwoJ2NhbmNlbGVkJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBEaXNwYXRjaCBhIHJlcXVlc3QgdG8gdGhlIHNlcnZlciB1c2luZyB0aGUgY29uZmlndXJlZCBhZGFwdGVyLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0XG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGlzcGF0Y2hSZXF1ZXN0KGNvbmZpZykge1xuICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgLy8gRW5zdXJlIGhlYWRlcnMgZXhpc3RcbiAgY29uZmlnLmhlYWRlcnMgPSBjb25maWcuaGVhZGVycyB8fCB7fTtcblxuICAvLyBUcmFuc2Zvcm0gcmVxdWVzdCBkYXRhXG4gIGNvbmZpZy5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgIGNvbmZpZyxcbiAgICBjb25maWcuZGF0YSxcbiAgICBjb25maWcuaGVhZGVycyxcbiAgICBjb25maWcudHJhbnNmb3JtUmVxdWVzdFxuICApO1xuXG4gIC8vIEZsYXR0ZW4gaGVhZGVyc1xuICBjb25maWcuaGVhZGVycyA9IHV0aWxzLm1lcmdlKFxuICAgIGNvbmZpZy5oZWFkZXJzLmNvbW1vbiB8fCB7fSxcbiAgICBjb25maWcuaGVhZGVyc1tjb25maWcubWV0aG9kXSB8fCB7fSxcbiAgICBjb25maWcuaGVhZGVyc1xuICApO1xuXG4gIHV0aWxzLmZvckVhY2goXG4gICAgWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnLCAnY29tbW9uJ10sXG4gICAgZnVuY3Rpb24gY2xlYW5IZWFkZXJDb25maWcobWV0aG9kKSB7XG4gICAgICBkZWxldGUgY29uZmlnLmhlYWRlcnNbbWV0aG9kXTtcbiAgICB9XG4gICk7XG5cbiAgdmFyIGFkYXB0ZXIgPSBjb25maWcuYWRhcHRlciB8fCBkZWZhdWx0cy5hZGFwdGVyO1xuXG4gIHJldHVybiBhZGFwdGVyKGNvbmZpZykudGhlbihmdW5jdGlvbiBvbkFkYXB0ZXJSZXNvbHV0aW9uKHJlc3BvbnNlKSB7XG4gICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICByZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgICAgY29uZmlnLFxuICAgICAgcmVzcG9uc2UuZGF0YSxcbiAgICAgIHJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2VcbiAgICApO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9LCBmdW5jdGlvbiBvbkFkYXB0ZXJSZWplY3Rpb24ocmVhc29uKSB7XG4gICAgaWYgKCFpc0NhbmNlbChyZWFzb24pKSB7XG4gICAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgICBpZiAocmVhc29uICYmIHJlYXNvbi5yZXNwb25zZSkge1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEsXG4gICAgICAgICAgcmVhc29uLnJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlYXNvbik7XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBDb25maWctc3BlY2lmaWMgbWVyZ2UtZnVuY3Rpb24gd2hpY2ggY3JlYXRlcyBhIG5ldyBjb25maWctb2JqZWN0XG4gKiBieSBtZXJnaW5nIHR3byBjb25maWd1cmF0aW9uIG9iamVjdHMgdG9nZXRoZXIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzFcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcyXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBOZXcgb2JqZWN0IHJlc3VsdGluZyBmcm9tIG1lcmdpbmcgY29uZmlnMiB0byBjb25maWcxXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbWVyZ2VDb25maWcoY29uZmlnMSwgY29uZmlnMikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgY29uZmlnMiA9IGNvbmZpZzIgfHwge307XG4gIHZhciBjb25maWcgPSB7fTtcblxuICBmdW5jdGlvbiBnZXRNZXJnZWRWYWx1ZSh0YXJnZXQsIHNvdXJjZSkge1xuICAgIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KHRhcmdldCkgJiYgdXRpbHMuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMubWVyZ2UodGFyZ2V0LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMubWVyZ2Uoe30sIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBzb3VyY2Uuc2xpY2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBtZXJnZURlZXBQcm9wZXJ0aWVzKHByb3ApIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzJbcHJvcF0pKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoY29uZmlnMVtwcm9wXSwgY29uZmlnMltwcm9wXSk7XG4gICAgfSBlbHNlIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnMVtwcm9wXSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzFbcHJvcF0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiB2YWx1ZUZyb21Db25maWcyKHByb3ApIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzJbcHJvcF0pKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcyW3Byb3BdKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gZGVmYXVsdFRvQ29uZmlnMihwcm9wKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcyW3Byb3BdKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgY29uZmlnMltwcm9wXSk7XG4gICAgfSBlbHNlIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnMVtwcm9wXSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzFbcHJvcF0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBtZXJnZURpcmVjdEtleXMocHJvcCkge1xuICAgIGlmIChwcm9wIGluIGNvbmZpZzIpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShjb25maWcxW3Byb3BdLCBjb25maWcyW3Byb3BdKTtcbiAgICB9IGVsc2UgaWYgKHByb3AgaW4gY29uZmlnMSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgY29uZmlnMVtwcm9wXSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIG1lcmdlTWFwID0ge1xuICAgICd1cmwnOiB2YWx1ZUZyb21Db25maWcyLFxuICAgICdtZXRob2QnOiB2YWx1ZUZyb21Db25maWcyLFxuICAgICdkYXRhJzogdmFsdWVGcm9tQ29uZmlnMixcbiAgICAnYmFzZVVSTCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3RyYW5zZm9ybVJlcXVlc3QnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd0cmFuc2Zvcm1SZXNwb25zZSc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3BhcmFtc1NlcmlhbGl6ZXInOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd0aW1lb3V0JzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAndGltZW91dE1lc3NhZ2UnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd3aXRoQ3JlZGVudGlhbHMnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdhZGFwdGVyJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAncmVzcG9uc2VUeXBlJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAneHNyZkNvb2tpZU5hbWUnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd4c3JmSGVhZGVyTmFtZSc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ29uVXBsb2FkUHJvZ3Jlc3MnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdvbkRvd25sb2FkUHJvZ3Jlc3MnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdkZWNvbXByZXNzJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnbWF4Q29udGVudExlbmd0aCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ21heEJvZHlMZW5ndGgnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd0cmFuc3BvcnQnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdodHRwQWdlbnQnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdodHRwc0FnZW50JzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnY2FuY2VsVG9rZW4nOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdzb2NrZXRQYXRoJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAncmVzcG9uc2VFbmNvZGluZyc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3ZhbGlkYXRlU3RhdHVzJzogbWVyZ2VEaXJlY3RLZXlzXG4gIH07XG5cbiAgdXRpbHMuZm9yRWFjaChPYmplY3Qua2V5cyhjb25maWcxKS5jb25jYXQoT2JqZWN0LmtleXMoY29uZmlnMikpLCBmdW5jdGlvbiBjb21wdXRlQ29uZmlnVmFsdWUocHJvcCkge1xuICAgIHZhciBtZXJnZSA9IG1lcmdlTWFwW3Byb3BdIHx8IG1lcmdlRGVlcFByb3BlcnRpZXM7XG4gICAgdmFyIGNvbmZpZ1ZhbHVlID0gbWVyZ2UocHJvcCk7XG4gICAgKHV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZ1ZhbHVlKSAmJiBtZXJnZSAhPT0gbWVyZ2VEaXJlY3RLZXlzKSB8fCAoY29uZmlnW3Byb3BdID0gY29uZmlnVmFsdWUpO1xuICB9KTtcblxuICByZXR1cm4gY29uZmlnO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuICBcInZlcnNpb25cIjogXCIwLjIzLjBcIlxufTsiLCIndXNlIHN0cmljdCc7XG5cbnZhciBWRVJTSU9OID0gcmVxdWlyZSgnLi4vZW52L2RhdGEnKS52ZXJzaW9uO1xuXG52YXIgdmFsaWRhdG9ycyA9IHt9O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuWydvYmplY3QnLCAnYm9vbGVhbicsICdudW1iZXInLCAnZnVuY3Rpb24nLCAnc3RyaW5nJywgJ3N5bWJvbCddLmZvckVhY2goZnVuY3Rpb24odHlwZSwgaSkge1xuICB2YWxpZGF0b3JzW3R5cGVdID0gZnVuY3Rpb24gdmFsaWRhdG9yKHRoaW5nKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGluZyA9PT0gdHlwZSB8fCAnYScgKyAoaSA8IDEgPyAnbiAnIDogJyAnKSArIHR5cGU7XG4gIH07XG59KTtcblxudmFyIGRlcHJlY2F0ZWRXYXJuaW5ncyA9IHt9O1xuXG4vKipcbiAqIFRyYW5zaXRpb25hbCBvcHRpb24gdmFsaWRhdG9yXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufGJvb2xlYW4/fSB2YWxpZGF0b3IgLSBzZXQgdG8gZmFsc2UgaWYgdGhlIHRyYW5zaXRpb25hbCBvcHRpb24gaGFzIGJlZW4gcmVtb3ZlZFxuICogQHBhcmFtIHtzdHJpbmc/fSB2ZXJzaW9uIC0gZGVwcmVjYXRlZCB2ZXJzaW9uIC8gcmVtb3ZlZCBzaW5jZSB2ZXJzaW9uXG4gKiBAcGFyYW0ge3N0cmluZz99IG1lc3NhZ2UgLSBzb21lIG1lc3NhZ2Ugd2l0aCBhZGRpdGlvbmFsIGluZm9cbiAqIEByZXR1cm5zIHtmdW5jdGlvbn1cbiAqL1xudmFsaWRhdG9ycy50cmFuc2l0aW9uYWwgPSBmdW5jdGlvbiB0cmFuc2l0aW9uYWwodmFsaWRhdG9yLCB2ZXJzaW9uLCBtZXNzYWdlKSB7XG4gIGZ1bmN0aW9uIGZvcm1hdE1lc3NhZ2Uob3B0LCBkZXNjKSB7XG4gICAgcmV0dXJuICdbQXhpb3MgdicgKyBWRVJTSU9OICsgJ10gVHJhbnNpdGlvbmFsIG9wdGlvbiBcXCcnICsgb3B0ICsgJ1xcJycgKyBkZXNjICsgKG1lc3NhZ2UgPyAnLiAnICsgbWVzc2FnZSA6ICcnKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSwgb3B0LCBvcHRzKSB7XG4gICAgaWYgKHZhbGlkYXRvciA9PT0gZmFsc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihmb3JtYXRNZXNzYWdlKG9wdCwgJyBoYXMgYmVlbiByZW1vdmVkJyArICh2ZXJzaW9uID8gJyBpbiAnICsgdmVyc2lvbiA6ICcnKSkpO1xuICAgIH1cblxuICAgIGlmICh2ZXJzaW9uICYmICFkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSkge1xuICAgICAgZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0gPSB0cnVlO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgZm9ybWF0TWVzc2FnZShcbiAgICAgICAgICBvcHQsXG4gICAgICAgICAgJyBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYnICsgdmVyc2lvbiArICcgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUnXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRvciA/IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRzKSA6IHRydWU7XG4gIH07XG59O1xuXG4vKipcbiAqIEFzc2VydCBvYmplY3QncyBwcm9wZXJ0aWVzIHR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gc2NoZW1hXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBhbGxvd1Vua25vd25cbiAqL1xuXG5mdW5jdGlvbiBhc3NlcnRPcHRpb25zKG9wdGlvbnMsIHNjaGVtYSwgYWxsb3dVbmtub3duKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvcHRpb25zKTtcbiAgdmFyIGkgPSBrZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICB2YXIgb3B0ID0ga2V5c1tpXTtcbiAgICB2YXIgdmFsaWRhdG9yID0gc2NoZW1hW29wdF07XG4gICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgdmFyIHZhbHVlID0gb3B0aW9uc1tvcHRdO1xuICAgICAgdmFyIHJlc3VsdCA9IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdGlvbnMpO1xuICAgICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gJyArIG9wdCArICcgbXVzdCBiZSAnICsgcmVzdWx0KTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoYWxsb3dVbmtub3duICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBFcnJvcignVW5rbm93biBvcHRpb24gJyArIG9wdCk7XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBhc3NlcnRPcHRpb25zOiBhc3NlcnRPcHRpb25zLFxuICB2YWxpZGF0b3JzOiB2YWxpZGF0b3JzXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgYnVpbGRVUkwgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2J1aWxkVVJMJyk7XG52YXIgSW50ZXJjZXB0b3JNYW5hZ2VyID0gcmVxdWlyZSgnLi9JbnRlcmNlcHRvck1hbmFnZXInKTtcbnZhciBkaXNwYXRjaFJlcXVlc3QgPSByZXF1aXJlKCcuL2Rpc3BhdGNoUmVxdWVzdCcpO1xudmFyIG1lcmdlQ29uZmlnID0gcmVxdWlyZSgnLi9tZXJnZUNvbmZpZycpO1xudmFyIHZhbGlkYXRvciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvdmFsaWRhdG9yJyk7XG5cbnZhciB2YWxpZGF0b3JzID0gdmFsaWRhdG9yLnZhbGlkYXRvcnM7XG4vKipcbiAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZUNvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBBeGlvcyhpbnN0YW5jZUNvbmZpZykge1xuICB0aGlzLmRlZmF1bHRzID0gaW5zdGFuY2VDb25maWc7XG4gIHRoaXMuaW50ZXJjZXB0b3JzID0ge1xuICAgIHJlcXVlc3Q6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKSxcbiAgICByZXNwb25zZTogbmV3IEludGVyY2VwdG9yTWFuYWdlcigpXG4gIH07XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHNwZWNpZmljIGZvciB0aGlzIHJlcXVlc3QgKG1lcmdlZCB3aXRoIHRoaXMuZGVmYXVsdHMpXG4gKi9cbkF4aW9zLnByb3RvdHlwZS5yZXF1ZXN0ID0gZnVuY3Rpb24gcmVxdWVzdChjb25maWcpIHtcbiAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gIC8vIEFsbG93IGZvciBheGlvcygnZXhhbXBsZS91cmwnWywgY29uZmlnXSkgYSBsYSBmZXRjaCBBUElcbiAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uZmlnID0gYXJndW1lbnRzWzFdIHx8IHt9O1xuICAgIGNvbmZpZy51cmwgPSBhcmd1bWVudHNbMF07XG4gIH0gZWxzZSB7XG4gICAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICB9XG5cbiAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcblxuICAvLyBTZXQgY29uZmlnLm1ldGhvZFxuICBpZiAoY29uZmlnLm1ldGhvZCkge1xuICAgIGNvbmZpZy5tZXRob2QgPSBjb25maWcubWV0aG9kLnRvTG93ZXJDYXNlKCk7XG4gIH0gZWxzZSBpZiAodGhpcy5kZWZhdWx0cy5tZXRob2QpIHtcbiAgICBjb25maWcubWV0aG9kID0gdGhpcy5kZWZhdWx0cy5tZXRob2QudG9Mb3dlckNhc2UoKTtcbiAgfSBlbHNlIHtcbiAgICBjb25maWcubWV0aG9kID0gJ2dldCc7XG4gIH1cblxuICB2YXIgdHJhbnNpdGlvbmFsID0gY29uZmlnLnRyYW5zaXRpb25hbDtcblxuICBpZiAodHJhbnNpdGlvbmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YWxpZGF0b3IuYXNzZXJ0T3B0aW9ucyh0cmFuc2l0aW9uYWwsIHtcbiAgICAgIHNpbGVudEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgZm9yY2VkSlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICBjbGFyaWZ5VGltZW91dEVycm9yOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pXG4gICAgfSwgZmFsc2UpO1xuICB9XG5cbiAgLy8gZmlsdGVyIG91dCBza2lwcGVkIGludGVyY2VwdG9yc1xuICB2YXIgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgdmFyIHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyA9IHRydWU7XG4gIHRoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbiB1bnNoaWZ0UmVxdWVzdEludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgIGlmICh0eXBlb2YgaW50ZXJjZXB0b3IucnVuV2hlbiA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnRlcmNlcHRvci5ydW5XaGVuKGNvbmZpZykgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9yLnN5bmNocm9ub3VzO1xuXG4gICAgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4udW5zaGlmdChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgfSk7XG5cbiAgdmFyIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICB0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uIHB1c2hSZXNwb25zZUludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5wdXNoKGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICB9KTtcblxuICB2YXIgcHJvbWlzZTtcblxuICBpZiAoIXN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycykge1xuICAgIHZhciBjaGFpbiA9IFtkaXNwYXRjaFJlcXVlc3QsIHVuZGVmaW5lZF07XG5cbiAgICBBcnJheS5wcm90b3R5cGUudW5zaGlmdC5hcHBseShjaGFpbiwgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4pO1xuICAgIGNoYWluID0gY2hhaW4uY29uY2F0KHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbik7XG5cbiAgICBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGNvbmZpZyk7XG4gICAgd2hpbGUgKGNoYWluLmxlbmd0aCkge1xuICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihjaGFpbi5zaGlmdCgpLCBjaGFpbi5zaGlmdCgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuXG5cbiAgdmFyIG5ld0NvbmZpZyA9IGNvbmZpZztcbiAgd2hpbGUgKHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLmxlbmd0aCkge1xuICAgIHZhciBvbkZ1bGZpbGxlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnNoaWZ0KCk7XG4gICAgdmFyIG9uUmVqZWN0ZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi5zaGlmdCgpO1xuICAgIHRyeSB7XG4gICAgICBuZXdDb25maWcgPSBvbkZ1bGZpbGxlZChuZXdDb25maWcpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBvblJlamVjdGVkKGVycm9yKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHRyeSB7XG4gICAgcHJvbWlzZSA9IGRpc3BhdGNoUmVxdWVzdChuZXdDb25maWcpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gIH1cblxuICB3aGlsZSAocmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLmxlbmd0aCkge1xuICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4ocmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnNoaWZ0KCksIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5zaGlmdCgpKTtcbiAgfVxuXG4gIHJldHVybiBwcm9taXNlO1xufTtcblxuQXhpb3MucHJvdG90eXBlLmdldFVyaSA9IGZ1bmN0aW9uIGdldFVyaShjb25maWcpIHtcbiAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcbiAgcmV0dXJuIGJ1aWxkVVJMKGNvbmZpZy51cmwsIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKS5yZXBsYWNlKC9eXFw/LywgJycpO1xufTtcblxuLy8gUHJvdmlkZSBhbGlhc2VzIGZvciBzdXBwb3J0ZWQgcmVxdWVzdCBtZXRob2RzXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ29wdGlvbnMnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbih1cmwsIGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QobWVyZ2VDb25maWcoY29uZmlnIHx8IHt9LCB7XG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIHVybDogdXJsLFxuICAgICAgZGF0YTogKGNvbmZpZyB8fCB7fSkuZGF0YVxuICAgIH0pKTtcbiAgfTtcbn0pO1xuXG51dGlscy5mb3JFYWNoKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZFdpdGhEYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKHVybCwgZGF0YSwgY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHtcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgdXJsOiB1cmwsXG4gICAgICBkYXRhOiBkYXRhXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQXhpb3M7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBDYW5jZWwgPSByZXF1aXJlKCcuL0NhbmNlbCcpO1xuXG4vKipcbiAqIEEgYENhbmNlbFRva2VuYCBpcyBhbiBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byByZXF1ZXN0IGNhbmNlbGxhdGlvbiBvZiBhbiBvcGVyYXRpb24uXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBleGVjdXRvciBUaGUgZXhlY3V0b3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIENhbmNlbFRva2VuKGV4ZWN1dG9yKSB7XG4gIGlmICh0eXBlb2YgZXhlY3V0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uJyk7XG4gIH1cblxuICB2YXIgcmVzb2x2ZVByb21pc2U7XG5cbiAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gcHJvbWlzZUV4ZWN1dG9yKHJlc29sdmUpIHtcbiAgICByZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gIH0pO1xuXG4gIHZhciB0b2tlbiA9IHRoaXM7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgdGhpcy5wcm9taXNlLnRoZW4oZnVuY3Rpb24oY2FuY2VsKSB7XG4gICAgaWYgKCF0b2tlbi5fbGlzdGVuZXJzKSByZXR1cm47XG5cbiAgICB2YXIgaTtcbiAgICB2YXIgbCA9IHRva2VuLl9saXN0ZW5lcnMubGVuZ3RoO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgdG9rZW4uX2xpc3RlbmVyc1tpXShjYW5jZWwpO1xuICAgIH1cbiAgICB0b2tlbi5fbGlzdGVuZXJzID0gbnVsbDtcbiAgfSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgdGhpcy5wcm9taXNlLnRoZW4gPSBmdW5jdGlvbihvbmZ1bGZpbGxlZCkge1xuICAgIHZhciBfcmVzb2x2ZTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSkge1xuICAgICAgdG9rZW4uc3Vic2NyaWJlKHJlc29sdmUpO1xuICAgICAgX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgIH0pLnRoZW4ob25mdWxmaWxsZWQpO1xuXG4gICAgcHJvbWlzZS5jYW5jZWwgPSBmdW5jdGlvbiByZWplY3QoKSB7XG4gICAgICB0b2tlbi51bnN1YnNjcmliZShfcmVzb2x2ZSk7XG4gICAgfTtcblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9O1xuXG4gIGV4ZWN1dG9yKGZ1bmN0aW9uIGNhbmNlbChtZXNzYWdlKSB7XG4gICAgaWYgKHRva2VuLnJlYXNvbikge1xuICAgICAgLy8gQ2FuY2VsbGF0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdG9rZW4ucmVhc29uID0gbmV3IENhbmNlbChtZXNzYWdlKTtcbiAgICByZXNvbHZlUHJvbWlzZSh0b2tlbi5yZWFzb24pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBUaHJvd3MgYSBgQ2FuY2VsYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICovXG5DYW5jZWxUb2tlbi5wcm90b3R5cGUudGhyb3dJZlJlcXVlc3RlZCA9IGZ1bmN0aW9uIHRocm93SWZSZXF1ZXN0ZWQoKSB7XG4gIGlmICh0aGlzLnJlYXNvbikge1xuICAgIHRocm93IHRoaXMucmVhc29uO1xuICB9XG59O1xuXG4vKipcbiAqIFN1YnNjcmliZSB0byB0aGUgY2FuY2VsIHNpZ25hbFxuICovXG5cbkNhbmNlbFRva2VuLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiBzdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgbGlzdGVuZXIodGhpcy5yZWFzb24pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzID0gW2xpc3RlbmVyXTtcbiAgfVxufTtcblxuLyoqXG4gKiBVbnN1YnNjcmliZSBmcm9tIHRoZSBjYW5jZWwgc2lnbmFsXG4gKi9cblxuQ2FuY2VsVG9rZW4ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gdW5zdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgaWYgKCF0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGluZGV4ID0gdGhpcy5fbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gIH1cbn07XG5cbi8qKlxuICogUmV0dXJucyBhbiBvYmplY3QgdGhhdCBjb250YWlucyBhIG5ldyBgQ2FuY2VsVG9rZW5gIGFuZCBhIGZ1bmN0aW9uIHRoYXQsIHdoZW4gY2FsbGVkLFxuICogY2FuY2VscyB0aGUgYENhbmNlbFRva2VuYC5cbiAqL1xuQ2FuY2VsVG9rZW4uc291cmNlID0gZnVuY3Rpb24gc291cmNlKCkge1xuICB2YXIgY2FuY2VsO1xuICB2YXIgdG9rZW4gPSBuZXcgQ2FuY2VsVG9rZW4oZnVuY3Rpb24gZXhlY3V0b3IoYykge1xuICAgIGNhbmNlbCA9IGM7XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIHRva2VuOiB0b2tlbixcbiAgICBjYW5jZWw6IGNhbmNlbFxuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDYW5jZWxUb2tlbjtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBTeW50YWN0aWMgc3VnYXIgZm9yIGludm9raW5nIGEgZnVuY3Rpb24gYW5kIGV4cGFuZGluZyBhbiBhcnJheSBmb3IgYXJndW1lbnRzLlxuICpcbiAqIENvbW1vbiB1c2UgY2FzZSB3b3VsZCBiZSB0byB1c2UgYEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseWAuXG4gKlxuICogIGBgYGpzXG4gKiAgZnVuY3Rpb24gZih4LCB5LCB6KSB7fVxuICogIHZhciBhcmdzID0gWzEsIDIsIDNdO1xuICogIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gKiAgYGBgXG4gKlxuICogV2l0aCBgc3ByZWFkYCB0aGlzIGV4YW1wbGUgY2FuIGJlIHJlLXdyaXR0ZW4uXG4gKlxuICogIGBgYGpzXG4gKiAgc3ByZWFkKGZ1bmN0aW9uKHgsIHksIHopIHt9KShbMSwgMiwgM10pO1xuICogIGBgYFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc3ByZWFkKGNhbGxiYWNrKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKGFycikge1xuICAgIHJldHVybiBjYWxsYmFjay5hcHBseShudWxsLCBhcnIpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zXG4gKlxuICogQHBhcmFtIHsqfSBwYXlsb2FkIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgcGF5bG9hZCBpcyBhbiBlcnJvciB0aHJvd24gYnkgQXhpb3MsIG90aGVyd2lzZSBmYWxzZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQXhpb3NFcnJvcihwYXlsb2FkKSB7XG4gIHJldHVybiAodHlwZW9mIHBheWxvYWQgPT09ICdvYmplY3QnKSAmJiAocGF5bG9hZC5pc0F4aW9zRXJyb3IgPT09IHRydWUpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuL2hlbHBlcnMvYmluZCcpO1xudmFyIEF4aW9zID0gcmVxdWlyZSgnLi9jb3JlL0F4aW9zJyk7XG52YXIgbWVyZ2VDb25maWcgPSByZXF1aXJlKCcuL2NvcmUvbWVyZ2VDb25maWcnKTtcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJy4vZGVmYXVsdHMnKTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGVmYXVsdENvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICogQHJldHVybiB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRDb25maWcpIHtcbiAgdmFyIGNvbnRleHQgPSBuZXcgQXhpb3MoZGVmYXVsdENvbmZpZyk7XG4gIHZhciBpbnN0YW5jZSA9IGJpbmQoQXhpb3MucHJvdG90eXBlLnJlcXVlc3QsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgYXhpb3MucHJvdG90eXBlIHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgQXhpb3MucHJvdG90eXBlLCBjb250ZXh0KTtcblxuICAvLyBDb3B5IGNvbnRleHQgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBjb250ZXh0KTtcblxuICAvLyBGYWN0b3J5IGZvciBjcmVhdGluZyBuZXcgaW5zdGFuY2VzXG4gIGluc3RhbmNlLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpbnN0YW5jZUNvbmZpZykge1xuICAgIHJldHVybiBjcmVhdGVJbnN0YW5jZShtZXJnZUNvbmZpZyhkZWZhdWx0Q29uZmlnLCBpbnN0YW5jZUNvbmZpZykpO1xuICB9O1xuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cblxuLy8gQ3JlYXRlIHRoZSBkZWZhdWx0IGluc3RhbmNlIHRvIGJlIGV4cG9ydGVkXG52YXIgYXhpb3MgPSBjcmVhdGVJbnN0YW5jZShkZWZhdWx0cyk7XG5cbi8vIEV4cG9zZSBBeGlvcyBjbGFzcyB0byBhbGxvdyBjbGFzcyBpbmhlcml0YW5jZVxuYXhpb3MuQXhpb3MgPSBBeGlvcztcblxuLy8gRXhwb3NlIENhbmNlbCAmIENhbmNlbFRva2VuXG5heGlvcy5DYW5jZWwgPSByZXF1aXJlKCcuL2NhbmNlbC9DYW5jZWwnKTtcbmF4aW9zLkNhbmNlbFRva2VuID0gcmVxdWlyZSgnLi9jYW5jZWwvQ2FuY2VsVG9rZW4nKTtcbmF4aW9zLmlzQ2FuY2VsID0gcmVxdWlyZSgnLi9jYW5jZWwvaXNDYW5jZWwnKTtcbmF4aW9zLlZFUlNJT04gPSByZXF1aXJlKCcuL2Vudi9kYXRhJykudmVyc2lvbjtcblxuLy8gRXhwb3NlIGFsbC9zcHJlYWRcbmF4aW9zLmFsbCA9IGZ1bmN0aW9uIGFsbChwcm9taXNlcykge1xuICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xufTtcbmF4aW9zLnNwcmVhZCA9IHJlcXVpcmUoJy4vaGVscGVycy9zcHJlYWQnKTtcblxuLy8gRXhwb3NlIGlzQXhpb3NFcnJvclxuYXhpb3MuaXNBeGlvc0Vycm9yID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzQXhpb3NFcnJvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGF4aW9zO1xuXG4vLyBBbGxvdyB1c2Ugb2YgZGVmYXVsdCBpbXBvcnQgc3ludGF4IGluIFR5cGVTY3JpcHRcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBheGlvcztcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvYXhpb3MnKTsiLCJpbXBvcnQgQXhpb3MgZnJvbSBcImF4aW9zXCI7XG5pbXBvcnQge1xuICBIdHRwQ2xpZW50LFxuICBSZXF1ZXN0Q29uZmlnQnVpbGRlcixcbiAgUmVxdWVzdENvbmZpZyxcbiAgUmVzcG9uc2VIYW5kbGVyLFxufSBmcm9tIFwiLi9IdHRwQ2xpZW50SW50ZXJmYWNlXCI7XG5pbXBvcnQgRm9ybURhdGEgZnJvbSBcImZvcm0tZGF0YVwiO1xuXG5leHBvcnQgY2xhc3MgQXhpb3NDbGllbnQgaW1wbGVtZW50cyBIdHRwQ2xpZW50IHtcbiAgcHJpdmF0ZSByZXNwb25zZUhhbmRsZXI6IFJlc3BvbnNlSGFuZGxlcjtcbiAgcHJpdmF0ZSByZXF1ZXN0Q29uZmlnQnVpbGRlcjogUmVxdWVzdENvbmZpZ0J1aWxkZXI7XG5cbiAgY29uc3RydWN0b3Ioe1xuICAgIHJlc3BvbnNlSGFuZGxlcixcbiAgICByZXF1ZXN0Q29uZmlnQnVpbGRlcixcbiAgfToge1xuICAgIHJlc3BvbnNlSGFuZGxlcjogUmVzcG9uc2VIYW5kbGVyO1xuICAgIHJlcXVlc3RDb25maWdCdWlsZGVyOiBSZXF1ZXN0Q29uZmlnQnVpbGRlcjtcbiAgfSkge1xuICAgIHRoaXMucmVzcG9uc2VIYW5kbGVyID0gcmVzcG9uc2VIYW5kbGVyO1xuICAgIHRoaXMucmVxdWVzdENvbmZpZ0J1aWxkZXIgPSByZXF1ZXN0Q29uZmlnQnVpbGRlcjtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXQ8VCBleHRlbmRzIG9iamVjdD4ocGF0aDogc3RyaW5nLCBwYXJhbXM6IGFueSkge1xuICAgIGNvbnN0IHJlcXVlc3RDb25maWcgPSBhd2FpdCB0aGlzLnJlcXVlc3RDb25maWdCdWlsZGVyLmJ1aWxkKFxuICAgICAgXCJnZXRcIixcbiAgICAgIHBhdGgsXG4gICAgICBwYXJhbXNcbiAgICApO1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5zZW5kUmVxdWVzdChyZXF1ZXN0Q29uZmlnKSkgYXMgUHJvbWlzZTxUPjtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXREYXRhKHBhdGg6IHN0cmluZywgcGFyYW1zOiBhbnkpIHtcbiAgICBjb25zdCByZXF1ZXN0Q29uZmlnID0gYXdhaXQgdGhpcy5yZXF1ZXN0Q29uZmlnQnVpbGRlci5idWlsZChcbiAgICAgIFwiZ2V0XCIsXG4gICAgICBwYXRoLFxuICAgICAgcGFyYW1zLFxuICAgICAge1xuICAgICAgICByZXNwb25zZVR5cGU6IFwiYXJyYXlidWZmZXJcIixcbiAgICAgIH1cbiAgICApO1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5zZW5kUmVxdWVzdChyZXF1ZXN0Q29uZmlnKSkgYXMgUHJvbWlzZTxBcnJheUJ1ZmZlcj47XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcG9zdDxUIGV4dGVuZHMgb2JqZWN0PihwYXRoOiBzdHJpbmcsIHBhcmFtczogYW55KSB7XG4gICAgY29uc3QgcmVxdWVzdENvbmZpZyA9IGF3YWl0IHRoaXMucmVxdWVzdENvbmZpZ0J1aWxkZXIuYnVpbGQoXG4gICAgICBcInBvc3RcIixcbiAgICAgIHBhdGgsXG4gICAgICBwYXJhbXNcbiAgICApO1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5zZW5kUmVxdWVzdChyZXF1ZXN0Q29uZmlnKSkgYXMgUHJvbWlzZTxUPjtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwb3N0RGF0YTxUIGV4dGVuZHMgb2JqZWN0PihwYXRoOiBzdHJpbmcsIGZvcm1EYXRhOiBGb3JtRGF0YSkge1xuICAgIGNvbnN0IHJlcXVlc3RDb25maWcgPSBhd2FpdCB0aGlzLnJlcXVlc3RDb25maWdCdWlsZGVyLmJ1aWxkKFxuICAgICAgXCJwb3N0XCIsXG4gICAgICBwYXRoLFxuICAgICAgZm9ybURhdGFcbiAgICApO1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5zZW5kUmVxdWVzdChyZXF1ZXN0Q29uZmlnKSkgYXMgUHJvbWlzZTxUPjtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwdXQ8VCBleHRlbmRzIG9iamVjdD4ocGF0aDogc3RyaW5nLCBwYXJhbXM6IGFueSkge1xuICAgIGNvbnN0IHJlcXVlc3RDb25maWcgPSBhd2FpdCB0aGlzLnJlcXVlc3RDb25maWdCdWlsZGVyLmJ1aWxkKFxuICAgICAgXCJwdXRcIixcbiAgICAgIHBhdGgsXG4gICAgICBwYXJhbXNcbiAgICApO1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5zZW5kUmVxdWVzdChyZXF1ZXN0Q29uZmlnKSkgYXMgUHJvbWlzZTxUPjtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkZWxldGU8VCBleHRlbmRzIG9iamVjdD4ocGF0aDogc3RyaW5nLCBwYXJhbXM6IGFueSkge1xuICAgIGNvbnN0IHJlcXVlc3RDb25maWcgPSBhd2FpdCB0aGlzLnJlcXVlc3RDb25maWdCdWlsZGVyLmJ1aWxkKFxuICAgICAgXCJkZWxldGVcIixcbiAgICAgIHBhdGgsXG4gICAgICBwYXJhbXNcbiAgICApO1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5zZW5kUmVxdWVzdChyZXF1ZXN0Q29uZmlnKSkgYXMgUHJvbWlzZTxUPjtcbiAgfVxuXG4gIHByaXZhdGUgc2VuZFJlcXVlc3QocmVxdWVzdENvbmZpZzogUmVxdWVzdENvbmZpZykge1xuICAgIHJldHVybiB0aGlzLnJlc3BvbnNlSGFuZGxlci5oYW5kbGUoXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbmV3LWNhcFxuICAgICAgQXhpb3Moe1xuICAgICAgICAuLi5yZXF1ZXN0Q29uZmlnLFxuXG4gICAgICAgIG1heEJvZHlMZW5ndGg6IEluZmluaXR5LFxuICAgICAgICBtYXhDb250ZW50TGVuZ3RoOiBJbmZpbml0eSxcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FLCBhcmd1bWVudCkge1xuICB2YXIgbWV0aG9kID0gW11bTUVUSE9EX05BTUVdO1xuICByZXR1cm4gISFtZXRob2QgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNhbGwsbm8tdGhyb3ctbGl0ZXJhbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICAgIG1ldGhvZC5jYWxsKG51bGwsIGFyZ3VtZW50IHx8IGZ1bmN0aW9uICgpIHsgdGhyb3cgMTsgfSwgMSk7XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcblxudmFyIG5hdGl2ZUpvaW4gPSBbXS5qb2luO1xuXG52YXIgRVMzX1NUUklOR1MgPSBJbmRleGVkT2JqZWN0ICE9IE9iamVjdDtcbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgnam9pbicsICcsJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuam9pbmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5qb2luXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBFUzNfU1RSSU5HUyB8fCAhU1RSSUNUX01FVEhPRCB9LCB7XG4gIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUpvaW4uY2FsbCh0b0luZGV4ZWRPYmplY3QodGhpcyksIHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkID8gJywnIDogc2VwYXJhdG9yKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qIGVzbGludCBjb21wbGV4aXR5OiBbMiwgMThdLCBtYXgtc3RhdGVtZW50czogWzIsIDMzXSAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnKSB7IHJldHVybiB0cnVlOyB9XG5cblx0dmFyIG9iaiA9IHt9O1xuXHR2YXIgc3ltID0gU3ltYm9sKCd0ZXN0Jyk7XG5cdHZhciBzeW1PYmogPSBPYmplY3Qoc3ltKTtcblx0aWYgKHR5cGVvZiBzeW0gPT09ICdzdHJpbmcnKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltT2JqKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0Ly8gdGVtcCBkaXNhYmxlZCBwZXIgaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9vYmplY3QuYXNzaWduL2lzc3Vlcy8xN1xuXHQvLyBpZiAoc3ltIGluc3RhbmNlb2YgU3ltYm9sKSB7IHJldHVybiBmYWxzZTsgfVxuXHQvLyB0ZW1wIGRpc2FibGVkIHBlciBodHRwczovL2dpdGh1Yi5jb20vV2ViUmVmbGVjdGlvbi9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMvaXNzdWVzLzRcblx0Ly8gaWYgKCEoc3ltT2JqIGluc3RhbmNlb2YgU3ltYm9sKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHQvLyBpZiAodHlwZW9mIFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdC8vIGlmIChTdHJpbmcoc3ltKSAhPT0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0dmFyIHN5bVZhbCA9IDQyO1xuXHRvYmpbc3ltXSA9IHN5bVZhbDtcblx0Zm9yIChzeW0gaW4gb2JqKSB7IHJldHVybiBmYWxzZTsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG5cdGlmICh0eXBlb2YgT2JqZWN0LmtleXMgPT09ICdmdW5jdGlvbicgJiYgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggIT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyA9PT0gJ2Z1bmN0aW9uJyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmxlbmd0aCAhPT0gMCkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHR2YXIgc3ltcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKTtcblx0aWYgKHN5bXMubGVuZ3RoICE9PSAxIHx8IHN5bXNbMF0gIT09IHN5bSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmosIHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgc3ltKTtcblx0XHRpZiAoZGVzY3JpcHRvci52YWx1ZSAhPT0gc3ltVmFsIHx8IGRlc2NyaXB0b3IuZW51bWVyYWJsZSAhPT0gdHJ1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIG9yaWdTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyIGhhc1N5bWJvbFNoYW0gPSByZXF1aXJlKCcuL3NoYW1zJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaGFzTmF0aXZlU3ltYm9scygpIHtcblx0aWYgKHR5cGVvZiBvcmlnU3ltYm9sICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBvcmlnU3ltYm9sKCdmb28nKSAhPT0gJ3N5bWJvbCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgU3ltYm9sKCdiYXInKSAhPT0gJ3N5bWJvbCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0cmV0dXJuIGhhc1N5bWJvbFNoYW0oKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qIGVzbGludCBuby1pbnZhbGlkLXRoaXM6IDEgKi9cblxudmFyIEVSUk9SX01FU1NBR0UgPSAnRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgY2FsbGVkIG9uIGluY29tcGF0aWJsZSAnO1xudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBmdW5jVHlwZSA9ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmluZCh0aGF0KSB7XG4gICAgdmFyIHRhcmdldCA9IHRoaXM7XG4gICAgaWYgKHR5cGVvZiB0YXJnZXQgIT09ICdmdW5jdGlvbicgfHwgdG9TdHIuY2FsbCh0YXJnZXQpICE9PSBmdW5jVHlwZSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEVSUk9SX01FU1NBR0UgKyB0YXJnZXQpO1xuICAgIH1cbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcblxuICAgIHZhciBib3VuZDtcbiAgICB2YXIgYmluZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIGJvdW5kKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChPYmplY3QocmVzdWx0KSA9PT0gcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5hcHBseShcbiAgICAgICAgICAgICAgICB0aGF0LFxuICAgICAgICAgICAgICAgIGFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIGJvdW5kTGVuZ3RoID0gTWF0aC5tYXgoMCwgdGFyZ2V0Lmxlbmd0aCAtIGFyZ3MubGVuZ3RoKTtcbiAgICB2YXIgYm91bmRBcmdzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib3VuZExlbmd0aDsgaSsrKSB7XG4gICAgICAgIGJvdW5kQXJncy5wdXNoKCckJyArIGkpO1xuICAgIH1cblxuICAgIGJvdW5kID0gRnVuY3Rpb24oJ2JpbmRlcicsICdyZXR1cm4gZnVuY3Rpb24gKCcgKyBib3VuZEFyZ3Muam9pbignLCcpICsgJyl7IHJldHVybiBiaW5kZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpOyB9JykoYmluZGVyKTtcblxuICAgIGlmICh0YXJnZXQucHJvdG90eXBlKSB7XG4gICAgICAgIHZhciBFbXB0eSA9IGZ1bmN0aW9uIEVtcHR5KCkge307XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IHRhcmdldC5wcm90b3R5cGU7XG4gICAgICAgIGJvdW5kLnByb3RvdHlwZSA9IG5ldyBFbXB0eSgpO1xuICAgICAgICBFbXB0eS5wcm90b3R5cGUgPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBib3VuZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCB8fCBpbXBsZW1lbnRhdGlvbjtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGJpbmQgPSByZXF1aXJlKCdmdW5jdGlvbi1iaW5kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdW5kZWZpbmVkO1xuXG52YXIgJFN5bnRheEVycm9yID0gU3ludGF4RXJyb3I7XG52YXIgJEZ1bmN0aW9uID0gRnVuY3Rpb247XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG52YXIgZ2V0RXZhbGxlZENvbnN0cnVjdG9yID0gZnVuY3Rpb24gKGV4cHJlc3Npb25TeW50YXgpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gJEZ1bmN0aW9uKCdcInVzZSBzdHJpY3RcIjsgcmV0dXJuICgnICsgZXhwcmVzc2lvblN5bnRheCArICcpLmNvbnN0cnVjdG9yOycpKCk7XG5cdH0gY2F0Y2ggKGUpIHt9XG59O1xuXG52YXIgJGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuaWYgKCRnT1BEKSB7XG5cdHRyeSB7XG5cdFx0JGdPUEQoe30sICcnKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdCRnT1BEID0gbnVsbDsgLy8gdGhpcyBpcyBJRSA4LCB3aGljaCBoYXMgYSBicm9rZW4gZ09QRFxuXHR9XG59XG5cbnZhciB0aHJvd1R5cGVFcnJvciA9IGZ1bmN0aW9uICgpIHtcblx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoKTtcbn07XG52YXIgVGhyb3dUeXBlRXJyb3IgPSAkZ09QRFxuXHQ/IChmdW5jdGlvbiAoKSB7XG5cdFx0dHJ5IHtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnMsIG5vLWNhbGxlciwgbm8tcmVzdHJpY3RlZC1wcm9wZXJ0aWVzXG5cdFx0XHRhcmd1bWVudHMuY2FsbGVlOyAvLyBJRSA4IGRvZXMgbm90IHRocm93IGhlcmVcblx0XHRcdHJldHVybiB0aHJvd1R5cGVFcnJvcjtcblx0XHR9IGNhdGNoIChjYWxsZWVUaHJvd3MpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdC8vIElFIDggdGhyb3dzIG9uIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYXJndW1lbnRzLCAnJylcblx0XHRcdFx0cmV0dXJuICRnT1BEKGFyZ3VtZW50cywgJ2NhbGxlZScpLmdldDtcblx0XHRcdH0gY2F0Y2ggKGdPUER0aHJvd3MpIHtcblx0XHRcdFx0cmV0dXJuIHRocm93VHlwZUVycm9yO1xuXHRcdFx0fVxuXHRcdH1cblx0fSgpKVxuXHQ6IHRocm93VHlwZUVycm9yO1xuXG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxudmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uICh4KSB7IHJldHVybiB4Ll9fcHJvdG9fXzsgfTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b1xuXG52YXIgbmVlZHNFdmFsID0ge307XG5cbnZhciBUeXBlZEFycmF5ID0gdHlwZW9mIFVpbnQ4QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8oVWludDhBcnJheSk7XG5cbnZhciBJTlRSSU5TSUNTID0ge1xuXHQnJUFnZ3JlZ2F0ZUVycm9yJSc6IHR5cGVvZiBBZ2dyZWdhdGVFcnJvciA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBZ2dyZWdhdGVFcnJvcixcblx0JyVBcnJheSUnOiBBcnJheSxcblx0JyVBcnJheUJ1ZmZlciUnOiB0eXBlb2YgQXJyYXlCdWZmZXIgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQXJyYXlCdWZmZXIsXG5cdCclQXJyYXlJdGVyYXRvclByb3RvdHlwZSUnOiBoYXNTeW1ib2xzID8gZ2V0UHJvdG8oW11bU3ltYm9sLml0ZXJhdG9yXSgpKSA6IHVuZGVmaW5lZCxcblx0JyVBc3luY0Zyb21TeW5jSXRlcmF0b3JQcm90b3R5cGUlJzogdW5kZWZpbmVkLFxuXHQnJUFzeW5jRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUFzeW5jR2VuZXJhdG9yJSc6IG5lZWRzRXZhbCxcblx0JyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJSc6IG5lZWRzRXZhbCxcblx0JyVBc3luY0l0ZXJhdG9yUHJvdG90eXBlJSc6IG5lZWRzRXZhbCxcblx0JyVBdG9taWNzJSc6IHR5cGVvZiBBdG9taWNzID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEF0b21pY3MsXG5cdCclQmlnSW50JSc6IHR5cGVvZiBCaWdJbnQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQmlnSW50LFxuXHQnJUJvb2xlYW4lJzogQm9vbGVhbixcblx0JyVEYXRhVmlldyUnOiB0eXBlb2YgRGF0YVZpZXcgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRGF0YVZpZXcsXG5cdCclRGF0ZSUnOiBEYXRlLFxuXHQnJWRlY29kZVVSSSUnOiBkZWNvZGVVUkksXG5cdCclZGVjb2RlVVJJQ29tcG9uZW50JSc6IGRlY29kZVVSSUNvbXBvbmVudCxcblx0JyVlbmNvZGVVUkklJzogZW5jb2RlVVJJLFxuXHQnJWVuY29kZVVSSUNvbXBvbmVudCUnOiBlbmNvZGVVUklDb21wb25lbnQsXG5cdCclRXJyb3IlJzogRXJyb3IsXG5cdCclZXZhbCUnOiBldmFsLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWV2YWxcblx0JyVFdmFsRXJyb3IlJzogRXZhbEVycm9yLFxuXHQnJUZsb2F0MzJBcnJheSUnOiB0eXBlb2YgRmxvYXQzMkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEZsb2F0MzJBcnJheSxcblx0JyVGbG9hdDY0QXJyYXklJzogdHlwZW9mIEZsb2F0NjRBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGbG9hdDY0QXJyYXksXG5cdCclRmluYWxpemF0aW9uUmVnaXN0cnklJzogdHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEZpbmFsaXphdGlvblJlZ2lzdHJ5LFxuXHQnJUZ1bmN0aW9uJSc6ICRGdW5jdGlvbixcblx0JyVHZW5lcmF0b3JGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclSW50OEFycmF5JSc6IHR5cGVvZiBJbnQ4QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogSW50OEFycmF5LFxuXHQnJUludDE2QXJyYXklJzogdHlwZW9mIEludDE2QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogSW50MTZBcnJheSxcblx0JyVJbnQzMkFycmF5JSc6IHR5cGVvZiBJbnQzMkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDMyQXJyYXksXG5cdCclaXNGaW5pdGUlJzogaXNGaW5pdGUsXG5cdCclaXNOYU4lJzogaXNOYU4sXG5cdCclSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKGdldFByb3RvKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkpIDogdW5kZWZpbmVkLFxuXHQnJUpTT04lJzogdHlwZW9mIEpTT04gPT09ICdvYmplY3QnID8gSlNPTiA6IHVuZGVmaW5lZCxcblx0JyVNYXAlJzogdHlwZW9mIE1hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBNYXAsXG5cdCclTWFwSXRlcmF0b3JQcm90b3R5cGUlJzogdHlwZW9mIE1hcCA9PT0gJ3VuZGVmaW5lZCcgfHwgIWhhc1N5bWJvbHMgPyB1bmRlZmluZWQgOiBnZXRQcm90byhuZXcgTWFwKClbU3ltYm9sLml0ZXJhdG9yXSgpKSxcblx0JyVNYXRoJSc6IE1hdGgsXG5cdCclTnVtYmVyJSc6IE51bWJlcixcblx0JyVPYmplY3QlJzogT2JqZWN0LFxuXHQnJXBhcnNlRmxvYXQlJzogcGFyc2VGbG9hdCxcblx0JyVwYXJzZUludCUnOiBwYXJzZUludCxcblx0JyVQcm9taXNlJSc6IHR5cGVvZiBQcm9taXNlID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFByb21pc2UsXG5cdCclUHJveHklJzogdHlwZW9mIFByb3h5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFByb3h5LFxuXHQnJVJhbmdlRXJyb3IlJzogUmFuZ2VFcnJvcixcblx0JyVSZWZlcmVuY2VFcnJvciUnOiBSZWZlcmVuY2VFcnJvcixcblx0JyVSZWZsZWN0JSc6IHR5cGVvZiBSZWZsZWN0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFJlZmxlY3QsXG5cdCclUmVnRXhwJSc6IFJlZ0V4cCxcblx0JyVTZXQlJzogdHlwZW9mIFNldCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBTZXQsXG5cdCclU2V0SXRlcmF0b3JQcm90b3R5cGUlJzogdHlwZW9mIFNldCA9PT0gJ3VuZGVmaW5lZCcgfHwgIWhhc1N5bWJvbHMgPyB1bmRlZmluZWQgOiBnZXRQcm90byhuZXcgU2V0KClbU3ltYm9sLml0ZXJhdG9yXSgpKSxcblx0JyVTaGFyZWRBcnJheUJ1ZmZlciUnOiB0eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXIgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogU2hhcmVkQXJyYXlCdWZmZXIsXG5cdCclU3RyaW5nJSc6IFN0cmluZyxcblx0JyVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUnOiBoYXNTeW1ib2xzID8gZ2V0UHJvdG8oJydbU3ltYm9sLml0ZXJhdG9yXSgpKSA6IHVuZGVmaW5lZCxcblx0JyVTeW1ib2wlJzogaGFzU3ltYm9scyA/IFN5bWJvbCA6IHVuZGVmaW5lZCxcblx0JyVTeW50YXhFcnJvciUnOiAkU3ludGF4RXJyb3IsXG5cdCclVGhyb3dUeXBlRXJyb3IlJzogVGhyb3dUeXBlRXJyb3IsXG5cdCclVHlwZWRBcnJheSUnOiBUeXBlZEFycmF5LFxuXHQnJVR5cGVFcnJvciUnOiAkVHlwZUVycm9yLFxuXHQnJVVpbnQ4QXJyYXklJzogdHlwZW9mIFVpbnQ4QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDhBcnJheSxcblx0JyVVaW50OENsYW1wZWRBcnJheSUnOiB0eXBlb2YgVWludDhDbGFtcGVkQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDhDbGFtcGVkQXJyYXksXG5cdCclVWludDE2QXJyYXklJzogdHlwZW9mIFVpbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQxNkFycmF5LFxuXHQnJVVpbnQzMkFycmF5JSc6IHR5cGVvZiBVaW50MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50MzJBcnJheSxcblx0JyVVUklFcnJvciUnOiBVUklFcnJvcixcblx0JyVXZWFrTWFwJSc6IHR5cGVvZiBXZWFrTWFwID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtNYXAsXG5cdCclV2Vha1JlZiUnOiB0eXBlb2YgV2Vha1JlZiA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrUmVmLFxuXHQnJVdlYWtTZXQlJzogdHlwZW9mIFdlYWtTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1NldFxufTtcblxudmFyIGRvRXZhbCA9IGZ1bmN0aW9uIGRvRXZhbChuYW1lKSB7XG5cdHZhciB2YWx1ZTtcblx0aWYgKG5hbWUgPT09ICclQXN5bmNGdW5jdGlvbiUnKSB7XG5cdFx0dmFsdWUgPSBnZXRFdmFsbGVkQ29uc3RydWN0b3IoJ2FzeW5jIGZ1bmN0aW9uICgpIHt9Jyk7XG5cdH0gZWxzZSBpZiAobmFtZSA9PT0gJyVHZW5lcmF0b3JGdW5jdGlvbiUnKSB7XG5cdFx0dmFsdWUgPSBnZXRFdmFsbGVkQ29uc3RydWN0b3IoJ2Z1bmN0aW9uKiAoKSB7fScpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnKSB7XG5cdFx0dmFsdWUgPSBnZXRFdmFsbGVkQ29uc3RydWN0b3IoJ2FzeW5jIGZ1bmN0aW9uKiAoKSB7fScpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclQXN5bmNHZW5lcmF0b3IlJykge1xuXHRcdHZhciBmbiA9IGRvRXZhbCgnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJyk7XG5cdFx0aWYgKGZuKSB7XG5cdFx0XHR2YWx1ZSA9IGZuLnByb3RvdHlwZTtcblx0XHR9XG5cdH0gZWxzZSBpZiAobmFtZSA9PT0gJyVBc3luY0l0ZXJhdG9yUHJvdG90eXBlJScpIHtcblx0XHR2YXIgZ2VuID0gZG9FdmFsKCclQXN5bmNHZW5lcmF0b3IlJyk7XG5cdFx0aWYgKGdlbikge1xuXHRcdFx0dmFsdWUgPSBnZXRQcm90byhnZW4ucHJvdG90eXBlKTtcblx0XHR9XG5cdH1cblxuXHRJTlRSSU5TSUNTW25hbWVdID0gdmFsdWU7XG5cblx0cmV0dXJuIHZhbHVlO1xufTtcblxudmFyIExFR0FDWV9BTElBU0VTID0ge1xuXHQnJUFycmF5QnVmZmVyUHJvdG90eXBlJSc6IFsnQXJyYXlCdWZmZXInLCAncHJvdG90eXBlJ10sXG5cdCclQXJyYXlQcm90b3R5cGUlJzogWydBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVBcnJheVByb3RvX2VudHJpZXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAnZW50cmllcyddLFxuXHQnJUFycmF5UHJvdG9fZm9yRWFjaCUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdmb3JFYWNoJ10sXG5cdCclQXJyYXlQcm90b19rZXlzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2tleXMnXSxcblx0JyVBcnJheVByb3RvX3ZhbHVlcyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICd2YWx1ZXMnXSxcblx0JyVBc3luY0Z1bmN0aW9uUHJvdG90eXBlJSc6IFsnQXN5bmNGdW5jdGlvbicsICdwcm90b3R5cGUnXSxcblx0JyVBc3luY0dlbmVyYXRvciUnOiBbJ0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclQXN5bmNHZW5lcmF0b3JQcm90b3R5cGUlJzogWydBc3luY0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZScsICdwcm90b3R5cGUnXSxcblx0JyVCb29sZWFuUHJvdG90eXBlJSc6IFsnQm9vbGVhbicsICdwcm90b3R5cGUnXSxcblx0JyVEYXRhVmlld1Byb3RvdHlwZSUnOiBbJ0RhdGFWaWV3JywgJ3Byb3RvdHlwZSddLFxuXHQnJURhdGVQcm90b3R5cGUlJzogWydEYXRlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUVycm9yUHJvdG90eXBlJSc6IFsnRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclRXZhbEVycm9yUHJvdG90eXBlJSc6IFsnRXZhbEVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJUZsb2F0MzJBcnJheVByb3RvdHlwZSUnOiBbJ0Zsb2F0MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVGbG9hdDY0QXJyYXlQcm90b3R5cGUlJzogWydGbG9hdDY0QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclRnVuY3Rpb25Qcm90b3R5cGUlJzogWydGdW5jdGlvbicsICdwcm90b3R5cGUnXSxcblx0JyVHZW5lcmF0b3IlJzogWydHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnXSxcblx0JyVHZW5lcmF0b3JQcm90b3R5cGUlJzogWydHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnLCAncHJvdG90eXBlJ10sXG5cdCclSW50OEFycmF5UHJvdG90eXBlJSc6IFsnSW50OEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDE2QXJyYXlQcm90b3R5cGUlJzogWydJbnQxNkFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDMyQXJyYXlQcm90b3R5cGUlJzogWydJbnQzMkFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUpTT05QYXJzZSUnOiBbJ0pTT04nLCAncGFyc2UnXSxcblx0JyVKU09OU3RyaW5naWZ5JSc6IFsnSlNPTicsICdzdHJpbmdpZnknXSxcblx0JyVNYXBQcm90b3R5cGUlJzogWydNYXAnLCAncHJvdG90eXBlJ10sXG5cdCclTnVtYmVyUHJvdG90eXBlJSc6IFsnTnVtYmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJU9iamVjdFByb3RvdHlwZSUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnXSxcblx0JyVPYmpQcm90b190b1N0cmluZyUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnLCAndG9TdHJpbmcnXSxcblx0JyVPYmpQcm90b192YWx1ZU9mJSc6IFsnT2JqZWN0JywgJ3Byb3RvdHlwZScsICd2YWx1ZU9mJ10sXG5cdCclUHJvbWlzZVByb3RvdHlwZSUnOiBbJ1Byb21pc2UnLCAncHJvdG90eXBlJ10sXG5cdCclUHJvbWlzZVByb3RvX3RoZW4lJzogWydQcm9taXNlJywgJ3Byb3RvdHlwZScsICd0aGVuJ10sXG5cdCclUHJvbWlzZV9hbGwlJzogWydQcm9taXNlJywgJ2FsbCddLFxuXHQnJVByb21pc2VfcmVqZWN0JSc6IFsnUHJvbWlzZScsICdyZWplY3QnXSxcblx0JyVQcm9taXNlX3Jlc29sdmUlJzogWydQcm9taXNlJywgJ3Jlc29sdmUnXSxcblx0JyVSYW5nZUVycm9yUHJvdG90eXBlJSc6IFsnUmFuZ2VFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVSZWZlcmVuY2VFcnJvclByb3RvdHlwZSUnOiBbJ1JlZmVyZW5jZUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVJlZ0V4cFByb3RvdHlwZSUnOiBbJ1JlZ0V4cCcsICdwcm90b3R5cGUnXSxcblx0JyVTZXRQcm90b3R5cGUlJzogWydTZXQnLCAncHJvdG90eXBlJ10sXG5cdCclU2hhcmVkQXJyYXlCdWZmZXJQcm90b3R5cGUlJzogWydTaGFyZWRBcnJheUJ1ZmZlcicsICdwcm90b3R5cGUnXSxcblx0JyVTdHJpbmdQcm90b3R5cGUlJzogWydTdHJpbmcnLCAncHJvdG90eXBlJ10sXG5cdCclU3ltYm9sUHJvdG90eXBlJSc6IFsnU3ltYm9sJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN5bnRheEVycm9yUHJvdG90eXBlJSc6IFsnU3ludGF4RXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclVHlwZWRBcnJheVByb3RvdHlwZSUnOiBbJ1R5cGVkQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVHlwZUVycm9yUHJvdG90eXBlJSc6IFsnVHlwZUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQ4QXJyYXlQcm90b3R5cGUlJzogWydVaW50OEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQ4Q2xhbXBlZEFycmF5UHJvdG90eXBlJSc6IFsnVWludDhDbGFtcGVkQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDE2QXJyYXlQcm90b3R5cGUlJzogWydVaW50MTZBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50MzJBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQzMkFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVSSUVycm9yUHJvdG90eXBlJSc6IFsnVVJJRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclV2Vha01hcFByb3RvdHlwZSUnOiBbJ1dlYWtNYXAnLCAncHJvdG90eXBlJ10sXG5cdCclV2Vha1NldFByb3RvdHlwZSUnOiBbJ1dlYWtTZXQnLCAncHJvdG90eXBlJ11cbn07XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJ2hhcycpO1xudmFyICRjb25jYXQgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgQXJyYXkucHJvdG90eXBlLmNvbmNhdCk7XG52YXIgJHNwbGljZUFwcGx5ID0gYmluZC5jYWxsKEZ1bmN0aW9uLmFwcGx5LCBBcnJheS5wcm90b3R5cGUuc3BsaWNlKTtcbnZhciAkcmVwbGFjZSA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpO1xudmFyICRzdHJTbGljZSA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBTdHJpbmcucHJvdG90eXBlLnNsaWNlKTtcblxuLyogYWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9sb2Rhc2gvbG9kYXNoL2Jsb2IvNC4xNy4xNS9kaXN0L2xvZGFzaC5qcyNMNjczNS1MNjc0NCAqL1xudmFyIHJlUHJvcE5hbWUgPSAvW14lLltcXF1dK3xcXFsoPzooLT9cXGQrKD86XFwuXFxkKyk/KXwoW1wiJ10pKCg/Oig/IVxcMilbXlxcXFxdfFxcXFwuKSo/KVxcMilcXF18KD89KD86XFwufFxcW1xcXSkoPzpcXC58XFxbXFxdfCUkKSkvZztcbnZhciByZUVzY2FwZUNoYXIgPSAvXFxcXChcXFxcKT8vZzsgLyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgc3RyaW5nVG9QYXRoID0gZnVuY3Rpb24gc3RyaW5nVG9QYXRoKHN0cmluZykge1xuXHR2YXIgZmlyc3QgPSAkc3RyU2xpY2Uoc3RyaW5nLCAwLCAxKTtcblx0dmFyIGxhc3QgPSAkc3RyU2xpY2Uoc3RyaW5nLCAtMSk7XG5cdGlmIChmaXJzdCA9PT0gJyUnICYmIGxhc3QgIT09ICclJykge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludmFsaWQgaW50cmluc2ljIHN5bnRheCwgZXhwZWN0ZWQgY2xvc2luZyBgJWAnKTtcblx0fSBlbHNlIGlmIChsYXN0ID09PSAnJScgJiYgZmlyc3QgIT09ICclJykge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludmFsaWQgaW50cmluc2ljIHN5bnRheCwgZXhwZWN0ZWQgb3BlbmluZyBgJWAnKTtcblx0fVxuXHR2YXIgcmVzdWx0ID0gW107XG5cdCRyZXBsYWNlKHN0cmluZywgcmVQcm9wTmFtZSwgZnVuY3Rpb24gKG1hdGNoLCBudW1iZXIsIHF1b3RlLCBzdWJTdHJpbmcpIHtcblx0XHRyZXN1bHRbcmVzdWx0Lmxlbmd0aF0gPSBxdW90ZSA/ICRyZXBsYWNlKHN1YlN0cmluZywgcmVFc2NhcGVDaGFyLCAnJDEnKSA6IG51bWJlciB8fCBtYXRjaDtcblx0fSk7XG5cdHJldHVybiByZXN1bHQ7XG59O1xuLyogZW5kIGFkYXB0YXRpb24gKi9cblxudmFyIGdldEJhc2VJbnRyaW5zaWMgPSBmdW5jdGlvbiBnZXRCYXNlSW50cmluc2ljKG5hbWUsIGFsbG93TWlzc2luZykge1xuXHR2YXIgaW50cmluc2ljTmFtZSA9IG5hbWU7XG5cdHZhciBhbGlhcztcblx0aWYgKGhhc093bihMRUdBQ1lfQUxJQVNFUywgaW50cmluc2ljTmFtZSkpIHtcblx0XHRhbGlhcyA9IExFR0FDWV9BTElBU0VTW2ludHJpbnNpY05hbWVdO1xuXHRcdGludHJpbnNpY05hbWUgPSAnJScgKyBhbGlhc1swXSArICclJztcblx0fVxuXG5cdGlmIChoYXNPd24oSU5UUklOU0lDUywgaW50cmluc2ljTmFtZSkpIHtcblx0XHR2YXIgdmFsdWUgPSBJTlRSSU5TSUNTW2ludHJpbnNpY05hbWVdO1xuXHRcdGlmICh2YWx1ZSA9PT0gbmVlZHNFdmFsKSB7XG5cdFx0XHR2YWx1ZSA9IGRvRXZhbChpbnRyaW5zaWNOYW1lKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcgJiYgIWFsbG93TWlzc2luZykge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZXhpc3RzLCBidXQgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGZpbGUgYW4gaXNzdWUhJyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGFsaWFzOiBhbGlhcyxcblx0XHRcdG5hbWU6IGludHJpbnNpY05hbWUsXG5cdFx0XHR2YWx1ZTogdmFsdWVcblx0XHR9O1xuXHR9XG5cblx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcignaW50cmluc2ljICcgKyBuYW1lICsgJyBkb2VzIG5vdCBleGlzdCEnKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gR2V0SW50cmluc2ljKG5hbWUsIGFsbG93TWlzc2luZykge1xuXHRpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnIHx8IG5hbWUubGVuZ3RoID09PSAwKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2ludHJpbnNpYyBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nJyk7XG5cdH1cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIHR5cGVvZiBhbGxvd01pc3NpbmcgIT09ICdib29sZWFuJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdcImFsbG93TWlzc2luZ1wiIGFyZ3VtZW50IG11c3QgYmUgYSBib29sZWFuJyk7XG5cdH1cblxuXHR2YXIgcGFydHMgPSBzdHJpbmdUb1BhdGgobmFtZSk7XG5cdHZhciBpbnRyaW5zaWNCYXNlTmFtZSA9IHBhcnRzLmxlbmd0aCA+IDAgPyBwYXJ0c1swXSA6ICcnO1xuXG5cdHZhciBpbnRyaW5zaWMgPSBnZXRCYXNlSW50cmluc2ljKCclJyArIGludHJpbnNpY0Jhc2VOYW1lICsgJyUnLCBhbGxvd01pc3NpbmcpO1xuXHR2YXIgaW50cmluc2ljUmVhbE5hbWUgPSBpbnRyaW5zaWMubmFtZTtcblx0dmFyIHZhbHVlID0gaW50cmluc2ljLnZhbHVlO1xuXHR2YXIgc2tpcEZ1cnRoZXJDYWNoaW5nID0gZmFsc2U7XG5cblx0dmFyIGFsaWFzID0gaW50cmluc2ljLmFsaWFzO1xuXHRpZiAoYWxpYXMpIHtcblx0XHRpbnRyaW5zaWNCYXNlTmFtZSA9IGFsaWFzWzBdO1xuXHRcdCRzcGxpY2VBcHBseShwYXJ0cywgJGNvbmNhdChbMCwgMV0sIGFsaWFzKSk7XG5cdH1cblxuXHRmb3IgKHZhciBpID0gMSwgaXNPd24gPSB0cnVlOyBpIDwgcGFydHMubGVuZ3RoOyBpICs9IDEpIHtcblx0XHR2YXIgcGFydCA9IHBhcnRzW2ldO1xuXHRcdHZhciBmaXJzdCA9ICRzdHJTbGljZShwYXJ0LCAwLCAxKTtcblx0XHR2YXIgbGFzdCA9ICRzdHJTbGljZShwYXJ0LCAtMSk7XG5cdFx0aWYgKFxuXHRcdFx0KFxuXHRcdFx0XHQoZmlyc3QgPT09ICdcIicgfHwgZmlyc3QgPT09IFwiJ1wiIHx8IGZpcnN0ID09PSAnYCcpXG5cdFx0XHRcdHx8IChsYXN0ID09PSAnXCInIHx8IGxhc3QgPT09IFwiJ1wiIHx8IGxhc3QgPT09ICdgJylcblx0XHRcdClcblx0XHRcdCYmIGZpcnN0ICE9PSBsYXN0XG5cdFx0KSB7XG5cdFx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdwcm9wZXJ0eSBuYW1lcyB3aXRoIHF1b3RlcyBtdXN0IGhhdmUgbWF0Y2hpbmcgcXVvdGVzJyk7XG5cdFx0fVxuXHRcdGlmIChwYXJ0ID09PSAnY29uc3RydWN0b3InIHx8ICFpc093bikge1xuXHRcdFx0c2tpcEZ1cnRoZXJDYWNoaW5nID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpbnRyaW5zaWNCYXNlTmFtZSArPSAnLicgKyBwYXJ0O1xuXHRcdGludHJpbnNpY1JlYWxOYW1lID0gJyUnICsgaW50cmluc2ljQmFzZU5hbWUgKyAnJSc7XG5cblx0XHRpZiAoaGFzT3duKElOVFJJTlNJQ1MsIGludHJpbnNpY1JlYWxOYW1lKSkge1xuXHRcdFx0dmFsdWUgPSBJTlRSSU5TSUNTW2ludHJpbnNpY1JlYWxOYW1lXTtcblx0XHR9IGVsc2UgaWYgKHZhbHVlICE9IG51bGwpIHtcblx0XHRcdGlmICghKHBhcnQgaW4gdmFsdWUpKSB7XG5cdFx0XHRcdGlmICghYWxsb3dNaXNzaW5nKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2Jhc2UgaW50cmluc2ljIGZvciAnICsgbmFtZSArICcgZXhpc3RzLCBidXQgdGhlIHByb3BlcnR5IGlzIG5vdCBhdmFpbGFibGUuJyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHZvaWQgdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCRnT1BEICYmIChpICsgMSkgPj0gcGFydHMubGVuZ3RoKSB7XG5cdFx0XHRcdHZhciBkZXNjID0gJGdPUEQodmFsdWUsIHBhcnQpO1xuXHRcdFx0XHRpc093biA9ICEhZGVzYztcblxuXHRcdFx0XHQvLyBCeSBjb252ZW50aW9uLCB3aGVuIGEgZGF0YSBwcm9wZXJ0eSBpcyBjb252ZXJ0ZWQgdG8gYW4gYWNjZXNzb3Jcblx0XHRcdFx0Ly8gcHJvcGVydHkgdG8gZW11bGF0ZSBhIGRhdGEgcHJvcGVydHkgdGhhdCBkb2VzIG5vdCBzdWZmZXIgZnJvbVxuXHRcdFx0XHQvLyB0aGUgb3ZlcnJpZGUgbWlzdGFrZSwgdGhhdCBhY2Nlc3NvcidzIGdldHRlciBpcyBtYXJrZWQgd2l0aFxuXHRcdFx0XHQvLyBhbiBgb3JpZ2luYWxWYWx1ZWAgcHJvcGVydHkuIEhlcmUsIHdoZW4gd2UgZGV0ZWN0IHRoaXMsIHdlXG5cdFx0XHRcdC8vIHVwaG9sZCB0aGUgaWxsdXNpb24gYnkgcHJldGVuZGluZyB0byBzZWUgdGhhdCBvcmlnaW5hbCBkYXRhXG5cdFx0XHRcdC8vIHByb3BlcnR5LCBpLmUuLCByZXR1cm5pbmcgdGhlIHZhbHVlIHJhdGhlciB0aGFuIHRoZSBnZXR0ZXJcblx0XHRcdFx0Ly8gaXRzZWxmLlxuXHRcdFx0XHRpZiAoaXNPd24gJiYgJ2dldCcgaW4gZGVzYyAmJiAhKCdvcmlnaW5hbFZhbHVlJyBpbiBkZXNjLmdldCkpIHtcblx0XHRcdFx0XHR2YWx1ZSA9IGRlc2MuZ2V0O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHZhbHVlID0gdmFsdWVbcGFydF07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlzT3duID0gaGFzT3duKHZhbHVlLCBwYXJ0KTtcblx0XHRcdFx0dmFsdWUgPSB2YWx1ZVtwYXJ0XTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGlzT3duICYmICFza2lwRnVydGhlckNhY2hpbmcpIHtcblx0XHRcdFx0SU5UUklOU0lDU1tpbnRyaW5zaWNSZWFsTmFtZV0gPSB2YWx1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHZhbHVlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyogZ2xvYmFsc1xuXHRBZ2dyZWdhdGVFcnJvcixcblx0QXRvbWljcyxcblx0RmluYWxpemF0aW9uUmVnaXN0cnksXG5cdFNoYXJlZEFycmF5QnVmZmVyLFxuXHRXZWFrUmVmLFxuKi9cblxudmFyIHVuZGVmaW5lZDtcblxudmFyICRTeW50YXhFcnJvciA9IFN5bnRheEVycm9yO1xudmFyICRGdW5jdGlvbiA9IEZ1bmN0aW9uO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxudmFyIGdldEV2YWxsZWRDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChleHByZXNzaW9uU3ludGF4KSB7XG5cdHRyeSB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG5cdFx0cmV0dXJuIEZ1bmN0aW9uKCdcInVzZSBzdHJpY3RcIjsgcmV0dXJuICgnICsgZXhwcmVzc2lvblN5bnRheCArICcpLmNvbnN0cnVjdG9yOycpKCk7XG5cdH0gY2F0Y2ggKGUpIHt9XG59O1xuXG52YXIgJGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuaWYgKCRnT1BEKSB7XG5cdHRyeSB7XG5cdFx0JGdPUEQoe30sICcnKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdCRnT1BEID0gbnVsbDsgLy8gdGhpcyBpcyBJRSA4LCB3aGljaCBoYXMgYSBicm9rZW4gZ09QRFxuXHR9XG59XG5cbnZhciB0aHJvd1R5cGVFcnJvciA9IGZ1bmN0aW9uICgpIHtcblx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoKTtcbn07XG52YXIgVGhyb3dUeXBlRXJyb3IgPSAkZ09QRFxuXHQ/IChmdW5jdGlvbiAoKSB7XG5cdFx0dHJ5IHtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnMsIG5vLWNhbGxlciwgbm8tcmVzdHJpY3RlZC1wcm9wZXJ0aWVzXG5cdFx0XHRhcmd1bWVudHMuY2FsbGVlOyAvLyBJRSA4IGRvZXMgbm90IHRocm93IGhlcmVcblx0XHRcdHJldHVybiB0aHJvd1R5cGVFcnJvcjtcblx0XHR9IGNhdGNoIChjYWxsZWVUaHJvd3MpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdC8vIElFIDggdGhyb3dzIG9uIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYXJndW1lbnRzLCAnJylcblx0XHRcdFx0cmV0dXJuICRnT1BEKGFyZ3VtZW50cywgJ2NhbGxlZScpLmdldDtcblx0XHRcdH0gY2F0Y2ggKGdPUER0aHJvd3MpIHtcblx0XHRcdFx0cmV0dXJuIHRocm93VHlwZUVycm9yO1xuXHRcdFx0fVxuXHRcdH1cblx0fSgpKVxuXHQ6IHRocm93VHlwZUVycm9yO1xuXG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxudmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uICh4KSB7IHJldHVybiB4Ll9fcHJvdG9fXzsgfTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b1xuXG52YXIgYXN5bmNHZW5GdW5jdGlvbiA9IGdldEV2YWxsZWRDb25zdHJ1Y3RvcignYXN5bmMgZnVuY3Rpb24qICgpIHt9Jyk7XG52YXIgYXN5bmNHZW5GdW5jdGlvblByb3RvdHlwZSA9IGFzeW5jR2VuRnVuY3Rpb24gPyBhc3luY0dlbkZ1bmN0aW9uLnByb3RvdHlwZSA6IHVuZGVmaW5lZDtcbnZhciBhc3luY0dlblByb3RvdHlwZSA9IGFzeW5jR2VuRnVuY3Rpb25Qcm90b3R5cGUgPyBhc3luY0dlbkZ1bmN0aW9uUHJvdG90eXBlLnByb3RvdHlwZSA6IHVuZGVmaW5lZDtcblxudmFyIFR5cGVkQXJyYXkgPSB0eXBlb2YgVWludDhBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBnZXRQcm90byhVaW50OEFycmF5KTtcblxudmFyIElOVFJJTlNJQ1MgPSB7XG5cdCclQWdncmVnYXRlRXJyb3IlJzogdHlwZW9mIEFnZ3JlZ2F0ZUVycm9yID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEFnZ3JlZ2F0ZUVycm9yLFxuXHQnJUFycmF5JSc6IEFycmF5LFxuXHQnJUFycmF5QnVmZmVyJSc6IHR5cGVvZiBBcnJheUJ1ZmZlciA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBcnJheUJ1ZmZlcixcblx0JyVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpIDogdW5kZWZpbmVkLFxuXHQnJUFzeW5jRnJvbVN5bmNJdGVyYXRvclByb3RvdHlwZSUnOiB1bmRlZmluZWQsXG5cdCclQXN5bmNGdW5jdGlvbiUnOiBnZXRFdmFsbGVkQ29uc3RydWN0b3IoJ2FzeW5jIGZ1bmN0aW9uICgpIHt9JyksXG5cdCclQXN5bmNHZW5lcmF0b3IlJzogYXN5bmNHZW5GdW5jdGlvblByb3RvdHlwZSxcblx0JyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJSc6IGFzeW5jR2VuRnVuY3Rpb24sXG5cdCclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnOiBhc3luY0dlblByb3RvdHlwZSA/IGdldFByb3RvKGFzeW5jR2VuUHJvdG90eXBlKSA6IHVuZGVmaW5lZCxcblx0JyVBdG9taWNzJSc6IHR5cGVvZiBBdG9taWNzID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEF0b21pY3MsXG5cdCclQmlnSW50JSc6IHR5cGVvZiBCaWdJbnQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQmlnSW50LFxuXHQnJUJvb2xlYW4lJzogQm9vbGVhbixcblx0JyVEYXRhVmlldyUnOiB0eXBlb2YgRGF0YVZpZXcgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRGF0YVZpZXcsXG5cdCclRGF0ZSUnOiBEYXRlLFxuXHQnJWRlY29kZVVSSSUnOiBkZWNvZGVVUkksXG5cdCclZGVjb2RlVVJJQ29tcG9uZW50JSc6IGRlY29kZVVSSUNvbXBvbmVudCxcblx0JyVlbmNvZGVVUkklJzogZW5jb2RlVVJJLFxuXHQnJWVuY29kZVVSSUNvbXBvbmVudCUnOiBlbmNvZGVVUklDb21wb25lbnQsXG5cdCclRXJyb3IlJzogRXJyb3IsXG5cdCclZXZhbCUnOiBldmFsLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWV2YWxcblx0JyVFdmFsRXJyb3IlJzogRXZhbEVycm9yLFxuXHQnJUZsb2F0MzJBcnJheSUnOiB0eXBlb2YgRmxvYXQzMkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEZsb2F0MzJBcnJheSxcblx0JyVGbG9hdDY0QXJyYXklJzogdHlwZW9mIEZsb2F0NjRBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGbG9hdDY0QXJyYXksXG5cdCclRmluYWxpemF0aW9uUmVnaXN0cnklJzogdHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEZpbmFsaXphdGlvblJlZ2lzdHJ5LFxuXHQnJUZ1bmN0aW9uJSc6ICRGdW5jdGlvbixcblx0JyVHZW5lcmF0b3JGdW5jdGlvbiUnOiBnZXRFdmFsbGVkQ29uc3RydWN0b3IoJ2Z1bmN0aW9uKiAoKSB7fScpLFxuXHQnJUludDhBcnJheSUnOiB0eXBlb2YgSW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDhBcnJheSxcblx0JyVJbnQxNkFycmF5JSc6IHR5cGVvZiBJbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDE2QXJyYXksXG5cdCclSW50MzJBcnJheSUnOiB0eXBlb2YgSW50MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBJbnQzMkFycmF5LFxuXHQnJWlzRmluaXRlJSc6IGlzRmluaXRlLFxuXHQnJWlzTmFOJSc6IGlzTmFOLFxuXHQnJUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBnZXRQcm90byhnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKSA6IHVuZGVmaW5lZCxcblx0JyVKU09OJSc6IHR5cGVvZiBKU09OID09PSAnb2JqZWN0JyA/IEpTT04gOiB1bmRlZmluZWQsXG5cdCclTWFwJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogTWFwLFxuXHQnJU1hcEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IE1hcCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclTWF0aCUnOiBNYXRoLFxuXHQnJU51bWJlciUnOiBOdW1iZXIsXG5cdCclT2JqZWN0JSc6IE9iamVjdCxcblx0JyVwYXJzZUZsb2F0JSc6IHBhcnNlRmxvYXQsXG5cdCclcGFyc2VJbnQlJzogcGFyc2VJbnQsXG5cdCclUHJvbWlzZSUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLFxuXHQnJVByb3h5JSc6IHR5cGVvZiBQcm94eSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm94eSxcblx0JyVSYW5nZUVycm9yJSc6IFJhbmdlRXJyb3IsXG5cdCclUmVmZXJlbmNlRXJyb3IlJzogUmVmZXJlbmNlRXJyb3IsXG5cdCclUmVmbGVjdCUnOiB0eXBlb2YgUmVmbGVjdCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBSZWZsZWN0LFxuXHQnJVJlZ0V4cCUnOiBSZWdFeHAsXG5cdCclU2V0JSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogU2V0LFxuXHQnJVNldEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IFNldCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclU2hhcmVkQXJyYXlCdWZmZXIlJzogdHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFNoYXJlZEFycmF5QnVmZmVyLFxuXHQnJVN0cmluZyUnOiBTdHJpbmcsXG5cdCclU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKCcnW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclU3ltYm9sJSc6IGhhc1N5bWJvbHMgPyBTeW1ib2wgOiB1bmRlZmluZWQsXG5cdCclU3ludGF4RXJyb3IlJzogJFN5bnRheEVycm9yLFxuXHQnJVRocm93VHlwZUVycm9yJSc6IFRocm93VHlwZUVycm9yLFxuXHQnJVR5cGVkQXJyYXklJzogVHlwZWRBcnJheSxcblx0JyVUeXBlRXJyb3IlJzogJFR5cGVFcnJvcixcblx0JyVVaW50OEFycmF5JSc6IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4QXJyYXksXG5cdCclVWludDhDbGFtcGVkQXJyYXklJzogdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4Q2xhbXBlZEFycmF5LFxuXHQnJVVpbnQxNkFycmF5JSc6IHR5cGVvZiBVaW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50MTZBcnJheSxcblx0JyVVaW50MzJBcnJheSUnOiB0eXBlb2YgVWludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDMyQXJyYXksXG5cdCclVVJJRXJyb3IlJzogVVJJRXJyb3IsXG5cdCclV2Vha01hcCUnOiB0eXBlb2YgV2Vha01hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrTWFwLFxuXHQnJVdlYWtSZWYlJzogdHlwZW9mIFdlYWtSZWYgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1JlZixcblx0JyVXZWFrU2V0JSc6IHR5cGVvZiBXZWFrU2V0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtTZXRcbn07XG5cbnZhciBMRUdBQ1lfQUxJQVNFUyA9IHtcblx0JyVBcnJheUJ1ZmZlclByb3RvdHlwZSUnOiBbJ0FycmF5QnVmZmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFycmF5UHJvdG90eXBlJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclQXJyYXlQcm90b19lbnRyaWVzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2VudHJpZXMnXSxcblx0JyVBcnJheVByb3RvX2ZvckVhY2glJzogWydBcnJheScsICdwcm90b3R5cGUnLCAnZm9yRWFjaCddLFxuXHQnJUFycmF5UHJvdG9fa2V5cyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdrZXlzJ10sXG5cdCclQXJyYXlQcm90b192YWx1ZXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAndmFsdWVzJ10sXG5cdCclQXN5bmNGdW5jdGlvblByb3RvdHlwZSUnOiBbJ0FzeW5jRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclQXN5bmNHZW5lcmF0b3IlJzogWydBc3luY0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFzeW5jR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnLCAncHJvdG90eXBlJ10sXG5cdCclQm9vbGVhblByb3RvdHlwZSUnOiBbJ0Jvb2xlYW4nLCAncHJvdG90eXBlJ10sXG5cdCclRGF0YVZpZXdQcm90b3R5cGUlJzogWydEYXRhVmlldycsICdwcm90b3R5cGUnXSxcblx0JyVEYXRlUHJvdG90eXBlJSc6IFsnRGF0ZScsICdwcm90b3R5cGUnXSxcblx0JyVFcnJvclByb3RvdHlwZSUnOiBbJ0Vycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJUV2YWxFcnJvclByb3RvdHlwZSUnOiBbJ0V2YWxFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVGbG9hdDMyQXJyYXlQcm90b3R5cGUlJzogWydGbG9hdDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclRmxvYXQ2NEFycmF5UHJvdG90eXBlJSc6IFsnRmxvYXQ2NEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUZ1bmN0aW9uUHJvdG90eXBlJSc6IFsnRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDhBcnJheVByb3RvdHlwZSUnOiBbJ0ludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnSW50MTZBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQzMkFycmF5UHJvdG90eXBlJSc6IFsnSW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVKU09OUGFyc2UlJzogWydKU09OJywgJ3BhcnNlJ10sXG5cdCclSlNPTlN0cmluZ2lmeSUnOiBbJ0pTT04nLCAnc3RyaW5naWZ5J10sXG5cdCclTWFwUHJvdG90eXBlJSc6IFsnTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJU51bWJlclByb3RvdHlwZSUnOiBbJ051bWJlcicsICdwcm90b3R5cGUnXSxcblx0JyVPYmplY3RQcm90b3R5cGUlJzogWydPYmplY3QnLCAncHJvdG90eXBlJ10sXG5cdCclT2JqUHJvdG9fdG9TdHJpbmclJzogWydPYmplY3QnLCAncHJvdG90eXBlJywgJ3RvU3RyaW5nJ10sXG5cdCclT2JqUHJvdG9fdmFsdWVPZiUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnLCAndmFsdWVPZiddLFxuXHQnJVByb21pc2VQcm90b3R5cGUlJzogWydQcm9taXNlJywgJ3Byb3RvdHlwZSddLFxuXHQnJVByb21pc2VQcm90b190aGVuJSc6IFsnUHJvbWlzZScsICdwcm90b3R5cGUnLCAndGhlbiddLFxuXHQnJVByb21pc2VfYWxsJSc6IFsnUHJvbWlzZScsICdhbGwnXSxcblx0JyVQcm9taXNlX3JlamVjdCUnOiBbJ1Byb21pc2UnLCAncmVqZWN0J10sXG5cdCclUHJvbWlzZV9yZXNvbHZlJSc6IFsnUHJvbWlzZScsICdyZXNvbHZlJ10sXG5cdCclUmFuZ2VFcnJvclByb3RvdHlwZSUnOiBbJ1JhbmdlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUlJzogWydSZWZlcmVuY2VFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVSZWdFeHBQcm90b3R5cGUlJzogWydSZWdFeHAnLCAncHJvdG90eXBlJ10sXG5cdCclU2V0UHJvdG90eXBlJSc6IFsnU2V0JywgJ3Byb3RvdHlwZSddLFxuXHQnJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSc6IFsnU2hhcmVkQXJyYXlCdWZmZXInLCAncHJvdG90eXBlJ10sXG5cdCclU3RyaW5nUHJvdG90eXBlJSc6IFsnU3RyaW5nJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN5bWJvbFByb3RvdHlwZSUnOiBbJ1N5bWJvbCcsICdwcm90b3R5cGUnXSxcblx0JyVTeW50YXhFcnJvclByb3RvdHlwZSUnOiBbJ1N5bnRheEVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVkQXJyYXlQcm90b3R5cGUlJzogWydUeXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVFcnJvclByb3RvdHlwZSUnOiBbJ1R5cGVFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OEFycmF5UHJvdG90eXBlJSc6IFsnVWludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQ4Q2xhbXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnVWludDE2QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDMyQXJyYXlQcm90b3R5cGUlJzogWydVaW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVUklFcnJvclByb3RvdHlwZSUnOiBbJ1VSSUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtNYXBQcm90b3R5cGUlJzogWydXZWFrTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtTZXRQcm90b3R5cGUlJzogWydXZWFrU2V0JywgJ3Byb3RvdHlwZSddXG59O1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkY29uY2F0ID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIEFycmF5LnByb3RvdHlwZS5jb25jYXQpO1xudmFyICRzcGxpY2VBcHBseSA9IGJpbmQuY2FsbChGdW5jdGlvbi5hcHBseSwgQXJyYXkucHJvdG90eXBlLnNwbGljZSk7XG52YXIgJHJlcGxhY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcblxuLyogYWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9sb2Rhc2gvbG9kYXNoL2Jsb2IvNC4xNy4xNS9kaXN0L2xvZGFzaC5qcyNMNjczNS1MNjc0NCAqL1xudmFyIHJlUHJvcE5hbWUgPSAvW14lLltcXF1dK3xcXFsoPzooLT9cXGQrKD86XFwuXFxkKyk/KXwoW1wiJ10pKCg/Oig/IVxcMilbXlxcXFxdfFxcXFwuKSo/KVxcMilcXF18KD89KD86XFwufFxcW1xcXSkoPzpcXC58XFxbXFxdfCUkKSkvZztcbnZhciByZUVzY2FwZUNoYXIgPSAvXFxcXChcXFxcKT8vZzsgLyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgc3RyaW5nVG9QYXRoID0gZnVuY3Rpb24gc3RyaW5nVG9QYXRoKHN0cmluZykge1xuXHR2YXIgcmVzdWx0ID0gW107XG5cdCRyZXBsYWNlKHN0cmluZywgcmVQcm9wTmFtZSwgZnVuY3Rpb24gKG1hdGNoLCBudW1iZXIsIHF1b3RlLCBzdWJTdHJpbmcpIHtcblx0XHRyZXN1bHRbcmVzdWx0Lmxlbmd0aF0gPSBxdW90ZSA/ICRyZXBsYWNlKHN1YlN0cmluZywgcmVFc2NhcGVDaGFyLCAnJDEnKSA6IG51bWJlciB8fCBtYXRjaDtcblx0fSk7XG5cdHJldHVybiByZXN1bHQ7XG59O1xuLyogZW5kIGFkYXB0YXRpb24gKi9cblxudmFyIGdldEJhc2VJbnRyaW5zaWMgPSBmdW5jdGlvbiBnZXRCYXNlSW50cmluc2ljKG5hbWUsIGFsbG93TWlzc2luZykge1xuXHR2YXIgaW50cmluc2ljTmFtZSA9IG5hbWU7XG5cdHZhciBhbGlhcztcblx0aWYgKGhhc093bihMRUdBQ1lfQUxJQVNFUywgaW50cmluc2ljTmFtZSkpIHtcblx0XHRhbGlhcyA9IExFR0FDWV9BTElBU0VTW2ludHJpbnNpY05hbWVdO1xuXHRcdGludHJpbnNpY05hbWUgPSAnJScgKyBhbGlhc1swXSArICclJztcblx0fVxuXG5cdGlmIChoYXNPd24oSU5UUklOU0lDUywgaW50cmluc2ljTmFtZSkpIHtcblx0XHR2YXIgdmFsdWUgPSBJTlRSSU5TSUNTW2ludHJpbnNpY05hbWVdO1xuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnICYmICFhbGxvd01pc3NpbmcpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBmaWxlIGFuIGlzc3VlIScpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRhbGlhczogYWxpYXMsXG5cdFx0XHRuYW1lOiBpbnRyaW5zaWNOYW1lLFxuXHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0fTtcblx0fVxuXG5cdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZG9lcyBub3QgZXhpc3QhJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0aWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCBuYW1lLmxlbmd0aCA9PT0gMCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB0eXBlb2YgYWxsb3dNaXNzaW5nICE9PSAnYm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignXCJhbGxvd01pc3NpbmdcIiBhcmd1bWVudCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cblx0dmFyIHBhcnRzID0gc3RyaW5nVG9QYXRoKG5hbWUpO1xuXHR2YXIgaW50cmluc2ljQmFzZU5hbWUgPSBwYXJ0cy5sZW5ndGggPiAwID8gcGFydHNbMF0gOiAnJztcblxuXHR2YXIgaW50cmluc2ljID0gZ2V0QmFzZUludHJpbnNpYygnJScgKyBpbnRyaW5zaWNCYXNlTmFtZSArICclJywgYWxsb3dNaXNzaW5nKTtcblx0dmFyIGludHJpbnNpY1JlYWxOYW1lID0gaW50cmluc2ljLm5hbWU7XG5cdHZhciB2YWx1ZSA9IGludHJpbnNpYy52YWx1ZTtcblx0dmFyIHNraXBGdXJ0aGVyQ2FjaGluZyA9IGZhbHNlO1xuXG5cdHZhciBhbGlhcyA9IGludHJpbnNpYy5hbGlhcztcblx0aWYgKGFsaWFzKSB7XG5cdFx0aW50cmluc2ljQmFzZU5hbWUgPSBhbGlhc1swXTtcblx0XHQkc3BsaWNlQXBwbHkocGFydHMsICRjb25jYXQoWzAsIDFdLCBhbGlhcykpO1xuXHR9XG5cblx0Zm9yICh2YXIgaSA9IDEsIGlzT3duID0gdHJ1ZTsgaSA8IHBhcnRzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0dmFyIHBhcnQgPSBwYXJ0c1tpXTtcblx0XHRpZiAocGFydCA9PT0gJ2NvbnN0cnVjdG9yJyB8fCAhaXNPd24pIHtcblx0XHRcdHNraXBGdXJ0aGVyQ2FjaGluZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aW50cmluc2ljQmFzZU5hbWUgKz0gJy4nICsgcGFydDtcblx0XHRpbnRyaW5zaWNSZWFsTmFtZSA9ICclJyArIGludHJpbnNpY0Jhc2VOYW1lICsgJyUnO1xuXG5cdFx0aWYgKGhhc093bihJTlRSSU5TSUNTLCBpbnRyaW5zaWNSZWFsTmFtZSkpIHtcblx0XHRcdHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNSZWFsTmFtZV07XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG5cdFx0XHRpZiAoJGdPUEQgJiYgKGkgKyAxKSA+PSBwYXJ0cy5sZW5ndGgpIHtcblx0XHRcdFx0dmFyIGRlc2MgPSAkZ09QRCh2YWx1ZSwgcGFydCk7XG5cdFx0XHRcdGlzT3duID0gISFkZXNjO1xuXG5cdFx0XHRcdGlmICghYWxsb3dNaXNzaW5nICYmICEocGFydCBpbiB2YWx1ZSkpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYmFzZSBpbnRyaW5zaWMgZm9yICcgKyBuYW1lICsgJyBleGlzdHMsIGJ1dCB0aGUgcHJvcGVydHkgaXMgbm90IGF2YWlsYWJsZS4nKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBCeSBjb252ZW50aW9uLCB3aGVuIGEgZGF0YSBwcm9wZXJ0eSBpcyBjb252ZXJ0ZWQgdG8gYW4gYWNjZXNzb3Jcblx0XHRcdFx0Ly8gcHJvcGVydHkgdG8gZW11bGF0ZSBhIGRhdGEgcHJvcGVydHkgdGhhdCBkb2VzIG5vdCBzdWZmZXIgZnJvbVxuXHRcdFx0XHQvLyB0aGUgb3ZlcnJpZGUgbWlzdGFrZSwgdGhhdCBhY2Nlc3NvcidzIGdldHRlciBpcyBtYXJrZWQgd2l0aFxuXHRcdFx0XHQvLyBhbiBgb3JpZ2luYWxWYWx1ZWAgcHJvcGVydHkuIEhlcmUsIHdoZW4gd2UgZGV0ZWN0IHRoaXMsIHdlXG5cdFx0XHRcdC8vIHVwaG9sZCB0aGUgaWxsdXNpb24gYnkgcHJldGVuZGluZyB0byBzZWUgdGhhdCBvcmlnaW5hbCBkYXRhXG5cdFx0XHRcdC8vIHByb3BlcnR5LCBpLmUuLCByZXR1cm5pbmcgdGhlIHZhbHVlIHJhdGhlciB0aGFuIHRoZSBnZXR0ZXJcblx0XHRcdFx0Ly8gaXRzZWxmLlxuXHRcdFx0XHRpZiAoaXNPd24gJiYgJ2dldCcgaW4gZGVzYyAmJiAhKCdvcmlnaW5hbFZhbHVlJyBpbiBkZXNjLmdldCkpIHtcblx0XHRcdFx0XHR2YWx1ZSA9IGRlc2MuZ2V0O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHZhbHVlID0gdmFsdWVbcGFydF07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlzT3duID0gaGFzT3duKHZhbHVlLCBwYXJ0KTtcblx0XHRcdFx0dmFsdWUgPSB2YWx1ZVtwYXJ0XTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGlzT3duICYmICFza2lwRnVydGhlckNhY2hpbmcpIHtcblx0XHRcdFx0SU5UUklOU0lDU1tpbnRyaW5zaWNSZWFsTmFtZV0gPSB2YWx1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHZhbHVlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGJpbmQgPSByZXF1aXJlKCdmdW5jdGlvbi1iaW5kJyk7XG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFwcGx5ID0gR2V0SW50cmluc2ljKCclRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5JScpO1xudmFyICRjYWxsID0gR2V0SW50cmluc2ljKCclRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwlJyk7XG52YXIgJHJlZmxlY3RBcHBseSA9IEdldEludHJpbnNpYygnJVJlZmxlY3QuYXBwbHklJywgdHJ1ZSkgfHwgYmluZC5jYWxsKCRjYWxsLCAkYXBwbHkpO1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xuXG5pZiAoJGRlZmluZVByb3BlcnR5KSB7XG5cdHRyeSB7XG5cdFx0JGRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgdmFsdWU6IDEgfSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJRSA4IGhhcyBhIGJyb2tlbiBkZWZpbmVQcm9wZXJ0eVxuXHRcdCRkZWZpbmVQcm9wZXJ0eSA9IG51bGw7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjYWxsQmluZCgpIHtcblx0cmV0dXJuICRyZWZsZWN0QXBwbHkoYmluZCwgJGNhbGwsIGFyZ3VtZW50cyk7XG59O1xuXG52YXIgYXBwbHlCaW5kID0gZnVuY3Rpb24gYXBwbHlCaW5kKCkge1xuXHRyZXR1cm4gJHJlZmxlY3RBcHBseShiaW5kLCAkYXBwbHksIGFyZ3VtZW50cyk7XG59O1xuXG5pZiAoJGRlZmluZVByb3BlcnR5KSB7XG5cdCRkZWZpbmVQcm9wZXJ0eShtb2R1bGUuZXhwb3J0cywgJ2FwcGx5JywgeyB2YWx1ZTogYXBwbHlCaW5kIH0pO1xufSBlbHNlIHtcblx0bW9kdWxlLmV4cG9ydHMuYXBwbHkgPSBhcHBseUJpbmQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJy4vJyk7XG5cbnZhciAkaW5kZXhPZiA9IGNhbGxCaW5kKEdldEludHJpbnNpYygnU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mJykpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNhbGxCb3VuZEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpYyA9IEdldEludHJpbnNpYyhuYW1lLCAhIWFsbG93TWlzc2luZyk7XG5cdGlmICh0eXBlb2YgaW50cmluc2ljID09PSAnZnVuY3Rpb24nICYmICRpbmRleE9mKG5hbWUsICcucHJvdG90eXBlLicpID4gLTEpIHtcblx0XHRyZXR1cm4gY2FsbEJpbmQoaW50cmluc2ljKTtcblx0fVxuXHRyZXR1cm4gaW50cmluc2ljO1xufTtcbiIsInZhciBoYXNNYXAgPSB0eXBlb2YgTWFwID09PSAnZnVuY3Rpb24nICYmIE1hcC5wcm90b3R5cGU7XG52YXIgbWFwU2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc01hcCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTWFwLnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgbWFwU2l6ZSA9IGhhc01hcCAmJiBtYXBTaXplRGVzY3JpcHRvciAmJiB0eXBlb2YgbWFwU2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gbWFwU2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBtYXBGb3JFYWNoID0gaGFzTWFwICYmIE1hcC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNTZXQgPSB0eXBlb2YgU2V0ID09PSAnZnVuY3Rpb24nICYmIFNldC5wcm90b3R5cGU7XG52YXIgc2V0U2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc1NldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoU2V0LnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgc2V0U2l6ZSA9IGhhc1NldCAmJiBzZXRTaXplRGVzY3JpcHRvciAmJiB0eXBlb2Ygc2V0U2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gc2V0U2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBzZXRGb3JFYWNoID0gaGFzU2V0ICYmIFNldC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgJiYgV2Vha01hcC5wcm90b3R5cGU7XG52YXIgd2Vha01hcEhhcyA9IGhhc1dlYWtNYXAgPyBXZWFrTWFwLnByb3RvdHlwZS5oYXMgOiBudWxsO1xudmFyIGhhc1dlYWtTZXQgPSB0eXBlb2YgV2Vha1NldCA9PT0gJ2Z1bmN0aW9uJyAmJiBXZWFrU2V0LnByb3RvdHlwZTtcbnZhciB3ZWFrU2V0SGFzID0gaGFzV2Vha1NldCA/IFdlYWtTZXQucHJvdG90eXBlLmhhcyA6IG51bGw7XG52YXIgYm9vbGVhblZhbHVlT2YgPSBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mO1xudmFyIG9iamVjdFRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBmdW5jdGlvblRvU3RyaW5nID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIG1hdGNoID0gU3RyaW5nLnByb3RvdHlwZS5tYXRjaDtcbnZhciBiaWdJbnRWYWx1ZU9mID0gdHlwZW9mIEJpZ0ludCA9PT0gJ2Z1bmN0aW9uJyA/IEJpZ0ludC5wcm90b3R5cGUudmFsdWVPZiA6IG51bGw7XG52YXIgZ09QUyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgc3ltVG9TdHJpbmcgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nID8gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZyA6IG51bGw7XG52YXIgaXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxudmFyIGluc3BlY3RDdXN0b20gPSByZXF1aXJlKCcuL3V0aWwuaW5zcGVjdCcpLmN1c3RvbTtcbnZhciBpbnNwZWN0U3ltYm9sID0gaW5zcGVjdEN1c3RvbSAmJiBpc1N5bWJvbChpbnNwZWN0Q3VzdG9tKSA/IGluc3BlY3RDdXN0b20gOiBudWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluc3BlY3RfKG9iaiwgb3B0aW9ucywgZGVwdGgsIHNlZW4pIHtcbiAgICB2YXIgb3B0cyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAoaGFzKG9wdHMsICdxdW90ZVN0eWxlJykgJiYgKG9wdHMucXVvdGVTdHlsZSAhPT0gJ3NpbmdsZScgJiYgb3B0cy5xdW90ZVN0eWxlICE9PSAnZG91YmxlJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwicXVvdGVTdHlsZVwiIG11c3QgYmUgXCJzaW5nbGVcIiBvciBcImRvdWJsZVwiJyk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICAgaGFzKG9wdHMsICdtYXhTdHJpbmdMZW5ndGgnKSAmJiAodHlwZW9mIG9wdHMubWF4U3RyaW5nTGVuZ3RoID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgPyBvcHRzLm1heFN0cmluZ0xlbmd0aCA8IDAgJiYgb3B0cy5tYXhTdHJpbmdMZW5ndGggIT09IEluZmluaXR5XG4gICAgICAgICAgICA6IG9wdHMubWF4U3RyaW5nTGVuZ3RoICE9PSBudWxsXG4gICAgICAgIClcbiAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwibWF4U3RyaW5nTGVuZ3RoXCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciwgSW5maW5pdHksIG9yIGBudWxsYCcpO1xuICAgIH1cbiAgICB2YXIgY3VzdG9tSW5zcGVjdCA9IGhhcyhvcHRzLCAnY3VzdG9tSW5zcGVjdCcpID8gb3B0cy5jdXN0b21JbnNwZWN0IDogdHJ1ZTtcbiAgICBpZiAodHlwZW9mIGN1c3RvbUluc3BlY3QgIT09ICdib29sZWFuJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gXCJjdXN0b21JbnNwZWN0XCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGB0cnVlYCBvciBgZmFsc2VgJyk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgICBoYXMob3B0cywgJ2luZGVudCcpXG4gICAgICAgICYmIG9wdHMuaW5kZW50ICE9PSBudWxsXG4gICAgICAgICYmIG9wdHMuaW5kZW50ICE9PSAnXFx0J1xuICAgICAgICAmJiAhKHBhcnNlSW50KG9wdHMuaW5kZW50LCAxMCkgPT09IG9wdHMuaW5kZW50ICYmIG9wdHMuaW5kZW50ID4gMClcbiAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucyBcImluZGVudFwiIG11c3QgYmUgXCJcXFxcdFwiLCBhbiBpbnRlZ2VyID4gMCwgb3IgYG51bGxgJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiAndW5kZWZpbmVkJztcbiAgICB9XG4gICAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gJ251bGwnO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHJldHVybiBvYmogPyAndHJ1ZScgOiAnZmFsc2UnO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gaW5zcGVjdFN0cmluZyhvYmosIG9wdHMpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgaWYgKG9iaiA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIEluZmluaXR5IC8gb2JqID4gMCA/ICcwJyA6ICctMCc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFN0cmluZyhvYmopO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2JpZ2ludCcpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZyhvYmopICsgJ24nO1xuICAgIH1cblxuICAgIHZhciBtYXhEZXB0aCA9IHR5cGVvZiBvcHRzLmRlcHRoID09PSAndW5kZWZpbmVkJyA/IDUgOiBvcHRzLmRlcHRoO1xuICAgIGlmICh0eXBlb2YgZGVwdGggPT09ICd1bmRlZmluZWQnKSB7IGRlcHRoID0gMDsgfVxuICAgIGlmIChkZXB0aCA+PSBtYXhEZXB0aCAmJiBtYXhEZXB0aCA+IDAgJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGlzQXJyYXkob2JqKSA/ICdbQXJyYXldJyA6ICdbT2JqZWN0XSc7XG4gICAgfVxuXG4gICAgdmFyIGluZGVudCA9IGdldEluZGVudChvcHRzLCBkZXB0aCk7XG5cbiAgICBpZiAodHlwZW9mIHNlZW4gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHNlZW4gPSBbXTtcbiAgICB9IGVsc2UgaWYgKGluZGV4T2Yoc2Vlbiwgb2JqKSA+PSAwKSB7XG4gICAgICAgIHJldHVybiAnW0NpcmN1bGFyXSc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zcGVjdCh2YWx1ZSwgZnJvbSwgbm9JbmRlbnQpIHtcbiAgICAgICAgaWYgKGZyb20pIHtcbiAgICAgICAgICAgIHNlZW4gPSBzZWVuLnNsaWNlKCk7XG4gICAgICAgICAgICBzZWVuLnB1c2goZnJvbSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vSW5kZW50KSB7XG4gICAgICAgICAgICB2YXIgbmV3T3B0cyA9IHtcbiAgICAgICAgICAgICAgICBkZXB0aDogb3B0cy5kZXB0aFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChoYXMob3B0cywgJ3F1b3RlU3R5bGUnKSkge1xuICAgICAgICAgICAgICAgIG5ld09wdHMucXVvdGVTdHlsZSA9IG9wdHMucXVvdGVTdHlsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpbnNwZWN0Xyh2YWx1ZSwgbmV3T3B0cywgZGVwdGggKyAxLCBzZWVuKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5zcGVjdF8odmFsdWUsIG9wdHMsIGRlcHRoICsgMSwgc2Vlbik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFyIG5hbWUgPSBuYW1lT2Yob2JqKTtcbiAgICAgICAgdmFyIGtleXMgPSBhcnJPYmpLZXlzKG9iaiwgaW5zcGVjdCk7XG4gICAgICAgIHJldHVybiAnW0Z1bmN0aW9uJyArIChuYW1lID8gJzogJyArIG5hbWUgOiAnIChhbm9ueW1vdXMpJykgKyAnXScgKyAoa2V5cy5sZW5ndGggPiAwID8gJyB7ICcgKyBrZXlzLmpvaW4oJywgJykgKyAnIH0nIDogJycpO1xuICAgIH1cbiAgICBpZiAoaXNTeW1ib2wob2JqKSkge1xuICAgICAgICB2YXIgc3ltU3RyaW5nID0gc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgPyBtYXJrQm94ZWQoc3ltU3RyaW5nKSA6IHN5bVN0cmluZztcbiAgICB9XG4gICAgaWYgKGlzRWxlbWVudChvYmopKSB7XG4gICAgICAgIHZhciBzID0gJzwnICsgU3RyaW5nKG9iai5ub2RlTmFtZSkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgdmFyIGF0dHJzID0gb2JqLmF0dHJpYnV0ZXMgfHwgW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHMgKz0gJyAnICsgYXR0cnNbaV0ubmFtZSArICc9JyArIHdyYXBRdW90ZXMocXVvdGUoYXR0cnNbaV0udmFsdWUpLCAnZG91YmxlJywgb3B0cyk7XG4gICAgICAgIH1cbiAgICAgICAgcyArPSAnPic7XG4gICAgICAgIGlmIChvYmouY2hpbGROb2RlcyAmJiBvYmouY2hpbGROb2Rlcy5sZW5ndGgpIHsgcyArPSAnLi4uJzsgfVxuICAgICAgICBzICs9ICc8LycgKyBTdHJpbmcob2JqLm5vZGVOYW1lKS50b0xvd2VyQ2FzZSgpICsgJz4nO1xuICAgICAgICByZXR1cm4gcztcbiAgICB9XG4gICAgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgICAgICBpZiAob2JqLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJ1tdJzsgfVxuICAgICAgICB2YXIgeHMgPSBhcnJPYmpLZXlzKG9iaiwgaW5zcGVjdCk7XG4gICAgICAgIGlmIChpbmRlbnQgJiYgIXNpbmdsZUxpbmVWYWx1ZXMoeHMpKSB7XG4gICAgICAgICAgICByZXR1cm4gJ1snICsgaW5kZW50ZWRKb2luKHhzLCBpbmRlbnQpICsgJ10nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnWyAnICsgeHMuam9pbignLCAnKSArICcgXSc7XG4gICAgfVxuICAgIGlmIChpc0Vycm9yKG9iaikpIHtcbiAgICAgICAgdmFyIHBhcnRzID0gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpO1xuICAgICAgICBpZiAocGFydHMubGVuZ3RoID09PSAwKSB7IHJldHVybiAnWycgKyBTdHJpbmcob2JqKSArICddJzsgfVxuICAgICAgICByZXR1cm4gJ3sgWycgKyBTdHJpbmcob2JqKSArICddICcgKyBwYXJ0cy5qb2luKCcsICcpICsgJyB9JztcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIGN1c3RvbUluc3BlY3QpIHtcbiAgICAgICAgaWYgKGluc3BlY3RTeW1ib2wgJiYgdHlwZW9mIG9ialtpbnNwZWN0U3ltYm9sXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIG9ialtpbnNwZWN0U3ltYm9sXSgpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBvYmouaW5zcGVjdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIG9iai5pbnNwZWN0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzTWFwKG9iaikpIHtcbiAgICAgICAgdmFyIG1hcFBhcnRzID0gW107XG4gICAgICAgIG1hcEZvckVhY2guY2FsbChvYmosIGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XG4gICAgICAgICAgICBtYXBQYXJ0cy5wdXNoKGluc3BlY3Qoa2V5LCBvYmosIHRydWUpICsgJyA9PiAnICsgaW5zcGVjdCh2YWx1ZSwgb2JqKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY29sbGVjdGlvbk9mKCdNYXAnLCBtYXBTaXplLmNhbGwob2JqKSwgbWFwUGFydHMsIGluZGVudCk7XG4gICAgfVxuICAgIGlmIChpc1NldChvYmopKSB7XG4gICAgICAgIHZhciBzZXRQYXJ0cyA9IFtdO1xuICAgICAgICBzZXRGb3JFYWNoLmNhbGwob2JqLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHNldFBhcnRzLnB1c2goaW5zcGVjdCh2YWx1ZSwgb2JqKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY29sbGVjdGlvbk9mKCdTZXQnLCBzZXRTaXplLmNhbGwob2JqKSwgc2V0UGFydHMsIGluZGVudCk7XG4gICAgfVxuICAgIGlmIChpc1dlYWtNYXAob2JqKSkge1xuICAgICAgICByZXR1cm4gd2Vha0NvbGxlY3Rpb25PZignV2Vha01hcCcpO1xuICAgIH1cbiAgICBpZiAoaXNXZWFrU2V0KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIHdlYWtDb2xsZWN0aW9uT2YoJ1dlYWtTZXQnKTtcbiAgICB9XG4gICAgaWYgKGlzTnVtYmVyKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG1hcmtCb3hlZChpbnNwZWN0KE51bWJlcihvYmopKSk7XG4gICAgfVxuICAgIGlmIChpc0JpZ0ludChvYmopKSB7XG4gICAgICAgIHJldHVybiBtYXJrQm94ZWQoaW5zcGVjdChiaWdJbnRWYWx1ZU9mLmNhbGwob2JqKSkpO1xuICAgIH1cbiAgICBpZiAoaXNCb29sZWFuKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG1hcmtCb3hlZChib29sZWFuVmFsdWVPZi5jYWxsKG9iaikpO1xuICAgIH1cbiAgICBpZiAoaXNTdHJpbmcob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGluc3BlY3QoU3RyaW5nKG9iaikpKTtcbiAgICB9XG4gICAgaWYgKCFpc0RhdGUob2JqKSAmJiAhaXNSZWdFeHAob2JqKSkge1xuICAgICAgICB2YXIgeXMgPSBhcnJPYmpLZXlzKG9iaiwgaW5zcGVjdCk7XG4gICAgICAgIGlmICh5cy5sZW5ndGggPT09IDApIHsgcmV0dXJuICd7fSc7IH1cbiAgICAgICAgaWYgKGluZGVudCkge1xuICAgICAgICAgICAgcmV0dXJuICd7JyArIGluZGVudGVkSm9pbih5cywgaW5kZW50KSArICd9JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ3sgJyArIHlzLmpvaW4oJywgJykgKyAnIH0nO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKG9iaik7XG59O1xuXG5mdW5jdGlvbiB3cmFwUXVvdGVzKHMsIGRlZmF1bHRTdHlsZSwgb3B0cykge1xuICAgIHZhciBxdW90ZUNoYXIgPSAob3B0cy5xdW90ZVN0eWxlIHx8IGRlZmF1bHRTdHlsZSkgPT09ICdkb3VibGUnID8gJ1wiJyA6IFwiJ1wiO1xuICAgIHJldHVybiBxdW90ZUNoYXIgKyBzICsgcXVvdGVDaGFyO1xufVxuXG5mdW5jdGlvbiBxdW90ZShzKSB7XG4gICAgcmV0dXJuIFN0cmluZyhzKS5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7Jyk7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBBcnJheV0nOyB9XG5mdW5jdGlvbiBpc0RhdGUob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBEYXRlXSc7IH1cbmZ1bmN0aW9uIGlzUmVnRXhwKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7IH1cbmZ1bmN0aW9uIGlzRXJyb3Iob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBFcnJvcl0nOyB9XG5mdW5jdGlvbiBpc1N5bWJvbChvYmopIHsgcmV0dXJuIHRvU3RyKG9iaikgPT09ICdbb2JqZWN0IFN5bWJvbF0nOyB9XG5mdW5jdGlvbiBpc1N0cmluZyhvYmopIHsgcmV0dXJuIHRvU3RyKG9iaikgPT09ICdbb2JqZWN0IFN0cmluZ10nOyB9XG5mdW5jdGlvbiBpc051bWJlcihvYmopIHsgcmV0dXJuIHRvU3RyKG9iaikgPT09ICdbb2JqZWN0IE51bWJlcl0nOyB9XG5mdW5jdGlvbiBpc0JpZ0ludChvYmopIHsgcmV0dXJuIHRvU3RyKG9iaikgPT09ICdbb2JqZWN0IEJpZ0ludF0nOyB9XG5mdW5jdGlvbiBpc0Jvb2xlYW4ob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBCb29sZWFuXSc7IH1cblxudmFyIGhhc093biA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkgfHwgZnVuY3Rpb24gKGtleSkgeyByZXR1cm4ga2V5IGluIHRoaXM7IH07XG5mdW5jdGlvbiBoYXMob2JqLCBrZXkpIHtcbiAgICByZXR1cm4gaGFzT3duLmNhbGwob2JqLCBrZXkpO1xufVxuXG5mdW5jdGlvbiB0b1N0cihvYmopIHtcbiAgICByZXR1cm4gb2JqZWN0VG9TdHJpbmcuY2FsbChvYmopO1xufVxuXG5mdW5jdGlvbiBuYW1lT2YoZikge1xuICAgIGlmIChmLm5hbWUpIHsgcmV0dXJuIGYubmFtZTsgfVxuICAgIHZhciBtID0gbWF0Y2guY2FsbChmdW5jdGlvblRvU3RyaW5nLmNhbGwoZiksIC9eZnVuY3Rpb25cXHMqKFtcXHckXSspLyk7XG4gICAgaWYgKG0pIHsgcmV0dXJuIG1bMV07IH1cbiAgICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gaW5kZXhPZih4cywgeCkge1xuICAgIGlmICh4cy5pbmRleE9mKSB7IHJldHVybiB4cy5pbmRleE9mKHgpOyB9XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSB4cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgaWYgKHhzW2ldID09PSB4KSB7IHJldHVybiBpOyB9XG4gICAgfVxuICAgIHJldHVybiAtMTtcbn1cblxuZnVuY3Rpb24gaXNNYXAoeCkge1xuICAgIGlmICghbWFwU2l6ZSB8fCAheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBtYXBTaXplLmNhbGwoeCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBzZXRTaXplLmNhbGwoeCk7XG4gICAgICAgIH0gY2F0Y2ggKHMpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4IGluc3RhbmNlb2YgTWFwOyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNXZWFrTWFwKHgpIHtcbiAgICBpZiAoIXdlYWtNYXBIYXMgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgd2Vha01hcEhhcy5jYWxsKHgsIHdlYWtNYXBIYXMpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgd2Vha1NldEhhcy5jYWxsKHgsIHdlYWtTZXRIYXMpO1xuICAgICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIFdlYWtNYXA7IC8vIGNvcmUtanMgd29ya2Fyb3VuZCwgcHJlLXYyLjUuMFxuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc1NldCh4KSB7XG4gICAgaWYgKCFzZXRTaXplIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHNldFNpemUuY2FsbCh4KTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG1hcFNpemUuY2FsbCh4KTtcbiAgICAgICAgfSBjYXRjaCAobSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBTZXQ7IC8vIGNvcmUtanMgd29ya2Fyb3VuZCwgcHJlLXYyLjUuMFxuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc1dlYWtTZXQoeCkge1xuICAgIGlmICghd2Vha1NldEhhcyB8fCAheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICB3ZWFrU2V0SGFzLmNhbGwoeCwgd2Vha1NldEhhcyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB3ZWFrTWFwSGFzLmNhbGwoeCwgd2Vha01hcEhhcyk7XG4gICAgICAgIH0gY2F0Y2ggKHMpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4IGluc3RhbmNlb2YgV2Vha1NldDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzRWxlbWVudCh4KSB7XG4gICAgaWYgKCF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0JykgeyByZXR1cm4gZmFsc2U7IH1cbiAgICBpZiAodHlwZW9mIEhUTUxFbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB4IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0eXBlb2YgeC5ub2RlTmFtZSA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIHguZ2V0QXR0cmlidXRlID09PSAnZnVuY3Rpb24nO1xufVxuXG5mdW5jdGlvbiBpbnNwZWN0U3RyaW5nKHN0ciwgb3B0cykge1xuICAgIGlmIChzdHIubGVuZ3RoID4gb3B0cy5tYXhTdHJpbmdMZW5ndGgpIHtcbiAgICAgICAgdmFyIHJlbWFpbmluZyA9IHN0ci5sZW5ndGggLSBvcHRzLm1heFN0cmluZ0xlbmd0aDtcbiAgICAgICAgdmFyIHRyYWlsZXIgPSAnLi4uICcgKyByZW1haW5pbmcgKyAnIG1vcmUgY2hhcmFjdGVyJyArIChyZW1haW5pbmcgPiAxID8gJ3MnIDogJycpO1xuICAgICAgICByZXR1cm4gaW5zcGVjdFN0cmluZyhzdHIuc2xpY2UoMCwgb3B0cy5tYXhTdHJpbmdMZW5ndGgpLCBvcHRzKSArIHRyYWlsZXI7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG4gICAgdmFyIHMgPSBzdHIucmVwbGFjZSgvKFsnXFxcXF0pL2csICdcXFxcJDEnKS5yZXBsYWNlKC9bXFx4MDAtXFx4MWZdL2csIGxvd2J5dGUpO1xuICAgIHJldHVybiB3cmFwUXVvdGVzKHMsICdzaW5nbGUnLCBvcHRzKTtcbn1cblxuZnVuY3Rpb24gbG93Ynl0ZShjKSB7XG4gICAgdmFyIG4gPSBjLmNoYXJDb2RlQXQoMCk7XG4gICAgdmFyIHggPSB7XG4gICAgICAgIDg6ICdiJyxcbiAgICAgICAgOTogJ3QnLFxuICAgICAgICAxMDogJ24nLFxuICAgICAgICAxMjogJ2YnLFxuICAgICAgICAxMzogJ3InXG4gICAgfVtuXTtcbiAgICBpZiAoeCkgeyByZXR1cm4gJ1xcXFwnICsgeDsgfVxuICAgIHJldHVybiAnXFxcXHgnICsgKG4gPCAweDEwID8gJzAnIDogJycpICsgbi50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcbn1cblxuZnVuY3Rpb24gbWFya0JveGVkKHN0cikge1xuICAgIHJldHVybiAnT2JqZWN0KCcgKyBzdHIgKyAnKSc7XG59XG5cbmZ1bmN0aW9uIHdlYWtDb2xsZWN0aW9uT2YodHlwZSkge1xuICAgIHJldHVybiB0eXBlICsgJyB7ID8gfSc7XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3Rpb25PZih0eXBlLCBzaXplLCBlbnRyaWVzLCBpbmRlbnQpIHtcbiAgICB2YXIgam9pbmVkRW50cmllcyA9IGluZGVudCA/IGluZGVudGVkSm9pbihlbnRyaWVzLCBpbmRlbnQpIDogZW50cmllcy5qb2luKCcsICcpO1xuICAgIHJldHVybiB0eXBlICsgJyAoJyArIHNpemUgKyAnKSB7JyArIGpvaW5lZEVudHJpZXMgKyAnfSc7XG59XG5cbmZ1bmN0aW9uIHNpbmdsZUxpbmVWYWx1ZXMoeHMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHhzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChpbmRleE9mKHhzW2ldLCAnXFxuJykgPj0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBnZXRJbmRlbnQob3B0cywgZGVwdGgpIHtcbiAgICB2YXIgYmFzZUluZGVudDtcbiAgICBpZiAob3B0cy5pbmRlbnQgPT09ICdcXHQnKSB7XG4gICAgICAgIGJhc2VJbmRlbnQgPSAnXFx0JztcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBvcHRzLmluZGVudCA9PT0gJ251bWJlcicgJiYgb3B0cy5pbmRlbnQgPiAwKSB7XG4gICAgICAgIGJhc2VJbmRlbnQgPSBBcnJheShvcHRzLmluZGVudCArIDEpLmpvaW4oJyAnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYmFzZTogYmFzZUluZGVudCxcbiAgICAgICAgcHJldjogQXJyYXkoZGVwdGggKyAxKS5qb2luKGJhc2VJbmRlbnQpXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gaW5kZW50ZWRKb2luKHhzLCBpbmRlbnQpIHtcbiAgICBpZiAoeHMubGVuZ3RoID09PSAwKSB7IHJldHVybiAnJzsgfVxuICAgIHZhciBsaW5lSm9pbmVyID0gJ1xcbicgKyBpbmRlbnQucHJldiArIGluZGVudC5iYXNlO1xuICAgIHJldHVybiBsaW5lSm9pbmVyICsgeHMuam9pbignLCcgKyBsaW5lSm9pbmVyKSArICdcXG4nICsgaW5kZW50LnByZXY7XG59XG5cbmZ1bmN0aW9uIGFyck9iaktleXMob2JqLCBpbnNwZWN0KSB7XG4gICAgdmFyIGlzQXJyID0gaXNBcnJheShvYmopO1xuICAgIHZhciB4cyA9IFtdO1xuICAgIGlmIChpc0Fycikge1xuICAgICAgICB4cy5sZW5ndGggPSBvYmoubGVuZ3RoO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iai5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgeHNbaV0gPSBoYXMob2JqLCBpKSA/IGluc3BlY3Qob2JqW2ldLCBvYmopIDogJyc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICAgIGlmICghaGFzKG9iaiwga2V5KSkgeyBjb250aW51ZTsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby1jb250aW51ZVxuICAgICAgICBpZiAoaXNBcnIgJiYgU3RyaW5nKE51bWJlcihrZXkpKSA9PT0ga2V5ICYmIGtleSA8IG9iai5sZW5ndGgpIHsgY29udGludWU7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCwgbm8tY29udGludWVcbiAgICAgICAgaWYgKCgvW15cXHckXS8pLnRlc3Qoa2V5KSkge1xuICAgICAgICAgICAgeHMucHVzaChpbnNwZWN0KGtleSwgb2JqKSArICc6ICcgKyBpbnNwZWN0KG9ialtrZXldLCBvYmopKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHhzLnB1c2goa2V5ICsgJzogJyArIGluc3BlY3Qob2JqW2tleV0sIG9iaikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZ09QUyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgc3ltcyA9IGdPUFMob2JqKTtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzeW1zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBpZiAoaXNFbnVtZXJhYmxlLmNhbGwob2JqLCBzeW1zW2pdKSkge1xuICAgICAgICAgICAgICAgIHhzLnB1c2goJ1snICsgaW5zcGVjdChzeW1zW2pdKSArICddOiAnICsgaW5zcGVjdChvYmpbc3ltc1tqXV0sIG9iaikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB4cztcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcbnZhciBjYWxsQm91bmQgPSByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJyk7XG52YXIgaW5zcGVjdCA9IHJlcXVpcmUoJ29iamVjdC1pbnNwZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRXZWFrTWFwID0gR2V0SW50cmluc2ljKCclV2Vha01hcCUnLCB0cnVlKTtcbnZhciAkTWFwID0gR2V0SW50cmluc2ljKCclTWFwJScsIHRydWUpO1xuXG52YXIgJHdlYWtNYXBHZXQgPSBjYWxsQm91bmQoJ1dlYWtNYXAucHJvdG90eXBlLmdldCcsIHRydWUpO1xudmFyICR3ZWFrTWFwU2V0ID0gY2FsbEJvdW5kKCdXZWFrTWFwLnByb3RvdHlwZS5zZXQnLCB0cnVlKTtcbnZhciAkd2Vha01hcEhhcyA9IGNhbGxCb3VuZCgnV2Vha01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG52YXIgJG1hcEdldCA9IGNhbGxCb3VuZCgnTWFwLnByb3RvdHlwZS5nZXQnLCB0cnVlKTtcbnZhciAkbWFwU2V0ID0gY2FsbEJvdW5kKCdNYXAucHJvdG90eXBlLnNldCcsIHRydWUpO1xudmFyICRtYXBIYXMgPSBjYWxsQm91bmQoJ01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG5cbi8qXG4gKiBUaGlzIGZ1bmN0aW9uIHRyYXZlcnNlcyB0aGUgbGlzdCByZXR1cm5pbmcgdGhlIG5vZGUgY29ycmVzcG9uZGluZyB0byB0aGVcbiAqIGdpdmVuIGtleS5cbiAqXG4gKiBUaGF0IG5vZGUgaXMgYWxzbyBtb3ZlZCB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgc28gdGhhdCBpZiBpdCdzIGFjY2Vzc2VkXG4gKiBhZ2FpbiB3ZSBkb24ndCBuZWVkIHRvIHRyYXZlcnNlIHRoZSB3aG9sZSBsaXN0LiBCeSBkb2luZyBzbywgYWxsIHRoZSByZWNlbnRseVxuICogdXNlZCBub2RlcyBjYW4gYmUgYWNjZXNzZWQgcmVsYXRpdmVseSBxdWlja2x5LlxuICovXG52YXIgbGlzdEdldE5vZGUgPSBmdW5jdGlvbiAobGlzdCwga2V5KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0Zm9yICh2YXIgcHJldiA9IGxpc3QsIGN1cnI7IChjdXJyID0gcHJldi5uZXh0KSAhPT0gbnVsbDsgcHJldiA9IGN1cnIpIHtcblx0XHRpZiAoY3Vyci5rZXkgPT09IGtleSkge1xuXHRcdFx0cHJldi5uZXh0ID0gY3Vyci5uZXh0O1xuXHRcdFx0Y3Vyci5uZXh0ID0gbGlzdC5uZXh0O1xuXHRcdFx0bGlzdC5uZXh0ID0gY3VycjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdFx0cmV0dXJuIGN1cnI7XG5cdFx0fVxuXHR9XG59O1xuXG52YXIgbGlzdEdldCA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRyZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlO1xufTtcbnZhciBsaXN0U2V0ID0gZnVuY3Rpb24gKG9iamVjdHMsIGtleSwgdmFsdWUpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRpZiAobm9kZSkge1xuXHRcdG5vZGUudmFsdWUgPSB2YWx1ZTtcblx0fSBlbHNlIHtcblx0XHQvLyBQcmVwZW5kIHRoZSBuZXcgbm9kZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0XG5cdFx0b2JqZWN0cy5uZXh0ID0geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG5cdFx0XHRrZXk6IGtleSxcblx0XHRcdG5leHQ6IG9iamVjdHMubmV4dCxcblx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdH07XG5cdH1cbn07XG52YXIgbGlzdEhhcyA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0cmV0dXJuICEhbGlzdEdldE5vZGUob2JqZWN0cywga2V5KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0U2lkZUNoYW5uZWwoKSB7XG5cdHZhciAkd207XG5cdHZhciAkbTtcblx0dmFyICRvO1xuXHR2YXIgY2hhbm5lbCA9IHtcblx0XHRhc3NlcnQ6IGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdGlmICghY2hhbm5lbC5oYXMoa2V5KSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignU2lkZSBjaGFubmVsIGRvZXMgbm90IGNvbnRhaW4gJyArIGluc3BlY3Qoa2V5KSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRnZXQ6IGZ1bmN0aW9uIChrZXkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEdldCgkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEdldCgkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RHZXQoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdGhhczogZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEhhcygkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEhhcygkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RIYXMoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcblx0XHRcdGlmICgkV2Vha01hcCAmJiBrZXkgJiYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBrZXkgPT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRcdGlmICghJHdtKSB7XG5cdFx0XHRcdFx0JHdtID0gbmV3ICRXZWFrTWFwKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0JHdlYWtNYXBTZXQoJHdtLCBrZXksIHZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoISRtKSB7XG5cdFx0XHRcdFx0JG0gPSBuZXcgJE1hcCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCRtYXBTZXQoJG0sIGtleSwgdmFsdWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCEkbykge1xuXHRcdFx0XHRcdC8qXG5cdFx0XHRcdFx0ICogSW5pdGlhbGl6ZSB0aGUgbGlua2VkIGxpc3QgYXMgYW4gZW1wdHkgbm9kZSwgc28gdGhhdCB3ZSBkb24ndCBoYXZlXG5cdFx0XHRcdFx0ICogdG8gc3BlY2lhbC1jYXNlIGhhbmRsaW5nIG9mIHRoZSBmaXJzdCBub2RlOiB3ZSBjYW4gYWx3YXlzIHJlZmVyIHRvXG5cdFx0XHRcdFx0ICogaXQgYXMgKHByZXZpb3VzIG5vZGUpLm5leHQsIGluc3RlYWQgb2Ygc29tZXRoaW5nIGxpa2UgKGxpc3QpLmhlYWRcblx0XHRcdFx0XHQgKi9cblx0XHRcdFx0XHQkbyA9IHsga2V5OiB7fSwgbmV4dDogbnVsbCB9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxpc3RTZXQoJG8sIGtleSwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0cmV0dXJuIGNoYW5uZWw7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVwbGFjZSA9IFN0cmluZy5wcm90b3R5cGUucmVwbGFjZTtcbnZhciBwZXJjZW50VHdlbnRpZXMgPSAvJTIwL2c7XG5cbnZhciBGb3JtYXQgPSB7XG4gICAgUkZDMTczODogJ1JGQzE3MzgnLFxuICAgIFJGQzM5ODY6ICdSRkMzOTg2J1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgJ2RlZmF1bHQnOiBGb3JtYXQuUkZDMzk4NixcbiAgICBmb3JtYXR0ZXJzOiB7XG4gICAgICAgIFJGQzE3Mzg6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlcGxhY2UuY2FsbCh2YWx1ZSwgcGVyY2VudFR3ZW50aWVzLCAnKycpO1xuICAgICAgICB9LFxuICAgICAgICBSRkMzOTg2OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBSRkMxNzM4OiBGb3JtYXQuUkZDMTczOCxcbiAgICBSRkMzOTg2OiBGb3JtYXQuUkZDMzk4NlxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGZvcm1hdHMgPSByZXF1aXJlKCcuL2Zvcm1hdHMnKTtcblxudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbnZhciBoZXhUYWJsZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7ICsraSkge1xuICAgICAgICBhcnJheS5wdXNoKCclJyArICgoaSA8IDE2ID8gJzAnIDogJycpICsgaS50b1N0cmluZygxNikpLnRvVXBwZXJDYXNlKCkpO1xuICAgIH1cblxuICAgIHJldHVybiBhcnJheTtcbn0oKSk7XG5cbnZhciBjb21wYWN0UXVldWUgPSBmdW5jdGlvbiBjb21wYWN0UXVldWUocXVldWUpIHtcbiAgICB3aGlsZSAocXVldWUubGVuZ3RoID4gMSkge1xuICAgICAgICB2YXIgaXRlbSA9IHF1ZXVlLnBvcCgpO1xuICAgICAgICB2YXIgb2JqID0gaXRlbS5vYmpbaXRlbS5wcm9wXTtcblxuICAgICAgICBpZiAoaXNBcnJheShvYmopKSB7XG4gICAgICAgICAgICB2YXIgY29tcGFjdGVkID0gW107XG5cbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgb2JqLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmpbal0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBhY3RlZC5wdXNoKG9ialtqXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpdGVtLm9ialtpdGVtLnByb3BdID0gY29tcGFjdGVkO1xuICAgICAgICB9XG4gICAgfVxufTtcblxudmFyIGFycmF5VG9PYmplY3QgPSBmdW5jdGlvbiBhcnJheVRvT2JqZWN0KHNvdXJjZSwgb3B0aW9ucykge1xuICAgIHZhciBvYmogPSBvcHRpb25zICYmIG9wdGlvbnMucGxhaW5PYmplY3RzID8gT2JqZWN0LmNyZWF0ZShudWxsKSA6IHt9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc291cmNlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc291cmNlW2ldICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgb2JqW2ldID0gc291cmNlW2ldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBtZXJnZSA9IGZ1bmN0aW9uIG1lcmdlKHRhcmdldCwgc291cmNlLCBvcHRpb25zKSB7XG4gICAgLyogZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOiAwICovXG4gICAgaWYgKCFzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHNvdXJjZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKGlzQXJyYXkodGFyZ2V0KSkge1xuICAgICAgICAgICAgdGFyZ2V0LnB1c2goc291cmNlKTtcbiAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQgJiYgdHlwZW9mIHRhcmdldCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGlmICgob3B0aW9ucyAmJiAob3B0aW9ucy5wbGFpbk9iamVjdHMgfHwgb3B0aW9ucy5hbGxvd1Byb3RvdHlwZXMpKSB8fCAhaGFzLmNhbGwoT2JqZWN0LnByb3RvdHlwZSwgc291cmNlKSkge1xuICAgICAgICAgICAgICAgIHRhcmdldFtzb3VyY2VdID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbdGFyZ2V0LCBzb3VyY2VdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICBpZiAoIXRhcmdldCB8fCB0eXBlb2YgdGFyZ2V0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gW3RhcmdldF0uY29uY2F0KHNvdXJjZSk7XG4gICAgfVxuXG4gICAgdmFyIG1lcmdlVGFyZ2V0ID0gdGFyZ2V0O1xuICAgIGlmIChpc0FycmF5KHRhcmdldCkgJiYgIWlzQXJyYXkoc291cmNlKSkge1xuICAgICAgICBtZXJnZVRhcmdldCA9IGFycmF5VG9PYmplY3QodGFyZ2V0LCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBpZiAoaXNBcnJheSh0YXJnZXQpICYmIGlzQXJyYXkoc291cmNlKSkge1xuICAgICAgICBzb3VyY2UuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaSkge1xuICAgICAgICAgICAgaWYgKGhhcy5jYWxsKHRhcmdldCwgaSkpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0SXRlbSA9IHRhcmdldFtpXTtcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0SXRlbSAmJiB0eXBlb2YgdGFyZ2V0SXRlbSA9PT0gJ29iamVjdCcgJiYgaXRlbSAmJiB0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W2ldID0gbWVyZ2UodGFyZ2V0SXRlbSwgaXRlbSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRbaV0gPSBpdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICByZXR1cm4gT2JqZWN0LmtleXMoc291cmNlKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywga2V5KSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHNvdXJjZVtrZXldO1xuXG4gICAgICAgIGlmIChoYXMuY2FsbChhY2MsIGtleSkpIHtcbiAgICAgICAgICAgIGFjY1trZXldID0gbWVyZ2UoYWNjW2tleV0sIHZhbHVlLCBvcHRpb25zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFjY1trZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBtZXJnZVRhcmdldCk7XG59O1xuXG52YXIgYXNzaWduID0gZnVuY3Rpb24gYXNzaWduU2luZ2xlU291cmNlKHRhcmdldCwgc291cmNlKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHNvdXJjZSkucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGtleSkge1xuICAgICAgICBhY2Nba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHRhcmdldCk7XG59O1xuXG52YXIgZGVjb2RlID0gZnVuY3Rpb24gKHN0ciwgZGVjb2RlciwgY2hhcnNldCkge1xuICAgIHZhciBzdHJXaXRob3V0UGx1cyA9IHN0ci5yZXBsYWNlKC9cXCsvZywgJyAnKTtcbiAgICBpZiAoY2hhcnNldCA9PT0gJ2lzby04ODU5LTEnKSB7XG4gICAgICAgIC8vIHVuZXNjYXBlIG5ldmVyIHRocm93cywgbm8gdHJ5Li4uY2F0Y2ggbmVlZGVkOlxuICAgICAgICByZXR1cm4gc3RyV2l0aG91dFBsdXMucmVwbGFjZSgvJVswLTlhLWZdezJ9L2dpLCB1bmVzY2FwZSk7XG4gICAgfVxuICAgIC8vIHV0Zi04XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChzdHJXaXRob3V0UGx1cyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gc3RyV2l0aG91dFBsdXM7XG4gICAgfVxufTtcblxudmFyIGVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShzdHIsIGRlZmF1bHRFbmNvZGVyLCBjaGFyc2V0LCBraW5kLCBmb3JtYXQpIHtcbiAgICAvLyBUaGlzIGNvZGUgd2FzIG9yaWdpbmFsbHkgd3JpdHRlbiBieSBCcmlhbiBXaGl0ZSAobXNjZGV4KSBmb3IgdGhlIGlvLmpzIGNvcmUgcXVlcnlzdHJpbmcgbGlicmFyeS5cbiAgICAvLyBJdCBoYXMgYmVlbiBhZGFwdGVkIGhlcmUgZm9yIHN0cmljdGVyIGFkaGVyZW5jZSB0byBSRkMgMzk4NlxuICAgIGlmIChzdHIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuXG4gICAgdmFyIHN0cmluZyA9IHN0cjtcbiAgICBpZiAodHlwZW9mIHN0ciA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgICAgc3RyaW5nID0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN0cik7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJykge1xuICAgICAgICBzdHJpbmcgPSBTdHJpbmcoc3RyKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhcnNldCA9PT0gJ2lzby04ODU5LTEnKSB7XG4gICAgICAgIHJldHVybiBlc2NhcGUoc3RyaW5nKS5yZXBsYWNlKC8ldVswLTlhLWZdezR9L2dpLCBmdW5jdGlvbiAoJDApIHtcbiAgICAgICAgICAgIHJldHVybiAnJTI2JTIzJyArIHBhcnNlSW50KCQwLnNsaWNlKDIpLCAxNikgKyAnJTNCJztcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdmFyIG91dCA9ICcnO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBjID0gc3RyaW5nLmNoYXJDb2RlQXQoaSk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgYyA9PT0gMHgyRCAvLyAtXG4gICAgICAgICAgICB8fCBjID09PSAweDJFIC8vIC5cbiAgICAgICAgICAgIHx8IGMgPT09IDB4NUYgLy8gX1xuICAgICAgICAgICAgfHwgYyA9PT0gMHg3RSAvLyB+XG4gICAgICAgICAgICB8fCAoYyA+PSAweDMwICYmIGMgPD0gMHgzOSkgLy8gMC05XG4gICAgICAgICAgICB8fCAoYyA+PSAweDQxICYmIGMgPD0gMHg1QSkgLy8gYS16XG4gICAgICAgICAgICB8fCAoYyA+PSAweDYxICYmIGMgPD0gMHg3QSkgLy8gQS1aXG4gICAgICAgICAgICB8fCAoZm9ybWF0ID09PSBmb3JtYXRzLlJGQzE3MzggJiYgKGMgPT09IDB4MjggfHwgYyA9PT0gMHgyOSkpIC8vICggKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIG91dCArPSBzdHJpbmcuY2hhckF0KGkpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYyA8IDB4ODApIHtcbiAgICAgICAgICAgIG91dCA9IG91dCArIGhleFRhYmxlW2NdO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYyA8IDB4ODAwKSB7XG4gICAgICAgICAgICBvdXQgPSBvdXQgKyAoaGV4VGFibGVbMHhDMCB8IChjID4+IDYpXSArIGhleFRhYmxlWzB4ODAgfCAoYyAmIDB4M0YpXSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjIDwgMHhEODAwIHx8IGMgPj0gMHhFMDAwKSB7XG4gICAgICAgICAgICBvdXQgPSBvdXQgKyAoaGV4VGFibGVbMHhFMCB8IChjID4+IDEyKV0gKyBoZXhUYWJsZVsweDgwIHwgKChjID4+IDYpICYgMHgzRildICsgaGV4VGFibGVbMHg4MCB8IChjICYgMHgzRildKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaSArPSAxO1xuICAgICAgICBjID0gMHgxMDAwMCArICgoKGMgJiAweDNGRikgPDwgMTApIHwgKHN0cmluZy5jaGFyQ29kZUF0KGkpICYgMHgzRkYpKTtcbiAgICAgICAgb3V0ICs9IGhleFRhYmxlWzB4RjAgfCAoYyA+PiAxOCldXG4gICAgICAgICAgICArIGhleFRhYmxlWzB4ODAgfCAoKGMgPj4gMTIpICYgMHgzRildXG4gICAgICAgICAgICArIGhleFRhYmxlWzB4ODAgfCAoKGMgPj4gNikgJiAweDNGKV1cbiAgICAgICAgICAgICsgaGV4VGFibGVbMHg4MCB8IChjICYgMHgzRildO1xuICAgIH1cblxuICAgIHJldHVybiBvdXQ7XG59O1xuXG52YXIgY29tcGFjdCA9IGZ1bmN0aW9uIGNvbXBhY3QodmFsdWUpIHtcbiAgICB2YXIgcXVldWUgPSBbeyBvYmo6IHsgbzogdmFsdWUgfSwgcHJvcDogJ28nIH1dO1xuICAgIHZhciByZWZzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXVlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBpdGVtID0gcXVldWVbaV07XG4gICAgICAgIHZhciBvYmogPSBpdGVtLm9ialtpdGVtLnByb3BdO1xuXG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBrZXlzLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICB2YXIga2V5ID0ga2V5c1tqXTtcbiAgICAgICAgICAgIHZhciB2YWwgPSBvYmpba2V5XTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiB2YWwgIT09IG51bGwgJiYgcmVmcy5pbmRleE9mKHZhbCkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgcXVldWUucHVzaCh7IG9iajogb2JqLCBwcm9wOiBrZXkgfSk7XG4gICAgICAgICAgICAgICAgcmVmcy5wdXNoKHZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb21wYWN0UXVldWUocXVldWUpO1xuXG4gICAgcmV0dXJuIHZhbHVlO1xufTtcblxudmFyIGlzUmVnRXhwID0gZnVuY3Rpb24gaXNSZWdFeHAob2JqKSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBSZWdFeHBdJztcbn07XG5cbnZhciBpc0J1ZmZlciA9IGZ1bmN0aW9uIGlzQnVmZmVyKG9iaikge1xuICAgIGlmICghb2JqIHx8IHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gISEob2JqLmNvbnN0cnVjdG9yICYmIG9iai5jb25zdHJ1Y3Rvci5pc0J1ZmZlciAmJiBvYmouY29uc3RydWN0b3IuaXNCdWZmZXIob2JqKSk7XG59O1xuXG52YXIgY29tYmluZSA9IGZ1bmN0aW9uIGNvbWJpbmUoYSwgYikge1xuICAgIHJldHVybiBbXS5jb25jYXQoYSwgYik7XG59O1xuXG52YXIgbWF5YmVNYXAgPSBmdW5jdGlvbiBtYXliZU1hcCh2YWwsIGZuKSB7XG4gICAgaWYgKGlzQXJyYXkodmFsKSkge1xuICAgICAgICB2YXIgbWFwcGVkID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBtYXBwZWQucHVzaChmbih2YWxbaV0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWFwcGVkO1xuICAgIH1cbiAgICByZXR1cm4gZm4odmFsKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIGFycmF5VG9PYmplY3Q6IGFycmF5VG9PYmplY3QsXG4gICAgYXNzaWduOiBhc3NpZ24sXG4gICAgY29tYmluZTogY29tYmluZSxcbiAgICBjb21wYWN0OiBjb21wYWN0LFxuICAgIGRlY29kZTogZGVjb2RlLFxuICAgIGVuY29kZTogZW5jb2RlLFxuICAgIGlzQnVmZmVyOiBpc0J1ZmZlcixcbiAgICBpc1JlZ0V4cDogaXNSZWdFeHAsXG4gICAgbWF5YmVNYXA6IG1heWJlTWFwLFxuICAgIG1lcmdlOiBtZXJnZVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGdldFNpZGVDaGFubmVsID0gcmVxdWlyZSgnc2lkZS1jaGFubmVsJyk7XG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgZm9ybWF0cyA9IHJlcXVpcmUoJy4vZm9ybWF0cycpO1xudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbnZhciBhcnJheVByZWZpeEdlbmVyYXRvcnMgPSB7XG4gICAgYnJhY2tldHM6IGZ1bmN0aW9uIGJyYWNrZXRzKHByZWZpeCkge1xuICAgICAgICByZXR1cm4gcHJlZml4ICsgJ1tdJztcbiAgICB9LFxuICAgIGNvbW1hOiAnY29tbWEnLFxuICAgIGluZGljZXM6IGZ1bmN0aW9uIGluZGljZXMocHJlZml4LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIHByZWZpeCArICdbJyArIGtleSArICddJztcbiAgICB9LFxuICAgIHJlcGVhdDogZnVuY3Rpb24gcmVwZWF0KHByZWZpeCkge1xuICAgICAgICByZXR1cm4gcHJlZml4O1xuICAgIH1cbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbnZhciBwdXNoID0gQXJyYXkucHJvdG90eXBlLnB1c2g7XG52YXIgcHVzaFRvQXJyYXkgPSBmdW5jdGlvbiAoYXJyLCB2YWx1ZU9yQXJyYXkpIHtcbiAgICBwdXNoLmFwcGx5KGFyciwgaXNBcnJheSh2YWx1ZU9yQXJyYXkpID8gdmFsdWVPckFycmF5IDogW3ZhbHVlT3JBcnJheV0pO1xufTtcblxudmFyIHRvSVNPID0gRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmc7XG5cbnZhciBkZWZhdWx0Rm9ybWF0ID0gZm9ybWF0c1snZGVmYXVsdCddO1xudmFyIGRlZmF1bHRzID0ge1xuICAgIGFkZFF1ZXJ5UHJlZml4OiBmYWxzZSxcbiAgICBhbGxvd0RvdHM6IGZhbHNlLFxuICAgIGNoYXJzZXQ6ICd1dGYtOCcsXG4gICAgY2hhcnNldFNlbnRpbmVsOiBmYWxzZSxcbiAgICBkZWxpbWl0ZXI6ICcmJyxcbiAgICBlbmNvZGU6IHRydWUsXG4gICAgZW5jb2RlcjogdXRpbHMuZW5jb2RlLFxuICAgIGVuY29kZVZhbHVlc09ubHk6IGZhbHNlLFxuICAgIGZvcm1hdDogZGVmYXVsdEZvcm1hdCxcbiAgICBmb3JtYXR0ZXI6IGZvcm1hdHMuZm9ybWF0dGVyc1tkZWZhdWx0Rm9ybWF0XSxcbiAgICAvLyBkZXByZWNhdGVkXG4gICAgaW5kaWNlczogZmFsc2UsXG4gICAgc2VyaWFsaXplRGF0ZTogZnVuY3Rpb24gc2VyaWFsaXplRGF0ZShkYXRlKSB7XG4gICAgICAgIHJldHVybiB0b0lTTy5jYWxsKGRhdGUpO1xuICAgIH0sXG4gICAgc2tpcE51bGxzOiBmYWxzZSxcbiAgICBzdHJpY3ROdWxsSGFuZGxpbmc6IGZhbHNlXG59O1xuXG52YXIgaXNOb25OdWxsaXNoUHJpbWl0aXZlID0gZnVuY3Rpb24gaXNOb25OdWxsaXNoUHJpbWl0aXZlKHYpIHtcbiAgICByZXR1cm4gdHlwZW9mIHYgPT09ICdzdHJpbmcnXG4gICAgICAgIHx8IHR5cGVvZiB2ID09PSAnbnVtYmVyJ1xuICAgICAgICB8fCB0eXBlb2YgdiA9PT0gJ2Jvb2xlYW4nXG4gICAgICAgIHx8IHR5cGVvZiB2ID09PSAnc3ltYm9sJ1xuICAgICAgICB8fCB0eXBlb2YgdiA9PT0gJ2JpZ2ludCc7XG59O1xuXG52YXIgc3RyaW5naWZ5ID0gZnVuY3Rpb24gc3RyaW5naWZ5KFxuICAgIG9iamVjdCxcbiAgICBwcmVmaXgsXG4gICAgZ2VuZXJhdGVBcnJheVByZWZpeCxcbiAgICBzdHJpY3ROdWxsSGFuZGxpbmcsXG4gICAgc2tpcE51bGxzLFxuICAgIGVuY29kZXIsXG4gICAgZmlsdGVyLFxuICAgIHNvcnQsXG4gICAgYWxsb3dEb3RzLFxuICAgIHNlcmlhbGl6ZURhdGUsXG4gICAgZm9ybWF0LFxuICAgIGZvcm1hdHRlcixcbiAgICBlbmNvZGVWYWx1ZXNPbmx5LFxuICAgIGNoYXJzZXQsXG4gICAgc2lkZUNoYW5uZWxcbikge1xuICAgIHZhciBvYmogPSBvYmplY3Q7XG5cbiAgICBpZiAoc2lkZUNoYW5uZWwuaGFzKG9iamVjdCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0N5Y2xpYyBvYmplY3QgdmFsdWUnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZpbHRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBvYmogPSBmaWx0ZXIocHJlZml4LCBvYmopO1xuICAgIH0gZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICBvYmogPSBzZXJpYWxpemVEYXRlKG9iaik7XG4gICAgfSBlbHNlIGlmIChnZW5lcmF0ZUFycmF5UHJlZml4ID09PSAnY29tbWEnICYmIGlzQXJyYXkob2JqKSkge1xuICAgICAgICBvYmogPSB1dGlscy5tYXliZU1hcChvYmosIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVEYXRlKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgICAgICBpZiAoc3RyaWN0TnVsbEhhbmRsaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gZW5jb2RlciAmJiAhZW5jb2RlVmFsdWVzT25seSA/IGVuY29kZXIocHJlZml4LCBkZWZhdWx0cy5lbmNvZGVyLCBjaGFyc2V0LCAna2V5JywgZm9ybWF0KSA6IHByZWZpeDtcbiAgICAgICAgfVxuXG4gICAgICAgIG9iaiA9ICcnO1xuICAgIH1cblxuICAgIGlmIChpc05vbk51bGxpc2hQcmltaXRpdmUob2JqKSB8fCB1dGlscy5pc0J1ZmZlcihvYmopKSB7XG4gICAgICAgIGlmIChlbmNvZGVyKSB7XG4gICAgICAgICAgICB2YXIga2V5VmFsdWUgPSBlbmNvZGVWYWx1ZXNPbmx5ID8gcHJlZml4IDogZW5jb2RlcihwcmVmaXgsIGRlZmF1bHRzLmVuY29kZXIsIGNoYXJzZXQsICdrZXknLCBmb3JtYXQpO1xuICAgICAgICAgICAgcmV0dXJuIFtmb3JtYXR0ZXIoa2V5VmFsdWUpICsgJz0nICsgZm9ybWF0dGVyKGVuY29kZXIob2JqLCBkZWZhdWx0cy5lbmNvZGVyLCBjaGFyc2V0LCAndmFsdWUnLCBmb3JtYXQpKV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtmb3JtYXR0ZXIocHJlZml4KSArICc9JyArIGZvcm1hdHRlcihTdHJpbmcob2JqKSldO1xuICAgIH1cblxuICAgIHZhciB2YWx1ZXMgPSBbXTtcblxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgIH1cblxuICAgIHZhciBvYmpLZXlzO1xuICAgIGlmIChnZW5lcmF0ZUFycmF5UHJlZml4ID09PSAnY29tbWEnICYmIGlzQXJyYXkob2JqKSkge1xuICAgICAgICAvLyB3ZSBuZWVkIHRvIGpvaW4gZWxlbWVudHMgaW5cbiAgICAgICAgb2JqS2V5cyA9IFt7IHZhbHVlOiBvYmoubGVuZ3RoID4gMCA/IG9iai5qb2luKCcsJykgfHwgbnVsbCA6IHVuZGVmaW5lZCB9XTtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkoZmlsdGVyKSkge1xuICAgICAgICBvYmpLZXlzID0gZmlsdGVyO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgICAgICAgb2JqS2V5cyA9IHNvcnQgPyBrZXlzLnNvcnQoc29ydCkgOiBrZXlzO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqS2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIga2V5ID0gb2JqS2V5c1tpXTtcbiAgICAgICAgdmFyIHZhbHVlID0gdHlwZW9mIGtleSA9PT0gJ29iamVjdCcgJiYga2V5LnZhbHVlICE9PSB1bmRlZmluZWQgPyBrZXkudmFsdWUgOiBvYmpba2V5XTtcblxuICAgICAgICBpZiAoc2tpcE51bGxzICYmIHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBrZXlQcmVmaXggPSBpc0FycmF5KG9iailcbiAgICAgICAgICAgID8gdHlwZW9mIGdlbmVyYXRlQXJyYXlQcmVmaXggPT09ICdmdW5jdGlvbicgPyBnZW5lcmF0ZUFycmF5UHJlZml4KHByZWZpeCwga2V5KSA6IHByZWZpeFxuICAgICAgICAgICAgOiBwcmVmaXggKyAoYWxsb3dEb3RzID8gJy4nICsga2V5IDogJ1snICsga2V5ICsgJ10nKTtcblxuICAgICAgICBzaWRlQ2hhbm5lbC5zZXQob2JqZWN0LCB0cnVlKTtcbiAgICAgICAgdmFyIHZhbHVlU2lkZUNoYW5uZWwgPSBnZXRTaWRlQ2hhbm5lbCgpO1xuICAgICAgICBwdXNoVG9BcnJheSh2YWx1ZXMsIHN0cmluZ2lmeShcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAga2V5UHJlZml4LFxuICAgICAgICAgICAgZ2VuZXJhdGVBcnJheVByZWZpeCxcbiAgICAgICAgICAgIHN0cmljdE51bGxIYW5kbGluZyxcbiAgICAgICAgICAgIHNraXBOdWxscyxcbiAgICAgICAgICAgIGVuY29kZXIsXG4gICAgICAgICAgICBmaWx0ZXIsXG4gICAgICAgICAgICBzb3J0LFxuICAgICAgICAgICAgYWxsb3dEb3RzLFxuICAgICAgICAgICAgc2VyaWFsaXplRGF0ZSxcbiAgICAgICAgICAgIGZvcm1hdCxcbiAgICAgICAgICAgIGZvcm1hdHRlcixcbiAgICAgICAgICAgIGVuY29kZVZhbHVlc09ubHksXG4gICAgICAgICAgICBjaGFyc2V0LFxuICAgICAgICAgICAgdmFsdWVTaWRlQ2hhbm5lbFxuICAgICAgICApKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWVzO1xufTtcblxudmFyIG5vcm1hbGl6ZVN0cmluZ2lmeU9wdGlvbnMgPSBmdW5jdGlvbiBub3JtYWxpemVTdHJpbmdpZnlPcHRpb25zKG9wdHMpIHtcbiAgICBpZiAoIW9wdHMpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRzO1xuICAgIH1cblxuICAgIGlmIChvcHRzLmVuY29kZXIgIT09IG51bGwgJiYgb3B0cy5lbmNvZGVyICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9wdHMuZW5jb2RlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFbmNvZGVyIGhhcyB0byBiZSBhIGZ1bmN0aW9uLicpO1xuICAgIH1cblxuICAgIHZhciBjaGFyc2V0ID0gb3B0cy5jaGFyc2V0IHx8IGRlZmF1bHRzLmNoYXJzZXQ7XG4gICAgaWYgKHR5cGVvZiBvcHRzLmNoYXJzZXQgIT09ICd1bmRlZmluZWQnICYmIG9wdHMuY2hhcnNldCAhPT0gJ3V0Zi04JyAmJiBvcHRzLmNoYXJzZXQgIT09ICdpc28tODg1OS0xJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgY2hhcnNldCBvcHRpb24gbXVzdCBiZSBlaXRoZXIgdXRmLTgsIGlzby04ODU5LTEsIG9yIHVuZGVmaW5lZCcpO1xuICAgIH1cblxuICAgIHZhciBmb3JtYXQgPSBmb3JtYXRzWydkZWZhdWx0J107XG4gICAgaWYgKHR5cGVvZiBvcHRzLmZvcm1hdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgaWYgKCFoYXMuY2FsbChmb3JtYXRzLmZvcm1hdHRlcnMsIG9wdHMuZm9ybWF0KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBmb3JtYXQgb3B0aW9uIHByb3ZpZGVkLicpO1xuICAgICAgICB9XG4gICAgICAgIGZvcm1hdCA9IG9wdHMuZm9ybWF0O1xuICAgIH1cbiAgICB2YXIgZm9ybWF0dGVyID0gZm9ybWF0cy5mb3JtYXR0ZXJzW2Zvcm1hdF07XG5cbiAgICB2YXIgZmlsdGVyID0gZGVmYXVsdHMuZmlsdGVyO1xuICAgIGlmICh0eXBlb2Ygb3B0cy5maWx0ZXIgPT09ICdmdW5jdGlvbicgfHwgaXNBcnJheShvcHRzLmZpbHRlcikpIHtcbiAgICAgICAgZmlsdGVyID0gb3B0cy5maWx0ZXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgYWRkUXVlcnlQcmVmaXg6IHR5cGVvZiBvcHRzLmFkZFF1ZXJ5UHJlZml4ID09PSAnYm9vbGVhbicgPyBvcHRzLmFkZFF1ZXJ5UHJlZml4IDogZGVmYXVsdHMuYWRkUXVlcnlQcmVmaXgsXG4gICAgICAgIGFsbG93RG90czogdHlwZW9mIG9wdHMuYWxsb3dEb3RzID09PSAndW5kZWZpbmVkJyA/IGRlZmF1bHRzLmFsbG93RG90cyA6ICEhb3B0cy5hbGxvd0RvdHMsXG4gICAgICAgIGNoYXJzZXQ6IGNoYXJzZXQsXG4gICAgICAgIGNoYXJzZXRTZW50aW5lbDogdHlwZW9mIG9wdHMuY2hhcnNldFNlbnRpbmVsID09PSAnYm9vbGVhbicgPyBvcHRzLmNoYXJzZXRTZW50aW5lbCA6IGRlZmF1bHRzLmNoYXJzZXRTZW50aW5lbCxcbiAgICAgICAgZGVsaW1pdGVyOiB0eXBlb2Ygb3B0cy5kZWxpbWl0ZXIgPT09ICd1bmRlZmluZWQnID8gZGVmYXVsdHMuZGVsaW1pdGVyIDogb3B0cy5kZWxpbWl0ZXIsXG4gICAgICAgIGVuY29kZTogdHlwZW9mIG9wdHMuZW5jb2RlID09PSAnYm9vbGVhbicgPyBvcHRzLmVuY29kZSA6IGRlZmF1bHRzLmVuY29kZSxcbiAgICAgICAgZW5jb2RlcjogdHlwZW9mIG9wdHMuZW5jb2RlciA9PT0gJ2Z1bmN0aW9uJyA/IG9wdHMuZW5jb2RlciA6IGRlZmF1bHRzLmVuY29kZXIsXG4gICAgICAgIGVuY29kZVZhbHVlc09ubHk6IHR5cGVvZiBvcHRzLmVuY29kZVZhbHVlc09ubHkgPT09ICdib29sZWFuJyA/IG9wdHMuZW5jb2RlVmFsdWVzT25seSA6IGRlZmF1bHRzLmVuY29kZVZhbHVlc09ubHksXG4gICAgICAgIGZpbHRlcjogZmlsdGVyLFxuICAgICAgICBmb3JtYXQ6IGZvcm1hdCxcbiAgICAgICAgZm9ybWF0dGVyOiBmb3JtYXR0ZXIsXG4gICAgICAgIHNlcmlhbGl6ZURhdGU6IHR5cGVvZiBvcHRzLnNlcmlhbGl6ZURhdGUgPT09ICdmdW5jdGlvbicgPyBvcHRzLnNlcmlhbGl6ZURhdGUgOiBkZWZhdWx0cy5zZXJpYWxpemVEYXRlLFxuICAgICAgICBza2lwTnVsbHM6IHR5cGVvZiBvcHRzLnNraXBOdWxscyA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5za2lwTnVsbHMgOiBkZWZhdWx0cy5za2lwTnVsbHMsXG4gICAgICAgIHNvcnQ6IHR5cGVvZiBvcHRzLnNvcnQgPT09ICdmdW5jdGlvbicgPyBvcHRzLnNvcnQgOiBudWxsLFxuICAgICAgICBzdHJpY3ROdWxsSGFuZGxpbmc6IHR5cGVvZiBvcHRzLnN0cmljdE51bGxIYW5kbGluZyA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5zdHJpY3ROdWxsSGFuZGxpbmcgOiBkZWZhdWx0cy5zdHJpY3ROdWxsSGFuZGxpbmdcbiAgICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBvcHRzKSB7XG4gICAgdmFyIG9iaiA9IG9iamVjdDtcbiAgICB2YXIgb3B0aW9ucyA9IG5vcm1hbGl6ZVN0cmluZ2lmeU9wdGlvbnMob3B0cyk7XG5cbiAgICB2YXIgb2JqS2V5cztcbiAgICB2YXIgZmlsdGVyO1xuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmZpbHRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmaWx0ZXIgPSBvcHRpb25zLmZpbHRlcjtcbiAgICAgICAgb2JqID0gZmlsdGVyKCcnLCBvYmopO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShvcHRpb25zLmZpbHRlcikpIHtcbiAgICAgICAgZmlsdGVyID0gb3B0aW9ucy5maWx0ZXI7XG4gICAgICAgIG9iaktleXMgPSBmaWx0ZXI7XG4gICAgfVxuXG4gICAgdmFyIGtleXMgPSBbXTtcblxuICAgIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JyB8fCBvYmogPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIHZhciBhcnJheUZvcm1hdDtcbiAgICBpZiAob3B0cyAmJiBvcHRzLmFycmF5Rm9ybWF0IGluIGFycmF5UHJlZml4R2VuZXJhdG9ycykge1xuICAgICAgICBhcnJheUZvcm1hdCA9IG9wdHMuYXJyYXlGb3JtYXQ7XG4gICAgfSBlbHNlIGlmIChvcHRzICYmICdpbmRpY2VzJyBpbiBvcHRzKSB7XG4gICAgICAgIGFycmF5Rm9ybWF0ID0gb3B0cy5pbmRpY2VzID8gJ2luZGljZXMnIDogJ3JlcGVhdCc7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYXJyYXlGb3JtYXQgPSAnaW5kaWNlcyc7XG4gICAgfVxuXG4gICAgdmFyIGdlbmVyYXRlQXJyYXlQcmVmaXggPSBhcnJheVByZWZpeEdlbmVyYXRvcnNbYXJyYXlGb3JtYXRdO1xuXG4gICAgaWYgKCFvYmpLZXlzKSB7XG4gICAgICAgIG9iaktleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnNvcnQpIHtcbiAgICAgICAgb2JqS2V5cy5zb3J0KG9wdGlvbnMuc29ydCk7XG4gICAgfVxuXG4gICAgdmFyIHNpZGVDaGFubmVsID0gZ2V0U2lkZUNoYW5uZWwoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iaktleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGtleSA9IG9iaktleXNbaV07XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuc2tpcE51bGxzICYmIG9ialtrZXldID09PSBudWxsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBwdXNoVG9BcnJheShrZXlzLCBzdHJpbmdpZnkoXG4gICAgICAgICAgICBvYmpba2V5XSxcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIGdlbmVyYXRlQXJyYXlQcmVmaXgsXG4gICAgICAgICAgICBvcHRpb25zLnN0cmljdE51bGxIYW5kbGluZyxcbiAgICAgICAgICAgIG9wdGlvbnMuc2tpcE51bGxzLFxuICAgICAgICAgICAgb3B0aW9ucy5lbmNvZGUgPyBvcHRpb25zLmVuY29kZXIgOiBudWxsLFxuICAgICAgICAgICAgb3B0aW9ucy5maWx0ZXIsXG4gICAgICAgICAgICBvcHRpb25zLnNvcnQsXG4gICAgICAgICAgICBvcHRpb25zLmFsbG93RG90cyxcbiAgICAgICAgICAgIG9wdGlvbnMuc2VyaWFsaXplRGF0ZSxcbiAgICAgICAgICAgIG9wdGlvbnMuZm9ybWF0LFxuICAgICAgICAgICAgb3B0aW9ucy5mb3JtYXR0ZXIsXG4gICAgICAgICAgICBvcHRpb25zLmVuY29kZVZhbHVlc09ubHksXG4gICAgICAgICAgICBvcHRpb25zLmNoYXJzZXQsXG4gICAgICAgICAgICBzaWRlQ2hhbm5lbFxuICAgICAgICApKTtcbiAgICB9XG5cbiAgICB2YXIgam9pbmVkID0ga2V5cy5qb2luKG9wdGlvbnMuZGVsaW1pdGVyKTtcbiAgICB2YXIgcHJlZml4ID0gb3B0aW9ucy5hZGRRdWVyeVByZWZpeCA9PT0gdHJ1ZSA/ICc/JyA6ICcnO1xuXG4gICAgaWYgKG9wdGlvbnMuY2hhcnNldFNlbnRpbmVsKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmNoYXJzZXQgPT09ICdpc28tODg1OS0xJykge1xuICAgICAgICAgICAgLy8gZW5jb2RlVVJJQ29tcG9uZW50KCcmIzEwMDAzOycpLCB0aGUgXCJudW1lcmljIGVudGl0eVwiIHJlcHJlc2VudGF0aW9uIG9mIGEgY2hlY2ttYXJrXG4gICAgICAgICAgICBwcmVmaXggKz0gJ3V0Zjg9JTI2JTIzMTAwMDMlM0ImJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGVuY29kZVVSSUNvbXBvbmVudCgn4pyTJylcbiAgICAgICAgICAgIHByZWZpeCArPSAndXRmOD0lRTIlOUMlOTMmJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBqb2luZWQubGVuZ3RoID4gMCA/IHByZWZpeCArIGpvaW5lZCA6ICcnO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xuXG52YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcblxudmFyIGRlZmF1bHRzID0ge1xuICAgIGFsbG93RG90czogZmFsc2UsXG4gICAgYWxsb3dQcm90b3R5cGVzOiBmYWxzZSxcbiAgICBhbGxvd1NwYXJzZTogZmFsc2UsXG4gICAgYXJyYXlMaW1pdDogMjAsXG4gICAgY2hhcnNldDogJ3V0Zi04JyxcbiAgICBjaGFyc2V0U2VudGluZWw6IGZhbHNlLFxuICAgIGNvbW1hOiBmYWxzZSxcbiAgICBkZWNvZGVyOiB1dGlscy5kZWNvZGUsXG4gICAgZGVsaW1pdGVyOiAnJicsXG4gICAgZGVwdGg6IDUsXG4gICAgaWdub3JlUXVlcnlQcmVmaXg6IGZhbHNlLFxuICAgIGludGVycHJldE51bWVyaWNFbnRpdGllczogZmFsc2UsXG4gICAgcGFyYW1ldGVyTGltaXQ6IDEwMDAsXG4gICAgcGFyc2VBcnJheXM6IHRydWUsXG4gICAgcGxhaW5PYmplY3RzOiBmYWxzZSxcbiAgICBzdHJpY3ROdWxsSGFuZGxpbmc6IGZhbHNlXG59O1xuXG52YXIgaW50ZXJwcmV0TnVtZXJpY0VudGl0aWVzID0gZnVuY3Rpb24gKHN0cikge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvJiMoXFxkKyk7L2csIGZ1bmN0aW9uICgkMCwgbnVtYmVyU3RyKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KG51bWJlclN0ciwgMTApKTtcbiAgICB9KTtcbn07XG5cbnZhciBwYXJzZUFycmF5VmFsdWUgPSBmdW5jdGlvbiAodmFsLCBvcHRpb25zKSB7XG4gICAgaWYgKHZhbCAmJiB0eXBlb2YgdmFsID09PSAnc3RyaW5nJyAmJiBvcHRpb25zLmNvbW1hICYmIHZhbC5pbmRleE9mKCcsJykgPiAtMSkge1xuICAgICAgICByZXR1cm4gdmFsLnNwbGl0KCcsJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbDtcbn07XG5cbi8vIFRoaXMgaXMgd2hhdCBicm93c2VycyB3aWxsIHN1Ym1pdCB3aGVuIHRoZSDinJMgY2hhcmFjdGVyIG9jY3VycyBpbiBhblxuLy8gYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIGJvZHkgYW5kIHRoZSBlbmNvZGluZyBvZiB0aGUgcGFnZSBjb250YWluaW5nXG4vLyB0aGUgZm9ybSBpcyBpc28tODg1OS0xLCBvciB3aGVuIHRoZSBzdWJtaXR0ZWQgZm9ybSBoYXMgYW4gYWNjZXB0LWNoYXJzZXRcbi8vIGF0dHJpYnV0ZSBvZiBpc28tODg1OS0xLiBQcmVzdW1hYmx5IGFsc28gd2l0aCBvdGhlciBjaGFyc2V0cyB0aGF0IGRvIG5vdCBjb250YWluXG4vLyB0aGUg4pyTIGNoYXJhY3Rlciwgc3VjaCBhcyB1cy1hc2NpaS5cbnZhciBpc29TZW50aW5lbCA9ICd1dGY4PSUyNiUyMzEwMDAzJTNCJzsgLy8gZW5jb2RlVVJJQ29tcG9uZW50KCcmIzEwMDAzOycpXG5cbi8vIFRoZXNlIGFyZSB0aGUgcGVyY2VudC1lbmNvZGVkIHV0Zi04IG9jdGV0cyByZXByZXNlbnRpbmcgYSBjaGVja21hcmssIGluZGljYXRpbmcgdGhhdCB0aGUgcmVxdWVzdCBhY3R1YWxseSBpcyB1dGYtOCBlbmNvZGVkLlxudmFyIGNoYXJzZXRTZW50aW5lbCA9ICd1dGY4PSVFMiU5QyU5Myc7IC8vIGVuY29kZVVSSUNvbXBvbmVudCgn4pyTJylcblxudmFyIHBhcnNlVmFsdWVzID0gZnVuY3Rpb24gcGFyc2VRdWVyeVN0cmluZ1ZhbHVlcyhzdHIsIG9wdGlvbnMpIHtcbiAgICB2YXIgb2JqID0ge307XG4gICAgdmFyIGNsZWFuU3RyID0gb3B0aW9ucy5pZ25vcmVRdWVyeVByZWZpeCA/IHN0ci5yZXBsYWNlKC9eXFw/LywgJycpIDogc3RyO1xuICAgIHZhciBsaW1pdCA9IG9wdGlvbnMucGFyYW1ldGVyTGltaXQgPT09IEluZmluaXR5ID8gdW5kZWZpbmVkIDogb3B0aW9ucy5wYXJhbWV0ZXJMaW1pdDtcbiAgICB2YXIgcGFydHMgPSBjbGVhblN0ci5zcGxpdChvcHRpb25zLmRlbGltaXRlciwgbGltaXQpO1xuICAgIHZhciBza2lwSW5kZXggPSAtMTsgLy8gS2VlcCB0cmFjayBvZiB3aGVyZSB0aGUgdXRmOCBzZW50aW5lbCB3YXMgZm91bmRcbiAgICB2YXIgaTtcblxuICAgIHZhciBjaGFyc2V0ID0gb3B0aW9ucy5jaGFyc2V0O1xuICAgIGlmIChvcHRpb25zLmNoYXJzZXRTZW50aW5lbCkge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGlmIChwYXJ0c1tpXS5pbmRleE9mKCd1dGY4PScpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnRzW2ldID09PSBjaGFyc2V0U2VudGluZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hhcnNldCA9ICd1dGYtOCc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJ0c1tpXSA9PT0gaXNvU2VudGluZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hhcnNldCA9ICdpc28tODg1OS0xJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2tpcEluZGV4ID0gaTtcbiAgICAgICAgICAgICAgICBpID0gcGFydHMubGVuZ3RoOyAvLyBUaGUgZXNsaW50IHNldHRpbmdzIGRvIG5vdCBhbGxvdyBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAoaSA9PT0gc2tpcEluZGV4KSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcGFydCA9IHBhcnRzW2ldO1xuXG4gICAgICAgIHZhciBicmFja2V0RXF1YWxzUG9zID0gcGFydC5pbmRleE9mKCddPScpO1xuICAgICAgICB2YXIgcG9zID0gYnJhY2tldEVxdWFsc1BvcyA9PT0gLTEgPyBwYXJ0LmluZGV4T2YoJz0nKSA6IGJyYWNrZXRFcXVhbHNQb3MgKyAxO1xuXG4gICAgICAgIHZhciBrZXksIHZhbDtcbiAgICAgICAgaWYgKHBvcyA9PT0gLTEpIHtcbiAgICAgICAgICAgIGtleSA9IG9wdGlvbnMuZGVjb2RlcihwYXJ0LCBkZWZhdWx0cy5kZWNvZGVyLCBjaGFyc2V0LCAna2V5Jyk7XG4gICAgICAgICAgICB2YWwgPSBvcHRpb25zLnN0cmljdE51bGxIYW5kbGluZyA/IG51bGwgOiAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGtleSA9IG9wdGlvbnMuZGVjb2RlcihwYXJ0LnNsaWNlKDAsIHBvcyksIGRlZmF1bHRzLmRlY29kZXIsIGNoYXJzZXQsICdrZXknKTtcbiAgICAgICAgICAgIHZhbCA9IHV0aWxzLm1heWJlTWFwKFxuICAgICAgICAgICAgICAgIHBhcnNlQXJyYXlWYWx1ZShwYXJ0LnNsaWNlKHBvcyArIDEpLCBvcHRpb25zKSxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiAoZW5jb2RlZFZhbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5kZWNvZGVyKGVuY29kZWRWYWwsIGRlZmF1bHRzLmRlY29kZXIsIGNoYXJzZXQsICd2YWx1ZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsICYmIG9wdGlvbnMuaW50ZXJwcmV0TnVtZXJpY0VudGl0aWVzICYmIGNoYXJzZXQgPT09ICdpc28tODg1OS0xJykge1xuICAgICAgICAgICAgdmFsID0gaW50ZXJwcmV0TnVtZXJpY0VudGl0aWVzKHZhbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFydC5pbmRleE9mKCdbXT0nKSA+IC0xKSB7XG4gICAgICAgICAgICB2YWwgPSBpc0FycmF5KHZhbCkgPyBbdmFsXSA6IHZhbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXMuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgICAgIG9ialtrZXldID0gdXRpbHMuY29tYmluZShvYmpba2V5XSwgdmFsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9ialtrZXldID0gdmFsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBwYXJzZU9iamVjdCA9IGZ1bmN0aW9uIChjaGFpbiwgdmFsLCBvcHRpb25zLCB2YWx1ZXNQYXJzZWQpIHtcbiAgICB2YXIgbGVhZiA9IHZhbHVlc1BhcnNlZCA/IHZhbCA6IHBhcnNlQXJyYXlWYWx1ZSh2YWwsIG9wdGlvbnMpO1xuXG4gICAgZm9yICh2YXIgaSA9IGNoYWluLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBvYmo7XG4gICAgICAgIHZhciByb290ID0gY2hhaW5baV07XG5cbiAgICAgICAgaWYgKHJvb3QgPT09ICdbXScgJiYgb3B0aW9ucy5wYXJzZUFycmF5cykge1xuICAgICAgICAgICAgb2JqID0gW10uY29uY2F0KGxlYWYpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2JqID0gb3B0aW9ucy5wbGFpbk9iamVjdHMgPyBPYmplY3QuY3JlYXRlKG51bGwpIDoge307XG4gICAgICAgICAgICB2YXIgY2xlYW5Sb290ID0gcm9vdC5jaGFyQXQoMCkgPT09ICdbJyAmJiByb290LmNoYXJBdChyb290Lmxlbmd0aCAtIDEpID09PSAnXScgPyByb290LnNsaWNlKDEsIC0xKSA6IHJvb3Q7XG4gICAgICAgICAgICB2YXIgaW5kZXggPSBwYXJzZUludChjbGVhblJvb3QsIDEwKTtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5wYXJzZUFycmF5cyAmJiBjbGVhblJvb3QgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgb2JqID0geyAwOiBsZWFmIH07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICFpc05hTihpbmRleClcbiAgICAgICAgICAgICAgICAmJiByb290ICE9PSBjbGVhblJvb3RcbiAgICAgICAgICAgICAgICAmJiBTdHJpbmcoaW5kZXgpID09PSBjbGVhblJvb3RcbiAgICAgICAgICAgICAgICAmJiBpbmRleCA+PSAwXG4gICAgICAgICAgICAgICAgJiYgKG9wdGlvbnMucGFyc2VBcnJheXMgJiYgaW5kZXggPD0gb3B0aW9ucy5hcnJheUxpbWl0KVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgb2JqID0gW107XG4gICAgICAgICAgICAgICAgb2JqW2luZGV4XSA9IGxlYWY7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG9ialtjbGVhblJvb3RdID0gbGVhZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxlYWYgPSBvYmo7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxlYWY7XG59O1xuXG52YXIgcGFyc2VLZXlzID0gZnVuY3Rpb24gcGFyc2VRdWVyeVN0cmluZ0tleXMoZ2l2ZW5LZXksIHZhbCwgb3B0aW9ucywgdmFsdWVzUGFyc2VkKSB7XG4gICAgaWYgKCFnaXZlbktleSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVHJhbnNmb3JtIGRvdCBub3RhdGlvbiB0byBicmFja2V0IG5vdGF0aW9uXG4gICAgdmFyIGtleSA9IG9wdGlvbnMuYWxsb3dEb3RzID8gZ2l2ZW5LZXkucmVwbGFjZSgvXFwuKFteLltdKykvZywgJ1skMV0nKSA6IGdpdmVuS2V5O1xuXG4gICAgLy8gVGhlIHJlZ2V4IGNodW5rc1xuXG4gICAgdmFyIGJyYWNrZXRzID0gLyhcXFtbXltcXF1dKl0pLztcbiAgICB2YXIgY2hpbGQgPSAvKFxcW1teW1xcXV0qXSkvZztcblxuICAgIC8vIEdldCB0aGUgcGFyZW50XG5cbiAgICB2YXIgc2VnbWVudCA9IG9wdGlvbnMuZGVwdGggPiAwICYmIGJyYWNrZXRzLmV4ZWMoa2V5KTtcbiAgICB2YXIgcGFyZW50ID0gc2VnbWVudCA/IGtleS5zbGljZSgwLCBzZWdtZW50LmluZGV4KSA6IGtleTtcblxuICAgIC8vIFN0YXNoIHRoZSBwYXJlbnQgaWYgaXQgZXhpc3RzXG5cbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgLy8gSWYgd2UgYXJlbid0IHVzaW5nIHBsYWluIG9iamVjdHMsIG9wdGlvbmFsbHkgcHJlZml4IGtleXMgdGhhdCB3b3VsZCBvdmVyd3JpdGUgb2JqZWN0IHByb3RvdHlwZSBwcm9wZXJ0aWVzXG4gICAgICAgIGlmICghb3B0aW9ucy5wbGFpbk9iamVjdHMgJiYgaGFzLmNhbGwoT2JqZWN0LnByb3RvdHlwZSwgcGFyZW50KSkge1xuICAgICAgICAgICAgaWYgKCFvcHRpb25zLmFsbG93UHJvdG90eXBlcykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGtleXMucHVzaChwYXJlbnQpO1xuICAgIH1cblxuICAgIC8vIExvb3AgdGhyb3VnaCBjaGlsZHJlbiBhcHBlbmRpbmcgdG8gdGhlIGFycmF5IHVudGlsIHdlIGhpdCBkZXB0aFxuXG4gICAgdmFyIGkgPSAwO1xuICAgIHdoaWxlIChvcHRpb25zLmRlcHRoID4gMCAmJiAoc2VnbWVudCA9IGNoaWxkLmV4ZWMoa2V5KSkgIT09IG51bGwgJiYgaSA8IG9wdGlvbnMuZGVwdGgpIHtcbiAgICAgICAgaSArPSAxO1xuICAgICAgICBpZiAoIW9wdGlvbnMucGxhaW5PYmplY3RzICYmIGhhcy5jYWxsKE9iamVjdC5wcm90b3R5cGUsIHNlZ21lbnRbMV0uc2xpY2UoMSwgLTEpKSkge1xuICAgICAgICAgICAgaWYgKCFvcHRpb25zLmFsbG93UHJvdG90eXBlcykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBrZXlzLnB1c2goc2VnbWVudFsxXSk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmUncyBhIHJlbWFpbmRlciwganVzdCBhZGQgd2hhdGV2ZXIgaXMgbGVmdFxuXG4gICAgaWYgKHNlZ21lbnQpIHtcbiAgICAgICAga2V5cy5wdXNoKCdbJyArIGtleS5zbGljZShzZWdtZW50LmluZGV4KSArICddJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlT2JqZWN0KGtleXMsIHZhbCwgb3B0aW9ucywgdmFsdWVzUGFyc2VkKTtcbn07XG5cbnZhciBub3JtYWxpemVQYXJzZU9wdGlvbnMgPSBmdW5jdGlvbiBub3JtYWxpemVQYXJzZU9wdGlvbnMob3B0cykge1xuICAgIGlmICghb3B0cykge1xuICAgICAgICByZXR1cm4gZGVmYXVsdHM7XG4gICAgfVxuXG4gICAgaWYgKG9wdHMuZGVjb2RlciAhPT0gbnVsbCAmJiBvcHRzLmRlY29kZXIgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb3B0cy5kZWNvZGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0RlY29kZXIgaGFzIHRvIGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvcHRzLmNoYXJzZXQgIT09ICd1bmRlZmluZWQnICYmIG9wdHMuY2hhcnNldCAhPT0gJ3V0Zi04JyAmJiBvcHRzLmNoYXJzZXQgIT09ICdpc28tODg1OS0xJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgY2hhcnNldCBvcHRpb24gbXVzdCBiZSBlaXRoZXIgdXRmLTgsIGlzby04ODU5LTEsIG9yIHVuZGVmaW5lZCcpO1xuICAgIH1cbiAgICB2YXIgY2hhcnNldCA9IHR5cGVvZiBvcHRzLmNoYXJzZXQgPT09ICd1bmRlZmluZWQnID8gZGVmYXVsdHMuY2hhcnNldCA6IG9wdHMuY2hhcnNldDtcblxuICAgIHJldHVybiB7XG4gICAgICAgIGFsbG93RG90czogdHlwZW9mIG9wdHMuYWxsb3dEb3RzID09PSAndW5kZWZpbmVkJyA/IGRlZmF1bHRzLmFsbG93RG90cyA6ICEhb3B0cy5hbGxvd0RvdHMsXG4gICAgICAgIGFsbG93UHJvdG90eXBlczogdHlwZW9mIG9wdHMuYWxsb3dQcm90b3R5cGVzID09PSAnYm9vbGVhbicgPyBvcHRzLmFsbG93UHJvdG90eXBlcyA6IGRlZmF1bHRzLmFsbG93UHJvdG90eXBlcyxcbiAgICAgICAgYWxsb3dTcGFyc2U6IHR5cGVvZiBvcHRzLmFsbG93U3BhcnNlID09PSAnYm9vbGVhbicgPyBvcHRzLmFsbG93U3BhcnNlIDogZGVmYXVsdHMuYWxsb3dTcGFyc2UsXG4gICAgICAgIGFycmF5TGltaXQ6IHR5cGVvZiBvcHRzLmFycmF5TGltaXQgPT09ICdudW1iZXInID8gb3B0cy5hcnJheUxpbWl0IDogZGVmYXVsdHMuYXJyYXlMaW1pdCxcbiAgICAgICAgY2hhcnNldDogY2hhcnNldCxcbiAgICAgICAgY2hhcnNldFNlbnRpbmVsOiB0eXBlb2Ygb3B0cy5jaGFyc2V0U2VudGluZWwgPT09ICdib29sZWFuJyA/IG9wdHMuY2hhcnNldFNlbnRpbmVsIDogZGVmYXVsdHMuY2hhcnNldFNlbnRpbmVsLFxuICAgICAgICBjb21tYTogdHlwZW9mIG9wdHMuY29tbWEgPT09ICdib29sZWFuJyA/IG9wdHMuY29tbWEgOiBkZWZhdWx0cy5jb21tYSxcbiAgICAgICAgZGVjb2RlcjogdHlwZW9mIG9wdHMuZGVjb2RlciA9PT0gJ2Z1bmN0aW9uJyA/IG9wdHMuZGVjb2RlciA6IGRlZmF1bHRzLmRlY29kZXIsXG4gICAgICAgIGRlbGltaXRlcjogdHlwZW9mIG9wdHMuZGVsaW1pdGVyID09PSAnc3RyaW5nJyB8fCB1dGlscy5pc1JlZ0V4cChvcHRzLmRlbGltaXRlcikgPyBvcHRzLmRlbGltaXRlciA6IGRlZmF1bHRzLmRlbGltaXRlcixcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWltcGxpY2l0LWNvZXJjaW9uLCBuby1leHRyYS1wYXJlbnNcbiAgICAgICAgZGVwdGg6ICh0eXBlb2Ygb3B0cy5kZXB0aCA9PT0gJ251bWJlcicgfHwgb3B0cy5kZXB0aCA9PT0gZmFsc2UpID8gK29wdHMuZGVwdGggOiBkZWZhdWx0cy5kZXB0aCxcbiAgICAgICAgaWdub3JlUXVlcnlQcmVmaXg6IG9wdHMuaWdub3JlUXVlcnlQcmVmaXggPT09IHRydWUsXG4gICAgICAgIGludGVycHJldE51bWVyaWNFbnRpdGllczogdHlwZW9mIG9wdHMuaW50ZXJwcmV0TnVtZXJpY0VudGl0aWVzID09PSAnYm9vbGVhbicgPyBvcHRzLmludGVycHJldE51bWVyaWNFbnRpdGllcyA6IGRlZmF1bHRzLmludGVycHJldE51bWVyaWNFbnRpdGllcyxcbiAgICAgICAgcGFyYW1ldGVyTGltaXQ6IHR5cGVvZiBvcHRzLnBhcmFtZXRlckxpbWl0ID09PSAnbnVtYmVyJyA/IG9wdHMucGFyYW1ldGVyTGltaXQgOiBkZWZhdWx0cy5wYXJhbWV0ZXJMaW1pdCxcbiAgICAgICAgcGFyc2VBcnJheXM6IG9wdHMucGFyc2VBcnJheXMgIT09IGZhbHNlLFxuICAgICAgICBwbGFpbk9iamVjdHM6IHR5cGVvZiBvcHRzLnBsYWluT2JqZWN0cyA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5wbGFpbk9iamVjdHMgOiBkZWZhdWx0cy5wbGFpbk9iamVjdHMsXG4gICAgICAgIHN0cmljdE51bGxIYW5kbGluZzogdHlwZW9mIG9wdHMuc3RyaWN0TnVsbEhhbmRsaW5nID09PSAnYm9vbGVhbicgPyBvcHRzLnN0cmljdE51bGxIYW5kbGluZyA6IGRlZmF1bHRzLnN0cmljdE51bGxIYW5kbGluZ1xuICAgIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzdHIsIG9wdHMpIHtcbiAgICB2YXIgb3B0aW9ucyA9IG5vcm1hbGl6ZVBhcnNlT3B0aW9ucyhvcHRzKTtcblxuICAgIGlmIChzdHIgPT09ICcnIHx8IHN0ciA9PT0gbnVsbCB8fCB0eXBlb2Ygc3RyID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5wbGFpbk9iamVjdHMgPyBPYmplY3QuY3JlYXRlKG51bGwpIDoge307XG4gICAgfVxuXG4gICAgdmFyIHRlbXBPYmogPSB0eXBlb2Ygc3RyID09PSAnc3RyaW5nJyA/IHBhcnNlVmFsdWVzKHN0ciwgb3B0aW9ucykgOiBzdHI7XG4gICAgdmFyIG9iaiA9IG9wdGlvbnMucGxhaW5PYmplY3RzID8gT2JqZWN0LmNyZWF0ZShudWxsKSA6IHt9O1xuXG4gICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBrZXlzIGFuZCBzZXR1cCB0aGUgbmV3IG9iamVjdFxuXG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh0ZW1wT2JqKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAgIHZhciBuZXdPYmogPSBwYXJzZUtleXMoa2V5LCB0ZW1wT2JqW2tleV0sIG9wdGlvbnMsIHR5cGVvZiBzdHIgPT09ICdzdHJpbmcnKTtcbiAgICAgICAgb2JqID0gdXRpbHMubWVyZ2Uob2JqLCBuZXdPYmosIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmFsbG93U3BhcnNlID09PSB0cnVlKSB7XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG4gICAgcmV0dXJuIHV0aWxzLmNvbXBhY3Qob2JqKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBzdHJpbmdpZnkgPSByZXF1aXJlKCcuL3N0cmluZ2lmeScpO1xudmFyIHBhcnNlID0gcmVxdWlyZSgnLi9wYXJzZScpO1xudmFyIGZvcm1hdHMgPSByZXF1aXJlKCcuL2Zvcm1hdHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgZm9ybWF0czogZm9ybWF0cyxcbiAgICBwYXJzZTogcGFyc2UsXG4gICAgc3RyaW5naWZ5OiBzdHJpbmdpZnlcbn07XG4iLCIvKlxuICogIGJhc2U2NC5qc1xuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQlNEIDMtQ2xhdXNlIExpY2Vuc2UuXG4gKiAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKlxuICogIFJlZmVyZW5jZXM6XG4gKiAgICBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Jhc2U2NFxuICovXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoZ2xvYmFsKVxuICAgICAgICA6IHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZFxuICAgICAgICA/IGRlZmluZShmYWN0b3J5KSA6IGZhY3RvcnkoZ2xvYmFsKVxufSgoXG4gICAgdHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZlxuICAgICAgICA6IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93XG4gICAgICAgIDogdHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxcbjogdGhpc1xuKSwgZnVuY3Rpb24oZ2xvYmFsKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuICAgIC8vIGV4aXN0aW5nIHZlcnNpb24gZm9yIG5vQ29uZmxpY3QoKVxuICAgIGdsb2JhbCA9IGdsb2JhbCB8fCB7fTtcbiAgICB2YXIgX0Jhc2U2NCA9IGdsb2JhbC5CYXNlNjQ7XG4gICAgdmFyIHZlcnNpb24gPSBcIjIuNi40XCI7XG4gICAgLy8gY29uc3RhbnRzXG4gICAgdmFyIGI2NGNoYXJzXG4gICAgICAgID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nO1xuICAgIHZhciBiNjR0YWIgPSBmdW5jdGlvbihiaW4pIHtcbiAgICAgICAgdmFyIHQgPSB7fTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBiaW4ubGVuZ3RoOyBpIDwgbDsgaSsrKSB0W2Jpbi5jaGFyQXQoaSldID0gaTtcbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfShiNjRjaGFycyk7XG4gICAgdmFyIGZyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG4gICAgLy8gZW5jb2RlciBzdHVmZlxuICAgIHZhciBjYl91dG9iID0gZnVuY3Rpb24oYykge1xuICAgICAgICBpZiAoYy5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICB2YXIgY2MgPSBjLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgICAgICByZXR1cm4gY2MgPCAweDgwID8gY1xuICAgICAgICAgICAgICAgIDogY2MgPCAweDgwMCA/IChmcm9tQ2hhckNvZGUoMHhjMCB8IChjYyA+Pj4gNikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgZnJvbUNoYXJDb2RlKDB4ODAgfCAoY2MgJiAweDNmKSkpXG4gICAgICAgICAgICAgICAgOiAoZnJvbUNoYXJDb2RlKDB4ZTAgfCAoKGNjID4+PiAxMikgJiAweDBmKSlcbiAgICAgICAgICAgICAgICAgICAgKyBmcm9tQ2hhckNvZGUoMHg4MCB8ICgoY2MgPj4+ICA2KSAmIDB4M2YpKVxuICAgICAgICAgICAgICAgICAgICArIGZyb21DaGFyQ29kZSgweDgwIHwgKCBjYyAgICAgICAgICYgMHgzZikpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBjYyA9IDB4MTAwMDBcbiAgICAgICAgICAgICAgICArIChjLmNoYXJDb2RlQXQoMCkgLSAweEQ4MDApICogMHg0MDBcbiAgICAgICAgICAgICAgICArIChjLmNoYXJDb2RlQXQoMSkgLSAweERDMDApO1xuICAgICAgICAgICAgcmV0dXJuIChmcm9tQ2hhckNvZGUoMHhmMCB8ICgoY2MgPj4+IDE4KSAmIDB4MDcpKVxuICAgICAgICAgICAgICAgICAgICArIGZyb21DaGFyQ29kZSgweDgwIHwgKChjYyA+Pj4gMTIpICYgMHgzZikpXG4gICAgICAgICAgICAgICAgICAgICsgZnJvbUNoYXJDb2RlKDB4ODAgfCAoKGNjID4+PiAgNikgJiAweDNmKSlcbiAgICAgICAgICAgICAgICAgICAgKyBmcm9tQ2hhckNvZGUoMHg4MCB8ICggY2MgICAgICAgICAmIDB4M2YpKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHZhciByZV91dG9iID0gL1tcXHVEODAwLVxcdURCRkZdW1xcdURDMDAtXFx1REZGRkZdfFteXFx4MDAtXFx4N0ZdL2c7XG4gICAgdmFyIHV0b2IgPSBmdW5jdGlvbih1KSB7XG4gICAgICAgIHJldHVybiB1LnJlcGxhY2UocmVfdXRvYiwgY2JfdXRvYik7XG4gICAgfTtcbiAgICB2YXIgY2JfZW5jb2RlID0gZnVuY3Rpb24oY2NjKSB7XG4gICAgICAgIHZhciBwYWRsZW4gPSBbMCwgMiwgMV1bY2NjLmxlbmd0aCAlIDNdLFxuICAgICAgICBvcmQgPSBjY2MuY2hhckNvZGVBdCgwKSA8PCAxNlxuICAgICAgICAgICAgfCAoKGNjYy5sZW5ndGggPiAxID8gY2NjLmNoYXJDb2RlQXQoMSkgOiAwKSA8PCA4KVxuICAgICAgICAgICAgfCAoKGNjYy5sZW5ndGggPiAyID8gY2NjLmNoYXJDb2RlQXQoMikgOiAwKSksXG4gICAgICAgIGNoYXJzID0gW1xuICAgICAgICAgICAgYjY0Y2hhcnMuY2hhckF0KCBvcmQgPj4+IDE4KSxcbiAgICAgICAgICAgIGI2NGNoYXJzLmNoYXJBdCgob3JkID4+PiAxMikgJiA2MyksXG4gICAgICAgICAgICBwYWRsZW4gPj0gMiA/ICc9JyA6IGI2NGNoYXJzLmNoYXJBdCgob3JkID4+PiA2KSAmIDYzKSxcbiAgICAgICAgICAgIHBhZGxlbiA+PSAxID8gJz0nIDogYjY0Y2hhcnMuY2hhckF0KG9yZCAmIDYzKVxuICAgICAgICBdO1xuICAgICAgICByZXR1cm4gY2hhcnMuam9pbignJyk7XG4gICAgfTtcbiAgICB2YXIgYnRvYSA9IGdsb2JhbC5idG9hICYmIHR5cGVvZiBnbG9iYWwuYnRvYSA9PSAnZnVuY3Rpb24nXG4gICAgICAgID8gZnVuY3Rpb24oYil7IHJldHVybiBnbG9iYWwuYnRvYShiKSB9IDogZnVuY3Rpb24oYikge1xuICAgICAgICBpZiAoYi5tYXRjaCgvW15cXHgwMC1cXHhGRl0vKSkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXG4gICAgICAgICAgICAnVGhlIHN0cmluZyBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnMuJ1xuICAgICAgICApO1xuICAgICAgICByZXR1cm4gYi5yZXBsYWNlKC9bXFxzXFxTXXsxLDN9L2csIGNiX2VuY29kZSk7XG4gICAgfTtcbiAgICB2YXIgX2VuY29kZSA9IGZ1bmN0aW9uKHUpIHtcbiAgICAgICAgcmV0dXJuIGJ0b2EodXRvYihTdHJpbmcodSkpKTtcbiAgICB9O1xuICAgIHZhciBta1VyaVNhZmUgPSBmdW5jdGlvbiAoYjY0KSB7XG4gICAgICAgIHJldHVybiBiNjQucmVwbGFjZSgvWytcXC9dL2csIGZ1bmN0aW9uKG0wKSB7XG4gICAgICAgICAgICByZXR1cm4gbTAgPT0gJysnID8gJy0nIDogJ18nO1xuICAgICAgICB9KS5yZXBsYWNlKC89L2csICcnKTtcbiAgICB9O1xuICAgIHZhciBlbmNvZGUgPSBmdW5jdGlvbih1LCB1cmlzYWZlKSB7XG4gICAgICAgIHJldHVybiB1cmlzYWZlID8gbWtVcmlTYWZlKF9lbmNvZGUodSkpIDogX2VuY29kZSh1KTtcbiAgICB9O1xuICAgIHZhciBlbmNvZGVVUkkgPSBmdW5jdGlvbih1KSB7IHJldHVybiBlbmNvZGUodSwgdHJ1ZSkgfTtcbiAgICB2YXIgZnJvbVVpbnQ4QXJyYXk7XG4gICAgaWYgKGdsb2JhbC5VaW50OEFycmF5KSBmcm9tVWludDhBcnJheSA9IGZ1bmN0aW9uKGEsIHVyaXNhZmUpIHtcbiAgICAgICAgLy8gcmV0dXJuIGJ0b2EoZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGEpKTtcbiAgICAgICAgdmFyIGI2NCA9ICcnO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGEubGVuZ3RoOyBpIDwgbDsgaSArPSAzKSB7XG4gICAgICAgICAgICB2YXIgYTAgPSBhW2ldLCBhMSA9IGFbaSsxXSwgYTIgPSBhW2krMl07XG4gICAgICAgICAgICB2YXIgb3JkID0gYTAgPDwgMTYgfCBhMSA8PCA4IHwgYTI7XG4gICAgICAgICAgICBiNjQgKz0gICAgYjY0Y2hhcnMuY2hhckF0KCBvcmQgPj4+IDE4KVxuICAgICAgICAgICAgICAgICsgICAgIGI2NGNoYXJzLmNoYXJBdCgob3JkID4+PiAxMikgJiA2MylcbiAgICAgICAgICAgICAgICArICggdHlwZW9mIGExICE9ICd1bmRlZmluZWQnXG4gICAgICAgICAgICAgICAgICAgID8gYjY0Y2hhcnMuY2hhckF0KChvcmQgPj4+ICA2KSAmIDYzKSA6ICc9JylcbiAgICAgICAgICAgICAgICArICggdHlwZW9mIGEyICE9ICd1bmRlZmluZWQnXG4gICAgICAgICAgICAgICAgICAgID8gYjY0Y2hhcnMuY2hhckF0KCBvcmQgICAgICAgICAmIDYzKSA6ICc9Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVyaXNhZmUgPyBta1VyaVNhZmUoYjY0KSA6IGI2NDtcbiAgICB9O1xuICAgIC8vIGRlY29kZXIgc3R1ZmZcbiAgICB2YXIgcmVfYnRvdSA9IC9bXFx4QzAtXFx4REZdW1xceDgwLVxceEJGXXxbXFx4RTAtXFx4RUZdW1xceDgwLVxceEJGXXsyfXxbXFx4RjAtXFx4RjddW1xceDgwLVxceEJGXXszfS9nO1xuICAgIHZhciBjYl9idG91ID0gZnVuY3Rpb24oY2NjYykge1xuICAgICAgICBzd2l0Y2goY2NjYy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgdmFyIGNwID0gKCgweDA3ICYgY2NjYy5jaGFyQ29kZUF0KDApKSA8PCAxOClcbiAgICAgICAgICAgICAgICB8ICAgICgoMHgzZiAmIGNjY2MuY2hhckNvZGVBdCgxKSkgPDwgMTIpXG4gICAgICAgICAgICAgICAgfCAgICAoKDB4M2YgJiBjY2NjLmNoYXJDb2RlQXQoMikpIDw8ICA2KVxuICAgICAgICAgICAgICAgIHwgICAgICgweDNmICYgY2NjYy5jaGFyQ29kZUF0KDMpKSxcbiAgICAgICAgICAgIG9mZnNldCA9IGNwIC0gMHgxMDAwMDtcbiAgICAgICAgICAgIHJldHVybiAoZnJvbUNoYXJDb2RlKChvZmZzZXQgID4+PiAxMCkgKyAweEQ4MDApXG4gICAgICAgICAgICAgICAgICAgICsgZnJvbUNoYXJDb2RlKChvZmZzZXQgJiAweDNGRikgKyAweERDMDApKTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgcmV0dXJuIGZyb21DaGFyQ29kZShcbiAgICAgICAgICAgICAgICAoKDB4MGYgJiBjY2NjLmNoYXJDb2RlQXQoMCkpIDw8IDEyKVxuICAgICAgICAgICAgICAgICAgICB8ICgoMHgzZiAmIGNjY2MuY2hhckNvZGVBdCgxKSkgPDwgNilcbiAgICAgICAgICAgICAgICAgICAgfCAgKDB4M2YgJiBjY2NjLmNoYXJDb2RlQXQoMikpXG4gICAgICAgICAgICApO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICBmcm9tQ2hhckNvZGUoXG4gICAgICAgICAgICAgICAgKCgweDFmICYgY2NjYy5jaGFyQ29kZUF0KDApKSA8PCA2KVxuICAgICAgICAgICAgICAgICAgICB8ICAoMHgzZiAmIGNjY2MuY2hhckNvZGVBdCgxKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHZhciBidG91ID0gZnVuY3Rpb24oYikge1xuICAgICAgICByZXR1cm4gYi5yZXBsYWNlKHJlX2J0b3UsIGNiX2J0b3UpO1xuICAgIH07XG4gICAgdmFyIGNiX2RlY29kZSA9IGZ1bmN0aW9uKGNjY2MpIHtcbiAgICAgICAgdmFyIGxlbiA9IGNjY2MubGVuZ3RoLFxuICAgICAgICBwYWRsZW4gPSBsZW4gJSA0LFxuICAgICAgICBuID0gKGxlbiA+IDAgPyBiNjR0YWJbY2NjYy5jaGFyQXQoMCldIDw8IDE4IDogMClcbiAgICAgICAgICAgIHwgKGxlbiA+IDEgPyBiNjR0YWJbY2NjYy5jaGFyQXQoMSldIDw8IDEyIDogMClcbiAgICAgICAgICAgIHwgKGxlbiA+IDIgPyBiNjR0YWJbY2NjYy5jaGFyQXQoMildIDw8ICA2IDogMClcbiAgICAgICAgICAgIHwgKGxlbiA+IDMgPyBiNjR0YWJbY2NjYy5jaGFyQXQoMyldICAgICAgIDogMCksXG4gICAgICAgIGNoYXJzID0gW1xuICAgICAgICAgICAgZnJvbUNoYXJDb2RlKCBuID4+PiAxNiksXG4gICAgICAgICAgICBmcm9tQ2hhckNvZGUoKG4gPj4+ICA4KSAmIDB4ZmYpLFxuICAgICAgICAgICAgZnJvbUNoYXJDb2RlKCBuICAgICAgICAgJiAweGZmKVxuICAgICAgICBdO1xuICAgICAgICBjaGFycy5sZW5ndGggLT0gWzAsIDAsIDIsIDFdW3BhZGxlbl07XG4gICAgICAgIHJldHVybiBjaGFycy5qb2luKCcnKTtcbiAgICB9O1xuICAgIHZhciBfYXRvYiA9IGdsb2JhbC5hdG9iICYmIHR5cGVvZiBnbG9iYWwuYXRvYiA9PSAnZnVuY3Rpb24nXG4gICAgICAgID8gZnVuY3Rpb24oYSl7IHJldHVybiBnbG9iYWwuYXRvYihhKSB9IDogZnVuY3Rpb24oYSl7XG4gICAgICAgIHJldHVybiBhLnJlcGxhY2UoL1xcU3sxLDR9L2csIGNiX2RlY29kZSk7XG4gICAgfTtcbiAgICB2YXIgYXRvYiA9IGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgcmV0dXJuIF9hdG9iKFN0cmluZyhhKS5yZXBsYWNlKC9bXkEtWmEtejAtOVxcK1xcL10vZywgJycpKTtcbiAgICB9O1xuICAgIHZhciBfZGVjb2RlID0gZnVuY3Rpb24oYSkgeyByZXR1cm4gYnRvdShfYXRvYihhKSkgfTtcbiAgICB2YXIgX2Zyb21VUkkgPSBmdW5jdGlvbihhKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcoYSkucmVwbGFjZSgvWy1fXS9nLCBmdW5jdGlvbihtMCkge1xuICAgICAgICAgICAgcmV0dXJuIG0wID09ICctJyA/ICcrJyA6ICcvJ1xuICAgICAgICB9KS5yZXBsYWNlKC9bXkEtWmEtejAtOVxcK1xcL10vZywgJycpO1xuICAgIH07XG4gICAgdmFyIGRlY29kZSA9IGZ1bmN0aW9uKGEpe1xuICAgICAgICByZXR1cm4gX2RlY29kZShfZnJvbVVSSShhKSk7XG4gICAgfTtcbiAgICB2YXIgdG9VaW50OEFycmF5O1xuICAgIGlmIChnbG9iYWwuVWludDhBcnJheSkgdG9VaW50OEFycmF5ID0gZnVuY3Rpb24oYSkge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5mcm9tKGF0b2IoX2Zyb21VUkkoYSkpLCBmdW5jdGlvbihjKSB7XG4gICAgICAgICAgICByZXR1cm4gYy5jaGFyQ29kZUF0KDApO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHZhciBub0NvbmZsaWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBCYXNlNjQgPSBnbG9iYWwuQmFzZTY0O1xuICAgICAgICBnbG9iYWwuQmFzZTY0ID0gX0Jhc2U2NDtcbiAgICAgICAgcmV0dXJuIEJhc2U2NDtcbiAgICB9O1xuICAgIC8vIGV4cG9ydCBCYXNlNjRcbiAgICBnbG9iYWwuQmFzZTY0ID0ge1xuICAgICAgICBWRVJTSU9OOiB2ZXJzaW9uLFxuICAgICAgICBhdG9iOiBhdG9iLFxuICAgICAgICBidG9hOiBidG9hLFxuICAgICAgICBmcm9tQmFzZTY0OiBkZWNvZGUsXG4gICAgICAgIHRvQmFzZTY0OiBlbmNvZGUsXG4gICAgICAgIHV0b2I6IHV0b2IsXG4gICAgICAgIGVuY29kZTogZW5jb2RlLFxuICAgICAgICBlbmNvZGVVUkk6IGVuY29kZVVSSSxcbiAgICAgICAgYnRvdTogYnRvdSxcbiAgICAgICAgZGVjb2RlOiBkZWNvZGUsXG4gICAgICAgIG5vQ29uZmxpY3Q6IG5vQ29uZmxpY3QsXG4gICAgICAgIGZyb21VaW50OEFycmF5OiBmcm9tVWludDhBcnJheSxcbiAgICAgICAgdG9VaW50OEFycmF5OiB0b1VpbnQ4QXJyYXlcbiAgICB9O1xuICAgIC8vIGlmIEVTNSBpcyBhdmFpbGFibGUsIG1ha2UgQmFzZTY0LmV4dGVuZFN0cmluZygpIGF2YWlsYWJsZVxuICAgIGlmICh0eXBlb2YgT2JqZWN0LmRlZmluZVByb3BlcnR5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhciBub0VudW0gPSBmdW5jdGlvbih2KXtcbiAgICAgICAgICAgIHJldHVybiB7dmFsdWU6dixlbnVtZXJhYmxlOmZhbHNlLHdyaXRhYmxlOnRydWUsY29uZmlndXJhYmxlOnRydWV9O1xuICAgICAgICB9O1xuICAgICAgICBnbG9iYWwuQmFzZTY0LmV4dGVuZFN0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICBTdHJpbmcucHJvdG90eXBlLCAnZnJvbUJhc2U2NCcsIG5vRW51bShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWNvZGUodGhpcylcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgICAgICAgICAgICAgU3RyaW5nLnByb3RvdHlwZSwgJ3RvQmFzZTY0Jywgbm9FbnVtKGZ1bmN0aW9uICh1cmlzYWZlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbmNvZGUodGhpcywgdXJpc2FmZSlcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgICAgICAgICAgICAgU3RyaW5nLnByb3RvdHlwZSwgJ3RvQmFzZTY0VVJJJywgbm9FbnVtKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVuY29kZSh0aGlzLCB0cnVlKVxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLy9cbiAgICAvLyBleHBvcnQgQmFzZTY0IHRvIHRoZSBuYW1lc3BhY2VcbiAgICAvL1xuICAgIGlmIChnbG9iYWxbJ01ldGVvciddKSB7IC8vIE1ldGVvci5qc1xuICAgICAgICBCYXNlNjQgPSBnbG9iYWwuQmFzZTY0O1xuICAgIH1cbiAgICAvLyBtb2R1bGUuZXhwb3J0cyBhbmQgQU1EIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuXG4gICAgLy8gbW9kdWxlLmV4cG9ydHMgaGFzIHByZWNlZGVuY2UuXG4gICAgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzLkJhc2U2NCA9IGdsb2JhbC5CYXNlNjQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICAvLyBBTUQuIFJlZ2lzdGVyIGFzIGFuIGFub255bW91cyBtb2R1bGUuXG4gICAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24oKXsgcmV0dXJuIGdsb2JhbC5CYXNlNjQgfSk7XG4gICAgfVxuICAgIC8vIHRoYXQncyBpdCFcbiAgICByZXR1cm4ge0Jhc2U2NDogZ2xvYmFsLkJhc2U2NH1cbn0pKTtcbiIsImltcG9ydCBGb3JtRGF0YSBmcm9tIFwiZm9ybS1kYXRhXCI7XG5pbXBvcnQgcXMgZnJvbSBcInFzXCI7XG5pbXBvcnQgeyBCYXNlNjQgfSBmcm9tIFwianMtYmFzZTY0XCI7XG5cbmltcG9ydCB7XG4gIFJlcXVlc3RDb25maWdCdWlsZGVyLFxuICBSZXF1ZXN0Q29uZmlnLFxuICBIdHRwTWV0aG9kLFxuICBQYXJhbXMsXG4gIFByb3h5Q29uZmlnLFxufSBmcm9tIFwiLi9odHRwL0h0dHBDbGllbnRJbnRlcmZhY2VcIjtcbmltcG9ydCB7IEJhc2ljQXV0aCwgRGlzY3JpbWluYXRlZEF1dGggfSBmcm9tIFwiLi90eXBlcy9hdXRoXCI7XG5pbXBvcnQgeyBwbGF0Zm9ybURlcHMgfSBmcm9tIFwiLi9wbGF0Zm9ybS9cIjtcblxudHlwZSBEYXRhID0gUGFyYW1zIHwgRm9ybURhdGE7XG5cbnR5cGUgS2ludG9uZUF1dGhIZWFkZXIgPVxuICB8IHtcbiAgICAgIFwiWC1DeWJvenUtQXV0aG9yaXphdGlvblwiOiBzdHJpbmc7XG4gICAgICBBdXRob3JpemF0aW9uPzogc3RyaW5nO1xuICAgIH1cbiAgfCB7XG4gICAgICBcIlgtQ3lib3p1LUFQSS1Ub2tlblwiOiBzdHJpbmc7XG4gICAgICBBdXRob3JpemF0aW9uPzogc3RyaW5nO1xuICAgIH1cbiAgfCB7XG4gICAgICBcIlgtUmVxdWVzdGVkLVdpdGhcIjogXCJYTUxIdHRwUmVxdWVzdFwiO1xuICAgICAgQXV0aG9yaXphdGlvbj86IHN0cmluZztcbiAgICB9XG4gIHwge1xuICAgICAgQXV0aG9yaXphdGlvbjogc3RyaW5nO1xuICAgIH07XG5cbmNvbnN0IFRIUkVTSE9MRF9BVk9JRF9SRVFVRVNUX1VSTF9UT09fTEFSR0UgPSA0MDk2O1xuXG5leHBvcnQgY2xhc3MgS2ludG9uZVJlcXVlc3RDb25maWdCdWlsZGVyIGltcGxlbWVudHMgUmVxdWVzdENvbmZpZ0J1aWxkZXIge1xuICBwcml2YXRlIGJhc2VVcmw6IHN0cmluZztcbiAgcHJpdmF0ZSBoZWFkZXJzOiBLaW50b25lQXV0aEhlYWRlcjtcbiAgcHJpdmF0ZSBhdXRoOiBEaXNjcmltaW5hdGVkQXV0aDtcbiAgcHJpdmF0ZSBjbGllbnRDZXJ0QXV0aD86XG4gICAgfCB7XG4gICAgICAgIHBmeDogQnVmZmVyO1xuICAgICAgICBwYXNzd29yZDogc3RyaW5nO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICBwZnhGaWxlUGF0aDogc3RyaW5nO1xuICAgICAgICBwYXNzd29yZDogc3RyaW5nO1xuICAgICAgfTtcbiAgcHJpdmF0ZSBwcm94eT86IFByb3h5Q29uZmlnO1xuICBwcml2YXRlIHJlcXVlc3RUb2tlbjogc3RyaW5nIHwgbnVsbDtcblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgYmFzZVVybCxcbiAgICBhdXRoLFxuICAgIGJhc2ljQXV0aCxcbiAgICBjbGllbnRDZXJ0QXV0aCxcbiAgICBwcm94eSxcbiAgICB1c2VyQWdlbnQsXG4gIH06IHtcbiAgICBiYXNlVXJsOiBzdHJpbmc7XG4gICAgYXV0aDogRGlzY3JpbWluYXRlZEF1dGg7XG4gICAgYmFzaWNBdXRoPzogQmFzaWNBdXRoO1xuICAgIGNsaWVudENlcnRBdXRoPzpcbiAgICAgIHwge1xuICAgICAgICAgIHBmeDogQnVmZmVyO1xuICAgICAgICAgIHBhc3N3b3JkOiBzdHJpbmc7XG4gICAgICAgIH1cbiAgICAgIHwge1xuICAgICAgICAgIHBmeEZpbGVQYXRoOiBzdHJpbmc7XG4gICAgICAgICAgcGFzc3dvcmQ6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICBwcm94eT86IFByb3h5Q29uZmlnO1xuICAgIHVzZXJBZ2VudD86IHN0cmluZztcbiAgfSkge1xuICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmw7XG4gICAgdGhpcy5hdXRoID0gYXV0aDtcbiAgICB0aGlzLmhlYWRlcnMgPSB0aGlzLmJ1aWxkSGVhZGVycyh7IGJhc2ljQXV0aCwgdXNlckFnZW50IH0pO1xuICAgIHRoaXMuY2xpZW50Q2VydEF1dGggPSBjbGllbnRDZXJ0QXV0aDtcbiAgICB0aGlzLnByb3h5ID0gcHJveHk7XG4gICAgdGhpcy5yZXF1ZXN0VG9rZW4gPSBudWxsO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGJ1aWxkKFxuICAgIG1ldGhvZDogSHR0cE1ldGhvZCxcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgcGFyYW1zOiBEYXRhLFxuICAgIG9wdGlvbnM/OiB7IHJlc3BvbnNlVHlwZTogXCJhcnJheWJ1ZmZlclwiIH1cbiAgKSB7XG4gICAgY29uc3QgcmVxdWVzdENvbmZpZzogUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIG1ldGhvZCxcbiAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcbiAgICAgIHVybDogYCR7dGhpcy5iYXNlVXJsfSR7cGF0aH1gLFxuICAgICAgLi4uKG9wdGlvbnMgPyBvcHRpb25zIDoge30pLFxuICAgICAgLi4ucGxhdGZvcm1EZXBzLmJ1aWxkUGxhdGZvcm1EZXBlbmRlbnRDb25maWcoe1xuICAgICAgICBjbGllbnRDZXJ0QXV0aDogdGhpcy5jbGllbnRDZXJ0QXV0aCxcbiAgICAgIH0pLFxuICAgICAgcHJveHk6IHRoaXMucHJveHksXG4gICAgfTtcblxuICAgIHN3aXRjaCAobWV0aG9kKSB7XG4gICAgICBjYXNlIFwiZ2V0XCI6IHtcbiAgICAgICAgY29uc3QgcmVxdWVzdFVybCA9IHRoaXMuYnVpbGRSZXF1ZXN0VXJsKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIGlmIChyZXF1ZXN0VXJsLmxlbmd0aCA+IFRIUkVTSE9MRF9BVk9JRF9SRVFVRVNUX1VSTF9UT09fTEFSR0UpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4ucmVxdWVzdENvbmZpZyxcbiAgICAgICAgICAgIG1ldGhvZDogXCJwb3N0XCIgYXMgY29uc3QsXG4gICAgICAgICAgICBoZWFkZXJzOiB7IC4uLnRoaXMuaGVhZGVycywgXCJYLUhUVFAtTWV0aG9kLU92ZXJyaWRlXCI6IFwiR0VUXCIgfSxcbiAgICAgICAgICAgIGRhdGE6IGF3YWl0IHRoaXMuYnVpbGREYXRhKHBhcmFtcyksXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnJlcXVlc3RDb25maWcsXG4gICAgICAgICAgdXJsOiByZXF1ZXN0VXJsLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY2FzZSBcInBvc3RcIjoge1xuICAgICAgICBpZiAocGFyYW1zIGluc3RhbmNlb2YgRm9ybURhdGEpIHtcbiAgICAgICAgICBjb25zdCBmb3JtRGF0YSA9IGF3YWl0IHRoaXMuYnVpbGREYXRhKHBhcmFtcyk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnJlcXVlc3RDb25maWcsXG4gICAgICAgICAgICBoZWFkZXJzOlxuICAgICAgICAgICAgICAvLyBOT1RFOiBmb3JtRGF0YS5nZXRIZWFkZXJzIGRvZXMgbm90IGV4aXN0IGluIGEgYnJvd3NlciBlbnZpcm9ubWVudC5cbiAgICAgICAgICAgICAgdHlwZW9mIGZvcm1EYXRhLmdldEhlYWRlcnMgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgICAgID8geyAuLi50aGlzLmhlYWRlcnMsIC4uLmZvcm1EYXRhLmdldEhlYWRlcnMoKSB9XG4gICAgICAgICAgICAgICAgOiB0aGlzLmhlYWRlcnMsXG4gICAgICAgICAgICBkYXRhOiBmb3JtRGF0YSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ucmVxdWVzdENvbmZpZyxcbiAgICAgICAgICBkYXRhOiBhd2FpdCB0aGlzLmJ1aWxkRGF0YShwYXJhbXMpLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY2FzZSBcInB1dFwiOiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ucmVxdWVzdENvbmZpZyxcbiAgICAgICAgICBkYXRhOiBhd2FpdCB0aGlzLmJ1aWxkRGF0YShwYXJhbXMpLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY2FzZSBcImRlbGV0ZVwiOiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RVcmwgPSB0aGlzLmJ1aWxkUmVxdWVzdFVybChcbiAgICAgICAgICBwYXRoLFxuICAgICAgICAgIGF3YWl0IHRoaXMuYnVpbGREYXRhKHBhcmFtcylcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5yZXF1ZXN0Q29uZmlnLFxuICAgICAgICAgIHVybDogcmVxdWVzdFVybCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke21ldGhvZH0gbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWRgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUmVxdWVzdFVybChwYXRoOiBzdHJpbmcsIHBhcmFtczogRGF0YSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMuYmFzZVVybH0ke3BhdGh9PyR7cXMuc3RyaW5naWZ5KHBhcmFtcyl9YDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYnVpbGREYXRhPFQgZXh0ZW5kcyBEYXRhPihwYXJhbXM6IFQpOiBQcm9taXNlPFQ+IHtcbiAgICBpZiAodGhpcy5hdXRoLnR5cGUgPT09IFwic2Vzc2lvblwiKSB7XG4gICAgICBjb25zdCByZXF1ZXN0VG9rZW4gPSBhd2FpdCB0aGlzLmdldFJlcXVlc3RUb2tlbigpO1xuICAgICAgaWYgKHBhcmFtcyBpbnN0YW5jZW9mIEZvcm1EYXRhKSB7XG4gICAgICAgIHBhcmFtcy5hcHBlbmQoXCJfX1JFUVVFU1RfVE9LRU5fX1wiLCByZXF1ZXN0VG9rZW4pO1xuICAgICAgICByZXR1cm4gcGFyYW1zO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgX19SRVFVRVNUX1RPS0VOX186IHJlcXVlc3RUb2tlbixcbiAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRIZWFkZXJzKHBhcmFtczoge1xuICAgIGJhc2ljQXV0aD86IEJhc2ljQXV0aDtcbiAgICB1c2VyQWdlbnQ/OiBzdHJpbmc7XG4gIH0pOiBLaW50b25lQXV0aEhlYWRlciB7XG4gICAgY29uc3QgeyBiYXNpY0F1dGgsIHVzZXJBZ2VudCB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IGJhc2ljQXV0aEhlYWRlcnMgPSBiYXNpY0F1dGhcbiAgICAgID8ge1xuICAgICAgICAgIEF1dGhvcml6YXRpb246IGBCYXNpYyAke0Jhc2U2NC5lbmNvZGUoXG4gICAgICAgICAgICBgJHtiYXNpY0F1dGgudXNlcm5hbWV9OiR7YmFzaWNBdXRoLnBhc3N3b3JkfWBcbiAgICAgICAgICApfWAsXG4gICAgICAgIH1cbiAgICAgIDoge307XG4gICAgY29uc3QgcGxhdGZvcm1EZXBzSGVhZGVycyA9IHBsYXRmb3JtRGVwcy5idWlsZEhlYWRlcnMoeyB1c2VyQWdlbnQgfSk7XG5cbiAgICBjb25zdCBjb21tb25IZWFkZXJzID0geyAuLi5wbGF0Zm9ybURlcHNIZWFkZXJzLCAuLi5iYXNpY0F1dGhIZWFkZXJzIH07XG5cbiAgICBzd2l0Y2ggKHRoaXMuYXV0aC50eXBlKSB7XG4gICAgICBjYXNlIFwicGFzc3dvcmRcIjoge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmNvbW1vbkhlYWRlcnMsXG4gICAgICAgICAgXCJYLUN5Ym96dS1BdXRob3JpemF0aW9uXCI6IEJhc2U2NC5lbmNvZGUoXG4gICAgICAgICAgICBgJHt0aGlzLmF1dGgudXNlcm5hbWV9OiR7dGhpcy5hdXRoLnBhc3N3b3JkfWBcbiAgICAgICAgICApLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY2FzZSBcImFwaVRva2VuXCI6IHtcbiAgICAgICAgY29uc3QgYXBpVG9rZW4gPSB0aGlzLmF1dGguYXBpVG9rZW47XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFwaVRva2VuKSkge1xuICAgICAgICAgIHJldHVybiB7IC4uLmNvbW1vbkhlYWRlcnMsIFwiWC1DeWJvenUtQVBJLVRva2VuXCI6IGFwaVRva2VuLmpvaW4oXCIsXCIpIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgLi4uY29tbW9uSGVhZGVycywgXCJYLUN5Ym96dS1BUEktVG9rZW5cIjogYXBpVG9rZW4gfTtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJvQXV0aFRva2VuXCI6IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5jb21tb25IZWFkZXJzLFxuICAgICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0aGlzLmF1dGgub0F1dGhUb2tlbn1gLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICByZXR1cm4geyAuLi5jb21tb25IZWFkZXJzLCBcIlgtUmVxdWVzdGVkLVdpdGhcIjogXCJYTUxIdHRwUmVxdWVzdFwiIH07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRSZXF1ZXN0VG9rZW4oKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAodGhpcy5yZXF1ZXN0VG9rZW4gPT09IG51bGwpIHtcbiAgICAgIHRoaXMucmVxdWVzdFRva2VuID0gYXdhaXQgcGxhdGZvcm1EZXBzLmdldFJlcXVlc3RUb2tlbigpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0VG9rZW47XG4gIH1cbn1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyB7fS50b1N0cmluZyA6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gJ1tvYmplY3QgJyArIGNsYXNzb2YodGhpcykgKyAnXSc7XG59O1xuIiwidmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC10by1zdHJpbmcnKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nXG5pZiAoIVRPX1NUUklOR19UQUdfU1VQUE9SVCkge1xuICByZWRlZmluZShPYmplY3QucHJvdG90eXBlLCAndG9TdHJpbmcnLCB0b1N0cmluZywgeyB1bnNhZmU6IHRydWUgfSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG52YXIgUFJPUEVSX0ZVTkNUSU9OX05BTUUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpLlBST1BFUjtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyICR0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGZsYWdzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1mbGFncycpO1xuXG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciBSZWdFeHBQcm90b3R5cGUgPSBSZWdFeHAucHJvdG90eXBlO1xudmFyIG5hdGl2ZVRvU3RyaW5nID0gUmVnRXhwUHJvdG90eXBlW1RPX1NUUklOR107XG5cbnZhciBOT1RfR0VORVJJQyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5hdGl2ZVRvU3RyaW5nLmNhbGwoeyBzb3VyY2U6ICdhJywgZmxhZ3M6ICdiJyB9KSAhPSAnL2EvYic7IH0pO1xuLy8gRkY0NC0gUmVnRXhwI3RvU3RyaW5nIGhhcyBhIHdyb25nIG5hbWVcbnZhciBJTkNPUlJFQ1RfTkFNRSA9IFBST1BFUl9GVU5DVElPTl9OQU1FICYmIG5hdGl2ZVRvU3RyaW5nLm5hbWUgIT0gVE9fU1RSSU5HO1xuXG4vLyBgUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUudG9zdHJpbmdcbmlmIChOT1RfR0VORVJJQyB8fCBJTkNPUlJFQ1RfTkFNRSkge1xuICByZWRlZmluZShSZWdFeHAucHJvdG90eXBlLCBUT19TVFJJTkcsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHZhciBSID0gYW5PYmplY3QodGhpcyk7XG4gICAgdmFyIHAgPSAkdG9TdHJpbmcoUi5zb3VyY2UpO1xuICAgIHZhciByZiA9IFIuZmxhZ3M7XG4gICAgdmFyIGYgPSAkdG9TdHJpbmcocmYgPT09IHVuZGVmaW5lZCAmJiBSIGluc3RhbmNlb2YgUmVnRXhwICYmICEoJ2ZsYWdzJyBpbiBSZWdFeHBQcm90b3R5cGUpID8gZmxhZ3MuY2FsbChSKSA6IHJmKTtcbiAgICByZXR1cm4gJy8nICsgcCArICcvJyArIGY7XG4gIH0sIHsgdW5zYWZlOiB0cnVlIH0pO1xufVxuIiwiZXhwb3J0IGNsYXNzIEtpbnRvbmVBYm9ydFNlYXJjaEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcblxuICAgIHRoaXMubmFtZSA9IFwiS2ludG9uZUFib3J0U2VhcmNoRXJyb3JcIjtcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L3dpa2kvQnJlYWtpbmctQ2hhbmdlcyNleHRlbmRpbmctYnVpbHQtaW5zLWxpa2UtZXJyb3ItYXJyYXktYW5kLW1hcC1tYXktbm8tbG9uZ2VyLXdvcmtcbiAgICAvLyBTZXQgdGhlIHByb3RvdHlwZSBleHBsaWNpdGx5LlxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBLaW50b25lQWJvcnRTZWFyY2hFcnJvci5wcm90b3R5cGUpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBFcnJvclJlc3BvbnNlIH0gZnJvbSBcIi4uL2h0dHAvSHR0cENsaWVudEludGVyZmFjZVwiO1xuXG50eXBlIFNpbmdsZUVycm9yUmVzcG9uc2VEYXRhID0ge1xuICBpZDogc3RyaW5nO1xuICBjb2RlOiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgZXJyb3JzPzogYW55O1xufTtcblxudHlwZSBCdWxrUmVxdWVzdEVycm9yUmVzcG9uc2VEYXRhID0ge1xuICByZXN1bHRzOiBBcnJheTxTaW5nbGVFcnJvclJlc3BvbnNlRGF0YSB8IHt9Pjtcbn07XG5cbnR5cGUgS2ludG9uZUVycm9yUmVzcG9uc2VEYXRhID1cbiAgfCBTaW5nbGVFcnJvclJlc3BvbnNlRGF0YVxuICB8IEJ1bGtSZXF1ZXN0RXJyb3JSZXNwb25zZURhdGE7XG5cbmV4cG9ydCB0eXBlIEtpbnRvbmVFcnJvclJlc3BvbnNlID0gRXJyb3JSZXNwb25zZTxLaW50b25lRXJyb3JSZXNwb25zZURhdGE+O1xuXG5leHBvcnQgY2xhc3MgS2ludG9uZVJlc3RBUElFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgaWQ6IHN0cmluZztcbiAgY29kZTogc3RyaW5nO1xuICBzdGF0dXM6IG51bWJlcjtcbiAgYnVsa1JlcXVlc3RJbmRleD86IG51bWJlcjtcbiAgaGVhZGVyczogYW55O1xuICBlcnJvcnM/OiBhbnk7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZmluZEVycm9yUmVzcG9uc2VEYXRhV2l0aEluZGV4KFxuICAgIHJlc3VsdHM6IEJ1bGtSZXF1ZXN0RXJyb3JSZXNwb25zZURhdGFbXCJyZXN1bHRzXCJdXG4gICkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHJlc3VsdHNbaV0pLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICBjb25zdCBkYXRhID0gcmVzdWx0c1tpXSBhcyBTaW5nbGVFcnJvclJlc3BvbnNlRGF0YTtcbiAgICAgICAgcmV0dXJuIHsgZGF0YSwgYnVsa1JlcXVlc3RJbmRleDogaSB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IEVycm9yKFxuICAgICAgXCJNaXNzaW5nIHJlc3BvbnNlIGRhdGEgaW4gYHJlc3VsdHNgLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gS2ludG9uZSBSRVNUIEFQSSBDbGllbnQuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGJ1aWxkRXJyb3JSZXNwb25zZURhdGVXaXRoSW5kZXgoZXJyb3I6IEtpbnRvbmVFcnJvclJlc3BvbnNlKToge1xuICAgIGRhdGE6IFNpbmdsZUVycm9yUmVzcG9uc2VEYXRhO1xuICAgIGJ1bGtSZXF1ZXN0SW5kZXg/OiBudW1iZXI7XG4gIH0ge1xuICAgIGlmIChcInJlc3VsdHNcIiBpbiBlcnJvci5kYXRhKSB7XG4gICAgICByZXR1cm4gS2ludG9uZVJlc3RBUElFcnJvci5maW5kRXJyb3JSZXNwb25zZURhdGFXaXRoSW5kZXgoXG4gICAgICAgIGVycm9yLmRhdGEucmVzdWx0c1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgZGF0YTogZXJyb3IuZGF0YSB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IoZXJyb3I6IEtpbnRvbmVFcnJvclJlc3BvbnNlKSB7XG4gICAgY29uc3QgeyBkYXRhLCBidWxrUmVxdWVzdEluZGV4IH0gPVxuICAgICAgS2ludG9uZVJlc3RBUElFcnJvci5idWlsZEVycm9yUmVzcG9uc2VEYXRlV2l0aEluZGV4KGVycm9yKTtcblxuICAgIHN1cGVyKGRhdGEubWVzc2FnZSk7XG5cbiAgICB0aGlzLm5hbWUgPSBcIktpbnRvbmVSZXN0QVBJRXJyb3JcIjtcbiAgICB0aGlzLmlkID0gZGF0YS5pZDtcbiAgICB0aGlzLmNvZGUgPSBkYXRhLmNvZGU7XG4gICAgdGhpcy5lcnJvcnMgPSBkYXRhLmVycm9ycztcbiAgICB0aGlzLnN0YXR1cyA9IGVycm9yLnN0YXR1cztcbiAgICB0aGlzLmJ1bGtSZXF1ZXN0SW5kZXggPSBidWxrUmVxdWVzdEluZGV4O1xuICAgIHRoaXMuaGVhZGVycyA9IGVycm9yLmhlYWRlcnM7XG4gICAgdGhpcy5tZXNzYWdlID0gYFske2Vycm9yLnN0YXR1c31dIFske3RoaXMuY29kZX1dICR7dGhpcy5tZXNzYWdlfSAoJHt0aGlzLmlkfSlgO1xuXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRXJyb3IjQ3VzdG9tX0Vycm9yX1R5cGVzXG4gICAgLy8gTWFpbnRhaW5zIHByb3BlciBzdGFjayB0cmFjZSBmb3Igd2hlcmUgb3VyIGVycm9yIHdhcyB0aHJvd24gKG9ubHkgYXZhaWxhYmxlIG9uIFY4KVxuICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgS2ludG9uZVJlc3RBUElFcnJvcik7XG4gICAgfVxuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L3dpa2kvQnJlYWtpbmctQ2hhbmdlcyNleHRlbmRpbmctYnVpbHQtaW5zLWxpa2UtZXJyb3ItYXJyYXktYW5kLW1hcC1tYXktbm8tbG9uZ2VyLXdvcmtcbiAgICAvLyBTZXQgdGhlIHByb3RvdHlwZSBleHBsaWNpdGx5LlxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBLaW50b25lUmVzdEFQSUVycm9yLnByb3RvdHlwZSk7XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIEVycm9yUmVzcG9uc2UsXG4gIEh0dHBDbGllbnRFcnJvcixcbiAgUmVzcG9uc2UsXG4gIFJlc3BvbnNlSGFuZGxlcixcbn0gZnJvbSBcIi4vaHR0cC9IdHRwQ2xpZW50SW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBLaW50b25lQWJvcnRTZWFyY2hFcnJvciB9IGZyb20gXCIuL2Vycm9yL0tpbnRvbmVBYm9ydFNlYXJjaEVycm9yXCI7XG5pbXBvcnQge1xuICBLaW50b25lUmVzdEFQSUVycm9yLFxuICBLaW50b25lRXJyb3JSZXNwb25zZSxcbn0gZnJvbSBcIi4vZXJyb3IvS2ludG9uZVJlc3RBUElFcnJvclwiO1xuXG5leHBvcnQgY2xhc3MgS2ludG9uZVJlc3BvbnNlSGFuZGxlciBpbXBsZW1lbnRzIFJlc3BvbnNlSGFuZGxlciB7XG4gIHByaXZhdGUgZW5hYmxlQWJvcnRTZWFyY2hFcnJvcjogYm9vbGVhbjtcbiAgY29uc3RydWN0b3IoeyBlbmFibGVBYm9ydFNlYXJjaEVycm9yIH06IHsgZW5hYmxlQWJvcnRTZWFyY2hFcnJvcjogYm9vbGVhbiB9KSB7XG4gICAgdGhpcy5lbmFibGVBYm9ydFNlYXJjaEVycm9yID0gZW5hYmxlQWJvcnRTZWFyY2hFcnJvcjtcbiAgfVxuICBoYW5kbGU8VD4ocmVzcG9uc2U6IFByb21pc2U8UmVzcG9uc2U8VD4+KTogUHJvbWlzZTxUPiB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLnRoZW4oXG4gICAgICAocmVzKSA9PiB0aGlzLmhhbmRsZVN1Y2Nlc3NSZXNwb25zZTxUPihyZXMpLFxuICAgICAgKGVycm9yKSA9PiB0aGlzLmhhbmRsZUVycm9yUmVzcG9uc2UoZXJyb3IpXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGhhbmRsZVN1Y2Nlc3NSZXNwb25zZTxUPihyZXNwb25zZTogUmVzcG9uc2U8VD4pOiBUIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmVuYWJsZUFib3J0U2VhcmNoRXJyb3IgJiZcbiAgICAgIC9GaWx0ZXIgYWJvcnRlZCBiZWNhdXNlIG9mIHRvbyBtYW55IHNlYXJjaCByZXN1bHRzLy50ZXN0KFxuICAgICAgICByZXNwb25zZS5oZWFkZXJzW1wieC1jeWJvenUtd2FybmluZ1wiXVxuICAgICAgKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEtpbnRvbmVBYm9ydFNlYXJjaEVycm9yKHJlc3BvbnNlLmhlYWRlcnNbXCJ4LWN5Ym96dS13YXJuaW5nXCJdKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gIH1cbiAgcHJpdmF0ZSBoYW5kbGVFcnJvclJlc3BvbnNlKFxuICAgIGVycm9yOiBIdHRwQ2xpZW50RXJyb3I8RXJyb3JSZXNwb25zZTxzdHJpbmc+IHwgS2ludG9uZUVycm9yUmVzcG9uc2U+XG4gICk6IG5ldmVyIHtcbiAgICBpZiAoIWVycm9yLnJlc3BvbnNlKSB7XG4gICAgICAvLyBGSVhNRTogZmluZCBhIGJldHRlciB3YXkgdG8gaGFuZGxlIHRoaXMgZXJyb3JcbiAgICAgIGlmICgvbWFjIHZlcmlmeSBmYWlsdXJlLy50ZXN0KGVycm9yLnRvU3RyaW5nKCkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgY2xpZW50Q2VydEF1dGggc2V0dGluZ1wiKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICBjb25zdCBlcnJvclJlc3BvbnNlID0gZXJyb3IucmVzcG9uc2U7XG5cbiAgICBjb25zdCB7IGRhdGEsIC4uLnJlc3QgfSA9IGVycm9yUmVzcG9uc2U7XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7cmVzdC5zdGF0dXN9OiAke3Jlc3Quc3RhdHVzVGV4dH1gKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEtpbnRvbmVSZXN0QVBJRXJyb3IoeyBkYXRhLCAuLi5yZXN0IH0pO1xuICB9XG59XG4iLCJpbXBvcnQgeyBCdWxrUmVxdWVzdENsaWVudCwgRW5kcG9pbnROYW1lIH0gZnJvbSBcIi4vY2xpZW50L0J1bGtSZXF1ZXN0Q2xpZW50XCI7XG5pbXBvcnQgeyBBcHBDbGllbnQgfSBmcm9tIFwiLi9jbGllbnQvQXBwQ2xpZW50XCI7XG5pbXBvcnQgeyBSZWNvcmRDbGllbnQgfSBmcm9tIFwiLi9jbGllbnQvUmVjb3JkQ2xpZW50XCI7XG5pbXBvcnQgeyBGaWxlQ2xpZW50IH0gZnJvbSBcIi4vY2xpZW50L0ZpbGVDbGllbnRcIjtcbmltcG9ydCB7IERlZmF1bHRIdHRwQ2xpZW50IH0gZnJvbSBcIi4vaHR0cC9cIjtcbmltcG9ydCB7IFByb3h5Q29uZmlnIH0gZnJvbSBcIi4vaHR0cC9IdHRwQ2xpZW50SW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBCYXNpY0F1dGgsIERpc2NyaW1pbmF0ZWRBdXRoIH0gZnJvbSBcIi4vdHlwZXMvYXV0aFwiO1xuaW1wb3J0IHsgS2ludG9uZVJlcXVlc3RDb25maWdCdWlsZGVyIH0gZnJvbSBcIi4vS2ludG9uZVJlcXVlc3RDb25maWdCdWlsZGVyXCI7XG5pbXBvcnQgeyBLaW50b25lUmVzcG9uc2VIYW5kbGVyIH0gZnJvbSBcIi4vS2ludG9uZVJlc3BvbnNlSGFuZGxlclwiO1xuaW1wb3J0IHsgcGxhdGZvcm1EZXBzIH0gZnJvbSBcIi4vcGxhdGZvcm0vaW5kZXhcIjtcbmltcG9ydCB7IFVuc3VwcG9ydGVkUGxhdGZvcm1FcnJvciB9IGZyb20gXCIuL3BsYXRmb3JtL1Vuc3VwcG9ydGVkUGxhdGZvcm1FcnJvclwiO1xuXG50eXBlIE9taXRUeXBlUHJvcGVydHlGcm9tVW5pb248VD4gPSBUIGV4dGVuZHMgdW5rbm93biA/IE9taXQ8VCwgXCJ0eXBlXCI+IDogbmV2ZXI7XG50eXBlIEF1dGggPSBPbWl0VHlwZVByb3BlcnR5RnJvbVVuaW9uPERpc2NyaW1pbmF0ZWRBdXRoPjtcblxudHlwZSBPcHRpb25zID0ge1xuICBiYXNlVXJsPzogc3RyaW5nO1xuICBhdXRoPzogQXV0aDtcbiAgZ3Vlc3RTcGFjZUlkPzogbnVtYmVyIHwgc3RyaW5nO1xuICBiYXNpY0F1dGg/OiBCYXNpY0F1dGg7XG4gIGNsaWVudENlcnRBdXRoPzpcbiAgICB8IHtcbiAgICAgICAgcGZ4OiBCdWZmZXI7XG4gICAgICAgIHBhc3N3b3JkOiBzdHJpbmc7XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHBmeEZpbGVQYXRoOiBzdHJpbmc7XG4gICAgICAgIHBhc3N3b3JkOiBzdHJpbmc7XG4gICAgICB9O1xuICBwcm94eT86IFByb3h5Q29uZmlnO1xuICBmZWF0dXJlRmxhZ3M/OiB7XG4gICAgZW5hYmxlQWJvcnRTZWFyY2hFcnJvcjogYm9vbGVhbjtcbiAgfTtcbiAgdXNlckFnZW50Pzogc3RyaW5nO1xufTtcblxuY29uc3QgYnVpbGREaXNjcmltaW5hdGVkQXV0aCA9IChhdXRoOiBBdXRoKTogRGlzY3JpbWluYXRlZEF1dGggPT4ge1xuICBpZiAoXCJ1c2VybmFtZVwiIGluIGF1dGgpIHtcbiAgICByZXR1cm4geyB0eXBlOiBcInBhc3N3b3JkXCIsIC4uLmF1dGggfTtcbiAgfVxuICBpZiAoXCJhcGlUb2tlblwiIGluIGF1dGgpIHtcbiAgICByZXR1cm4geyB0eXBlOiBcImFwaVRva2VuXCIsIC4uLmF1dGggfTtcbiAgfVxuICBpZiAoXCJvQXV0aFRva2VuXCIgaW4gYXV0aCkge1xuICAgIHJldHVybiB7IHR5cGU6IFwib0F1dGhUb2tlblwiLCAuLi5hdXRoIH07XG4gIH1cbiAgdHJ5IHtcbiAgICByZXR1cm4gcGxhdGZvcm1EZXBzLmdldERlZmF1bHRBdXRoKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoZSBpbnN0YW5jZW9mIFVuc3VwcG9ydGVkUGxhdGZvcm1FcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgc2Vzc2lvbiBhdXRoZW50aWNhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGluICR7ZS5wbGF0Zm9ybX0gZW52aXJvbm1lbnQuYFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhyb3cgZTtcbiAgfVxufTtcblxuZXhwb3J0IGNsYXNzIEtpbnRvbmVSZXN0QVBJQ2xpZW50IHtcbiAgcmVjb3JkOiBSZWNvcmRDbGllbnQ7XG4gIGFwcDogQXBwQ2xpZW50O1xuICBmaWxlOiBGaWxlQ2xpZW50O1xuICBwcml2YXRlIGJ1bGtSZXF1ZXN0XzogQnVsa1JlcXVlc3RDbGllbnQ7XG4gIHByaXZhdGUgYmFzZVVybD86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBPcHRpb25zID0ge30pIHtcbiAgICB2YWxpZGF0ZU9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICB0aGlzLmJhc2VVcmwgPSBwbGF0Zm9ybURlcHMuYnVpbGRCYXNlVXJsKG9wdGlvbnMuYmFzZVVybCk7XG5cbiAgICBjb25zdCBhdXRoID0gYnVpbGREaXNjcmltaW5hdGVkQXV0aChvcHRpb25zLmF1dGggPz8ge30pO1xuICAgIGNvbnN0IHJlcXVlc3RDb25maWdCdWlsZGVyID0gbmV3IEtpbnRvbmVSZXF1ZXN0Q29uZmlnQnVpbGRlcih7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgYXV0aCxcbiAgICB9KTtcbiAgICBjb25zdCByZXNwb25zZUhhbmRsZXIgPSBuZXcgS2ludG9uZVJlc3BvbnNlSGFuZGxlcih7XG4gICAgICBlbmFibGVBYm9ydFNlYXJjaEVycm9yOlxuICAgICAgICBvcHRpb25zLmZlYXR1cmVGbGFncz8uZW5hYmxlQWJvcnRTZWFyY2hFcnJvciA/PyBmYWxzZSxcbiAgICB9KTtcbiAgICBjb25zdCBodHRwQ2xpZW50ID0gbmV3IERlZmF1bHRIdHRwQ2xpZW50KHtcbiAgICAgIHJlc3BvbnNlSGFuZGxlcixcbiAgICAgIHJlcXVlc3RDb25maWdCdWlsZGVyLFxuICAgIH0pO1xuICAgIGNvbnN0IHsgZ3Vlc3RTcGFjZUlkIH0gPSBvcHRpb25zO1xuXG4gICAgdGhpcy5idWxrUmVxdWVzdF8gPSBuZXcgQnVsa1JlcXVlc3RDbGllbnQoaHR0cENsaWVudCwgZ3Vlc3RTcGFjZUlkKTtcbiAgICB0aGlzLnJlY29yZCA9IG5ldyBSZWNvcmRDbGllbnQoaHR0cENsaWVudCwgdGhpcy5idWxrUmVxdWVzdF8sIGd1ZXN0U3BhY2VJZCk7XG4gICAgdGhpcy5hcHAgPSBuZXcgQXBwQ2xpZW50KGh0dHBDbGllbnQsIGd1ZXN0U3BhY2VJZCk7XG4gICAgdGhpcy5maWxlID0gbmV3IEZpbGVDbGllbnQoaHR0cENsaWVudCwgZ3Vlc3RTcGFjZUlkKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0IHZlcnNpb24oKSB7XG4gICAgcmV0dXJuIHBsYXRmb3JtRGVwcy5nZXRWZXJzaW9uKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QmFzZVVybCgpIHtcbiAgICByZXR1cm4gdGhpcy5iYXNlVXJsO1xuICB9XG5cbiAgcHVibGljIGJ1bGtSZXF1ZXN0KHBhcmFtczoge1xuICAgIHJlcXVlc3RzOiBBcnJheTxcbiAgICAgIHwge1xuICAgICAgICAgIG1ldGhvZDogc3RyaW5nO1xuICAgICAgICAgIGFwaTogc3RyaW5nO1xuICAgICAgICAgIHBheWxvYWQ6IG9iamVjdDtcbiAgICAgICAgfVxuICAgICAgfCB7XG4gICAgICAgICAgbWV0aG9kOiBzdHJpbmc7XG4gICAgICAgICAgZW5kcG9pbnROYW1lOiBFbmRwb2ludE5hbWU7XG4gICAgICAgICAgcGF5bG9hZDogb2JqZWN0O1xuICAgICAgICB9XG4gICAgPjtcbiAgfSk6IFByb21pc2U8eyByZXN1bHRzOiBBcnJheTx7IFtLOiBzdHJpbmddOiBhbnkgfT4gfT4ge1xuICAgIHJldHVybiB0aGlzLmJ1bGtSZXF1ZXN0Xy5zZW5kKHBhcmFtcyk7XG4gIH1cbn1cblxuY29uc3QgdmFsaWRhdGVPcHRpb25zID0gKG9wdGlvbnM6IE9wdGlvbnMpID0+IHtcbiAgdmFsaWRhdGVHdWVzdFNwYWNlSWQob3B0aW9ucy5ndWVzdFNwYWNlSWQpO1xufTtcblxuY29uc3QgdmFsaWRhdGVHdWVzdFNwYWNlSWQgPSAoZ3Vlc3RTcGFjZUlkOiBPcHRpb25zW1wiZ3Vlc3RTcGFjZUlkXCJdKSA9PiB7XG4gIGlmIChndWVzdFNwYWNlSWQgPT09IFwiXCIgfHwgZ3Vlc3RTcGFjZUlkID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGd1ZXN0U3BhY2VJZDogZ290IFske2d1ZXN0U3BhY2VJZH1dYCk7XG4gIH1cbn07XG4iLCJpbXBvcnQgeyBpbmplY3RQbGF0Zm9ybURlcHMgfSBmcm9tIFwiLi9wbGF0Zm9ybS9cIjtcbmltcG9ydCAqIGFzIGJyb3dzZXJEZXBzIGZyb20gXCIuL3BsYXRmb3JtL2Jyb3dzZXJcIjtcblxuaW5qZWN0UGxhdGZvcm1EZXBzKGJyb3dzZXJEZXBzKTtcblxuZXhwb3J0IHsgS2ludG9uZVJlc3RBUElDbGllbnQgfSBmcm9tIFwiLi9LaW50b25lUmVzdEFQSUNsaWVudFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZXJyb3JcIjtcbiJdLCJuYW1lcyI6WyJwbGF0Zm9ybURlcHMiLCJyZWFkRmlsZUZyb21QYXRoIiwiRXJyb3IiLCJnZXRSZXF1ZXN0VG9rZW4iLCJnZXREZWZhdWx0QXV0aCIsImJ1aWxkUGxhdGZvcm1EZXBlbmRlbnRDb25maWciLCJidWlsZEhlYWRlcnMiLCJidWlsZEZvcm1EYXRhVmFsdWUiLCJidWlsZEJhc2VVcmwiLCJnZXRWZXJzaW9uIiwiaW5qZWN0UGxhdGZvcm1EZXBzIiwiZGVwcyIsImdsb2JhbCIsImZhaWxzIiwicmVxdWlyZSQkMCIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciIsInRvU3RyaW5nIiwiY2xhc3NvZlJhdyIsImNsYXNzb2YiLCJyZXF1aXJlJCQxIiwicmVxdWlyZU9iamVjdENvZXJjaWJsZSIsIkluZGV4ZWRPYmplY3QiLCJ0b0luZGV4ZWRPYmplY3QiLCJpc0NhbGxhYmxlIiwiaXNPYmplY3QiLCJnZXRCdWlsdEluIiwicHJvY2VzcyIsInZlcnNpb25zIiwibWF0Y2giLCJ2ZXJzaW9uIiwiVjhfVkVSU0lPTiIsIk5BVElWRV9TWU1CT0wiLCJVU0VfU1lNQk9MX0FTX1VJRCIsInJlcXVpcmUkJDIiLCJpc1N5bWJvbCIsInRyeVRvU3RyaW5nIiwiYUNhbGxhYmxlIiwiZ2V0TWV0aG9kIiwib3JkaW5hcnlUb1ByaW1pdGl2ZSIsInNldEdsb2JhbCIsInN0b3JlIiwic2hhcmVkTW9kdWxlIiwidG9PYmplY3QiLCJ1aWQiLCJzaGFyZWQiLCJoYXNPd24iLCJyZXF1aXJlJCQzIiwicmVxdWlyZSQkNCIsInJlcXVpcmUkJDUiLCJTeW1ib2wiLCJ3ZWxsS25vd25TeW1ib2wiLCJ0b1ByaW1pdGl2ZSIsInRvUHJvcGVydHlLZXkiLCJkb2N1bWVudCIsIkVYSVNUUyIsImRvY3VtZW50Q3JlYXRlRWxlbWVudCIsIkRFU0NSSVBUT1JTIiwicHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUiLCJJRThfRE9NX0RFRklORSIsInJlcXVpcmUkJDYiLCJhbk9iamVjdCIsImRlZmluZVByb3BlcnR5TW9kdWxlIiwiY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5IiwiZnVuY3Rpb25Ub1N0cmluZyIsImluc3BlY3RTb3VyY2UiLCJXZWFrTWFwIiwia2V5cyIsInNoYXJlZEtleSIsImhpZGRlbktleXMiLCJyZXF1aXJlJCQ3IiwiaGFzIiwiRnVuY3Rpb25Qcm90b3R5cGUiLCJnZXRJbnRlcm5hbFN0YXRlIiwicmVkZWZpbmVNb2R1bGUiLCJ0b0ludGVnZXJPckluZmluaXR5IiwibWF4IiwibWluIiwidG9BYnNvbHV0ZUluZGV4IiwidG9MZW5ndGgiLCJsZW5ndGhPZkFycmF5TGlrZSIsImNyZWF0ZU1ldGhvZCIsImluZGV4T2YiLCJlbnVtQnVnS2V5cyIsImludGVybmFsT2JqZWN0S2V5cyIsImdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSIsIm93bktleXMiLCJjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzIiwiaXNGb3JjZWQiLCJkYXRhIiwicmVkZWZpbmUiLCJpc0FycmF5IiwiY3JlYXRlUHJvcGVydHkiLCJUT19TVFJJTkdfVEFHIiwiVE9fU1RSSU5HX1RBR19TVVBQT1JUIiwiZXhlYyIsImlzQ29uc3RydWN0b3IiLCJTUEVDSUVTIiwiYXJyYXlTcGVjaWVzQ29uc3RydWN0b3IiLCJhcnJheVNwZWNpZXNDcmVhdGUiLCJhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0IiwiJCIsInJlcXVpcmUkJDgiLCJyZXF1aXJlJCQ5IiwicmVxdWlyZSQkMTAiLCJ1bmRlZmluZWQiLCJkZWZpbmVQcm9wZXJ0eSIsIlVuc3VwcG9ydGVkUGxhdGZvcm1FcnJvciIsInBsYXRmb3JtIiwibWVzc2FnZSIsImNhcHR1cmVTdGFja1RyYWNlIiwibmFtZSIsIk9iamVjdCIsInNldFByb3RvdHlwZU9mIiwicHJvdG90eXBlIiwiZmlsZVBhdGgiLCJraW50b25lIiwiZ2Fyb29uIiwiY29ubmVjdCIsInR5cGUiLCJCbG9iIiwiYmFzZVVybCIsImxvY2F0aW9uIiwiaG9zdCIsInByb3RvY29sIiwiUEFDS0FHRV9WRVJTSU9OIiwiYmluZCIsInB1c2giLCJIQVNfU1BFQ0lFU19TVVBQT1JUIiwiYnVpbGRQYXRoIiwicGFyYW1zIiwiZW5kcG9pbnROYW1lIiwiZ3Vlc3RTcGFjZUlkIiwicHJldmlldyIsImd1ZXN0UGF0aCIsInByZXZpZXdQYXRoIiwiQnVsa1JlcXVlc3RDbGllbnQiLCJjbGllbnQiLCJSRVFVRVNUU19MRU5HVEhfTElNSVQiLCJyZXF1ZXN0c1BhcmFtIiwicmVxdWVzdHMiLCJtYXAiLCJyZXF1ZXN0IiwicmVzdCIsImFwaSIsImJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQiLCJwYXRoIiwicG9zdCIsIkFwcENsaWVudCIsImdldCIsInB1dCIsImRlbGV0ZSIsInNwYWNlIiwic3BhY2VQYXRoIiwiaWQiLCJkZWZhdWx0VGhyZWFkIiwidGhyZWFkIiwib2JqZWN0S2V5cyIsImFzc2lnbiIsInJlZ2V4cEZsYWdzIiwiJFJlZ0V4cCIsImh0bWwiLCJyZWdleHBFeGVjIiwiUmVnRXhwUHJvdG90eXBlIiwiYWR2YW5jZVN0cmluZ0luZGV4IiwiYVBvc3NpYmxlUHJvdG90eXBlIiwiaW5oZXJpdElmUmVxdWlyZWQiLCJ0aGlzTnVtYmVyVmFsdWUiLCJ3aGl0ZXNwYWNlcyIsInJlcXVpcmUkJDExIiwicmVxdWlyZSQkMTIiLCJ0cmltIiwicmVxdWlyZSQkMTMiLCJLaW50b25lQWxsUmVjb3Jkc0Vycm9yIiwicHJvY2Vzc2VkUmVjb3Jkc1Jlc3VsdCIsInVucHJvY2Vzc2VkUmVjb3JkcyIsIm51bU9mQWxsUmVjb3JkcyIsImVycm9yIiwiY2h1bmtMZW5ndGgiLCJudW1PZlByb2Nlc3NlZFJlY29yZHMiLCJsZW5ndGgiLCJlcnJvckluZGV4IiwiZXh0cmFjdEVycm9ySW5kZXgiLCJidWlsZEVycm9yTWVzc2FnZSIsImVycm9ycyIsImZpcnN0RXJyb3JLZXkiLCJyZXN1bHQiLCJOdW1iZXIiLCJidWxrUmVxdWVzdEluZGV4IiwiZXJyb3JQYXJzZVJlc3VsdCIsInBhcnNlRXJyb3JJbmRleCIsIkFERF9SRUNPUkRTX0xJTUlUIiwiVVBEQVRFX1JFQ09SRFNfTElNSVQiLCJERUxFVEVfUkVDT1JEU19MSU1JVCIsIlJlY29yZENsaWVudCIsImJ1bGtSZXF1ZXN0Q2xpZW50IiwiZGlkV2Fybk1heGltdW1PZmZzZXRWYWx1ZSIsImFwcCIsInVwZGF0ZUtleSIsInJlY29yZCIsImdldFJlY29yZHMiLCJxdWVyeSIsImZpZWxkIiwidmFsdWUiLCJyZWNvcmRzIiwiJGlkIiwidXBkYXRlUmVjb3JkIiwicmV2aXNpb24iLCJhZGRSZWNvcmQiLCJyZXNwb25zZSIsIndhcm5NYXhpbXVtT2Zmc2V0VmFsdWVJZk5lZWRlZCIsInJlZ2V4cCIsImNvbnNvbGUiLCJ3YXJuIiwiaWRzIiwicmV2aXNpb25zIiwiaSIsImNvbmRpdGlvbiIsIm9yZGVyQnkiLCJ3aXRoQ3Vyc29yIiwiZ2V0QWxsUmVjb3Jkc1dpdGhJZCIsImNvbmRpdGlvblF1ZXJ5IiwiZ2V0QWxsUmVjb3Jkc1dpdGhDdXJzb3IiLCJnZXRBbGxSZWNvcmRzV2l0aE9mZnNldCIsIm9yaWdpbmFsRmllbGRzIiwiZmllbGRzIiwiZ2V0QWxsUmVjb3Jkc1JlY3Vyc2l2ZVdpdGhJZCIsIkdFVF9SRUNPUkRTX0xJTUlUIiwiYWxsUmVjb3JkcyIsImNvbmNhdCIsImxhc3RSZWNvcmQiLCJsYXN0SWQiLCJnZXRBbGxSZWNvcmRzUmVjdXJzaXZlV2l0aE9mZnNldCIsIm9mZnNldCIsImNyZWF0ZUN1cnNvciIsImdldEFsbFJlY29yZHNSZWN1cnNpdmVCeUN1cnNvciIsImRlbGV0ZUN1cnNvciIsImdldFJlY29yZHNCeUN1cnNvciIsIm5leHQiLCJldmVyeSIsIkFycmF5IiwiYWRkQWxsUmVjb3Jkc1JlY3Vyc2l2ZSIsInJlc3VsdHMiLCJDSFVOS19MRU5HVEgiLCJyZWNvcmRzQ2h1bmsiLCJzbGljZSIsImFkZEFsbFJlY29yZHNXaXRoQnVsa1JlcXVlc3QiLCJuZXdSZXN1bHRzIiwic2VwYXJhdGVkUmVjb3JkcyIsInNlcGFyYXRlQXJyYXlSZWN1cnNpdmUiLCJtZXRob2QiLCJwYXlsb2FkIiwic2VuZCIsInJlZHVjZSIsImFjYyIsInVwZGF0ZUFsbFJlY29yZHNSZWN1cnNpdmUiLCJ1cGRhdGVBbGxSZWNvcmRzV2l0aEJ1bGtSZXF1ZXN0IiwiZGVsZXRlQWxsUmVjb3Jkc1JlY3Vyc2l2ZSIsImRlbGV0ZUFsbFJlY29yZHNXaXRoQnVsa1JlcXVlc3QiLCJzaXplIiwic2VwYXJhdGVkIiwiYXJyYXkiLCJjaHVuayIsImJyb3dzZXIiLCJGaWxlQ2xpZW50IiwiZm9ybURhdGEiLCJGb3JtRGF0YSIsImZpbGUiLCJhcHBlbmQiLCJwb3N0RGF0YSIsImdldERhdGEiLCJpc0J1ZmZlciIsImlzU3RyaW5nIiwiaXNOdW1iZXIiLCJpc0RhdGUiLCJtZXJnZSIsInV0aWxzIiwiZW5jb2RlIiwiYnVpbGRVUkwiLCJJbnRlcmNlcHRvck1hbmFnZXIiLCJub3JtYWxpemVIZWFkZXJOYW1lIiwiZW5oYW5jZUVycm9yIiwiY3JlYXRlRXJyb3IiLCJzZXR0bGUiLCJjb29raWVzIiwiaXNBYnNvbHV0ZVVSTCIsImNvbWJpbmVVUkxzIiwiYnVpbGRGdWxsUGF0aCIsInBhcnNlSGVhZGVycyIsImlzVVJMU2FtZU9yaWdpbiIsIkNhbmNlbCIsImRlZmF1bHRzIiwidHJhbnNmb3JtRGF0YSIsImlzQ2FuY2VsIiwiZGlzcGF0Y2hSZXF1ZXN0IiwibWVyZ2VDb25maWciLCJ2YWxpZGF0b3JzIiwidmFsaWRhdG9yIiwiQXhpb3MiLCJheGlvcyIsImF4aW9zTW9kdWxlIiwiQXhpb3NDbGllbnQiLCJyZXNwb25zZUhhbmRsZXIiLCJyZXF1ZXN0Q29uZmlnQnVpbGRlciIsImJ1aWxkIiwicmVxdWVzdENvbmZpZyIsInNlbmRSZXF1ZXN0IiwicmVzcG9uc2VUeXBlIiwiaGFuZGxlIiwibWF4Qm9keUxlbmd0aCIsIkluZmluaXR5IiwibWF4Q29udGVudExlbmd0aCIsImFycmF5TWV0aG9kSXNTdHJpY3QiLCJoYXNTeW1ib2xzIiwidG9TdHIiLCJpbXBsZW1lbnRhdGlvbiIsIiRTeW50YXhFcnJvciIsIiRGdW5jdGlvbiIsIiRUeXBlRXJyb3IiLCJnZXRFdmFsbGVkQ29uc3RydWN0b3IiLCIkZ09QRCIsInRocm93VHlwZUVycm9yIiwiVGhyb3dUeXBlRXJyb3IiLCJnZXRQcm90byIsIlR5cGVkQXJyYXkiLCJJTlRSSU5TSUNTIiwiTEVHQUNZX0FMSUFTRVMiLCIkY29uY2F0IiwiJHNwbGljZUFwcGx5IiwiJHJlcGxhY2UiLCJyZVByb3BOYW1lIiwicmVFc2NhcGVDaGFyIiwic3RyaW5nVG9QYXRoIiwiZ2V0QmFzZUludHJpbnNpYyIsImdldEludHJpbnNpYyIsIkdldEludHJpbnNpYyIsImNhbGxCb3VuZCIsIm9iamVjdFRvU3RyaW5nIiwiaXNSZWdFeHAiLCJmb3JtYXRzIiwic3RyaW5naWZ5IiwicGFyc2UiLCJ0aGlzIiwiVEhSRVNIT0xEX0FWT0lEX1JFUVVFU1RfVVJMX1RPT19MQVJHRSIsIktpbnRvbmVSZXF1ZXN0Q29uZmlnQnVpbGRlciIsImF1dGgiLCJiYXNpY0F1dGgiLCJjbGllbnRDZXJ0QXV0aCIsInByb3h5IiwidXNlckFnZW50IiwiaGVhZGVycyIsInJlcXVlc3RUb2tlbiIsIm9wdGlvbnMiLCJ1cmwiLCJyZXF1ZXN0VXJsIiwiYnVpbGRSZXF1ZXN0VXJsIiwiYnVpbGREYXRhIiwiZ2V0SGVhZGVycyIsInFzIiwiX19SRVFVRVNUX1RPS0VOX18iLCJiYXNpY0F1dGhIZWFkZXJzIiwiQXV0aG9yaXphdGlvbiIsIkJhc2U2NCIsInVzZXJuYW1lIiwicGFzc3dvcmQiLCJwbGF0Zm9ybURlcHNIZWFkZXJzIiwiY29tbW9uSGVhZGVycyIsImFwaVRva2VuIiwiam9pbiIsIm9BdXRoVG9rZW4iLCJLaW50b25lQWJvcnRTZWFyY2hFcnJvciIsIktpbnRvbmVSZXN0QVBJRXJyb3IiLCJidWlsZEVycm9yUmVzcG9uc2VEYXRlV2l0aEluZGV4IiwiY29kZSIsInN0YXR1cyIsImZpbmRFcnJvclJlc3BvbnNlRGF0YVdpdGhJbmRleCIsIktpbnRvbmVSZXNwb25zZUhhbmRsZXIiLCJlbmFibGVBYm9ydFNlYXJjaEVycm9yIiwidGhlbiIsInJlcyIsImhhbmRsZVN1Y2Nlc3NSZXNwb25zZSIsImhhbmRsZUVycm9yUmVzcG9uc2UiLCJ0ZXN0IiwiZXJyb3JSZXNwb25zZSIsInN0YXR1c1RleHQiLCJidWlsZERpc2NyaW1pbmF0ZWRBdXRoIiwiZSIsIktpbnRvbmVSZXN0QVBJQ2xpZW50IiwidmFsaWRhdGVPcHRpb25zIiwiZmVhdHVyZUZsYWdzIiwiaHR0cENsaWVudCIsIkRlZmF1bHRIdHRwQ2xpZW50IiwiYnVsa1JlcXVlc3RfIiwidmFsaWRhdGVHdWVzdFNwYWNlSWQiLCJicm93c2VyRGVwcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0VBY08sSUFBTUEsWUFBMEIsR0FBRztFQUN4Q0MsRUFBQUEsZ0JBQWdCLEVBQUUsNEJBQU07RUFDdEIsVUFBTSxJQUFJQyxLQUFKLENBQVUsaUJBQVYsQ0FBTjtFQUNELEdBSHVDO0VBSXhDQyxFQUFBQSxlQUFlLEVBQUUsMkJBQU07RUFDckIsVUFBTSxJ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QUFFLElBQUksUUFBUSxJQUFJLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0VBQzlDLElBQUksRUFBRSxHQUFHd0ksTUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2xCLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDN0IsSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFLElBQUksS0FBSyxLQUFLLEVBQUUsRUFBRTtFQUN0QyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQy9CLE1BQU0sSUFBSSxLQUFLLEtBQUssRUFBRSxJQUFJLEtBQUssS0FBSyxHQUFHLEVBQUUsT0FBTyxHQUFHLENBQUM7RUFDcEQsS0FBSyxNQUFNLElBQUksS0FBSyxLQUFLLEVBQUUsRUFBRTtFQUM3QixNQUFNLFFBQVEsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7RUFDOUIsUUFBUSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDLENBQUMsTUFBTTtFQUN6RCxRQUFRLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsQ0FBQyxNQUFNO0VBQzFELFFBQVEsU0FBUyxPQUFPLENBQUMsRUFBRSxDQUFDO0VBQzVCLE9BQU87RUFDUCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzNCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7RUFDN0IsTUFBTSxLQUFLLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtFQUMvQyxRQUFRLElBQUksR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0VBQ3hD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RUFBRTtFQUN0QixRQUFRLE9BQU8sTUFBTSxDQUFDO0VBQ3RCLEtBQUs7RUFDTCxJQUFJLElBQUksT0FBTyxHQUFHLEtBQUssU0FBUyxFQUFFO0VBQ2xDLFFBQVEsT0FBTyxHQUFHLEdBQUcsTUFBTSxHQUFHLE9BQU8sQ0FBQztFQUN0QyxLQUFLO0FBQ0w7RUFDQSxJQUFJLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFO0VBQ2pDLFFBQVEsT0FBTyxhQUFhLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0VBQ3hDLEtBQUs7RUFDTCxJQUFJLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFO0VBQ2pDLFFBQVEsSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFO0VBQ3ZCLFlBQVksT0FBTyxRQUFRLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO0VBQ25ELFNBQVM7RUFDVCxRQUFRLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQzNCLEtBQUs7RUFDTCxJQUFJLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFO0VBQ2pDLFFBQVEsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0VBQ2pDLEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxRQUFRLEdBQUcsT0FBTyxJQUFJLENBQUMsS0FBSyxLQUFLLFdBQVcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUN0RSxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssV0FBVyxFQUFFLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFO0VBQ3BELElBQUksSUFBSSxLQUFLLElBQUksUUFBUSxJQUFJLFFBQVEsR0FBRyxDQUFDLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFO0VBQ3RFLFFBQVEsT0FBT29CLFNBQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxTQUFTLEdBQUcsVUFBVSxDQUFDO0VBQ3JELEtBQUs7QUFDTDtFQUNBLElBQUksSUFBSSxNQUFNLEdB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Q0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQzFELGVBQWUsR0FBRyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDMUQsZUFBZSxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0VBQzFELFFBQVEsS0FBSyxHQUFHO0VBQ2hCLFlBQVksWUFBWSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDbkMsWUFBWSxZQUFZLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQztFQUMzQyxZQUFZLFlBQVksRUFBRSxDQUFDLFdBQVcsSUFBSSxDQUFDO0VBQzNDLFNBQVMsQ0FBQztFQUNWLFFBQVEsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0VBQzdDLFFBQVEsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQzlCLEtBQUssQ0FBQztFQUNOLElBQUksSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksSUFBSSxPQUFPLE1BQU0sQ0FBQyxJQUFJLElBQUksVUFBVTtFQUMvRCxVQUFVLFNBQVMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUM7RUFDNUQsUUFBUSxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0VBQ2hELEtBQUssQ0FBQztFQUNOLElBQUksSUFBSSxJQUFJLEdBQUcsU0FBUyxDQUFDLEVBQUU7RUFDM0IsUUFBUSxPQUFPLEtBQUssQ0FBQyxNQUFNLENB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
10145
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiS2ludG9uZVJlc3RBUElDbGllbnQuanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9wbGF0Zm9ybS9pbmRleC50cyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZmFpbHMuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWNhbGxhYmxlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtYnVpbHQtaW4uanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24uanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbmF0aXZlLXN5bWJvbC5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1zeW1ib2wuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZy5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1tZXRob2QuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1nbG9iYWwuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NoYXJlZC5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1vYmplY3QuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91aWQuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleS5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eS5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9uYXRpdmUtd2Vhay1tYXAuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLWtleS5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9oaWRkZW4ta2V5cy5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZGVmaW5lLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHkuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VudW0tYnVnLWtleXMuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vd24ta2V5cy5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2V4cG9ydC5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1hcnJheS5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHkuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NsYXNzb2YuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3IuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydC5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuZnVuY3Rpb24ubmFtZS5qcyIsIi4uL3NyYy9wbGF0Zm9ybS9VbnN1cHBvcnRlZFBsYXRmb3JtRXJyb3IudHMiLCIuLi9zcmMvcGxhdGZvcm0vYnJvd3Nlci50cyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5tYXAuanMiLCIuLi9zcmMvdXJsLnRzIiwiLi4vc3JjL2NsaWVudC9CdWxrUmVxdWVzdENsaWVudC50cyIsIi4uL3NyYy9jbGllbnQvQXBwQ2xpZW50LnRzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1hc3NpZ24uanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5hc3NpZ24uanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tc3RyaW5nLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1mbGFncy5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtc3RpY2t5LWhlbHBlcnMuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2h0bWwuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtZG90LWFsbC5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtbmNnLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1leGVjLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuZXhlYy5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYWR2YW5jZS1zdHJpbmctaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMtYWJzdHJhY3QuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5tYXRjaC5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZi5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmhlcml0LWlmLXJlcXVpcmVkLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RoaXMtbnVtYmVyLXZhbHVlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3doaXRlc3BhY2VzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N0cmluZy10cmltLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5udW1iZXIuY29uc3RydWN0b3IuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXRvLXN0cmluZy5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZy5qcyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuc2xpY2UuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5rZXlzLmpzIiwiLi4vc3JjL2Vycm9yL0tpbnRvbmVBbGxSZWNvcmRzRXJyb3IudHMiLCIuLi9zcmMvY2xpZW50L1JlY29yZENsaWVudC50cyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9mb3JtLWRhdGEvbGliL2Jyb3dzZXIuanMiLCIuLi9zcmMvY2xpZW50L0ZpbGVDbGllbnQudHMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYmluZC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvdXRpbHMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYnVpbGRVUkwuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvSW50ZXJjZXB0b3JNYW5hZ2VyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JvbGx1cC1wbHVnaW4tbm9kZS1nbG9iYWxzL3NyYy9nbG9iYWwuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy1lczYvYnJvd3Nlci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9ub3JtYWxpemVIZWFkZXJOYW1lLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2VuaGFuY2VFcnJvci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9jcmVhdGVFcnJvci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9zZXR0bGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29va2llcy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0Fic29sdXRlVVJMLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2NvbWJpbmVVUkxzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2J1aWxkRnVsbFBhdGguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcGFyc2VIZWFkZXJzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzVVJMU2FtZU9yaWdpbi5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMveGhyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS90cmFuc2Zvcm1EYXRhLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvaXNDYW5jZWwuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvZGlzcGF0Y2hSZXF1ZXN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL21lcmdlQ29uZmlnLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9lbnYvZGF0YS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy92YWxpZGF0b3IuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3MuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9DYW5jZWxUb2tlbi5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9zcHJlYWQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNBeGlvc0Vycm9yLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9heGlvcy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9pbmRleC5qcyIsIi4uL3NyYy9odHRwL0F4aW9zQ2xpZW50LnRzIiwiLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QuanMiLCIuLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmpvaW4uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvc2hhbXMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvaW5kZXguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbXBsZW1lbnRhdGlvbi5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9mdW5jdGlvbi1iaW5kL2luZGV4LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2hhcy9zcmMvaW5kZXguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZ2V0LWludHJpbnNpYy9pbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9zaWRlLWNoYW5uZWwvbm9kZV9tb2R1bGVzL2NhbGwtYmluZC9ub2RlX21vZHVsZXMvZ2V0LWludHJpbnNpYy9pbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9zaWRlLWNoYW5uZWwvbm9kZV9tb2R1bGVzL2NhbGwtYmluZC9pbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9zaWRlLWNoYW5uZWwvbm9kZV9tb2R1bGVzL2NhbGwtYmluZC9jYWxsQm91bmQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvc2lkZS1jaGFubmVsL25vZGVfbW9kdWxlcy9vYmplY3QtaW5zcGVjdC9pbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9zaWRlLWNoYW5uZWwvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvcXMvbGliL2Zvcm1hdHMuanMiLCIuLi9ub2RlX21vZHVsZXMvcXMvbGliL3V0aWxzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3FzL2xpYi9zdHJpbmdpZnkuanMiLCIuLi9ub2RlX21vZHVsZXMvcXMvbGliL3BhcnNlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3FzL2xpYi9pbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9qcy1iYXNlNjQvYmFzZTY0LmpzIiwiLi4vc3JjL0tpbnRvbmVSZXF1ZXN0Q29uZmlnQnVpbGRlci50cyIsIi4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLnRvLXN0cmluZy5qcyIsIi4uL3NyYy9lcnJvci9LaW50b25lQWJvcnRTZWFyY2hFcnJvci50cyIsIi4uL3NyYy9lcnJvci9LaW50b25lUmVzdEFQSUVycm9yLnRzIiwiLi4vc3JjL0tpbnRvbmVSZXNwb25zZUhhbmRsZXIudHMiLCIuLi9zcmMvS2ludG9uZVJlc3RBUElDbGllbnQudHMiLCIuLi9zcmMvaW5kZXguYnJvd3Nlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXNjcmltaW5hdGVkQXV0aCB9IGZyb20gXCIuLi90eXBlcy9hdXRoXCI7XG50eXBlIFBsYXRmb3JtRGVwcyA9IHtcbiAgcmVhZEZpbGVGcm9tUGF0aDogKFxuICAgIGZpbGVQYXRoOiBzdHJpbmdcbiAgKSA9PiBQcm9taXNlPHsgbmFtZTogc3RyaW5nOyBkYXRhOiB1bmtub3duIH0+O1xuICBnZXRSZXF1ZXN0VG9rZW46ICgpID0+IFByb21pc2U8c3RyaW5nPjtcbiAgZ2V0RGVmYXVsdEF1dGg6ICgpID0+IERpc2NyaW1pbmF0ZWRBdXRoO1xuICBidWlsZFBsYXRmb3JtRGVwZW5kZW50Q29uZmlnOiAocGFyYW1zOiBvYmplY3QpID0+IG9iamVjdDtcbiAgYnVpbGRIZWFkZXJzOiAocGFyYW1zOiB7IHVzZXJBZ2VudD86IHN0cmluZyB9KSA9PiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBidWlsZEZvcm1EYXRhVmFsdWU6IChkYXRhOiB1bmtub3duKSA9PiB1bmtub3duO1xuICBidWlsZEJhc2VVcmw6IChiYXNlVXJsPzogc3RyaW5nKSA9PiBzdHJpbmc7XG4gIGdldFZlcnNpb246ICgpID0+IHN0cmluZztcbn07XG5cbmV4cG9ydCBjb25zdCBwbGF0Zm9ybURlcHM6IFBsYXRmb3JtRGVwcyA9IHtcbiAgcmVhZEZpbGVGcm9tUGF0aDogKCkgPT4ge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfSxcbiAgZ2V0UmVxdWVzdFRva2VuOiAoKSA9PiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwibm90IGltcGxlbWVudGVkXCIpO1xuICB9LFxuICBnZXREZWZhdWx0QXV0aDogKCkgPT4ge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfSxcbiAgYnVpbGRQbGF0Zm9ybURlcGVuZGVudENvbmZpZzogKCkgPT4ge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfSxcbiAgYnVpbGRIZWFkZXJzOiAoKSA9PiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwibm90IGltcGxlbWVudGVkXCIpO1xuICB9LFxuICBidWlsZEZvcm1EYXRhVmFsdWU6ICgpID0+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJub3QgaW1wbGVtZW50ZWRcIik7XG4gIH0sXG4gIGJ1aWxkQmFzZVVybDogKCkgPT4ge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfSxcbiAgZ2V0VmVyc2lvbjogKCkgPT4ge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBpbmplY3RQbGF0Zm9ybURlcHMgPSAoZGVwczogUGFydGlhbDxQbGF0Zm9ybURlcHM+KSA9PiB7XG4gIHBsYXRmb3JtRGVwcy5yZWFkRmlsZUZyb21QYXRoID0gZGVwcy5yZWFkRmlsZUZyb21QYXRoITtcbiAgcGxhdGZvcm1EZXBzLmdldFJlcXVlc3RUb2tlbiA9IGRlcHMuZ2V0UmVxdWVzdFRva2VuITtcbiAgcGxhdGZvcm1EZXBzLmdldERlZmF1bHRBdXRoID0gZGVwcy5nZXREZWZhdWx0QXV0aCE7XG4gIHBsYXRmb3JtRGVwcy5idWlsZFBsYXRmb3JtRGVwZW5kZW50Q29uZmlnID1cbiAgICBkZXBzLmJ1aWxkUGxhdGZvcm1EZXBlbmRlbnRDb25maWchO1xuICBwbGF0Zm9ybURlcHMuYnVpbGRIZWFkZXJzID0gZGVwcy5idWlsZEhlYWRlcnMhO1xuICBwbGF0Zm9ybURlcHMuYnVpbGRGb3JtRGF0YVZhbHVlID0gZGVwcy5idWlsZEZvcm1EYXRhVmFsdWUhO1xuICBwbGF0Zm9ybURlcHMuYnVpbGRCYXNlVXJsID0gZGVwcy5idWlsZEJhc2VVcmwhO1xuICBwbGF0Zm9ybURlcHMuZ2V0VmVyc2lvbiA9IGRlcHMuZ2V0VmVyc2lvbiE7XG59O1xuIiwidmFyIGNoZWNrID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAmJiBpdC5NYXRoID09IE1hdGggJiYgaXQ7XG59O1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxubW9kdWxlLmV4cG9ydHMgPVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZ2xvYmFsLXRoaXMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2YgZ2xvYmFsVGhpcyA9PSAnb2JqZWN0JyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYpIHx8XG4gIGNoZWNrKHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsKSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmMgLS0gZmFsbGJhY2tcbiAgKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pKCkgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gRGV0ZWN0IElFOCdzIGluY29tcGxldGUgZGVmaW5lUHJvcGVydHkgaW1wbGVtZW50YXRpb25cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAxLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KVsxXSAhPSA3O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gTmFzaG9ybiB+IEpESzggYnVnXG52YXIgTkFTSE9STl9CVUcgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgJiYgISRwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHsgMTogMiB9LCAxKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGVgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnByb3BlcnR5aXNlbnVtZXJhYmxlXG5leHBvcnRzLmYgPSBOQVNIT1JOX0JVRyA/IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKFYpIHtcbiAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcywgVik7XG4gIHJldHVybiAhIWRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlO1xufSA6ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbnZhciBzcGxpdCA9ICcnLnNwbGl0O1xuXG4vLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHRocm93cyBhbiBlcnJvciBpbiByaGlubywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3JoaW5vL2lzc3Vlcy8zNDZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiAhT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCk7XG59KSA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY2xhc3NvZihpdCkgPT0gJ1N0cmluZycgPyBzcGxpdC5jYWxsKGl0LCAnJykgOiBPYmplY3QoaXQpO1xufSA6IE9iamVjdDtcbiIsIi8vIGBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVxdWlyZW9iamVjdGNvZXJjaWJsZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCIvLyB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSW5kZXhlZE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGl0KSk7XG59O1xuIiwiLy8gYElzQ2FsbGFibGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NhbGxhYmxlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nO1xufTtcbiIsInZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiBpc0NhbGxhYmxlKGl0KTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIGFGdW5jdGlvbiA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gaXNDYWxsYWJsZShhcmd1bWVudCkgPyBhcmd1bWVudCA6IHVuZGVmaW5lZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWV0aG9kKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGFGdW5jdGlvbihnbG9iYWxbbmFtZXNwYWNlXSkgOiBnbG9iYWxbbmFtZXNwYWNlXSAmJiBnbG9iYWxbbmFtZXNwYWNlXVttZXRob2RdO1xufTtcbiIsInZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ25hdmlnYXRvcicsICd1c2VyQWdlbnQnKSB8fCAnJztcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgRGVubyA9IGdsb2JhbC5EZW5vO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zIHx8IERlbm8gJiYgRGVuby52ZXJzaW9uO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjg7XG52YXIgbWF0Y2gsIHZlcnNpb247XG5cbmlmICh2OCkge1xuICBtYXRjaCA9IHY4LnNwbGl0KCcuJyk7XG4gIHZlcnNpb24gPSBtYXRjaFswXSA8IDQgPyAxIDogbWF0Y2hbMF0gKyBtYXRjaFsxXTtcbn0gZWxzZSBpZiAodXNlckFnZW50KSB7XG4gIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9FZGdlXFwvKFxcZCspLyk7XG4gIGlmICghbWF0Y2ggfHwgbWF0Y2hbMV0gPj0gNzQpIHtcbiAgICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLyk7XG4gICAgaWYgKG1hdGNoKSB2ZXJzaW9uID0gbWF0Y2hbMV07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2ZXJzaW9uICYmICt2ZXJzaW9uO1xuIiwiLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9ICEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgc3ltYm9sID0gU3ltYm9sKCk7XG4gIC8vIENocm9tZSAzOCBTeW1ib2wgaGFzIGluY29ycmVjdCB0b1N0cmluZyBjb252ZXJzaW9uXG4gIC8vIGBnZXQtb3duLXByb3BlcnR5LXN5bWJvbHNgIHBvbHlmaWxsIHN5bWJvbHMgY29udmVydGVkIHRvIG9iamVjdCBhcmUgbm90IFN5bWJvbCBpbnN0YW5jZXNcbiAgcmV0dXJuICFTdHJpbmcoc3ltYm9sKSB8fCAhKE9iamVjdChzeW1ib2wpIGluc3RhbmNlb2YgU3ltYm9sKSB8fFxuICAgIC8vIENocm9tZSAzOC00MCBzeW1ib2xzIGFyZSBub3QgaW5oZXJpdGVkIGZyb20gRE9NIGNvbGxlY3Rpb25zIHByb3RvdHlwZXMgdG8gaW5zdGFuY2VzXG4gICAgIVN5bWJvbC5zaGFtICYmIFY4X1ZFUlNJT04gJiYgVjhfVkVSU0lPTiA8IDQxO1xufSk7XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25hdGl2ZS1zeW1ib2wnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MXG4gICYmICFTeW1ib2wuc2hhbVxuICAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnO1xuIiwidmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gVVNFX1NZTUJPTF9BU19VSUQgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyICRTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoJFN5bWJvbCkgJiYgT2JqZWN0KGl0KSBpbnN0YW5jZW9mICRTeW1ib2w7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gU3RyaW5nKGFyZ3VtZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gJ09iamVjdCc7XG4gIH1cbn07XG4iLCJ2YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxuLy8gYEFzc2VydDogSXNDYWxsYWJsZShhcmd1bWVudCkgaXMgdHJ1ZWBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xufTtcbiIsInZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xuXG4vLyBgR2V0TWV0aG9kYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0bWV0aG9kXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChWLCBQKSB7XG4gIHZhciBmdW5jID0gVltQXTtcbiAgcmV0dXJuIGZ1bmMgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGFDYWxsYWJsZShmdW5jKTtcbn07XG4iLCJ2YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG4vLyBgT3JkaW5hcnlUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9yZGluYXJ5dG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAocHJlZiA9PT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAoaXNDYWxsYWJsZShmbiA9IGlucHV0LnZhbHVlT2YpICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChwcmVmICE9PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGlucHV0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbCwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBnbG9iYWxba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNldEdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtZ2xvYmFsJyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IGdsb2JhbFtTSEFSRURdIHx8IHNldEdsb2JhbChTSEFSRUQsIHt9KTtcblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZTtcbiIsInZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiB7fSk7XG59KSgndmVyc2lvbnMnLCBbXSkucHVzaCh7XG4gIHZlcnNpb246ICczLjE4LjMnLFxuICBtb2RlOiBJU19QVVJFID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMjEgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknXG59KTtcbiIsInZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG4vLyBgVG9PYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b29iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KSk7XG59O1xuIiwidmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuLy8gYEhhc093blByb3BlcnR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaGFzb3ducHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0Lmhhc093biB8fCBmdW5jdGlvbiBoYXNPd24oaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbCh0b09iamVjdChpdCksIGtleSk7XG59O1xuIiwidmFyIGlkID0gMDtcbnZhciBwb3N0Zml4ID0gTWF0aC5yYW5kb20oKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyBTdHJpbmcoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgKCsraWQgKyBwb3N0Zml4KS50b1N0cmluZygzNik7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtc3ltYm9sJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG52YXIgU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciBjcmVhdGVXZWxsS25vd25TeW1ib2wgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IFN5bWJvbCA6IFN5bWJvbCAmJiBTeW1ib2wud2l0aG91dFNldHRlciB8fCB1aWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCFoYXNPd24oV2VsbEtub3duU3ltYm9sc1N0b3JlLCBuYW1lKSB8fCAhKE5BVElWRV9TWU1CT0wgfHwgdHlwZW9mIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9PSAnc3RyaW5nJykpIHtcbiAgICBpZiAoTkFUSVZFX1NZTUJPTCAmJiBoYXNPd24oU3ltYm9sLCBuYW1lKSkge1xuICAgICAgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gU3ltYm9sW25hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV0gPSBjcmVhdGVXZWxsS25vd25TeW1ib2woJ1N5bWJvbC4nICsgbmFtZSk7XG4gICAgfVxuICB9IHJldHVybiBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV07XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1BSSU1JVElWRSA9IHdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIGlmICghaXNPYmplY3QoaW5wdXQpIHx8IGlzU3ltYm9sKGlucHV0KSkgcmV0dXJuIGlucHV0O1xuICB2YXIgZXhvdGljVG9QcmltID0gZ2V0TWV0aG9kKGlucHV0LCBUT19QUklNSVRJVkUpO1xuICB2YXIgcmVzdWx0O1xuICBpZiAoZXhvdGljVG9QcmltKSB7XG4gICAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdkZWZhdWx0JztcbiAgICByZXN1bHQgPSBleG90aWNUb1ByaW0uY2FsbChpbnB1dCwgcHJlZik7XG4gICAgaWYgKCFpc09iamVjdChyZXN1bHQpIHx8IGlzU3ltYm9sKHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xuICB9XG4gIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnbnVtYmVyJztcbiAgcmV0dXJuIG9yZGluYXJ5VG9QcmltaXRpdmUoaW5wdXQsIHByZWYpO1xufTtcbiIsInZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcblxuLy8gYFRvUHJvcGVydHlLZXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3Byb3BlcnR5a2V5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsICdzdHJpbmcnKTtcbiAgcmV0dXJuIGlzU3ltYm9sKGtleSkgPyBrZXkgOiBTdHJpbmcoa2V5KTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgZG9jdW1lbnQgPSBnbG9iYWwuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBFWElTVFMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBFWElTVFMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xuXG4vLyBUaGFuaydzIElFOCBmb3IgaGlzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjcmVhdGVFbGVtZW50KCdkaXYnKSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9XG4gIH0pLmEgIT0gNztcbn0pO1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhc093bihPLCBQKSkgcmV0dXJuIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcighcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZi5jYWxsKE8sIFApLCBPW1BdKTtcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbi8vIGBBc3NlcnQ6IFR5cGUoYXJndW1lbnQpIGlzIE9iamVjdGBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc09iamVjdChhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgVHlwZUVycm9yKFN0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhbiBvYmplY3QnKTtcbn07XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyAkZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCJ2YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG52YXIgZnVuY3Rpb25Ub1N0cmluZyA9IEZ1bmN0aW9uLnRvU3RyaW5nO1xuXG4vLyB0aGlzIGhlbHBlciBicm9rZW4gaW4gYGNvcmUtanNAMy40LjEtMy40LjRgLCBzbyB3ZSBjYW4ndCB1c2UgYHNoYXJlZGAgaGVscGVyXG5pZiAoIWlzQ2FsbGFibGUoc3RvcmUuaW5zcGVjdFNvdXJjZSkpIHtcbiAgc3RvcmUuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBmdW5jdGlvblRvU3RyaW5nLmNhbGwoaXQpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlLmluc3BlY3RTb3VyY2U7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsLldlYWtNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNDYWxsYWJsZShXZWFrTWFwKSAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoaW5zcGVjdFNvdXJjZShXZWFrTWFwKSk7XG4iLCJ2YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcblxudmFyIGtleXMgPSBzaGFyZWQoJ2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBrZXlzW2tleV0gfHwgKGtleXNba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwidmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtd2Vhay1tYXAnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQgPSAnT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQnO1xudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcbnZhciBzZXQsIGdldCwgaGFzO1xuXG52YXIgZW5mb3JjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaGFzKGl0KSA/IGdldChpdCkgOiBzZXQoaXQsIHt9KTtcbn07XG5cbnZhciBnZXR0ZXJGb3IgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIHN0YXRlO1xuICAgIGlmICghaXNPYmplY3QoaXQpIHx8IChzdGF0ZSA9IGdldChpdCkpLnR5cGUgIT09IFRZUEUpIHtcbiAgICAgIHRocm93IFR5cGVFcnJvcignSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAnICsgVFlQRSArICcgcmVxdWlyZWQnKTtcbiAgICB9IHJldHVybiBzdGF0ZTtcbiAgfTtcbn07XG5cbmlmIChOQVRJVkVfV0VBS19NQVAgfHwgc2hhcmVkLnN0YXRlKSB7XG4gIHZhciBzdG9yZSA9IHNoYXJlZC5zdGF0ZSB8fCAoc2hhcmVkLnN0YXRlID0gbmV3IFdlYWtNYXAoKSk7XG4gIHZhciB3bWdldCA9IHN0b3JlLmdldDtcbiAgdmFyIHdtaGFzID0gc3RvcmUuaGFzO1xuICB2YXIgd21zZXQgPSBzdG9yZS5zZXQ7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAod21oYXMuY2FsbChzdG9yZSwgaXQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICB3bXNldC5jYWxsKHN0b3JlLCBpdCwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHdtZ2V0LmNhbGwoc3RvcmUsIGl0KSB8fCB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHdtaGFzLmNhbGwoc3RvcmUsIGl0KTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBTVEFURSA9IHNoYXJlZEtleSgnc3RhdGUnKTtcbiAgaGlkZGVuS2V5c1tTVEFURV0gPSB0cnVlO1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKGhhc093bihpdCwgU1RBVEUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoaXQsIFNUQVRFLCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSkgPyBpdFtTVEFURV0gOiB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGdldDogZ2V0LFxuICBoYXM6IGhhcyxcbiAgZW5mb3JjZTogZW5mb3JjZSxcbiAgZ2V0dGVyRm9yOiBnZXR0ZXJGb3Jcbn07XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0RGVzY3JpcHRvciA9IERFU0NSSVBUT1JTICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbnZhciBFWElTVFMgPSBoYXNPd24oRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJyk7XG4vLyBhZGRpdGlvbmFsIHByb3RlY3Rpb24gZnJvbSBtaW5pZmllZCAvIG1hbmdsZWQgLyBkcm9wcGVkIGZ1bmN0aW9uIG5hbWVzXG52YXIgUFJPUEVSID0gRVhJU1RTICYmIChmdW5jdGlvbiBzb21ldGhpbmcoKSB7IC8qIGVtcHR5ICovIH0pLm5hbWUgPT09ICdzb21ldGhpbmcnO1xudmFyIENPTkZJR1VSQUJMRSA9IEVYSVNUUyAmJiAoIURFU0NSSVBUT1JTIHx8IChERVNDUklQVE9SUyAmJiBnZXREZXNjcmlwdG9yKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpLmNvbmZpZ3VyYWJsZSkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgRVhJU1RTOiBFWElTVFMsXG4gIFBST1BFUjogUFJPUEVSLFxuICBDT05GSUdVUkFCTEU6IENPTkZJR1VSQUJMRVxufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIHNldEdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtZ2xvYmFsJyk7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJykuQ09ORklHVVJBQkxFO1xuXG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0O1xudmFyIGVuZm9yY2VJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5lbmZvcmNlO1xudmFyIFRFTVBMQVRFID0gU3RyaW5nKFN0cmluZykuc3BsaXQoJ1N0cmluZycpO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICB2YXIgdW5zYWZlID0gb3B0aW9ucyA/ICEhb3B0aW9ucy51bnNhZmUgOiBmYWxzZTtcbiAgdmFyIHNpbXBsZSA9IG9wdGlvbnMgPyAhIW9wdGlvbnMuZW51bWVyYWJsZSA6IGZhbHNlO1xuICB2YXIgbm9UYXJnZXRHZXQgPSBvcHRpb25zID8gISFvcHRpb25zLm5vVGFyZ2V0R2V0IDogZmFsc2U7XG4gIHZhciBuYW1lID0gb3B0aW9ucyAmJiBvcHRpb25zLm5hbWUgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubmFtZSA6IGtleTtcbiAgdmFyIHN0YXRlO1xuICBpZiAoaXNDYWxsYWJsZSh2YWx1ZSkpIHtcbiAgICBpZiAoU3RyaW5nKG5hbWUpLnNsaWNlKDAsIDcpID09PSAnU3ltYm9sKCcpIHtcbiAgICAgIG5hbWUgPSAnWycgKyBTdHJpbmcobmFtZSkucmVwbGFjZSgvXlN5bWJvbFxcKChbXildKilcXCkvLCAnJDEnKSArICddJztcbiAgICB9XG4gICAgaWYgKCFoYXNPd24odmFsdWUsICduYW1lJykgfHwgKENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FICYmIHZhbHVlLm5hbWUgIT09IG5hbWUpKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodmFsdWUsICduYW1lJywgbmFtZSk7XG4gICAgfVxuICAgIHN0YXRlID0gZW5mb3JjZUludGVybmFsU3RhdGUodmFsdWUpO1xuICAgIGlmICghc3RhdGUuc291cmNlKSB7XG4gICAgICBzdGF0ZS5zb3VyY2UgPSBURU1QTEFURS5qb2luKHR5cGVvZiBuYW1lID09ICdzdHJpbmcnID8gbmFtZSA6ICcnKTtcbiAgICB9XG4gIH1cbiAgaWYgKE8gPT09IGdsb2JhbCkge1xuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2Ugc2V0R2xvYmFsKGtleSwgdmFsdWUpO1xuICAgIHJldHVybjtcbiAgfSBlbHNlIGlmICghdW5zYWZlKSB7XG4gICAgZGVsZXRlIE9ba2V5XTtcbiAgfSBlbHNlIGlmICghbm9UYXJnZXRHZXQgJiYgT1trZXldKSB7XG4gICAgc2ltcGxlID0gdHJ1ZTtcbiAgfVxuICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgZWxzZSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoTywga2V5LCB2YWx1ZSk7XG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbn0pKEZ1bmN0aW9uLnByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKHRoaXMpICYmIGdldEludGVybmFsU3RhdGUodGhpcykuc291cmNlIHx8IGluc3BlY3RTb3VyY2UodGhpcyk7XG59KTtcbiIsInZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYFRvSW50ZWdlck9ySW5maW5pdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJvcmluZmluaXR5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbnVtYmVyID0gK2FyZ3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIHNhZmVcbiAgcmV0dXJuIG51bWJlciAhPT0gbnVtYmVyIHx8IG51bWJlciA9PT0gMCA/IDAgOiAobnVtYmVyID4gMCA/IGZsb29yIDogY2VpbCkobnVtYmVyKTtcbn07XG4iLCJ2YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gSGVscGVyIGZvciBhIHBvcHVsYXIgcmVwZWF0aW5nIGNhc2Ugb2YgdGhlIHNwZWM6XG4vLyBMZXQgaW50ZWdlciBiZSA/IFRvSW50ZWdlcihpbmRleCkuXG4vLyBJZiBpbnRlZ2VyIDwgMCwgbGV0IHJlc3VsdCBiZSBtYXgoKGxlbmd0aCArIGludGVnZXIpLCAwKTsgZWxzZSBsZXQgcmVzdWx0IGJlIG1pbihpbnRlZ2VyLCBsZW5ndGgpLlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICB2YXIgaW50ZWdlciA9IHRvSW50ZWdlck9ySW5maW5pdHkoaW5kZXgpO1xuICByZXR1cm4gaW50ZWdlciA8IDAgPyBtYXgoaW50ZWdlciArIGxlbmd0aCwgMCkgOiBtaW4oaW50ZWdlciwgbGVuZ3RoKTtcbn07XG4iLCJ2YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gYFRvTGVuZ3RoYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9sZW5ndGhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBhcmd1bWVudCA+IDAgPyBtaW4odG9JbnRlZ2VyT3JJbmZpbml0eShhcmd1bWVudCksIDB4MUZGRkZGRkZGRkZGRkYpIDogMDsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsInZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcblxuLy8gYExlbmd0aE9mQXJyYXlMaWtlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbGVuZ3Rob2ZhcnJheWxpa2Vcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gdG9MZW5ndGgob2JqLmxlbmd0aCk7XG59O1xuIiwidmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBpbmRleE9mLCBpbmNsdWRlcyB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICBpZiAoKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pICYmIE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xuICBpbmNsdWRlczogY3JlYXRlTWV0aG9kKHRydWUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmluZGV4T2ZgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmRleG9mXG4gIGluZGV4T2Y6IGNyZWF0ZU1ldGhvZChmYWxzZSlcbn07XG4iLCJ2YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBpbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5kZXhPZjtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pICFoYXNPd24oaGlkZGVuS2V5cywga2V5KSAmJiBoYXNPd24oTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzT3duKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHJlc3VsdC5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIvLyBJRTgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gW1xuICAnY29uc3RydWN0b3InLFxuICAnaGFzT3duUHJvcGVydHknLFxuICAnaXNQcm90b3R5cGVPZicsXG4gICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG4gICd0b0xvY2FsZVN0cmluZycsXG4gICd0b1N0cmluZycsXG4gICd2YWx1ZU9mJ1xuXTtcbiIsInZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbnZhciBoaWRkZW5LZXlzID0gZW51bUJ1Z0tleXMuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIiwiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsInZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG4vLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnb3duS2V5cycpIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICByZXR1cm4gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8ga2V5cy5jb25jYXQoZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiIsInZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIG93bktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3duLWtleXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcbiAgdmFyIGtleXMgPSBvd25LZXlzKHNvdXJjZSk7XG4gIHZhciBkZWZpbmVQcm9wZXJ0eSA9IGRlZmluZVByb3BlcnR5TW9kdWxlLmY7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgaWYgKCFoYXNPd24odGFyZ2V0LCBrZXkpKSBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gIH1cbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciByZXBsYWNlbWVudCA9IC8jfFxcLnByb3RvdHlwZVxcLi87XG5cbnZhciBpc0ZvcmNlZCA9IGZ1bmN0aW9uIChmZWF0dXJlLCBkZXRlY3Rpb24pIHtcbiAgdmFyIHZhbHVlID0gZGF0YVtub3JtYWxpemUoZmVhdHVyZSldO1xuICByZXR1cm4gdmFsdWUgPT0gUE9MWUZJTEwgPyB0cnVlXG4gICAgOiB2YWx1ZSA9PSBOQVRJVkUgPyBmYWxzZVxuICAgIDogaXNDYWxsYWJsZShkZXRlY3Rpb24pID8gZmFpbHMoZGV0ZWN0aW9uKVxuICAgIDogISFkZXRlY3Rpb247XG59O1xuXG52YXIgbm9ybWFsaXplID0gaXNGb3JjZWQubm9ybWFsaXplID0gZnVuY3Rpb24gKHN0cmluZykge1xuICByZXR1cm4gU3RyaW5nKHN0cmluZykucmVwbGFjZShyZXBsYWNlbWVudCwgJy4nKS50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIGRhdGEgPSBpc0ZvcmNlZC5kYXRhID0ge307XG52YXIgTkFUSVZFID0gaXNGb3JjZWQuTkFUSVZFID0gJ04nO1xudmFyIFBPTFlGSUxMID0gaXNGb3JjZWQuUE9MWUZJTEwgPSAnUCc7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGb3JjZWQ7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcbnZhciBzZXRHbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWdsb2JhbCcpO1xudmFyIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzJyk7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG5cbi8qXG4gIG9wdGlvbnMudGFyZ2V0ICAgICAgLSBuYW1lIG9mIHRoZSB0YXJnZXQgb2JqZWN0XG4gIG9wdGlvbnMuZ2xvYmFsICAgICAgLSB0YXJnZXQgaXMgdGhlIGdsb2JhbCBvYmplY3RcbiAgb3B0aW9ucy5zdGF0ICAgICAgICAtIGV4cG9ydCBhcyBzdGF0aWMgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5wcm90byAgICAgICAtIGV4cG9ydCBhcyBwcm90b3R5cGUgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5yZWFsICAgICAgICAtIHJlYWwgcHJvdG90eXBlIG1ldGhvZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMuZm9yY2VkICAgICAgLSBleHBvcnQgZXZlbiBpZiB0aGUgbmF0aXZlIGZlYXR1cmUgaXMgYXZhaWxhYmxlXG4gIG9wdGlvbnMuYmluZCAgICAgICAgLSBiaW5kIG1ldGhvZHMgdG8gdGhlIHRhcmdldCwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLndyYXAgICAgICAgIC0gd3JhcCBjb25zdHJ1Y3RvcnMgdG8gcHJldmVudGluZyBnbG9iYWwgcG9sbHV0aW9uLCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMudW5zYWZlICAgICAgLSB1c2UgdGhlIHNpbXBsZSBhc3NpZ25tZW50IG9mIHByb3BlcnR5IGluc3RlYWQgb2YgZGVsZXRlICsgZGVmaW5lUHJvcGVydHlcbiAgb3B0aW9ucy5zaGFtICAgICAgICAtIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgb3B0aW9ucy5lbnVtZXJhYmxlICAtIGV4cG9ydCBhcyBlbnVtZXJhYmxlIHByb3BlcnR5XG4gIG9wdGlvbnMubm9UYXJnZXRHZXQgLSBwcmV2ZW50IGNhbGxpbmcgYSBnZXR0ZXIgb24gdGFyZ2V0XG4gIG9wdGlvbnMubmFtZSAgICAgICAgLSB0aGUgLm5hbWUgb2YgdGhlIGZ1bmN0aW9uIGlmIGl0IGRvZXMgbm90IG1hdGNoIHRoZSBrZXlcbiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcHRpb25zLCBzb3VyY2UpIHtcbiAgdmFyIFRBUkdFVCA9IG9wdGlvbnMudGFyZ2V0O1xuICB2YXIgR0xPQkFMID0gb3B0aW9ucy5nbG9iYWw7XG4gIHZhciBTVEFUSUMgPSBvcHRpb25zLnN0YXQ7XG4gIHZhciBGT1JDRUQsIHRhcmdldCwga2V5LCB0YXJnZXRQcm9wZXJ0eSwgc291cmNlUHJvcGVydHksIGRlc2NyaXB0b3I7XG4gIGlmIChHTE9CQUwpIHtcbiAgICB0YXJnZXQgPSBnbG9iYWw7XG4gIH0gZWxzZSBpZiAoU1RBVElDKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsW1RBUkdFVF0gfHwgc2V0R2xvYmFsKFRBUkdFVCwge30pO1xuICB9IGVsc2Uge1xuICAgIHRhcmdldCA9IChnbG9iYWxbVEFSR0VUXSB8fCB7fSkucHJvdG90eXBlO1xuICB9XG4gIGlmICh0YXJnZXQpIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIHNvdXJjZVByb3BlcnR5ID0gc291cmNlW2tleV07XG4gICAgaWYgKG9wdGlvbnMubm9UYXJnZXRHZXQpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpO1xuICAgICAgdGFyZ2V0UHJvcGVydHkgPSBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IudmFsdWU7XG4gICAgfSBlbHNlIHRhcmdldFByb3BlcnR5ID0gdGFyZ2V0W2tleV07XG4gICAgRk9SQ0VEID0gaXNGb3JjZWQoR0xPQkFMID8ga2V5IDogVEFSR0VUICsgKFNUQVRJQyA/ICcuJyA6ICcjJykgKyBrZXksIG9wdGlvbnMuZm9yY2VkKTtcbiAgICAvLyBjb250YWluZWQgaW4gdGFyZ2V0XG4gICAgaWYgKCFGT1JDRUQgJiYgdGFyZ2V0UHJvcGVydHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSA9PT0gdHlwZW9mIHRhcmdldFByb3BlcnR5KSBjb250aW51ZTtcbiAgICAgIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoc291cmNlUHJvcGVydHksIHRhcmdldFByb3BlcnR5KTtcbiAgICB9XG4gICAgLy8gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICAgIGlmIChvcHRpb25zLnNoYW0gfHwgKHRhcmdldFByb3BlcnR5ICYmIHRhcmdldFByb3BlcnR5LnNoYW0pKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoc291cmNlUHJvcGVydHksICdzaGFtJywgdHJ1ZSk7XG4gICAgfVxuICAgIC8vIGV4dGVuZCBnbG9iYWxcbiAgICByZWRlZmluZSh0YXJnZXQsIGtleSwgc291cmNlUHJvcGVydHksIG9wdGlvbnMpO1xuICB9XG59O1xuIiwidmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxuLy8gYElzQXJyYXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2FycmF5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktaXNhcnJheSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmd1bWVudCkge1xuICByZXR1cm4gY2xhc3NvZihhcmd1bWVudCkgPT0gJ0FycmF5Jztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICB2YXIgcHJvcGVydHlLZXkgPSB0b1Byb3BlcnR5S2V5KGtleSk7XG4gIGlmIChwcm9wZXJ0eUtleSBpbiBvYmplY3QpIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBwcm9wZXJ0eUtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W3Byb3BlcnR5S2V5XSA9IHZhbHVlO1xufTtcbiIsInZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgdGVzdCA9IHt9O1xuXG50ZXN0W1RPX1NUUklOR19UQUddID0gJ3onO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0cmluZyh0ZXN0KSA9PT0gJ1tvYmplY3Qgel0nO1xuIiwidmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY2xhc3NvZlJhdyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQ09SUkVDVF9BUkdVTUVOVFMgPSBjbGFzc29mUmF3KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuXG4vLyBnZXR0aW5nIHRhZyBmcm9tIEVTNisgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgXG5tb2R1bGUuZXhwb3J0cyA9IFRPX1NUUklOR19UQUdfU1VQUE9SVCA/IGNsYXNzb2ZSYXcgOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIHRhZywgcmVzdWx0O1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAodGFnID0gdHJ5R2V0KE8gPSBPYmplY3QoaXQpLCBUT19TVFJJTkdfVEFHKSkgPT0gJ3N0cmluZycgPyB0YWdcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IENPUlJFQ1RfQVJHVU1FTlRTID8gY2xhc3NvZlJhdyhPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChyZXN1bHQgPSBjbGFzc29mUmF3KE8pKSA9PSAnT2JqZWN0JyAmJiBpc0NhbGxhYmxlKE8uY2FsbGVlKSA/ICdBcmd1bWVudHMnIDogcmVzdWx0O1xufTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcblxudmFyIGVtcHR5ID0gW107XG52YXIgY29uc3RydWN0ID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdjb25zdHJ1Y3QnKTtcbnZhciBjb25zdHJ1Y3RvclJlZ0V4cCA9IC9eXFxzKig/OmNsYXNzfGZ1bmN0aW9uKVxcYi87XG52YXIgZXhlYyA9IGNvbnN0cnVjdG9yUmVnRXhwLmV4ZWM7XG52YXIgSU5DT1JSRUNUX1RPX1NUUklORyA9ICFjb25zdHJ1Y3RvclJlZ0V4cC5leGVjKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG5cbnZhciBpc0NvbnN0cnVjdG9yTW9kZXJuID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmICghaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdHJ1Y3QoT2JqZWN0LCBlbXB0eSwgYXJndW1lbnQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxudmFyIGlzQ29uc3RydWN0b3JMZWdhY3kgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKCFpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGZhbHNlO1xuICBzd2l0Y2ggKGNsYXNzb2YoYXJndW1lbnQpKSB7XG4gICAgY2FzZSAnQXN5bmNGdW5jdGlvbic6XG4gICAgY2FzZSAnR2VuZXJhdG9yRnVuY3Rpb24nOlxuICAgIGNhc2UgJ0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24nOiByZXR1cm4gZmFsc2U7XG4gICAgLy8gd2UgY2FuJ3QgY2hlY2sgLnByb3RvdHlwZSBzaW5jZSBjb25zdHJ1Y3RvcnMgcHJvZHVjZWQgYnkgLmJpbmQgaGF2ZW4ndCBpdFxuICB9IHJldHVybiBJTkNPUlJFQ1RfVE9fU1RSSU5HIHx8ICEhZXhlYy5jYWxsKGNvbnN0cnVjdG9yUmVnRXhwLCBpbnNwZWN0U291cmNlKGFyZ3VtZW50KSk7XG59O1xuXG4vLyBgSXNDb25zdHJ1Y3RvcmAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzY29uc3RydWN0b3Jcbm1vZHVsZS5leHBvcnRzID0gIWNvbnN0cnVjdCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBjYWxsZWQ7XG4gIHJldHVybiBpc0NvbnN0cnVjdG9yTW9kZXJuKGlzQ29uc3RydWN0b3JNb2Rlcm4uY2FsbClcbiAgICB8fCAhaXNDb25zdHJ1Y3Rvck1vZGVybihPYmplY3QpXG4gICAgfHwgIWlzQ29uc3RydWN0b3JNb2Rlcm4oZnVuY3Rpb24gKCkgeyBjYWxsZWQgPSB0cnVlOyB9KVxuICAgIHx8IGNhbGxlZDtcbn0pID8gaXNDb25zdHJ1Y3RvckxlZ2FjeSA6IGlzQ29uc3RydWN0b3JNb2Rlcm47XG4iLCJ2YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxuLy8gYSBwYXJ0IG9mIGBBcnJheVNwZWNpZXNDcmVhdGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheXNwZWNpZXNjcmVhdGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsQXJyYXkpIHtcbiAgdmFyIEM7XG4gIGlmIChpc0FycmF5KG9yaWdpbmFsQXJyYXkpKSB7XG4gICAgQyA9IG9yaWdpbmFsQXJyYXkuY29uc3RydWN0b3I7XG4gICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICBpZiAoaXNDb25zdHJ1Y3RvcihDKSAmJiAoQyA9PT0gQXJyYXkgfHwgaXNBcnJheShDLnByb3RvdHlwZSkpKSBDID0gdW5kZWZpbmVkO1xuICAgIGVsc2UgaWYgKGlzT2JqZWN0KEMpKSB7XG4gICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgIGlmIChDID09PSBudWxsKSBDID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSByZXR1cm4gQyA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDO1xufTtcbiIsInZhciBhcnJheVNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG5cbi8vIGBBcnJheVNwZWNpZXNDcmVhdGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheXNwZWNpZXNjcmVhdGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsQXJyYXksIGxlbmd0aCkge1xuICByZXR1cm4gbmV3IChhcnJheVNwZWNpZXNDb25zdHJ1Y3RvcihvcmlnaW5hbEFycmF5KSkobGVuZ3RoID09PSAwID8gMCA6IGxlbmd0aCk7XG59O1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICAvLyBXZSBjYW4ndCB1c2UgdGhpcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbiAgLy8gZGVvcHRpbWl6YXRpb24gYW5kIHNlcmlvdXMgcGVyZm9ybWFuY2UgZGVncmFkYXRpb25cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY3N1xuICByZXR1cm4gVjhfVkVSU0lPTiA+PSA1MSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIHZhciBjb25zdHJ1Y3RvciA9IGFycmF5LmNvbnN0cnVjdG9yID0ge307XG4gICAgY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4geyBmb286IDEgfTtcbiAgICB9O1xuICAgIHJldHVybiBhcnJheVtNRVRIT0RfTkFNRV0oQm9vbGVhbikuZm9vICE9PSAxO1xuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG5cbnZhciBJU19DT05DQVRfU1BSRUFEQUJMRSA9IHdlbGxLbm93blN5bWJvbCgnaXNDb25jYXRTcHJlYWRhYmxlJyk7XG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDB4MUZGRkZGRkZGRkZGRkY7XG52YXIgTUFYSU1VTV9BTExPV0VEX0lOREVYX0VYQ0VFREVEID0gJ01heGltdW0gYWxsb3dlZCBpbmRleCBleGNlZWRlZCc7XG5cbi8vIFdlIGNhbid0IHVzZSB0aGlzIGZlYXR1cmUgZGV0ZWN0aW9uIGluIFY4IHNpbmNlIGl0IGNhdXNlc1xuLy8gZGVvcHRpbWl6YXRpb24gYW5kIHNlcmlvdXMgcGVyZm9ybWFuY2UgZGVncmFkYXRpb25cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzlcbnZhciBJU19DT05DQVRfU1BSRUFEQUJMRV9TVVBQT1JUID0gVjhfVkVSU0lPTiA+PSA1MSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgYXJyYXkgPSBbXTtcbiAgYXJyYXlbSVNfQ09OQ0FUX1NQUkVBREFCTEVdID0gZmFsc2U7XG4gIHJldHVybiBhcnJheS5jb25jYXQoKVswXSAhPT0gYXJyYXk7XG59KTtcblxudmFyIFNQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ2NvbmNhdCcpO1xuXG52YXIgaXNDb25jYXRTcHJlYWRhYmxlID0gZnVuY3Rpb24gKE8pIHtcbiAgaWYgKCFpc09iamVjdChPKSkgcmV0dXJuIGZhbHNlO1xuICB2YXIgc3ByZWFkYWJsZSA9IE9bSVNfQ09OQ0FUX1NQUkVBREFCTEVdO1xuICByZXR1cm4gc3ByZWFkYWJsZSAhPT0gdW5kZWZpbmVkID8gISFzcHJlYWRhYmxlIDogaXNBcnJheShPKTtcbn07XG5cbnZhciBGT1JDRUQgPSAhSVNfQ09OQ0FUX1NQUkVBREFCTEVfU1VQUE9SVCB8fCAhU1BFQ0lFU19TVVBQT1JUO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmNvbmNhdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5jb25jYXRcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBpc0NvbmNhdFNwcmVhZGFibGUgYW5kIEBAc3BlY2llc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgY29uY2F0OiBmdW5jdGlvbiBjb25jYXQoYXJnKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgQSA9IGFycmF5U3BlY2llc0NyZWF0ZShPLCAwKTtcbiAgICB2YXIgbiA9IDA7XG4gICAgdmFyIGksIGssIGxlbmd0aCwgbGVuLCBFO1xuICAgIGZvciAoaSA9IC0xLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIEUgPSBpID09PSAtMSA/IE8gOiBhcmd1bWVudHNbaV07XG4gICAgICBpZiAoaXNDb25jYXRTcHJlYWRhYmxlKEUpKSB7XG4gICAgICAgIGxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKEUpO1xuICAgICAgICBpZiAobiArIGxlbiA+IE1BWF9TQUZFX0lOVEVHRVIpIHRocm93IFR5cGVFcnJvcihNQVhJTVVNX0FMTE9XRURfSU5ERVhfRVhDRUVERUQpO1xuICAgICAgICBmb3IgKGsgPSAwOyBrIDwgbGVuOyBrKyssIG4rKykgaWYgKGsgaW4gRSkgY3JlYXRlUHJvcGVydHkoQSwgbiwgRVtrXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobiA+PSBNQVhfU0FGRV9JTlRFR0VSKSB0aHJvdyBUeXBlRXJyb3IoTUFYSU1VTV9BTExPV0VEX0lOREVYX0VYQ0VFREVEKTtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkoQSwgbisrLCBFKTtcbiAgICAgIH1cbiAgICB9XG4gICAgQS5sZW5ndGggPSBuO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE0LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxudmFyIHJ1bnRpbWUgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgdmFyIE9wID0gT2JqZWN0LnByb3RvdHlwZTtcbiAgdmFyIGhhc093biA9IE9wLmhhc093blByb3BlcnR5O1xuICB2YXIgdW5kZWZpbmVkOyAvLyBNb3JlIGNvbXByZXNzaWJsZSB0aGFuIHZvaWQgMC5cbiAgdmFyICRTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgPyBTeW1ib2wgOiB7fTtcbiAgdmFyIGl0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5pdGVyYXRvciB8fCBcIkBAaXRlcmF0b3JcIjtcbiAgdmFyIGFzeW5jSXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLmFzeW5jSXRlcmF0b3IgfHwgXCJAQGFzeW5jSXRlcmF0b3JcIjtcbiAgdmFyIHRvU3RyaW5nVGFnU3ltYm9sID0gJFN5bWJvbC50b1N0cmluZ1RhZyB8fCBcIkBAdG9TdHJpbmdUYWdcIjtcblxuICBmdW5jdGlvbiBkZWZpbmUob2JqLCBrZXksIHZhbHVlKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgICByZXR1cm4gb2JqW2tleV07XG4gIH1cbiAgdHJ5IHtcbiAgICAvLyBJRSA4IGhhcyBhIGJyb2tlbiBPYmplY3QuZGVmaW5lUHJvcGVydHkgdGhhdCBvbmx5IHdvcmtzIG9uIERPTSBvYmplY3RzLlxuICAgIGRlZmluZSh7fSwgXCJcIik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGRlZmluZSA9IGZ1bmN0aW9uKG9iaiwga2V5LCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIG9ialtrZXldID0gdmFsdWU7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBJZiBvdXRlckZuIHByb3ZpZGVkIGFuZCBvdXRlckZuLnByb3RvdHlwZSBpcyBhIEdlbmVyYXRvciwgdGhlbiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvci5cbiAgICB2YXIgcHJvdG9HZW5lcmF0b3IgPSBvdXRlckZuICYmIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gb3V0ZXJGbiA6IEdlbmVyYXRvcjtcbiAgICB2YXIgZ2VuZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShwcm90b0dlbmVyYXRvci5wcm90b3R5cGUpO1xuICAgIHZhciBjb250ZXh0ID0gbmV3IENvbnRleHQodHJ5TG9jc0xpc3QgfHwgW10pO1xuXG4gICAgLy8gVGhlIC5faW52b2tlIG1ldGhvZCB1bmlmaWVzIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcy5cbiAgICBnZW5lcmF0b3IuX2ludm9rZSA9IG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZ2VuZXJhdG9yO1xuICB9XG4gIGV4cG9ydHMud3JhcCA9IHdyYXA7XG5cbiAgLy8gVHJ5L2NhdGNoIGhlbHBlciB0byBtaW5pbWl6ZSBkZW9wdGltaXphdGlvbnMuIFJldHVybnMgYSBjb21wbGV0aW9uXG4gIC8vIHJlY29yZCBsaWtlIGNvbnRleHQudHJ5RW50cmllc1tpXS5jb21wbGV0aW9uLiBUaGlzIGludGVyZmFjZSBjb3VsZFxuICAvLyBoYXZlIGJlZW4gKGFuZCB3YXMgcHJldmlvdXNseSkgZGVzaWduZWQgdG8gdGFrZSBhIGNsb3N1cmUgdG8gYmVcbiAgLy8gaW52b2tlZCB3aXRob3V0IGFyZ3VtZW50cywgYnV0IGluIGFsbCB0aGUgY2FzZXMgd2UgY2FyZSBhYm91dCB3ZVxuICAvLyBhbHJlYWR5IGhhdmUgYW4gZXhpc3RpbmcgbWV0aG9kIHdlIHdhbnQgdG8gY2FsbCwgc28gdGhlcmUncyBubyBuZWVkXG4gIC8vIHRvIGNyZWF0ZSBhIG5ldyBmdW5jdGlvbiBvYmplY3QuIFdlIGNhbiBldmVuIGdldCBhd2F5IHdpdGggYXNzdW1pbmdcbiAgLy8gdGhlIG1ldGhvZCB0YWtlcyBleGFjdGx5IG9uZSBhcmd1bWVudCwgc2luY2UgdGhhdCBoYXBwZW5zIHRvIGJlIHRydWVcbiAgLy8gaW4gZXZlcnkgY2FzZSwgc28gd2UgZG9uJ3QgaGF2ZSB0byB0b3VjaCB0aGUgYXJndW1lbnRzIG9iamVjdC4gVGhlXG4gIC8vIG9ubHkgYWRkaXRpb25hbCBhbGxvY2F0aW9uIHJlcXVpcmVkIGlzIHRoZSBjb21wbGV0aW9uIHJlY29yZCwgd2hpY2hcbiAgLy8gaGFzIGEgc3RhYmxlIHNoYXBlIGFuZCBzbyBob3BlZnVsbHkgc2hvdWxkIGJlIGNoZWFwIHRvIGFsbG9jYXRlLlxuICBmdW5jdGlvbiB0cnlDYXRjaChmbiwgb2JqLCBhcmcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJub3JtYWxcIiwgYXJnOiBmbi5jYWxsKG9iaiwgYXJnKSB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJ0aHJvd1wiLCBhcmc6IGVyciB9O1xuICAgIH1cbiAgfVxuXG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0ID0gXCJzdXNwZW5kZWRTdGFydFwiO1xuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRZaWVsZCA9IFwic3VzcGVuZGVkWWllbGRcIjtcbiAgdmFyIEdlblN0YXRlRXhlY3V0aW5nID0gXCJleGVjdXRpbmdcIjtcbiAgdmFyIEdlblN0YXRlQ29tcGxldGVkID0gXCJjb21wbGV0ZWRcIjtcblxuICAvLyBSZXR1cm5pbmcgdGhpcyBvYmplY3QgZnJvbSB0aGUgaW5uZXJGbiBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzXG4gIC8vIGJyZWFraW5nIG91dCBvZiB0aGUgZGlzcGF0Y2ggc3dpdGNoIHN0YXRlbWVudC5cbiAgdmFyIENvbnRpbnVlU2VudGluZWwgPSB7fTtcblxuICAvLyBEdW1teSBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgdGhhdCB3ZSB1c2UgYXMgdGhlIC5jb25zdHJ1Y3RvciBhbmRcbiAgLy8gLmNvbnN0cnVjdG9yLnByb3RvdHlwZSBwcm9wZXJ0aWVzIGZvciBmdW5jdGlvbnMgdGhhdCByZXR1cm4gR2VuZXJhdG9yXG4gIC8vIG9iamVjdHMuIEZvciBmdWxsIHNwZWMgY29tcGxpYW5jZSwgeW91IG1heSB3aXNoIHRvIGNvbmZpZ3VyZSB5b3VyXG4gIC8vIG1pbmlmaWVyIG5vdCB0byBtYW5nbGUgdGhlIG5hbWVzIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMuXG4gIGZ1bmN0aW9uIEdlbmVyYXRvcigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUoKSB7fVxuXG4gIC8vIFRoaXMgaXMgYSBwb2x5ZmlsbCBmb3IgJUl0ZXJhdG9yUHJvdG90eXBlJSBmb3IgZW52aXJvbm1lbnRzIHRoYXRcbiAgLy8gZG9uJ3QgbmF0aXZlbHkgc3VwcG9ydCBpdC5cbiAgdmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG4gIEl0ZXJhdG9yUHJvdG90eXBlW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICB2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG4gIHZhciBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvICYmIGdldFByb3RvKGdldFByb3RvKHZhbHVlcyhbXSkpKTtcbiAgaWYgKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICYmXG4gICAgICBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAhPT0gT3AgJiZcbiAgICAgIGhhc093bi5jYWxsKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlLCBpdGVyYXRvclN5bWJvbCkpIHtcbiAgICAvLyBUaGlzIGVudmlyb25tZW50IGhhcyBhIG5hdGl2ZSAlSXRlcmF0b3JQcm90b3R5cGUlOyB1c2UgaXQgaW5zdGVhZFxuICAgIC8vIG9mIHRoZSBwb2x5ZmlsbC5cbiAgICBJdGVyYXRvclByb3RvdHlwZSA9IE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG5cbiAgdmFyIEdwID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID1cbiAgICBHZW5lcmF0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG4gIEdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA9IEdwLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb247XG4gIEdlbmVyYXRvckZ1bmN0aW9uLmRpc3BsYXlOYW1lID0gZGVmaW5lKFxuICAgIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLFxuICAgIHRvU3RyaW5nVGFnU3ltYm9sLFxuICAgIFwiR2VuZXJhdG9yRnVuY3Rpb25cIlxuICApO1xuXG4gIC8vIEhlbHBlciBmb3IgZGVmaW5pbmcgdGhlIC5uZXh0LCAudGhyb3csIGFuZCAucmV0dXJuIG1ldGhvZHMgb2YgdGhlXG4gIC8vIEl0ZXJhdG9yIGludGVyZmFjZSBpbiB0ZXJtcyBvZiBhIHNpbmdsZSAuX2ludm9rZSBtZXRob2QuXG4gIGZ1bmN0aW9uIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhwcm90b3R5cGUpIHtcbiAgICBbXCJuZXh0XCIsIFwidGhyb3dcIiwgXCJyZXR1cm5cIl0uZm9yRWFjaChmdW5jdGlvbihtZXRob2QpIHtcbiAgICAgIGRlZmluZShwcm90b3R5cGUsIG1ldGhvZCwgZnVuY3Rpb24oYXJnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnZva2UobWV0aG9kLCBhcmcpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBleHBvcnRzLmlzR2VuZXJhdG9yRnVuY3Rpb24gPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICB2YXIgY3RvciA9IHR5cGVvZiBnZW5GdW4gPT09IFwiZnVuY3Rpb25cIiAmJiBnZW5GdW4uY29uc3RydWN0b3I7XG4gICAgcmV0dXJuIGN0b3JcbiAgICAgID8gY3RvciA9PT0gR2VuZXJhdG9yRnVuY3Rpb24gfHxcbiAgICAgICAgLy8gRm9yIHRoZSBuYXRpdmUgR2VuZXJhdG9yRnVuY3Rpb24gY29uc3RydWN0b3IsIHRoZSBiZXN0IHdlIGNhblxuICAgICAgICAvLyBkbyBpcyB0byBjaGVjayBpdHMgLm5hbWUgcHJvcGVydHkuXG4gICAgICAgIChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkgPT09IFwiR2VuZXJhdG9yRnVuY3Rpb25cIlxuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuICBleHBvcnRzLm1hcmsgPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSB7XG4gICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoZ2VuRnVuLCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdlbkZ1bi5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgICAgIGRlZmluZShnZW5GdW4sIHRvU3RyaW5nVGFnU3ltYm9sLCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIpO1xuICAgIH1cbiAgICBnZW5GdW4ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShHcCk7XG4gICAgcmV0dXJuIGdlbkZ1bjtcbiAgfTtcblxuICAvLyBXaXRoaW4gdGhlIGJvZHkgb2YgYW55IGFzeW5jIGZ1bmN0aW9uLCBgYXdhaXQgeGAgaXMgdHJhbnNmb3JtZWQgdG9cbiAgLy8gYHlpZWxkIHJlZ2VuZXJhdG9yUnVudGltZS5hd3JhcCh4KWAsIHNvIHRoYXQgdGhlIHJ1bnRpbWUgY2FuIHRlc3RcbiAgLy8gYGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIilgIHRvIGRldGVybWluZSBpZiB0aGUgeWllbGRlZCB2YWx1ZSBpc1xuICAvLyBtZWFudCB0byBiZSBhd2FpdGVkLlxuICBleHBvcnRzLmF3cmFwID0gZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIHsgX19hd2FpdDogYXJnIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gQXN5bmNJdGVyYXRvcihnZW5lcmF0b3IsIFByb21pc2VJbXBsKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChnZW5lcmF0b3JbbWV0aG9kXSwgZ2VuZXJhdG9yLCBhcmcpO1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgcmVqZWN0KHJlY29yZC5hcmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlY29yZC5hcmc7XG4gICAgICAgIHZhciB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlICYmXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIikpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZUltcGwucmVzb2x2ZSh2YWx1ZS5fX2F3YWl0KS50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJuZXh0XCIsIHZhbHVlLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0sIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgaW52b2tlKFwidGhyb3dcIiwgZXJyLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2VJbXBsLnJlc29sdmUodmFsdWUpLnRoZW4oZnVuY3Rpb24odW53cmFwcGVkKSB7XG4gICAgICAgICAgLy8gV2hlbiBhIHlpZWxkZWQgUHJvbWlzZSBpcyByZXNvbHZlZCwgaXRzIGZpbmFsIHZhbHVlIGJlY29tZXNcbiAgICAgICAgICAvLyB0aGUgLnZhbHVlIG9mIHRoZSBQcm9taXNlPHt2YWx1ZSxkb25lfT4gcmVzdWx0IGZvciB0aGVcbiAgICAgICAgICAvLyBjdXJyZW50IGl0ZXJhdGlvbi5cbiAgICAgICAgICByZXN1bHQudmFsdWUgPSB1bndyYXBwZWQ7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9LCBmdW5jdGlvbihlcnJvcikge1xuICAgICAgICAgIC8vIElmIGEgcmVqZWN0ZWQgUHJvbWlzZSB3YXMgeWllbGRlZCwgdGhyb3cgdGhlIHJlamVjdGlvbiBiYWNrXG4gICAgICAgICAgLy8gaW50byB0aGUgYXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIHNvIGl0IGNhbiBiZSBoYW5kbGVkIHRoZXJlLlxuICAgICAgICAgIHJldHVybiBpbnZva2UoXCJ0aHJvd1wiLCBlcnJvciwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHByZXZpb3VzUHJvbWlzZTtcblxuICAgIGZ1bmN0aW9uIGVucXVldWUobWV0aG9kLCBhcmcpIHtcbiAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2VJbXBsKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcmV2aW91c1Byb21pc2UgPVxuICAgICAgICAvLyBJZiBlbnF1ZXVlIGhhcyBiZWVuIGNhbGxlZCBiZWZvcmUsIHRoZW4gd2Ugd2FudCB0byB3YWl0IHVudGlsXG4gICAgICAgIC8vIGFsbCBwcmV2aW91cyBQcm9taXNlcyBoYXZlIGJlZW4gcmVzb2x2ZWQgYmVmb3JlIGNhbGxpbmcgaW52b2tlLFxuICAgICAgICAvLyBzbyB0aGF0IHJlc3VsdHMgYXJlIGFsd2F5cyBkZWxpdmVyZWQgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuIElmXG4gICAgICAgIC8vIGVucXVldWUgaGFzIG5vdCBiZWVuIGNhbGxlZCBiZWZvcmUsIHRoZW4gaXQgaXMgaW1wb3J0YW50IHRvXG4gICAgICAgIC8vIGNhbGwgaW52b2tlIGltbWVkaWF0ZWx5LCB3aXRob3V0IHdhaXRpbmcgb24gYSBjYWxsYmFjayB0byBmaXJlLFxuICAgICAgICAvLyBzbyB0aGF0IHRoZSBhc3luYyBnZW5lcmF0b3IgZnVuY3Rpb24gaGFzIHRoZSBvcHBvcnR1bml0eSB0byBkb1xuICAgICAgICAvLyBhbnkgbmVjZXNzYXJ5IHNldHVwIGluIGEgcHJlZGljdGFibGUgd2F5LiBUaGlzIHByZWRpY3RhYmlsaXR5XG4gICAgICAgIC8vIGlzIHdoeSB0aGUgUHJvbWlzZSBjb25zdHJ1Y3RvciBzeW5jaHJvbm91c2x5IGludm9rZXMgaXRzXG4gICAgICAgIC8vIGV4ZWN1dG9yIGNhbGxiYWNrLCBhbmQgd2h5IGFzeW5jIGZ1bmN0aW9ucyBzeW5jaHJvbm91c2x5XG4gICAgICAgIC8vIGV4ZWN1dGUgY29kZSBiZWZvcmUgdGhlIGZpcnN0IGF3YWl0LiBTaW5jZSB3ZSBpbXBsZW1lbnQgc2ltcGxlXG4gICAgICAgIC8vIGFzeW5jIGZ1bmN0aW9ucyBpbiB0ZXJtcyBvZiBhc3luYyBnZW5lcmF0b3JzLCBpdCBpcyBlc3BlY2lhbGx5XG4gICAgICAgIC8vIGltcG9ydGFudCB0byBnZXQgdGhpcyByaWdodCwgZXZlbiB0aG91Z2ggaXQgcmVxdWlyZXMgY2FyZS5cbiAgICAgICAgcHJldmlvdXNQcm9taXNlID8gcHJldmlvdXNQcm9taXNlLnRoZW4oXG4gICAgICAgICAgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcsXG4gICAgICAgICAgLy8gQXZvaWQgcHJvcGFnYXRpbmcgZmFpbHVyZXMgdG8gUHJvbWlzZXMgcmV0dXJuZWQgYnkgbGF0ZXJcbiAgICAgICAgICAvLyBpbnZvY2F0aW9ucyBvZiB0aGUgaXRlcmF0b3IuXG4gICAgICAgICAgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmdcbiAgICAgICAgKSA6IGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCk7XG4gICAgfVxuXG4gICAgLy8gRGVmaW5lIHRoZSB1bmlmaWVkIGhlbHBlciBtZXRob2QgdGhhdCBpcyB1c2VkIHRvIGltcGxlbWVudCAubmV4dCxcbiAgICAvLyAudGhyb3csIGFuZCAucmV0dXJuIChzZWUgZGVmaW5lSXRlcmF0b3JNZXRob2RzKS5cbiAgICB0aGlzLl9pbnZva2UgPSBlbnF1ZXVlO1xuICB9XG5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlKTtcbiAgQXN5bmNJdGVyYXRvci5wcm90b3R5cGVbYXN5bmNJdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIGV4cG9ydHMuQXN5bmNJdGVyYXRvciA9IEFzeW5jSXRlcmF0b3I7XG5cbiAgLy8gTm90ZSB0aGF0IHNpbXBsZSBhc3luYyBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkIG9uIHRvcCBvZlxuICAvLyBBc3luY0l0ZXJhdG9yIG9iamVjdHM7IHRoZXkganVzdCByZXR1cm4gYSBQcm9taXNlIGZvciB0aGUgdmFsdWUgb2ZcbiAgLy8gdGhlIGZpbmFsIHJlc3VsdCBwcm9kdWNlZCBieSB0aGUgaXRlcmF0b3IuXG4gIGV4cG9ydHMuYXN5bmMgPSBmdW5jdGlvbihpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCwgUHJvbWlzZUltcGwpIHtcbiAgICBpZiAoUHJvbWlzZUltcGwgPT09IHZvaWQgMCkgUHJvbWlzZUltcGwgPSBQcm9taXNlO1xuXG4gICAgdmFyIGl0ZXIgPSBuZXcgQXN5bmNJdGVyYXRvcihcbiAgICAgIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpLFxuICAgICAgUHJvbWlzZUltcGxcbiAgICApO1xuXG4gICAgcmV0dXJuIGV4cG9ydHMuaXNHZW5lcmF0b3JGdW5jdGlvbihvdXRlckZuKVxuICAgICAgPyBpdGVyIC8vIElmIG91dGVyRm4gaXMgYSBnZW5lcmF0b3IsIHJldHVybiB0aGUgZnVsbCBpdGVyYXRvci5cbiAgICAgIDogaXRlci5uZXh0KCkudGhlbihmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0LmRvbmUgPyByZXN1bHQudmFsdWUgOiBpdGVyLm5leHQoKTtcbiAgICAgICAgfSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KSB7XG4gICAgdmFyIHN0YXRlID0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydDtcblxuICAgIHJldHVybiBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcpIHtcbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVFeGVjdXRpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUNvbXBsZXRlZCkge1xuICAgICAgICBpZiAobWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICB0aHJvdyBhcmc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCZSBmb3JnaXZpbmcsIHBlciAyNS4zLjMuMy4zIG9mIHRoZSBzcGVjOlxuICAgICAgICAvLyBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtZ2VuZXJhdG9ycmVzdW1lXG4gICAgICAgIHJldHVybiBkb25lUmVzdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQubWV0aG9kID0gbWV0aG9kO1xuICAgICAgY29udGV4dC5hcmcgPSBhcmc7XG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGNvbnRleHQuZGVsZWdhdGU7XG4gICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgICAgIHZhciBkZWxlZ2F0ZVJlc3VsdCA9IG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0ID09PSBDb250aW51ZVNlbnRpbmVsKSBjb250aW51ZTtcbiAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZVJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgICBjb250ZXh0LnNlbnQgPSBjb250ZXh0Ll9zZW50ID0gY29udGV4dC5hcmc7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0KSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgICAgdGhyb3cgY29udGV4dC5hcmc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZyk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICAgIGNvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGNvbnRleHQuYXJnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlID0gR2VuU3RhdGVFeGVjdXRpbmc7XG5cbiAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIpIHtcbiAgICAgICAgICAvLyBJZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGZyb20gaW5uZXJGbiwgd2UgbGVhdmUgc3RhdGUgPT09XG4gICAgICAgICAgLy8gR2VuU3RhdGVFeGVjdXRpbmcgYW5kIGxvb3AgYmFjayBmb3IgYW5vdGhlciBpbnZvY2F0aW9uLlxuICAgICAgICAgIHN0YXRlID0gY29udGV4dC5kb25lXG4gICAgICAgICAgICA/IEdlblN0YXRlQ29tcGxldGVkXG4gICAgICAgICAgICA6IEdlblN0YXRlU3VzcGVuZGVkWWllbGQ7XG5cbiAgICAgICAgICBpZiAocmVjb3JkLmFyZyA9PT0gQ29udGludWVTZW50aW5lbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiByZWNvcmQuYXJnLFxuICAgICAgICAgICAgZG9uZTogY29udGV4dC5kb25lXG4gICAgICAgICAgfTtcblxuICAgICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgIC8vIERpc3BhdGNoIHRoZSBleGNlcHRpb24gYnkgbG9vcGluZyBiYWNrIGFyb3VuZCB0byB0aGVcbiAgICAgICAgICAvLyBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKSBjYWxsIGFib3ZlLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBDYWxsIGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXShjb250ZXh0LmFyZykgYW5kIGhhbmRsZSB0aGVcbiAgLy8gcmVzdWx0LCBlaXRoZXIgYnkgcmV0dXJuaW5nIGEgeyB2YWx1ZSwgZG9uZSB9IHJlc3VsdCBmcm9tIHRoZVxuICAvLyBkZWxlZ2F0ZSBpdGVyYXRvciwgb3IgYnkgbW9kaWZ5aW5nIGNvbnRleHQubWV0aG9kIGFuZCBjb250ZXh0LmFyZyxcbiAgLy8gc2V0dGluZyBjb250ZXh0LmRlbGVnYXRlIHRvIG51bGwsIGFuZCByZXR1cm5pbmcgdGhlIENvbnRpbnVlU2VudGluZWwuXG4gIGZ1bmN0aW9uIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdO1xuICAgIGlmIChtZXRob2QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQSAudGhyb3cgb3IgLnJldHVybiB3aGVuIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgbm8gLnRocm93XG4gICAgICAvLyBtZXRob2QgYWx3YXlzIHRlcm1pbmF0ZXMgdGhlIHlpZWxkKiBsb29wLlxuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIC8vIE5vdGU6IFtcInJldHVyblwiXSBtdXN0IGJlIHVzZWQgZm9yIEVTMyBwYXJzaW5nIGNvbXBhdGliaWxpdHkuXG4gICAgICAgIGlmIChkZWxlZ2F0ZS5pdGVyYXRvcltcInJldHVyblwiXSkge1xuICAgICAgICAgIC8vIElmIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgYSByZXR1cm4gbWV0aG9kLCBnaXZlIGl0IGFcbiAgICAgICAgICAvLyBjaGFuY2UgdG8gY2xlYW4gdXAuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInJldHVyblwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICAgIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgIC8vIElmIG1heWJlSW52b2tlRGVsZWdhdGUoY29udGV4dCkgY2hhbmdlZCBjb250ZXh0Lm1ldGhvZCBmcm9tXG4gICAgICAgICAgICAvLyBcInJldHVyblwiIHRvIFwidGhyb3dcIiwgbGV0IHRoYXQgb3ZlcnJpZGUgdGhlIFR5cGVFcnJvciBiZWxvdy5cbiAgICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgXCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICd0aHJvdycgbWV0aG9kXCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2gobWV0aG9kLCBkZWxlZ2F0ZS5pdGVyYXRvciwgY29udGV4dC5hcmcpO1xuXG4gICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICB2YXIgaW5mbyA9IHJlY29yZC5hcmc7XG5cbiAgICBpZiAoISBpbmZvKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0XCIpO1xuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICBpZiAoaW5mby5kb25lKSB7XG4gICAgICAvLyBBc3NpZ24gdGhlIHJlc3VsdCBvZiB0aGUgZmluaXNoZWQgZGVsZWdhdGUgdG8gdGhlIHRlbXBvcmFyeVxuICAgICAgLy8gdmFyaWFibGUgc3BlY2lmaWVkIGJ5IGRlbGVnYXRlLnJlc3VsdE5hbWUgKHNlZSBkZWxlZ2F0ZVlpZWxkKS5cbiAgICAgIGNvbnRleHRbZGVsZWdhdGUucmVzdWx0TmFtZV0gPSBpbmZvLnZhbHVlO1xuXG4gICAgICAvLyBSZXN1bWUgZXhlY3V0aW9uIGF0IHRoZSBkZXNpcmVkIGxvY2F0aW9uIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0Lm5leHQgPSBkZWxlZ2F0ZS5uZXh0TG9jO1xuXG4gICAgICAvLyBJZiBjb250ZXh0Lm1ldGhvZCB3YXMgXCJ0aHJvd1wiIGJ1dCB0aGUgZGVsZWdhdGUgaGFuZGxlZCB0aGVcbiAgICAgIC8vIGV4Y2VwdGlvbiwgbGV0IHRoZSBvdXRlciBnZW5lcmF0b3IgcHJvY2VlZCBub3JtYWxseS4gSWZcbiAgICAgIC8vIGNvbnRleHQubWV0aG9kIHdhcyBcIm5leHRcIiwgZm9yZ2V0IGNvbnRleHQuYXJnIHNpbmNlIGl0IGhhcyBiZWVuXG4gICAgICAvLyBcImNvbnN1bWVkXCIgYnkgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yLiBJZiBjb250ZXh0Lm1ldGhvZCB3YXNcbiAgICAgIC8vIFwicmV0dXJuXCIsIGFsbG93IHRoZSBvcmlnaW5hbCAucmV0dXJuIGNhbGwgdG8gY29udGludWUgaW4gdGhlXG4gICAgICAvLyBvdXRlciBnZW5lcmF0b3IuXG4gICAgICBpZiAoY29udGV4dC5tZXRob2QgIT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgY29udGV4dC5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmUteWllbGQgdGhlIHJlc3VsdCByZXR1cm5lZCBieSB0aGUgZGVsZWdhdGUgbWV0aG9kLlxuICAgICAgcmV0dXJuIGluZm87XG4gICAgfVxuXG4gICAgLy8gVGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGlzIGZpbmlzaGVkLCBzbyBmb3JnZXQgaXQgYW5kIGNvbnRpbnVlIHdpdGhcbiAgICAvLyB0aGUgb3V0ZXIgZ2VuZXJhdG9yLlxuICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICB9XG5cbiAgLy8gRGVmaW5lIEdlbmVyYXRvci5wcm90b3R5cGUue25leHQsdGhyb3cscmV0dXJufSBpbiB0ZXJtcyBvZiB0aGVcbiAgLy8gdW5pZmllZCAuX2ludm9rZSBoZWxwZXIgbWV0aG9kLlxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoR3ApO1xuXG4gIGRlZmluZShHcCwgdG9TdHJpbmdUYWdTeW1ib2wsIFwiR2VuZXJhdG9yXCIpO1xuXG4gIC8vIEEgR2VuZXJhdG9yIHNob3VsZCBhbHdheXMgcmV0dXJuIGl0c2VsZiBhcyB0aGUgaXRlcmF0b3Igb2JqZWN0IHdoZW4gdGhlXG4gIC8vIEBAaXRlcmF0b3IgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGl0LiBTb21lIGJyb3dzZXJzJyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlXG4gIC8vIGl0ZXJhdG9yIHByb3RvdHlwZSBjaGFpbiBpbmNvcnJlY3RseSBpbXBsZW1lbnQgdGhpcywgY2F1c2luZyB0aGUgR2VuZXJhdG9yXG4gIC8vIG9iamVjdCB0byBub3QgYmUgcmV0dXJuZWQgZnJvbSB0aGlzIGNhbGwuIFRoaXMgZW5zdXJlcyB0aGF0IGRvZXNuJ3QgaGFwcGVuLlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2lzc3Vlcy8yNzQgZm9yIG1vcmUgZGV0YWlscy5cbiAgR3BbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgR3AudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfTtcblxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuICAgIHZhciBlbnRyeSA9IHsgdHJ5TG9jOiBsb2NzWzBdIH07XG5cbiAgICBpZiAoMSBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV07XG4gICAgfVxuXG4gICAgaWYgKDIgaW4gbG9jcykge1xuICAgICAgZW50cnkuZmluYWxseUxvYyA9IGxvY3NbMl07XG4gICAgICBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM107XG4gICAgfVxuXG4gICAgdGhpcy50cnlFbnRyaWVzLnB1c2goZW50cnkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIjtcbiAgICBkZWxldGUgcmVjb3JkLmFyZztcbiAgICBlbnRyeS5jb21wbGV0aW9uID0gcmVjb3JkO1xuICB9XG5cbiAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuICAgIC8vIFRoZSByb290IGVudHJ5IG9iamVjdCAoZWZmZWN0aXZlbHkgYSB0cnkgc3RhdGVtZW50IHdpdGhvdXQgYSBjYXRjaFxuICAgIC8vIG9yIGEgZmluYWxseSBibG9jaykgZ2l2ZXMgdXMgYSBwbGFjZSB0byBzdG9yZSB2YWx1ZXMgdGhyb3duIGZyb21cbiAgICAvLyBsb2NhdGlvbnMgd2hlcmUgdGhlcmUgaXMgbm8gZW5jbG9zaW5nIHRyeSBzdGF0ZW1lbnQuXG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3sgdHJ5TG9jOiBcInJvb3RcIiB9XTtcbiAgICB0cnlMb2NzTGlzdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyk7XG4gICAgdGhpcy5yZXNldCh0cnVlKTtcbiAgfVxuXG4gIGV4cG9ydHMua2V5cyA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICAgIGtleXMucmV2ZXJzZSgpO1xuXG4gICAgLy8gUmF0aGVyIHRoYW4gcmV0dXJuaW5nIGFuIG9iamVjdCB3aXRoIGEgbmV4dCBtZXRob2QsIHdlIGtlZXBcbiAgICAvLyB0aGluZ3Mgc2ltcGxlIGFuZCByZXR1cm4gdGhlIG5leHQgZnVuY3Rpb24gaXRzZWxmLlxuICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgd2hpbGUgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkge1xuICAgICAgICAgIG5leHQudmFsdWUgPSBrZXk7XG4gICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVG8gYXZvaWQgY3JlYXRpbmcgYW4gYWRkaXRpb25hbCBvYmplY3QsIHdlIGp1c3QgaGFuZyB0aGUgLnZhbHVlXG4gICAgICAvLyBhbmQgLmRvbmUgcHJvcGVydGllcyBvZmYgdGhlIG5leHQgZnVuY3Rpb24gb2JqZWN0IGl0c2VsZi4gVGhpc1xuICAgICAgLy8gYWxzbyBlbnN1cmVzIHRoYXQgdGhlIG1pbmlmaWVyIHdpbGwgbm90IGFub255bWl6ZSB0aGUgZnVuY3Rpb24uXG4gICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiB2YWx1ZXMoaXRlcmFibGUpIHtcbiAgICBpZiAoaXRlcmFibGUpIHtcbiAgICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGl0ZXJhYmxlW2l0ZXJhdG9yU3ltYm9sXTtcbiAgICAgIGlmIChpdGVyYXRvck1ldGhvZCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JNZXRob2QuY2FsbChpdGVyYWJsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmFibGUubmV4dCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBpdGVyYWJsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc05hTihpdGVyYWJsZS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBpID0gLTEsIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgIHdoaWxlICgrK2kgPCBpdGVyYWJsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd24uY2FsbChpdGVyYWJsZSwgaSkpIHtcbiAgICAgICAgICAgICAgbmV4dC52YWx1ZSA9IGl0ZXJhYmxlW2ldO1xuICAgICAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV4dC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuXG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG5leHQubmV4dCA9IG5leHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGFuIGl0ZXJhdG9yIHdpdGggbm8gdmFsdWVzLlxuICAgIHJldHVybiB7IG5leHQ6IGRvbmVSZXN1bHQgfTtcbiAgfVxuICBleHBvcnRzLnZhbHVlcyA9IHZhbHVlcztcblxuICBmdW5jdGlvbiBkb25lUmVzdWx0KCkge1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuXG4gIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKHNraXBUZW1wUmVzZXQpIHtcbiAgICAgIHRoaXMucHJldiA9IDA7XG4gICAgICB0aGlzLm5leHQgPSAwO1xuICAgICAgLy8gUmVzZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuXG4gICAgICB0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChyZXNldFRyeUVudHJ5KTtcblxuICAgICAgaWYgKCFza2lwVGVtcFJlc2V0KSB7XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcykge1xuICAgICAgICAgIC8vIE5vdCBzdXJlIGFib3V0IHRoZSBvcHRpbWFsIG9yZGVyIG9mIHRoZXNlIGNvbmRpdGlvbnM6XG4gICAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09PSBcInRcIiAmJlxuICAgICAgICAgICAgICBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJlxuICAgICAgICAgICAgICAhaXNOYU4oK25hbWUuc2xpY2UoMSkpKSB7XG4gICAgICAgICAgICB0aGlzW25hbWVdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG5cbiAgICAgIHZhciByb290RW50cnkgPSB0aGlzLnRyeUVudHJpZXNbMF07XG4gICAgICB2YXIgcm9vdFJlY29yZCA9IHJvb3RFbnRyeS5jb21wbGV0aW9uO1xuICAgICAgaWYgKHJvb3RSZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJvb3RSZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG5cbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24oZXhjZXB0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgIHRocm93IGV4Y2VwdGlvbjtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKGxvYywgY2F1Z2h0KSB7XG4gICAgICAgIHJlY29yZC50eXBlID0gXCJ0aHJvd1wiO1xuICAgICAgICByZWNvcmQuYXJnID0gZXhjZXB0aW9uO1xuICAgICAgICBjb250ZXh0Lm5leHQgPSBsb2M7XG5cbiAgICAgICAgaWYgKGNhdWdodCkge1xuICAgICAgICAgIC8vIElmIHRoZSBkaXNwYXRjaGVkIGV4Y2VwdGlvbiB3YXMgY2F1Z2h0IGJ5IGEgY2F0Y2ggYmxvY2ssXG4gICAgICAgICAgLy8gdGhlbiBsZXQgdGhhdCBjYXRjaCBibG9jayBoYW5kbGUgdGhlIGV4Y2VwdGlvbiBub3JtYWxseS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICEhIGNhdWdodDtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IFwicm9vdFwiKSB7XG4gICAgICAgICAgLy8gRXhjZXB0aW9uIHRocm93biBvdXRzaWRlIG9mIGFueSB0cnkgYmxvY2sgdGhhdCBjb3VsZCBoYW5kbGVcbiAgICAgICAgICAvLyBpdCwgc28gc2V0IHRoZSBjb21wbGV0aW9uIHZhbHVlIG9mIHRoZSBlbnRpcmUgZnVuY3Rpb24gdG9cbiAgICAgICAgICAvLyB0aHJvdyB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpO1xuICAgICAgICAgIHZhciBoYXNGaW5hbGx5ID0gaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKTtcblxuICAgICAgICAgIGlmIChoYXNDYXRjaCAmJiBoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2F0Y2gpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWJydXB0OiBmdW5jdGlvbih0eXBlLCBhcmcpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKSAmJlxuICAgICAgICAgICAgdGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmluYWxseUVudHJ5ICYmXG4gICAgICAgICAgKHR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgICB0eXBlID09PSBcImNvbnRpbnVlXCIpICYmXG4gICAgICAgICAgZmluYWxseUVudHJ5LnRyeUxvYyA8PSBhcmcgJiZcbiAgICAgICAgICBhcmcgPD0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgLy8gSWdub3JlIHRoZSBmaW5hbGx5IGVudHJ5IGlmIGNvbnRyb2wgaXMgbm90IGp1bXBpbmcgdG8gYVxuICAgICAgICAvLyBsb2NhdGlvbiBvdXRzaWRlIHRoZSB0cnkvY2F0Y2ggYmxvY2suXG4gICAgICAgIGZpbmFsbHlFbnRyeSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWNvcmQgPSBmaW5hbGx5RW50cnkgPyBmaW5hbGx5RW50cnkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmVjb3JkLnR5cGUgPSB0eXBlO1xuICAgICAgcmVjb3JkLmFyZyA9IGFyZztcblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSkge1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICB0aGlzLm5leHQgPSBmaW5hbGx5RW50cnkuZmluYWxseUxvYztcbiAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBsZXRlKHJlY29yZCk7XG4gICAgfSxcblxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbihyZWNvcmQsIGFmdGVyTG9jKSB7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgIHJlY29yZC50eXBlID09PSBcImNvbnRpbnVlXCIpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gcmVjb3JkLmFyZztcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgdGhpcy5ydmFsID0gdGhpcy5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgIHRoaXMubmV4dCA9IFwiZW5kXCI7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiICYmIGFmdGVyTG9jKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IGFmdGVyTG9jO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9LFxuXG4gICAgZmluaXNoOiBmdW5jdGlvbihmaW5hbGx5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LmZpbmFsbHlMb2MgPT09IGZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB0aGlzLmNvbXBsZXRlKGVudHJ5LmNvbXBsZXRpb24sIGVudHJ5LmFmdGVyTG9jKTtcbiAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uKHRyeUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IHRyeUxvYykge1xuICAgICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICB2YXIgdGhyb3duID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhyb3duO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBjb250ZXh0LmNhdGNoIG1ldGhvZCBtdXN0IG9ubHkgYmUgY2FsbGVkIHdpdGggYSBsb2NhdGlvblxuICAgICAgLy8gYXJndW1lbnQgdGhhdCBjb3JyZXNwb25kcyB0byBhIGtub3duIGNhdGNoIGJsb2NrLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG5cbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbihpdGVyYWJsZSwgcmVzdWx0TmFtZSwgbmV4dExvYykge1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhpdGVyYWJsZSksXG4gICAgICAgIHJlc3VsdE5hbWU6IHJlc3VsdE5hbWUsXG4gICAgICAgIG5leHRMb2M6IG5leHRMb2NcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgLy8gRGVsaWJlcmF0ZWx5IGZvcmdldCB0aGUgbGFzdCBzZW50IHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3RcbiAgICAgICAgLy8gYWNjaWRlbnRhbGx5IHBhc3MgaXQgb24gdG8gdGhlIGRlbGVnYXRlLlxuICAgICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuICB9O1xuXG4gIC8vIFJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGlzIHNjcmlwdCBpcyBleGVjdXRpbmcgYXMgYSBDb21tb25KUyBtb2R1bGVcbiAgLy8gb3Igbm90LCByZXR1cm4gdGhlIHJ1bnRpbWUgb2JqZWN0IHNvIHRoYXQgd2UgY2FuIGRlY2xhcmUgdGhlIHZhcmlhYmxlXG4gIC8vIHJlZ2VuZXJhdG9yUnVudGltZSBpbiB0aGUgb3V0ZXIgc2NvcGUsIHdoaWNoIGFsbG93cyB0aGlzIG1vZHVsZSB0byBiZVxuICAvLyBpbmplY3RlZCBlYXNpbHkgYnkgYGJpbi9yZWdlbmVyYXRvciAtLWluY2x1ZGUtcnVudGltZSBzY3JpcHQuanNgLlxuICByZXR1cm4gZXhwb3J0cztcblxufShcbiAgLy8gSWYgdGhpcyBzY3JpcHQgaXMgZXhlY3V0aW5nIGFzIGEgQ29tbW9uSlMgbW9kdWxlLCB1c2UgbW9kdWxlLmV4cG9ydHNcbiAgLy8gYXMgdGhlIHJlZ2VuZXJhdG9yUnVudGltZSBuYW1lc3BhY2UuIE90aGVyd2lzZSBjcmVhdGUgYSBuZXcgZW1wdHlcbiAgLy8gb2JqZWN0LiBFaXRoZXIgd2F5LCB0aGUgcmVzdWx0aW5nIG9iamVjdCB3aWxsIGJlIHVzZWQgdG8gaW5pdGlhbGl6ZVxuICAvLyB0aGUgcmVnZW5lcmF0b3JSdW50aW1lIHZhcmlhYmxlIGF0IHRoZSB0b3Agb2YgdGhpcyBmaWxlLlxuICB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiID8gbW9kdWxlLmV4cG9ydHMgOiB7fVxuKSk7XG5cbnRyeSB7XG4gIHJlZ2VuZXJhdG9yUnVudGltZSA9IHJ1bnRpbWU7XG59IGNhdGNoIChhY2NpZGVudGFsU3RyaWN0TW9kZSkge1xuICAvLyBUaGlzIG1vZHVsZSBzaG91bGQgbm90IGJlIHJ1bm5pbmcgaW4gc3RyaWN0IG1vZGUsIHNvIHRoZSBhYm92ZVxuICAvLyBhc3NpZ25tZW50IHNob3VsZCBhbHdheXMgd29yayB1bmxlc3Mgc29tZXRoaW5nIGlzIG1pc2NvbmZpZ3VyZWQuIEp1c3RcbiAgLy8gaW4gY2FzZSBydW50aW1lLmpzIGFjY2lkZW50YWxseSBydW5zIGluIHN0cmljdCBtb2RlLCB3ZSBjYW4gZXNjYXBlXG4gIC8vIHN0cmljdCBtb2RlIHVzaW5nIGEgZ2xvYmFsIEZ1bmN0aW9uIGNhbGwuIFRoaXMgY291bGQgY29uY2VpdmFibHkgZmFpbFxuICAvLyBpZiBhIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IGZvcmJpZHMgdXNpbmcgRnVuY3Rpb24sIGJ1dCBpbiB0aGF0IGNhc2VcbiAgLy8gdGhlIHByb3BlciBzb2x1dGlvbiBpcyB0byBmaXggdGhlIGFjY2lkZW50YWwgc3RyaWN0IG1vZGUgcHJvYmxlbS4gSWZcbiAgLy8geW91J3ZlIG1pc2NvbmZpZ3VyZWQgeW91ciBidW5kbGVyIHRvIGZvcmNlIHN0cmljdCBtb2RlIGFuZCBhcHBsaWVkIGFcbiAgLy8gQ1NQIHRvIGZvcmJpZCBGdW5jdGlvbiwgYW5kIHlvdSdyZSBub3Qgd2lsbGluZyB0byBmaXggZWl0aGVyIG9mIHRob3NlXG4gIC8vIHByb2JsZW1zLCBwbGVhc2UgZGV0YWlsIHlvdXIgdW5pcXVlIHByZWRpY2FtZW50IGluIGEgR2l0SHViIGlzc3VlLlxuICBGdW5jdGlvbihcInJcIiwgXCJyZWdlbmVyYXRvclJ1bnRpbWUgPSByXCIpKHJ1bnRpbWUpO1xufVxuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgRlVOQ1RJT05fTkFNRV9FWElTVFMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpLkVYSVNUUztcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIEZ1bmN0aW9uUHJvdG90eXBlVG9TdHJpbmcgPSBGdW5jdGlvblByb3RvdHlwZS50b1N0cmluZztcbnZhciBuYW1lUkUgPSAvXlxccypmdW5jdGlvbiAoW14gKF0qKS87XG52YXIgTkFNRSA9ICduYW1lJztcblxuLy8gRnVuY3Rpb24gaW5zdGFuY2VzIGAubmFtZWAgcHJvcGVydHlcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZnVuY3Rpb24taW5zdGFuY2VzLW5hbWVcbmlmIChERVNDUklQVE9SUyAmJiAhRlVOQ1RJT05fTkFNRV9FWElTVFMpIHtcbiAgZGVmaW5lUHJvcGVydHkoRnVuY3Rpb25Qcm90b3R5cGUsIE5BTUUsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gRnVuY3Rpb25Qcm90b3R5cGVUb1N0cmluZy5jYWxsKHRoaXMpLm1hdGNoKG5hbWVSRSlbMV07XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cbiIsInR5cGUgUGxhdGZvcm0gPSBcIkJyb3dzZXJcIiB8IFwiTm9kZS5qc1wiO1xuXG5leHBvcnQgY2xhc3MgVW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBwdWJsaWMgcGxhdGZvcm06IFBsYXRmb3JtO1xuXG4gIGNvbnN0cnVjdG9yKHBsYXRmb3JtOiBQbGF0Zm9ybSkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBgVGhpcyBmdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGluICR7cGxhdGZvcm19IGVudmlyb25tZW50YDtcbiAgICBzdXBlcihtZXNzYWdlKTtcblxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0Vycm9yI0N1c3RvbV9FcnJvcl9UeXBlc1xuICAgIC8vIE1haW50YWlucyBwcm9wZXIgc3RhY2sgdHJhY2UgZm9yIHdoZXJlIG91ciBlcnJvciB3YXMgdGhyb3duIChvbmx5IGF2YWlsYWJsZSBvbiBWOClcbiAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFVuc3VwcG9ydGVkUGxhdGZvcm1FcnJvcik7XG4gICAgfVxuXG4gICAgdGhpcy5uYW1lID0gXCJVbnN1cHBvcnRlZFBsYXRmb3JtRXJyb3JcIjtcbiAgICB0aGlzLnBsYXRmb3JtID0gcGxhdGZvcm07XG5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0L1R5cGVTY3JpcHQvd2lraS9CcmVha2luZy1DaGFuZ2VzI2V4dGVuZGluZy1idWlsdC1pbnMtbGlrZS1lcnJvci1hcnJheS1hbmQtbWFwLW1heS1uby1sb25nZXItd29ya1xuICAgIC8vIFNldCB0aGUgcHJvdG90eXBlIGV4cGxpY2l0bHkuXG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIFVuc3VwcG9ydGVkUGxhdGZvcm1FcnJvci5wcm90b3R5cGUpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBVbnN1cHBvcnRlZFBsYXRmb3JtRXJyb3IgfSBmcm9tIFwiLi9VbnN1cHBvcnRlZFBsYXRmb3JtRXJyb3JcIjtcbmltcG9ydCB7IERpc2NyaW1pbmF0ZWRBdXRoIH0gZnJvbSBcIi4uL3R5cGVzL2F1dGhcIjtcblxuZXhwb3J0IGNvbnN0IHJlYWRGaWxlRnJvbVBhdGggPSAoZmlsZVBhdGg6IHN0cmluZykgPT4ge1xuICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yKFwiQnJvd3NlclwiKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRSZXF1ZXN0VG9rZW4gPSBhc3luYyAoKSA9PiB7XG4gIGlmIChcbiAgICB0eXBlb2Yga2ludG9uZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgIGtpbnRvbmUgIT09IG51bGwgJiZcbiAgICB0eXBlb2Yga2ludG9uZS5nZXRSZXF1ZXN0VG9rZW4gPT09IFwiZnVuY3Rpb25cIlxuICApIHtcbiAgICByZXR1cm4ga2ludG9uZS5nZXRSZXF1ZXN0VG9rZW4oKTtcbiAgfVxuXG4gIGlmIChcbiAgICB0eXBlb2YgZ2Fyb29uID09PSBcIm9iamVjdFwiICYmXG4gICAgZ2Fyb29uICE9PSBudWxsICYmXG4gICAgdHlwZW9mIGdhcm9vbi5jb25uZWN0Py5raW50b25lPy5nZXRSZXF1ZXN0VG9rZW4gPT09IFwiZnVuY3Rpb25cIlxuICApIHtcbiAgICByZXR1cm4gZ2Fyb29uLmNvbm5lY3Qua2ludG9uZS5nZXRSZXF1ZXN0VG9rZW4oKTtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihcInNlc3Npb24gYXV0aGVudGljYXRpb24gbXVzdCBzcGVjaWZ5IGEgcmVxdWVzdCB0b2tlblwiKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXREZWZhdWx0QXV0aCA9ICgpOiBEaXNjcmltaW5hdGVkQXV0aCA9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJzZXNzaW9uXCIsXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgYnVpbGRQbGF0Zm9ybURlcGVuZGVudENvbmZpZyA9ICgpID0+IHtcbiAgcmV0dXJuIHt9O1xufTtcblxuZXhwb3J0IGNvbnN0IGJ1aWxkSGVhZGVycyA9ICgpID0+IHtcbiAgcmV0dXJuIHt9O1xufTtcblxuZXhwb3J0IGNvbnN0IGJ1aWxkRm9ybURhdGFWYWx1ZSA9IChkYXRhOiB1bmtub3duKSA9PiB7XG4gIHJldHVybiBuZXcgQmxvYihbZGF0YV0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGJ1aWxkQmFzZVVybCA9IChiYXNlVXJsPzogc3RyaW5nKSA9PiB7XG4gIGlmIChiYXNlVXJsKSB7XG4gICAgcmV0dXJuIGJhc2VVcmw7XG4gIH1cblxuICBjb25zdCB7IGhvc3QsIHByb3RvY29sIH0gPSBsb2NhdGlvbiE7XG4gIHJldHVybiBgJHtwcm90b2NvbH0vLyR7aG9zdH1gO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFZlcnNpb24gPSAoKSA9PiB7XG4gIHJldHVybiBQQUNLQUdFX1ZFUlNJT047XG59O1xuIiwidmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG5cbi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIHRoYXQsIGxlbmd0aCkge1xuICBhQ2FsbGFibGUoZm4pO1xuICBpZiAodGhhdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZm47XG4gIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCk7XG4gICAgfTtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbiAoYSkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSk7XG4gICAgfTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYik7XG4gICAgfTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYiwgYyk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCJ2YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxudmFyIHB1c2ggPSBbXS5wdXNoO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgZm9yRWFjaCwgbWFwLCBmaWx0ZXIsIHNvbWUsIGV2ZXJ5LCBmaW5kLCBmaW5kSW5kZXgsIGZpbHRlclJlamVjdCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgdmFyIElTX01BUCA9IFRZUEUgPT0gMTtcbiAgdmFyIElTX0ZJTFRFUiA9IFRZUEUgPT0gMjtcbiAgdmFyIElTX1NPTUUgPSBUWVBFID09IDM7XG4gIHZhciBJU19FVkVSWSA9IFRZUEUgPT0gNDtcbiAgdmFyIElTX0ZJTkRfSU5ERVggPSBUWVBFID09IDY7XG4gIHZhciBJU19GSUxURVJfUkVKRUNUID0gVFlQRSA9PSA3O1xuICB2YXIgTk9fSE9MRVMgPSBUWVBFID09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgY2FsbGJhY2tmbiwgdGhhdCwgc3BlY2lmaWNDcmVhdGUpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgc2VsZiA9IEluZGV4ZWRPYmplY3QoTyk7XG4gICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIHRoYXQsIDMpO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShzZWxmKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBjcmVhdGUgPSBzcGVjaWZpY0NyZWF0ZSB8fCBhcnJheVNwZWNpZXNDcmVhdGU7XG4gICAgdmFyIHRhcmdldCA9IElTX01BUCA/IGNyZWF0ZSgkdGhpcywgbGVuZ3RoKSA6IElTX0ZJTFRFUiB8fCBJU19GSUxURVJfUkVKRUNUID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgdmFsdWUsIHJlc3VsdDtcbiAgICBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKE5PX0hPTEVTIHx8IGluZGV4IGluIHNlbGYpIHtcbiAgICAgIHZhbHVlID0gc2VsZltpbmRleF07XG4gICAgICByZXN1bHQgPSBib3VuZEZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgTyk7XG4gICAgICBpZiAoVFlQRSkge1xuICAgICAgICBpZiAoSVNfTUFQKSB0YXJnZXRbaW5kZXhdID0gcmVzdWx0OyAvLyBtYXBcbiAgICAgICAgZWxzZSBpZiAocmVzdWx0KSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiB0cnVlOyAgICAgICAgICAgICAgLy8gc29tZVxuICAgICAgICAgIGNhc2UgNTogcmV0dXJuIHZhbHVlOyAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgIC8vIGZpbmRJbmRleFxuICAgICAgICAgIGNhc2UgMjogcHVzaC5jYWxsKHRhcmdldCwgdmFsdWUpOyAvLyBmaWx0ZXJcbiAgICAgICAgfSBlbHNlIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgNDogcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAvLyBldmVyeVxuICAgICAgICAgIGNhc2UgNzogcHVzaC5jYWxsKHRhcmdldCwgdmFsdWUpOyAvLyBmaWx0ZXJSZWplY3RcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gSVNfRklORF9JTkRFWCA/IC0xIDogSVNfU09NRSB8fCBJU19FVkVSWSA/IElTX0VWRVJZIDogdGFyZ2V0O1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbiAgZm9yRWFjaDogY3JlYXRlTWV0aG9kKDApLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLm1hcGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLm1hcFxuICBtYXA6IGNyZWF0ZU1ldGhvZCgxKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWx0ZXJcbiAgZmlsdGVyOiBjcmVhdGVNZXRob2QoMiksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuc29tZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNvbWVcbiAgc29tZTogY3JlYXRlTWV0aG9kKDMpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmV2ZXJ5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZXZlcnlcbiAgZXZlcnk6IGNyZWF0ZU1ldGhvZCg0KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maW5kYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZFxuICBmaW5kOiBjcmVhdGVNZXRob2QoNSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmluZEluZGV4YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZEluZGV4XG4gIGZpbmRJbmRleDogY3JlYXRlTWV0aG9kKDYpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlclJlamVjdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWFycmF5LWZpbHRlcmluZ1xuICBmaWx0ZXJSZWplY3Q6IGNyZWF0ZU1ldGhvZCg3KVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRtYXAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykubWFwO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcblxudmFyIEhBU19TUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdtYXAnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5tYXBgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUubWFwXG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAc3BlY2llc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIUhBU19TUEVDSUVTX1NVUFBPUlQgfSwge1xuICBtYXA6IGZ1bmN0aW9uIG1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkbWFwKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCJleHBvcnQgY29uc3QgYnVpbGRQYXRoID0gKHBhcmFtczoge1xuICBlbmRwb2ludE5hbWU6IHN0cmluZztcbiAgZ3Vlc3RTcGFjZUlkPzogbnVtYmVyIHwgc3RyaW5nO1xuICBwcmV2aWV3PzogYm9vbGVhbjtcbn0pID0+IHtcbiAgY29uc3QgeyBlbmRwb2ludE5hbWUsIGd1ZXN0U3BhY2VJZCwgcHJldmlldyB9ID0gcGFyYW1zO1xuICBjb25zdCBndWVzdFBhdGggPSBndWVzdFNwYWNlSWQgIT09IHVuZGVmaW5lZCA/IGAvZ3Vlc3QvJHtndWVzdFNwYWNlSWR9YCA6IFwiXCI7XG4gIGNvbnN0IHByZXZpZXdQYXRoID0gcHJldmlldyA/IFwiL3ByZXZpZXdcIiA6IFwiXCI7XG4gIHJldHVybiBgL2ske2d1ZXN0UGF0aH0vdjEke3ByZXZpZXdQYXRofS8ke2VuZHBvaW50TmFtZX0uanNvbmA7XG59O1xuIiwiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gXCIuLi9odHRwXCI7XG5pbXBvcnQgeyBidWlsZFBhdGggfSBmcm9tIFwiLi4vdXJsXCI7XG5cbmV4cG9ydCB0eXBlIEVuZHBvaW50TmFtZSA9XG4gIHwgXCJyZWNvcmRcIlxuICB8IFwicmVjb3Jkc1wiXG4gIHwgXCJyZWNvcmQvc3RhdHVzXCJcbiAgfCBcInJlY29yZHMvc3RhdHVzXCJcbiAgfCBcInJlY29yZC9hc3NpZ25lZXNcIjtcblxuZXhwb3J0IGNsYXNzIEJ1bGtSZXF1ZXN0Q2xpZW50IHtcbiAgcHJpdmF0ZSBjbGllbnQ6IEh0dHBDbGllbnQ7XG4gIHByaXZhdGUgZ3Vlc3RTcGFjZUlkPzogbnVtYmVyIHwgc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgUkVRVUVTVFNfTEVOR1RIX0xJTUlUOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoY2xpZW50OiBIdHRwQ2xpZW50LCBndWVzdFNwYWNlSWQ/OiBudW1iZXIgfCBzdHJpbmcpIHtcbiAgICB0aGlzLmNsaWVudCA9IGNsaWVudDtcbiAgICB0aGlzLmd1ZXN0U3BhY2VJZCA9IGd1ZXN0U3BhY2VJZDtcbiAgICB0aGlzLlJFUVVFU1RTX0xFTkdUSF9MSU1JVCA9IDIwO1xuICB9XG5cbiAgcHVibGljIHNlbmQocGFyYW1zOiB7XG4gICAgcmVxdWVzdHM6IEFycmF5PFxuICAgICAgfCB7XG4gICAgICAgICAgbWV0aG9kOiBzdHJpbmc7XG4gICAgICAgICAgYXBpOiBzdHJpbmc7XG4gICAgICAgICAgcGF5bG9hZDogb2JqZWN0O1xuICAgICAgICB9XG4gICAgICB8IHtcbiAgICAgICAgICBtZXRob2Q6IHN0cmluZztcbiAgICAgICAgICBlbmRwb2ludE5hbWU6IEVuZHBvaW50TmFtZTtcbiAgICAgICAgICBwYXlsb2FkOiBvYmplY3Q7XG4gICAgICAgIH1cbiAgICA+O1xuICB9KTogUHJvbWlzZTx7IHJlc3VsdHM6IEFycmF5PHsgW0s6IHN0cmluZ106IGFueSB9PiB9PiB7XG4gICAgY29uc3QgeyByZXF1ZXN0czogcmVxdWVzdHNQYXJhbSB9ID0gcGFyYW1zO1xuXG4gICAgY29uc3QgcmVxdWVzdHMgPSByZXF1ZXN0c1BhcmFtLm1hcCgocmVxdWVzdCkgPT4ge1xuICAgICAgaWYgKFwiZW5kcG9pbnROYW1lXCIgaW4gcmVxdWVzdCkge1xuICAgICAgICBjb25zdCB7IGVuZHBvaW50TmFtZSwgLi4ucmVzdCB9ID0gcmVxdWVzdDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhcGk6IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7IGVuZHBvaW50TmFtZSB9KSxcbiAgICAgICAgICAuLi5yZXN0LFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlcXVlc3Q7XG4gICAgfSk7XG5cbiAgICBjb25zdCBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgIGVuZHBvaW50TmFtZTogXCJidWxrUmVxdWVzdFwiLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmNsaWVudC5wb3N0KHBhdGgsIHsgcmVxdWVzdHMgfSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQocGFyYW1zOiB7IGVuZHBvaW50TmFtZTogc3RyaW5nIH0pIHtcbiAgICByZXR1cm4gYnVpbGRQYXRoKHtcbiAgICAgIC4uLnBhcmFtcyxcbiAgICAgIGd1ZXN0U3BhY2VJZDogdGhpcy5ndWVzdFNwYWNlSWQsXG4gICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tIFwiLi4vaHR0cFwiO1xuaW1wb3J0IHsgYnVpbGRQYXRoIH0gZnJvbSBcIi4uL3VybFwiO1xuaW1wb3J0IHtcbiAgQXBwSUQsXG4gIFJlY29yZElELFxuICBSZXZpc2lvbixcbiAgUHJvcGVydGllcyxcbiAgTGFuZyxcbiAgTGF5b3V0LFxuICBWaWV3Rm9yUmVzcG9uc2UsXG4gIFZpZXdGb3JQYXJhbWV0ZXIsXG4gIEFwcCxcbiAgU3RhdGVGb3JSZXNwb25zZSxcbiAgU3RhdGVGb3JQYXJhbWV0ZXIsXG4gIEFjdGlvbkZvclJlc3BvbnNlLFxuICBBY3Rpb25Gb3JQYXJhbWV0ZXIsXG4gIERlcGxveVN0YXR1cyxcbiAgRmllbGRSaWdodEZvclJlc3BvbnNlLFxuICBGaWVsZFJpZ2h0Rm9yUGFyYW1ldGVyLFxuICBBcHBSaWdodEVudGl0eUZvclJlc3BvbnNlLFxuICBBcHBSaWdodEVudGl0eUZvclBhcmFtZXRlcixcbiAgRXZhbHVhdGVkUmVjb3JkUmlnaHQsXG4gIFJlY29yZFJpZ2h0Rm9yUmVzcG9uc2UsXG4gIFJlY29yZFJpZ2h0Rm9yUGFyYW1ldGVyLFxuICBBcHBDdXN0b21pemVTY29wZSxcbiAgQXBwQ3VzdG9taXplRm9yUmVzcG9uc2UsXG4gIEFwcEN1c3RvbWl6ZUZvclBhcmFtZXRlcixcbiAgR2VuZXJhbE5vdGlmaWNhdGlvbkZvclBhcmFtZXRlcixcbiAgR2VuZXJhbE5vdGlmaWNhdGlvbkZvclJlc3BvbnNlLFxuICBQZXJSZWNvcmROb3RpZmljYXRpb25Gb3JQYXJhbWV0ZXIsXG4gIFBlclJlY29yZE5vdGlmaWNhdGlvbkZvclJlc3BvbnNlLFxuICBSZW1pbmRlck5vdGlmaWNhdGlvbkZvclBhcmFtZXRlcixcbiAgUmVtaW5kZXJOb3RpZmljYXRpb25Gb3JSZXNwb25zZSxcbiAgUmVwb3J0Rm9yUGFyYW1ldGVyLFxuICBSZXBvcnRGb3JSZXNwb25zZSxcbiAgQXBwQWN0aW9uc0ZvclBhcmFtZXRlcixcbiAgQXBwQWN0aW9uc0ZvclJlc3BvbnNlLFxufSBmcm9tIFwiLi90eXBlc1wiO1xudHlwZSBSb3dMYXlvdXRGb3JQYXJhbWV0ZXIgPSB7XG4gIHR5cGU6IFwiUk9XXCI7XG4gIGZpZWxkczogQXJyYXk8eyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0+O1xufTtcbnR5cGUgU3VidGFibGVMYXlvdXRGb3JQYXJhbWV0ZXIgPSB7XG4gIHR5cGU6IFwiU1VCVEFCTEVcIjtcbiAgY29kZTogc3RyaW5nO1xuICBmaWVsZHM6IEFycmF5PHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9Pjtcbn07XG50eXBlIEdyb3VwTGF5b3V0Rm9yUGFyYW1ldGVyID0ge1xuICB0eXBlOiBcIkdST1VQXCI7XG4gIGNvZGU6IHN0cmluZztcbiAgbGF5b3V0OiBSb3dMYXlvdXRGb3JQYXJhbWV0ZXJbXTtcbn07XG50eXBlIExheW91dEZvclBhcmFtZXRlciA9IEFycmF5PFxuICBSb3dMYXlvdXRGb3JQYXJhbWV0ZXIgfCBTdWJ0YWJsZUxheW91dEZvclBhcmFtZXRlciB8IEdyb3VwTGF5b3V0Rm9yUGFyYW1ldGVyXG4+O1xudHlwZSBOZXN0ZWRQYXJ0aWFsPFQ+ID0gVCBleHRlbmRzIG9iamVjdFxuICA/IHtcbiAgICAgIFtLIGluIGtleW9mIFRdPzogTmVzdGVkUGFydGlhbDxUW0tdPjtcbiAgICB9XG4gIDogVDtcblxudHlwZSBQcm9wZXJ0aWVzRm9yUGFyYW1ldGVyID0gTmVzdGVkUGFydGlhbDxQcm9wZXJ0aWVzPjtcblxuZXhwb3J0IGNsYXNzIEFwcENsaWVudCB7XG4gIHByaXZhdGUgY2xpZW50OiBIdHRwQ2xpZW50O1xuICBwcml2YXRlIGd1ZXN0U3BhY2VJZD86IG51bWJlciB8IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihjbGllbnQ6IEh0dHBDbGllbnQsIGd1ZXN0U3BhY2VJZD86IG51bWJlciB8IHN0cmluZykge1xuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50O1xuICAgIHRoaXMuZ3Vlc3RTcGFjZUlkID0gZ3Vlc3RTcGFjZUlkO1xuICB9XG5cbiAgcHVibGljIGdldEZvcm1GaWVsZHM8VCBleHRlbmRzIFByb3BlcnRpZXM+KHBhcmFtczoge1xuICAgIGFwcDogQXBwSUQ7XG4gICAgbGFuZz86IExhbmc7XG4gICAgcHJldmlldz86IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPHsgcHJvcGVydGllczogVDsgcmV2aXNpb246IHN0cmluZyB9PiB7XG4gICAgY29uc3QgeyBwcmV2aWV3LCAuLi5yZXN0IH0gPSBwYXJhbXM7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL2Zvcm0vZmllbGRzXCIsXG4gICAgICBwcmV2aWV3LFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmNsaWVudC5nZXQocGF0aCwgeyAuLi5yZXN0IH0pO1xuICB9XG5cbiAgcHVibGljIGFkZEZvcm1GaWVsZHMocGFyYW1zOiB7XG4gICAgYXBwOiBBcHBJRDtcbiAgICBwcm9wZXJ0aWVzOiBQcm9wZXJ0aWVzRm9yUGFyYW1ldGVyO1xuICAgIHJldmlzaW9uPzogUmV2aXNpb247XG4gIH0pOiBQcm9taXNlPHsgcmV2aXNpb246IHN0cmluZyB9PiB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL2Zvcm0vZmllbGRzXCIsXG4gICAgICBwcmV2aWV3OiB0cnVlLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmNsaWVudC5wb3N0KHBhdGgsIHBhcmFtcyk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlRm9ybUZpZWxkcyhwYXJhbXM6IHtcbiAgICBhcHA6IEFwcElEO1xuICAgIHByb3BlcnRpZXM6IFByb3BlcnRpZXNGb3JQYXJhbWV0ZXI7XG4gICAgcmV2aXNpb24/OiBSZXZpc2lvbjtcbiAgfSk6IFByb21pc2U8eyByZXZpc2lvbjogc3RyaW5nIH0+IHtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvZm9ybS9maWVsZHNcIixcbiAgICAgIHByZXZpZXc6IHRydWUsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LnB1dChwYXRoLCBwYXJhbXMpO1xuICB9XG5cbiAgcHVibGljIGRlbGV0ZUZvcm1GaWVsZHMocGFyYW1zOiB7XG4gICAgYXBwOiBBcHBJRDtcbiAgICBmaWVsZHM6IHN0cmluZ1tdO1xuICAgIHJldmlzaW9uPzogUmV2aXNpb247XG4gIH0pIHtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvZm9ybS9maWVsZHNcIixcbiAgICAgIHByZXZpZXc6IHRydWUsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LmRlbGV0ZShwYXRoLCBwYXJhbXMpO1xuICB9XG5cbiAgcHVibGljIGdldEZvcm1MYXlvdXQ8VCBleHRlbmRzIExheW91dD4ocGFyYW1zOiB7XG4gICAgYXBwOiBBcHBJRDtcbiAgICBwcmV2aWV3PzogYm9vbGVhbjtcbiAgfSk6IFByb21pc2U8eyBsYXlvdXQ6IFQ7IHJldmlzaW9uOiBzdHJpbmcgfT4ge1xuICAgIGNvbnN0IHsgcHJldmlldywgLi4ucmVzdCB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC9mb3JtL2xheW91dFwiLFxuICAgICAgcHJldmlldyxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHBhdGgsIHsgLi4ucmVzdCB9KTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVGb3JtTGF5b3V0KHBhcmFtczoge1xuICAgIGFwcDogQXBwSUQ7XG4gICAgbGF5b3V0OiBMYXlvdXRGb3JQYXJhbWV0ZXI7XG4gICAgcmV2aXNpb24/OiBSZXZpc2lvbjtcbiAgfSk6IFByb21pc2U8eyByZXZpc2lvbjogc3RyaW5nIH0+IHtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvZm9ybS9sYXlvdXRcIixcbiAgICAgIHByZXZpZXc6IHRydWUsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LnB1dChwYXRoLCBwYXJhbXMpO1xuICB9XG5cbiAgcHVibGljIGdldFZpZXdzKHBhcmFtczoge1xuICAgIGFwcDogQXBwSUQ7XG4gICAgbGFuZz86IExhbmc7XG4gICAgcHJldmlldz86IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPHtcbiAgICB2aWV3czogeyBbdmlld05hbWU6IHN0cmluZ106IFZpZXdGb3JSZXNwb25zZSB9O1xuICAgIHJldmlzaW9uOiBzdHJpbmc7XG4gIH0+IHtcbiAgICBjb25zdCB7IHByZXZpZXcsIC4uLnJlc3QgfSA9IHBhcmFtcztcbiAgICBjb25zdCBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvdmlld3NcIixcbiAgICAgIHByZXZpZXcsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCByZXN0KTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVWaWV3cyhwYXJhbXM6IHtcbiAgICBhcHA6IEFwcElEO1xuICAgIHZpZXdzOiB7IFt2aWV3TmFtZTogc3RyaW5nXTogVmlld0ZvclBhcmFtZXRlciB9O1xuICAgIHJldmlzaW9uPzogUmV2aXNpb247XG4gIH0pOiBQcm9taXNlPHtcbiAgICB2aWV3czogeyBbdmlld05hbWU6IHN0cmluZ106IHsgaWQ6IHN0cmluZyB9IH07XG4gICAgcmV2aXNpb246IHN0cmluZztcbiAgfT4ge1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC92aWV3c1wiLFxuICAgICAgcHJldmlldzogdHJ1ZSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQucHV0KHBhdGgsIHBhcmFtcyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QXBwKHBhcmFtczogeyBpZDogQXBwSUQgfSk6IFByb21pc2U8QXBwPiB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICBlbmRwb2ludE5hbWU6IFwiYXBwXCIsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCBwYXJhbXMpO1xuICB9XG5cbiAgcHVibGljIGdldEFwcHMocGFyYW1zOiB7XG4gICAgaWRzPzogQXBwSURbXSB8IG51bGw7XG4gICAgY29kZXM/OiBzdHJpbmdbXSB8IG51bGw7XG4gICAgbmFtZT86IHN0cmluZyB8IG51bGw7XG4gICAgc3BhY2VJZHM/OiBBcnJheTxzdHJpbmcgfCBudW1iZXI+IHwgbnVsbDtcbiAgICBsaW1pdD86IHN0cmluZyB8IG51bWJlcjtcbiAgICBvZmZzZXQ/OiBzdHJpbmcgfCBudW1iZXI7XG4gIH0pOiBQcm9taXNlPHsgYXBwczogQXBwW10gfT4ge1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgZW5kcG9pbnROYW1lOiBcImFwcHNcIixcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHBhdGgsIHBhcmFtcyk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYWRkQXBwKHBhcmFtczoge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBzcGFjZT86IHN0cmluZyB8IG51bWJlcjtcbiAgfSk6IFByb21pc2U8eyBhcHA6IHN0cmluZzsgcmV2aXNpb246IHN0cmluZyB9PiB7XG4gICAgY29uc3QgeyBuYW1lLCBzcGFjZSB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgZW5kcG9pbnROYW1lOiBcImFwcFwiLFxuICAgICAgcHJldmlldzogdHJ1ZSxcbiAgICB9KTtcbiAgICBpZiAoc3BhY2UpIHtcbiAgICAgIC8vIE5PVEU6IEFsdGhvdWdoIGB0aHJlYWRgIHBhcmFtZXRlciBpcyByZXF1aXJlZCBpbiBSRVNUIEFQSSxcbiAgICAgIC8vIHRoZXJlIGFyZSBubyB2aXN1YWwgcmVwcmVzZW50YXRpb25zIG9mIGFwcHMgYmVpbmcgcmVsYXRlZCB0byB0aHJlYWRzLlxuICAgICAgLy8gTW9yZW92ZXIsIHRoZXJlIGlzIGN1cnJlbnRseSBubyBoZWxwZnVsIHJlYXNvbiB0byBjcmVhdGUgYXBwcyBpbiB0aHJlYWRzIG90aGVyIHRoYW4gdGhlIGRlZmF1bHQgdGhyZWFkLFxuICAgICAgLy8gc28gdGhlIEFQSSBDbGllbnQgc2V0cyB0aGUgZGVmYXVsdCB0aHJlYWQgaWQgaGVyZS5cbiAgICAgIGNvbnN0IHNwYWNlUGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgIGVuZHBvaW50TmFtZTogXCJzcGFjZVwiLFxuICAgICAgfSk7XG4gICAgICBjb25zdCB7IGRlZmF1bHRUaHJlYWQgfSA9IGF3YWl0IHRoaXMuY2xpZW50LmdldChzcGFjZVBhdGgsIHtcbiAgICAgICAgaWQ6IHNwYWNlLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gdGhpcy5jbGllbnQucG9zdChwYXRoLCB7IC4uLnBhcmFtcywgdGhyZWFkOiBkZWZhdWx0VGhyZWFkIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jbGllbnQucG9zdChwYXRoLCB7IG5hbWUgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QXBwU2V0dGluZ3MocGFyYW1zOiB7XG4gICAgYXBwOiBBcHBJRDtcbiAgICBsYW5nPzogTGFuZztcbiAgICBwcmV2aWV3PzogYm9vbGVhbjtcbiAgfSk6IFByb21pc2U8e1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgIGljb246XG4gICAgICB8IHtcbiAgICAgICAgICB0eXBlOiBcIkZJTEVcIjtcbiAgICAgICAgICBmaWxlOiB7XG4gICAgICAgICAgICBjb250ZW50VHlwZTogc3RyaW5nO1xuICAgICAgICAgICAgZmlsZUtleTogc3RyaW5nO1xuICAgICAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICAgICAgc2l6ZTogc3RyaW5nO1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIHwgeyB0eXBlOiBcIlBSRVNFVFwiOyBrZXk6IHN0cmluZyB9O1xuICAgIHRoZW1lOlxuICAgICAgfCBcIldISVRFXCJcbiAgICAgIHwgXCJDTElQQk9BUkRcIlxuICAgICAgfCBcIkJJTkRFUlwiXG4gICAgICB8IFwiUEVOQ0lMXCJcbiAgICAgIHwgXCJDTElQU1wiXG4gICAgICB8IFwiUkVEXCJcbiAgICAgIHwgXCJCTFVFXCJcbiAgICAgIHwgXCJHUkVFTlwiXG4gICAgICB8IFwiWUVMTE9XXCJcbiAgICAgIHwgXCJCTEFDS1wiO1xuICAgIHJldmlzaW9uOiBzdHJpbmc7XG4gIH0+IHtcbiAgICBjb25zdCB7IHByZXZpZXcsIC4uLnJlc3QgfSA9IHBhcmFtcztcbiAgICBjb25zdCBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvc2V0dGluZ3NcIixcbiAgICAgIHByZXZpZXcsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCByZXN0KTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVBcHBTZXR0aW5ncyhwYXJhbXM6IHtcbiAgICBhcHA6IEFwcElEO1xuICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgaWNvbj86XG4gICAgICB8IHtcbiAgICAgICAgICB0eXBlOiBcIkZJTEVcIjtcbiAgICAgICAgICBmaWxlOiB7XG4gICAgICAgICAgICBmaWxlS2V5OiBzdHJpbmc7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfCB7IHR5cGU6IFwiUFJFU0VUXCI7IGtleTogc3RyaW5nIH07XG4gICAgdGhlbWU/OlxuICAgICAgfCBcIldISVRFXCJcbiAgICAgIHwgXCJDTElQQk9BUkRcIlxuICAgICAgfCBcIkJJTkRFUlwiXG4gICAgICB8IFwiUEVOQ0lMXCJcbiAgICAgIHwgXCJDTElQU1wiXG4gICAgICB8IFwiUkVEXCJcbiAgICAgIHwgXCJCTFVFXCJcbiAgICAgIHwgXCJHUkVFTlwiXG4gICAgICB8IFwiWUVMTE9XXCJcbiAgICAgIHwgXCJCTEFDS1wiO1xuICAgIHJldmlzaW9uPzogUmV2aXNpb247XG4gIH0pOiBQcm9taXNlPHsgcmV2aXNpb246IHN0cmluZyB9PiB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL3NldHRpbmdzXCIsXG4gICAgICBwcmV2aWV3OiB0cnVlLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmNsaWVudC5wdXQocGF0aCwgcGFyYW1zKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQcm9jZXNzTWFuYWdlbWVudChwYXJhbXM6IHtcbiAgICBhcHA6IEFwcElEO1xuICAgIGxhbmc/OiBMYW5nO1xuICAgIHByZXZpZXc/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTx7XG4gICAgZW5hYmxlOiBib29sZWFuO1xuICAgIHN0YXRlczoge1xuICAgICAgW3N0YXR1c05hbWU6IHN0cmluZ106IFN0YXRlRm9yUmVzcG9uc2U7XG4gICAgfTtcbiAgICBhY3Rpb25zOiBBY3Rpb25Gb3JSZXNwb25zZVtdO1xuICAgIHJldmlzaW9uOiBzdHJpbmc7XG4gIH0+IHtcbiAgICBjb25zdCB7IHByZXZpZXcsIC4uLnJlc3QgfSA9IHBhcmFtcztcbiAgICBjb25zdCBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvc3RhdHVzXCIsXG4gICAgICBwcmV2aWV3LFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmNsaWVudC5nZXQocGF0aCwgcmVzdCk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlUHJvY2Vzc01hbmFnZW1lbnQocGFyYW1zOiB7XG4gICAgYXBwOiBBcHBJRDtcbiAgICBlbmFibGU/OiBib29sZWFuO1xuICAgIHN0YXRlcz86IHsgW3N0YXR1c05hbWU6IHN0cmluZ106IFN0YXRlRm9yUGFyYW1ldGVyIH07XG4gICAgYWN0aW9ucz86IEFjdGlvbkZvclBhcmFtZXRlcltdO1xuICAgIHJldmlzaW9uPzogUmV2aXNpb247XG4gIH0pOiBQcm9taXNlPHsgcmV2aXNpb246IHN0cmluZyB9PiB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL3N0YXR1c1wiLFxuICAgICAgcHJldmlldzogdHJ1ZSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQucHV0KHBhdGgsIHBhcmFtcyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RGVwbG95U3RhdHVzKHBhcmFtczoge1xuICAgIGFwcHM6IEFwcElEW107XG4gIH0pOiBQcm9taXNlPHsgYXBwczogQXJyYXk8eyBhcHA6IHN0cmluZzsgc3RhdHVzOiBEZXBsb3lTdGF0dXMgfT4gfT4ge1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC9kZXBsb3lcIixcbiAgICAgIHByZXZpZXc6IHRydWUsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCBwYXJhbXMpO1xuICB9XG5cbiAgcHVibGljIGRlcGxveUFwcChwYXJhbXM6IHtcbiAgICBhcHBzOiBBcnJheTx7IGFwcDogQXBwSUQ7IHJldmlzaW9uPzogUmV2aXNpb24gfT47XG4gICAgcmV2ZXJ0PzogYm9vbGVhbjtcbiAgfSk6IFByb21pc2U8e30+IHtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvZGVwbG95XCIsXG4gICAgICBwcmV2aWV3OiB0cnVlLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmNsaWVudC5wb3N0KHBhdGgsIHBhcmFtcyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RmllbGRBY2wocGFyYW1zOiB7XG4gICAgYXBwOiBBcHBJRDtcbiAgICBwcmV2aWV3PzogYm9vbGVhbjtcbiAgfSk6IFByb21pc2U8eyByaWdodHM6IEZpZWxkUmlnaHRGb3JSZXNwb25zZVtdOyByZXZpc2lvbjogc3RyaW5nIH0+IHtcbiAgICBjb25zdCB7IHByZXZpZXcsIC4uLnJlc3QgfSA9IHBhcmFtcztcbiAgICBjb25zdCBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgIGVuZHBvaW50TmFtZTogXCJmaWVsZC9hY2xcIixcbiAgICAgIHByZXZpZXcsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCB7IC4uLnJlc3QgfSk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlRmllbGRBY2wocGFyYW1zOiB7XG4gICAgYXBwOiBBcHBJRDtcbiAgICByaWdodHM6IEZpZWxkUmlnaHRGb3JQYXJhbWV0ZXJbXTtcbiAgICByZXZpc2lvbj86IFJldmlzaW9uO1xuICB9KTogUHJvbWlzZTx7IHJldmlzaW9uOiBzdHJpbmcgfT4ge1xuICAgIC8vIE5PVEU6IFdoZW4gZXhlY3V0aW5nIHRoaXMgQVBJIHdpdGhvdXQgYHByZXZpZXdgLFxuICAgIC8vIGFsbCBwcmUtbGl2ZSBhcHAncyBzZXR0aW5ncyB3aWxsIGJlIGRlcGxveWVkIHRvIGxpdmUgYXBwLlxuICAgIC8vIFRoaXMgYmVoYXZpb3IgbWF5IG5vdCBiZSB3aGF0IHRoZSB1c2VycyBleHBlY3RlZCxcbiAgICAvLyBzbyB3ZSBkaXNhYmxlIGl0IHRlbXBvcmFyaWx5LlxuICAgIGNvbnN0IHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgZW5kcG9pbnROYW1lOiBcImZpZWxkL2FjbFwiLFxuICAgICAgcHJldmlldzogdHJ1ZSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQucHV0KHBhdGgsIHBhcmFtcyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QXBwQWNsKHBhcmFtczoge1xuICAgIGFwcDogQXBwSUQ7XG4gICAgcHJldmlldz86IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPHsgcmlnaHRzOiBBcHBSaWdodEVudGl0eUZvclJlc3BvbnNlW107IHJldmlzaW9uOiBzdHJpbmcgfT4ge1xuICAgIGNvbnN0IHsgcHJldmlldywgLi4ucmVzdCB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC9hY2xcIixcbiAgICAgIHByZXZpZXcsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCB7IC4uLnJlc3QgfSk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlQXBwQWNsKHBhcmFtczoge1xuICAgIGFwcDogQXBwSUQ7XG4gICAgcmlnaHRzOiBBcHBSaWdodEVudGl0eUZvclBhcmFtZXRlcltdO1xuICAgIHJldmlzaW9uPzogUmV2aXNpb247XG4gIH0pOiBQcm9taXNlPHsgcmV2aXNpb246IHN0cmluZyB9PiB7XG4gICAgLy8gTk9URTogV2hlbiBleGVjdXRpbmcgdGhpcyBBUEkgd2l0aG91dCBgcHJldmlld2AsXG4gICAgLy8gYWxsIHByZS1saXZlIGFwcCdzIHNldHRpbmdzIHdpbGwgYmUgZGVwbG95ZWQgdG8gbGl2ZSBhcHAuXG4gICAgLy8gVGhpcyBiZWhhdmlvciBtYXkgbm90IGJlIHdoYXQgdGhlIHVzZXJzIGV4cGVjdGVkLFxuICAgIC8vIHNvIHdlIGRpc2FibGUgaXQgdGVtcG9yYXJpbHkuXG4gICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL2FjbFwiLFxuICAgICAgcHJldmlldzogdHJ1ZSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQucHV0KHBhdGgsIHBhcmFtcyk7XG4gIH1cblxuICBwdWJsaWMgZXZhbHVhdGVSZWNvcmRzQWNsKHBhcmFtczoge1xuICAgIGFwcDogQXBwSUQ7XG4gICAgaWRzOiBSZWNvcmRJRFtdO1xuICB9KTogUHJvbWlzZTx7IHJpZ2h0czogRXZhbHVhdGVkUmVjb3JkUmlnaHRbXSB9PiB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICBlbmRwb2ludE5hbWU6IFwicmVjb3Jkcy9hY2wvZXZhbHVhdGVcIixcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHBhdGgsIHBhcmFtcyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0UmVjb3JkQWNsKHBhcmFtczoge1xuICAgIGFwcDogQXBwSUQ7XG4gICAgbGFuZz86IExhbmc7XG4gICAgcHJldmlldz86IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPHsgcmlnaHRzOiBSZWNvcmRSaWdodEZvclJlc3BvbnNlW107IHJldmlzaW9uOiBzdHJpbmcgfT4ge1xuICAgIGNvbnN0IHsgcHJldmlldywgLi4ucmVzdCB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgZW5kcG9pbnROYW1lOiBcInJlY29yZC9hY2xcIixcbiAgICAgIHByZXZpZXcsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCB7IC4uLnJlc3QgfSk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlUmVjb3JkQWNsKHBhcmFtczoge1xuICAgIGFwcDogQXBwSUQ7XG4gICAgcmlnaHRzOiBSZWNvcmRSaWdodEZvclBhcmFtZXRlcltdO1xuICAgIHJldmlzaW9uPzogUmV2aXNpb247XG4gIH0pOiBQcm9taXNlPHsgcmV2aXNpb246IHN0cmluZyB9PiB7XG4gICAgLy8gTk9URTogV2hlbiBleGVjdXRpbmcgdGhpcyBBUEkgd2l0aG91dCBgcHJldmlld2AsXG4gICAgLy8gYWxsIHByZS1saXZlIGFwcCdzIHNldHRpbmdzIHdpbGwgYmUgZGVwbG95ZWQgdG8gbGl2ZSBhcHAuXG4gICAgLy8gVGhpcyBiZWhhdmlvciBtYXkgbm90IGJlIHdoYXQgdGhlIHVzZXJzIGV4cGVjdGVkLFxuICAgIC8vIHNvIHdlIGRpc2FibGUgaXQgdGVtcG9yYXJpbHkuXG4gICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICBlbmRwb2ludE5hbWU6IFwicmVjb3JkL2FjbFwiLFxuICAgICAgcHJldmlldzogdHJ1ZSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQucHV0KHBhdGgsIHBhcmFtcyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QXBwQ3VzdG9taXplKHBhcmFtczogeyBhcHA6IEFwcElEOyBwcmV2aWV3PzogYm9vbGVhbiB9KTogUHJvbWlzZTx7XG4gICAgc2NvcGU6IEFwcEN1c3RvbWl6ZVNjb3BlO1xuICAgIGRlc2t0b3A6IEFwcEN1c3RvbWl6ZUZvclJlc3BvbnNlO1xuICAgIG1vYmlsZTogQXBwQ3VzdG9taXplRm9yUmVzcG9uc2U7XG4gICAgcmV2aXNpb246IHN0cmluZztcbiAgfT4ge1xuICAgIGNvbnN0IHsgcHJldmlldywgLi4ucmVzdCB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC9jdXN0b21pemVcIixcbiAgICAgIHByZXZpZXcsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCB7IC4uLnJlc3QgfSk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlQXBwQ3VzdG9taXplKHBhcmFtczoge1xuICAgIGFwcDogQXBwSUQ7XG4gICAgc2NvcGU/OiBBcHBDdXN0b21pemVTY29wZTtcbiAgICBkZXNrdG9wPzogQXBwQ3VzdG9taXplRm9yUGFyYW1ldGVyO1xuICAgIG1vYmlsZT86IEFwcEN1c3RvbWl6ZUZvclBhcmFtZXRlcjtcbiAgICByZXZpc2lvbj86IFJldmlzaW9uO1xuICB9KTogUHJvbWlzZTx7IHJldmlzaW9uOiBzdHJpbmcgfT4ge1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC9jdXN0b21pemVcIixcbiAgICAgIHByZXZpZXc6IHRydWUsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LnB1dChwYXRoLCBwYXJhbXMpO1xuICB9XG5cbiAgcHVibGljIGdldEdlbmVyYWxOb3RpZmljYXRpb25zKHBhcmFtczoge1xuICAgIGFwcDogQXBwSUQ7XG4gICAgcHJldmlldz86IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPHtcbiAgICBub3RpZmljYXRpb25zOiBHZW5lcmFsTm90aWZpY2F0aW9uRm9yUmVzcG9uc2VbXTtcbiAgICBub3RpZnlUb0NvbW1lbnRlcjogYm9vbGVhbjtcbiAgICByZXZpc2lvbjogc3RyaW5nO1xuICB9PiB7XG4gICAgY29uc3QgeyBwcmV2aWV3LCAuLi5yZXN0IH0gPSBwYXJhbXM7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL25vdGlmaWNhdGlvbnMvZ2VuZXJhbFwiLFxuICAgICAgcHJldmlldyxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHBhdGgsIHsgLi4ucmVzdCB9KTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVHZW5lcmFsTm90aWZpY2F0aW9ucyhwYXJhbXM6IHtcbiAgICBhcHA6IEFwcElEO1xuICAgIG5vdGlmaWNhdGlvbnM/OiBHZW5lcmFsTm90aWZpY2F0aW9uRm9yUGFyYW1ldGVyW107XG4gICAgbm90aWZ5VG9Db21tZW50ZXI/OiBib29sZWFuO1xuICAgIHJldmlzaW9uPzogUmV2aXNpb247XG4gIH0pOiBQcm9taXNlPHsgcmV2aXNpb246IHN0cmluZyB9PiB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL25vdGlmaWNhdGlvbnMvZ2VuZXJhbFwiLFxuICAgICAgcHJldmlldzogdHJ1ZSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQucHV0KHBhdGgsIHBhcmFtcyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0UGVyUmVjb3JkTm90aWZpY2F0aW9ucyhwYXJhbXM6IHtcbiAgICBhcHA6IEFwcElEO1xuICAgIGxhbmc/OiBMYW5nO1xuICAgIHByZXZpZXc/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTx7XG4gICAgbm90aWZpY2F0aW9uczogUGVyUmVjb3JkTm90aWZpY2F0aW9uRm9yUmVzcG9uc2VbXTtcbiAgICByZXZpc2lvbjogc3RyaW5nO1xuICB9PiB7XG4gICAgY29uc3QgeyBwcmV2aWV3LCAuLi5yZXN0IH0gPSBwYXJhbXM7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL25vdGlmaWNhdGlvbnMvcGVyUmVjb3JkXCIsXG4gICAgICBwcmV2aWV3LFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmNsaWVudC5nZXQocGF0aCwgcmVzdCk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlUGVyUmVjb3JkTm90aWZpY2F0aW9ucyhwYXJhbXM6IHtcbiAgICBhcHA6IEFwcElEO1xuICAgIG5vdGlmaWNhdGlvbnM6IFBlclJlY29yZE5vdGlmaWNhdGlvbkZvclBhcmFtZXRlcltdO1xuICAgIHJldmlzaW9uPzogUmV2aXNpb247XG4gIH0pOiBQcm9taXNlPHsgcmV2aXNpb246IHN0cmluZyB9PiB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL25vdGlmaWNhdGlvbnMvcGVyUmVjb3JkXCIsXG4gICAgICBwcmV2aWV3OiB0cnVlLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmNsaWVudC5wdXQocGF0aCwgcGFyYW1zKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSZW1pbmRlck5vdGlmaWNhdGlvbnMocGFyYW1zOiB7XG4gICAgYXBwOiBBcHBJRDtcbiAgICBsYW5nPzogTGFuZztcbiAgICBwcmV2aWV3PzogYm9vbGVhbjtcbiAgfSk6IFByb21pc2U8e1xuICAgIG5vdGlmaWNhdGlvbnM6IFJlbWluZGVyTm90aWZpY2F0aW9uRm9yUmVzcG9uc2VbXTtcbiAgICB0aW1lem9uZTogc3RyaW5nO1xuICAgIHJldmlzaW9uOiBzdHJpbmc7XG4gIH0+IHtcbiAgICBjb25zdCB7IHByZXZpZXcsIC4uLnJlc3QgfSA9IHBhcmFtcztcbiAgICBjb25zdCBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvbm90aWZpY2F0aW9ucy9yZW1pbmRlclwiLFxuICAgICAgcHJldmlldyxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHBhdGgsIHJlc3QpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVJlbWluZGVyTm90aWZpY2F0aW9ucyhwYXJhbXM6IHtcbiAgICBhcHA6IEFwcElEO1xuICAgIG5vdGlmaWNhdGlvbnM/OiBSZW1pbmRlck5vdGlmaWNhdGlvbkZvclBhcmFtZXRlcltdO1xuICAgIHRpbWV6b25lPzogc3RyaW5nO1xuICAgIHJldmlzaW9uPzogUmV2aXNpb247XG4gIH0pOiBQcm9taXNlPHsgcmV2aXNpb246IHN0cmluZyB9PiB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL25vdGlmaWNhdGlvbnMvcmVtaW5kZXJcIixcbiAgICAgIHByZXZpZXc6IHRydWUsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LnB1dChwYXRoLCBwYXJhbXMpO1xuICB9XG5cbiAgcHVibGljIGdldFJlcG9ydHMocGFyYW1zOiB7XG4gICAgYXBwOiBBcHBJRDtcbiAgICBsYW5nPzogTGFuZztcbiAgICBwcmV2aWV3PzogYm9vbGVhbjtcbiAgfSk6IFByb21pc2U8e1xuICAgIHJlcG9ydHM6IHsgW3JlcG9ydE5hbWU6IHN0cmluZ106IFJlcG9ydEZvclJlc3BvbnNlIH07XG4gICAgcmV2aXNpb246IHN0cmluZztcbiAgfT4ge1xuICAgIGNvbnN0IHsgcHJldmlldywgLi4ucmVzdCB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC9yZXBvcnRzXCIsXG4gICAgICBwcmV2aWV3LFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmNsaWVudC5nZXQocGF0aCwgcmVzdCk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlUmVwb3J0cyhwYXJhbXM6IHtcbiAgICBhcHA6IEFwcElEO1xuICAgIHJlcG9ydHM6IFJlcG9ydEZvclBhcmFtZXRlcjtcbiAgICByZXZpc2lvbj86IFJldmlzaW9uO1xuICB9KTogUHJvbWlzZTx7XG4gICAgcmV2aXNpb246IHN0cmluZztcbiAgICByZXBvcnRzOiB7IFtyZXBvcnROYW1lOiBzdHJpbmddOiB7IGlkOiBzdHJpbmcgfSB9O1xuICB9PiB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL3JlcG9ydHNcIixcbiAgICAgIHByZXZpZXc6IHRydWUsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LnB1dChwYXRoLCBwYXJhbXMpO1xuICB9XG5cbiAgcHVibGljIGdldEFwcEFjdGlvbnMocGFyYW1zOiB7XG4gICAgYXBwOiBBcHBJRDtcbiAgICBsYW5nPzogTGFuZztcbiAgICBwcmV2aWV3PzogYm9vbGVhbjtcbiAgfSk6IFByb21pc2U8e1xuICAgIGFjdGlvbnM6IEFwcEFjdGlvbnNGb3JSZXNwb25zZTtcbiAgICByZXZpc2lvbjogc3RyaW5nO1xuICB9PiB7XG4gICAgY29uc3QgeyBwcmV2aWV3LCAuLi5yZXN0IH0gPSBwYXJhbXM7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL2FjdGlvbnNcIixcbiAgICAgIHByZXZpZXcsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCByZXN0KTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVBcHBBY3Rpb25zKHBhcmFtczoge1xuICAgIGFwcDogQXBwSUQ7XG4gICAgYWN0aW9uczogQXBwQWN0aW9uc0ZvclBhcmFtZXRlcjtcbiAgICByZXZpc2lvbj86IFJldmlzaW9uO1xuICB9KTogUHJvbWlzZTx7XG4gICAgcmV2aXNpb246IHN0cmluZztcbiAgICBhY3Rpb25zOiB7IFthY3Rpb25OYW1lOiBzdHJpbmddOiB7IGlkOiBzdHJpbmcgfSB9O1xuICB9PiB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL2FjdGlvbnNcIixcbiAgICAgIHByZXZpZXc6IHRydWUsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LnB1dChwYXRoLCBwYXJhbXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHBhcmFtczoge1xuICAgIGVuZHBvaW50TmFtZTogc3RyaW5nO1xuICAgIHByZXZpZXc/OiBib29sZWFuO1xuICB9KSB7XG4gICAgcmV0dXJuIGJ1aWxkUGF0aCh7XG4gICAgICAuLi5wYXJhbXMsXG4gICAgICBndWVzdFNwYWNlSWQ6IHRoaXMuZ3Vlc3RTcGFjZUlkLFxuICAgIH0pO1xuICB9XG59XG4iLCJ2YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG4vLyBgT2JqZWN0LmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Qua2V5c1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1rZXlzIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgZW51bUJ1Z0tleXMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtYXNzaWduIC0tIHNhZmVcbnZhciAkYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxuLy8gYE9iamVjdC5hc3NpZ25gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuYXNzaWduXG5tb2R1bGUuZXhwb3J0cyA9ICEkYXNzaWduIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gc2hvdWxkIGhhdmUgY29ycmVjdCBvcmRlciBvZiBvcGVyYXRpb25zIChFZGdlIGJ1ZylcbiAgaWYgKERFU0NSSVBUT1JTICYmICRhc3NpZ24oeyBiOiAxIH0sICRhc3NpZ24oZGVmaW5lUHJvcGVydHkoe30sICdhJywge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0aGlzLCAnYicsIHtcbiAgICAgICAgdmFsdWU6IDMsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9XG4gIH0pLCB7IGI6IDIgfSkpLmIgIT09IDEpIHJldHVybiB0cnVlO1xuICAvLyBzaG91bGQgd29yayB3aXRoIHN5bWJvbHMgYW5kIHNob3VsZCBoYXZlIGRldGVybWluaXN0aWMgcHJvcGVydHkgb3JkZXIgKFY4IGJ1ZylcbiAgdmFyIEEgPSB7fTtcbiAgdmFyIEIgPSB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXN5bWJvbCAtLSBzYWZlXG4gIHZhciBzeW1ib2wgPSBTeW1ib2woKTtcbiAgdmFyIGFscGhhYmV0ID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0JztcbiAgQVtzeW1ib2xdID0gNztcbiAgYWxwaGFiZXQuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGNocikgeyBCW2Nocl0gPSBjaHI7IH0pO1xuICByZXR1cm4gJGFzc2lnbih7fSwgQSlbc3ltYm9sXSAhPSA3IHx8IG9iamVjdEtleXMoJGFzc2lnbih7fSwgQikpLmpvaW4oJycpICE9IGFscGhhYmV0O1xufSkgPyBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCBzb3VyY2UpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIHZhciBUID0gdG9PYmplY3QodGFyZ2V0KTtcbiAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDE7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgdmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZjtcbiAgd2hpbGUgKGFyZ3VtZW50c0xlbmd0aCA+IGluZGV4KSB7XG4gICAgdmFyIFMgPSBJbmRleGVkT2JqZWN0KGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBvYmplY3RLZXlzKFMpLmNvbmNhdChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoUykpIDogb2JqZWN0S2V5cyhTKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGogPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGopIHtcbiAgICAgIGtleSA9IGtleXNbaisrXTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMgfHwgcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChTLCBrZXkpKSBUW2tleV0gPSBTW2tleV07XG4gICAgfVxuICB9IHJldHVybiBUO1xufSA6ICRhc3NpZ247XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWFzc2lnbicpO1xuXG4vLyBgT2JqZWN0LmFzc2lnbmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5hc3NpZ25cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtYXNzaWduIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBPYmplY3QuYXNzaWduICE9PSBhc3NpZ24gfSwge1xuICBhc3NpZ246IGFzc2lnblxufSk7XG4iLCJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChjbGFzc29mKGFyZ3VtZW50KSA9PT0gJ1N5bWJvbCcpIHRocm93IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcnKTtcbiAgcmV0dXJuIFN0cmluZyhhcmd1bWVudCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG4vLyBgUmVnRXhwLnByb3RvdHlwZS5mbGFnc2AgZ2V0dGVyIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1yZWdleHAucHJvdG90eXBlLmZsYWdzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSBhbk9iamVjdCh0aGlzKTtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICBpZiAodGhhdC5nbG9iYWwpIHJlc3VsdCArPSAnZyc7XG4gIGlmICh0aGF0Lmlnbm9yZUNhc2UpIHJlc3VsdCArPSAnaSc7XG4gIGlmICh0aGF0Lm11bHRpbGluZSkgcmVzdWx0ICs9ICdtJztcbiAgaWYgKHRoYXQuZG90QWxsKSByZXN1bHQgKz0gJ3MnO1xuICBpZiAodGhhdC51bmljb2RlKSByZXN1bHQgKz0gJ3UnO1xuICBpZiAodGhhdC5zdGlja3kpIHJlc3VsdCArPSAneSc7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG4vLyBiYWJlbC1taW5pZnkgYW5kIENsb3N1cmUgQ29tcGlsZXIgdHJhbnNwaWxlcyBSZWdFeHAoJ2EnLCAneScpIC0+IC9hL3kgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyICRSZWdFeHAgPSBnbG9iYWwuUmVnRXhwO1xuXG5leHBvcnRzLlVOU1VQUE9SVEVEX1kgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciByZSA9ICRSZWdFeHAoJ2EnLCAneScpO1xuICByZS5sYXN0SW5kZXggPSAyO1xuICByZXR1cm4gcmUuZXhlYygnYWJjZCcpICE9IG51bGw7XG59KTtcblxuZXhwb3J0cy5CUk9LRU5fQ0FSRVQgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTc3MzY4N1xuICB2YXIgcmUgPSAkUmVnRXhwKCdecicsICdneScpO1xuICByZS5sYXN0SW5kZXggPSAyO1xuICByZXR1cm4gcmUuZXhlYygnc3RyJykgIT0gbnVsbDtcbn0pO1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnRpZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydGllcyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBrZXlzID0gb2JqZWN0S2V5cyhQcm9wZXJ0aWVzKTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoTywga2V5ID0ga2V5c1tpbmRleCsrXSwgUHJvcGVydGllc1trZXldKTtcbiAgcmV0dXJuIE87XG59O1xuIiwidmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignZG9jdW1lbnQnLCAnZG9jdW1lbnRFbGVtZW50Jyk7XG4iLCIvKiBnbG9iYWwgQWN0aXZlWE9iamVjdCAtLSBvbGQgSUUsIFdTSCAqL1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGRlZmluZVByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2h0bWwnKTtcbnZhciBkb2N1bWVudENyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xuXG52YXIgR1QgPSAnPic7XG52YXIgTFQgPSAnPCc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgU0NSSVBUID0gJ3NjcmlwdCc7XG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG5cbnZhciBFbXB0eUNvbnN0cnVjdG9yID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuXG52YXIgc2NyaXB0VGFnID0gZnVuY3Rpb24gKGNvbnRlbnQpIHtcbiAgcmV0dXJuIExUICsgU0NSSVBUICsgR1QgKyBjb250ZW50ICsgTFQgKyAnLycgKyBTQ1JJUFQgKyBHVDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBBY3RpdmVYIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWCA9IGZ1bmN0aW9uIChhY3RpdmVYRG9jdW1lbnQpIHtcbiAgYWN0aXZlWERvY3VtZW50LndyaXRlKHNjcmlwdFRhZygnJykpO1xuICBhY3RpdmVYRG9jdW1lbnQuY2xvc2UoKTtcbiAgdmFyIHRlbXAgPSBhY3RpdmVYRG9jdW1lbnQucGFyZW50V2luZG93Lk9iamVjdDtcbiAgYWN0aXZlWERvY3VtZW50ID0gbnVsbDsgLy8gYXZvaWQgbWVtb3J5IGxlYWtcbiAgcmV0dXJuIHRlbXA7XG59O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhSUZyYW1lID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gZG9jdW1lbnRDcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgdmFyIEpTID0gJ2phdmEnICsgU0NSSVBUICsgJzonO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICBodG1sLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy80NzVcbiAgaWZyYW1lLnNyYyA9IFN0cmluZyhKUyk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUoc2NyaXB0VGFnKCdkb2N1bWVudC5GPU9iamVjdCcpKTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgcmV0dXJuIGlmcmFtZURvY3VtZW50LkY7XG59O1xuXG4vLyBDaGVjayBmb3IgZG9jdW1lbnQuZG9tYWluIGFuZCBhY3RpdmUgeCBzdXBwb3J0XG4vLyBObyBuZWVkIHRvIHVzZSBhY3RpdmUgeCBhcHByb2FjaCB3aGVuIGRvY3VtZW50LmRvbWFpbiBpcyBub3Qgc2V0XG4vLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2lzc3Vlcy8xNTBcbi8vIHZhcmlhdGlvbiBvZiBodHRwczovL2dpdGh1Yi5jb20va2l0Y2FtYnJpZGdlL2VzNS1zaGltL2NvbW1pdC80ZjczOGFjMDY2MzQ2XG4vLyBhdm9pZCBJRSBHQyBidWdcbnZhciBhY3RpdmVYRG9jdW1lbnQ7XG52YXIgTnVsbFByb3RvT2JqZWN0ID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIGFjdGl2ZVhEb2N1bWVudCA9IG5ldyBBY3RpdmVYT2JqZWN0KCdodG1sZmlsZScpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBpZ25vcmUgKi8gfVxuICBOdWxsUHJvdG9PYmplY3QgPSB0eXBlb2YgZG9jdW1lbnQgIT0gJ3VuZGVmaW5lZCdcbiAgICA/IGRvY3VtZW50LmRvbWFpbiAmJiBhY3RpdmVYRG9jdW1lbnRcbiAgICAgID8gTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhY3RpdmVYRG9jdW1lbnQpIC8vIG9sZCBJRVxuICAgICAgOiBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUoKVxuICAgIDogTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhY3RpdmVYRG9jdW1lbnQpOyAvLyBXU0hcbiAgdmFyIGxlbmd0aCA9IGVudW1CdWdLZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSBkZWxldGUgTnVsbFByb3RvT2JqZWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbbGVuZ3RoXV07XG4gIHJldHVybiBOdWxsUHJvdG9PYmplY3QoKTtcbn07XG5cbmhpZGRlbktleXNbSUVfUFJPVE9dID0gdHJ1ZTtcblxuLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eUNvbnN0cnVjdG9yW1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHlDb25zdHJ1Y3RvcigpO1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gTnVsbFByb3RvT2JqZWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkZWZpbmVQcm9wZXJ0aWVzKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG4vLyBiYWJlbC1taW5pZnkgYW5kIENsb3N1cmUgQ29tcGlsZXIgdHJhbnNwaWxlcyBSZWdFeHAoJy4nLCAncycpIC0+IC8uL3MgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyICRSZWdFeHAgPSBnbG9iYWwuUmVnRXhwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlID0gJFJlZ0V4cCgnLicsICdzJyk7XG4gIHJldHVybiAhKHJlLmRvdEFsbCAmJiByZS5leGVjKCdcXG4nKSAmJiByZS5mbGFncyA9PT0gJ3MnKTtcbn0pO1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG4vLyBiYWJlbC1taW5pZnkgYW5kIENsb3N1cmUgQ29tcGlsZXIgdHJhbnNwaWxlcyBSZWdFeHAoJyg/PGE+YiknLCAnZycpIC0+IC8oPzxhPmIpL2cgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyICRSZWdFeHAgPSBnbG9iYWwuUmVnRXhwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlID0gJFJlZ0V4cCgnKD88YT5iKScsICdnJyk7XG4gIHJldHVybiByZS5leGVjKCdiJykuZ3JvdXBzLmEgIT09ICdiJyB8fFxuICAgICdiJy5yZXBsYWNlKHJlLCAnJDxhPmMnKSAhPT0gJ2JjJztcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgcmVnZXhwL25vLWVtcHR5LWNhcHR1cmluZy1ncm91cCwgcmVnZXhwL25vLWVtcHR5LWdyb3VwLCByZWdleHAvbm8tbGF6eS1lbmRzIC0tIHRlc3RpbmcgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlZ2V4cC9uby11c2VsZXNzLXF1YW50aWZpZXIgLS0gdGVzdGluZyAqL1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHJlZ2V4cEZsYWdzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1mbGFncycpO1xudmFyIHN0aWNreUhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLXN0aWNreS1oZWxwZXJzJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpLmdldDtcbnZhciBVTlNVUFBPUlRFRF9ET1RfQUxMID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC11bnN1cHBvcnRlZC1kb3QtYWxsJyk7XG52YXIgVU5TVVBQT1JURURfTkNHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC11bnN1cHBvcnRlZC1uY2cnKTtcblxudmFyIG5hdGl2ZUV4ZWMgPSBSZWdFeHAucHJvdG90eXBlLmV4ZWM7XG52YXIgbmF0aXZlUmVwbGFjZSA9IHNoYXJlZCgnbmF0aXZlLXN0cmluZy1yZXBsYWNlJywgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcblxudmFyIHBhdGNoZWRFeGVjID0gbmF0aXZlRXhlYztcblxudmFyIFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciByZTEgPSAvYS87XG4gIHZhciByZTIgPSAvYiovZztcbiAgbmF0aXZlRXhlYy5jYWxsKHJlMSwgJ2EnKTtcbiAgbmF0aXZlRXhlYy5jYWxsKHJlMiwgJ2EnKTtcbiAgcmV0dXJuIHJlMS5sYXN0SW5kZXggIT09IDAgfHwgcmUyLmxhc3RJbmRleCAhPT0gMDtcbn0pKCk7XG5cbnZhciBVTlNVUFBPUlRFRF9ZID0gc3RpY2t5SGVscGVycy5VTlNVUFBPUlRFRF9ZIHx8IHN0aWNreUhlbHBlcnMuQlJPS0VOX0NBUkVUO1xuXG4vLyBub25wYXJ0aWNpcGF0aW5nIGNhcHR1cmluZyBncm91cCwgY29waWVkIGZyb20gZXM1LXNoaW0ncyBTdHJpbmcjc3BsaXQgcGF0Y2guXG52YXIgTlBDR19JTkNMVURFRCA9IC8oKT8/Ly5leGVjKCcnKVsxXSAhPT0gdW5kZWZpbmVkO1xuXG52YXIgUEFUQ0ggPSBVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgfHwgTlBDR19JTkNMVURFRCB8fCBVTlNVUFBPUlRFRF9ZIHx8IFVOU1VQUE9SVEVEX0RPVF9BTEwgfHwgVU5TVVBQT1JURURfTkNHO1xuXG5pZiAoUEFUQ0gpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1zdGF0ZW1lbnRzIC0tIFRPRE9cbiAgcGF0Y2hlZEV4ZWMgPSBmdW5jdGlvbiBleGVjKHN0cmluZykge1xuICAgIHZhciByZSA9IHRoaXM7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZShyZSk7XG4gICAgdmFyIHN0ciA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgdmFyIHJhdyA9IHN0YXRlLnJhdztcbiAgICB2YXIgcmVzdWx0LCByZUNvcHksIGxhc3RJbmRleCwgbWF0Y2gsIGksIG9iamVjdCwgZ3JvdXA7XG5cbiAgICBpZiAocmF3KSB7XG4gICAgICByYXcubGFzdEluZGV4ID0gcmUubGFzdEluZGV4O1xuICAgICAgcmVzdWx0ID0gcGF0Y2hlZEV4ZWMuY2FsbChyYXcsIHN0cik7XG4gICAgICByZS5sYXN0SW5kZXggPSByYXcubGFzdEluZGV4O1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB2YXIgZ3JvdXBzID0gc3RhdGUuZ3JvdXBzO1xuICAgIHZhciBzdGlja3kgPSBVTlNVUFBPUlRFRF9ZICYmIHJlLnN0aWNreTtcbiAgICB2YXIgZmxhZ3MgPSByZWdleHBGbGFncy5jYWxsKHJlKTtcbiAgICB2YXIgc291cmNlID0gcmUuc291cmNlO1xuICAgIHZhciBjaGFyc0FkZGVkID0gMDtcbiAgICB2YXIgc3RyQ29weSA9IHN0cjtcblxuICAgIGlmIChzdGlja3kpIHtcbiAgICAgIGZsYWdzID0gZmxhZ3MucmVwbGFjZSgneScsICcnKTtcbiAgICAgIGlmIChmbGFncy5pbmRleE9mKCdnJykgPT09IC0xKSB7XG4gICAgICAgIGZsYWdzICs9ICdnJztcbiAgICAgIH1cblxuICAgICAgc3RyQ29weSA9IHN0ci5zbGljZShyZS5sYXN0SW5kZXgpO1xuICAgICAgLy8gU3VwcG9ydCBhbmNob3JlZCBzdGlja3kgYmVoYXZpb3IuXG4gICAgICBpZiAocmUubGFzdEluZGV4ID4gMCAmJiAoIXJlLm11bHRpbGluZSB8fCByZS5tdWx0aWxpbmUgJiYgc3RyLmNoYXJBdChyZS5sYXN0SW5kZXggLSAxKSAhPT0gJ1xcbicpKSB7XG4gICAgICAgIHNvdXJjZSA9ICcoPzogJyArIHNvdXJjZSArICcpJztcbiAgICAgICAgc3RyQ29weSA9ICcgJyArIHN0ckNvcHk7XG4gICAgICAgIGNoYXJzQWRkZWQrKztcbiAgICAgIH1cbiAgICAgIC8vIF4oPyArIHJ4ICsgKSBpcyBuZWVkZWQsIGluIGNvbWJpbmF0aW9uIHdpdGggc29tZSBzdHIgc2xpY2luZywgdG9cbiAgICAgIC8vIHNpbXVsYXRlIHRoZSAneScgZmxhZy5cbiAgICAgIHJlQ29weSA9IG5ldyBSZWdFeHAoJ14oPzonICsgc291cmNlICsgJyknLCBmbGFncyk7XG4gICAgfVxuXG4gICAgaWYgKE5QQ0dfSU5DTFVERUQpIHtcbiAgICAgIHJlQ29weSA9IG5ldyBSZWdFeHAoJ14nICsgc291cmNlICsgJyQoPyFcXFxccyknLCBmbGFncyk7XG4gICAgfVxuICAgIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcpIGxhc3RJbmRleCA9IHJlLmxhc3RJbmRleDtcblxuICAgIG1hdGNoID0gbmF0aXZlRXhlYy5jYWxsKHN0aWNreSA/IHJlQ29weSA6IHJlLCBzdHJDb3B5KTtcblxuICAgIGlmIChzdGlja3kpIHtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBtYXRjaC5pbnB1dCA9IG1hdGNoLmlucHV0LnNsaWNlKGNoYXJzQWRkZWQpO1xuICAgICAgICBtYXRjaFswXSA9IG1hdGNoWzBdLnNsaWNlKGNoYXJzQWRkZWQpO1xuICAgICAgICBtYXRjaC5pbmRleCA9IHJlLmxhc3RJbmRleDtcbiAgICAgICAgcmUubGFzdEluZGV4ICs9IG1hdGNoWzBdLmxlbmd0aDtcbiAgICAgIH0gZWxzZSByZS5sYXN0SW5kZXggPSAwO1xuICAgIH0gZWxzZSBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HICYmIG1hdGNoKSB7XG4gICAgICByZS5sYXN0SW5kZXggPSByZS5nbG9iYWwgPyBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCA6IGxhc3RJbmRleDtcbiAgICB9XG4gICAgaWYgKE5QQ0dfSU5DTFVERUQgJiYgbWF0Y2ggJiYgbWF0Y2gubGVuZ3RoID4gMSkge1xuICAgICAgLy8gRml4IGJyb3dzZXJzIHdob3NlIGBleGVjYCBtZXRob2RzIGRvbid0IGNvbnNpc3RlbnRseSByZXR1cm4gYHVuZGVmaW5lZGBcbiAgICAgIC8vIGZvciBOUENHLCBsaWtlIElFOC4gTk9URTogVGhpcyBkb2Vzbicgd29yayBmb3IgLyguPyk/L1xuICAgICAgbmF0aXZlUmVwbGFjZS5jYWxsKG1hdGNoWzBdLCByZUNvcHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAyOyBpKyspIHtcbiAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldID09PSB1bmRlZmluZWQpIG1hdGNoW2ldID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAobWF0Y2ggJiYgZ3JvdXBzKSB7XG4gICAgICBtYXRjaC5ncm91cHMgPSBvYmplY3QgPSBjcmVhdGUobnVsbCk7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgZ3JvdXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGdyb3VwID0gZ3JvdXBzW2ldO1xuICAgICAgICBvYmplY3RbZ3JvdXBbMF1dID0gbWF0Y2hbZ3JvdXBbMV1dO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXRjaDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXRjaGVkRXhlYztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMnKTtcblxuLy8gYFJlZ0V4cC5wcm90b3R5cGUuZXhlY2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUuZXhlY1xuJCh7IHRhcmdldDogJ1JlZ0V4cCcsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IC8uLy5leGVjICE9PSBleGVjIH0sIHtcbiAgZXhlYzogZXhlY1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YCBzaW5jZSBpdCdzIG1vdmVkIHRvIGVudHJ5IHBvaW50c1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5yZWdleHAuZXhlYycpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZXhlYycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xudmFyIFJlZ0V4cFByb3RvdHlwZSA9IFJlZ0V4cC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgZXhlYywgRk9SQ0VELCBTSEFNKSB7XG4gIHZhciBTWU1CT0wgPSB3ZWxsS25vd25TeW1ib2woS0VZKTtcblxuICB2YXIgREVMRUdBVEVTX1RPX1NZTUJPTCA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3RyaW5nIG1ldGhvZHMgY2FsbCBzeW1ib2wtbmFtZWQgUmVnRXAgbWV0aG9kc1xuICAgIHZhciBPID0ge307XG4gICAgT1tTWU1CT0xdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfTtcbiAgICByZXR1cm4gJydbS0VZXShPKSAhPSA3O1xuICB9KTtcblxuICB2YXIgREVMRUdBVEVTX1RPX0VYRUMgPSBERUxFR0FURVNfVE9fU1lNQk9MICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3ltYm9sLW5hbWVkIFJlZ0V4cCBtZXRob2RzIGNhbGwgLmV4ZWNcbiAgICB2YXIgZXhlY0NhbGxlZCA9IGZhbHNlO1xuICAgIHZhciByZSA9IC9hLztcblxuICAgIGlmIChLRVkgPT09ICdzcGxpdCcpIHtcbiAgICAgIC8vIFdlIGNhbid0IHVzZSByZWFsIHJlZ2V4IGhlcmUgc2luY2UgaXQgY2F1c2VzIGRlb3B0aW1pemF0aW9uXG4gICAgICAvLyBhbmQgc2VyaW91cyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiBpbiBWOFxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzMwNlxuICAgICAgcmUgPSB7fTtcbiAgICAgIC8vIFJlZ0V4cFtAQHNwbGl0XSBkb2Vzbid0IGNhbGwgdGhlIHJlZ2V4J3MgZXhlYyBtZXRob2QsIGJ1dCBmaXJzdCBjcmVhdGVzXG4gICAgICAvLyBhIG5ldyBvbmUuIFdlIG5lZWQgdG8gcmV0dXJuIHRoZSBwYXRjaGVkIHJlZ2V4IHdoZW4gY3JlYXRpbmcgdGhlIG5ldyBvbmUuXG4gICAgICByZS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgICAgcmUuY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7IHJldHVybiByZTsgfTtcbiAgICAgIHJlLmZsYWdzID0gJyc7XG4gICAgICByZVtTWU1CT0xdID0gLy4vW1NZTUJPTF07XG4gICAgfVxuXG4gICAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgZXhlY0NhbGxlZCA9IHRydWU7IHJldHVybiBudWxsOyB9O1xuXG4gICAgcmVbU1lNQk9MXSgnJyk7XG4gICAgcmV0dXJuICFleGVjQ2FsbGVkO1xuICB9KTtcblxuICBpZiAoXG4gICAgIURFTEVHQVRFU19UT19TWU1CT0wgfHxcbiAgICAhREVMRUdBVEVTX1RPX0VYRUMgfHxcbiAgICBGT1JDRURcbiAgKSB7XG4gICAgdmFyIG5hdGl2ZVJlZ0V4cE1ldGhvZCA9IC8uL1tTWU1CT0xdO1xuICAgIHZhciBtZXRob2RzID0gZXhlYyhTWU1CT0wsICcnW0tFWV0sIGZ1bmN0aW9uIChuYXRpdmVNZXRob2QsIHJlZ2V4cCwgc3RyLCBhcmcyLCBmb3JjZVN0cmluZ01ldGhvZCkge1xuICAgICAgdmFyICRleGVjID0gcmVnZXhwLmV4ZWM7XG4gICAgICBpZiAoJGV4ZWMgPT09IHJlZ2V4cEV4ZWMgfHwgJGV4ZWMgPT09IFJlZ0V4cFByb3RvdHlwZS5leGVjKSB7XG4gICAgICAgIGlmIChERUxFR0FURVNfVE9fU1lNQk9MICYmICFmb3JjZVN0cmluZ01ldGhvZCkge1xuICAgICAgICAgIC8vIFRoZSBuYXRpdmUgU3RyaW5nIG1ldGhvZCBhbHJlYWR5IGRlbGVnYXRlcyB0byBAQG1ldGhvZCAodGhpc1xuICAgICAgICAgIC8vIHBvbHlmaWxsZWQgZnVuY3Rpb24pLCBsZWFzaW5nIHRvIGluZmluaXRlIHJlY3Vyc2lvbi5cbiAgICAgICAgICAvLyBXZSBhdm9pZCBpdCBieSBkaXJlY3RseSBjYWxsaW5nIHRoZSBuYXRpdmUgQEBtZXRob2QgbWV0aG9kLlxuICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBuYXRpdmVSZWdFeHBNZXRob2QuY2FsbChyZWdleHAsIHN0ciwgYXJnMikgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogbmF0aXZlTWV0aG9kLmNhbGwoc3RyLCByZWdleHAsIGFyZzIpIH07XG4gICAgICB9XG4gICAgICByZXR1cm4geyBkb25lOiBmYWxzZSB9O1xuICAgIH0pO1xuXG4gICAgcmVkZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgS0VZLCBtZXRob2RzWzBdKTtcbiAgICByZWRlZmluZShSZWdFeHBQcm90b3R5cGUsIFNZTUJPTCwgbWV0aG9kc1sxXSk7XG4gIH1cblxuICBpZiAoU0hBTSkgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KFJlZ0V4cFByb3RvdHlwZVtTWU1CT0xdLCAnc2hhbScsIHRydWUpO1xufTtcbiIsInZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKENPTlZFUlRfVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIHBvcykge1xuICAgIHZhciBTID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSgkdGhpcykpO1xuICAgIHZhciBwb3NpdGlvbiA9IHRvSW50ZWdlck9ySW5maW5pdHkocG9zKTtcbiAgICB2YXIgc2l6ZSA9IFMubGVuZ3RoO1xuICAgIHZhciBmaXJzdCwgc2Vjb25kO1xuICAgIGlmIChwb3NpdGlvbiA8IDAgfHwgcG9zaXRpb24gPj0gc2l6ZSkgcmV0dXJuIENPTlZFUlRfVE9fU1RSSU5HID8gJycgOiB1bmRlZmluZWQ7XG4gICAgZmlyc3QgPSBTLmNoYXJDb2RlQXQocG9zaXRpb24pO1xuICAgIHJldHVybiBmaXJzdCA8IDB4RDgwMCB8fCBmaXJzdCA+IDB4REJGRiB8fCBwb3NpdGlvbiArIDEgPT09IHNpemVcbiAgICAgIHx8IChzZWNvbmQgPSBTLmNoYXJDb2RlQXQocG9zaXRpb24gKyAxKSkgPCAweERDMDAgfHwgc2Vjb25kID4gMHhERkZGXG4gICAgICAgID8gQ09OVkVSVF9UT19TVFJJTkcgPyBTLmNoYXJBdChwb3NpdGlvbikgOiBmaXJzdFxuICAgICAgICA6IENPTlZFUlRfVE9fU1RSSU5HID8gUy5zbGljZShwb3NpdGlvbiwgcG9zaXRpb24gKyAyKSA6IChmaXJzdCAtIDB4RDgwMCA8PCAxMCkgKyAoc2Vjb25kIC0gMHhEQzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuY29kZXBvaW50YXRcbiAgY29kZUF0OiBjcmVhdGVNZXRob2QoZmFsc2UpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5hdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUuYXRcbiAgY2hhckF0OiBjcmVhdGVNZXRob2QodHJ1ZSlcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2hhckF0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUnKS5jaGFyQXQ7XG5cbi8vIGBBZHZhbmNlU3RyaW5nSW5kZXhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hZHZhbmNlc3RyaW5naW5kZXhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFMsIGluZGV4LCB1bmljb2RlKSB7XG4gIHJldHVybiBpbmRleCArICh1bmljb2RlID8gY2hhckF0KFMsIGluZGV4KS5sZW5ndGggOiAxKTtcbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjJyk7XG5cbi8vIGBSZWdFeHBFeGVjYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVnZXhwZXhlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUiwgUykge1xuICB2YXIgZXhlYyA9IFIuZXhlYztcbiAgaWYgKGlzQ2FsbGFibGUoZXhlYykpIHtcbiAgICB2YXIgcmVzdWx0ID0gZXhlYy5jYWxsKFIsIFMpO1xuICAgIGlmIChyZXN1bHQgIT09IG51bGwpIGFuT2JqZWN0KHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAoY2xhc3NvZihSKSA9PT0gJ1JlZ0V4cCcpIHJldHVybiByZWdleHBFeGVjLmNhbGwoUiwgUyk7XG4gIHRocm93IFR5cGVFcnJvcignUmVnRXhwI2V4ZWMgY2FsbGVkIG9uIGluY29tcGF0aWJsZSByZWNlaXZlcicpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmaXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxuLy8gQEBtYXRjaCBsb2dpY1xuZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMoJ21hdGNoJywgZnVuY3Rpb24gKE1BVENILCBuYXRpdmVNYXRjaCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUubWF0Y2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5tYXRjaFxuICAgIGZ1bmN0aW9uIG1hdGNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSByZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuICAgICAgdmFyIG1hdGNoZXIgPSByZWdleHAgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogZ2V0TWV0aG9kKHJlZ2V4cCwgTUFUQ0gpO1xuICAgICAgcmV0dXJuIG1hdGNoZXIgPyBtYXRjaGVyLmNhbGwocmVnZXhwLCBPKSA6IG5ldyBSZWdFeHAocmVnZXhwKVtNQVRDSF0odG9TdHJpbmcoTykpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBtYXRjaF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQG1hdGNoXG4gICAgZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QodGhpcyk7XG4gICAgICB2YXIgUyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKG5hdGl2ZU1hdGNoLCByeCwgUyk7XG5cbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcblxuICAgICAgaWYgKCFyeC5nbG9iYWwpIHJldHVybiByZWdFeHBFeGVjKHJ4LCBTKTtcblxuICAgICAgdmFyIGZ1bGxVbmljb2RlID0gcngudW5pY29kZTtcbiAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB2YXIgQSA9IFtdO1xuICAgICAgdmFyIG4gPSAwO1xuICAgICAgdmFyIHJlc3VsdDtcbiAgICAgIHdoaWxlICgocmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUykpICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBtYXRjaFN0ciA9IHRvU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIEFbbl0gPSBtYXRjaFN0cjtcbiAgICAgICAgaWYgKG1hdGNoU3RyID09PSAnJykgcngubGFzdEluZGV4ID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHRvTGVuZ3RoKHJ4Lmxhc3RJbmRleCksIGZ1bGxVbmljb2RlKTtcbiAgICAgICAgbisrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG4gPT09IDAgPyBudWxsIDogQTtcbiAgICB9XG4gIF07XG59KTtcbiIsInZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmICh0eXBlb2YgYXJndW1lbnQgPT09ICdvYmplY3QnIHx8IGlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IHNldCBcIiArIFN0cmluZyhhcmd1bWVudCkgKyAnIGFzIGEgcHJvdG90eXBlJyk7XG59O1xuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gLS0gc2FmZSAqL1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGFQb3NzaWJsZVByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LnNldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnNldHByb3RvdHlwZW9mXG4vLyBXb3JrcyB3aXRoIF9fcHJvdG9fXyBvbmx5LiBPbGQgdjggY2FuJ3Qgd29yayB3aXRoIG51bGwgcHJvdG8gb2JqZWN0cy5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3Qtc2V0cHJvdG90eXBlb2YgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gZnVuY3Rpb24gKCkge1xuICB2YXIgQ09SUkVDVF9TRVRURVIgPSBmYWxzZTtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgdmFyIHNldHRlcjtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG4gICAgc2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3QucHJvdG90eXBlLCAnX19wcm90b19fJykuc2V0O1xuICAgIHNldHRlci5jYWxsKHRlc3QsIFtdKTtcbiAgICBDT1JSRUNUX1NFVFRFUiA9IHRlc3QgaW5zdGFuY2VvZiBBcnJheTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pIHtcbiAgICBhbk9iamVjdChPKTtcbiAgICBhUG9zc2libGVQcm90b3R5cGUocHJvdG8pO1xuICAgIGlmIChDT1JSRUNUX1NFVFRFUikgc2V0dGVyLmNhbGwoTywgcHJvdG8pO1xuICAgIGVsc2UgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICByZXR1cm4gTztcbiAgfTtcbn0oKSA6IHVuZGVmaW5lZCk7XG4iLCJ2YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG5cbi8vIG1ha2VzIHN1YmNsYXNzaW5nIHdvcmsgY29ycmVjdCBmb3Igd3JhcHBlZCBidWlsdC1pbnNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCR0aGlzLCBkdW1teSwgV3JhcHBlcikge1xuICB2YXIgTmV3VGFyZ2V0LCBOZXdUYXJnZXRQcm90b3R5cGU7XG4gIGlmIChcbiAgICAvLyBpdCBjYW4gd29yayBvbmx5IHdpdGggbmF0aXZlIGBzZXRQcm90b3R5cGVPZmBcbiAgICBzZXRQcm90b3R5cGVPZiAmJlxuICAgIC8vIHdlIGhhdmVuJ3QgY29tcGxldGVseSBjb3JyZWN0IHByZS1FUzYgd2F5IGZvciBnZXR0aW5nIGBuZXcudGFyZ2V0YCwgc28gdXNlIHRoaXNcbiAgICBpc0NhbGxhYmxlKE5ld1RhcmdldCA9IGR1bW15LmNvbnN0cnVjdG9yKSAmJlxuICAgIE5ld1RhcmdldCAhPT0gV3JhcHBlciAmJlxuICAgIGlzT2JqZWN0KE5ld1RhcmdldFByb3RvdHlwZSA9IE5ld1RhcmdldC5wcm90b3R5cGUpICYmXG4gICAgTmV3VGFyZ2V0UHJvdG90eXBlICE9PSBXcmFwcGVyLnByb3RvdHlwZVxuICApIHNldFByb3RvdHlwZU9mKCR0aGlzLCBOZXdUYXJnZXRQcm90b3R5cGUpO1xuICByZXR1cm4gJHRoaXM7XG59O1xuIiwidmFyIHZhbHVlT2YgPSAxLjAudmFsdWVPZjtcblxuLy8gYHRoaXNOdW1iZXJWYWx1ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRoaXNudW1iZXJ2YWx1ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlT2YuY2FsbCh2YWx1ZSk7XG59O1xuIiwiLy8gYSBzdHJpbmcgb2YgYWxsIHZhbGlkIHVuaWNvZGUgd2hpdGVzcGFjZXNcbm1vZHVsZS5leHBvcnRzID0gJ1xcdTAwMDlcXHUwMDBBXFx1MDAwQlxcdTAwMENcXHUwMDBEXFx1MDAyMFxcdTAwQTBcXHUxNjgwXFx1MjAwMFxcdTIwMDFcXHUyMDAyJyArXG4gICdcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwQVxcdTIwMkZcXHUyMDVGXFx1MzAwMFxcdTIwMjhcXHUyMDI5XFx1RkVGRic7XG4iLCJ2YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciB3aGl0ZXNwYWNlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93aGl0ZXNwYWNlcycpO1xuXG52YXIgd2hpdGVzcGFjZSA9ICdbJyArIHdoaXRlc3BhY2VzICsgJ10nO1xudmFyIGx0cmltID0gUmVnRXhwKCdeJyArIHdoaXRlc3BhY2UgKyB3aGl0ZXNwYWNlICsgJyonKTtcbnZhciBydHJpbSA9IFJlZ0V4cCh3aGl0ZXNwYWNlICsgd2hpdGVzcGFjZSArICcqJCcpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW0sIHRyaW1TdGFydCwgdHJpbUVuZCwgdHJpbUxlZnQsIHRyaW1SaWdodCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcykge1xuICAgIHZhciBzdHJpbmcgPSB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKCR0aGlzKSk7XG4gICAgaWYgKFRZUEUgJiAxKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShsdHJpbSwgJycpO1xuICAgIGlmIChUWVBFICYgMikgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UocnRyaW0sICcnKTtcbiAgICByZXR1cm4gc3RyaW5nO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLnsgdHJpbUxlZnQsIHRyaW1TdGFydCB9YCBtZXRob2RzXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltc3RhcnRcbiAgc3RhcnQ6IGNyZWF0ZU1ldGhvZCgxKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltUmlnaHQsIHRyaW1FbmQgfWAgbWV0aG9kc1xuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUudHJpbWVuZFxuICBlbmQ6IGNyZWF0ZU1ldGhvZCgyKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUudHJpbWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltXG4gIHRyaW06IGNyZWF0ZU1ldGhvZCgzKVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpLmY7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIHRoaXNOdW1iZXJWYWx1ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90aGlzLW51bWJlci12YWx1ZScpO1xudmFyIHRyaW0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXRyaW0nKS50cmltO1xuXG52YXIgTlVNQkVSID0gJ051bWJlcic7XG52YXIgTmF0aXZlTnVtYmVyID0gZ2xvYmFsW05VTUJFUl07XG52YXIgTnVtYmVyUHJvdG90eXBlID0gTmF0aXZlTnVtYmVyLnByb3RvdHlwZTtcblxuLy8gYFRvTnVtZXJpY2AgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbnVtZXJpY1xudmFyIHRvTnVtZXJpYyA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICB2YXIgcHJpbVZhbHVlID0gdG9QcmltaXRpdmUodmFsdWUsICdudW1iZXInKTtcbiAgcmV0dXJuIHR5cGVvZiBwcmltVmFsdWUgPT09ICdiaWdpbnQnID8gcHJpbVZhbHVlIDogdG9OdW1iZXIocHJpbVZhbHVlKTtcbn07XG5cbi8vIGBUb051bWJlcmAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbnVtYmVyXG52YXIgdG9OdW1iZXIgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGl0ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsICdudW1iZXInKTtcbiAgdmFyIGZpcnN0LCB0aGlyZCwgcmFkaXgsIG1heENvZGUsIGRpZ2l0cywgbGVuZ3RoLCBpbmRleCwgY29kZTtcbiAgaWYgKGlzU3ltYm9sKGl0KSkgdGhyb3cgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCBhIFN5bWJvbCB2YWx1ZSB0byBhIG51bWJlcicpO1xuICBpZiAodHlwZW9mIGl0ID09ICdzdHJpbmcnICYmIGl0Lmxlbmd0aCA+IDIpIHtcbiAgICBpdCA9IHRyaW0oaXQpO1xuICAgIGZpcnN0ID0gaXQuY2hhckNvZGVBdCgwKTtcbiAgICBpZiAoZmlyc3QgPT09IDQzIHx8IGZpcnN0ID09PSA0NSkge1xuICAgICAgdGhpcmQgPSBpdC5jaGFyQ29kZUF0KDIpO1xuICAgICAgaWYgKHRoaXJkID09PSA4OCB8fCB0aGlyZCA9PT0gMTIwKSByZXR1cm4gTmFOOyAvLyBOdW1iZXIoJysweDEnKSBzaG91bGQgYmUgTmFOLCBvbGQgVjggZml4XG4gICAgfSBlbHNlIGlmIChmaXJzdCA9PT0gNDgpIHtcbiAgICAgIHN3aXRjaCAoaXQuY2hhckNvZGVBdCgxKSkge1xuICAgICAgICBjYXNlIDY2OiBjYXNlIDk4OiByYWRpeCA9IDI7IG1heENvZGUgPSA0OTsgYnJlYWs7IC8vIGZhc3QgZXF1YWwgb2YgL14wYlswMV0rJC9pXG4gICAgICAgIGNhc2UgNzk6IGNhc2UgMTExOiByYWRpeCA9IDg7IG1heENvZGUgPSA1NTsgYnJlYWs7IC8vIGZhc3QgZXF1YWwgb2YgL14wb1swLTddKyQvaVxuICAgICAgICBkZWZhdWx0OiByZXR1cm4gK2l0O1xuICAgICAgfVxuICAgICAgZGlnaXRzID0gaXQuc2xpY2UoMik7XG4gICAgICBsZW5ndGggPSBkaWdpdHMubGVuZ3RoO1xuICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIGNvZGUgPSBkaWdpdHMuY2hhckNvZGVBdChpbmRleCk7XG4gICAgICAgIC8vIHBhcnNlSW50IHBhcnNlcyBhIHN0cmluZyB0byBhIGZpcnN0IHVuYXZhaWxhYmxlIHN5bWJvbFxuICAgICAgICAvLyBidXQgVG9OdW1iZXIgc2hvdWxkIHJldHVybiBOYU4gaWYgYSBzdHJpbmcgY29udGFpbnMgdW5hdmFpbGFibGUgc3ltYm9sc1xuICAgICAgICBpZiAoY29kZSA8IDQ4IHx8IGNvZGUgPiBtYXhDb2RlKSByZXR1cm4gTmFOO1xuICAgICAgfSByZXR1cm4gcGFyc2VJbnQoZGlnaXRzLCByYWRpeCk7XG4gICAgfVxuICB9IHJldHVybiAraXQ7XG59O1xuXG4vLyBgTnVtYmVyYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1udW1iZXItY29uc3RydWN0b3JcbmlmIChpc0ZvcmNlZChOVU1CRVIsICFOYXRpdmVOdW1iZXIoJyAwbzEnKSB8fCAhTmF0aXZlTnVtYmVyKCcwYjEnKSB8fCBOYXRpdmVOdW1iZXIoJysweDEnKSkpIHtcbiAgdmFyIE51bWJlcldyYXBwZXIgPSBmdW5jdGlvbiBOdW1iZXIodmFsdWUpIHtcbiAgICB2YXIgbiA9IGFyZ3VtZW50cy5sZW5ndGggPCAxID8gMCA6IE5hdGl2ZU51bWJlcih0b051bWVyaWModmFsdWUpKTtcbiAgICB2YXIgZHVtbXkgPSB0aGlzO1xuICAgIC8vIGNoZWNrIG9uIDEuLmNvbnN0cnVjdG9yKGZvbykgY2FzZVxuICAgIHJldHVybiBkdW1teSBpbnN0YW5jZW9mIE51bWJlcldyYXBwZXIgJiYgZmFpbHMoZnVuY3Rpb24gKCkgeyB0aGlzTnVtYmVyVmFsdWUoZHVtbXkpOyB9KVxuICAgICAgPyBpbmhlcml0SWZSZXF1aXJlZChPYmplY3QobiksIGR1bW15LCBOdW1iZXJXcmFwcGVyKSA6IG47XG4gIH07XG4gIGZvciAodmFyIGtleXMgPSBERVNDUklQVE9SUyA/IGdldE93blByb3BlcnR5TmFtZXMoTmF0aXZlTnVtYmVyKSA6IChcbiAgICAvLyBFUzM6XG4gICAgJ01BWF9WQUxVRSxNSU5fVkFMVUUsTmFOLE5FR0FUSVZFX0lORklOSVRZLFBPU0lUSVZFX0lORklOSVRZLCcgK1xuICAgIC8vIEVTMjAxNSAoaW4gY2FzZSwgaWYgbW9kdWxlcyB3aXRoIEVTMjAxNSBOdW1iZXIgc3RhdGljcyByZXF1aXJlZCBiZWZvcmUpOlxuICAgICdFUFNJTE9OLE1BWF9TQUZFX0lOVEVHRVIsTUlOX1NBRkVfSU5URUdFUixpc0Zpbml0ZSxpc0ludGVnZXIsaXNOYU4saXNTYWZlSW50ZWdlcixwYXJzZUZsb2F0LHBhcnNlSW50LCcgK1xuICAgIC8vIEVTTmV4dFxuICAgICdmcm9tU3RyaW5nLHJhbmdlJ1xuICApLnNwbGl0KCcsJyksIGogPSAwLCBrZXk7IGtleXMubGVuZ3RoID4gajsgaisrKSB7XG4gICAgaWYgKGhhc093bihOYXRpdmVOdW1iZXIsIGtleSA9IGtleXNbal0pICYmICFoYXNPd24oTnVtYmVyV3JhcHBlciwga2V5KSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkoTnVtYmVyV3JhcHBlciwga2V5LCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTmF0aXZlTnVtYmVyLCBrZXkpKTtcbiAgICB9XG4gIH1cbiAgTnVtYmVyV3JhcHBlci5wcm90b3R5cGUgPSBOdW1iZXJQcm90b3R5cGU7XG4gIE51bWJlclByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE51bWJlcldyYXBwZXI7XG4gIHJlZGVmaW5lKGdsb2JhbCwgTlVNQkVSLCBOdW1iZXJXcmFwcGVyKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyB7fS50b1N0cmluZyA6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gJ1tvYmplY3QgJyArIGNsYXNzb2YodGhpcykgKyAnXSc7XG59O1xuIiwidmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC10by1zdHJpbmcnKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nXG5pZiAoIVRPX1NUUklOR19UQUdfU1VQUE9SVCkge1xuICByZWRlZmluZShPYmplY3QucHJvdG90eXBlLCAndG9TdHJpbmcnLCB0b1N0cmluZywgeyB1bnNhZmU6IHRydWUgfSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ3NsaWNlJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgbmF0aXZlU2xpY2UgPSBbXS5zbGljZTtcbnZhciBtYXggPSBNYXRoLm1heDtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5zbGljZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zbGljZVxuLy8gZmFsbGJhY2sgZm9yIG5vdCBhcnJheS1saWtlIEVTMyBzdHJpbmdzIGFuZCBET00gb2JqZWN0c1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIUhBU19TUEVDSUVTX1NVUFBPUlQgfSwge1xuICBzbGljZTogZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgayA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuZ3RoKTtcbiAgICB2YXIgZmluID0gdG9BYnNvbHV0ZUluZGV4KGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogZW5kLCBsZW5ndGgpO1xuICAgIC8vIGlubGluZSBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBmb3IgdXNhZ2UgbmF0aXZlIGBBcnJheSNzbGljZWAgd2hlcmUgaXQncyBwb3NzaWJsZVxuICAgIHZhciBDb25zdHJ1Y3RvciwgcmVzdWx0LCBuO1xuICAgIGlmIChpc0FycmF5KE8pKSB7XG4gICAgICBDb25zdHJ1Y3RvciA9IE8uY29uc3RydWN0b3I7XG4gICAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgICAgaWYgKGlzQ29uc3RydWN0b3IoQ29uc3RydWN0b3IpICYmIChDb25zdHJ1Y3RvciA9PT0gQXJyYXkgfHwgaXNBcnJheShDb25zdHJ1Y3Rvci5wcm90b3R5cGUpKSkge1xuICAgICAgICBDb25zdHJ1Y3RvciA9IHVuZGVmaW5lZDtcbiAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIENvbnN0cnVjdG9yID0gQ29uc3RydWN0b3JbU1BFQ0lFU107XG4gICAgICAgIGlmIChDb25zdHJ1Y3RvciA9PT0gbnVsbCkgQ29uc3RydWN0b3IgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAoQ29uc3RydWN0b3IgPT09IEFycmF5IHx8IENvbnN0cnVjdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZVNsaWNlLmNhbGwoTywgaywgZmluKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0ID0gbmV3IChDb25zdHJ1Y3RvciA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDb25zdHJ1Y3RvcikobWF4KGZpbiAtIGssIDApKTtcbiAgICBmb3IgKG4gPSAwOyBrIDwgZmluOyBrKyssIG4rKykgaWYgKGsgaW4gTykgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBuLCBPW2tdKTtcbiAgICByZXN1bHQubGVuZ3RoID0gbjtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIG5hdGl2ZUtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlS2V5cygxKTsgfSk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGQUlMU19PTl9QUklNSVRJVkVTIH0sIHtcbiAga2V5czogZnVuY3Rpb24ga2V5cyhpdCkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuIiwiaW1wb3J0IHsgS2ludG9uZVJlc3RBUElFcnJvciB9IGZyb20gXCIuL0tpbnRvbmVSZXN0QVBJRXJyb3JcIjtcblxuZXhwb3J0IGNsYXNzIEtpbnRvbmVBbGxSZWNvcmRzRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHByb2Nlc3NlZFJlY29yZHNSZXN1bHQ6IGFueTtcbiAgdW5wcm9jZXNzZWRSZWNvcmRzOiBhbnlbXTtcbiAgZXJyb3I6IEtpbnRvbmVSZXN0QVBJRXJyb3I7XG4gIGVycm9ySW5kZXg/OiBudW1iZXI7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VFcnJvckluZGV4KGVycm9yczogeyBbazogc3RyaW5nXTogYW55IH0pIHtcbiAgICBjb25zdCBmaXJzdEVycm9yS2V5ID0gT2JqZWN0LmtleXMoZXJyb3JzKVswXTtcbiAgICBjb25zdCByZXN1bHQgPSBmaXJzdEVycm9yS2V5Lm1hdGNoKC9yZWNvcmRzXFxbKFxcZCspXFxdLyk7XG4gICAgcmV0dXJuIHJlc3VsdCA/IE51bWJlcihyZXN1bHRbMV0pIDogbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGV4dHJhY3RFcnJvckluZGV4KFxuICAgIG51bU9mUHJvY2Vzc2VkUmVjb3JkczogbnVtYmVyLFxuICAgIGVycm9yOiBLaW50b25lUmVzdEFQSUVycm9yLFxuICAgIGNodW5rTGVuZ3RoOiBudW1iZXJcbiAgKSB7XG4gICAgaWYgKGVycm9yLmJ1bGtSZXF1ZXN0SW5kZXggIT09IHVuZGVmaW5lZCAmJiBlcnJvci5lcnJvcnMpIHtcbiAgICAgIGNvbnN0IGVycm9yUGFyc2VSZXN1bHQgPSBLaW50b25lQWxsUmVjb3Jkc0Vycm9yLnBhcnNlRXJyb3JJbmRleChcbiAgICAgICAgZXJyb3IuZXJyb3JzXG4gICAgICApO1xuICAgICAgaWYgKGVycm9yUGFyc2VSZXN1bHQgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBudW1PZlByb2Nlc3NlZFJlY29yZHMgK1xuICAgICAgICAgIGVycm9yLmJ1bGtSZXF1ZXN0SW5kZXggKiBjaHVua0xlbmd0aCArXG4gICAgICAgICAgZXJyb3JQYXJzZVJlc3VsdFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYnVpbGRFcnJvck1lc3NhZ2UoXG4gICAgbnVtT2ZQcm9jZXNzZWRSZWNvcmRzOiBudW1iZXIsXG4gICAgbnVtT2ZBbGxSZWNvcmRzOiBudW1iZXIsXG4gICAgZXJyb3JJbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkXG4gICkge1xuICAgIGxldCBtZXNzYWdlID0gXCJcIjtcbiAgICBpZiAoZXJyb3JJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBtZXNzYWdlID0gYEFuIGVycm9yIG9jY3VycmVkIGF0IHJlY29yZHNbJHtlcnJvckluZGV4fV0uIGA7XG4gICAgfVxuICAgIG1lc3NhZ2UgKz0gYCR7bnVtT2ZQcm9jZXNzZWRSZWNvcmRzfS8ke251bU9mQWxsUmVjb3Jkc30gcmVjb3JkcyBhcmUgcHJvY2Vzc2VkIHN1Y2Nlc3NmdWxseWA7XG5cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb2Nlc3NlZFJlY29yZHNSZXN1bHQ6IGFueSxcbiAgICB1bnByb2Nlc3NlZFJlY29yZHM6IGFueVtdLFxuICAgIG51bU9mQWxsUmVjb3JkczogbnVtYmVyLFxuICAgIGVycm9yOiBLaW50b25lUmVzdEFQSUVycm9yLFxuICAgIGNodW5rTGVuZ3RoOiBudW1iZXJcbiAgKSB7XG4gICAgY29uc3QgbnVtT2ZQcm9jZXNzZWRSZWNvcmRzID0gbnVtT2ZBbGxSZWNvcmRzIC0gdW5wcm9jZXNzZWRSZWNvcmRzLmxlbmd0aDtcblxuICAgIGNvbnN0IGVycm9ySW5kZXggPSBLaW50b25lQWxsUmVjb3Jkc0Vycm9yLmV4dHJhY3RFcnJvckluZGV4KFxuICAgICAgbnVtT2ZQcm9jZXNzZWRSZWNvcmRzLFxuICAgICAgZXJyb3IsXG4gICAgICBjaHVua0xlbmd0aFxuICAgICk7XG5cbiAgICBjb25zdCBtZXNzYWdlID0gS2ludG9uZUFsbFJlY29yZHNFcnJvci5idWlsZEVycm9yTWVzc2FnZShcbiAgICAgIG51bU9mUHJvY2Vzc2VkUmVjb3JkcyxcbiAgICAgIG51bU9mQWxsUmVjb3JkcyxcbiAgICAgIGVycm9ySW5kZXhcbiAgICApO1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuXG4gICAgdGhpcy5uYW1lID0gXCJLaW50b25lQWxsUmVjb3Jkc0Vycm9yXCI7XG4gICAgdGhpcy5wcm9jZXNzZWRSZWNvcmRzUmVzdWx0ID0gcHJvY2Vzc2VkUmVjb3Jkc1Jlc3VsdDtcbiAgICB0aGlzLnVucHJvY2Vzc2VkUmVjb3JkcyA9IHVucHJvY2Vzc2VkUmVjb3JkcztcbiAgICB0aGlzLmVycm9yID0gZXJyb3I7XG4gICAgdGhpcy5lcnJvckluZGV4ID0gZXJyb3JJbmRleDtcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L3dpa2kvQnJlYWtpbmctQ2hhbmdlcyNleHRlbmRpbmctYnVpbHQtaW5zLWxpa2UtZXJyb3ItYXJyYXktYW5kLW1hcC1tYXktbm8tbG9uZ2VyLXdvcmtcbiAgICAvLyBTZXQgdGhlIHByb3RvdHlwZSBleHBsaWNpdGx5LlxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBLaW50b25lQWxsUmVjb3Jkc0Vycm9yLnByb3RvdHlwZSk7XG4gIH1cbn1cbiIsImltcG9ydCB7IGJ1aWxkUGF0aCB9IGZyb20gXCIuLy4uL3VybFwiO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gXCIuLy4uL2h0dHAvXCI7XG5pbXBvcnQgeyBCdWxrUmVxdWVzdENsaWVudCB9IGZyb20gXCIuL0J1bGtSZXF1ZXN0Q2xpZW50XCI7XG5pbXBvcnQgeyBLaW50b25lQWxsUmVjb3Jkc0Vycm9yIH0gZnJvbSBcIi4uL2Vycm9yL0tpbnRvbmVBbGxSZWNvcmRzRXJyb3JcIjtcbmltcG9ydCB7XG4gIEFwcElELFxuICBSZWNvcmRJRCxcbiAgUmV2aXNpb24sXG4gIFJlY29yZCxcbiAgVXBkYXRlS2V5LFxuICBDb21tZW50SUQsXG4gIENvbW1lbnQsXG4gIE1lbnRpb24sXG59IGZyb20gXCIuL3R5cGVzXCI7XG5cbmNvbnN0IEFERF9SRUNPUkRTX0xJTUlUID0gMTAwO1xuY29uc3QgVVBEQVRFX1JFQ09SRFNfTElNSVQgPSAxMDA7XG5jb25zdCBERUxFVEVfUkVDT1JEU19MSU1JVCA9IDEwMDtcblxudHlwZSBSZWNvcmRGb3JQYXJhbWV0ZXIgPSB7XG4gIFtmaWVsZENvZGU6IHN0cmluZ106IHtcbiAgICB2YWx1ZTogdW5rbm93bjtcbiAgfTtcbn07XG5cbmV4cG9ydCBjbGFzcyBSZWNvcmRDbGllbnQge1xuICBwcml2YXRlIGNsaWVudDogSHR0cENsaWVudDtcbiAgcHJpdmF0ZSBidWxrUmVxdWVzdENsaWVudDogQnVsa1JlcXVlc3RDbGllbnQ7XG4gIHByaXZhdGUgZ3Vlc3RTcGFjZUlkPzogbnVtYmVyIHwgc3RyaW5nO1xuICBwcml2YXRlIGRpZFdhcm5NYXhpbXVtT2Zmc2V0VmFsdWU6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgY2xpZW50OiBIdHRwQ2xpZW50LFxuICAgIGJ1bGtSZXF1ZXN0Q2xpZW50OiBCdWxrUmVxdWVzdENsaWVudCxcbiAgICBndWVzdFNwYWNlSWQ/OiBudW1iZXIgfCBzdHJpbmdcbiAgKSB7XG4gICAgdGhpcy5jbGllbnQgPSBjbGllbnQ7XG4gICAgdGhpcy5idWxrUmVxdWVzdENsaWVudCA9IGJ1bGtSZXF1ZXN0Q2xpZW50O1xuICAgIHRoaXMuZ3Vlc3RTcGFjZUlkID0gZ3Vlc3RTcGFjZUlkO1xuICAgIHRoaXMuZGlkV2Fybk1heGltdW1PZmZzZXRWYWx1ZSA9IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGdldFJlY29yZDxUIGV4dGVuZHMgUmVjb3JkPihwYXJhbXM6IHtcbiAgICBhcHA6IEFwcElEO1xuICAgIGlkOiBSZWNvcmRJRDtcbiAgfSk6IFByb21pc2U8eyByZWNvcmQ6IFQgfT4ge1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgZW5kcG9pbnROYW1lOiBcInJlY29yZFwiLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmNsaWVudC5nZXQocGF0aCwgcGFyYW1zKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRSZWNvcmQocGFyYW1zOiB7XG4gICAgYXBwOiBBcHBJRDtcbiAgICByZWNvcmQ/OiBSZWNvcmRGb3JQYXJhbWV0ZXI7XG4gIH0pOiBQcm9taXNlPHsgaWQ6IHN0cmluZzsgcmV2aXNpb246IHN0cmluZyB9PiB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICBlbmRwb2ludE5hbWU6IFwicmVjb3JkXCIsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LnBvc3QocGF0aCwgcGFyYW1zKTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVSZWNvcmQoXG4gICAgcGFyYW1zOlxuICAgICAgfCB7XG4gICAgICAgICAgYXBwOiBBcHBJRDtcbiAgICAgICAgICBpZDogUmVjb3JkSUQ7XG4gICAgICAgICAgcmVjb3JkPzogUmVjb3JkRm9yUGFyYW1ldGVyO1xuICAgICAgICAgIHJldmlzaW9uPzogUmV2aXNpb247XG4gICAgICAgIH1cbiAgICAgIHwge1xuICAgICAgICAgIGFwcDogQXBwSUQ7XG4gICAgICAgICAgdXBkYXRlS2V5OiBVcGRhdGVLZXk7XG4gICAgICAgICAgcmVjb3JkPzogUmVjb3JkRm9yUGFyYW1ldGVyO1xuICAgICAgICAgIHJldmlzaW9uPzogUmV2aXNpb247XG4gICAgICAgIH1cbiAgKTogUHJvbWlzZTx7IHJldmlzaW9uOiBzdHJpbmcgfT4ge1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgZW5kcG9pbnROYW1lOiBcInJlY29yZFwiLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmNsaWVudC5wdXQocGF0aCwgcGFyYW1zKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cHNlcnRSZWNvcmQocGFyYW1zOiB7XG4gICAgYXBwOiBBcHBJRDtcbiAgICB1cGRhdGVLZXk6IFVwZGF0ZUtleTtcbiAgICByZWNvcmQ/OiBSZWNvcmRGb3JQYXJhbWV0ZXI7XG4gICAgcmV2aXNpb24/OiBSZXZpc2lvbjtcbiAgfSk6IFByb21pc2U8eyBpZDogc3RyaW5nOyByZXZpc2lvbjogc3RyaW5nIH0+IHtcbiAgICBjb25zdCB7IGFwcCwgdXBkYXRlS2V5LCByZWNvcmQgfSA9IHBhcmFtcztcbiAgICAvLyBpZiB0aGUgY2xpZW50IGNhbid0IGdldCBhIHJlY29yZCBtYXRjaGVzIGB1cGRhdGVLZXlgLCB1c2UgYGFkZFJlY29yZGBcbiAgICBjb25zdCB7IHJlY29yZHMgfSA9IGF3YWl0IHRoaXMuZ2V0UmVjb3Jkcyh7XG4gICAgICBhcHAsXG4gICAgICBxdWVyeTogYCR7dXBkYXRlS2V5LmZpZWxkfSA9IFwiJHt1cGRhdGVLZXkudmFsdWV9XCJgLFxuICAgIH0pO1xuICAgIGlmIChyZWNvcmRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmIChyZWNvcmRzWzBdLiRpZC50eXBlID09PSBcIl9fSURfX1wiKSB7XG4gICAgICAgIGNvbnN0IHsgcmV2aXNpb24gfSA9IGF3YWl0IHRoaXMudXBkYXRlUmVjb3JkKHBhcmFtcyk7XG4gICAgICAgIHJldHVybiB7IGlkOiByZWNvcmRzWzBdLiRpZC52YWx1ZSwgcmV2aXNpb24gfTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJNaXNzaW5nIGAkaWRgIGluIGBnZXRSZWNvcmRzYCByZXNwb25zZS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIEtpbnRvbmUgUkVTVCBBUEkgQ2xpZW50LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYWRkUmVjb3JkKHtcbiAgICAgIGFwcCxcbiAgICAgIHJlY29yZDogT2JqZWN0LmFzc2lnbih7fSwgcmVjb3JkLCB7XG4gICAgICAgIFt1cGRhdGVLZXkuZmllbGRdOiB7IHZhbHVlOiB1cGRhdGVLZXkudmFsdWUgfSxcbiAgICAgIH0pLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gVE9ETzogYHJlY29yZHNgIHR5cGUgaW4gcmV0dXJuIHR5cGUgc2hvdWxkIGJlIGZpbHRlcmVkIGJ5IGBmaWVsZHNgLlxuICBwdWJsaWMgYXN5bmMgZ2V0UmVjb3JkczxUIGV4dGVuZHMgUmVjb3JkPihwYXJhbXM6IHtcbiAgICBhcHA6IEFwcElEO1xuICAgIGZpZWxkcz86IHN0cmluZ1tdO1xuICAgIHF1ZXJ5Pzogc3RyaW5nO1xuICAgIHRvdGFsQ291bnQ/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTx7IHJlY29yZHM6IFRbXTsgdG90YWxDb3VudDogc3RyaW5nIHwgbnVsbCB9PiB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICBlbmRwb2ludE5hbWU6IFwicmVjb3Jkc1wiLFxuICAgIH0pO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQuZ2V0PHtcbiAgICAgIHJlY29yZHM6IFRbXTtcbiAgICAgIHRvdGFsQ291bnQ6IHN0cmluZyB8IG51bGw7XG4gICAgfT4ocGF0aCwgcGFyYW1zKTtcbiAgICB0aGlzLndhcm5NYXhpbXVtT2Zmc2V0VmFsdWVJZk5lZWRlZChwYXJhbXMucXVlcnkpO1xuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgd2Fybk1heGltdW1PZmZzZXRWYWx1ZUlmTmVlZGVkKHF1ZXJ5Pzogc3RyaW5nKSB7XG4gICAgaWYgKHF1ZXJ5KSB7XG4gICAgICBjb25zdCByZWdleHAgPSAvb2Zmc2V0XFxzKyhcXGQrKS9pO1xuICAgICAgY29uc3QgcmVzdWx0ID0gcXVlcnkubWF0Y2gocmVnZXhwKTtcbiAgICAgIGlmIChcbiAgICAgICAgIXRoaXMuZGlkV2Fybk1heGltdW1PZmZzZXRWYWx1ZSAmJlxuICAgICAgICByZXN1bHQgJiZcbiAgICAgICAgTnVtYmVyKHJlc3VsdFsxXSkgPiAxMDAwMFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuZGlkV2Fybk1heGltdW1PZmZzZXRWYWx1ZSA9IHRydWU7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBcIldhcm5pbmc6IFRoZSBtYXhpbXVtIG9mZnNldCB2YWx1ZSB3aWxsIGJlIGxpbWl0ZWQgdG8gMTAsMDAwIGluIHRoZSBmdXR1cmUuIFBsZWFzZSB1c2UgYGNyZWF0ZUN1cnNvcigpYCBhbmQgYGdldFJlY29yZHNCeUN1cnNvcigpYCBpbnN0ZWFkLlwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGFkZFJlY29yZHMocGFyYW1zOiB7XG4gICAgYXBwOiBBcHBJRDtcbiAgICByZWNvcmRzOiBSZWNvcmRGb3JQYXJhbWV0ZXJbXTtcbiAgfSk6IFByb21pc2U8e1xuICAgIGlkczogc3RyaW5nW107XG4gICAgcmV2aXNpb25zOiBzdHJpbmdbXTtcbiAgICByZWNvcmRzOiBBcnJheTx7IGlkOiBzdHJpbmc7IHJldmlzaW9uOiBzdHJpbmcgfT47XG4gIH0+IHtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgIGVuZHBvaW50TmFtZTogXCJyZWNvcmRzXCIsXG4gICAgfSk7XG4gICAgY29uc3QgeyBpZHMsIHJldmlzaW9ucyB9ID0gYXdhaXQgdGhpcy5jbGllbnQucG9zdDx7XG4gICAgICBpZHM6IHN0cmluZ1tdO1xuICAgICAgcmV2aXNpb25zOiBzdHJpbmdbXTtcbiAgICB9PihwYXRoLCBwYXJhbXMpO1xuICAgIHJldHVybiB7XG4gICAgICBpZHMsXG4gICAgICByZXZpc2lvbnMsXG4gICAgICByZWNvcmRzOiBpZHMubWFwKChpZCwgaSkgPT4gKHsgaWQsIHJldmlzaW9uOiByZXZpc2lvbnNbaV0gfSkpLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlUmVjb3JkcyhwYXJhbXM6IHtcbiAgICBhcHA6IEFwcElEO1xuICAgIHJlY29yZHM6IEFycmF5PFxuICAgICAgfCB7IGlkOiBSZWNvcmRJRDsgcmVjb3JkPzogUmVjb3JkRm9yUGFyYW1ldGVyOyByZXZpc2lvbj86IFJldmlzaW9uIH1cbiAgICAgIHwge1xuICAgICAgICAgIHVwZGF0ZUtleTogVXBkYXRlS2V5O1xuICAgICAgICAgIHJlY29yZD86IFJlY29yZEZvclBhcmFtZXRlcjtcbiAgICAgICAgICByZXZpc2lvbj86IFJldmlzaW9uO1xuICAgICAgICB9XG4gICAgPjtcbiAgfSk6IFByb21pc2U8eyByZWNvcmRzOiBBcnJheTx7IGlkOiBzdHJpbmc7IHJldmlzaW9uOiBzdHJpbmcgfT4gfT4ge1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgZW5kcG9pbnROYW1lOiBcInJlY29yZHNcIixcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQucHV0KHBhdGgsIHBhcmFtcyk7XG4gIH1cblxuICBwdWJsaWMgZGVsZXRlUmVjb3JkcyhwYXJhbXM6IHtcbiAgICBhcHA6IEFwcElEO1xuICAgIGlkczogUmVjb3JkSURbXTtcbiAgICByZXZpc2lvbnM/OiBSZXZpc2lvbltdO1xuICB9KTogUHJvbWlzZTx7fT4ge1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgZW5kcG9pbnROYW1lOiBcInJlY29yZHNcIixcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQuZGVsZXRlKHBhdGgsIHBhcmFtcyk7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlQ3Vyc29yKHBhcmFtczoge1xuICAgIGFwcDogQXBwSUQ7XG4gICAgZmllbGRzPzogc3RyaW5nW107XG4gICAgcXVlcnk/OiBzdHJpbmc7XG4gICAgc2l6ZT86IG51bWJlciB8IHN0cmluZztcbiAgfSk6IFByb21pc2U8eyBpZDogc3RyaW5nOyB0b3RhbENvdW50OiBzdHJpbmcgfT4ge1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgZW5kcG9pbnROYW1lOiBcInJlY29yZHMvY3Vyc29yXCIsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LnBvc3QocGF0aCwgcGFyYW1zKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSZWNvcmRzQnlDdXJzb3I8VCBleHRlbmRzIFJlY29yZD4ocGFyYW1zOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgfSk6IFByb21pc2U8e1xuICAgIHJlY29yZHM6IFRbXTtcbiAgICBuZXh0OiBib29sZWFuO1xuICB9PiB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICBlbmRwb2ludE5hbWU6IFwicmVjb3Jkcy9jdXJzb3JcIixcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHBhdGgsIHBhcmFtcyk7XG4gIH1cblxuICBwdWJsaWMgZGVsZXRlQ3Vyc29yKHBhcmFtczogeyBpZDogc3RyaW5nIH0pOiBQcm9taXNlPHt9PiB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICBlbmRwb2ludE5hbWU6IFwicmVjb3Jkcy9jdXJzb3JcIixcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQuZGVsZXRlKHBhdGgsIHBhcmFtcyk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0QWxsUmVjb3JkczxUIGV4dGVuZHMgUmVjb3JkPihwYXJhbXM6IHtcbiAgICBhcHA6IEFwcElEO1xuICAgIGZpZWxkcz86IHN0cmluZ1tdO1xuICAgIGNvbmRpdGlvbj86IHN0cmluZztcbiAgICBvcmRlckJ5Pzogc3RyaW5nO1xuICAgIHdpdGhDdXJzb3I/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTxUW10+IHtcbiAgICBjb25zdCB7IGNvbmRpdGlvbiwgb3JkZXJCeSwgd2l0aEN1cnNvciA9IHRydWUsIC4uLnJlc3QgfSA9IHBhcmFtcztcbiAgICBpZiAoIW9yZGVyQnkpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEFsbFJlY29yZHNXaXRoSWQoeyAuLi5yZXN0LCBjb25kaXRpb24gfSk7XG4gICAgfVxuICAgIGlmICh3aXRoQ3Vyc29yKSB7XG4gICAgICBjb25zdCBjb25kaXRpb25RdWVyeSA9IGNvbmRpdGlvbiA/IGAke2NvbmRpdGlvbn0gYCA6IFwiXCI7XG4gICAgICBjb25zdCBxdWVyeSA9IGAke2NvbmRpdGlvblF1ZXJ5fSR7b3JkZXJCeSA/IGBvcmRlciBieSAke29yZGVyQnl9YCA6IFwiXCJ9YDtcbiAgICAgIHJldHVybiB0aGlzLmdldEFsbFJlY29yZHNXaXRoQ3Vyc29yKHsgLi4ucmVzdCwgcXVlcnkgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldEFsbFJlY29yZHNXaXRoT2Zmc2V0KHsgLi4ucmVzdCwgb3JkZXJCeSwgY29uZGl0aW9uIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEFsbFJlY29yZHNXaXRoSWQ8VCBleHRlbmRzIFJlY29yZD4ocGFyYW1zOiB7XG4gICAgYXBwOiBBcHBJRDtcbiAgICBmaWVsZHM/OiBzdHJpbmdbXTtcbiAgICBjb25kaXRpb24/OiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFRbXT4ge1xuICAgIGNvbnN0IHsgZmllbGRzOiBvcmlnaW5hbEZpZWxkcywgLi4ucmVzdCB9ID0gcGFyYW1zO1xuICAgIGxldCBmaWVsZHMgPSBvcmlnaW5hbEZpZWxkcztcbiAgICAvLyBBcHBlbmQgJGlkIGlmICRpZCBkb2Vzbid0IGV4aXN0IGluIGZpZWxkc1xuICAgIGlmIChmaWVsZHMgJiYgZmllbGRzLmxlbmd0aCA+IDAgJiYgZmllbGRzLmluZGV4T2YoXCIkaWRcIikgPT09IC0xKSB7XG4gICAgICBmaWVsZHMgPSBbLi4uZmllbGRzLCBcIiRpZFwiXTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0QWxsUmVjb3Jkc1JlY3Vyc2l2ZVdpdGhJZCh7IC4uLnJlc3QsIGZpZWxkcyB9LCBcIjBcIiwgW10pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRBbGxSZWNvcmRzUmVjdXJzaXZlV2l0aElkPFQgZXh0ZW5kcyBSZWNvcmQ+KFxuICAgIHBhcmFtczoge1xuICAgICAgYXBwOiBBcHBJRDtcbiAgICAgIGZpZWxkcz86IHN0cmluZ1tdO1xuICAgICAgY29uZGl0aW9uPzogc3RyaW5nO1xuICAgIH0sXG4gICAgaWQ6IHN0cmluZyxcbiAgICByZWNvcmRzOiBUW11cbiAgKTogUHJvbWlzZTxUW10+IHtcbiAgICBjb25zdCBHRVRfUkVDT1JEU19MSU1JVCA9IDUwMDtcblxuICAgIGNvbnN0IHsgY29uZGl0aW9uLCAuLi5yZXN0IH0gPSBwYXJhbXM7XG4gICAgY29uc3QgY29uZGl0aW9uUXVlcnkgPSBjb25kaXRpb24gPyBgKCR7Y29uZGl0aW9ufSkgYW5kIGAgOiBcIlwiO1xuICAgIGNvbnN0IHF1ZXJ5ID0gYCR7Y29uZGl0aW9uUXVlcnl9JGlkID4gJHtpZH0gb3JkZXIgYnkgJGlkIGFzYyBsaW1pdCAke0dFVF9SRUNPUkRTX0xJTUlUfWA7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5nZXRSZWNvcmRzPFQ+KHsgLi4ucmVzdCwgcXVlcnkgfSk7XG4gICAgY29uc3QgYWxsUmVjb3JkcyA9IHJlY29yZHMuY29uY2F0KHJlc3VsdC5yZWNvcmRzKTtcbiAgICBpZiAocmVzdWx0LnJlY29yZHMubGVuZ3RoIDwgR0VUX1JFQ09SRFNfTElNSVQpIHtcbiAgICAgIHJldHVybiBhbGxSZWNvcmRzO1xuICAgIH1cbiAgICBjb25zdCBsYXN0UmVjb3JkID0gcmVzdWx0LnJlY29yZHNbcmVzdWx0LnJlY29yZHMubGVuZ3RoIC0gMV07XG4gICAgaWYgKGxhc3RSZWNvcmQuJGlkLnR5cGUgPT09IFwiX19JRF9fXCIpIHtcbiAgICAgIGNvbnN0IGxhc3RJZCA9IGxhc3RSZWNvcmQuJGlkLnZhbHVlO1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QWxsUmVjb3Jkc1JlY3Vyc2l2ZVdpdGhJZChwYXJhbXMsIGxhc3RJZCwgYWxsUmVjb3Jkcyk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiTWlzc2luZyBgJGlkYCBpbiBgZ2V0UmVjb3Jkc2AgcmVzcG9uc2UuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBLaW50b25lIFJFU1QgQVBJIENsaWVudC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEFsbFJlY29yZHNXaXRoT2Zmc2V0PFQgZXh0ZW5kcyBSZWNvcmQ+KHBhcmFtczoge1xuICAgIGFwcDogQXBwSUQ7XG4gICAgZmllbGRzPzogc3RyaW5nW107XG4gICAgY29uZGl0aW9uPzogc3RyaW5nO1xuICAgIG9yZGVyQnk/OiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFRbXT4ge1xuICAgIHJldHVybiB0aGlzLmdldEFsbFJlY29yZHNSZWN1cnNpdmVXaXRoT2Zmc2V0KHBhcmFtcywgMCwgW10pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRBbGxSZWNvcmRzUmVjdXJzaXZlV2l0aE9mZnNldDxUIGV4dGVuZHMgUmVjb3JkPihcbiAgICBwYXJhbXM6IHtcbiAgICAgIGFwcDogQXBwSUQ7XG4gICAgICBmaWVsZHM/OiBzdHJpbmdbXTtcbiAgICAgIGNvbmRpdGlvbj86IHN0cmluZztcbiAgICAgIG9yZGVyQnk/OiBzdHJpbmc7XG4gICAgfSxcbiAgICBvZmZzZXQ6IG51bWJlcixcbiAgICByZWNvcmRzOiBUW11cbiAgKTogUHJvbWlzZTxUW10+IHtcbiAgICBjb25zdCBHRVRfUkVDT1JEU19MSU1JVCA9IDUwMDtcblxuICAgIGNvbnN0IHsgY29uZGl0aW9uLCBvcmRlckJ5LCAuLi5yZXN0IH0gPSBwYXJhbXM7XG4gICAgY29uc3QgY29uZGl0aW9uUXVlcnkgPSBjb25kaXRpb24gPyBgJHtjb25kaXRpb259IGAgOiBcIlwiO1xuICAgIGNvbnN0IHF1ZXJ5ID0gYCR7Y29uZGl0aW9uUXVlcnl9JHtcbiAgICAgIG9yZGVyQnkgPyBgb3JkZXIgYnkgJHtvcmRlckJ5fSBgIDogXCJcIlxuICAgIH1saW1pdCAke0dFVF9SRUNPUkRTX0xJTUlUfSBvZmZzZXQgJHtvZmZzZXR9YDtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmdldFJlY29yZHM8VD4oeyAuLi5yZXN0LCBxdWVyeSB9KTtcbiAgICBjb25zdCBhbGxSZWNvcmRzID0gcmVjb3Jkcy5jb25jYXQocmVzdWx0LnJlY29yZHMpO1xuICAgIGlmIChyZXN1bHQucmVjb3Jkcy5sZW5ndGggPCBHRVRfUkVDT1JEU19MSU1JVCkge1xuICAgICAgcmV0dXJuIGFsbFJlY29yZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0QWxsUmVjb3Jkc1JlY3Vyc2l2ZVdpdGhPZmZzZXQoXG4gICAgICBwYXJhbXMsXG4gICAgICBvZmZzZXQgKyBHRVRfUkVDT1JEU19MSU1JVCxcbiAgICAgIGFsbFJlY29yZHNcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEFsbFJlY29yZHNXaXRoQ3Vyc29yPFQgZXh0ZW5kcyBSZWNvcmQ+KHBhcmFtczoge1xuICAgIGFwcDogQXBwSUQ7XG4gICAgZmllbGRzPzogc3RyaW5nW107XG4gICAgcXVlcnk/OiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFRbXT4ge1xuICAgIGNvbnN0IHsgaWQgfSA9IGF3YWl0IHRoaXMuY3JlYXRlQ3Vyc29yKHBhcmFtcyk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldEFsbFJlY29yZHNSZWN1cnNpdmVCeUN1cnNvcjxUPihpZCwgW10pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBhd2FpdCB0aGlzLmRlbGV0ZUN1cnNvcih7IGlkIH0pO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRBbGxSZWNvcmRzUmVjdXJzaXZlQnlDdXJzb3I8VCBleHRlbmRzIFJlY29yZD4oXG4gICAgaWQ6IHN0cmluZyxcbiAgICByZWNvcmRzOiBUW11cbiAgKTogUHJvbWlzZTxUW10+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmdldFJlY29yZHNCeUN1cnNvcjxUPih7IGlkIH0pO1xuICAgIGNvbnN0IGFsbFJlY29yZHMgPSByZWNvcmRzLmNvbmNhdChyZXN1bHQucmVjb3Jkcyk7XG4gICAgaWYgKHJlc3VsdC5uZXh0KSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRBbGxSZWNvcmRzUmVjdXJzaXZlQnlDdXJzb3IoaWQsIGFsbFJlY29yZHMpO1xuICAgIH1cbiAgICByZXR1cm4gYWxsUmVjb3JkcztcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhZGRBbGxSZWNvcmRzKHBhcmFtczoge1xuICAgIGFwcDogQXBwSUQ7XG4gICAgcmVjb3JkczogUmVjb3JkRm9yUGFyYW1ldGVyW107XG4gIH0pOiBQcm9taXNlPHsgcmVjb3JkczogQXJyYXk8eyBpZDogc3RyaW5nOyByZXZpc2lvbjogc3RyaW5nIH0+IH0+IHtcbiAgICBpZiAoXG4gICAgICAhcGFyYW1zLnJlY29yZHMuZXZlcnkoXG4gICAgICAgIChyZWNvcmQpID0+ICFBcnJheS5pc0FycmF5KHJlY29yZCkgJiYgcmVjb3JkIGluc3RhbmNlb2YgT2JqZWN0XG4gICAgICApXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgYHJlY29yZHNgIHBhcmFtZXRlciBtdXN0IGJlIGFuIGFycmF5IG9mIG9iamVjdC5cIik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmFkZEFsbFJlY29yZHNSZWN1cnNpdmUocGFyYW1zLCBwYXJhbXMucmVjb3Jkcy5sZW5ndGgsIFtdKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYWRkQWxsUmVjb3Jkc1JlY3Vyc2l2ZShcbiAgICBwYXJhbXM6IHsgYXBwOiBBcHBJRDsgcmVjb3JkczogUmVjb3JkRm9yUGFyYW1ldGVyW10gfSxcbiAgICBudW1PZkFsbFJlY29yZHM6IG51bWJlcixcbiAgICByZXN1bHRzOiBBcnJheTx7IGlkOiBzdHJpbmc7IHJldmlzaW9uOiBzdHJpbmcgfT5cbiAgKTogUHJvbWlzZTx7IHJlY29yZHM6IEFycmF5PHsgaWQ6IHN0cmluZzsgcmV2aXNpb246IHN0cmluZyB9PiB9PiB7XG4gICAgY29uc3QgQ0hVTktfTEVOR1RIID1cbiAgICAgIHRoaXMuYnVsa1JlcXVlc3RDbGllbnQuUkVRVUVTVFNfTEVOR1RIX0xJTUlUICogQUREX1JFQ09SRFNfTElNSVQ7XG4gICAgY29uc3QgeyBhcHAsIHJlY29yZHMgfSA9IHBhcmFtcztcbiAgICBjb25zdCByZWNvcmRzQ2h1bmsgPSByZWNvcmRzLnNsaWNlKDAsIENIVU5LX0xFTkdUSCk7XG4gICAgaWYgKHJlY29yZHNDaHVuay5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB7IHJlY29yZHM6IHJlc3VsdHMgfTtcbiAgICB9XG4gICAgbGV0IG5ld1Jlc3VsdHM7XG4gICAgdHJ5IHtcbiAgICAgIG5ld1Jlc3VsdHMgPSBhd2FpdCB0aGlzLmFkZEFsbFJlY29yZHNXaXRoQnVsa1JlcXVlc3Qoe1xuICAgICAgICBhcHAsXG4gICAgICAgIHJlY29yZHM6IHJlY29yZHNDaHVuayxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgbmV3IEtpbnRvbmVBbGxSZWNvcmRzRXJyb3IoXG4gICAgICAgIHsgcmVjb3JkczogcmVzdWx0cyB9LFxuICAgICAgICByZWNvcmRzLFxuICAgICAgICBudW1PZkFsbFJlY29yZHMsXG4gICAgICAgIGUsXG4gICAgICAgIEFERF9SRUNPUkRTX0xJTUlUXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hZGRBbGxSZWNvcmRzUmVjdXJzaXZlKFxuICAgICAge1xuICAgICAgICBhcHAsXG4gICAgICAgIHJlY29yZHM6IHJlY29yZHMuc2xpY2UoQ0hVTktfTEVOR1RIKSxcbiAgICAgIH0sXG4gICAgICBudW1PZkFsbFJlY29yZHMsXG4gICAgICByZXN1bHRzLmNvbmNhdChuZXdSZXN1bHRzKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGFkZEFsbFJlY29yZHNXaXRoQnVsa1JlcXVlc3QocGFyYW1zOiB7XG4gICAgYXBwOiBBcHBJRDtcbiAgICByZWNvcmRzOiBSZWNvcmRGb3JQYXJhbWV0ZXJbXTtcbiAgfSk6IFByb21pc2U8XG4gICAgQXJyYXk8e1xuICAgICAgaWQ6IHN0cmluZztcbiAgICAgIHJldmlzaW9uOiBzdHJpbmc7XG4gICAgfT5cbiAgPiB7XG4gICAgY29uc3Qgc2VwYXJhdGVkUmVjb3JkcyA9IHRoaXMuc2VwYXJhdGVBcnJheVJlY3Vyc2l2ZShcbiAgICAgIEFERF9SRUNPUkRTX0xJTUlULFxuICAgICAgW10sXG4gICAgICBwYXJhbXMucmVjb3Jkc1xuICAgICk7XG4gICAgY29uc3QgcmVxdWVzdHMgPSBzZXBhcmF0ZWRSZWNvcmRzLm1hcCgocmVjb3JkcykgPT4gKHtcbiAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICBlbmRwb2ludE5hbWU6IFwicmVjb3Jkc1wiIGFzIGNvbnN0LFxuICAgICAgcGF5bG9hZDoge1xuICAgICAgICBhcHA6IHBhcmFtcy5hcHAsXG4gICAgICAgIHJlY29yZHMsXG4gICAgICB9LFxuICAgIH0pKTtcbiAgICBjb25zdCByZXN1bHRzID0gKGF3YWl0IHRoaXMuYnVsa1JlcXVlc3RDbGllbnQuc2VuZCh7IHJlcXVlc3RzIH0pKVxuICAgICAgLnJlc3VsdHMgYXMgQXJyYXk8eyBpZHM6IHN0cmluZ1tdOyByZXZpc2lvbnM6IHN0cmluZ1tdIH0+O1xuICAgIHJldHVybiByZXN1bHRzXG4gICAgICAubWFwKChyZXN1bHQpID0+IHtcbiAgICAgICAgY29uc3QgeyBpZHMsIHJldmlzaW9ucyB9ID0gcmVzdWx0O1xuICAgICAgICByZXR1cm4gaWRzLm1hcCgoaWQsIGkpID0+ICh7IGlkLCByZXZpc2lvbjogcmV2aXNpb25zW2ldIH0pKTtcbiAgICAgIH0pXG4gICAgICAucmVkdWNlKChhY2MsIHJlY29yZHMpID0+IHtcbiAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQocmVjb3Jkcyk7XG4gICAgICB9LCBbXSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlQWxsUmVjb3JkcyhwYXJhbXM6IHtcbiAgICBhcHA6IEFwcElEO1xuICAgIHJlY29yZHM6IEFycmF5PFxuICAgICAgfCB7IGlkOiBSZWNvcmRJRDsgcmVjb3JkPzogUmVjb3JkRm9yUGFyYW1ldGVyOyByZXZpc2lvbj86IFJldmlzaW9uIH1cbiAgICAgIHwge1xuICAgICAgICAgIHVwZGF0ZUtleTogVXBkYXRlS2V5O1xuICAgICAgICAgIHJlY29yZD86IFJlY29yZEZvclBhcmFtZXRlcjtcbiAgICAgICAgICByZXZpc2lvbj86IFJldmlzaW9uO1xuICAgICAgICB9XG4gICAgPjtcbiAgfSk6IFByb21pc2U8eyByZWNvcmRzOiBBcnJheTx7IGlkOiBzdHJpbmc7IHJldmlzaW9uOiBzdHJpbmcgfT4gfT4ge1xuICAgIHJldHVybiB0aGlzLnVwZGF0ZUFsbFJlY29yZHNSZWN1cnNpdmUocGFyYW1zLCBwYXJhbXMucmVjb3Jkcy5sZW5ndGgsIFtdKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlQWxsUmVjb3Jkc1JlY3Vyc2l2ZShcbiAgICBwYXJhbXM6IHtcbiAgICAgIGFwcDogQXBwSUQ7XG4gICAgICByZWNvcmRzOiBBcnJheTxcbiAgICAgICAgfCB7IGlkOiBSZWNvcmRJRDsgcmVjb3JkPzogUmVjb3JkRm9yUGFyYW1ldGVyOyByZXZpc2lvbj86IFJldmlzaW9uIH1cbiAgICAgICAgfCB7XG4gICAgICAgICAgICB1cGRhdGVLZXk6IFVwZGF0ZUtleTtcbiAgICAgICAgICAgIHJlY29yZD86IFJlY29yZEZvclBhcmFtZXRlcjtcbiAgICAgICAgICAgIHJldmlzaW9uPzogUmV2aXNpb247XG4gICAgICAgICAgfVxuICAgICAgPjtcbiAgICB9LFxuICAgIG51bU9mQWxsUmVjb3JkczogbnVtYmVyLFxuICAgIHJlc3VsdHM6IEFycmF5PHsgaWQ6IHN0cmluZzsgcmV2aXNpb246IHN0cmluZyB9PlxuICApOiBQcm9taXNlPHsgcmVjb3JkczogQXJyYXk8eyBpZDogc3RyaW5nOyByZXZpc2lvbjogc3RyaW5nIH0+IH0+IHtcbiAgICBjb25zdCBDSFVOS19MRU5HVEggPVxuICAgICAgdGhpcy5idWxrUmVxdWVzdENsaWVudC5SRVFVRVNUU19MRU5HVEhfTElNSVQgKiBVUERBVEVfUkVDT1JEU19MSU1JVDtcbiAgICBjb25zdCB7IGFwcCwgcmVjb3JkcyB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IHJlY29yZHNDaHVuayA9IHJlY29yZHMuc2xpY2UoMCwgQ0hVTktfTEVOR1RIKTtcbiAgICBpZiAocmVjb3Jkc0NodW5rLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHsgcmVjb3JkczogcmVzdWx0cyB9O1xuICAgIH1cbiAgICBsZXQgbmV3UmVzdWx0cztcbiAgICB0cnkge1xuICAgICAgbmV3UmVzdWx0cyA9IGF3YWl0IHRoaXMudXBkYXRlQWxsUmVjb3Jkc1dpdGhCdWxrUmVxdWVzdCh7XG4gICAgICAgIGFwcCxcbiAgICAgICAgcmVjb3JkczogcmVjb3Jkc0NodW5rLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aHJvdyBuZXcgS2ludG9uZUFsbFJlY29yZHNFcnJvcihcbiAgICAgICAgeyByZWNvcmRzOiByZXN1bHRzIH0sXG4gICAgICAgIHJlY29yZHMsXG4gICAgICAgIG51bU9mQWxsUmVjb3JkcyxcbiAgICAgICAgZSxcbiAgICAgICAgVVBEQVRFX1JFQ09SRFNfTElNSVRcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnVwZGF0ZUFsbFJlY29yZHNSZWN1cnNpdmUoXG4gICAgICB7XG4gICAgICAgIGFwcCxcbiAgICAgICAgcmVjb3JkczogcmVjb3Jkcy5zbGljZShDSFVOS19MRU5HVEgpLFxuICAgICAgfSxcbiAgICAgIG51bU9mQWxsUmVjb3JkcyxcbiAgICAgIHJlc3VsdHMuY29uY2F0KG5ld1Jlc3VsdHMpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlQWxsUmVjb3Jkc1dpdGhCdWxrUmVxdWVzdChwYXJhbXM6IHtcbiAgICBhcHA6IEFwcElEO1xuICAgIHJlY29yZHM6IEFycmF5PFxuICAgICAgfCB7IGlkOiBSZWNvcmRJRDsgcmVjb3JkPzogUmVjb3JkRm9yUGFyYW1ldGVyOyByZXZpc2lvbj86IFJldmlzaW9uIH1cbiAgICAgIHwge1xuICAgICAgICAgIHVwZGF0ZUtleTogVXBkYXRlS2V5O1xuICAgICAgICAgIHJlY29yZD86IFJlY29yZEZvclBhcmFtZXRlcjtcbiAgICAgICAgICByZXZpc2lvbj86IFJldmlzaW9uO1xuICAgICAgICB9XG4gICAgPjtcbiAgfSk6IFByb21pc2U8QXJyYXk8eyBpZDogc3RyaW5nOyByZXZpc2lvbjogc3RyaW5nIH0+PiB7XG4gICAgY29uc3Qgc2VwYXJhdGVkUmVjb3JkcyA9IHRoaXMuc2VwYXJhdGVBcnJheVJlY3Vyc2l2ZShcbiAgICAgIFVQREFURV9SRUNPUkRTX0xJTUlULFxuICAgICAgW10sXG4gICAgICBwYXJhbXMucmVjb3Jkc1xuICAgICk7XG4gICAgY29uc3QgcmVxdWVzdHMgPSBzZXBhcmF0ZWRSZWNvcmRzLm1hcCgocmVjb3JkcykgPT4gKHtcbiAgICAgIG1ldGhvZDogXCJQVVRcIixcbiAgICAgIGVuZHBvaW50TmFtZTogXCJyZWNvcmRzXCIgYXMgY29uc3QsXG4gICAgICBwYXlsb2FkOiB7XG4gICAgICAgIGFwcDogcGFyYW1zLmFwcCxcbiAgICAgICAgcmVjb3JkcyxcbiAgICAgIH0sXG4gICAgfSkpO1xuICAgIGNvbnN0IHJlc3VsdHMgPSAoYXdhaXQgdGhpcy5idWxrUmVxdWVzdENsaWVudC5zZW5kKHsgcmVxdWVzdHMgfSkpXG4gICAgICAucmVzdWx0cyBhcyBBcnJheTx7IHJlY29yZHM6IEFycmF5PHsgaWQ6IHN0cmluZzsgcmV2aXNpb246IHN0cmluZyB9PiB9PjtcbiAgICByZXR1cm4gcmVzdWx0c1xuICAgICAgLm1hcCgocmVzdWx0KSA9PiByZXN1bHQucmVjb3JkcylcbiAgICAgIC5yZWR1Y2UoKGFjYywgcmVjb3JkcykgPT4ge1xuICAgICAgICByZXR1cm4gYWNjLmNvbmNhdChyZWNvcmRzKTtcbiAgICAgIH0sIFtdKTtcbiAgfVxuXG4gIHB1YmxpYyBkZWxldGVBbGxSZWNvcmRzKHBhcmFtczoge1xuICAgIGFwcDogQXBwSUQ7XG4gICAgcmVjb3JkczogQXJyYXk8e1xuICAgICAgaWQ6IFJlY29yZElEO1xuICAgICAgcmV2aXNpb24/OiBSZXZpc2lvbjtcbiAgICB9PjtcbiAgfSk6IFByb21pc2U8e30+IHtcbiAgICByZXR1cm4gdGhpcy5kZWxldGVBbGxSZWNvcmRzUmVjdXJzaXZlKHBhcmFtcywgcGFyYW1zLnJlY29yZHMubGVuZ3RoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGVsZXRlQWxsUmVjb3Jkc1JlY3Vyc2l2ZShcbiAgICBwYXJhbXM6IHtcbiAgICAgIGFwcDogQXBwSUQ7XG4gICAgICByZWNvcmRzOiBBcnJheTx7XG4gICAgICAgIGlkOiBSZWNvcmRJRDtcbiAgICAgICAgcmV2aXNpb24/OiBSZXZpc2lvbjtcbiAgICAgIH0+O1xuICAgIH0sXG4gICAgbnVtT2ZBbGxSZWNvcmRzOiBudW1iZXJcbiAgKTogUHJvbWlzZTx7fT4ge1xuICAgIGNvbnN0IENIVU5LX0xFTkdUSCA9XG4gICAgICB0aGlzLmJ1bGtSZXF1ZXN0Q2xpZW50LlJFUVVFU1RTX0xFTkdUSF9MSU1JVCAqIERFTEVURV9SRUNPUkRTX0xJTUlUO1xuICAgIGNvbnN0IHsgYXBwLCByZWNvcmRzIH0gPSBwYXJhbXM7XG4gICAgY29uc3QgcmVjb3Jkc0NodW5rID0gcmVjb3Jkcy5zbGljZSgwLCBDSFVOS19MRU5HVEgpO1xuICAgIGlmIChyZWNvcmRzQ2h1bmsubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmRlbGV0ZUFsbFJlY29yZHNXaXRoQnVsa1JlcXVlc3Qoe1xuICAgICAgICBhcHAsXG4gICAgICAgIHJlY29yZHM6IHJlY29yZHNDaHVuayxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgbmV3IEtpbnRvbmVBbGxSZWNvcmRzRXJyb3IoXG4gICAgICAgIHt9LFxuICAgICAgICByZWNvcmRzLFxuICAgICAgICBudW1PZkFsbFJlY29yZHMsXG4gICAgICAgIGUsXG4gICAgICAgIERFTEVURV9SRUNPUkRTX0xJTUlUXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kZWxldGVBbGxSZWNvcmRzUmVjdXJzaXZlKFxuICAgICAge1xuICAgICAgICBhcHAsXG4gICAgICAgIHJlY29yZHM6IHJlY29yZHMuc2xpY2UoQ0hVTktfTEVOR1RIKSxcbiAgICAgIH0sXG4gICAgICBudW1PZkFsbFJlY29yZHNcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkZWxldGVBbGxSZWNvcmRzV2l0aEJ1bGtSZXF1ZXN0KHBhcmFtczoge1xuICAgIGFwcDogQXBwSUQ7XG4gICAgcmVjb3JkczogQXJyYXk8e1xuICAgICAgaWQ6IFJlY29yZElEO1xuICAgICAgcmV2aXNpb24/OiBSZXZpc2lvbjtcbiAgICB9PjtcbiAgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHNlcGFyYXRlZFJlY29yZHMgPSB0aGlzLnNlcGFyYXRlQXJyYXlSZWN1cnNpdmUoXG4gICAgICBERUxFVEVfUkVDT1JEU19MSU1JVCxcbiAgICAgIFtdLFxuICAgICAgcGFyYW1zLnJlY29yZHNcbiAgICApO1xuICAgIGNvbnN0IHJlcXVlc3RzID0gc2VwYXJhdGVkUmVjb3Jkcy5tYXAoKHJlY29yZHMpID0+ICh7XG4gICAgICBtZXRob2Q6IFwiREVMRVRFXCIsXG4gICAgICBlbmRwb2ludE5hbWU6IFwicmVjb3Jkc1wiIGFzIGNvbnN0LFxuICAgICAgcGF5bG9hZDoge1xuICAgICAgICBhcHA6IHBhcmFtcy5hcHAsXG4gICAgICAgIGlkczogcmVjb3Jkcy5tYXAoKHJlY29yZCkgPT4gcmVjb3JkLmlkKSxcbiAgICAgICAgcmV2aXNpb25zOiByZWNvcmRzLm1hcCgocmVjb3JkKSA9PiByZWNvcmQucmV2aXNpb24pLFxuICAgICAgfSxcbiAgICB9KSk7XG4gICAgYXdhaXQgdGhpcy5idWxrUmVxdWVzdENsaWVudC5zZW5kKHsgcmVxdWVzdHMgfSk7XG4gIH1cblxuICBwcml2YXRlIHNlcGFyYXRlQXJyYXlSZWN1cnNpdmU8VD4oXG4gICAgc2l6ZTogbnVtYmVyLFxuICAgIHNlcGFyYXRlZDogVFtdW10sXG4gICAgYXJyYXk6IFRbXVxuICApOiBUW11bXSB7XG4gICAgY29uc3QgY2h1bmsgPSBhcnJheS5zbGljZSgwLCBzaXplKTtcbiAgICBpZiAoY2h1bmsubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gc2VwYXJhdGVkO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zZXBhcmF0ZUFycmF5UmVjdXJzaXZlKFxuICAgICAgc2l6ZSxcbiAgICAgIFsuLi5zZXBhcmF0ZWQsIGNodW5rXSxcbiAgICAgIGFycmF5LnNsaWNlKHNpemUpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRSZWNvcmRDb21tZW50KHBhcmFtczoge1xuICAgIGFwcDogQXBwSUQ7XG4gICAgcmVjb3JkOiBSZWNvcmRJRDtcbiAgICBjb21tZW50OiB7XG4gICAgICB0ZXh0OiBzdHJpbmc7XG4gICAgICBtZW50aW9ucz86IE1lbnRpb25bXTtcbiAgICB9O1xuICB9KTogUHJvbWlzZTx7IGlkOiBzdHJpbmcgfT4ge1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgZW5kcG9pbnROYW1lOiBcInJlY29yZC9jb21tZW50XCIsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LnBvc3QocGF0aCwgcGFyYW1zKTtcbiAgfVxuXG4gIHB1YmxpYyBkZWxldGVSZWNvcmRDb21tZW50KHBhcmFtczoge1xuICAgIGFwcDogQXBwSUQ7XG4gICAgcmVjb3JkOiBSZWNvcmRJRDtcbiAgICBjb21tZW50OiBDb21tZW50SUQ7XG4gIH0pOiBQcm9taXNlPHt9PiB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICBlbmRwb2ludE5hbWU6IFwicmVjb3JkL2NvbW1lbnRcIixcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQuZGVsZXRlKHBhdGgsIHBhcmFtcyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0UmVjb3JkQ29tbWVudHMocGFyYW1zOiB7XG4gICAgYXBwOiBBcHBJRDtcbiAgICByZWNvcmQ6IFJlY29yZElEO1xuICAgIG9yZGVyPzogXCJhc2NcIiB8IFwiZGVzY1wiO1xuICAgIG9mZnNldD86IG51bWJlcjtcbiAgICBsaW1pdD86IG51bWJlcjtcbiAgfSk6IFByb21pc2U8eyBjb21tZW50czogQ29tbWVudFtdOyBvbGRlcjogYm9vbGVhbjsgbmV3ZXI6IGJvb2xlYW4gfT4ge1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgZW5kcG9pbnROYW1lOiBcInJlY29yZC9jb21tZW50c1wiLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmNsaWVudC5nZXQocGF0aCwgcGFyYW1zKTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVSZWNvcmRBc3NpZ25lZXMocGFyYW1zOiB7XG4gICAgYXBwOiBBcHBJRDtcbiAgICBpZDogUmVjb3JkSUQ7XG4gICAgYXNzaWduZWVzOiBzdHJpbmdbXTtcbiAgICByZXZpc2lvbj86IFJldmlzaW9uO1xuICB9KTogUHJvbWlzZTx7IHJldmlzaW9uOiBzdHJpbmcgfT4ge1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgZW5kcG9pbnROYW1lOiBcInJlY29yZC9hc3NpZ25lZXNcIixcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQucHV0KHBhdGgsIHBhcmFtcyk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlUmVjb3JkU3RhdHVzKHBhcmFtczoge1xuICAgIGFjdGlvbjogc3RyaW5nO1xuICAgIGFwcDogQXBwSUQ7XG4gICAgYXNzaWduZWU/OiBzdHJpbmc7XG4gICAgaWQ6IFJlY29yZElEO1xuICAgIHJldmlzaW9uPzogUmV2aXNpb247XG4gIH0pOiBQcm9taXNlPHsgcmV2aXNpb246IHN0cmluZyB9PiB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICBlbmRwb2ludE5hbWU6IFwicmVjb3JkL3N0YXR1c1wiLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmNsaWVudC5wdXQocGF0aCwgcGFyYW1zKTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVSZWNvcmRzU3RhdHVzKHBhcmFtczoge1xuICAgIGFwcDogQXBwSUQ7XG4gICAgcmVjb3JkczogQXJyYXk8e1xuICAgICAgYWN0aW9uOiBzdHJpbmc7XG4gICAgICBhc3NpZ25lZT86IHN0cmluZztcbiAgICAgIGlkOiBSZWNvcmRJRDtcbiAgICAgIHJldmlzaW9uPzogUmV2aXNpb247XG4gICAgfT47XG4gIH0pOiBQcm9taXNlPHsgcmVjb3JkczogQXJyYXk8eyBpZDogc3RyaW5nOyByZXZpc2lvbjogc3RyaW5nIH0+IH0+IHtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgIGVuZHBvaW50TmFtZTogXCJyZWNvcmRzL3N0YXR1c1wiLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmNsaWVudC5wdXQocGF0aCwgcGFyYW1zKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZChwYXJhbXM6IHsgZW5kcG9pbnROYW1lOiBzdHJpbmcgfSkge1xuICAgIHJldHVybiBidWlsZFBhdGgoe1xuICAgICAgLi4ucGFyYW1zLFxuICAgICAgZ3Vlc3RTcGFjZUlkOiB0aGlzLmd1ZXN0U3BhY2VJZCxcbiAgICB9KTtcbiAgfVxufVxuIiwiLyogZXNsaW50LWVudiBicm93c2VyICovXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnID8gc2VsZi5Gb3JtRGF0YSA6IHdpbmRvdy5Gb3JtRGF0YTtcbiIsImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tIFwiLi4vaHR0cFwiO1xuaW1wb3J0IHsgYnVpbGRQYXRoIH0gZnJvbSBcIi4uL3VybFwiO1xuaW1wb3J0IEZvcm1EYXRhIGZyb20gXCJmb3JtLWRhdGFcIjtcbmltcG9ydCB7IHBsYXRmb3JtRGVwcyB9IGZyb20gXCIuLi9wbGF0Zm9ybVwiO1xuaW1wb3J0IHsgVW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yIH0gZnJvbSBcIi4uL3BsYXRmb3JtL1Vuc3VwcG9ydGVkUGxhdGZvcm1FcnJvclwiO1xuXG5leHBvcnQgY2xhc3MgRmlsZUNsaWVudCB7XG4gIHByaXZhdGUgY2xpZW50OiBIdHRwQ2xpZW50O1xuICBwcml2YXRlIGd1ZXN0U3BhY2VJZD86IG51bWJlciB8IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihjbGllbnQ6IEh0dHBDbGllbnQsIGd1ZXN0U3BhY2VJZD86IG51bWJlciB8IHN0cmluZykge1xuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50O1xuICAgIHRoaXMuZ3Vlc3RTcGFjZUlkID0gZ3Vlc3RTcGFjZUlkO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwbG9hZEZpbGUocGFyYW1zOiB7XG4gICAgZmlsZTogeyBuYW1lOiBzdHJpbmc7IGRhdGE6IHVua25vd24gfSB8IHsgcGF0aDogc3RyaW5nIH07XG4gIH0pOiBQcm9taXNlPHsgZmlsZUtleTogc3RyaW5nIH0+IHtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgIGVuZHBvaW50TmFtZTogXCJmaWxlXCIsXG4gICAgfSk7XG5cbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGlmIChcInBhdGhcIiBpbiBwYXJhbXMuZmlsZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyBuYW1lLCBkYXRhIH0gPSBhd2FpdCBwbGF0Zm9ybURlcHMucmVhZEZpbGVGcm9tUGF0aChcbiAgICAgICAgICBwYXJhbXMuZmlsZS5wYXRoXG4gICAgICAgICk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZChcImZpbGVcIiwgZGF0YSwgbmFtZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChlIGluc3RhbmNlb2YgVW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYHVwbG9hZEZpbGUgZG9lc24ndCBhbGxvdyB0byBhY2NlcHQgYSBmaWxlIHBhdGggaW4gJHtlLnBsYXRmb3JtfSBlbnZpcm9ubWVudC5gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHsgbmFtZSwgZGF0YSB9ID0gcGFyYW1zLmZpbGU7XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoXCJmaWxlXCIsIHBsYXRmb3JtRGVwcy5idWlsZEZvcm1EYXRhVmFsdWUoZGF0YSksIG5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jbGllbnQucG9zdERhdGEocGF0aCwgZm9ybURhdGEpO1xuICB9XG5cbiAgcHVibGljIGRvd25sb2FkRmlsZShwYXJhbXM6IHsgZmlsZUtleTogc3RyaW5nIH0pOiBQcm9taXNlPEFycmF5QnVmZmVyPiB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICBlbmRwb2ludE5hbWU6IFwiZmlsZVwiLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmNsaWVudC5nZXREYXRhKHBhdGgsIHBhcmFtcyk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQocGFyYW1zOiB7IGVuZHBvaW50TmFtZTogc3RyaW5nIH0pIHtcbiAgICByZXR1cm4gYnVpbGRQYXRoKHtcbiAgICAgIC4uLnBhcmFtcyxcbiAgICAgIGd1ZXN0U3BhY2VJZDogdGhpcy5ndWVzdFNwYWNlSWQsXG4gICAgfSk7XG4gIH1cbn1cbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKCkge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGJpbmQgPSByZXF1aXJlKCcuL2hlbHBlcnMvYmluZCcpO1xuXG4vLyB1dGlscyBpcyBhIGxpYnJhcnkgb2YgZ2VuZXJpYyBoZWxwZXIgZnVuY3Rpb25zIG5vbi1zcGVjaWZpYyB0byBheGlvc1xuXG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXksIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5KHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBBcnJheV0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIHVuZGVmaW5lZFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1VuZGVmaW5lZCh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQnVmZmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0J1ZmZlcih2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsKSAmJiB2YWwuY29uc3RydWN0b3IgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbC5jb25zdHJ1Y3RvcilcbiAgICAmJiB0eXBlb2YgdmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyID09PSAnZnVuY3Rpb24nICYmIHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcih2YWwpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyKHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBGb3JtRGF0YSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRm9ybURhdGEodmFsKSB7XG4gIHJldHVybiAodHlwZW9mIEZvcm1EYXRhICE9PSAndW5kZWZpbmVkJykgJiYgKHZhbCBpbnN0YW5jZW9mIEZvcm1EYXRhKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyVmlldyh2YWwpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKCh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnKSAmJiAoQXJyYXlCdWZmZXIuaXNWaWV3KSkge1xuICAgIHJlc3VsdCA9IEFycmF5QnVmZmVyLmlzVmlldyh2YWwpO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9ICh2YWwpICYmICh2YWwuYnVmZmVyKSAmJiAodmFsLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyaW5nXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJpbmcsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N0cmluZyh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgTnVtYmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBOdW1iZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc051bWJlcih2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdudW1iZXInO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbCkge1xuICByZXR1cm4gdmFsICE9PSBudWxsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsKSB7XG4gIGlmICh0b1N0cmluZy5jYWxsKHZhbCkgIT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWwpO1xuICByZXR1cm4gcHJvdG90eXBlID09PSBudWxsIHx8IHByb3RvdHlwZSA9PT0gT2JqZWN0LnByb3RvdHlwZTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIERhdGVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIERhdGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0RhdGUodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IERhdGVdJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0ZpbGUodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEZpbGVdJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJsb2JcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJsb2IsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Jsb2IodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEJsb2JdJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGdW5jdGlvbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJlYW1cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmVhbSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyZWFtKHZhbCkge1xuICByZXR1cm4gaXNPYmplY3QodmFsKSAmJiBpc0Z1bmN0aW9uKHZhbC5waXBlKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1VSTFNlYXJjaFBhcmFtcyh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiBVUkxTZWFyY2hQYXJhbXMgIT09ICd1bmRlZmluZWQnICYmIHZhbCBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtcztcbn1cblxuLyoqXG4gKiBUcmltIGV4Y2VzcyB3aGl0ZXNwYWNlIG9mZiB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyIFRoZSBTdHJpbmcgdG8gdHJpbVxuICogQHJldHVybnMge1N0cmluZ30gVGhlIFN0cmluZyBmcmVlZCBvZiBleGNlc3Mgd2hpdGVzcGFjZVxuICovXG5mdW5jdGlvbiB0cmltKHN0cikge1xuICByZXR1cm4gc3RyLnRyaW0gPyBzdHIudHJpbSgpIDogc3RyLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgd2UncmUgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnRcbiAqXG4gKiBUaGlzIGFsbG93cyBheGlvcyB0byBydW4gaW4gYSB3ZWIgd29ya2VyLCBhbmQgcmVhY3QtbmF0aXZlLlxuICogQm90aCBlbnZpcm9ubWVudHMgc3VwcG9ydCBYTUxIdHRwUmVxdWVzdCwgYnV0IG5vdCBmdWxseSBzdGFuZGFyZCBnbG9iYWxzLlxuICpcbiAqIHdlYiB3b3JrZXJzOlxuICogIHR5cGVvZiB3aW5kb3cgLT4gdW5kZWZpbmVkXG4gKiAgdHlwZW9mIGRvY3VtZW50IC0+IHVuZGVmaW5lZFxuICpcbiAqIHJlYWN0LW5hdGl2ZTpcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnUmVhY3ROYXRpdmUnXG4gKiBuYXRpdmVzY3JpcHRcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnTmF0aXZlU2NyaXB0JyBvciAnTlMnXG4gKi9cbmZ1bmN0aW9uIGlzU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICBpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgKG5hdmlnYXRvci5wcm9kdWN0ID09PSAnUmVhY3ROYXRpdmUnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLnByb2R1Y3QgPT09ICdOYXRpdmVTY3JpcHQnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLnByb2R1Y3QgPT09ICdOUycpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnXG4gICk7XG59XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFuIEFycmF5IG9yIGFuIE9iamVjdCBpbnZva2luZyBhIGZ1bmN0aW9uIGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgYG9iamAgaXMgYW4gQXJyYXkgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBpbmRleCwgYW5kIGNvbXBsZXRlIGFycmF5IGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgJ29iaicgaXMgYW4gT2JqZWN0IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwga2V5LCBhbmQgY29tcGxldGUgb2JqZWN0IGZvciBlYWNoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSBvYmogVGhlIG9iamVjdCB0byBpdGVyYXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGZvciBlYWNoIGl0ZW1cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaChvYmosIGZuKSB7XG4gIC8vIERvbid0IGJvdGhlciBpZiBubyB2YWx1ZSBwcm92aWRlZFxuICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRm9yY2UgYW4gYXJyYXkgaWYgbm90IGFscmVhZHkgc29tZXRoaW5nIGl0ZXJhYmxlXG4gIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAgIG9iaiA9IFtvYmpdO1xuICB9XG5cbiAgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBhcnJheSB2YWx1ZXNcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IG9iai5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2ldLCBpLCBvYmopO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgb2JqZWN0IGtleXNcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICBmbi5jYWxsKG51bGwsIG9ialtrZXldLCBrZXksIG9iaik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQWNjZXB0cyB2YXJhcmdzIGV4cGVjdGluZyBlYWNoIGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCwgdGhlblxuICogaW1tdXRhYmx5IG1lcmdlcyB0aGUgcHJvcGVydGllcyBvZiBlYWNoIG9iamVjdCBhbmQgcmV0dXJucyByZXN1bHQuXG4gKlxuICogV2hlbiBtdWx0aXBsZSBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUga2V5IHRoZSBsYXRlciBvYmplY3QgaW5cbiAqIHRoZSBhcmd1bWVudHMgbGlzdCB3aWxsIHRha2UgcHJlY2VkZW5jZS5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVzdWx0ID0gbWVyZ2Uoe2ZvbzogMTIzfSwge2ZvbzogNDU2fSk7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9vKTsgLy8gb3V0cHV0cyA0NTZcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxIE9iamVjdCB0byBtZXJnZVxuICogQHJldHVybnMge09iamVjdH0gUmVzdWx0IG9mIGFsbCBtZXJnZSBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIG1lcmdlKC8qIG9iajEsIG9iajIsIG9iajMsIC4uLiAqLykge1xuICB2YXIgcmVzdWx0ID0ge307XG4gIGZ1bmN0aW9uIGFzc2lnblZhbHVlKHZhbCwga2V5KSB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QocmVzdWx0W2tleV0pICYmIGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBtZXJnZShyZXN1bHRba2V5XSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBtZXJnZSh7fSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkodmFsKSkge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWwuc2xpY2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWw7XG4gICAgfVxuICB9XG5cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgZm9yRWFjaChhcmd1bWVudHNbaV0sIGFzc2lnblZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEV4dGVuZHMgb2JqZWN0IGEgYnkgbXV0YWJseSBhZGRpbmcgdG8gaXQgdGhlIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGEgVGhlIG9iamVjdCB0byBiZSBleHRlbmRlZFxuICogQHBhcmFtIHtPYmplY3R9IGIgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbVxuICogQHBhcmFtIHtPYmplY3R9IHRoaXNBcmcgVGhlIG9iamVjdCB0byBiaW5kIGZ1bmN0aW9uIHRvXG4gKiBAcmV0dXJuIHtPYmplY3R9IFRoZSByZXN1bHRpbmcgdmFsdWUgb2Ygb2JqZWN0IGFcbiAqL1xuZnVuY3Rpb24gZXh0ZW5kKGEsIGIsIHRoaXNBcmcpIHtcbiAgZm9yRWFjaChiLCBmdW5jdGlvbiBhc3NpZ25WYWx1ZSh2YWwsIGtleSkge1xuICAgIGlmICh0aGlzQXJnICYmIHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGFba2V5XSA9IGJpbmQodmFsLCB0aGlzQXJnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYVtrZXldID0gdmFsO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBhO1xufVxuXG4vKipcbiAqIFJlbW92ZSBieXRlIG9yZGVyIG1hcmtlci4gVGhpcyBjYXRjaGVzIEVGIEJCIEJGICh0aGUgVVRGLTggQk9NKVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IHdpdGggQk9NXG4gKiBAcmV0dXJuIHtzdHJpbmd9IGNvbnRlbnQgdmFsdWUgd2l0aG91dCBCT01cbiAqL1xuZnVuY3Rpb24gc3RyaXBCT00oY29udGVudCkge1xuICBpZiAoY29udGVudC5jaGFyQ29kZUF0KDApID09PSAweEZFRkYpIHtcbiAgICBjb250ZW50ID0gY29udGVudC5zbGljZSgxKTtcbiAgfVxuICByZXR1cm4gY29udGVudDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzQXJyYXk6IGlzQXJyYXksXG4gIGlzQXJyYXlCdWZmZXI6IGlzQXJyYXlCdWZmZXIsXG4gIGlzQnVmZmVyOiBpc0J1ZmZlcixcbiAgaXNGb3JtRGF0YTogaXNGb3JtRGF0YSxcbiAgaXNBcnJheUJ1ZmZlclZpZXc6IGlzQXJyYXlCdWZmZXJWaWV3LFxuICBpc1N0cmluZzogaXNTdHJpbmcsXG4gIGlzTnVtYmVyOiBpc051bWJlcixcbiAgaXNPYmplY3Q6IGlzT2JqZWN0LFxuICBpc1BsYWluT2JqZWN0OiBpc1BsYWluT2JqZWN0LFxuICBpc1VuZGVmaW5lZDogaXNVbmRlZmluZWQsXG4gIGlzRGF0ZTogaXNEYXRlLFxuICBpc0ZpbGU6IGlzRmlsZSxcbiAgaXNCbG9iOiBpc0Jsb2IsXG4gIGlzRnVuY3Rpb246IGlzRnVuY3Rpb24sXG4gIGlzU3RyZWFtOiBpc1N0cmVhbSxcbiAgaXNVUkxTZWFyY2hQYXJhbXM6IGlzVVJMU2VhcmNoUGFyYW1zLFxuICBpc1N0YW5kYXJkQnJvd3NlckVudjogaXNTdGFuZGFyZEJyb3dzZXJFbnYsXG4gIGZvckVhY2g6IGZvckVhY2gsXG4gIG1lcmdlOiBtZXJnZSxcbiAgZXh0ZW5kOiBleHRlbmQsXG4gIHRyaW06IHRyaW0sXG4gIHN0cmlwQk9NOiBzdHJpcEJPTVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5mdW5jdGlvbiBlbmNvZGUodmFsKSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQodmFsKS5cbiAgICByZXBsYWNlKC8lM0EvZ2ksICc6JykuXG4gICAgcmVwbGFjZSgvJTI0L2csICckJykuXG4gICAgcmVwbGFjZSgvJTJDL2dpLCAnLCcpLlxuICAgIHJlcGxhY2UoLyUyMC9nLCAnKycpLlxuICAgIHJlcGxhY2UoLyU1Qi9naSwgJ1snKS5cbiAgICByZXBsYWNlKC8lNUQvZ2ksICddJyk7XG59XG5cbi8qKlxuICogQnVpbGQgYSBVUkwgYnkgYXBwZW5kaW5nIHBhcmFtcyB0byB0aGUgZW5kXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgYmFzZSBvZiB0aGUgdXJsIChlLmcuLCBodHRwOi8vd3d3Lmdvb2dsZS5jb20pXG4gKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gVGhlIHBhcmFtcyB0byBiZSBhcHBlbmRlZFxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGZvcm1hdHRlZCB1cmxcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBidWlsZFVSTCh1cmwsIHBhcmFtcywgcGFyYW1zU2VyaWFsaXplcikge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgaWYgKCFwYXJhbXMpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgdmFyIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIGlmIChwYXJhbXNTZXJpYWxpemVyKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcmFtc1NlcmlhbGl6ZXIocGFyYW1zKTtcbiAgfSBlbHNlIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMpKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcmFtcy50b1N0cmluZygpO1xuICB9IGVsc2Uge1xuICAgIHZhciBwYXJ0cyA9IFtdO1xuXG4gICAgdXRpbHMuZm9yRWFjaChwYXJhbXMsIGZ1bmN0aW9uIHNlcmlhbGl6ZSh2YWwsIGtleSkge1xuICAgICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh1dGlscy5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAga2V5ID0ga2V5ICsgJ1tdJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbCA9IFt2YWxdO1xuICAgICAgfVxuXG4gICAgICB1dGlscy5mb3JFYWNoKHZhbCwgZnVuY3Rpb24gcGFyc2VWYWx1ZSh2KSB7XG4gICAgICAgIGlmICh1dGlscy5pc0RhdGUodikpIHtcbiAgICAgICAgICB2ID0gdi50b0lTT1N0cmluZygpO1xuICAgICAgICB9IGVsc2UgaWYgKHV0aWxzLmlzT2JqZWN0KHYpKSB7XG4gICAgICAgICAgdiA9IEpTT04uc3RyaW5naWZ5KHYpO1xuICAgICAgICB9XG4gICAgICAgIHBhcnRzLnB1c2goZW5jb2RlKGtleSkgKyAnPScgKyBlbmNvZGUodikpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBzZXJpYWxpemVkUGFyYW1zID0gcGFydHMuam9pbignJicpO1xuICB9XG5cbiAgaWYgKHNlcmlhbGl6ZWRQYXJhbXMpIHtcbiAgICB2YXIgaGFzaG1hcmtJbmRleCA9IHVybC5pbmRleE9mKCcjJyk7XG4gICAgaWYgKGhhc2htYXJrSW5kZXggIT09IC0xKSB7XG4gICAgICB1cmwgPSB1cmwuc2xpY2UoMCwgaGFzaG1hcmtJbmRleCk7XG4gICAgfVxuXG4gICAgdXJsICs9ICh1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykgKyBzZXJpYWxpemVkUGFyYW1zO1xuICB9XG5cbiAgcmV0dXJuIHVybDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuZnVuY3Rpb24gSW50ZXJjZXB0b3JNYW5hZ2VyKCkge1xuICB0aGlzLmhhbmRsZXJzID0gW107XG59XG5cbi8qKlxuICogQWRkIGEgbmV3IGludGVyY2VwdG9yIHRvIHRoZSBzdGFja1xuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bGZpbGxlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGB0aGVuYCBmb3IgYSBgUHJvbWlzZWBcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHJlamVjdGAgZm9yIGEgYFByb21pc2VgXG4gKlxuICogQHJldHVybiB7TnVtYmVyfSBBbiBJRCB1c2VkIHRvIHJlbW92ZSBpbnRlcmNlcHRvciBsYXRlclxuICovXG5JbnRlcmNlcHRvck1hbmFnZXIucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIHVzZShmdWxmaWxsZWQsIHJlamVjdGVkLCBvcHRpb25zKSB7XG4gIHRoaXMuaGFuZGxlcnMucHVzaCh7XG4gICAgZnVsZmlsbGVkOiBmdWxmaWxsZWQsXG4gICAgcmVqZWN0ZWQ6IHJlamVjdGVkLFxuICAgIHN5bmNocm9ub3VzOiBvcHRpb25zID8gb3B0aW9ucy5zeW5jaHJvbm91cyA6IGZhbHNlLFxuICAgIHJ1bldoZW46IG9wdGlvbnMgPyBvcHRpb25zLnJ1bldoZW4gOiBudWxsXG4gIH0pO1xuICByZXR1cm4gdGhpcy5oYW5kbGVycy5sZW5ndGggLSAxO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYW4gaW50ZXJjZXB0b3IgZnJvbSB0aGUgc3RhY2tcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gaWQgVGhlIElEIHRoYXQgd2FzIHJldHVybmVkIGJ5IGB1c2VgXG4gKi9cbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUuZWplY3QgPSBmdW5jdGlvbiBlamVjdChpZCkge1xuICBpZiAodGhpcy5oYW5kbGVyc1tpZF0pIHtcbiAgICB0aGlzLmhhbmRsZXJzW2lkXSA9IG51bGw7XG4gIH1cbn07XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFsbCB0aGUgcmVnaXN0ZXJlZCBpbnRlcmNlcHRvcnNcbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBza2lwcGluZyBvdmVyIGFueVxuICogaW50ZXJjZXB0b3JzIHRoYXQgbWF5IGhhdmUgYmVjb21lIGBudWxsYCBjYWxsaW5nIGBlamVjdGAuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggaW50ZXJjZXB0b3JcbiAqL1xuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gZm9yRWFjaChmbikge1xuICB1dGlscy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsIGZ1bmN0aW9uIGZvckVhY2hIYW5kbGVyKGgpIHtcbiAgICBpZiAoaCAhPT0gbnVsbCkge1xuICAgICAgZm4oaCk7XG4gICAgfVxuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gSW50ZXJjZXB0b3JNYW5hZ2VyO1xuIiwiZXhwb3J0IGRlZmF1bHQgKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWwgOlxuICAgICAgICAgICAgdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDpcbiAgICAgICAgICAgIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB7fSk7XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbi8vIGJhc2VkIG9mZiBodHRwczovL2dpdGh1Yi5jb20vZGVmdW5jdHpvbWJpZS9ub2RlLXByb2Nlc3MvYmxvYi9tYXN0ZXIvYnJvd3Nlci5qc1xuXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbnZhciBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbnZhciBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuaWYgKHR5cGVvZiBnbG9iYWwuc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xufVxuaWYgKHR5cGVvZiBnbG9iYWwuY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xufVxuXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5leHBvcnQgZnVuY3Rpb24gbmV4dFRpY2soZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn1cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5leHBvcnQgdmFyIHRpdGxlID0gJ2Jyb3dzZXInO1xuZXhwb3J0IHZhciBwbGF0Zm9ybSA9ICdicm93c2VyJztcbmV4cG9ydCB2YXIgYnJvd3NlciA9IHRydWU7XG5leHBvcnQgdmFyIGVudiA9IHt9O1xuZXhwb3J0IHZhciBhcmd2ID0gW107XG5leHBvcnQgdmFyIHZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbmV4cG9ydCB2YXIgdmVyc2lvbnMgPSB7fTtcbmV4cG9ydCB2YXIgcmVsZWFzZSA9IHt9O1xuZXhwb3J0IHZhciBjb25maWcgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbmV4cG9ydCB2YXIgb24gPSBub29wO1xuZXhwb3J0IHZhciBhZGRMaXN0ZW5lciA9IG5vb3A7XG5leHBvcnQgdmFyIG9uY2UgPSBub29wO1xuZXhwb3J0IHZhciBvZmYgPSBub29wO1xuZXhwb3J0IHZhciByZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5leHBvcnQgdmFyIHJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5leHBvcnQgdmFyIGVtaXQgPSBub29wO1xuXG5leHBvcnQgZnVuY3Rpb24gYmluZGluZyhuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3dkICgpIHsgcmV0dXJuICcvJyB9XG5leHBvcnQgZnVuY3Rpb24gY2hkaXIgKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIHVtYXNrKCkgeyByZXR1cm4gMDsgfVxuXG4vLyBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9rdW1hdmlzL2Jyb3dzZXItcHJvY2Vzcy1ocnRpbWUvYmxvYi9tYXN0ZXIvaW5kZXguanNcbnZhciBwZXJmb3JtYW5jZSA9IGdsb2JhbC5wZXJmb3JtYW5jZSB8fCB7fVxudmFyIHBlcmZvcm1hbmNlTm93ID1cbiAgcGVyZm9ybWFuY2Uubm93ICAgICAgICB8fFxuICBwZXJmb3JtYW5jZS5tb3pOb3cgICAgIHx8XG4gIHBlcmZvcm1hbmNlLm1zTm93ICAgICAgfHxcbiAgcGVyZm9ybWFuY2Uub05vdyAgICAgICB8fFxuICBwZXJmb3JtYW5jZS53ZWJraXROb3cgIHx8XG4gIGZ1bmN0aW9uKCl7IHJldHVybiAobmV3IERhdGUoKSkuZ2V0VGltZSgpIH1cblxuLy8gZ2VuZXJhdGUgdGltZXN0YW1wIG9yIGRlbHRhXG4vLyBzZWUgaHR0cDovL25vZGVqcy5vcmcvYXBpL3Byb2Nlc3MuaHRtbCNwcm9jZXNzX3Byb2Nlc3NfaHJ0aW1lXG5leHBvcnQgZnVuY3Rpb24gaHJ0aW1lKHByZXZpb3VzVGltZXN0YW1wKXtcbiAgdmFyIGNsb2NrdGltZSA9IHBlcmZvcm1hbmNlTm93LmNhbGwocGVyZm9ybWFuY2UpKjFlLTNcbiAgdmFyIHNlY29uZHMgPSBNYXRoLmZsb29yKGNsb2NrdGltZSlcbiAgdmFyIG5hbm9zZWNvbmRzID0gTWF0aC5mbG9vcigoY2xvY2t0aW1lJTEpKjFlOSlcbiAgaWYgKHByZXZpb3VzVGltZXN0YW1wKSB7XG4gICAgc2Vjb25kcyA9IHNlY29uZHMgLSBwcmV2aW91c1RpbWVzdGFtcFswXVxuICAgIG5hbm9zZWNvbmRzID0gbmFub3NlY29uZHMgLSBwcmV2aW91c1RpbWVzdGFtcFsxXVxuICAgIGlmIChuYW5vc2Vjb25kczwwKSB7XG4gICAgICBzZWNvbmRzLS1cbiAgICAgIG5hbm9zZWNvbmRzICs9IDFlOVxuICAgIH1cbiAgfVxuICByZXR1cm4gW3NlY29uZHMsbmFub3NlY29uZHNdXG59XG5cbnZhciBzdGFydFRpbWUgPSBuZXcgRGF0ZSgpO1xuZXhwb3J0IGZ1bmN0aW9uIHVwdGltZSgpIHtcbiAgdmFyIGN1cnJlbnRUaW1lID0gbmV3IERhdGUoKTtcbiAgdmFyIGRpZiA9IGN1cnJlbnRUaW1lIC0gc3RhcnRUaW1lO1xuICByZXR1cm4gZGlmIC8gMTAwMDtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuZXh0VGljazogbmV4dFRpY2ssXG4gIHRpdGxlOiB0aXRsZSxcbiAgYnJvd3NlcjogYnJvd3NlcixcbiAgZW52OiBlbnYsXG4gIGFyZ3Y6IGFyZ3YsXG4gIHZlcnNpb246IHZlcnNpb24sXG4gIHZlcnNpb25zOiB2ZXJzaW9ucyxcbiAgb246IG9uLFxuICBhZGRMaXN0ZW5lcjogYWRkTGlzdGVuZXIsXG4gIG9uY2U6IG9uY2UsXG4gIG9mZjogb2ZmLFxuICByZW1vdmVMaXN0ZW5lcjogcmVtb3ZlTGlzdGVuZXIsXG4gIHJlbW92ZUFsbExpc3RlbmVyczogcmVtb3ZlQWxsTGlzdGVuZXJzLFxuICBlbWl0OiBlbWl0LFxuICBiaW5kaW5nOiBiaW5kaW5nLFxuICBjd2Q6IGN3ZCxcbiAgY2hkaXI6IGNoZGlyLFxuICB1bWFzazogdW1hc2ssXG4gIGhydGltZTogaHJ0aW1lLFxuICBwbGF0Zm9ybTogcGxhdGZvcm0sXG4gIHJlbGVhc2U6IHJlbGVhc2UsXG4gIGNvbmZpZzogY29uZmlnLFxuICB1cHRpbWU6IHVwdGltZVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBub3JtYWxpemVIZWFkZXJOYW1lKGhlYWRlcnMsIG5vcm1hbGl6ZWROYW1lKSB7XG4gIHV0aWxzLmZvckVhY2goaGVhZGVycywgZnVuY3Rpb24gcHJvY2Vzc0hlYWRlcih2YWx1ZSwgbmFtZSkge1xuICAgIGlmIChuYW1lICE9PSBub3JtYWxpemVkTmFtZSAmJiBuYW1lLnRvVXBwZXJDYXNlKCkgPT09IG5vcm1hbGl6ZWROYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgIGhlYWRlcnNbbm9ybWFsaXplZE5hbWVdID0gdmFsdWU7XG4gICAgICBkZWxldGUgaGVhZGVyc1tuYW1lXTtcbiAgICB9XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBVcGRhdGUgYW4gRXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIGNvbmZpZywgZXJyb3IgY29kZSwgYW5kIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSB7RXJyb3J9IGVycm9yIFRoZSBlcnJvciB0byB1cGRhdGUuXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvZGVdIFRoZSBlcnJvciBjb2RlIChmb3IgZXhhbXBsZSwgJ0VDT05OQUJPUlRFRCcpLlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXF1ZXN0XSBUaGUgcmVxdWVzdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVzcG9uc2VdIFRoZSByZXNwb25zZS5cbiAqIEByZXR1cm5zIHtFcnJvcn0gVGhlIGVycm9yLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGVuaGFuY2VFcnJvcihlcnJvciwgY29uZmlnLCBjb2RlLCByZXF1ZXN0LCByZXNwb25zZSkge1xuICBlcnJvci5jb25maWcgPSBjb25maWc7XG4gIGlmIChjb2RlKSB7XG4gICAgZXJyb3IuY29kZSA9IGNvZGU7XG4gIH1cblxuICBlcnJvci5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgZXJyb3IucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgZXJyb3IuaXNBeGlvc0Vycm9yID0gdHJ1ZTtcblxuICBlcnJvci50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIFN0YW5kYXJkXG4gICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAvLyBNaWNyb3NvZnRcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgbnVtYmVyOiB0aGlzLm51bWJlcixcbiAgICAgIC8vIE1vemlsbGFcbiAgICAgIGZpbGVOYW1lOiB0aGlzLmZpbGVOYW1lLFxuICAgICAgbGluZU51bWJlcjogdGhpcy5saW5lTnVtYmVyLFxuICAgICAgY29sdW1uTnVtYmVyOiB0aGlzLmNvbHVtbk51bWJlcixcbiAgICAgIHN0YWNrOiB0aGlzLnN0YWNrLFxuICAgICAgLy8gQXhpb3NcbiAgICAgIGNvbmZpZzogdGhpcy5jb25maWcsXG4gICAgICBjb2RlOiB0aGlzLmNvZGUsXG4gICAgICBzdGF0dXM6IHRoaXMucmVzcG9uc2UgJiYgdGhpcy5yZXNwb25zZS5zdGF0dXMgPyB0aGlzLnJlc3BvbnNlLnN0YXR1cyA6IG51bGxcbiAgICB9O1xuICB9O1xuICByZXR1cm4gZXJyb3I7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZW5oYW5jZUVycm9yID0gcmVxdWlyZSgnLi9lbmhhbmNlRXJyb3InKTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gRXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UsIGNvbmZpZywgZXJyb3IgY29kZSwgcmVxdWVzdCBhbmQgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvZGVdIFRoZSBlcnJvciBjb2RlIChmb3IgZXhhbXBsZSwgJ0VDT05OQUJPUlRFRCcpLlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXF1ZXN0XSBUaGUgcmVxdWVzdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVzcG9uc2VdIFRoZSByZXNwb25zZS5cbiAqIEByZXR1cm5zIHtFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3JlYXRlRXJyb3IobWVzc2FnZSwgY29uZmlnLCBjb2RlLCByZXF1ZXN0LCByZXNwb25zZSkge1xuICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIHJldHVybiBlbmhhbmNlRXJyb3IoZXJyb3IsIGNvbmZpZywgY29kZSwgcmVxdWVzdCwgcmVzcG9uc2UpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGNyZWF0ZUVycm9yID0gcmVxdWlyZSgnLi9jcmVhdGVFcnJvcicpO1xuXG4vKipcbiAqIFJlc29sdmUgb3IgcmVqZWN0IGEgUHJvbWlzZSBiYXNlZCBvbiByZXNwb25zZSBzdGF0dXMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVzb2x2ZSBBIGZ1bmN0aW9uIHRoYXQgcmVzb2x2ZXMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3QgQSBmdW5jdGlvbiB0aGF0IHJlamVjdHMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKSB7XG4gIHZhciB2YWxpZGF0ZVN0YXR1cyA9IHJlc3BvbnNlLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztcbiAgaWYgKCFyZXNwb25zZS5zdGF0dXMgfHwgIXZhbGlkYXRlU3RhdHVzIHx8IHZhbGlkYXRlU3RhdHVzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgfSBlbHNlIHtcbiAgICByZWplY3QoY3JlYXRlRXJyb3IoXG4gICAgICAnUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAnICsgcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgcmVzcG9uc2UuY29uZmlnLFxuICAgICAgbnVsbCxcbiAgICAgIHJlc3BvbnNlLnJlcXVlc3QsXG4gICAgICByZXNwb25zZVxuICAgICkpO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gKFxuICB1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgc3VwcG9ydCBkb2N1bWVudC5jb29raWVcbiAgICAoZnVuY3Rpb24gc3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd3JpdGU6IGZ1bmN0aW9uIHdyaXRlKG5hbWUsIHZhbHVlLCBleHBpcmVzLCBwYXRoLCBkb21haW4sIHNlY3VyZSkge1xuICAgICAgICAgIHZhciBjb29raWUgPSBbXTtcbiAgICAgICAgICBjb29raWUucHVzaChuYW1lICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKSk7XG5cbiAgICAgICAgICBpZiAodXRpbHMuaXNOdW1iZXIoZXhwaXJlcykpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdleHBpcmVzPScgKyBuZXcgRGF0ZShleHBpcmVzKS50b0dNVFN0cmluZygpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodXRpbHMuaXNTdHJpbmcocGF0aCkpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdwYXRoPScgKyBwYXRoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodXRpbHMuaXNTdHJpbmcoZG9tYWluKSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ2RvbWFpbj0nICsgZG9tYWluKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc2VjdXJlID09PSB0cnVlKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgnc2VjdXJlJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZG9jdW1lbnQuY29va2llID0gY29va2llLmpvaW4oJzsgJyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVhZDogZnVuY3Rpb24gcmVhZChuYW1lKSB7XG4gICAgICAgICAgdmFyIG1hdGNoID0gZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoJyhefDtcXFxccyopKCcgKyBuYW1lICsgJyk9KFteO10qKScpKTtcbiAgICAgICAgICByZXR1cm4gKG1hdGNoID8gZGVjb2RlVVJJQ29tcG9uZW50KG1hdGNoWzNdKSA6IG51bGwpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKG5hbWUpIHtcbiAgICAgICAgICB0aGlzLndyaXRlKG5hbWUsICcnLCBEYXRlLm5vdygpIC0gODY0MDAwMDApO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pKCkgOlxuXG4gIC8vIE5vbiBzdGFuZGFyZCBicm93c2VyIGVudiAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAgICAoZnVuY3Rpb24gbm9uU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd3JpdGU6IGZ1bmN0aW9uIHdyaXRlKCkge30sXG4gICAgICAgIHJlYWQ6IGZ1bmN0aW9uIHJlYWQoKSB7IHJldHVybiBudWxsOyB9LFxuICAgICAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSgpIHt9XG4gICAgICB9O1xuICAgIH0pKClcbik7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgVVJMIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0Fic29sdXRlVVJMKHVybCkge1xuICAvLyBBIFVSTCBpcyBjb25zaWRlcmVkIGFic29sdXRlIGlmIGl0IGJlZ2lucyB3aXRoIFwiPHNjaGVtZT46Ly9cIiBvciBcIi8vXCIgKHByb3RvY29sLXJlbGF0aXZlIFVSTCkuXG4gIC8vIFJGQyAzOTg2IGRlZmluZXMgc2NoZW1lIG5hbWUgYXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIGJlZ2lubmluZyB3aXRoIGEgbGV0dGVyIGFuZCBmb2xsb3dlZFxuICAvLyBieSBhbnkgY29tYmluYXRpb24gb2YgbGV0dGVycywgZGlnaXRzLCBwbHVzLCBwZXJpb2QsIG9yIGh5cGhlbi5cbiAgcmV0dXJuIC9eKFthLXpdW2EtelxcZFxcK1xcLVxcLl0qOik/XFwvXFwvL2kudGVzdCh1cmwpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIHNwZWNpZmllZCBVUkxzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpdmVVUkwgVGhlIHJlbGF0aXZlIFVSTFxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIFVSTFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlbGF0aXZlVVJMKSB7XG4gIHJldHVybiByZWxhdGl2ZVVSTFxuICAgID8gYmFzZVVSTC5yZXBsYWNlKC9cXC8rJC8sICcnKSArICcvJyArIHJlbGF0aXZlVVJMLnJlcGxhY2UoL15cXC8rLywgJycpXG4gICAgOiBiYXNlVVJMO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGlzQWJzb2x1dGVVUkwgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzQWJzb2x1dGVVUkwnKTtcbnZhciBjb21iaW5lVVJMcyA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvY29tYmluZVVSTHMnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIGJhc2VVUkwgd2l0aCB0aGUgcmVxdWVzdGVkVVJMLFxuICogb25seSB3aGVuIHRoZSByZXF1ZXN0ZWRVUkwgaXMgbm90IGFscmVhZHkgYW4gYWJzb2x1dGUgVVJMLlxuICogSWYgdGhlIHJlcXVlc3RVUkwgaXMgYWJzb2x1dGUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcmVxdWVzdGVkVVJMIHVudG91Y2hlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZXF1ZXN0ZWRVUkwgQWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGNvbWJpbmVcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBmdWxsIHBhdGhcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBidWlsZEZ1bGxQYXRoKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCkge1xuICBpZiAoYmFzZVVSTCAmJiAhaXNBYnNvbHV0ZVVSTChyZXF1ZXN0ZWRVUkwpKSB7XG4gICAgcmV0dXJuIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCk7XG4gIH1cbiAgcmV0dXJuIHJlcXVlc3RlZFVSTDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuLy8gSGVhZGVycyB3aG9zZSBkdXBsaWNhdGVzIGFyZSBpZ25vcmVkIGJ5IG5vZGVcbi8vIGMuZi4gaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9odHRwLmh0bWwjaHR0cF9tZXNzYWdlX2hlYWRlcnNcbnZhciBpZ25vcmVEdXBsaWNhdGVPZiA9IFtcbiAgJ2FnZScsICdhdXRob3JpemF0aW9uJywgJ2NvbnRlbnQtbGVuZ3RoJywgJ2NvbnRlbnQtdHlwZScsICdldGFnJyxcbiAgJ2V4cGlyZXMnLCAnZnJvbScsICdob3N0JywgJ2lmLW1vZGlmaWVkLXNpbmNlJywgJ2lmLXVubW9kaWZpZWQtc2luY2UnLFxuICAnbGFzdC1tb2RpZmllZCcsICdsb2NhdGlvbicsICdtYXgtZm9yd2FyZHMnLCAncHJveHktYXV0aG9yaXphdGlvbicsXG4gICdyZWZlcmVyJywgJ3JldHJ5LWFmdGVyJywgJ3VzZXItYWdlbnQnXG5dO1xuXG4vKipcbiAqIFBhcnNlIGhlYWRlcnMgaW50byBhbiBvYmplY3RcbiAqXG4gKiBgYGBcbiAqIERhdGU6IFdlZCwgMjcgQXVnIDIwMTQgMDg6NTg6NDkgR01UXG4gKiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cbiAqIENvbm5lY3Rpb246IGtlZXAtYWxpdmVcbiAqIFRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaGVhZGVycyBIZWFkZXJzIG5lZWRpbmcgdG8gYmUgcGFyc2VkXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBIZWFkZXJzIHBhcnNlZCBpbnRvIGFuIG9iamVjdFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHBhcnNlSGVhZGVycyhoZWFkZXJzKSB7XG4gIHZhciBwYXJzZWQgPSB7fTtcbiAgdmFyIGtleTtcbiAgdmFyIHZhbDtcbiAgdmFyIGk7XG5cbiAgaWYgKCFoZWFkZXJzKSB7IHJldHVybiBwYXJzZWQ7IH1cblxuICB1dGlscy5mb3JFYWNoKGhlYWRlcnMuc3BsaXQoJ1xcbicpLCBmdW5jdGlvbiBwYXJzZXIobGluZSkge1xuICAgIGkgPSBsaW5lLmluZGV4T2YoJzonKTtcbiAgICBrZXkgPSB1dGlscy50cmltKGxpbmUuc3Vic3RyKDAsIGkpKS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhbCA9IHV0aWxzLnRyaW0obGluZS5zdWJzdHIoaSArIDEpKTtcblxuICAgIGlmIChrZXkpIHtcbiAgICAgIGlmIChwYXJzZWRba2V5XSAmJiBpZ25vcmVEdXBsaWNhdGVPZi5pbmRleE9mKGtleSkgPj0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoa2V5ID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgICAgcGFyc2VkW2tleV0gPSAocGFyc2VkW2tleV0gPyBwYXJzZWRba2V5XSA6IFtdKS5jb25jYXQoW3ZhbF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyc2VkW2tleV0gPSBwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldICsgJywgJyArIHZhbCA6IHZhbDtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gKFxuICB1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgaGF2ZSBmdWxsIHN1cHBvcnQgb2YgdGhlIEFQSXMgbmVlZGVkIHRvIHRlc3RcbiAgLy8gd2hldGhlciB0aGUgcmVxdWVzdCBVUkwgaXMgb2YgdGhlIHNhbWUgb3JpZ2luIGFzIGN1cnJlbnQgbG9jYXRpb24uXG4gICAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHZhciBtc2llID0gLyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICAgIHZhciB1cmxQYXJzaW5nTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgIHZhciBvcmlnaW5VUkw7XG5cbiAgICAgIC8qKlxuICAgICogUGFyc2UgYSBVUkwgdG8gZGlzY292ZXIgaXQncyBjb21wb25lbnRzXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHVybCBUaGUgVVJMIHRvIGJlIHBhcnNlZFxuICAgICogQHJldHVybnMge09iamVjdH1cbiAgICAqL1xuICAgICAgZnVuY3Rpb24gcmVzb2x2ZVVSTCh1cmwpIHtcbiAgICAgICAgdmFyIGhyZWYgPSB1cmw7XG5cbiAgICAgICAgaWYgKG1zaWUpIHtcbiAgICAgICAgLy8gSUUgbmVlZHMgYXR0cmlidXRlIHNldCB0d2ljZSB0byBub3JtYWxpemUgcHJvcGVydGllc1xuICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuICAgICAgICAgIGhyZWYgPSB1cmxQYXJzaW5nTm9kZS5ocmVmO1xuICAgICAgICB9XG5cbiAgICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG5cbiAgICAgICAgLy8gdXJsUGFyc2luZ05vZGUgcHJvdmlkZXMgdGhlIFVybFV0aWxzIGludGVyZmFjZSAtIGh0dHA6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmx1dGlsc1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGhyZWY6IHVybFBhcnNpbmdOb2RlLmhyZWYsXG4gICAgICAgICAgcHJvdG9jb2w6IHVybFBhcnNpbmdOb2RlLnByb3RvY29sID8gdXJsUGFyc2luZ05vZGUucHJvdG9jb2wucmVwbGFjZSgvOiQvLCAnJykgOiAnJyxcbiAgICAgICAgICBob3N0OiB1cmxQYXJzaW5nTm9kZS5ob3N0LFxuICAgICAgICAgIHNlYXJjaDogdXJsUGFyc2luZ05vZGUuc2VhcmNoID8gdXJsUGFyc2luZ05vZGUuc2VhcmNoLnJlcGxhY2UoL15cXD8vLCAnJykgOiAnJyxcbiAgICAgICAgICBoYXNoOiB1cmxQYXJzaW5nTm9kZS5oYXNoID8gdXJsUGFyc2luZ05vZGUuaGFzaC5yZXBsYWNlKC9eIy8sICcnKSA6ICcnLFxuICAgICAgICAgIGhvc3RuYW1lOiB1cmxQYXJzaW5nTm9kZS5ob3N0bmFtZSxcbiAgICAgICAgICBwb3J0OiB1cmxQYXJzaW5nTm9kZS5wb3J0LFxuICAgICAgICAgIHBhdGhuYW1lOiAodXJsUGFyc2luZ05vZGUucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpID9cbiAgICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lIDpcbiAgICAgICAgICAgICcvJyArIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIG9yaWdpblVSTCA9IHJlc29sdmVVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuXG4gICAgICAvKipcbiAgICAqIERldGVybWluZSBpZiBhIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luIGFzIHRoZSBjdXJyZW50IGxvY2F0aW9uXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHJlcXVlc3RVUkwgVGhlIFVSTCB0byB0ZXN0XG4gICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiwgb3RoZXJ3aXNlIGZhbHNlXG4gICAgKi9cbiAgICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4ocmVxdWVzdFVSTCkge1xuICAgICAgICB2YXIgcGFyc2VkID0gKHV0aWxzLmlzU3RyaW5nKHJlcXVlc3RVUkwpKSA/IHJlc29sdmVVUkwocmVxdWVzdFVSTCkgOiByZXF1ZXN0VVJMO1xuICAgICAgICByZXR1cm4gKHBhcnNlZC5wcm90b2NvbCA9PT0gb3JpZ2luVVJMLnByb3RvY29sICYmXG4gICAgICAgICAgICBwYXJzZWQuaG9zdCA9PT0gb3JpZ2luVVJMLmhvc3QpO1xuICAgICAgfTtcbiAgICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnZzICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAgIChmdW5jdGlvbiBub25TdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH07XG4gICAgfSkoKVxuKTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBBIGBDYW5jZWxgIGlzIGFuIG9iamVjdCB0aGF0IGlzIHRocm93biB3aGVuIGFuIG9wZXJhdGlvbiBpcyBjYW5jZWxlZC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSB7c3RyaW5nPX0gbWVzc2FnZSBUaGUgbWVzc2FnZS5cbiAqL1xuZnVuY3Rpb24gQ2FuY2VsKG1lc3NhZ2UpIHtcbiAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbn1cblxuQ2FuY2VsLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gJ0NhbmNlbCcgKyAodGhpcy5tZXNzYWdlID8gJzogJyArIHRoaXMubWVzc2FnZSA6ICcnKTtcbn07XG5cbkNhbmNlbC5wcm90b3R5cGUuX19DQU5DRUxfXyA9IHRydWU7XG5cbm1vZHVsZS5leHBvcnRzID0gQ2FuY2VsO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgc2V0dGxlID0gcmVxdWlyZSgnLi8uLi9jb3JlL3NldHRsZScpO1xudmFyIGNvb2tpZXMgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvY29va2llcycpO1xudmFyIGJ1aWxkVVJMID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2J1aWxkVVJMJyk7XG52YXIgYnVpbGRGdWxsUGF0aCA9IHJlcXVpcmUoJy4uL2NvcmUvYnVpbGRGdWxsUGF0aCcpO1xudmFyIHBhcnNlSGVhZGVycyA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9wYXJzZUhlYWRlcnMnKTtcbnZhciBpc1VSTFNhbWVPcmlnaW4gPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luJyk7XG52YXIgY3JlYXRlRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL2NyZWF0ZUVycm9yJyk7XG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuLi9kZWZhdWx0cycpO1xudmFyIENhbmNlbCA9IHJlcXVpcmUoJy4uL2NhbmNlbC9DYW5jZWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB4aHJBZGFwdGVyKGNvbmZpZykge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZGlzcGF0Y2hYaHJSZXF1ZXN0KHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciByZXF1ZXN0RGF0YSA9IGNvbmZpZy5kYXRhO1xuICAgIHZhciByZXF1ZXN0SGVhZGVycyA9IGNvbmZpZy5oZWFkZXJzO1xuICAgIHZhciByZXNwb25zZVR5cGUgPSBjb25maWcucmVzcG9uc2VUeXBlO1xuICAgIHZhciBvbkNhbmNlbGVkO1xuICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShvbkNhbmNlbGVkKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgY29uZmlnLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKHJlcXVlc3REYXRhKSkge1xuICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzWydDb250ZW50LVR5cGUnXTsgLy8gTGV0IHRoZSBicm93c2VyIHNldCBpdFxuICAgIH1cblxuICAgIHZhciByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gICAgaWYgKGNvbmZpZy5hdXRoKSB7XG4gICAgICB2YXIgdXNlcm5hbWUgPSBjb25maWcuYXV0aC51c2VybmFtZSB8fCAnJztcbiAgICAgIHZhciBwYXNzd29yZCA9IGNvbmZpZy5hdXRoLnBhc3N3b3JkID8gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGNvbmZpZy5hdXRoLnBhc3N3b3JkKSkgOiAnJztcbiAgICAgIHJlcXVlc3RIZWFkZXJzLkF1dGhvcml6YXRpb24gPSAnQmFzaWMgJyArIGJ0b2EodXNlcm5hbWUgKyAnOicgKyBwYXNzd29yZCk7XG4gICAgfVxuXG4gICAgdmFyIGZ1bGxQYXRoID0gYnVpbGRGdWxsUGF0aChjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCk7XG4gICAgcmVxdWVzdC5vcGVuKGNvbmZpZy5tZXRob2QudG9VcHBlckNhc2UoKSwgYnVpbGRVUkwoZnVsbFBhdGgsIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKSwgdHJ1ZSk7XG5cbiAgICAvLyBTZXQgdGhlIHJlcXVlc3QgdGltZW91dCBpbiBNU1xuICAgIHJlcXVlc3QudGltZW91dCA9IGNvbmZpZy50aW1lb3V0O1xuXG4gICAgZnVuY3Rpb24gb25sb2FkZW5kKCkge1xuICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIFByZXBhcmUgdGhlIHJlc3BvbnNlXG4gICAgICB2YXIgcmVzcG9uc2VIZWFkZXJzID0gJ2dldEFsbFJlc3BvbnNlSGVhZGVycycgaW4gcmVxdWVzdCA/IHBhcnNlSGVhZGVycyhyZXF1ZXN0LmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSA6IG51bGw7XG4gICAgICB2YXIgcmVzcG9uc2VEYXRhID0gIXJlc3BvbnNlVHlwZSB8fCByZXNwb25zZVR5cGUgPT09ICd0ZXh0JyB8fCAgcmVzcG9uc2VUeXBlID09PSAnanNvbicgP1xuICAgICAgICByZXF1ZXN0LnJlc3BvbnNlVGV4dCA6IHJlcXVlc3QucmVzcG9uc2U7XG4gICAgICB2YXIgcmVzcG9uc2UgPSB7XG4gICAgICAgIGRhdGE6IHJlc3BvbnNlRGF0YSxcbiAgICAgICAgc3RhdHVzOiByZXF1ZXN0LnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogcmVxdWVzdC5zdGF0dXNUZXh0LFxuICAgICAgICBoZWFkZXJzOiByZXNwb25zZUhlYWRlcnMsXG4gICAgICAgIGNvbmZpZzogY29uZmlnLFxuICAgICAgICByZXF1ZXN0OiByZXF1ZXN0XG4gICAgICB9O1xuXG4gICAgICBzZXR0bGUoZnVuY3Rpb24gX3Jlc29sdmUodmFsdWUpIHtcbiAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0sIGZ1bmN0aW9uIF9yZWplY3QoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LCByZXNwb25zZSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICgnb25sb2FkZW5kJyBpbiByZXF1ZXN0KSB7XG4gICAgICAvLyBVc2Ugb25sb2FkZW5kIGlmIGF2YWlsYWJsZVxuICAgICAgcmVxdWVzdC5vbmxvYWRlbmQgPSBvbmxvYWRlbmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIExpc3RlbiBmb3IgcmVhZHkgc3RhdGUgdG8gZW11bGF0ZSBvbmxvYWRlbmRcbiAgICAgIHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gaGFuZGxlTG9hZCgpIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0IHx8IHJlcXVlc3QucmVhZHlTdGF0ZSAhPT0gNCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSByZXF1ZXN0IGVycm9yZWQgb3V0IGFuZCB3ZSBkaWRuJ3QgZ2V0IGEgcmVzcG9uc2UsIHRoaXMgd2lsbCBiZVxuICAgICAgICAvLyBoYW5kbGVkIGJ5IG9uZXJyb3IgaW5zdGVhZFxuICAgICAgICAvLyBXaXRoIG9uZSBleGNlcHRpb246IHJlcXVlc3QgdGhhdCB1c2luZyBmaWxlOiBwcm90b2NvbCwgbW9zdCBicm93c2Vyc1xuICAgICAgICAvLyB3aWxsIHJldHVybiBzdGF0dXMgYXMgMCBldmVuIHRob3VnaCBpdCdzIGEgc3VjY2Vzc2Z1bCByZXF1ZXN0XG4gICAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyA9PT0gMCAmJiAhKHJlcXVlc3QucmVzcG9uc2VVUkwgJiYgcmVxdWVzdC5yZXNwb25zZVVSTC5pbmRleE9mKCdmaWxlOicpID09PSAwKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyByZWFkeXN0YXRlIGhhbmRsZXIgaXMgY2FsbGluZyBiZWZvcmUgb25lcnJvciBvciBvbnRpbWVvdXQgaGFuZGxlcnMsXG4gICAgICAgIC8vIHNvIHdlIHNob3VsZCBjYWxsIG9ubG9hZGVuZCBvbiB0aGUgbmV4dCAndGljaydcbiAgICAgICAgc2V0VGltZW91dChvbmxvYWRlbmQpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgYnJvd3NlciByZXF1ZXN0IGNhbmNlbGxhdGlvbiAoYXMgb3Bwb3NlZCB0byBhIG1hbnVhbCBjYW5jZWxsYXRpb24pXG4gICAgcmVxdWVzdC5vbmFib3J0ID0gZnVuY3Rpb24gaGFuZGxlQWJvcnQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZWplY3QoY3JlYXRlRXJyb3IoJ1JlcXVlc3QgYWJvcnRlZCcsIGNvbmZpZywgJ0VDT05OQUJPUlRFRCcsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSBsb3cgbGV2ZWwgbmV0d29yayBlcnJvcnNcbiAgICByZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbiBoYW5kbGVFcnJvcigpIHtcbiAgICAgIC8vIFJlYWwgZXJyb3JzIGFyZSBoaWRkZW4gZnJvbSB1cyBieSB0aGUgYnJvd3NlclxuICAgICAgLy8gb25lcnJvciBzaG91bGQgb25seSBmaXJlIGlmIGl0J3MgYSBuZXR3b3JrIGVycm9yXG4gICAgICByZWplY3QoY3JlYXRlRXJyb3IoJ05ldHdvcmsgRXJyb3InLCBjb25maWcsIG51bGwsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSB0aW1lb3V0XG4gICAgcmVxdWVzdC5vbnRpbWVvdXQgPSBmdW5jdGlvbiBoYW5kbGVUaW1lb3V0KCkge1xuICAgICAgdmFyIHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBjb25maWcudGltZW91dCA/ICd0aW1lb3V0IG9mICcgKyBjb25maWcudGltZW91dCArICdtcyBleGNlZWRlZCcgOiAndGltZW91dCBleGNlZWRlZCc7XG4gICAgICB2YXIgdHJhbnNpdGlvbmFsID0gY29uZmlnLnRyYW5zaXRpb25hbCB8fCBkZWZhdWx0cy50cmFuc2l0aW9uYWw7XG4gICAgICBpZiAoY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSA9IGNvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlO1xuICAgICAgfVxuICAgICAgcmVqZWN0KGNyZWF0ZUVycm9yKFxuICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHRyYW5zaXRpb25hbC5jbGFyaWZ5VGltZW91dEVycm9yID8gJ0VUSU1FRE9VVCcgOiAnRUNPTk5BQk9SVEVEJyxcbiAgICAgICAgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgLy8gVGhpcyBpcyBvbmx5IGRvbmUgaWYgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gICAgLy8gU3BlY2lmaWNhbGx5IG5vdCBpZiB3ZSdyZSBpbiBhIHdlYiB3b3JrZXIsIG9yIHJlYWN0LW5hdGl2ZS5cbiAgICBpZiAodXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSkge1xuICAgICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgICB2YXIgeHNyZlZhbHVlID0gKGNvbmZpZy53aXRoQ3JlZGVudGlhbHMgfHwgaXNVUkxTYW1lT3JpZ2luKGZ1bGxQYXRoKSkgJiYgY29uZmlnLnhzcmZDb29raWVOYW1lID9cbiAgICAgICAgY29va2llcy5yZWFkKGNvbmZpZy54c3JmQ29va2llTmFtZSkgOlxuICAgICAgICB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICh4c3JmVmFsdWUpIHtcbiAgICAgICAgcmVxdWVzdEhlYWRlcnNbY29uZmlnLnhzcmZIZWFkZXJOYW1lXSA9IHhzcmZWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgaGVhZGVycyB0byB0aGUgcmVxdWVzdFxuICAgIGlmICgnc2V0UmVxdWVzdEhlYWRlcicgaW4gcmVxdWVzdCkge1xuICAgICAgdXRpbHMuZm9yRWFjaChyZXF1ZXN0SGVhZGVycywgZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcih2YWwsIGtleSkge1xuICAgICAgICBpZiAodHlwZW9mIHJlcXVlc3REYXRhID09PSAndW5kZWZpbmVkJyAmJiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtdHlwZScpIHtcbiAgICAgICAgICAvLyBSZW1vdmUgQ29udGVudC1UeXBlIGlmIGRhdGEgaXMgdW5kZWZpbmVkXG4gICAgICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzW2tleV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT3RoZXJ3aXNlIGFkZCBoZWFkZXIgdG8gdGhlIHJlcXVlc3RcbiAgICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgd2l0aENyZWRlbnRpYWxzIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcud2l0aENyZWRlbnRpYWxzKSkge1xuICAgICAgcmVxdWVzdC53aXRoQ3JlZGVudGlhbHMgPSAhIWNvbmZpZy53aXRoQ3JlZGVudGlhbHM7XG4gICAgfVxuXG4gICAgLy8gQWRkIHJlc3BvbnNlVHlwZSB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmIChyZXNwb25zZVR5cGUgJiYgcmVzcG9uc2VUeXBlICE9PSAnanNvbicpIHtcbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgcHJvZ3Jlc3MgaWYgbmVlZGVkXG4gICAgaWYgKHR5cGVvZiBjb25maWcub25Eb3dubG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgY29uZmlnLm9uRG93bmxvYWRQcm9ncmVzcyk7XG4gICAgfVxuXG4gICAgLy8gTm90IGFsbCBicm93c2VycyBzdXBwb3J0IHVwbG9hZCBldmVudHNcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5vblVwbG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nICYmIHJlcXVlc3QudXBsb2FkKSB7XG4gICAgICByZXF1ZXN0LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGNvbmZpZy5vblVwbG9hZFByb2dyZXNzKTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuIHx8IGNvbmZpZy5zaWduYWwpIHtcbiAgICAgIC8vIEhhbmRsZSBjYW5jZWxsYXRpb25cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICBvbkNhbmNlbGVkID0gZnVuY3Rpb24oY2FuY2VsKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoIWNhbmNlbCB8fCAoY2FuY2VsICYmIGNhbmNlbC50eXBlKSA/IG5ldyBDYW5jZWwoJ2NhbmNlbGVkJykgOiBjYW5jZWwpO1xuICAgICAgICByZXF1ZXN0LmFib3J0KCk7XG4gICAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgICAgfTtcblxuICAgICAgY29uZmlnLmNhbmNlbFRva2VuICYmIGNvbmZpZy5jYW5jZWxUb2tlbi5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG4gICAgICBpZiAoY29uZmlnLnNpZ25hbCkge1xuICAgICAgICBjb25maWcuc2lnbmFsLmFib3J0ZWQgPyBvbkNhbmNlbGVkKCkgOiBjb25maWcuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25DYW5jZWxlZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFyZXF1ZXN0RGF0YSkge1xuICAgICAgcmVxdWVzdERhdGEgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIFNlbmQgdGhlIHJlcXVlc3RcbiAgICByZXF1ZXN0LnNlbmQocmVxdWVzdERhdGEpO1xuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBub3JtYWxpemVIZWFkZXJOYW1lID0gcmVxdWlyZSgnLi9oZWxwZXJzL25vcm1hbGl6ZUhlYWRlck5hbWUnKTtcbnZhciBlbmhhbmNlRXJyb3IgPSByZXF1aXJlKCcuL2NvcmUvZW5oYW5jZUVycm9yJyk7XG5cbnZhciBERUZBVUxUX0NPTlRFTlRfVFlQRSA9IHtcbiAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXG59O1xuXG5mdW5jdGlvbiBzZXRDb250ZW50VHlwZUlmVW5zZXQoaGVhZGVycywgdmFsdWUpIHtcbiAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChoZWFkZXJzKSAmJiB1dGlscy5pc1VuZGVmaW5lZChoZWFkZXJzWydDb250ZW50LVR5cGUnXSkpIHtcbiAgICBoZWFkZXJzWydDb250ZW50LVR5cGUnXSA9IHZhbHVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRBZGFwdGVyKCkge1xuICB2YXIgYWRhcHRlcjtcbiAgaWYgKHR5cGVvZiBYTUxIdHRwUmVxdWVzdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBGb3IgYnJvd3NlcnMgdXNlIFhIUiBhZGFwdGVyXG4gICAgYWRhcHRlciA9IHJlcXVpcmUoJy4vYWRhcHRlcnMveGhyJyk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChwcm9jZXNzKSA9PT0gJ1tvYmplY3QgcHJvY2Vzc10nKSB7XG4gICAgLy8gRm9yIG5vZGUgdXNlIEhUVFAgYWRhcHRlclxuICAgIGFkYXB0ZXIgPSByZXF1aXJlKCcuL2FkYXB0ZXJzL2h0dHAnKTtcbiAgfVxuICByZXR1cm4gYWRhcHRlcjtcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5U2FmZWx5KHJhd1ZhbHVlLCBwYXJzZXIsIGVuY29kZXIpIHtcbiAgaWYgKHV0aWxzLmlzU3RyaW5nKHJhd1ZhbHVlKSkge1xuICAgIHRyeSB7XG4gICAgICAocGFyc2VyIHx8IEpTT04ucGFyc2UpKHJhd1ZhbHVlKTtcbiAgICAgIHJldHVybiB1dGlscy50cmltKHJhd1ZhbHVlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZS5uYW1lICE9PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChlbmNvZGVyIHx8IEpTT04uc3RyaW5naWZ5KShyYXdWYWx1ZSk7XG59XG5cbnZhciBkZWZhdWx0cyA9IHtcblxuICB0cmFuc2l0aW9uYWw6IHtcbiAgICBzaWxlbnRKU09OUGFyc2luZzogdHJ1ZSxcbiAgICBmb3JjZWRKU09OUGFyc2luZzogdHJ1ZSxcbiAgICBjbGFyaWZ5VGltZW91dEVycm9yOiBmYWxzZVxuICB9LFxuXG4gIGFkYXB0ZXI6IGdldERlZmF1bHRBZGFwdGVyKCksXG5cbiAgdHJhbnNmb3JtUmVxdWVzdDogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlcXVlc3QoZGF0YSwgaGVhZGVycykge1xuICAgIG5vcm1hbGl6ZUhlYWRlck5hbWUoaGVhZGVycywgJ0FjY2VwdCcpO1xuICAgIG5vcm1hbGl6ZUhlYWRlck5hbWUoaGVhZGVycywgJ0NvbnRlbnQtVHlwZScpO1xuXG4gICAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQXJyYXlCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc1N0cmVhbShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNGaWxlKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0Jsb2IoZGF0YSlcbiAgICApIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlclZpZXcoZGF0YSkpIHtcbiAgICAgIHJldHVybiBkYXRhLmJ1ZmZlcjtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKGRhdGEpKSB7XG4gICAgICBzZXRDb250ZW50VHlwZUlmVW5zZXQoaGVhZGVycywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04Jyk7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNPYmplY3QoZGF0YSkgfHwgKGhlYWRlcnMgJiYgaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPT09ICdhcHBsaWNhdGlvbi9qc29uJykpIHtcbiAgICAgIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCAnYXBwbGljYXRpb24vanNvbicpO1xuICAgICAgcmV0dXJuIHN0cmluZ2lmeVNhZmVseShkYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIHRyYW5zZm9ybVJlc3BvbnNlOiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVzcG9uc2UoZGF0YSkge1xuICAgIHZhciB0cmFuc2l0aW9uYWwgPSB0aGlzLnRyYW5zaXRpb25hbCB8fCBkZWZhdWx0cy50cmFuc2l0aW9uYWw7XG4gICAgdmFyIHNpbGVudEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5zaWxlbnRKU09OUGFyc2luZztcbiAgICB2YXIgZm9yY2VkSlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLmZvcmNlZEpTT05QYXJzaW5nO1xuICAgIHZhciBzdHJpY3RKU09OUGFyc2luZyA9ICFzaWxlbnRKU09OUGFyc2luZyAmJiB0aGlzLnJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nO1xuXG4gICAgaWYgKHN0cmljdEpTT05QYXJzaW5nIHx8IChmb3JjZWRKU09OUGFyc2luZyAmJiB1dGlscy5pc1N0cmluZyhkYXRhKSAmJiBkYXRhLmxlbmd0aCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoc3RyaWN0SlNPTlBhcnNpbmcpIHtcbiAgICAgICAgICBpZiAoZS5uYW1lID09PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgICAgICB0aHJvdyBlbmhhbmNlRXJyb3IoZSwgdGhpcywgJ0VfSlNPTl9QQVJTRScpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIC8qKlxuICAgKiBBIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIHRvIGFib3J0IGEgcmVxdWVzdC4gSWYgc2V0IHRvIDAgKGRlZmF1bHQpIGFcbiAgICogdGltZW91dCBpcyBub3QgY3JlYXRlZC5cbiAgICovXG4gIHRpbWVvdXQ6IDAsXG5cbiAgeHNyZkNvb2tpZU5hbWU6ICdYU1JGLVRPS0VOJyxcbiAgeHNyZkhlYWRlck5hbWU6ICdYLVhTUkYtVE9LRU4nLFxuXG4gIG1heENvbnRlbnRMZW5ndGg6IC0xLFxuICBtYXhCb2R5TGVuZ3RoOiAtMSxcblxuICB2YWxpZGF0ZVN0YXR1czogZnVuY3Rpb24gdmFsaWRhdGVTdGF0dXMoc3RhdHVzKSB7XG4gICAgcmV0dXJuIHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwO1xuICB9LFxuXG4gIGhlYWRlcnM6IHtcbiAgICBjb21tb246IHtcbiAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJ1xuICAgIH1cbiAgfVxufTtcblxudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kTm9EYXRhKG1ldGhvZCkge1xuICBkZWZhdWx0cy5oZWFkZXJzW21ldGhvZF0gPSB7fTtcbn0pO1xuXG51dGlscy5mb3JFYWNoKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZFdpdGhEYXRhKG1ldGhvZCkge1xuICBkZWZhdWx0cy5oZWFkZXJzW21ldGhvZF0gPSB1dGlscy5tZXJnZShERUZBVUxUX0NPTlRFTlRfVFlQRSk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBkZWZhdWx0cztcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnLi8uLi9kZWZhdWx0cycpO1xuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgZGF0YSBmb3IgYSByZXF1ZXN0IG9yIGEgcmVzcG9uc2VcbiAqXG4gKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IGRhdGEgVGhlIGRhdGEgdG8gYmUgdHJhbnNmb3JtZWRcbiAqIEBwYXJhbSB7QXJyYXl9IGhlYWRlcnMgVGhlIGhlYWRlcnMgZm9yIHRoZSByZXF1ZXN0IG9yIHJlc3BvbnNlXG4gKiBAcGFyYW0ge0FycmF5fEZ1bmN0aW9ufSBmbnMgQSBzaW5nbGUgZnVuY3Rpb24gb3IgQXJyYXkgb2YgZnVuY3Rpb25zXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHJlc3VsdGluZyB0cmFuc2Zvcm1lZCBkYXRhXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdHJhbnNmb3JtRGF0YShkYXRhLCBoZWFkZXJzLCBmbnMpIHtcbiAgdmFyIGNvbnRleHQgPSB0aGlzIHx8IGRlZmF1bHRzO1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgdXRpbHMuZm9yRWFjaChmbnMsIGZ1bmN0aW9uIHRyYW5zZm9ybShmbikge1xuICAgIGRhdGEgPSBmbi5jYWxsKGNvbnRleHQsIGRhdGEsIGhlYWRlcnMpO1xuICB9KTtcblxuICByZXR1cm4gZGF0YTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNDYW5jZWwodmFsdWUpIHtcbiAgcmV0dXJuICEhKHZhbHVlICYmIHZhbHVlLl9fQ0FOQ0VMX18pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIHRyYW5zZm9ybURhdGEgPSByZXF1aXJlKCcuL3RyYW5zZm9ybURhdGEnKTtcbnZhciBpc0NhbmNlbCA9IHJlcXVpcmUoJy4uL2NhbmNlbC9pc0NhbmNlbCcpO1xudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnLi4vZGVmYXVsdHMnKTtcbnZhciBDYW5jZWwgPSByZXF1aXJlKCcuLi9jYW5jZWwvQ2FuY2VsJyk7XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAqL1xuZnVuY3Rpb24gdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpIHtcbiAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgIGNvbmZpZy5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCk7XG4gIH1cblxuICBpZiAoY29uZmlnLnNpZ25hbCAmJiBjb25maWcuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICB0aHJvdyBuZXcgQ2FuY2VsKCdjYW5jZWxlZCcpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgYWRhcHRlci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRpc3BhdGNoUmVxdWVzdChjb25maWcpIHtcbiAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gIC8vIEVuc3VyZSBoZWFkZXJzIGV4aXN0XG4gIGNvbmZpZy5oZWFkZXJzID0gY29uZmlnLmhlYWRlcnMgfHwge307XG5cbiAgLy8gVHJhbnNmb3JtIHJlcXVlc3QgZGF0YVxuICBjb25maWcuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICBjb25maWcsXG4gICAgY29uZmlnLmRhdGEsXG4gICAgY29uZmlnLmhlYWRlcnMsXG4gICAgY29uZmlnLnRyYW5zZm9ybVJlcXVlc3RcbiAgKTtcblxuICAvLyBGbGF0dGVuIGhlYWRlcnNcbiAgY29uZmlnLmhlYWRlcnMgPSB1dGlscy5tZXJnZShcbiAgICBjb25maWcuaGVhZGVycy5jb21tb24gfHwge30sXG4gICAgY29uZmlnLmhlYWRlcnNbY29uZmlnLm1ldGhvZF0gfHwge30sXG4gICAgY29uZmlnLmhlYWRlcnNcbiAgKTtcblxuICB1dGlscy5mb3JFYWNoKFxuICAgIFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJywgJ2NvbW1vbiddLFxuICAgIGZ1bmN0aW9uIGNsZWFuSGVhZGVyQ29uZmlnKG1ldGhvZCkge1xuICAgICAgZGVsZXRlIGNvbmZpZy5oZWFkZXJzW21ldGhvZF07XG4gICAgfVxuICApO1xuXG4gIHZhciBhZGFwdGVyID0gY29uZmlnLmFkYXB0ZXIgfHwgZGVmYXVsdHMuYWRhcHRlcjtcblxuICByZXR1cm4gYWRhcHRlcihjb25maWcpLnRoZW4oZnVuY3Rpb24gb25BZGFwdGVyUmVzb2x1dGlvbihyZXNwb25zZSkge1xuICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgcmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgIGNvbmZpZyxcbiAgICAgIHJlc3BvbnNlLmRhdGEsXG4gICAgICByZXNwb25zZS5oZWFkZXJzLFxuICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlXG4gICAgKTtcblxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfSwgZnVuY3Rpb24gb25BZGFwdGVyUmVqZWN0aW9uKHJlYXNvbikge1xuICAgIGlmICghaXNDYW5jZWwocmVhc29uKSkge1xuICAgICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgICAgaWYgKHJlYXNvbiAmJiByZWFzb24ucmVzcG9uc2UpIHtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5kYXRhLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzLFxuICAgICAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFzb24pO1xuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQ29uZmlnLXNwZWNpZmljIG1lcmdlLWZ1bmN0aW9uIHdoaWNoIGNyZWF0ZXMgYSBuZXcgY29uZmlnLW9iamVjdFxuICogYnkgbWVyZ2luZyB0d28gY29uZmlndXJhdGlvbiBvYmplY3RzIHRvZ2V0aGVyLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcxXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMlxuICogQHJldHVybnMge09iamVjdH0gTmV3IG9iamVjdCByZXN1bHRpbmcgZnJvbSBtZXJnaW5nIGNvbmZpZzIgdG8gY29uZmlnMVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG1lcmdlQ29uZmlnKGNvbmZpZzEsIGNvbmZpZzIpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGNvbmZpZzIgPSBjb25maWcyIHx8IHt9O1xuICB2YXIgY29uZmlnID0ge307XG5cbiAgZnVuY3Rpb24gZ2V0TWVyZ2VkVmFsdWUodGFyZ2V0LCBzb3VyY2UpIHtcbiAgICBpZiAodXRpbHMuaXNQbGFpbk9iamVjdCh0YXJnZXQpICYmIHV0aWxzLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLm1lcmdlKHRhcmdldCwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLm1lcmdlKHt9LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gc291cmNlLnNsaWNlKCk7XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEZWVwUHJvcGVydGllcyhwcm9wKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcyW3Byb3BdKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKGNvbmZpZzFbcHJvcF0sIGNvbmZpZzJbcHJvcF0pO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzFbcHJvcF0pKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcxW3Byb3BdKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gdmFsdWVGcm9tQ29uZmlnMihwcm9wKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcyW3Byb3BdKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgY29uZmlnMltwcm9wXSk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIGRlZmF1bHRUb0NvbmZpZzIocHJvcCkge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnMltwcm9wXSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzJbcHJvcF0pO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzFbcHJvcF0pKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcxW3Byb3BdKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEaXJlY3RLZXlzKHByb3ApIHtcbiAgICBpZiAocHJvcCBpbiBjb25maWcyKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoY29uZmlnMVtwcm9wXSwgY29uZmlnMltwcm9wXSk7XG4gICAgfSBlbHNlIGlmIChwcm9wIGluIGNvbmZpZzEpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzFbcHJvcF0pO1xuICAgIH1cbiAgfVxuXG4gIHZhciBtZXJnZU1hcCA9IHtcbiAgICAndXJsJzogdmFsdWVGcm9tQ29uZmlnMixcbiAgICAnbWV0aG9kJzogdmFsdWVGcm9tQ29uZmlnMixcbiAgICAnZGF0YSc6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgJ2Jhc2VVUkwnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd0cmFuc2Zvcm1SZXF1ZXN0JzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAndHJhbnNmb3JtUmVzcG9uc2UnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdwYXJhbXNTZXJpYWxpemVyJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAndGltZW91dCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3RpbWVvdXRNZXNzYWdlJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnd2l0aENyZWRlbnRpYWxzJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnYWRhcHRlcic6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3Jlc3BvbnNlVHlwZSc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3hzcmZDb29raWVOYW1lJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAneHNyZkhlYWRlck5hbWUnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdvblVwbG9hZFByb2dyZXNzJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnb25Eb3dubG9hZFByb2dyZXNzJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnZGVjb21wcmVzcyc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ21heENvbnRlbnRMZW5ndGgnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdtYXhCb2R5TGVuZ3RoJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAndHJhbnNwb3J0JzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnaHR0cEFnZW50JzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnaHR0cHNBZ2VudCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ2NhbmNlbFRva2VuJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnc29ja2V0UGF0aCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3Jlc3BvbnNlRW5jb2RpbmcnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd2YWxpZGF0ZVN0YXR1cyc6IG1lcmdlRGlyZWN0S2V5c1xuICB9O1xuXG4gIHV0aWxzLmZvckVhY2goT2JqZWN0LmtleXMoY29uZmlnMSkuY29uY2F0KE9iamVjdC5rZXlzKGNvbmZpZzIpKSwgZnVuY3Rpb24gY29tcHV0ZUNvbmZpZ1ZhbHVlKHByb3ApIHtcbiAgICB2YXIgbWVyZ2UgPSBtZXJnZU1hcFtwcm9wXSB8fCBtZXJnZURlZXBQcm9wZXJ0aWVzO1xuICAgIHZhciBjb25maWdWYWx1ZSA9IG1lcmdlKHByb3ApO1xuICAgICh1dGlscy5pc1VuZGVmaW5lZChjb25maWdWYWx1ZSkgJiYgbWVyZ2UgIT09IG1lcmdlRGlyZWN0S2V5cykgfHwgKGNvbmZpZ1twcm9wXSA9IGNvbmZpZ1ZhbHVlKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbmZpZztcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcbiAgXCJ2ZXJzaW9uXCI6IFwiMC4yNC4wXCJcbn07IiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2Vudi9kYXRhJykudmVyc2lvbjtcblxudmFyIHZhbGlkYXRvcnMgPSB7fTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcblsnb2JqZWN0JywgJ2Jvb2xlYW4nLCAnbnVtYmVyJywgJ2Z1bmN0aW9uJywgJ3N0cmluZycsICdzeW1ib2wnXS5mb3JFYWNoKGZ1bmN0aW9uKHR5cGUsIGkpIHtcbiAgdmFsaWRhdG9yc1t0eXBlXSA9IGZ1bmN0aW9uIHZhbGlkYXRvcih0aGluZykge1xuICAgIHJldHVybiB0eXBlb2YgdGhpbmcgPT09IHR5cGUgfHwgJ2EnICsgKGkgPCAxID8gJ24gJyA6ICcgJykgKyB0eXBlO1xuICB9O1xufSk7XG5cbnZhciBkZXByZWNhdGVkV2FybmluZ3MgPSB7fTtcblxuLyoqXG4gKiBUcmFuc2l0aW9uYWwgb3B0aW9uIHZhbGlkYXRvclxuICogQHBhcmFtIHtmdW5jdGlvbnxib29sZWFuP30gdmFsaWRhdG9yIC0gc2V0IHRvIGZhbHNlIGlmIHRoZSB0cmFuc2l0aW9uYWwgb3B0aW9uIGhhcyBiZWVuIHJlbW92ZWRcbiAqIEBwYXJhbSB7c3RyaW5nP30gdmVyc2lvbiAtIGRlcHJlY2F0ZWQgdmVyc2lvbiAvIHJlbW92ZWQgc2luY2UgdmVyc2lvblxuICogQHBhcmFtIHtzdHJpbmc/fSBtZXNzYWdlIC0gc29tZSBtZXNzYWdlIHdpdGggYWRkaXRpb25hbCBpbmZvXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259XG4gKi9cbnZhbGlkYXRvcnMudHJhbnNpdGlvbmFsID0gZnVuY3Rpb24gdHJhbnNpdGlvbmFsKHZhbGlkYXRvciwgdmVyc2lvbiwgbWVzc2FnZSkge1xuICBmdW5jdGlvbiBmb3JtYXRNZXNzYWdlKG9wdCwgZGVzYykge1xuICAgIHJldHVybiAnW0F4aW9zIHYnICsgVkVSU0lPTiArICddIFRyYW5zaXRpb25hbCBvcHRpb24gXFwnJyArIG9wdCArICdcXCcnICsgZGVzYyArIChtZXNzYWdlID8gJy4gJyArIG1lc3NhZ2UgOiAnJyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUsIG9wdCwgb3B0cykge1xuICAgIGlmICh2YWxpZGF0b3IgPT09IGZhbHNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZm9ybWF0TWVzc2FnZShvcHQsICcgaGFzIGJlZW4gcmVtb3ZlZCcgKyAodmVyc2lvbiA/ICcgaW4gJyArIHZlcnNpb24gOiAnJykpKTtcbiAgICB9XG5cbiAgICBpZiAodmVyc2lvbiAmJiAhZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0pIHtcbiAgICAgIGRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdID0gdHJ1ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGZvcm1hdE1lc3NhZ2UoXG4gICAgICAgICAgb3B0LFxuICAgICAgICAgICcgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2JyArIHZlcnNpb24gKyAnIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlJ1xuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0b3IgPyB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0cykgOiB0cnVlO1xuICB9O1xufTtcblxuLyoqXG4gKiBBc3NlcnQgb2JqZWN0J3MgcHJvcGVydGllcyB0eXBlXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIHtvYmplY3R9IHNjaGVtYVxuICogQHBhcmFtIHtib29sZWFuP30gYWxsb3dVbmtub3duXG4gKi9cblxuZnVuY3Rpb24gYXNzZXJ0T3B0aW9ucyhvcHRpb25zLCBzY2hlbWEsIGFsbG93VW5rbm93bikge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICB9XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMob3B0aW9ucyk7XG4gIHZhciBpID0ga2V5cy5sZW5ndGg7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgdmFyIG9wdCA9IGtleXNbaV07XG4gICAgdmFyIHZhbGlkYXRvciA9IHNjaGVtYVtvcHRdO1xuICAgIGlmICh2YWxpZGF0b3IpIHtcbiAgICAgIHZhciB2YWx1ZSA9IG9wdGlvbnNbb3B0XTtcbiAgICAgIHZhciByZXN1bHQgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRpb25zKTtcbiAgICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uICcgKyBvcHQgKyAnIG11c3QgYmUgJyArIHJlc3VsdCk7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGFsbG93VW5rbm93biAhPT0gdHJ1ZSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ1Vua25vd24gb3B0aW9uICcgKyBvcHQpO1xuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYXNzZXJ0T3B0aW9uczogYXNzZXJ0T3B0aW9ucyxcbiAgdmFsaWRhdG9yczogdmFsaWRhdG9yc1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIGJ1aWxkVVJMID0gcmVxdWlyZSgnLi4vaGVscGVycy9idWlsZFVSTCcpO1xudmFyIEludGVyY2VwdG9yTWFuYWdlciA9IHJlcXVpcmUoJy4vSW50ZXJjZXB0b3JNYW5hZ2VyJyk7XG52YXIgZGlzcGF0Y2hSZXF1ZXN0ID0gcmVxdWlyZSgnLi9kaXNwYXRjaFJlcXVlc3QnKTtcbnZhciBtZXJnZUNvbmZpZyA9IHJlcXVpcmUoJy4vbWVyZ2VDb25maWcnKTtcbnZhciB2YWxpZGF0b3IgPSByZXF1aXJlKCcuLi9oZWxwZXJzL3ZhbGlkYXRvcicpO1xuXG52YXIgdmFsaWRhdG9ycyA9IHZhbGlkYXRvci52YWxpZGF0b3JzO1xuLyoqXG4gKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gQXhpb3MoaW5zdGFuY2VDb25maWcpIHtcbiAgdGhpcy5kZWZhdWx0cyA9IGluc3RhbmNlQ29uZmlnO1xuICB0aGlzLmludGVyY2VwdG9ycyA9IHtcbiAgICByZXF1ZXN0OiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKCksXG4gICAgcmVzcG9uc2U6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKVxuICB9O1xufVxuXG4vKipcbiAqIERpc3BhdGNoIGEgcmVxdWVzdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyBzcGVjaWZpYyBmb3IgdGhpcyByZXF1ZXN0IChtZXJnZWQgd2l0aCB0aGlzLmRlZmF1bHRzKVxuICovXG5BeGlvcy5wcm90b3R5cGUucmVxdWVzdCA9IGZ1bmN0aW9uIHJlcXVlc3QoY29uZmlnKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAvLyBBbGxvdyBmb3IgYXhpb3MoJ2V4YW1wbGUvdXJsJ1ssIGNvbmZpZ10pIGEgbGEgZmV0Y2ggQVBJXG4gIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgIGNvbmZpZyA9IGFyZ3VtZW50c1sxXSB8fCB7fTtcbiAgICBjb25maWcudXJsID0gYXJndW1lbnRzWzBdO1xuICB9IGVsc2Uge1xuICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgfVxuXG4gIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG5cbiAgLy8gU2V0IGNvbmZpZy5tZXRob2RcbiAgaWYgKGNvbmZpZy5tZXRob2QpIHtcbiAgICBjb25maWcubWV0aG9kID0gY29uZmlnLm1ldGhvZC50b0xvd2VyQ2FzZSgpO1xuICB9IGVsc2UgaWYgKHRoaXMuZGVmYXVsdHMubWV0aG9kKSB7XG4gICAgY29uZmlnLm1ldGhvZCA9IHRoaXMuZGVmYXVsdHMubWV0aG9kLnRvTG93ZXJDYXNlKCk7XG4gIH0gZWxzZSB7XG4gICAgY29uZmlnLm1ldGhvZCA9ICdnZXQnO1xuICB9XG5cbiAgdmFyIHRyYW5zaXRpb25hbCA9IGNvbmZpZy50cmFuc2l0aW9uYWw7XG5cbiAgaWYgKHRyYW5zaXRpb25hbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFsaWRhdG9yLmFzc2VydE9wdGlvbnModHJhbnNpdGlvbmFsLCB7XG4gICAgICBzaWxlbnRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgIGZvcmNlZEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgY2xhcmlmeVRpbWVvdXRFcnJvcjogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKVxuICAgIH0sIGZhbHNlKTtcbiAgfVxuXG4gIC8vIGZpbHRlciBvdXQgc2tpcHBlZCBpbnRlcmNlcHRvcnNcbiAgdmFyIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluID0gW107XG4gIHZhciBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSB0cnVlO1xuICB0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24gdW5zaGlmdFJlcXVlc3RJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICBpZiAodHlwZW9mIGludGVyY2VwdG9yLnJ1bldoZW4gPT09ICdmdW5jdGlvbicgJiYgaW50ZXJjZXB0b3IucnVuV2hlbihjb25maWcpID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyA9IHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvci5zeW5jaHJvbm91cztcblxuICAgIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnVuc2hpZnQoaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gIH0pO1xuXG4gIHZhciByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgdGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbiBwdXNoUmVzcG9uc2VJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ucHVzaChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgfSk7XG5cbiAgdmFyIHByb21pc2U7XG5cbiAgaWYgKCFzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMpIHtcbiAgICB2YXIgY2hhaW4gPSBbZGlzcGF0Y2hSZXF1ZXN0LCB1bmRlZmluZWRdO1xuXG4gICAgQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkoY2hhaW4sIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluKTtcbiAgICBjaGFpbiA9IGNoYWluLmNvbmNhdChyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4pO1xuXG4gICAgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShjb25maWcpO1xuICAgIHdoaWxlIChjaGFpbi5sZW5ndGgpIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oY2hhaW4uc2hpZnQoKSwgY2hhaW4uc2hpZnQoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuXG4gIHZhciBuZXdDb25maWcgPSBjb25maWc7XG4gIHdoaWxlIChyZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi5sZW5ndGgpIHtcbiAgICB2YXIgb25GdWxmaWxsZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi5zaGlmdCgpO1xuICAgIHZhciBvblJlamVjdGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4uc2hpZnQoKTtcbiAgICB0cnkge1xuICAgICAgbmV3Q29uZmlnID0gb25GdWxmaWxsZWQobmV3Q29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgb25SZWplY3RlZChlcnJvcik7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB0cnkge1xuICAgIHByb21pc2UgPSBkaXNwYXRjaFJlcXVlc3QobmV3Q29uZmlnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICB9XG5cbiAgd2hpbGUgKHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5sZW5ndGgpIHtcbiAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5zaGlmdCgpLCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4uc2hpZnQoKSk7XG4gIH1cblxuICByZXR1cm4gcHJvbWlzZTtcbn07XG5cbkF4aW9zLnByb3RvdHlwZS5nZXRVcmkgPSBmdW5jdGlvbiBnZXRVcmkoY29uZmlnKSB7XG4gIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG4gIHJldHVybiBidWlsZFVSTChjb25maWcudXJsLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcikucmVwbGFjZSgvXlxcPy8sICcnKTtcbn07XG5cbi8vIFByb3ZpZGUgYWxpYXNlcyBmb3Igc3VwcG9ydGVkIHJlcXVlc3QgbWV0aG9kc1xudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdvcHRpb25zJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICB1cmw6IHVybCxcbiAgICAgIGRhdGE6IChjb25maWcgfHwge30pLmRhdGFcbiAgICB9KSk7XG4gIH07XG59KTtcblxudXRpbHMuZm9yRWFjaChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2RXaXRoRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbih1cmwsIGRhdGEsIGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QobWVyZ2VDb25maWcoY29uZmlnIHx8IHt9LCB7XG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIHVybDogdXJsLFxuICAgICAgZGF0YTogZGF0YVxuICAgIH0pKTtcbiAgfTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEF4aW9zO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgQ2FuY2VsID0gcmVxdWlyZSgnLi9DYW5jZWwnKTtcblxuLyoqXG4gKiBBIGBDYW5jZWxUb2tlbmAgaXMgYW4gb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVxdWVzdCBjYW5jZWxsYXRpb24gb2YgYW4gb3BlcmF0aW9uLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gZXhlY3V0b3IgVGhlIGV4ZWN1dG9yIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBDYW5jZWxUb2tlbihleGVjdXRvcikge1xuICBpZiAodHlwZW9mIGV4ZWN1dG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLicpO1xuICB9XG5cbiAgdmFyIHJlc29sdmVQcm9taXNlO1xuXG4gIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIHByb21pc2VFeGVjdXRvcihyZXNvbHZlKSB7XG4gICAgcmVzb2x2ZVByb21pc2UgPSByZXNvbHZlO1xuICB9KTtcblxuICB2YXIgdG9rZW4gPSB0aGlzO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHRoaXMucHJvbWlzZS50aGVuKGZ1bmN0aW9uKGNhbmNlbCkge1xuICAgIGlmICghdG9rZW4uX2xpc3RlbmVycykgcmV0dXJuO1xuXG4gICAgdmFyIGk7XG4gICAgdmFyIGwgPSB0b2tlbi5fbGlzdGVuZXJzLmxlbmd0aDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgIHRva2VuLl9saXN0ZW5lcnNbaV0oY2FuY2VsKTtcbiAgICB9XG4gICAgdG9rZW4uX2xpc3RlbmVycyA9IG51bGw7XG4gIH0pO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHRoaXMucHJvbWlzZS50aGVuID0gZnVuY3Rpb24ob25mdWxmaWxsZWQpIHtcbiAgICB2YXIgX3Jlc29sdmU7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHtcbiAgICAgIHRva2VuLnN1YnNjcmliZShyZXNvbHZlKTtcbiAgICAgIF9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICB9KS50aGVuKG9uZnVsZmlsbGVkKTtcblxuICAgIHByb21pc2UuY2FuY2VsID0gZnVuY3Rpb24gcmVqZWN0KCkge1xuICAgICAgdG9rZW4udW5zdWJzY3JpYmUoX3Jlc29sdmUpO1xuICAgIH07XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfTtcblxuICBleGVjdXRvcihmdW5jdGlvbiBjYW5jZWwobWVzc2FnZSkge1xuICAgIGlmICh0b2tlbi5yZWFzb24pIHtcbiAgICAgIC8vIENhbmNlbGxhdGlvbiBoYXMgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZFxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRva2VuLnJlYXNvbiA9IG5ldyBDYW5jZWwobWVzc2FnZSk7XG4gICAgcmVzb2x2ZVByb21pc2UodG9rZW4ucmVhc29uKTtcbiAgfSk7XG59XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAqL1xuQ2FuY2VsVG9rZW4ucHJvdG90eXBlLnRocm93SWZSZXF1ZXN0ZWQgPSBmdW5jdGlvbiB0aHJvd0lmUmVxdWVzdGVkKCkge1xuICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICB0aHJvdyB0aGlzLnJlYXNvbjtcbiAgfVxufTtcblxuLyoqXG4gKiBTdWJzY3JpYmUgdG8gdGhlIGNhbmNlbCBzaWduYWxcbiAqL1xuXG5DYW5jZWxUb2tlbi5wcm90b3R5cGUuc3Vic2NyaWJlID0gZnVuY3Rpb24gc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gIGlmICh0aGlzLnJlYXNvbikge1xuICAgIGxpc3RlbmVyKHRoaXMucmVhc29uKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuX2xpc3RlbmVycyA9IFtsaXN0ZW5lcl07XG4gIH1cbn07XG5cbi8qKlxuICogVW5zdWJzY3JpYmUgZnJvbSB0aGUgY2FuY2VsIHNpZ25hbFxuICovXG5cbkNhbmNlbFRva2VuLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uIHVuc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gIGlmICghdGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBpbmRleCA9IHRoaXMuX2xpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcbiAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgIHRoaXMuX2xpc3RlbmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICB9XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgYSBuZXcgYENhbmNlbFRva2VuYCBhbmQgYSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCxcbiAqIGNhbmNlbHMgdGhlIGBDYW5jZWxUb2tlbmAuXG4gKi9cbkNhbmNlbFRva2VuLnNvdXJjZSA9IGZ1bmN0aW9uIHNvdXJjZSgpIHtcbiAgdmFyIGNhbmNlbDtcbiAgdmFyIHRva2VuID0gbmV3IENhbmNlbFRva2VuKGZ1bmN0aW9uIGV4ZWN1dG9yKGMpIHtcbiAgICBjYW5jZWwgPSBjO1xuICB9KTtcbiAgcmV0dXJuIHtcbiAgICB0b2tlbjogdG9rZW4sXG4gICAgY2FuY2VsOiBjYW5jZWxcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ2FuY2VsVG9rZW47XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogU3ludGFjdGljIHN1Z2FyIGZvciBpbnZva2luZyBhIGZ1bmN0aW9uIGFuZCBleHBhbmRpbmcgYW4gYXJyYXkgZm9yIGFyZ3VtZW50cy5cbiAqXG4gKiBDb21tb24gdXNlIGNhc2Ugd291bGQgYmUgdG8gdXNlIGBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHlgLlxuICpcbiAqICBgYGBqc1xuICogIGZ1bmN0aW9uIGYoeCwgeSwgeikge31cbiAqICB2YXIgYXJncyA9IFsxLCAyLCAzXTtcbiAqICBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICogIGBgYFxuICpcbiAqIFdpdGggYHNwcmVhZGAgdGhpcyBleGFtcGxlIGNhbiBiZSByZS13cml0dGVuLlxuICpcbiAqICBgYGBqc1xuICogIHNwcmVhZChmdW5jdGlvbih4LCB5LCB6KSB7fSkoWzEsIDIsIDNdKTtcbiAqICBgYGBcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNwcmVhZChjYWxsYmFjaykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcChhcnIpIHtcbiAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkobnVsbCwgYXJyKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvc1xuICpcbiAqIEBwYXJhbSB7Kn0gcGF5bG9hZCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0F4aW9zRXJyb3IocGF5bG9hZCkge1xuICByZXR1cm4gKHR5cGVvZiBwYXlsb2FkID09PSAnb2JqZWN0JykgJiYgKHBheWxvYWQuaXNBeGlvc0Vycm9yID09PSB0cnVlKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi9oZWxwZXJzL2JpbmQnKTtcbnZhciBBeGlvcyA9IHJlcXVpcmUoJy4vY29yZS9BeGlvcycpO1xudmFyIG1lcmdlQ29uZmlnID0gcmVxdWlyZSgnLi9jb3JlL21lcmdlQ29uZmlnJyk7XG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuL2RlZmF1bHRzJyk7XG5cbi8qKlxuICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGRlZmF1bHRDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqIEByZXR1cm4ge0F4aW9zfSBBIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICovXG5mdW5jdGlvbiBjcmVhdGVJbnN0YW5jZShkZWZhdWx0Q29uZmlnKSB7XG4gIHZhciBjb250ZXh0ID0gbmV3IEF4aW9zKGRlZmF1bHRDb25maWcpO1xuICB2YXIgaW5zdGFuY2UgPSBiaW5kKEF4aW9zLnByb3RvdHlwZS5yZXF1ZXN0LCBjb250ZXh0KTtcblxuICAvLyBDb3B5IGF4aW9zLnByb3RvdHlwZSB0byBpbnN0YW5jZVxuICB1dGlscy5leHRlbmQoaW5zdGFuY2UsIEF4aW9zLnByb3RvdHlwZSwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBjb250ZXh0IHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgY29udGV4dCk7XG5cbiAgLy8gRmFjdG9yeSBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlc1xuICBpbnN0YW5jZS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaW5zdGFuY2VDb25maWcpIHtcbiAgICByZXR1cm4gY3JlYXRlSW5zdGFuY2UobWVyZ2VDb25maWcoZGVmYXVsdENvbmZpZywgaW5zdGFuY2VDb25maWcpKTtcbiAgfTtcblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbi8vIENyZWF0ZSB0aGUgZGVmYXVsdCBpbnN0YW5jZSB0byBiZSBleHBvcnRlZFxudmFyIGF4aW9zID0gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdHMpO1xuXG4vLyBFeHBvc2UgQXhpb3MgY2xhc3MgdG8gYWxsb3cgY2xhc3MgaW5oZXJpdGFuY2VcbmF4aW9zLkF4aW9zID0gQXhpb3M7XG5cbi8vIEV4cG9zZSBDYW5jZWwgJiBDYW5jZWxUb2tlblxuYXhpb3MuQ2FuY2VsID0gcmVxdWlyZSgnLi9jYW5jZWwvQ2FuY2VsJyk7XG5heGlvcy5DYW5jZWxUb2tlbiA9IHJlcXVpcmUoJy4vY2FuY2VsL0NhbmNlbFRva2VuJyk7XG5heGlvcy5pc0NhbmNlbCA9IHJlcXVpcmUoJy4vY2FuY2VsL2lzQ2FuY2VsJyk7XG5heGlvcy5WRVJTSU9OID0gcmVxdWlyZSgnLi9lbnYvZGF0YScpLnZlcnNpb247XG5cbi8vIEV4cG9zZSBhbGwvc3ByZWFkXG5heGlvcy5hbGwgPSBmdW5jdGlvbiBhbGwocHJvbWlzZXMpIHtcbiAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTtcbn07XG5heGlvcy5zcHJlYWQgPSByZXF1aXJlKCcuL2hlbHBlcnMvc3ByZWFkJyk7XG5cbi8vIEV4cG9zZSBpc0F4aW9zRXJyb3JcbmF4aW9zLmlzQXhpb3NFcnJvciA9IHJlcXVpcmUoJy4vaGVscGVycy9pc0F4aW9zRXJyb3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBheGlvcztcblxuLy8gQWxsb3cgdXNlIG9mIGRlZmF1bHQgaW1wb3J0IHN5bnRheCBpbiBUeXBlU2NyaXB0XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gYXhpb3M7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL2F4aW9zJyk7IiwiaW1wb3J0IEF4aW9zIGZyb20gXCJheGlvc1wiO1xuaW1wb3J0IHtcbiAgSHR0cENsaWVudCxcbiAgUmVxdWVzdENvbmZpZ0J1aWxkZXIsXG4gIFJlcXVlc3RDb25maWcsXG4gIFJlc3BvbnNlSGFuZGxlcixcbn0gZnJvbSBcIi4vSHR0cENsaWVudEludGVyZmFjZVwiO1xuaW1wb3J0IEZvcm1EYXRhIGZyb20gXCJmb3JtLWRhdGFcIjtcblxuZXhwb3J0IGNsYXNzIEF4aW9zQ2xpZW50IGltcGxlbWVudHMgSHR0cENsaWVudCB7XG4gIHByaXZhdGUgcmVzcG9uc2VIYW5kbGVyOiBSZXNwb25zZUhhbmRsZXI7XG4gIHByaXZhdGUgcmVxdWVzdENvbmZpZ0J1aWxkZXI6IFJlcXVlc3RDb25maWdCdWlsZGVyO1xuXG4gIGNvbnN0cnVjdG9yKHtcbiAgICByZXNwb25zZUhhbmRsZXIsXG4gICAgcmVxdWVzdENvbmZpZ0J1aWxkZXIsXG4gIH06IHtcbiAgICByZXNwb25zZUhhbmRsZXI6IFJlc3BvbnNlSGFuZGxlcjtcbiAgICByZXF1ZXN0Q29uZmlnQnVpbGRlcjogUmVxdWVzdENvbmZpZ0J1aWxkZXI7XG4gIH0pIHtcbiAgICB0aGlzLnJlc3BvbnNlSGFuZGxlciA9IHJlc3BvbnNlSGFuZGxlcjtcbiAgICB0aGlzLnJlcXVlc3RDb25maWdCdWlsZGVyID0gcmVxdWVzdENvbmZpZ0J1aWxkZXI7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0PFQgZXh0ZW5kcyBvYmplY3Q+KHBhdGg6IHN0cmluZywgcGFyYW1zOiBhbnkpIHtcbiAgICBjb25zdCByZXF1ZXN0Q29uZmlnID0gYXdhaXQgdGhpcy5yZXF1ZXN0Q29uZmlnQnVpbGRlci5idWlsZChcbiAgICAgIFwiZ2V0XCIsXG4gICAgICBwYXRoLFxuICAgICAgcGFyYW1zXG4gICAgKTtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuc2VuZFJlcXVlc3QocmVxdWVzdENvbmZpZykpIGFzIFByb21pc2U8VD47XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0RGF0YShwYXRoOiBzdHJpbmcsIHBhcmFtczogYW55KSB7XG4gICAgY29uc3QgcmVxdWVzdENvbmZpZyA9IGF3YWl0IHRoaXMucmVxdWVzdENvbmZpZ0J1aWxkZXIuYnVpbGQoXG4gICAgICBcImdldFwiLFxuICAgICAgcGF0aCxcbiAgICAgIHBhcmFtcyxcbiAgICAgIHtcbiAgICAgICAgcmVzcG9uc2VUeXBlOiBcImFycmF5YnVmZmVyXCIsXG4gICAgICB9XG4gICAgKTtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuc2VuZFJlcXVlc3QocmVxdWVzdENvbmZpZykpIGFzIFByb21pc2U8QXJyYXlCdWZmZXI+O1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHBvc3Q8VCBleHRlbmRzIG9iamVjdD4ocGF0aDogc3RyaW5nLCBwYXJhbXM6IGFueSkge1xuICAgIGNvbnN0IHJlcXVlc3RDb25maWcgPSBhd2FpdCB0aGlzLnJlcXVlc3RDb25maWdCdWlsZGVyLmJ1aWxkKFxuICAgICAgXCJwb3N0XCIsXG4gICAgICBwYXRoLFxuICAgICAgcGFyYW1zXG4gICAgKTtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuc2VuZFJlcXVlc3QocmVxdWVzdENvbmZpZykpIGFzIFByb21pc2U8VD47XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcG9zdERhdGE8VCBleHRlbmRzIG9iamVjdD4ocGF0aDogc3RyaW5nLCBmb3JtRGF0YTogRm9ybURhdGEpIHtcbiAgICBjb25zdCByZXF1ZXN0Q29uZmlnID0gYXdhaXQgdGhpcy5yZXF1ZXN0Q29uZmlnQnVpbGRlci5idWlsZChcbiAgICAgIFwicG9zdFwiLFxuICAgICAgcGF0aCxcbiAgICAgIGZvcm1EYXRhXG4gICAgKTtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuc2VuZFJlcXVlc3QocmVxdWVzdENvbmZpZykpIGFzIFByb21pc2U8VD47XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcHV0PFQgZXh0ZW5kcyBvYmplY3Q+KHBhdGg6IHN0cmluZywgcGFyYW1zOiBhbnkpIHtcbiAgICBjb25zdCByZXF1ZXN0Q29uZmlnID0gYXdhaXQgdGhpcy5yZXF1ZXN0Q29uZmlnQnVpbGRlci5idWlsZChcbiAgICAgIFwicHV0XCIsXG4gICAgICBwYXRoLFxuICAgICAgcGFyYW1zXG4gICAgKTtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuc2VuZFJlcXVlc3QocmVxdWVzdENvbmZpZykpIGFzIFByb21pc2U8VD47XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVsZXRlPFQgZXh0ZW5kcyBvYmplY3Q+KHBhdGg6IHN0cmluZywgcGFyYW1zOiBhbnkpIHtcbiAgICBjb25zdCByZXF1ZXN0Q29uZmlnID0gYXdhaXQgdGhpcy5yZXF1ZXN0Q29uZmlnQnVpbGRlci5idWlsZChcbiAgICAgIFwiZGVsZXRlXCIsXG4gICAgICBwYXRoLFxuICAgICAgcGFyYW1zXG4gICAgKTtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuc2VuZFJlcXVlc3QocmVxdWVzdENvbmZpZykpIGFzIFByb21pc2U8VD47XG4gIH1cblxuICBwcml2YXRlIHNlbmRSZXF1ZXN0KHJlcXVlc3RDb25maWc6IFJlcXVlc3RDb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXNwb25zZUhhbmRsZXIuaGFuZGxlKFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5ldy1jYXBcbiAgICAgIEF4aW9zKHtcbiAgICAgICAgLi4ucmVxdWVzdENvbmZpZyxcblxuICAgICAgICBtYXhCb2R5TGVuZ3RoOiBJbmZpbml0eSxcbiAgICAgICAgbWF4Q29udGVudExlbmd0aDogSW5maW5pdHksXG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSwgYXJndW1lbnQpIHtcbiAgdmFyIG1ldGhvZCA9IFtdW01FVEhPRF9OQU1FXTtcbiAgcmV0dXJuICEhbWV0aG9kICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jYWxsLG5vLXRocm93LWxpdGVyYWwgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgICBtZXRob2QuY2FsbChudWxsLCBhcmd1bWVudCB8fCBmdW5jdGlvbiAoKSB7IHRocm93IDE7IH0sIDEpO1xuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG5cbnZhciBuYXRpdmVKb2luID0gW10uam9pbjtcblxudmFyIEVTM19TVFJJTkdTID0gSW5kZXhlZE9iamVjdCAhPSBPYmplY3Q7XG52YXIgU1RSSUNUX01FVEhPRCA9IGFycmF5TWV0aG9kSXNTdHJpY3QoJ2pvaW4nLCAnLCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmpvaW5gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuam9pblxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogRVMzX1NUUklOR1MgfHwgIVNUUklDVF9NRVRIT0QgfSwge1xuICBqb2luOiBmdW5jdGlvbiBqb2luKHNlcGFyYXRvcikge1xuICAgIHJldHVybiBuYXRpdmVKb2luLmNhbGwodG9JbmRleGVkT2JqZWN0KHRoaXMpLCBzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCA/ICcsJyA6IHNlcGFyYXRvcik7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKiBlc2xpbnQgY29tcGxleGl0eTogWzIsIDE4XSwgbWF4LXN0YXRlbWVudHM6IFsyLCAzM10gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaGFzU3ltYm9scygpIHtcblx0aWYgKHR5cGVvZiBTeW1ib2wgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAnc3ltYm9sJykgeyByZXR1cm4gdHJ1ZTsgfVxuXG5cdHZhciBvYmogPSB7fTtcblx0dmFyIHN5bSA9IFN5bWJvbCgndGVzdCcpO1xuXHR2YXIgc3ltT2JqID0gT2JqZWN0KHN5bSk7XG5cdGlmICh0eXBlb2Ygc3ltID09PSAnc3RyaW5nJykgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bSkgIT09ICdbb2JqZWN0IFN5bWJvbF0nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bU9iaikgIT09ICdbb2JqZWN0IFN5bWJvbF0nKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdC8vIHRlbXAgZGlzYWJsZWQgcGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9samhhcmIvb2JqZWN0LmFzc2lnbi9pc3N1ZXMvMTdcblx0Ly8gaWYgKHN5bSBpbnN0YW5jZW9mIFN5bWJvbCkgeyByZXR1cm4gZmFsc2U7IH1cblx0Ly8gdGVtcCBkaXNhYmxlZCBwZXIgaHR0cHM6Ly9naXRodWIuY29tL1dlYlJlZmxlY3Rpb24vZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzL2lzc3Vlcy80XG5cdC8vIGlmICghKHN5bU9iaiBpbnN0YW5jZW9mIFN5bWJvbCkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0Ly8gaWYgKHR5cGVvZiBTeW1ib2wucHJvdG90eXBlLnRvU3RyaW5nICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHQvLyBpZiAoU3RyaW5nKHN5bSkgIT09IFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzeW0pKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdHZhciBzeW1WYWwgPSA0Mjtcblx0b2JqW3N5bV0gPSBzeW1WYWw7XG5cdGZvciAoc3ltIGluIG9iaikgeyByZXR1cm4gZmFsc2U7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuXHRpZiAodHlwZW9mIE9iamVjdC5rZXlzID09PSAnZnVuY3Rpb24nICYmIE9iamVjdC5rZXlzKG9iaikubGVuZ3RoICE9PSAwKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmICh0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgPT09ICdmdW5jdGlvbicgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKS5sZW5ndGggIT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0dmFyIHN5bXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iaik7XG5cdGlmIChzeW1zLmxlbmd0aCAhPT0gMSB8fCBzeW1zWzBdICE9PSBzeW0pIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwob2JqLCBzeW0pKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmICh0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdHZhciBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIHN5bSk7XG5cdFx0aWYgKGRlc2NyaXB0b3IudmFsdWUgIT09IHN5bVZhbCB8fCBkZXNjcmlwdG9yLmVudW1lcmFibGUgIT09IHRydWUpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBvcmlnU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciBoYXNTeW1ib2xTaGFtID0gcmVxdWlyZSgnLi9zaGFtcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGhhc05hdGl2ZVN5bWJvbHMoKSB7XG5cdGlmICh0eXBlb2Ygb3JpZ1N5bWJvbCAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2wgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2Ygb3JpZ1N5bWJvbCgnZm9vJykgIT09ICdzeW1ib2wnKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIFN5bWJvbCgnYmFyJykgIT09ICdzeW1ib2wnKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdHJldHVybiBoYXNTeW1ib2xTaGFtKCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKiBlc2xpbnQgbm8taW52YWxpZC10aGlzOiAxICovXG5cbnZhciBFUlJPUl9NRVNTQUdFID0gJ0Z1bmN0aW9uLnByb3RvdHlwZS5iaW5kIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgJztcbnZhciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgZnVuY1R5cGUgPSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJpbmQodGhhdCkge1xuICAgIHZhciB0YXJnZXQgPSB0aGlzO1xuICAgIGlmICh0eXBlb2YgdGFyZ2V0ICE9PSAnZnVuY3Rpb24nIHx8IHRvU3RyLmNhbGwodGFyZ2V0KSAhPT0gZnVuY1R5cGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJPUl9NRVNTQUdFICsgdGFyZ2V0KTtcbiAgICB9XG4gICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG5cbiAgICB2YXIgYm91bmQ7XG4gICAgdmFyIGJpbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBib3VuZCkge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRhcmdldC5hcHBseShcbiAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgIGFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoT2JqZWN0KHJlc3VsdCkgPT09IHJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXQuYXBwbHkoXG4gICAgICAgICAgICAgICAgdGhhdCxcbiAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciBib3VuZExlbmd0aCA9IE1hdGgubWF4KDAsIHRhcmdldC5sZW5ndGggLSBhcmdzLmxlbmd0aCk7XG4gICAgdmFyIGJvdW5kQXJncyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm91bmRMZW5ndGg7IGkrKykge1xuICAgICAgICBib3VuZEFyZ3MucHVzaCgnJCcgKyBpKTtcbiAgICB9XG5cbiAgICBib3VuZCA9IEZ1bmN0aW9uKCdiaW5kZXInLCAncmV0dXJuIGZ1bmN0aW9uICgnICsgYm91bmRBcmdzLmpvaW4oJywnKSArICcpeyByZXR1cm4gYmluZGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTsgfScpKGJpbmRlcik7XG5cbiAgICBpZiAodGFyZ2V0LnByb3RvdHlwZSkge1xuICAgICAgICB2YXIgRW1wdHkgPSBmdW5jdGlvbiBFbXB0eSgpIHt9O1xuICAgICAgICBFbXB0eS5wcm90b3R5cGUgPSB0YXJnZXQucHJvdG90eXBlO1xuICAgICAgICBib3VuZC5wcm90b3R5cGUgPSBuZXcgRW1wdHkoKTtcbiAgICAgICAgRW1wdHkucHJvdG90eXBlID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gYm91bmQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgfHwgaW1wbGVtZW50YXRpb247XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHVuZGVmaW5lZDtcblxudmFyICRTeW50YXhFcnJvciA9IFN5bnRheEVycm9yO1xudmFyICRGdW5jdGlvbiA9IEZ1bmN0aW9uO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxudmFyIGdldEV2YWxsZWRDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChleHByZXNzaW9uU3ludGF4KSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuICRGdW5jdGlvbignXCJ1c2Ugc3RyaWN0XCI7IHJldHVybiAoJyArIGV4cHJlc3Npb25TeW50YXggKyAnKS5jb25zdHJ1Y3RvcjsnKSgpO1xuXHR9IGNhdGNoIChlKSB7fVxufTtcblxudmFyICRnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbmlmICgkZ09QRCkge1xuXHR0cnkge1xuXHRcdCRnT1BEKHt9LCAnJyk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQkZ09QRCA9IG51bGw7IC8vIHRoaXMgaXMgSUUgOCwgd2hpY2ggaGFzIGEgYnJva2VuIGdPUERcblx0fVxufVxuXG52YXIgdGhyb3dUeXBlRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG5cdHRocm93IG5ldyAkVHlwZUVycm9yKCk7XG59O1xudmFyIFRocm93VHlwZUVycm9yID0gJGdPUERcblx0PyAoZnVuY3Rpb24gKCkge1xuXHRcdHRyeSB7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zLCBuby1jYWxsZXIsIG5vLXJlc3RyaWN0ZWQtcHJvcGVydGllc1xuXHRcdFx0YXJndW1lbnRzLmNhbGxlZTsgLy8gSUUgOCBkb2VzIG5vdCB0aHJvdyBoZXJlXG5cdFx0XHRyZXR1cm4gdGhyb3dUeXBlRXJyb3I7XG5cdFx0fSBjYXRjaCAoY2FsbGVlVGhyb3dzKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHQvLyBJRSA4IHRocm93cyBvbiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGFyZ3VtZW50cywgJycpXG5cdFx0XHRcdHJldHVybiAkZ09QRChhcmd1bWVudHMsICdjYWxsZWUnKS5nZXQ7XG5cdFx0XHR9IGNhdGNoIChnT1BEdGhyb3dzKSB7XG5cdFx0XHRcdHJldHVybiB0aHJvd1R5cGVFcnJvcjtcblx0XHRcdH1cblx0XHR9XG5cdH0oKSlcblx0OiB0aHJvd1R5cGVFcnJvcjtcblxudmFyIGhhc1N5bWJvbHMgPSByZXF1aXJlKCdoYXMtc3ltYm9scycpKCk7XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5fX3Byb3RvX187IH07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cblxudmFyIG5lZWRzRXZhbCA9IHt9O1xuXG52YXIgVHlwZWRBcnJheSA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IGdldFByb3RvKFVpbnQ4QXJyYXkpO1xuXG52YXIgSU5UUklOU0lDUyA9IHtcblx0JyVBZ2dyZWdhdGVFcnJvciUnOiB0eXBlb2YgQWdncmVnYXRlRXJyb3IgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQWdncmVnYXRlRXJyb3IsXG5cdCclQXJyYXklJzogQXJyYXksXG5cdCclQXJyYXlCdWZmZXIlJzogdHlwZW9mIEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEFycmF5QnVmZmVyLFxuXHQnJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclQXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlJSc6IHVuZGVmaW5lZCxcblx0JyVBc3luY0Z1bmN0aW9uJSc6IG5lZWRzRXZhbCxcblx0JyVBc3luY0dlbmVyYXRvciUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnOiBuZWVkc0V2YWwsXG5cdCclQXRvbWljcyUnOiB0eXBlb2YgQXRvbWljcyA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBdG9taWNzLFxuXHQnJUJpZ0ludCUnOiB0eXBlb2YgQmlnSW50ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEJpZ0ludCxcblx0JyVCb29sZWFuJSc6IEJvb2xlYW4sXG5cdCclRGF0YVZpZXclJzogdHlwZW9mIERhdGFWaWV3ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IERhdGFWaWV3LFxuXHQnJURhdGUlJzogRGF0ZSxcblx0JyVkZWNvZGVVUkklJzogZGVjb2RlVVJJLFxuXHQnJWRlY29kZVVSSUNvbXBvbmVudCUnOiBkZWNvZGVVUklDb21wb25lbnQsXG5cdCclZW5jb2RlVVJJJSc6IGVuY29kZVVSSSxcblx0JyVlbmNvZGVVUklDb21wb25lbnQlJzogZW5jb2RlVVJJQ29tcG9uZW50LFxuXHQnJUVycm9yJSc6IEVycm9yLFxuXHQnJWV2YWwlJzogZXZhbCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1ldmFsXG5cdCclRXZhbEVycm9yJSc6IEV2YWxFcnJvcixcblx0JyVGbG9hdDMyQXJyYXklJzogdHlwZW9mIEZsb2F0MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGbG9hdDMyQXJyYXksXG5cdCclRmxvYXQ2NEFycmF5JSc6IHR5cGVvZiBGbG9hdDY0QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQ2NEFycmF5LFxuXHQnJUZpbmFsaXphdGlvblJlZ2lzdHJ5JSc6IHR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGaW5hbGl6YXRpb25SZWdpc3RyeSxcblx0JyVGdW5jdGlvbiUnOiAkRnVuY3Rpb24sXG5cdCclR2VuZXJhdG9yRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUludDhBcnJheSUnOiB0eXBlb2YgSW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDhBcnJheSxcblx0JyVJbnQxNkFycmF5JSc6IHR5cGVvZiBJbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDE2QXJyYXksXG5cdCclSW50MzJBcnJheSUnOiB0eXBlb2YgSW50MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBJbnQzMkFycmF5LFxuXHQnJWlzRmluaXRlJSc6IGlzRmluaXRlLFxuXHQnJWlzTmFOJSc6IGlzTmFOLFxuXHQnJUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBnZXRQcm90byhnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKSA6IHVuZGVmaW5lZCxcblx0JyVKU09OJSc6IHR5cGVvZiBKU09OID09PSAnb2JqZWN0JyA/IEpTT04gOiB1bmRlZmluZWQsXG5cdCclTWFwJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogTWFwLFxuXHQnJU1hcEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IE1hcCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclTWF0aCUnOiBNYXRoLFxuXHQnJU51bWJlciUnOiBOdW1iZXIsXG5cdCclT2JqZWN0JSc6IE9iamVjdCxcblx0JyVwYXJzZUZsb2F0JSc6IHBhcnNlRmxvYXQsXG5cdCclcGFyc2VJbnQlJzogcGFyc2VJbnQsXG5cdCclUHJvbWlzZSUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLFxuXHQnJVByb3h5JSc6IHR5cGVvZiBQcm94eSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm94eSxcblx0JyVSYW5nZUVycm9yJSc6IFJhbmdlRXJyb3IsXG5cdCclUmVmZXJlbmNlRXJyb3IlJzogUmVmZXJlbmNlRXJyb3IsXG5cdCclUmVmbGVjdCUnOiB0eXBlb2YgUmVmbGVjdCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBSZWZsZWN0LFxuXHQnJVJlZ0V4cCUnOiBSZWdFeHAsXG5cdCclU2V0JSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogU2V0LFxuXHQnJVNldEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IFNldCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclU2hhcmVkQXJyYXlCdWZmZXIlJzogdHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFNoYXJlZEFycmF5QnVmZmVyLFxuXHQnJVN0cmluZyUnOiBTdHJpbmcsXG5cdCclU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKCcnW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclU3ltYm9sJSc6IGhhc1N5bWJvbHMgPyBTeW1ib2wgOiB1bmRlZmluZWQsXG5cdCclU3ludGF4RXJyb3IlJzogJFN5bnRheEVycm9yLFxuXHQnJVRocm93VHlwZUVycm9yJSc6IFRocm93VHlwZUVycm9yLFxuXHQnJVR5cGVkQXJyYXklJzogVHlwZWRBcnJheSxcblx0JyVUeXBlRXJyb3IlJzogJFR5cGVFcnJvcixcblx0JyVVaW50OEFycmF5JSc6IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4QXJyYXksXG5cdCclVWludDhDbGFtcGVkQXJyYXklJzogdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4Q2xhbXBlZEFycmF5LFxuXHQnJVVpbnQxNkFycmF5JSc6IHR5cGVvZiBVaW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50MTZBcnJheSxcblx0JyVVaW50MzJBcnJheSUnOiB0eXBlb2YgVWludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDMyQXJyYXksXG5cdCclVVJJRXJyb3IlJzogVVJJRXJyb3IsXG5cdCclV2Vha01hcCUnOiB0eXBlb2YgV2Vha01hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrTWFwLFxuXHQnJVdlYWtSZWYlJzogdHlwZW9mIFdlYWtSZWYgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1JlZixcblx0JyVXZWFrU2V0JSc6IHR5cGVvZiBXZWFrU2V0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtTZXRcbn07XG5cbnZhciBkb0V2YWwgPSBmdW5jdGlvbiBkb0V2YWwobmFtZSkge1xuXHR2YXIgdmFsdWU7XG5cdGlmIChuYW1lID09PSAnJUFzeW5jRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiAoKSB7fScpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yJScpIHtcblx0XHR2YXIgZm4gPSBkb0V2YWwoJyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJScpO1xuXHRcdGlmIChmbikge1xuXHRcdFx0dmFsdWUgPSBmbi5wcm90b3R5cGU7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnKSB7XG5cdFx0dmFyIGdlbiA9IGRvRXZhbCgnJUFzeW5jR2VuZXJhdG9yJScpO1xuXHRcdGlmIChnZW4pIHtcblx0XHRcdHZhbHVlID0gZ2V0UHJvdG8oZ2VuLnByb3RvdHlwZSk7XG5cdFx0fVxuXHR9XG5cblx0SU5UUklOU0lDU1tuYW1lXSA9IHZhbHVlO1xuXG5cdHJldHVybiB2YWx1ZTtcbn07XG5cbnZhciBMRUdBQ1lfQUxJQVNFUyA9IHtcblx0JyVBcnJheUJ1ZmZlclByb3RvdHlwZSUnOiBbJ0FycmF5QnVmZmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFycmF5UHJvdG90eXBlJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclQXJyYXlQcm90b19lbnRyaWVzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2VudHJpZXMnXSxcblx0JyVBcnJheVByb3RvX2ZvckVhY2glJzogWydBcnJheScsICdwcm90b3R5cGUnLCAnZm9yRWFjaCddLFxuXHQnJUFycmF5UHJvdG9fa2V5cyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdrZXlzJ10sXG5cdCclQXJyYXlQcm90b192YWx1ZXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAndmFsdWVzJ10sXG5cdCclQXN5bmNGdW5jdGlvblByb3RvdHlwZSUnOiBbJ0FzeW5jRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclQXN5bmNHZW5lcmF0b3IlJzogWydBc3luY0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFzeW5jR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnLCAncHJvdG90eXBlJ10sXG5cdCclQm9vbGVhblByb3RvdHlwZSUnOiBbJ0Jvb2xlYW4nLCAncHJvdG90eXBlJ10sXG5cdCclRGF0YVZpZXdQcm90b3R5cGUlJzogWydEYXRhVmlldycsICdwcm90b3R5cGUnXSxcblx0JyVEYXRlUHJvdG90eXBlJSc6IFsnRGF0ZScsICdwcm90b3R5cGUnXSxcblx0JyVFcnJvclByb3RvdHlwZSUnOiBbJ0Vycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJUV2YWxFcnJvclByb3RvdHlwZSUnOiBbJ0V2YWxFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVGbG9hdDMyQXJyYXlQcm90b3R5cGUlJzogWydGbG9hdDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclRmxvYXQ2NEFycmF5UHJvdG90eXBlJSc6IFsnRmxvYXQ2NEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUZ1bmN0aW9uUHJvdG90eXBlJSc6IFsnRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDhBcnJheVByb3RvdHlwZSUnOiBbJ0ludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnSW50MTZBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQzMkFycmF5UHJvdG90eXBlJSc6IFsnSW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVKU09OUGFyc2UlJzogWydKU09OJywgJ3BhcnNlJ10sXG5cdCclSlNPTlN0cmluZ2lmeSUnOiBbJ0pTT04nLCAnc3RyaW5naWZ5J10sXG5cdCclTWFwUHJvdG90eXBlJSc6IFsnTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJU51bWJlclByb3RvdHlwZSUnOiBbJ051bWJlcicsICdwcm90b3R5cGUnXSxcblx0JyVPYmplY3RQcm90b3R5cGUlJzogWydPYmplY3QnLCAncHJvdG90eXBlJ10sXG5cdCclT2JqUHJvdG9fdG9TdHJpbmclJzogWydPYmplY3QnLCAncHJvdG90eXBlJywgJ3RvU3RyaW5nJ10sXG5cdCclT2JqUHJvdG9fdmFsdWVPZiUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnLCAndmFsdWVPZiddLFxuXHQnJVByb21pc2VQcm90b3R5cGUlJzogWydQcm9taXNlJywgJ3Byb3RvdHlwZSddLFxuXHQnJVByb21pc2VQcm90b190aGVuJSc6IFsnUHJvbWlzZScsICdwcm90b3R5cGUnLCAndGhlbiddLFxuXHQnJVByb21pc2VfYWxsJSc6IFsnUHJvbWlzZScsICdhbGwnXSxcblx0JyVQcm9taXNlX3JlamVjdCUnOiBbJ1Byb21pc2UnLCAncmVqZWN0J10sXG5cdCclUHJvbWlzZV9yZXNvbHZlJSc6IFsnUHJvbWlzZScsICdyZXNvbHZlJ10sXG5cdCclUmFuZ2VFcnJvclByb3RvdHlwZSUnOiBbJ1JhbmdlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUlJzogWydSZWZlcmVuY2VFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVSZWdFeHBQcm90b3R5cGUlJzogWydSZWdFeHAnLCAncHJvdG90eXBlJ10sXG5cdCclU2V0UHJvdG90eXBlJSc6IFsnU2V0JywgJ3Byb3RvdHlwZSddLFxuXHQnJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSc6IFsnU2hhcmVkQXJyYXlCdWZmZXInLCAncHJvdG90eXBlJ10sXG5cdCclU3RyaW5nUHJvdG90eXBlJSc6IFsnU3RyaW5nJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN5bWJvbFByb3RvdHlwZSUnOiBbJ1N5bWJvbCcsICdwcm90b3R5cGUnXSxcblx0JyVTeW50YXhFcnJvclByb3RvdHlwZSUnOiBbJ1N5bnRheEVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVkQXJyYXlQcm90b3R5cGUlJzogWydUeXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVFcnJvclByb3RvdHlwZSUnOiBbJ1R5cGVFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OEFycmF5UHJvdG90eXBlJSc6IFsnVWludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQ4Q2xhbXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnVWludDE2QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDMyQXJyYXlQcm90b3R5cGUlJzogWydVaW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVUklFcnJvclByb3RvdHlwZSUnOiBbJ1VSSUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtNYXBQcm90b3R5cGUlJzogWydXZWFrTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtTZXRQcm90b3R5cGUlJzogWydXZWFrU2V0JywgJ3Byb3RvdHlwZSddXG59O1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkY29uY2F0ID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIEFycmF5LnByb3RvdHlwZS5jb25jYXQpO1xudmFyICRzcGxpY2VBcHBseSA9IGJpbmQuY2FsbChGdW5jdGlvbi5hcHBseSwgQXJyYXkucHJvdG90eXBlLnNwbGljZSk7XG52YXIgJHJlcGxhY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcbnZhciAkc3RyU2xpY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5zbGljZSk7XG5cbi8qIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iLzQuMTcuMTUvZGlzdC9sb2Rhc2guanMjTDY3MzUtTDY3NDQgKi9cbnZhciByZVByb3BOYW1lID0gL1teJS5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwlJCkpL2c7XG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7IC8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IGZ1bmN0aW9uIHN0cmluZ1RvUGF0aChzdHJpbmcpIHtcblx0dmFyIGZpcnN0ID0gJHN0clNsaWNlKHN0cmluZywgMCwgMSk7XG5cdHZhciBsYXN0ID0gJHN0clNsaWNlKHN0cmluZywgLTEpO1xuXHRpZiAoZmlyc3QgPT09ICclJyAmJiBsYXN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIGNsb3NpbmcgYCVgJyk7XG5cdH0gZWxzZSBpZiAobGFzdCA9PT0gJyUnICYmIGZpcnN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIG9wZW5pbmcgYCVgJyk7XG5cdH1cblx0dmFyIHJlc3VsdCA9IFtdO1xuXHQkcmVwbGFjZShzdHJpbmcsIHJlUHJvcE5hbWUsIGZ1bmN0aW9uIChtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG5cdFx0cmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gcXVvdGUgPyAkcmVwbGFjZShzdWJTdHJpbmcsIHJlRXNjYXBlQ2hhciwgJyQxJykgOiBudW1iZXIgfHwgbWF0Y2g7XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcbi8qIGVuZCBhZGFwdGF0aW9uICovXG5cbnZhciBnZXRCYXNlSW50cmluc2ljID0gZnVuY3Rpb24gZ2V0QmFzZUludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpY05hbWUgPSBuYW1lO1xuXHR2YXIgYWxpYXM7XG5cdGlmIChoYXNPd24oTEVHQUNZX0FMSUFTRVMsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0YWxpYXMgPSBMRUdBQ1lfQUxJQVNFU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpbnRyaW5zaWNOYW1lID0gJyUnICsgYWxpYXNbMF0gKyAnJSc7XG5cdH1cblxuXHRpZiAoaGFzT3duKElOVFJJTlNJQ1MsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0dmFyIHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpZiAodmFsdWUgPT09IG5lZWRzRXZhbCkge1xuXHRcdFx0dmFsdWUgPSBkb0V2YWwoaW50cmluc2ljTmFtZSk7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnICYmICFhbGxvd01pc3NpbmcpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBmaWxlIGFuIGlzc3VlIScpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRhbGlhczogYWxpYXMsXG5cdFx0XHRuYW1lOiBpbnRyaW5zaWNOYW1lLFxuXHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0fTtcblx0fVxuXG5cdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZG9lcyBub3QgZXhpc3QhJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0aWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCBuYW1lLmxlbmd0aCA9PT0gMCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB0eXBlb2YgYWxsb3dNaXNzaW5nICE9PSAnYm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignXCJhbGxvd01pc3NpbmdcIiBhcmd1bWVudCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cblx0dmFyIHBhcnRzID0gc3RyaW5nVG9QYXRoKG5hbWUpO1xuXHR2YXIgaW50cmluc2ljQmFzZU5hbWUgPSBwYXJ0cy5sZW5ndGggPiAwID8gcGFydHNbMF0gOiAnJztcblxuXHR2YXIgaW50cmluc2ljID0gZ2V0QmFzZUludHJpbnNpYygnJScgKyBpbnRyaW5zaWNCYXNlTmFtZSArICclJywgYWxsb3dNaXNzaW5nKTtcblx0dmFyIGludHJpbnNpY1JlYWxOYW1lID0gaW50cmluc2ljLm5hbWU7XG5cdHZhciB2YWx1ZSA9IGludHJpbnNpYy52YWx1ZTtcblx0dmFyIHNraXBGdXJ0aGVyQ2FjaGluZyA9IGZhbHNlO1xuXG5cdHZhciBhbGlhcyA9IGludHJpbnNpYy5hbGlhcztcblx0aWYgKGFsaWFzKSB7XG5cdFx0aW50cmluc2ljQmFzZU5hbWUgPSBhbGlhc1swXTtcblx0XHQkc3BsaWNlQXBwbHkocGFydHMsICRjb25jYXQoWzAsIDFdLCBhbGlhcykpO1xuXHR9XG5cblx0Zm9yICh2YXIgaSA9IDEsIGlzT3duID0gdHJ1ZTsgaSA8IHBhcnRzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0dmFyIHBhcnQgPSBwYXJ0c1tpXTtcblx0XHR2YXIgZmlyc3QgPSAkc3RyU2xpY2UocGFydCwgMCwgMSk7XG5cdFx0dmFyIGxhc3QgPSAkc3RyU2xpY2UocGFydCwgLTEpO1xuXHRcdGlmIChcblx0XHRcdChcblx0XHRcdFx0KGZpcnN0ID09PSAnXCInIHx8IGZpcnN0ID09PSBcIidcIiB8fCBmaXJzdCA9PT0gJ2AnKVxuXHRcdFx0XHR8fCAobGFzdCA9PT0gJ1wiJyB8fCBsYXN0ID09PSBcIidcIiB8fCBsYXN0ID09PSAnYCcpXG5cdFx0XHQpXG5cdFx0XHQmJiBmaXJzdCAhPT0gbGFzdFxuXHRcdCkge1xuXHRcdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcigncHJvcGVydHkgbmFtZXMgd2l0aCBxdW90ZXMgbXVzdCBoYXZlIG1hdGNoaW5nIHF1b3RlcycpO1xuXHRcdH1cblx0XHRpZiAocGFydCA9PT0gJ2NvbnN0cnVjdG9yJyB8fCAhaXNPd24pIHtcblx0XHRcdHNraXBGdXJ0aGVyQ2FjaGluZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aW50cmluc2ljQmFzZU5hbWUgKz0gJy4nICsgcGFydDtcblx0XHRpbnRyaW5zaWNSZWFsTmFtZSA9ICclJyArIGludHJpbnNpY0Jhc2VOYW1lICsgJyUnO1xuXG5cdFx0aWYgKGhhc093bihJTlRSSU5TSUNTLCBpbnRyaW5zaWNSZWFsTmFtZSkpIHtcblx0XHRcdHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNSZWFsTmFtZV07XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG5cdFx0XHRpZiAoIShwYXJ0IGluIHZhbHVlKSkge1xuXHRcdFx0XHRpZiAoIWFsbG93TWlzc2luZykge1xuXHRcdFx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdiYXNlIGludHJpbnNpYyBmb3IgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IHRoZSBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLicpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2b2lkIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdGlmICgkZ09QRCAmJiAoaSArIDEpID49IHBhcnRzLmxlbmd0aCkge1xuXHRcdFx0XHR2YXIgZGVzYyA9ICRnT1BEKHZhbHVlLCBwYXJ0KTtcblx0XHRcdFx0aXNPd24gPSAhIWRlc2M7XG5cblx0XHRcdFx0Ly8gQnkgY29udmVudGlvbiwgd2hlbiBhIGRhdGEgcHJvcGVydHkgaXMgY29udmVydGVkIHRvIGFuIGFjY2Vzc29yXG5cdFx0XHRcdC8vIHByb3BlcnR5IHRvIGVtdWxhdGUgYSBkYXRhIHByb3BlcnR5IHRoYXQgZG9lcyBub3Qgc3VmZmVyIGZyb21cblx0XHRcdFx0Ly8gdGhlIG92ZXJyaWRlIG1pc3Rha2UsIHRoYXQgYWNjZXNzb3IncyBnZXR0ZXIgaXMgbWFya2VkIHdpdGhcblx0XHRcdFx0Ly8gYW4gYG9yaWdpbmFsVmFsdWVgIHByb3BlcnR5LiBIZXJlLCB3aGVuIHdlIGRldGVjdCB0aGlzLCB3ZVxuXHRcdFx0XHQvLyB1cGhvbGQgdGhlIGlsbHVzaW9uIGJ5IHByZXRlbmRpbmcgdG8gc2VlIHRoYXQgb3JpZ2luYWwgZGF0YVxuXHRcdFx0XHQvLyBwcm9wZXJ0eSwgaS5lLiwgcmV0dXJuaW5nIHRoZSB2YWx1ZSByYXRoZXIgdGhhbiB0aGUgZ2V0dGVyXG5cdFx0XHRcdC8vIGl0c2VsZi5cblx0XHRcdFx0aWYgKGlzT3duICYmICdnZXQnIGluIGRlc2MgJiYgISgnb3JpZ2luYWxWYWx1ZScgaW4gZGVzYy5nZXQpKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBkZXNjLmdldDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlW3BhcnRdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpc093biA9IGhhc093bih2YWx1ZSwgcGFydCk7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWVbcGFydF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc093biAmJiAhc2tpcEZ1cnRoZXJDYWNoaW5nKSB7XG5cdFx0XHRcdElOVFJJTlNJQ1NbaW50cmluc2ljUmVhbE5hbWVdID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qIGdsb2JhbHNcblx0QWdncmVnYXRlRXJyb3IsXG5cdEF0b21pY3MsXG5cdEZpbmFsaXphdGlvblJlZ2lzdHJ5LFxuXHRTaGFyZWRBcnJheUJ1ZmZlcixcblx0V2Vha1JlZixcbiovXG5cbnZhciB1bmRlZmluZWQ7XG5cbnZhciAkU3ludGF4RXJyb3IgPSBTeW50YXhFcnJvcjtcbnZhciAkRnVuY3Rpb24gPSBGdW5jdGlvbjtcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbnZhciBnZXRFdmFsbGVkQ29uc3RydWN0b3IgPSBmdW5jdGlvbiAoZXhwcmVzc2lvblN5bnRheCkge1xuXHR0cnkge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuXHRcdHJldHVybiBGdW5jdGlvbignXCJ1c2Ugc3RyaWN0XCI7IHJldHVybiAoJyArIGV4cHJlc3Npb25TeW50YXggKyAnKS5jb25zdHJ1Y3RvcjsnKSgpO1xuXHR9IGNhdGNoIChlKSB7fVxufTtcblxudmFyICRnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbmlmICgkZ09QRCkge1xuXHR0cnkge1xuXHRcdCRnT1BEKHt9LCAnJyk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQkZ09QRCA9IG51bGw7IC8vIHRoaXMgaXMgSUUgOCwgd2hpY2ggaGFzIGEgYnJva2VuIGdPUERcblx0fVxufVxuXG52YXIgdGhyb3dUeXBlRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG5cdHRocm93IG5ldyAkVHlwZUVycm9yKCk7XG59O1xudmFyIFRocm93VHlwZUVycm9yID0gJGdPUERcblx0PyAoZnVuY3Rpb24gKCkge1xuXHRcdHRyeSB7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zLCBuby1jYWxsZXIsIG5vLXJlc3RyaWN0ZWQtcHJvcGVydGllc1xuXHRcdFx0YXJndW1lbnRzLmNhbGxlZTsgLy8gSUUgOCBkb2VzIG5vdCB0aHJvdyBoZXJlXG5cdFx0XHRyZXR1cm4gdGhyb3dUeXBlRXJyb3I7XG5cdFx0fSBjYXRjaCAoY2FsbGVlVGhyb3dzKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHQvLyBJRSA4IHRocm93cyBvbiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGFyZ3VtZW50cywgJycpXG5cdFx0XHRcdHJldHVybiAkZ09QRChhcmd1bWVudHMsICdjYWxsZWUnKS5nZXQ7XG5cdFx0XHR9IGNhdGNoIChnT1BEdGhyb3dzKSB7XG5cdFx0XHRcdHJldHVybiB0aHJvd1R5cGVFcnJvcjtcblx0XHRcdH1cblx0XHR9XG5cdH0oKSlcblx0OiB0aHJvd1R5cGVFcnJvcjtcblxudmFyIGhhc1N5bWJvbHMgPSByZXF1aXJlKCdoYXMtc3ltYm9scycpKCk7XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5fX3Byb3RvX187IH07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cblxudmFyIGFzeW5jR2VuRnVuY3Rpb24gPSBnZXRFdmFsbGVkQ29uc3RydWN0b3IoJ2FzeW5jIGZ1bmN0aW9uKiAoKSB7fScpO1xudmFyIGFzeW5jR2VuRnVuY3Rpb25Qcm90b3R5cGUgPSBhc3luY0dlbkZ1bmN0aW9uID8gYXN5bmNHZW5GdW5jdGlvbi5wcm90b3R5cGUgOiB1bmRlZmluZWQ7XG52YXIgYXN5bmNHZW5Qcm90b3R5cGUgPSBhc3luY0dlbkZ1bmN0aW9uUHJvdG90eXBlID8gYXN5bmNHZW5GdW5jdGlvblByb3RvdHlwZS5wcm90b3R5cGUgOiB1bmRlZmluZWQ7XG5cbnZhciBUeXBlZEFycmF5ID0gdHlwZW9mIFVpbnQ4QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8oVWludDhBcnJheSk7XG5cbnZhciBJTlRSSU5TSUNTID0ge1xuXHQnJUFnZ3JlZ2F0ZUVycm9yJSc6IHR5cGVvZiBBZ2dyZWdhdGVFcnJvciA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBZ2dyZWdhdGVFcnJvcixcblx0JyVBcnJheSUnOiBBcnJheSxcblx0JyVBcnJheUJ1ZmZlciUnOiB0eXBlb2YgQXJyYXlCdWZmZXIgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQXJyYXlCdWZmZXIsXG5cdCclQXJyYXlJdGVyYXRvclByb3RvdHlwZSUnOiBoYXNTeW1ib2xzID8gZ2V0UHJvdG8oW11bU3ltYm9sLml0ZXJhdG9yXSgpKSA6IHVuZGVmaW5lZCxcblx0JyVBc3luY0Zyb21TeW5jSXRlcmF0b3JQcm90b3R5cGUlJzogdW5kZWZpbmVkLFxuXHQnJUFzeW5jRnVuY3Rpb24lJzogZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiAoKSB7fScpLFxuXHQnJUFzeW5jR2VuZXJhdG9yJSc6IGFzeW5jR2VuRnVuY3Rpb25Qcm90b3R5cGUsXG5cdCclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnOiBhc3luY0dlbkZ1bmN0aW9uLFxuXHQnJUFzeW5jSXRlcmF0b3JQcm90b3R5cGUlJzogYXN5bmNHZW5Qcm90b3R5cGUgPyBnZXRQcm90byhhc3luY0dlblByb3RvdHlwZSkgOiB1bmRlZmluZWQsXG5cdCclQXRvbWljcyUnOiB0eXBlb2YgQXRvbWljcyA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBdG9taWNzLFxuXHQnJUJpZ0ludCUnOiB0eXBlb2YgQmlnSW50ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEJpZ0ludCxcblx0JyVCb29sZWFuJSc6IEJvb2xlYW4sXG5cdCclRGF0YVZpZXclJzogdHlwZW9mIERhdGFWaWV3ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IERhdGFWaWV3LFxuXHQnJURhdGUlJzogRGF0ZSxcblx0JyVkZWNvZGVVUkklJzogZGVjb2RlVVJJLFxuXHQnJWRlY29kZVVSSUNvbXBvbmVudCUnOiBkZWNvZGVVUklDb21wb25lbnQsXG5cdCclZW5jb2RlVVJJJSc6IGVuY29kZVVSSSxcblx0JyVlbmNvZGVVUklDb21wb25lbnQlJzogZW5jb2RlVVJJQ29tcG9uZW50LFxuXHQnJUVycm9yJSc6IEVycm9yLFxuXHQnJWV2YWwlJzogZXZhbCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1ldmFsXG5cdCclRXZhbEVycm9yJSc6IEV2YWxFcnJvcixcblx0JyVGbG9hdDMyQXJyYXklJzogdHlwZW9mIEZsb2F0MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGbG9hdDMyQXJyYXksXG5cdCclRmxvYXQ2NEFycmF5JSc6IHR5cGVvZiBGbG9hdDY0QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQ2NEFycmF5LFxuXHQnJUZpbmFsaXphdGlvblJlZ2lzdHJ5JSc6IHR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGaW5hbGl6YXRpb25SZWdpc3RyeSxcblx0JyVGdW5jdGlvbiUnOiAkRnVuY3Rpb24sXG5cdCclR2VuZXJhdG9yRnVuY3Rpb24lJzogZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdmdW5jdGlvbiogKCkge30nKSxcblx0JyVJbnQ4QXJyYXklJzogdHlwZW9mIEludDhBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBJbnQ4QXJyYXksXG5cdCclSW50MTZBcnJheSUnOiB0eXBlb2YgSW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBJbnQxNkFycmF5LFxuXHQnJUludDMyQXJyYXklJzogdHlwZW9mIEludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogSW50MzJBcnJheSxcblx0JyVpc0Zpbml0ZSUnOiBpc0Zpbml0ZSxcblx0JyVpc05hTiUnOiBpc05hTixcblx0JyVJdGVyYXRvclByb3RvdHlwZSUnOiBoYXNTeW1ib2xzID8gZ2V0UHJvdG8oZ2V0UHJvdG8oW11bU3ltYm9sLml0ZXJhdG9yXSgpKSkgOiB1bmRlZmluZWQsXG5cdCclSlNPTiUnOiB0eXBlb2YgSlNPTiA9PT0gJ29iamVjdCcgPyBKU09OIDogdW5kZWZpbmVkLFxuXHQnJU1hcCUnOiB0eXBlb2YgTWFwID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IE1hcCxcblx0JyVNYXBJdGVyYXRvclByb3RvdHlwZSUnOiB0eXBlb2YgTWFwID09PSAndW5kZWZpbmVkJyB8fCAhaGFzU3ltYm9scyA/IHVuZGVmaW5lZCA6IGdldFByb3RvKG5ldyBNYXAoKVtTeW1ib2wuaXRlcmF0b3JdKCkpLFxuXHQnJU1hdGglJzogTWF0aCxcblx0JyVOdW1iZXIlJzogTnVtYmVyLFxuXHQnJU9iamVjdCUnOiBPYmplY3QsXG5cdCclcGFyc2VGbG9hdCUnOiBwYXJzZUZsb2F0LFxuXHQnJXBhcnNlSW50JSc6IHBhcnNlSW50LFxuXHQnJVByb21pc2UlJzogdHlwZW9mIFByb21pc2UgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogUHJvbWlzZSxcblx0JyVQcm94eSUnOiB0eXBlb2YgUHJveHkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogUHJveHksXG5cdCclUmFuZ2VFcnJvciUnOiBSYW5nZUVycm9yLFxuXHQnJVJlZmVyZW5jZUVycm9yJSc6IFJlZmVyZW5jZUVycm9yLFxuXHQnJVJlZmxlY3QlJzogdHlwZW9mIFJlZmxlY3QgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogUmVmbGVjdCxcblx0JyVSZWdFeHAlJzogUmVnRXhwLFxuXHQnJVNldCUnOiB0eXBlb2YgU2V0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFNldCxcblx0JyVTZXRJdGVyYXRvclByb3RvdHlwZSUnOiB0eXBlb2YgU2V0ID09PSAndW5kZWZpbmVkJyB8fCAhaGFzU3ltYm9scyA/IHVuZGVmaW5lZCA6IGdldFByb3RvKG5ldyBTZXQoKVtTeW1ib2wuaXRlcmF0b3JdKCkpLFxuXHQnJVNoYXJlZEFycmF5QnVmZmVyJSc6IHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlciA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBTaGFyZWRBcnJheUJ1ZmZlcixcblx0JyVTdHJpbmclJzogU3RyaW5nLFxuXHQnJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBnZXRQcm90bygnJ1tTeW1ib2wuaXRlcmF0b3JdKCkpIDogdW5kZWZpbmVkLFxuXHQnJVN5bWJvbCUnOiBoYXNTeW1ib2xzID8gU3ltYm9sIDogdW5kZWZpbmVkLFxuXHQnJVN5bnRheEVycm9yJSc6ICRTeW50YXhFcnJvcixcblx0JyVUaHJvd1R5cGVFcnJvciUnOiBUaHJvd1R5cGVFcnJvcixcblx0JyVUeXBlZEFycmF5JSc6IFR5cGVkQXJyYXksXG5cdCclVHlwZUVycm9yJSc6ICRUeXBlRXJyb3IsXG5cdCclVWludDhBcnJheSUnOiB0eXBlb2YgVWludDhBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50OEFycmF5LFxuXHQnJVVpbnQ4Q2xhbXBlZEFycmF5JSc6IHR5cGVvZiBVaW50OENsYW1wZWRBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50OENsYW1wZWRBcnJheSxcblx0JyVVaW50MTZBcnJheSUnOiB0eXBlb2YgVWludDE2QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDE2QXJyYXksXG5cdCclVWludDMyQXJyYXklJzogdHlwZW9mIFVpbnQzMkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQzMkFycmF5LFxuXHQnJVVSSUVycm9yJSc6IFVSSUVycm9yLFxuXHQnJVdlYWtNYXAlJzogdHlwZW9mIFdlYWtNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha01hcCxcblx0JyVXZWFrUmVmJSc6IHR5cGVvZiBXZWFrUmVmID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtSZWYsXG5cdCclV2Vha1NldCUnOiB0eXBlb2YgV2Vha1NldCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrU2V0XG59O1xuXG52YXIgTEVHQUNZX0FMSUFTRVMgPSB7XG5cdCclQXJyYXlCdWZmZXJQcm90b3R5cGUlJzogWydBcnJheUJ1ZmZlcicsICdwcm90b3R5cGUnXSxcblx0JyVBcnJheVByb3RvdHlwZSUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUFycmF5UHJvdG9fZW50cmllcyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdlbnRyaWVzJ10sXG5cdCclQXJyYXlQcm90b19mb3JFYWNoJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2ZvckVhY2gnXSxcblx0JyVBcnJheVByb3RvX2tleXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAna2V5cyddLFxuXHQnJUFycmF5UHJvdG9fdmFsdWVzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ3ZhbHVlcyddLFxuXHQnJUFzeW5jRnVuY3Rpb25Qcm90b3R5cGUlJzogWydBc3luY0Z1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFzeW5jR2VuZXJhdG9yJSc6IFsnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnXSxcblx0JyVBc3luY0dlbmVyYXRvclByb3RvdHlwZSUnOiBbJ0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUJvb2xlYW5Qcm90b3R5cGUlJzogWydCb29sZWFuJywgJ3Byb3RvdHlwZSddLFxuXHQnJURhdGFWaWV3UHJvdG90eXBlJSc6IFsnRGF0YVZpZXcnLCAncHJvdG90eXBlJ10sXG5cdCclRGF0ZVByb3RvdHlwZSUnOiBbJ0RhdGUnLCAncHJvdG90eXBlJ10sXG5cdCclRXJyb3JQcm90b3R5cGUlJzogWydFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVFdmFsRXJyb3JQcm90b3R5cGUlJzogWydFdmFsRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclRmxvYXQzMkFycmF5UHJvdG90eXBlJSc6IFsnRmxvYXQzMkFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUZsb2F0NjRBcnJheVByb3RvdHlwZSUnOiBbJ0Zsb2F0NjRBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVGdW5jdGlvblByb3RvdHlwZSUnOiBbJ0Z1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUdlbmVyYXRvciUnOiBbJ0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUdlbmVyYXRvclByb3RvdHlwZSUnOiBbJ0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQ4QXJyYXlQcm90b3R5cGUlJzogWydJbnQ4QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclSW50MTZBcnJheVByb3RvdHlwZSUnOiBbJ0ludDE2QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclSW50MzJBcnJheVByb3RvdHlwZSUnOiBbJ0ludDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclSlNPTlBhcnNlJSc6IFsnSlNPTicsICdwYXJzZSddLFxuXHQnJUpTT05TdHJpbmdpZnklJzogWydKU09OJywgJ3N0cmluZ2lmeSddLFxuXHQnJU1hcFByb3RvdHlwZSUnOiBbJ01hcCcsICdwcm90b3R5cGUnXSxcblx0JyVOdW1iZXJQcm90b3R5cGUlJzogWydOdW1iZXInLCAncHJvdG90eXBlJ10sXG5cdCclT2JqZWN0UHJvdG90eXBlJSc6IFsnT2JqZWN0JywgJ3Byb3RvdHlwZSddLFxuXHQnJU9ialByb3RvX3RvU3RyaW5nJSc6IFsnT2JqZWN0JywgJ3Byb3RvdHlwZScsICd0b1N0cmluZyddLFxuXHQnJU9ialByb3RvX3ZhbHVlT2YlJzogWydPYmplY3QnLCAncHJvdG90eXBlJywgJ3ZhbHVlT2YnXSxcblx0JyVQcm9taXNlUHJvdG90eXBlJSc6IFsnUHJvbWlzZScsICdwcm90b3R5cGUnXSxcblx0JyVQcm9taXNlUHJvdG9fdGhlbiUnOiBbJ1Byb21pc2UnLCAncHJvdG90eXBlJywgJ3RoZW4nXSxcblx0JyVQcm9taXNlX2FsbCUnOiBbJ1Byb21pc2UnLCAnYWxsJ10sXG5cdCclUHJvbWlzZV9yZWplY3QlJzogWydQcm9taXNlJywgJ3JlamVjdCddLFxuXHQnJVByb21pc2VfcmVzb2x2ZSUnOiBbJ1Byb21pc2UnLCAncmVzb2x2ZSddLFxuXHQnJVJhbmdlRXJyb3JQcm90b3R5cGUlJzogWydSYW5nZUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVJlZmVyZW5jZUVycm9yUHJvdG90eXBlJSc6IFsnUmVmZXJlbmNlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclUmVnRXhwUHJvdG90eXBlJSc6IFsnUmVnRXhwJywgJ3Byb3RvdHlwZSddLFxuXHQnJVNldFByb3RvdHlwZSUnOiBbJ1NldCcsICdwcm90b3R5cGUnXSxcblx0JyVTaGFyZWRBcnJheUJ1ZmZlclByb3RvdHlwZSUnOiBbJ1NoYXJlZEFycmF5QnVmZmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN0cmluZ1Byb3RvdHlwZSUnOiBbJ1N0cmluZycsICdwcm90b3R5cGUnXSxcblx0JyVTeW1ib2xQcm90b3R5cGUlJzogWydTeW1ib2wnLCAncHJvdG90eXBlJ10sXG5cdCclU3ludGF4RXJyb3JQcm90b3R5cGUlJzogWydTeW50YXhFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVUeXBlZEFycmF5UHJvdG90eXBlJSc6IFsnVHlwZWRBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVUeXBlRXJyb3JQcm90b3R5cGUlJzogWydUeXBlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclVWludDhBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQ4QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDhDbGFtcGVkQXJyYXlQcm90b3R5cGUlJzogWydVaW50OENsYW1wZWRBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50MTZBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQxNkFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQzMkFycmF5UHJvdG90eXBlJSc6IFsnVWludDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVVJJRXJyb3JQcm90b3R5cGUlJzogWydVUklFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVXZWFrTWFwUHJvdG90eXBlJSc6IFsnV2Vha01hcCcsICdwcm90b3R5cGUnXSxcblx0JyVXZWFrU2V0UHJvdG90eXBlJSc6IFsnV2Vha1NldCcsICdwcm90b3R5cGUnXVxufTtcblxudmFyIGJpbmQgPSByZXF1aXJlKCdmdW5jdGlvbi1iaW5kJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnaGFzJyk7XG52YXIgJGNvbmNhdCA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBBcnJheS5wcm90b3R5cGUuY29uY2F0KTtcbnZhciAkc3BsaWNlQXBwbHkgPSBiaW5kLmNhbGwoRnVuY3Rpb24uYXBwbHksIEFycmF5LnByb3RvdHlwZS5zcGxpY2UpO1xudmFyICRyZXBsYWNlID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSk7XG5cbi8qIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iLzQuMTcuMTUvZGlzdC9sb2Rhc2guanMjTDY3MzUtTDY3NDQgKi9cbnZhciByZVByb3BOYW1lID0gL1teJS5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwlJCkpL2c7XG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7IC8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IGZ1bmN0aW9uIHN0cmluZ1RvUGF0aChzdHJpbmcpIHtcblx0dmFyIHJlc3VsdCA9IFtdO1xuXHQkcmVwbGFjZShzdHJpbmcsIHJlUHJvcE5hbWUsIGZ1bmN0aW9uIChtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG5cdFx0cmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gcXVvdGUgPyAkcmVwbGFjZShzdWJTdHJpbmcsIHJlRXNjYXBlQ2hhciwgJyQxJykgOiBudW1iZXIgfHwgbWF0Y2g7XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcbi8qIGVuZCBhZGFwdGF0aW9uICovXG5cbnZhciBnZXRCYXNlSW50cmluc2ljID0gZnVuY3Rpb24gZ2V0QmFzZUludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpY05hbWUgPSBuYW1lO1xuXHR2YXIgYWxpYXM7XG5cdGlmIChoYXNPd24oTEVHQUNZX0FMSUFTRVMsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0YWxpYXMgPSBMRUdBQ1lfQUxJQVNFU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpbnRyaW5zaWNOYW1lID0gJyUnICsgYWxpYXNbMF0gKyAnJSc7XG5cdH1cblxuXHRpZiAoaGFzT3duKElOVFJJTlNJQ1MsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0dmFyIHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJyAmJiAhYWxsb3dNaXNzaW5nKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignaW50cmluc2ljICcgKyBuYW1lICsgJyBleGlzdHMsIGJ1dCBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgZmlsZSBhbiBpc3N1ZSEnKTtcblx0XHR9XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0YWxpYXM6IGFsaWFzLFxuXHRcdFx0bmFtZTogaW50cmluc2ljTmFtZSxcblx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdH07XG5cdH1cblxuXHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnRyaW5zaWMgJyArIG5hbWUgKyAnIGRvZXMgbm90IGV4aXN0IScpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBHZXRJbnRyaW5zaWMobmFtZSwgYWxsb3dNaXNzaW5nKSB7XG5cdGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycgfHwgbmFtZS5sZW5ndGggPT09IDApIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignaW50cmluc2ljIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnKTtcblx0fVxuXHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgdHlwZW9mIGFsbG93TWlzc2luZyAhPT0gJ2Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1wiYWxsb3dNaXNzaW5nXCIgYXJndW1lbnQgbXVzdCBiZSBhIGJvb2xlYW4nKTtcblx0fVxuXG5cdHZhciBwYXJ0cyA9IHN0cmluZ1RvUGF0aChuYW1lKTtcblx0dmFyIGludHJpbnNpY0Jhc2VOYW1lID0gcGFydHMubGVuZ3RoID4gMCA/IHBhcnRzWzBdIDogJyc7XG5cblx0dmFyIGludHJpbnNpYyA9IGdldEJhc2VJbnRyaW5zaWMoJyUnICsgaW50cmluc2ljQmFzZU5hbWUgKyAnJScsIGFsbG93TWlzc2luZyk7XG5cdHZhciBpbnRyaW5zaWNSZWFsTmFtZSA9IGludHJpbnNpYy5uYW1lO1xuXHR2YXIgdmFsdWUgPSBpbnRyaW5zaWMudmFsdWU7XG5cdHZhciBza2lwRnVydGhlckNhY2hpbmcgPSBmYWxzZTtcblxuXHR2YXIgYWxpYXMgPSBpbnRyaW5zaWMuYWxpYXM7XG5cdGlmIChhbGlhcykge1xuXHRcdGludHJpbnNpY0Jhc2VOYW1lID0gYWxpYXNbMF07XG5cdFx0JHNwbGljZUFwcGx5KHBhcnRzLCAkY29uY2F0KFswLCAxXSwgYWxpYXMpKTtcblx0fVxuXG5cdGZvciAodmFyIGkgPSAxLCBpc093biA9IHRydWU7IGkgPCBwYXJ0cy5sZW5ndGg7IGkgKz0gMSkge1xuXHRcdHZhciBwYXJ0ID0gcGFydHNbaV07XG5cdFx0aWYgKHBhcnQgPT09ICdjb25zdHJ1Y3RvcicgfHwgIWlzT3duKSB7XG5cdFx0XHRza2lwRnVydGhlckNhY2hpbmcgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGludHJpbnNpY0Jhc2VOYW1lICs9ICcuJyArIHBhcnQ7XG5cdFx0aW50cmluc2ljUmVhbE5hbWUgPSAnJScgKyBpbnRyaW5zaWNCYXNlTmFtZSArICclJztcblxuXHRcdGlmIChoYXNPd24oSU5UUklOU0lDUywgaW50cmluc2ljUmVhbE5hbWUpKSB7XG5cdFx0XHR2YWx1ZSA9IElOVFJJTlNJQ1NbaW50cmluc2ljUmVhbE5hbWVdO1xuXHRcdH0gZWxzZSBpZiAodmFsdWUgIT0gbnVsbCkge1xuXHRcdFx0aWYgKCRnT1BEICYmIChpICsgMSkgPj0gcGFydHMubGVuZ3RoKSB7XG5cdFx0XHRcdHZhciBkZXNjID0gJGdPUEQodmFsdWUsIHBhcnQpO1xuXHRcdFx0XHRpc093biA9ICEhZGVzYztcblxuXHRcdFx0XHRpZiAoIWFsbG93TWlzc2luZyAmJiAhKHBhcnQgaW4gdmFsdWUpKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2Jhc2UgaW50cmluc2ljIGZvciAnICsgbmFtZSArICcgZXhpc3RzLCBidXQgdGhlIHByb3BlcnR5IGlzIG5vdCBhdmFpbGFibGUuJyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gQnkgY29udmVudGlvbiwgd2hlbiBhIGRhdGEgcHJvcGVydHkgaXMgY29udmVydGVkIHRvIGFuIGFjY2Vzc29yXG5cdFx0XHRcdC8vIHByb3BlcnR5IHRvIGVtdWxhdGUgYSBkYXRhIHByb3BlcnR5IHRoYXQgZG9lcyBub3Qgc3VmZmVyIGZyb21cblx0XHRcdFx0Ly8gdGhlIG92ZXJyaWRlIG1pc3Rha2UsIHRoYXQgYWNjZXNzb3IncyBnZXR0ZXIgaXMgbWFya2VkIHdpdGhcblx0XHRcdFx0Ly8gYW4gYG9yaWdpbmFsVmFsdWVgIHByb3BlcnR5LiBIZXJlLCB3aGVuIHdlIGRldGVjdCB0aGlzLCB3ZVxuXHRcdFx0XHQvLyB1cGhvbGQgdGhlIGlsbHVzaW9uIGJ5IHByZXRlbmRpbmcgdG8gc2VlIHRoYXQgb3JpZ2luYWwgZGF0YVxuXHRcdFx0XHQvLyBwcm9wZXJ0eSwgaS5lLiwgcmV0dXJuaW5nIHRoZSB2YWx1ZSByYXRoZXIgdGhhbiB0aGUgZ2V0dGVyXG5cdFx0XHRcdC8vIGl0c2VsZi5cblx0XHRcdFx0aWYgKGlzT3duICYmICdnZXQnIGluIGRlc2MgJiYgISgnb3JpZ2luYWxWYWx1ZScgaW4gZGVzYy5nZXQpKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBkZXNjLmdldDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlW3BhcnRdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpc093biA9IGhhc093bih2YWx1ZSwgcGFydCk7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWVbcGFydF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc093biAmJiAhc2tpcEZ1cnRoZXJDYWNoaW5nKSB7XG5cdFx0XHRcdElOVFJJTlNJQ1NbaW50cmluc2ljUmVhbE5hbWVdID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRhcHBseSA9IEdldEludHJpbnNpYygnJUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSUnKTtcbnZhciAkY2FsbCA9IEdldEludHJpbnNpYygnJUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsJScpO1xudmFyICRyZWZsZWN0QXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmFwcGx5JScsIHRydWUpIHx8IGJpbmQuY2FsbCgkY2FsbCwgJGFwcGx5KTtcblxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IEdldEludHJpbnNpYygnJU9iamVjdC5kZWZpbmVQcm9wZXJ0eSUnLCB0cnVlKTtcblxuaWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHR0cnkge1xuXHRcdCRkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IHZhbHVlOiAxIH0pO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gSUUgOCBoYXMgYSBicm9rZW4gZGVmaW5lUHJvcGVydHlcblx0XHQkZGVmaW5lUHJvcGVydHkgPSBudWxsO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY2FsbEJpbmQoKSB7XG5cdHJldHVybiAkcmVmbGVjdEFwcGx5KGJpbmQsICRjYWxsLCBhcmd1bWVudHMpO1xufTtcblxudmFyIGFwcGx5QmluZCA9IGZ1bmN0aW9uIGFwcGx5QmluZCgpIHtcblx0cmV0dXJuICRyZWZsZWN0QXBwbHkoYmluZCwgJGFwcGx5LCBhcmd1bWVudHMpO1xufTtcblxuaWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHQkZGVmaW5lUHJvcGVydHkobW9kdWxlLmV4cG9ydHMsICdhcHBseScsIHsgdmFsdWU6IGFwcGx5QmluZCB9KTtcbn0gZWxzZSB7XG5cdG1vZHVsZS5leHBvcnRzLmFwcGx5ID0gYXBwbHlCaW5kO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgY2FsbEJpbmQgPSByZXF1aXJlKCcuLycpO1xuXG52YXIgJGluZGV4T2YgPSBjYWxsQmluZChHZXRJbnRyaW5zaWMoJ1N0cmluZy5wcm90b3R5cGUuaW5kZXhPZicpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjYWxsQm91bmRJbnRyaW5zaWMobmFtZSwgYWxsb3dNaXNzaW5nKSB7XG5cdHZhciBpbnRyaW5zaWMgPSBHZXRJbnRyaW5zaWMobmFtZSwgISFhbGxvd01pc3NpbmcpO1xuXHRpZiAodHlwZW9mIGludHJpbnNpYyA9PT0gJ2Z1bmN0aW9uJyAmJiAkaW5kZXhPZihuYW1lLCAnLnByb3RvdHlwZS4nKSA+IC0xKSB7XG5cdFx0cmV0dXJuIGNhbGxCaW5kKGludHJpbnNpYyk7XG5cdH1cblx0cmV0dXJuIGludHJpbnNpYztcbn07XG4iLCJ2YXIgaGFzTWFwID0gdHlwZW9mIE1hcCA9PT0gJ2Z1bmN0aW9uJyAmJiBNYXAucHJvdG90eXBlO1xudmFyIG1hcFNpemVEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiBoYXNNYXAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE1hcC5wcm90b3R5cGUsICdzaXplJykgOiBudWxsO1xudmFyIG1hcFNpemUgPSBoYXNNYXAgJiYgbWFwU2l6ZURlc2NyaXB0b3IgJiYgdHlwZW9mIG1hcFNpemVEZXNjcmlwdG9yLmdldCA9PT0gJ2Z1bmN0aW9uJyA/IG1hcFNpemVEZXNjcmlwdG9yLmdldCA6IG51bGw7XG52YXIgbWFwRm9yRWFjaCA9IGhhc01hcCAmJiBNYXAucHJvdG90eXBlLmZvckVhY2g7XG52YXIgaGFzU2V0ID0gdHlwZW9mIFNldCA9PT0gJ2Z1bmN0aW9uJyAmJiBTZXQucHJvdG90eXBlO1xudmFyIHNldFNpemVEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiBoYXNTZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFNldC5wcm90b3R5cGUsICdzaXplJykgOiBudWxsO1xudmFyIHNldFNpemUgPSBoYXNTZXQgJiYgc2V0U2l6ZURlc2NyaXB0b3IgJiYgdHlwZW9mIHNldFNpemVEZXNjcmlwdG9yLmdldCA9PT0gJ2Z1bmN0aW9uJyA/IHNldFNpemVEZXNjcmlwdG9yLmdldCA6IG51bGw7XG52YXIgc2V0Rm9yRWFjaCA9IGhhc1NldCAmJiBTZXQucHJvdG90eXBlLmZvckVhY2g7XG52YXIgaGFzV2Vha01hcCA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nICYmIFdlYWtNYXAucHJvdG90eXBlO1xudmFyIHdlYWtNYXBIYXMgPSBoYXNXZWFrTWFwID8gV2Vha01hcC5wcm90b3R5cGUuaGFzIDogbnVsbDtcbnZhciBoYXNXZWFrU2V0ID0gdHlwZW9mIFdlYWtTZXQgPT09ICdmdW5jdGlvbicgJiYgV2Vha1NldC5wcm90b3R5cGU7XG52YXIgd2Vha1NldEhhcyA9IGhhc1dlYWtTZXQgPyBXZWFrU2V0LnByb3RvdHlwZS5oYXMgOiBudWxsO1xudmFyIGJvb2xlYW5WYWx1ZU9mID0gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZjtcbnZhciBvYmplY3RUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgZnVuY3Rpb25Ub1N0cmluZyA9IEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZztcbnZhciBtYXRjaCA9IFN0cmluZy5wcm90b3R5cGUubWF0Y2g7XG52YXIgYmlnSW50VmFsdWVPZiA9IHR5cGVvZiBCaWdJbnQgPT09ICdmdW5jdGlvbicgPyBCaWdJbnQucHJvdG90eXBlLnZhbHVlT2YgOiBudWxsO1xudmFyIGdPUFMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIHN5bVRvU3RyaW5nID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyA/IFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcgOiBudWxsO1xudmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbnZhciBpbnNwZWN0Q3VzdG9tID0gcmVxdWlyZSgnLi91dGlsLmluc3BlY3QnKS5jdXN0b207XG52YXIgaW5zcGVjdFN5bWJvbCA9IGluc3BlY3RDdXN0b20gJiYgaXNTeW1ib2woaW5zcGVjdEN1c3RvbSkgPyBpbnNwZWN0Q3VzdG9tIDogbnVsbDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbnNwZWN0XyhvYmosIG9wdGlvbnMsIGRlcHRoLCBzZWVuKSB7XG4gICAgdmFyIG9wdHMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgaWYgKGhhcyhvcHRzLCAncXVvdGVTdHlsZScpICYmIChvcHRzLnF1b3RlU3R5bGUgIT09ICdzaW5nbGUnICYmIG9wdHMucXVvdGVTdHlsZSAhPT0gJ2RvdWJsZScpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbiBcInF1b3RlU3R5bGVcIiBtdXN0IGJlIFwic2luZ2xlXCIgb3IgXCJkb3VibGVcIicpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICAgIGhhcyhvcHRzLCAnbWF4U3RyaW5nTGVuZ3RoJykgJiYgKHR5cGVvZiBvcHRzLm1heFN0cmluZ0xlbmd0aCA9PT0gJ251bWJlcidcbiAgICAgICAgICAgID8gb3B0cy5tYXhTdHJpbmdMZW5ndGggPCAwICYmIG9wdHMubWF4U3RyaW5nTGVuZ3RoICE9PSBJbmZpbml0eVxuICAgICAgICAgICAgOiBvcHRzLm1heFN0cmluZ0xlbmd0aCAhPT0gbnVsbFxuICAgICAgICApXG4gICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbiBcIm1heFN0cmluZ0xlbmd0aFwiLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIsIEluZmluaXR5LCBvciBgbnVsbGAnKTtcbiAgICB9XG4gICAgdmFyIGN1c3RvbUluc3BlY3QgPSBoYXMob3B0cywgJ2N1c3RvbUluc3BlY3QnKSA/IG9wdHMuY3VzdG9tSW5zcGVjdCA6IHRydWU7XG4gICAgaWYgKHR5cGVvZiBjdXN0b21JbnNwZWN0ICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwiY3VzdG9tSW5zcGVjdFwiLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBgdHJ1ZWAgb3IgYGZhbHNlYCcpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgICAgaGFzKG9wdHMsICdpbmRlbnQnKVxuICAgICAgICAmJiBvcHRzLmluZGVudCAhPT0gbnVsbFxuICAgICAgICAmJiBvcHRzLmluZGVudCAhPT0gJ1xcdCdcbiAgICAgICAgJiYgIShwYXJzZUludChvcHRzLmluZGVudCwgMTApID09PSBvcHRzLmluZGVudCAmJiBvcHRzLmluZGVudCA+IDApXG4gICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbnMgXCJpbmRlbnRcIiBtdXN0IGJlIFwiXFxcXHRcIiwgYW4gaW50ZWdlciA+IDAsIG9yIGBudWxsYCcpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gJ3VuZGVmaW5lZCc7XG4gICAgfVxuICAgIGlmIChvYmogPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuICdudWxsJztcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdib29sZWFuJykge1xuICAgICAgICByZXR1cm4gb2JqID8gJ3RydWUnIDogJ2ZhbHNlJztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGluc3BlY3RTdHJpbmcob2JqLCBvcHRzKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdudW1iZXInKSB7XG4gICAgICAgIGlmIChvYmogPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBJbmZpbml0eSAvIG9iaiA+IDAgPyAnMCcgOiAnLTAnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBTdHJpbmcob2JqKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdiaWdpbnQnKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcob2JqKSArICduJztcbiAgICB9XG5cbiAgICB2YXIgbWF4RGVwdGggPSB0eXBlb2Ygb3B0cy5kZXB0aCA9PT0gJ3VuZGVmaW5lZCcgPyA1IDogb3B0cy5kZXB0aDtcbiAgICBpZiAodHlwZW9mIGRlcHRoID09PSAndW5kZWZpbmVkJykgeyBkZXB0aCA9IDA7IH1cbiAgICBpZiAoZGVwdGggPj0gbWF4RGVwdGggJiYgbWF4RGVwdGggPiAwICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBpc0FycmF5KG9iaikgPyAnW0FycmF5XScgOiAnW09iamVjdF0nO1xuICAgIH1cblxuICAgIHZhciBpbmRlbnQgPSBnZXRJbmRlbnQob3B0cywgZGVwdGgpO1xuXG4gICAgaWYgKHR5cGVvZiBzZWVuID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBzZWVuID0gW107XG4gICAgfSBlbHNlIGlmIChpbmRleE9mKHNlZW4sIG9iaikgPj0gMCkge1xuICAgICAgICByZXR1cm4gJ1tDaXJjdWxhcl0nO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3BlY3QodmFsdWUsIGZyb20sIG5vSW5kZW50KSB7XG4gICAgICAgIGlmIChmcm9tKSB7XG4gICAgICAgICAgICBzZWVuID0gc2Vlbi5zbGljZSgpO1xuICAgICAgICAgICAgc2Vlbi5wdXNoKGZyb20pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub0luZGVudCkge1xuICAgICAgICAgICAgdmFyIG5ld09wdHMgPSB7XG4gICAgICAgICAgICAgICAgZGVwdGg6IG9wdHMuZGVwdGhcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoaGFzKG9wdHMsICdxdW90ZVN0eWxlJykpIHtcbiAgICAgICAgICAgICAgICBuZXdPcHRzLnF1b3RlU3R5bGUgPSBvcHRzLnF1b3RlU3R5bGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaW5zcGVjdF8odmFsdWUsIG5ld09wdHMsIGRlcHRoICsgMSwgc2Vlbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGluc3BlY3RfKHZhbHVlLCBvcHRzLCBkZXB0aCArIDEsIHNlZW4pO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhciBuYW1lID0gbmFtZU9mKG9iaik7XG4gICAgICAgIHZhciBrZXlzID0gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpO1xuICAgICAgICByZXR1cm4gJ1tGdW5jdGlvbicgKyAobmFtZSA/ICc6ICcgKyBuYW1lIDogJyAoYW5vbnltb3VzKScpICsgJ10nICsgKGtleXMubGVuZ3RoID4gMCA/ICcgeyAnICsga2V5cy5qb2luKCcsICcpICsgJyB9JyA6ICcnKTtcbiAgICB9XG4gICAgaWYgKGlzU3ltYm9sKG9iaikpIHtcbiAgICAgICAgdmFyIHN5bVN0cmluZyA9IHN5bVRvU3RyaW5nLmNhbGwob2JqKTtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICdvYmplY3QnID8gbWFya0JveGVkKHN5bVN0cmluZykgOiBzeW1TdHJpbmc7XG4gICAgfVxuICAgIGlmIChpc0VsZW1lbnQob2JqKSkge1xuICAgICAgICB2YXIgcyA9ICc8JyArIFN0cmluZyhvYmoubm9kZU5hbWUpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHZhciBhdHRycyA9IG9iai5hdHRyaWJ1dGVzIHx8IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzICs9ICcgJyArIGF0dHJzW2ldLm5hbWUgKyAnPScgKyB3cmFwUXVvdGVzKHF1b3RlKGF0dHJzW2ldLnZhbHVlKSwgJ2RvdWJsZScsIG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIHMgKz0gJz4nO1xuICAgICAgICBpZiAob2JqLmNoaWxkTm9kZXMgJiYgb2JqLmNoaWxkTm9kZXMubGVuZ3RoKSB7IHMgKz0gJy4uLic7IH1cbiAgICAgICAgcyArPSAnPC8nICsgU3RyaW5nKG9iai5ub2RlTmFtZSkudG9Mb3dlckNhc2UoKSArICc+JztcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICAgIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAgICAgaWYgKG9iai5sZW5ndGggPT09IDApIHsgcmV0dXJuICdbXSc7IH1cbiAgICAgICAgdmFyIHhzID0gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpO1xuICAgICAgICBpZiAoaW5kZW50ICYmICFzaW5nbGVMaW5lVmFsdWVzKHhzKSkge1xuICAgICAgICAgICAgcmV0dXJuICdbJyArIGluZGVudGVkSm9pbih4cywgaW5kZW50KSArICddJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ1sgJyArIHhzLmpvaW4oJywgJykgKyAnIF0nO1xuICAgIH1cbiAgICBpZiAoaXNFcnJvcihvYmopKSB7XG4gICAgICAgIHZhciBwYXJ0cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJ1snICsgU3RyaW5nKG9iaikgKyAnXSc7IH1cbiAgICAgICAgcmV0dXJuICd7IFsnICsgU3RyaW5nKG9iaikgKyAnXSAnICsgcGFydHMuam9pbignLCAnKSArICcgfSc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBjdXN0b21JbnNwZWN0KSB7XG4gICAgICAgIGlmIChpbnNwZWN0U3ltYm9sICYmIHR5cGVvZiBvYmpbaW5zcGVjdFN5bWJvbF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmpbaW5zcGVjdFN5bWJvbF0oKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb2JqLmluc3BlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmouaW5zcGVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc01hcChvYmopKSB7XG4gICAgICAgIHZhciBtYXBQYXJ0cyA9IFtdO1xuICAgICAgICBtYXBGb3JFYWNoLmNhbGwob2JqLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICAgICAgbWFwUGFydHMucHVzaChpbnNwZWN0KGtleSwgb2JqLCB0cnVlKSArICcgPT4gJyArIGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignTWFwJywgbWFwU2l6ZS5jYWxsKG9iaiksIG1hcFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNTZXQob2JqKSkge1xuICAgICAgICB2YXIgc2V0UGFydHMgPSBbXTtcbiAgICAgICAgc2V0Rm9yRWFjaC5jYWxsKG9iaiwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBzZXRQYXJ0cy5wdXNoKGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignU2V0Jywgc2V0U2l6ZS5jYWxsKG9iaiksIHNldFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNXZWFrTWFwKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIHdlYWtDb2xsZWN0aW9uT2YoJ1dlYWtNYXAnKTtcbiAgICB9XG4gICAgaWYgKGlzV2Vha1NldChvYmopKSB7XG4gICAgICAgIHJldHVybiB3ZWFrQ29sbGVjdGlvbk9mKCdXZWFrU2V0Jyk7XG4gICAgfVxuICAgIGlmIChpc051bWJlcihvYmopKSB7XG4gICAgICAgIHJldHVybiBtYXJrQm94ZWQoaW5zcGVjdChOdW1iZXIob2JqKSkpO1xuICAgIH1cbiAgICBpZiAoaXNCaWdJbnQob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGluc3BlY3QoYmlnSW50VmFsdWVPZi5jYWxsKG9iaikpKTtcbiAgICB9XG4gICAgaWYgKGlzQm9vbGVhbihvYmopKSB7XG4gICAgICAgIHJldHVybiBtYXJrQm94ZWQoYm9vbGVhblZhbHVlT2YuY2FsbChvYmopKTtcbiAgICB9XG4gICAgaWYgKGlzU3RyaW5nKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG1hcmtCb3hlZChpbnNwZWN0KFN0cmluZyhvYmopKSk7XG4gICAgfVxuICAgIGlmICghaXNEYXRlKG9iaikgJiYgIWlzUmVnRXhwKG9iaikpIHtcbiAgICAgICAgdmFyIHlzID0gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpO1xuICAgICAgICBpZiAoeXMubGVuZ3RoID09PSAwKSB7IHJldHVybiAne30nOyB9XG4gICAgICAgIGlmIChpbmRlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiAneycgKyBpbmRlbnRlZEpvaW4oeXMsIGluZGVudCkgKyAnfSc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICd7ICcgKyB5cy5qb2luKCcsICcpICsgJyB9JztcbiAgICB9XG4gICAgcmV0dXJuIFN0cmluZyhvYmopO1xufTtcblxuZnVuY3Rpb24gd3JhcFF1b3RlcyhzLCBkZWZhdWx0U3R5bGUsIG9wdHMpIHtcbiAgICB2YXIgcXVvdGVDaGFyID0gKG9wdHMucXVvdGVTdHlsZSB8fCBkZWZhdWx0U3R5bGUpID09PSAnZG91YmxlJyA/ICdcIicgOiBcIidcIjtcbiAgICByZXR1cm4gcXVvdGVDaGFyICsgcyArIHF1b3RlQ2hhcjtcbn1cblxuZnVuY3Rpb24gcXVvdGUocykge1xuICAgIHJldHVybiBTdHJpbmcocykucmVwbGFjZSgvXCIvZywgJyZxdW90OycpO1xufVxuXG5mdW5jdGlvbiBpc0FycmF5KG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJzsgfVxuZnVuY3Rpb24gaXNEYXRlKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgRGF0ZV0nOyB9XG5mdW5jdGlvbiBpc1JlZ0V4cChvYmopIHsgcmV0dXJuIHRvU3RyKG9iaikgPT09ICdbb2JqZWN0IFJlZ0V4cF0nOyB9XG5mdW5jdGlvbiBpc0Vycm9yKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgRXJyb3JdJzsgfVxuZnVuY3Rpb24gaXNTeW1ib2wob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBTeW1ib2xdJzsgfVxuZnVuY3Rpb24gaXNTdHJpbmcob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBTdHJpbmddJzsgfVxuZnVuY3Rpb24gaXNOdW1iZXIob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBOdW1iZXJdJzsgfVxuZnVuY3Rpb24gaXNCaWdJbnQob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBCaWdJbnRdJzsgfVxuZnVuY3Rpb24gaXNCb29sZWFuKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgQm9vbGVhbl0nOyB9XG5cbnZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5IHx8IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGtleSBpbiB0aGlzOyB9O1xuZnVuY3Rpb24gaGFzKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIGhhc093bi5jYWxsKG9iaiwga2V5KTtcbn1cblxuZnVuY3Rpb24gdG9TdHIob2JqKSB7XG4gICAgcmV0dXJuIG9iamVjdFRvU3RyaW5nLmNhbGwob2JqKTtcbn1cblxuZnVuY3Rpb24gbmFtZU9mKGYpIHtcbiAgICBpZiAoZi5uYW1lKSB7IHJldHVybiBmLm5hbWU7IH1cbiAgICB2YXIgbSA9IG1hdGNoLmNhbGwoZnVuY3Rpb25Ub1N0cmluZy5jYWxsKGYpLCAvXmZ1bmN0aW9uXFxzKihbXFx3JF0rKS8pO1xuICAgIGlmIChtKSB7IHJldHVybiBtWzFdOyB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGluZGV4T2YoeHMsIHgpIHtcbiAgICBpZiAoeHMuaW5kZXhPZikgeyByZXR1cm4geHMuaW5kZXhPZih4KTsgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsID0geHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmICh4c1tpXSA9PT0geCkgeyByZXR1cm4gaTsgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG59XG5cbmZ1bmN0aW9uIGlzTWFwKHgpIHtcbiAgICBpZiAoIW1hcFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIE1hcDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha01hcCh4KSB7XG4gICAgaWYgKCF3ZWFrTWFwSGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrTWFwOyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNTZXQoeCkge1xuICAgIGlmICghc2V0U2l6ZSB8fCAheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBzZXRTaXplLmNhbGwoeCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBtYXBTaXplLmNhbGwoeCk7XG4gICAgICAgIH0gY2F0Y2ggKG0pIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4IGluc3RhbmNlb2YgU2V0OyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNXZWFrU2V0KHgpIHtcbiAgICBpZiAoIXdlYWtTZXRIYXMgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgd2Vha1NldEhhcy5jYWxsKHgsIHdlYWtTZXRIYXMpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgd2Vha01hcEhhcy5jYWxsKHgsIHdlYWtNYXBIYXMpO1xuICAgICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIFdlYWtTZXQ7IC8vIGNvcmUtanMgd29ya2Fyb3VuZCwgcHJlLXYyLjUuMFxuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0VsZW1lbnQoeCkge1xuICAgIGlmICgheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgaWYgKHR5cGVvZiBIVE1MRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgeCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdHlwZW9mIHgubm9kZU5hbWUgPT09ICdzdHJpbmcnICYmIHR5cGVvZiB4LmdldEF0dHJpYnV0ZSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZnVuY3Rpb24gaW5zcGVjdFN0cmluZyhzdHIsIG9wdHMpIHtcbiAgICBpZiAoc3RyLmxlbmd0aCA+IG9wdHMubWF4U3RyaW5nTGVuZ3RoKSB7XG4gICAgICAgIHZhciByZW1haW5pbmcgPSBzdHIubGVuZ3RoIC0gb3B0cy5tYXhTdHJpbmdMZW5ndGg7XG4gICAgICAgIHZhciB0cmFpbGVyID0gJy4uLiAnICsgcmVtYWluaW5nICsgJyBtb3JlIGNoYXJhY3RlcicgKyAocmVtYWluaW5nID4gMSA/ICdzJyA6ICcnKTtcbiAgICAgICAgcmV0dXJuIGluc3BlY3RTdHJpbmcoc3RyLnNsaWNlKDAsIG9wdHMubWF4U3RyaW5nTGVuZ3RoKSwgb3B0cykgKyB0cmFpbGVyO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udHJvbC1yZWdleFxuICAgIHZhciBzID0gc3RyLnJlcGxhY2UoLyhbJ1xcXFxdKS9nLCAnXFxcXCQxJykucmVwbGFjZSgvW1xceDAwLVxceDFmXS9nLCBsb3dieXRlKTtcbiAgICByZXR1cm4gd3JhcFF1b3RlcyhzLCAnc2luZ2xlJywgb3B0cyk7XG59XG5cbmZ1bmN0aW9uIGxvd2J5dGUoYykge1xuICAgIHZhciBuID0gYy5jaGFyQ29kZUF0KDApO1xuICAgIHZhciB4ID0ge1xuICAgICAgICA4OiAnYicsXG4gICAgICAgIDk6ICd0JyxcbiAgICAgICAgMTA6ICduJyxcbiAgICAgICAgMTI6ICdmJyxcbiAgICAgICAgMTM6ICdyJ1xuICAgIH1bbl07XG4gICAgaWYgKHgpIHsgcmV0dXJuICdcXFxcJyArIHg7IH1cbiAgICByZXR1cm4gJ1xcXFx4JyArIChuIDwgMHgxMCA/ICcwJyA6ICcnKSArIG4udG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG59XG5cbmZ1bmN0aW9uIG1hcmtCb3hlZChzdHIpIHtcbiAgICByZXR1cm4gJ09iamVjdCgnICsgc3RyICsgJyknO1xufVxuXG5mdW5jdGlvbiB3ZWFrQ29sbGVjdGlvbk9mKHR5cGUpIHtcbiAgICByZXR1cm4gdHlwZSArICcgeyA/IH0nO1xufVxuXG5mdW5jdGlvbiBjb2xsZWN0aW9uT2YodHlwZSwgc2l6ZSwgZW50cmllcywgaW5kZW50KSB7XG4gICAgdmFyIGpvaW5lZEVudHJpZXMgPSBpbmRlbnQgPyBpbmRlbnRlZEpvaW4oZW50cmllcywgaW5kZW50KSA6IGVudHJpZXMuam9pbignLCAnKTtcbiAgICByZXR1cm4gdHlwZSArICcgKCcgKyBzaXplICsgJykgeycgKyBqb2luZWRFbnRyaWVzICsgJ30nO1xufVxuXG5mdW5jdGlvbiBzaW5nbGVMaW5lVmFsdWVzKHhzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaW5kZXhPZih4c1tpXSwgJ1xcbicpID49IDApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZ2V0SW5kZW50KG9wdHMsIGRlcHRoKSB7XG4gICAgdmFyIGJhc2VJbmRlbnQ7XG4gICAgaWYgKG9wdHMuaW5kZW50ID09PSAnXFx0Jykge1xuICAgICAgICBiYXNlSW5kZW50ID0gJ1xcdCc7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0cy5pbmRlbnQgPT09ICdudW1iZXInICYmIG9wdHMuaW5kZW50ID4gMCkge1xuICAgICAgICBiYXNlSW5kZW50ID0gQXJyYXkob3B0cy5pbmRlbnQgKyAxKS5qb2luKCcgJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGJhc2U6IGJhc2VJbmRlbnQsXG4gICAgICAgIHByZXY6IEFycmF5KGRlcHRoICsgMSkuam9pbihiYXNlSW5kZW50KVxuICAgIH07XG59XG5cbmZ1bmN0aW9uIGluZGVudGVkSm9pbih4cywgaW5kZW50KSB7XG4gICAgaWYgKHhzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJyc7IH1cbiAgICB2YXIgbGluZUpvaW5lciA9ICdcXG4nICsgaW5kZW50LnByZXYgKyBpbmRlbnQuYmFzZTtcbiAgICByZXR1cm4gbGluZUpvaW5lciArIHhzLmpvaW4oJywnICsgbGluZUpvaW5lcikgKyAnXFxuJyArIGluZGVudC5wcmV2O1xufVxuXG5mdW5jdGlvbiBhcnJPYmpLZXlzKG9iaiwgaW5zcGVjdCkge1xuICAgIHZhciBpc0FyciA9IGlzQXJyYXkob2JqKTtcbiAgICB2YXIgeHMgPSBbXTtcbiAgICBpZiAoaXNBcnIpIHtcbiAgICAgICAgeHMubGVuZ3RoID0gb2JqLmxlbmd0aDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmoubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHhzW2ldID0gaGFzKG9iaiwgaSkgPyBpbnNwZWN0KG9ialtpXSwgb2JqKSA6ICcnO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICBpZiAoIWhhcyhvYmosIGtleSkpIHsgY29udGludWU7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCwgbm8tY29udGludWVcbiAgICAgICAgaWYgKGlzQXJyICYmIFN0cmluZyhOdW1iZXIoa2V5KSkgPT09IGtleSAmJiBrZXkgPCBvYmoubGVuZ3RoKSB7IGNvbnRpbnVlOyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXgsIG5vLWNvbnRpbnVlXG4gICAgICAgIGlmICgoL1teXFx3JF0vKS50ZXN0KGtleSkpIHtcbiAgICAgICAgICAgIHhzLnB1c2goaW5zcGVjdChrZXksIG9iaikgKyAnOiAnICsgaW5zcGVjdChvYmpba2V5XSwgb2JqKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB4cy5wdXNoKGtleSArICc6ICcgKyBpbnNwZWN0KG9ialtrZXldLCBvYmopKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAodHlwZW9mIGdPUFMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFyIHN5bXMgPSBnT1BTKG9iaik7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc3ltcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgaWYgKGlzRW51bWVyYWJsZS5jYWxsKG9iaiwgc3ltc1tqXSkpIHtcbiAgICAgICAgICAgICAgICB4cy5wdXNoKCdbJyArIGluc3BlY3Qoc3ltc1tqXSkgKyAnXTogJyArIGluc3BlY3Qob2JqW3N5bXNbal1dLCBvYmopKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geHM7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG52YXIgY2FsbEJvdW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kL2NhbGxCb3VuZCcpO1xudmFyIGluc3BlY3QgPSByZXF1aXJlKCdvYmplY3QtaW5zcGVjdCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcbnZhciAkV2Vha01hcCA9IEdldEludHJpbnNpYygnJVdlYWtNYXAlJywgdHJ1ZSk7XG52YXIgJE1hcCA9IEdldEludHJpbnNpYygnJU1hcCUnLCB0cnVlKTtcblxudmFyICR3ZWFrTWFwR2V0ID0gY2FsbEJvdW5kKCdXZWFrTWFwLnByb3RvdHlwZS5nZXQnLCB0cnVlKTtcbnZhciAkd2Vha01hcFNldCA9IGNhbGxCb3VuZCgnV2Vha01hcC5wcm90b3R5cGUuc2V0JywgdHJ1ZSk7XG52YXIgJHdlYWtNYXBIYXMgPSBjYWxsQm91bmQoJ1dlYWtNYXAucHJvdG90eXBlLmhhcycsIHRydWUpO1xudmFyICRtYXBHZXQgPSBjYWxsQm91bmQoJ01hcC5wcm90b3R5cGUuZ2V0JywgdHJ1ZSk7XG52YXIgJG1hcFNldCA9IGNhbGxCb3VuZCgnTWFwLnByb3RvdHlwZS5zZXQnLCB0cnVlKTtcbnZhciAkbWFwSGFzID0gY2FsbEJvdW5kKCdNYXAucHJvdG90eXBlLmhhcycsIHRydWUpO1xuXG4vKlxuICogVGhpcyBmdW5jdGlvbiB0cmF2ZXJzZXMgdGhlIGxpc3QgcmV0dXJuaW5nIHRoZSBub2RlIGNvcnJlc3BvbmRpbmcgdG8gdGhlXG4gKiBnaXZlbiBrZXkuXG4gKlxuICogVGhhdCBub2RlIGlzIGFsc28gbW92ZWQgdG8gdGhlIGhlYWQgb2YgdGhlIGxpc3QsIHNvIHRoYXQgaWYgaXQncyBhY2Nlc3NlZFxuICogYWdhaW4gd2UgZG9uJ3QgbmVlZCB0byB0cmF2ZXJzZSB0aGUgd2hvbGUgbGlzdC4gQnkgZG9pbmcgc28sIGFsbCB0aGUgcmVjZW50bHlcbiAqIHVzZWQgbm9kZXMgY2FuIGJlIGFjY2Vzc2VkIHJlbGF0aXZlbHkgcXVpY2tseS5cbiAqL1xudmFyIGxpc3RHZXROb2RlID0gZnVuY3Rpb24gKGxpc3QsIGtleSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG5cdGZvciAodmFyIHByZXYgPSBsaXN0LCBjdXJyOyAoY3VyciA9IHByZXYubmV4dCkgIT09IG51bGw7IHByZXYgPSBjdXJyKSB7XG5cdFx0aWYgKGN1cnIua2V5ID09PSBrZXkpIHtcblx0XHRcdHByZXYubmV4dCA9IGN1cnIubmV4dDtcblx0XHRcdGN1cnIubmV4dCA9IGxpc3QubmV4dDtcblx0XHRcdGxpc3QubmV4dCA9IGN1cnI7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cblx0XHRcdHJldHVybiBjdXJyO1xuXHRcdH1cblx0fVxufTtcblxudmFyIGxpc3RHZXQgPSBmdW5jdGlvbiAob2JqZWN0cywga2V5KSB7XG5cdHZhciBub2RlID0gbGlzdEdldE5vZGUob2JqZWN0cywga2V5KTtcblx0cmV0dXJuIG5vZGUgJiYgbm9kZS52YWx1ZTtcbn07XG52YXIgbGlzdFNldCA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXksIHZhbHVlKSB7XG5cdHZhciBub2RlID0gbGlzdEdldE5vZGUob2JqZWN0cywga2V5KTtcblx0aWYgKG5vZGUpIHtcblx0XHRub2RlLnZhbHVlID0gdmFsdWU7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gUHJlcGVuZCB0aGUgbmV3IG5vZGUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdFxuXHRcdG9iamVjdHMubmV4dCA9IHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdFx0a2V5OiBrZXksXG5cdFx0XHRuZXh0OiBvYmplY3RzLm5leHQsXG5cdFx0XHR2YWx1ZTogdmFsdWVcblx0XHR9O1xuXHR9XG59O1xudmFyIGxpc3RIYXMgPSBmdW5jdGlvbiAob2JqZWN0cywga2V5KSB7XG5cdHJldHVybiAhIWxpc3RHZXROb2RlKG9iamVjdHMsIGtleSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFNpZGVDaGFubmVsKCkge1xuXHR2YXIgJHdtO1xuXHR2YXIgJG07XG5cdHZhciAkbztcblx0dmFyIGNoYW5uZWwgPSB7XG5cdFx0YXNzZXJ0OiBmdW5jdGlvbiAoa2V5KSB7XG5cdFx0XHRpZiAoIWNoYW5uZWwuaGFzKGtleSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1NpZGUgY2hhbm5lbCBkb2VzIG5vdCBjb250YWluICcgKyBpbnNwZWN0KGtleSkpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0Z2V0OiBmdW5jdGlvbiAoa2V5KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0XHRcdGlmICgkV2Vha01hcCAmJiBrZXkgJiYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBrZXkgPT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRcdGlmICgkd20pIHtcblx0XHRcdFx0XHRyZXR1cm4gJHdlYWtNYXBHZXQoJHdtLCBrZXkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKCRNYXApIHtcblx0XHRcdFx0aWYgKCRtKSB7XG5cdFx0XHRcdFx0cmV0dXJuICRtYXBHZXQoJG0sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmICgkbykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWxvbmVseS1pZlxuXHRcdFx0XHRcdHJldHVybiBsaXN0R2V0KCRvLCBrZXkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRoYXM6IGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdGlmICgkV2Vha01hcCAmJiBrZXkgJiYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBrZXkgPT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRcdGlmICgkd20pIHtcblx0XHRcdFx0XHRyZXR1cm4gJHdlYWtNYXBIYXMoJHdtLCBrZXkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKCRNYXApIHtcblx0XHRcdFx0aWYgKCRtKSB7XG5cdFx0XHRcdFx0cmV0dXJuICRtYXBIYXMoJG0sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmICgkbykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWxvbmVseS1pZlxuXHRcdFx0XHRcdHJldHVybiBsaXN0SGFzKCRvLCBrZXkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG5cdFx0XHRpZiAoJFdlYWtNYXAgJiYga2V5ICYmICh0eXBlb2Yga2V5ID09PSAnb2JqZWN0JyB8fCB0eXBlb2Yga2V5ID09PSAnZnVuY3Rpb24nKSkge1xuXHRcdFx0XHRpZiAoISR3bSkge1xuXHRcdFx0XHRcdCR3bSA9IG5ldyAkV2Vha01hcCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCR3ZWFrTWFwU2V0KCR3bSwga2V5LCB2YWx1ZSk7XG5cdFx0XHR9IGVsc2UgaWYgKCRNYXApIHtcblx0XHRcdFx0aWYgKCEkbSkge1xuXHRcdFx0XHRcdCRtID0gbmV3ICRNYXAoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQkbWFwU2V0KCRtLCBrZXksIHZhbHVlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmICghJG8pIHtcblx0XHRcdFx0XHQvKlxuXHRcdFx0XHRcdCAqIEluaXRpYWxpemUgdGhlIGxpbmtlZCBsaXN0IGFzIGFuIGVtcHR5IG5vZGUsIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZVxuXHRcdFx0XHRcdCAqIHRvIHNwZWNpYWwtY2FzZSBoYW5kbGluZyBvZiB0aGUgZmlyc3Qgbm9kZTogd2UgY2FuIGFsd2F5cyByZWZlciB0b1xuXHRcdFx0XHRcdCAqIGl0IGFzIChwcmV2aW91cyBub2RlKS5uZXh0LCBpbnN0ZWFkIG9mIHNvbWV0aGluZyBsaWtlIChsaXN0KS5oZWFkXG5cdFx0XHRcdFx0ICovXG5cdFx0XHRcdFx0JG8gPSB7IGtleToge30sIG5leHQ6IG51bGwgfTtcblx0XHRcdFx0fVxuXHRcdFx0XHRsaXN0U2V0KCRvLCBrZXksIHZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdHJldHVybiBjaGFubmVsO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHJlcGxhY2UgPSBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2U7XG52YXIgcGVyY2VudFR3ZW50aWVzID0gLyUyMC9nO1xuXG52YXIgRm9ybWF0ID0ge1xuICAgIFJGQzE3Mzg6ICdSRkMxNzM4JyxcbiAgICBSRkMzOTg2OiAnUkZDMzk4Nidcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgICdkZWZhdWx0JzogRm9ybWF0LlJGQzM5ODYsXG4gICAgZm9ybWF0dGVyczoge1xuICAgICAgICBSRkMxNzM4OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiByZXBsYWNlLmNhbGwodmFsdWUsIHBlcmNlbnRUd2VudGllcywgJysnKTtcbiAgICAgICAgfSxcbiAgICAgICAgUkZDMzk4NjogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgUkZDMTczODogRm9ybWF0LlJGQzE3MzgsXG4gICAgUkZDMzk4NjogRm9ybWF0LlJGQzM5ODZcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBmb3JtYXRzID0gcmVxdWlyZSgnLi9mb3JtYXRzJyk7XG5cbnZhciBoYXMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG52YXIgaGV4VGFibGUgPSAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgICAgICAgYXJyYXkucHVzaCgnJScgKyAoKGkgPCAxNiA/ICcwJyA6ICcnKSArIGkudG9TdHJpbmcoMTYpKS50b1VwcGVyQ2FzZSgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJyYXk7XG59KCkpO1xuXG52YXIgY29tcGFjdFF1ZXVlID0gZnVuY3Rpb24gY29tcGFjdFF1ZXVlKHF1ZXVlKSB7XG4gICAgd2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgdmFyIGl0ZW0gPSBxdWV1ZS5wb3AoKTtcbiAgICAgICAgdmFyIG9iaiA9IGl0ZW0ub2JqW2l0ZW0ucHJvcF07XG5cbiAgICAgICAgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgICAgICAgICAgdmFyIGNvbXBhY3RlZCA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG9iai5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqW2pdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBjb21wYWN0ZWQucHVzaChvYmpbal0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaXRlbS5vYmpbaXRlbS5wcm9wXSA9IGNvbXBhY3RlZDtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbnZhciBhcnJheVRvT2JqZWN0ID0gZnVuY3Rpb24gYXJyYXlUb09iamVjdChzb3VyY2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgb2JqID0gb3B0aW9ucyAmJiBvcHRpb25zLnBsYWluT2JqZWN0cyA/IE9iamVjdC5jcmVhdGUobnVsbCkgOiB7fTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNvdXJjZS5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAodHlwZW9mIHNvdXJjZVtpXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIG9ialtpXSA9IHNvdXJjZVtpXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvYmo7XG59O1xuXG52YXIgbWVyZ2UgPSBmdW5jdGlvbiBtZXJnZSh0YXJnZXQsIHNvdXJjZSwgb3B0aW9ucykge1xuICAgIC8qIGVzbGludCBuby1wYXJhbS1yZWFzc2lnbjogMCAqL1xuICAgIGlmICghc291cmNlKSB7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBzb3VyY2UgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChpc0FycmF5KHRhcmdldCkpIHtcbiAgICAgICAgICAgIHRhcmdldC5wdXNoKHNvdXJjZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0ICYmIHR5cGVvZiB0YXJnZXQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBpZiAoKG9wdGlvbnMgJiYgKG9wdGlvbnMucGxhaW5PYmplY3RzIHx8IG9wdGlvbnMuYWxsb3dQcm90b3R5cGVzKSkgfHwgIWhhcy5jYWxsKE9iamVjdC5wcm90b3R5cGUsIHNvdXJjZSkpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRbc291cmNlXSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gW3RhcmdldCwgc291cmNlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuXG4gICAgaWYgKCF0YXJnZXQgfHwgdHlwZW9mIHRhcmdldCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIFt0YXJnZXRdLmNvbmNhdChzb3VyY2UpO1xuICAgIH1cblxuICAgIHZhciBtZXJnZVRhcmdldCA9IHRhcmdldDtcbiAgICBpZiAoaXNBcnJheSh0YXJnZXQpICYmICFpc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgICAgbWVyZ2VUYXJnZXQgPSBhcnJheVRvT2JqZWN0KHRhcmdldCwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKGlzQXJyYXkodGFyZ2V0KSAmJiBpc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgICAgc291cmNlLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGkpIHtcbiAgICAgICAgICAgIGlmIChoYXMuY2FsbCh0YXJnZXQsIGkpKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRhcmdldEl0ZW0gPSB0YXJnZXRbaV07XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldEl0ZW0gJiYgdHlwZW9mIHRhcmdldEl0ZW0gPT09ICdvYmplY3QnICYmIGl0ZW0gJiYgdHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFtpXSA9IG1lcmdlKHRhcmdldEl0ZW0sIGl0ZW0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0W2ldID0gaXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHNvdXJjZSkucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGtleSkge1xuICAgICAgICB2YXIgdmFsdWUgPSBzb3VyY2Vba2V5XTtcblxuICAgICAgICBpZiAoaGFzLmNhbGwoYWNjLCBrZXkpKSB7XG4gICAgICAgICAgICBhY2Nba2V5XSA9IG1lcmdlKGFjY1trZXldLCB2YWx1ZSwgb3B0aW9ucyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhY2Nba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgbWVyZ2VUYXJnZXQpO1xufTtcblxudmFyIGFzc2lnbiA9IGZ1bmN0aW9uIGFzc2lnblNpbmdsZVNvdXJjZSh0YXJnZXQsIHNvdXJjZSkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhzb3VyY2UpLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBrZXkpIHtcbiAgICAgICAgYWNjW2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB0YXJnZXQpO1xufTtcblxudmFyIGRlY29kZSA9IGZ1bmN0aW9uIChzdHIsIGRlY29kZXIsIGNoYXJzZXQpIHtcbiAgICB2YXIgc3RyV2l0aG91dFBsdXMgPSBzdHIucmVwbGFjZSgvXFwrL2csICcgJyk7XG4gICAgaWYgKGNoYXJzZXQgPT09ICdpc28tODg1OS0xJykge1xuICAgICAgICAvLyB1bmVzY2FwZSBuZXZlciB0aHJvd3MsIG5vIHRyeS4uLmNhdGNoIG5lZWRlZDpcbiAgICAgICAgcmV0dXJuIHN0cldpdGhvdXRQbHVzLnJlcGxhY2UoLyVbMC05YS1mXXsyfS9naSwgdW5lc2NhcGUpO1xuICAgIH1cbiAgICAvLyB1dGYtOFxuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoc3RyV2l0aG91dFBsdXMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHN0cldpdGhvdXRQbHVzO1xuICAgIH1cbn07XG5cbnZhciBlbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUoc3RyLCBkZWZhdWx0RW5jb2RlciwgY2hhcnNldCwga2luZCwgZm9ybWF0KSB7XG4gICAgLy8gVGhpcyBjb2RlIHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gYnkgQnJpYW4gV2hpdGUgKG1zY2RleCkgZm9yIHRoZSBpby5qcyBjb3JlIHF1ZXJ5c3RyaW5nIGxpYnJhcnkuXG4gICAgLy8gSXQgaGFzIGJlZW4gYWRhcHRlZCBoZXJlIGZvciBzdHJpY3RlciBhZGhlcmVuY2UgdG8gUkZDIDM5ODZcbiAgICBpZiAoc3RyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gc3RyO1xuICAgIH1cblxuICAgIHZhciBzdHJpbmcgPSBzdHI7XG4gICAgaWYgKHR5cGVvZiBzdHIgPT09ICdzeW1ib2wnKSB7XG4gICAgICAgIHN0cmluZyA9IFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzdHIpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgc3RyaW5nID0gU3RyaW5nKHN0cik7XG4gICAgfVxuXG4gICAgaWYgKGNoYXJzZXQgPT09ICdpc28tODg1OS0xJykge1xuICAgICAgICByZXR1cm4gZXNjYXBlKHN0cmluZykucmVwbGFjZSgvJXVbMC05YS1mXXs0fS9naSwgZnVuY3Rpb24gKCQwKSB7XG4gICAgICAgICAgICByZXR1cm4gJyUyNiUyMycgKyBwYXJzZUludCgkMC5zbGljZSgyKSwgMTYpICsgJyUzQic7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhciBvdXQgPSAnJztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgYyA9IHN0cmluZy5jaGFyQ29kZUF0KGkpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGMgPT09IDB4MkQgLy8gLVxuICAgICAgICAgICAgfHwgYyA9PT0gMHgyRSAvLyAuXG4gICAgICAgICAgICB8fCBjID09PSAweDVGIC8vIF9cbiAgICAgICAgICAgIHx8IGMgPT09IDB4N0UgLy8gflxuICAgICAgICAgICAgfHwgKGMgPj0gMHgzMCAmJiBjIDw9IDB4MzkpIC8vIDAtOVxuICAgICAgICAgICAgfHwgKGMgPj0gMHg0MSAmJiBjIDw9IDB4NUEpIC8vIGEtelxuICAgICAgICAgICAgfHwgKGMgPj0gMHg2MSAmJiBjIDw9IDB4N0EpIC8vIEEtWlxuICAgICAgICAgICAgfHwgKGZvcm1hdCA9PT0gZm9ybWF0cy5SRkMxNzM4ICYmIChjID09PSAweDI4IHx8IGMgPT09IDB4MjkpKSAvLyAoIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBvdXQgKz0gc3RyaW5nLmNoYXJBdChpKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGMgPCAweDgwKSB7XG4gICAgICAgICAgICBvdXQgPSBvdXQgKyBoZXhUYWJsZVtjXTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGMgPCAweDgwMCkge1xuICAgICAgICAgICAgb3V0ID0gb3V0ICsgKGhleFRhYmxlWzB4QzAgfCAoYyA+PiA2KV0gKyBoZXhUYWJsZVsweDgwIHwgKGMgJiAweDNGKV0pO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYyA8IDB4RDgwMCB8fCBjID49IDB4RTAwMCkge1xuICAgICAgICAgICAgb3V0ID0gb3V0ICsgKGhleFRhYmxlWzB4RTAgfCAoYyA+PiAxMildICsgaGV4VGFibGVbMHg4MCB8ICgoYyA+PiA2KSAmIDB4M0YpXSArIGhleFRhYmxlWzB4ODAgfCAoYyAmIDB4M0YpXSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGkgKz0gMTtcbiAgICAgICAgYyA9IDB4MTAwMDAgKyAoKChjICYgMHgzRkYpIDw8IDEwKSB8IChzdHJpbmcuY2hhckNvZGVBdChpKSAmIDB4M0ZGKSk7XG4gICAgICAgIG91dCArPSBoZXhUYWJsZVsweEYwIHwgKGMgPj4gMTgpXVxuICAgICAgICAgICAgKyBoZXhUYWJsZVsweDgwIHwgKChjID4+IDEyKSAmIDB4M0YpXVxuICAgICAgICAgICAgKyBoZXhUYWJsZVsweDgwIHwgKChjID4+IDYpICYgMHgzRildXG4gICAgICAgICAgICArIGhleFRhYmxlWzB4ODAgfCAoYyAmIDB4M0YpXTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0O1xufTtcblxudmFyIGNvbXBhY3QgPSBmdW5jdGlvbiBjb21wYWN0KHZhbHVlKSB7XG4gICAgdmFyIHF1ZXVlID0gW3sgb2JqOiB7IG86IHZhbHVlIH0sIHByb3A6ICdvJyB9XTtcbiAgICB2YXIgcmVmcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgaXRlbSA9IHF1ZXVlW2ldO1xuICAgICAgICB2YXIgb2JqID0gaXRlbS5vYmpbaXRlbS5wcm9wXTtcblxuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwga2V5cy5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbal07XG4gICAgICAgICAgICB2YXIgdmFsID0gb2JqW2tleV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgdmFsICE9PSBudWxsICYmIHJlZnMuaW5kZXhPZih2YWwpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHF1ZXVlLnB1c2goeyBvYmo6IG9iaiwgcHJvcDoga2V5IH0pO1xuICAgICAgICAgICAgICAgIHJlZnMucHVzaCh2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29tcGFjdFF1ZXVlKHF1ZXVlKTtcblxuICAgIHJldHVybiB2YWx1ZTtcbn07XG5cbnZhciBpc1JlZ0V4cCA9IGZ1bmN0aW9uIGlzUmVnRXhwKG9iaikge1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7XG59O1xuXG52YXIgaXNCdWZmZXIgPSBmdW5jdGlvbiBpc0J1ZmZlcihvYmopIHtcbiAgICBpZiAoIW9iaiB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuICEhKG9iai5jb25zdHJ1Y3RvciAmJiBvYmouY29uc3RydWN0b3IuaXNCdWZmZXIgJiYgb2JqLmNvbnN0cnVjdG9yLmlzQnVmZmVyKG9iaikpO1xufTtcblxudmFyIGNvbWJpbmUgPSBmdW5jdGlvbiBjb21iaW5lKGEsIGIpIHtcbiAgICByZXR1cm4gW10uY29uY2F0KGEsIGIpO1xufTtcblxudmFyIG1heWJlTWFwID0gZnVuY3Rpb24gbWF5YmVNYXAodmFsLCBmbikge1xuICAgIGlmIChpc0FycmF5KHZhbCkpIHtcbiAgICAgICAgdmFyIG1hcHBlZCA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgbWFwcGVkLnB1c2goZm4odmFsW2ldKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1hcHBlZDtcbiAgICB9XG4gICAgcmV0dXJuIGZuKHZhbCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBhcnJheVRvT2JqZWN0OiBhcnJheVRvT2JqZWN0LFxuICAgIGFzc2lnbjogYXNzaWduLFxuICAgIGNvbWJpbmU6IGNvbWJpbmUsXG4gICAgY29tcGFjdDogY29tcGFjdCxcbiAgICBkZWNvZGU6IGRlY29kZSxcbiAgICBlbmNvZGU6IGVuY29kZSxcbiAgICBpc0J1ZmZlcjogaXNCdWZmZXIsXG4gICAgaXNSZWdFeHA6IGlzUmVnRXhwLFxuICAgIG1heWJlTWFwOiBtYXliZU1hcCxcbiAgICBtZXJnZTogbWVyZ2Vcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBnZXRTaWRlQ2hhbm5lbCA9IHJlcXVpcmUoJ3NpZGUtY2hhbm5lbCcpO1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGZvcm1hdHMgPSByZXF1aXJlKCcuL2Zvcm1hdHMnKTtcbnZhciBoYXMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG52YXIgYXJyYXlQcmVmaXhHZW5lcmF0b3JzID0ge1xuICAgIGJyYWNrZXRzOiBmdW5jdGlvbiBicmFja2V0cyhwcmVmaXgpIHtcbiAgICAgICAgcmV0dXJuIHByZWZpeCArICdbXSc7XG4gICAgfSxcbiAgICBjb21tYTogJ2NvbW1hJyxcbiAgICBpbmRpY2VzOiBmdW5jdGlvbiBpbmRpY2VzKHByZWZpeCwga2V5KSB7XG4gICAgICAgIHJldHVybiBwcmVmaXggKyAnWycgKyBrZXkgKyAnXSc7XG4gICAgfSxcbiAgICByZXBlYXQ6IGZ1bmN0aW9uIHJlcGVhdChwcmVmaXgpIHtcbiAgICAgICAgcmV0dXJuIHByZWZpeDtcbiAgICB9XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG52YXIgcHVzaCA9IEFycmF5LnByb3RvdHlwZS5wdXNoO1xudmFyIHB1c2hUb0FycmF5ID0gZnVuY3Rpb24gKGFyciwgdmFsdWVPckFycmF5KSB7XG4gICAgcHVzaC5hcHBseShhcnIsIGlzQXJyYXkodmFsdWVPckFycmF5KSA/IHZhbHVlT3JBcnJheSA6IFt2YWx1ZU9yQXJyYXldKTtcbn07XG5cbnZhciB0b0lTTyA9IERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nO1xuXG52YXIgZGVmYXVsdEZvcm1hdCA9IGZvcm1hdHNbJ2RlZmF1bHQnXTtcbnZhciBkZWZhdWx0cyA9IHtcbiAgICBhZGRRdWVyeVByZWZpeDogZmFsc2UsXG4gICAgYWxsb3dEb3RzOiBmYWxzZSxcbiAgICBjaGFyc2V0OiAndXRmLTgnLFxuICAgIGNoYXJzZXRTZW50aW5lbDogZmFsc2UsXG4gICAgZGVsaW1pdGVyOiAnJicsXG4gICAgZW5jb2RlOiB0cnVlLFxuICAgIGVuY29kZXI6IHV0aWxzLmVuY29kZSxcbiAgICBlbmNvZGVWYWx1ZXNPbmx5OiBmYWxzZSxcbiAgICBmb3JtYXQ6IGRlZmF1bHRGb3JtYXQsXG4gICAgZm9ybWF0dGVyOiBmb3JtYXRzLmZvcm1hdHRlcnNbZGVmYXVsdEZvcm1hdF0sXG4gICAgLy8gZGVwcmVjYXRlZFxuICAgIGluZGljZXM6IGZhbHNlLFxuICAgIHNlcmlhbGl6ZURhdGU6IGZ1bmN0aW9uIHNlcmlhbGl6ZURhdGUoZGF0ZSkge1xuICAgICAgICByZXR1cm4gdG9JU08uY2FsbChkYXRlKTtcbiAgICB9LFxuICAgIHNraXBOdWxsczogZmFsc2UsXG4gICAgc3RyaWN0TnVsbEhhbmRsaW5nOiBmYWxzZVxufTtcblxudmFyIGlzTm9uTnVsbGlzaFByaW1pdGl2ZSA9IGZ1bmN0aW9uIGlzTm9uTnVsbGlzaFByaW1pdGl2ZSh2KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2ID09PSAnc3RyaW5nJ1xuICAgICAgICB8fCB0eXBlb2YgdiA9PT0gJ251bWJlcidcbiAgICAgICAgfHwgdHlwZW9mIHYgPT09ICdib29sZWFuJ1xuICAgICAgICB8fCB0eXBlb2YgdiA9PT0gJ3N5bWJvbCdcbiAgICAgICAgfHwgdHlwZW9mIHYgPT09ICdiaWdpbnQnO1xufTtcblxudmFyIHN0cmluZ2lmeSA9IGZ1bmN0aW9uIHN0cmluZ2lmeShcbiAgICBvYmplY3QsXG4gICAgcHJlZml4LFxuICAgIGdlbmVyYXRlQXJyYXlQcmVmaXgsXG4gICAgc3RyaWN0TnVsbEhhbmRsaW5nLFxuICAgIHNraXBOdWxscyxcbiAgICBlbmNvZGVyLFxuICAgIGZpbHRlcixcbiAgICBzb3J0LFxuICAgIGFsbG93RG90cyxcbiAgICBzZXJpYWxpemVEYXRlLFxuICAgIGZvcm1hdCxcbiAgICBmb3JtYXR0ZXIsXG4gICAgZW5jb2RlVmFsdWVzT25seSxcbiAgICBjaGFyc2V0LFxuICAgIHNpZGVDaGFubmVsXG4pIHtcbiAgICB2YXIgb2JqID0gb2JqZWN0O1xuXG4gICAgaWYgKHNpZGVDaGFubmVsLmhhcyhvYmplY3QpKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdDeWNsaWMgb2JqZWN0IHZhbHVlJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmaWx0ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb2JqID0gZmlsdGVyKHByZWZpeCwgb2JqKTtcbiAgICB9IGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgb2JqID0gc2VyaWFsaXplRGF0ZShvYmopO1xuICAgIH0gZWxzZSBpZiAoZ2VuZXJhdGVBcnJheVByZWZpeCA9PT0gJ2NvbW1hJyAmJiBpc0FycmF5KG9iaikpIHtcbiAgICAgICAgb2JqID0gdXRpbHMubWF5YmVNYXAob2JqLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplRGF0ZSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChvYmogPT09IG51bGwpIHtcbiAgICAgICAgaWYgKHN0cmljdE51bGxIYW5kbGluZykge1xuICAgICAgICAgICAgcmV0dXJuIGVuY29kZXIgJiYgIWVuY29kZVZhbHVlc09ubHkgPyBlbmNvZGVyKHByZWZpeCwgZGVmYXVsdHMuZW5jb2RlciwgY2hhcnNldCwgJ2tleScsIGZvcm1hdCkgOiBwcmVmaXg7XG4gICAgICAgIH1cblxuICAgICAgICBvYmogPSAnJztcbiAgICB9XG5cbiAgICBpZiAoaXNOb25OdWxsaXNoUHJpbWl0aXZlKG9iaikgfHwgdXRpbHMuaXNCdWZmZXIob2JqKSkge1xuICAgICAgICBpZiAoZW5jb2Rlcikge1xuICAgICAgICAgICAgdmFyIGtleVZhbHVlID0gZW5jb2RlVmFsdWVzT25seSA/IHByZWZpeCA6IGVuY29kZXIocHJlZml4LCBkZWZhdWx0cy5lbmNvZGVyLCBjaGFyc2V0LCAna2V5JywgZm9ybWF0KTtcbiAgICAgICAgICAgIHJldHVybiBbZm9ybWF0dGVyKGtleVZhbHVlKSArICc9JyArIGZvcm1hdHRlcihlbmNvZGVyKG9iaiwgZGVmYXVsdHMuZW5jb2RlciwgY2hhcnNldCwgJ3ZhbHVlJywgZm9ybWF0KSldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbZm9ybWF0dGVyKHByZWZpeCkgKyAnPScgKyBmb3JtYXR0ZXIoU3RyaW5nKG9iaikpXTtcbiAgICB9XG5cbiAgICB2YXIgdmFsdWVzID0gW107XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICB9XG5cbiAgICB2YXIgb2JqS2V5cztcbiAgICBpZiAoZ2VuZXJhdGVBcnJheVByZWZpeCA9PT0gJ2NvbW1hJyAmJiBpc0FycmF5KG9iaikpIHtcbiAgICAgICAgLy8gd2UgbmVlZCB0byBqb2luIGVsZW1lbnRzIGluXG4gICAgICAgIG9iaktleXMgPSBbeyB2YWx1ZTogb2JqLmxlbmd0aCA+IDAgPyBvYmouam9pbignLCcpIHx8IG51bGwgOiB1bmRlZmluZWQgfV07XG4gICAgfSBlbHNlIGlmIChpc0FycmF5KGZpbHRlcikpIHtcbiAgICAgICAgb2JqS2V5cyA9IGZpbHRlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gICAgICAgIG9iaktleXMgPSBzb3J0ID8ga2V5cy5zb3J0KHNvcnQpIDoga2V5cztcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iaktleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGtleSA9IG9iaktleXNbaV07XG4gICAgICAgIHZhciB2YWx1ZSA9IHR5cGVvZiBrZXkgPT09ICdvYmplY3QnICYmIGtleS52YWx1ZSAhPT0gdW5kZWZpbmVkID8ga2V5LnZhbHVlIDogb2JqW2tleV07XG5cbiAgICAgICAgaWYgKHNraXBOdWxscyAmJiB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIga2V5UHJlZml4ID0gaXNBcnJheShvYmopXG4gICAgICAgICAgICA/IHR5cGVvZiBnZW5lcmF0ZUFycmF5UHJlZml4ID09PSAnZnVuY3Rpb24nID8gZ2VuZXJhdGVBcnJheVByZWZpeChwcmVmaXgsIGtleSkgOiBwcmVmaXhcbiAgICAgICAgICAgIDogcHJlZml4ICsgKGFsbG93RG90cyA/ICcuJyArIGtleSA6ICdbJyArIGtleSArICddJyk7XG5cbiAgICAgICAgc2lkZUNoYW5uZWwuc2V0KG9iamVjdCwgdHJ1ZSk7XG4gICAgICAgIHZhciB2YWx1ZVNpZGVDaGFubmVsID0gZ2V0U2lkZUNoYW5uZWwoKTtcbiAgICAgICAgcHVzaFRvQXJyYXkodmFsdWVzLCBzdHJpbmdpZnkoXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIGtleVByZWZpeCxcbiAgICAgICAgICAgIGdlbmVyYXRlQXJyYXlQcmVmaXgsXG4gICAgICAgICAgICBzdHJpY3ROdWxsSGFuZGxpbmcsXG4gICAgICAgICAgICBza2lwTnVsbHMsXG4gICAgICAgICAgICBlbmNvZGVyLFxuICAgICAgICAgICAgZmlsdGVyLFxuICAgICAgICAgICAgc29ydCxcbiAgICAgICAgICAgIGFsbG93RG90cyxcbiAgICAgICAgICAgIHNlcmlhbGl6ZURhdGUsXG4gICAgICAgICAgICBmb3JtYXQsXG4gICAgICAgICAgICBmb3JtYXR0ZXIsXG4gICAgICAgICAgICBlbmNvZGVWYWx1ZXNPbmx5LFxuICAgICAgICAgICAgY2hhcnNldCxcbiAgICAgICAgICAgIHZhbHVlU2lkZUNoYW5uZWxcbiAgICAgICAgKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlcztcbn07XG5cbnZhciBub3JtYWxpemVTdHJpbmdpZnlPcHRpb25zID0gZnVuY3Rpb24gbm9ybWFsaXplU3RyaW5naWZ5T3B0aW9ucyhvcHRzKSB7XG4gICAgaWYgKCFvcHRzKSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0cztcbiAgICB9XG5cbiAgICBpZiAob3B0cy5lbmNvZGVyICE9PSBudWxsICYmIG9wdHMuZW5jb2RlciAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvcHRzLmVuY29kZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRW5jb2RlciBoYXMgdG8gYmUgYSBmdW5jdGlvbi4nKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhcnNldCA9IG9wdHMuY2hhcnNldCB8fCBkZWZhdWx0cy5jaGFyc2V0O1xuICAgIGlmICh0eXBlb2Ygb3B0cy5jaGFyc2V0ICE9PSAndW5kZWZpbmVkJyAmJiBvcHRzLmNoYXJzZXQgIT09ICd1dGYtOCcgJiYgb3B0cy5jaGFyc2V0ICE9PSAnaXNvLTg4NTktMScpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIGNoYXJzZXQgb3B0aW9uIG11c3QgYmUgZWl0aGVyIHV0Zi04LCBpc28tODg1OS0xLCBvciB1bmRlZmluZWQnKTtcbiAgICB9XG5cbiAgICB2YXIgZm9ybWF0ID0gZm9ybWF0c1snZGVmYXVsdCddO1xuICAgIGlmICh0eXBlb2Ygb3B0cy5mb3JtYXQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGlmICghaGFzLmNhbGwoZm9ybWF0cy5mb3JtYXR0ZXJzLCBvcHRzLmZvcm1hdCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZm9ybWF0IG9wdGlvbiBwcm92aWRlZC4nKTtcbiAgICAgICAgfVxuICAgICAgICBmb3JtYXQgPSBvcHRzLmZvcm1hdDtcbiAgICB9XG4gICAgdmFyIGZvcm1hdHRlciA9IGZvcm1hdHMuZm9ybWF0dGVyc1tmb3JtYXRdO1xuXG4gICAgdmFyIGZpbHRlciA9IGRlZmF1bHRzLmZpbHRlcjtcbiAgICBpZiAodHlwZW9mIG9wdHMuZmlsdGVyID09PSAnZnVuY3Rpb24nIHx8IGlzQXJyYXkob3B0cy5maWx0ZXIpKSB7XG4gICAgICAgIGZpbHRlciA9IG9wdHMuZmlsdGVyO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIGFkZFF1ZXJ5UHJlZml4OiB0eXBlb2Ygb3B0cy5hZGRRdWVyeVByZWZpeCA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5hZGRRdWVyeVByZWZpeCA6IGRlZmF1bHRzLmFkZFF1ZXJ5UHJlZml4LFxuICAgICAgICBhbGxvd0RvdHM6IHR5cGVvZiBvcHRzLmFsbG93RG90cyA9PT0gJ3VuZGVmaW5lZCcgPyBkZWZhdWx0cy5hbGxvd0RvdHMgOiAhIW9wdHMuYWxsb3dEb3RzLFxuICAgICAgICBjaGFyc2V0OiBjaGFyc2V0LFxuICAgICAgICBjaGFyc2V0U2VudGluZWw6IHR5cGVvZiBvcHRzLmNoYXJzZXRTZW50aW5lbCA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5jaGFyc2V0U2VudGluZWwgOiBkZWZhdWx0cy5jaGFyc2V0U2VudGluZWwsXG4gICAgICAgIGRlbGltaXRlcjogdHlwZW9mIG9wdHMuZGVsaW1pdGVyID09PSAndW5kZWZpbmVkJyA/IGRlZmF1bHRzLmRlbGltaXRlciA6IG9wdHMuZGVsaW1pdGVyLFxuICAgICAgICBlbmNvZGU6IHR5cGVvZiBvcHRzLmVuY29kZSA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5lbmNvZGUgOiBkZWZhdWx0cy5lbmNvZGUsXG4gICAgICAgIGVuY29kZXI6IHR5cGVvZiBvcHRzLmVuY29kZXIgPT09ICdmdW5jdGlvbicgPyBvcHRzLmVuY29kZXIgOiBkZWZhdWx0cy5lbmNvZGVyLFxuICAgICAgICBlbmNvZGVWYWx1ZXNPbmx5OiB0eXBlb2Ygb3B0cy5lbmNvZGVWYWx1ZXNPbmx5ID09PSAnYm9vbGVhbicgPyBvcHRzLmVuY29kZVZhbHVlc09ubHkgOiBkZWZhdWx0cy5lbmNvZGVWYWx1ZXNPbmx5LFxuICAgICAgICBmaWx0ZXI6IGZpbHRlcixcbiAgICAgICAgZm9ybWF0OiBmb3JtYXQsXG4gICAgICAgIGZvcm1hdHRlcjogZm9ybWF0dGVyLFxuICAgICAgICBzZXJpYWxpemVEYXRlOiB0eXBlb2Ygb3B0cy5zZXJpYWxpemVEYXRlID09PSAnZnVuY3Rpb24nID8gb3B0cy5zZXJpYWxpemVEYXRlIDogZGVmYXVsdHMuc2VyaWFsaXplRGF0ZSxcbiAgICAgICAgc2tpcE51bGxzOiB0eXBlb2Ygb3B0cy5za2lwTnVsbHMgPT09ICdib29sZWFuJyA/IG9wdHMuc2tpcE51bGxzIDogZGVmYXVsdHMuc2tpcE51bGxzLFxuICAgICAgICBzb3J0OiB0eXBlb2Ygb3B0cy5zb3J0ID09PSAnZnVuY3Rpb24nID8gb3B0cy5zb3J0IDogbnVsbCxcbiAgICAgICAgc3RyaWN0TnVsbEhhbmRsaW5nOiB0eXBlb2Ygb3B0cy5zdHJpY3ROdWxsSGFuZGxpbmcgPT09ICdib29sZWFuJyA/IG9wdHMuc3RyaWN0TnVsbEhhbmRsaW5nIDogZGVmYXVsdHMuc3RyaWN0TnVsbEhhbmRsaW5nXG4gICAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgb3B0cykge1xuICAgIHZhciBvYmogPSBvYmplY3Q7XG4gICAgdmFyIG9wdGlvbnMgPSBub3JtYWxpemVTdHJpbmdpZnlPcHRpb25zKG9wdHMpO1xuXG4gICAgdmFyIG9iaktleXM7XG4gICAgdmFyIGZpbHRlcjtcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5maWx0ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZmlsdGVyID0gb3B0aW9ucy5maWx0ZXI7XG4gICAgICAgIG9iaiA9IGZpbHRlcignJywgb2JqKTtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkob3B0aW9ucy5maWx0ZXIpKSB7XG4gICAgICAgIGZpbHRlciA9IG9wdGlvbnMuZmlsdGVyO1xuICAgICAgICBvYmpLZXlzID0gZmlsdGVyO1xuICAgIH1cblxuICAgIHZhciBrZXlzID0gW107XG5cbiAgICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgb2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICB2YXIgYXJyYXlGb3JtYXQ7XG4gICAgaWYgKG9wdHMgJiYgb3B0cy5hcnJheUZvcm1hdCBpbiBhcnJheVByZWZpeEdlbmVyYXRvcnMpIHtcbiAgICAgICAgYXJyYXlGb3JtYXQgPSBvcHRzLmFycmF5Rm9ybWF0O1xuICAgIH0gZWxzZSBpZiAob3B0cyAmJiAnaW5kaWNlcycgaW4gb3B0cykge1xuICAgICAgICBhcnJheUZvcm1hdCA9IG9wdHMuaW5kaWNlcyA/ICdpbmRpY2VzJyA6ICdyZXBlYXQnO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGFycmF5Rm9ybWF0ID0gJ2luZGljZXMnO1xuICAgIH1cblxuICAgIHZhciBnZW5lcmF0ZUFycmF5UHJlZml4ID0gYXJyYXlQcmVmaXhHZW5lcmF0b3JzW2FycmF5Rm9ybWF0XTtcblxuICAgIGlmICghb2JqS2V5cykge1xuICAgICAgICBvYmpLZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5zb3J0KSB7XG4gICAgICAgIG9iaktleXMuc29ydChvcHRpb25zLnNvcnQpO1xuICAgIH1cblxuICAgIHZhciBzaWRlQ2hhbm5lbCA9IGdldFNpZGVDaGFubmVsKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmpLZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBrZXkgPSBvYmpLZXlzW2ldO1xuXG4gICAgICAgIGlmIChvcHRpb25zLnNraXBOdWxscyAmJiBvYmpba2V5XSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgcHVzaFRvQXJyYXkoa2V5cywgc3RyaW5naWZ5KFxuICAgICAgICAgICAgb2JqW2tleV0sXG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICBnZW5lcmF0ZUFycmF5UHJlZml4LFxuICAgICAgICAgICAgb3B0aW9ucy5zdHJpY3ROdWxsSGFuZGxpbmcsXG4gICAgICAgICAgICBvcHRpb25zLnNraXBOdWxscyxcbiAgICAgICAgICAgIG9wdGlvbnMuZW5jb2RlID8gb3B0aW9ucy5lbmNvZGVyIDogbnVsbCxcbiAgICAgICAgICAgIG9wdGlvbnMuZmlsdGVyLFxuICAgICAgICAgICAgb3B0aW9ucy5zb3J0LFxuICAgICAgICAgICAgb3B0aW9ucy5hbGxvd0RvdHMsXG4gICAgICAgICAgICBvcHRpb25zLnNlcmlhbGl6ZURhdGUsXG4gICAgICAgICAgICBvcHRpb25zLmZvcm1hdCxcbiAgICAgICAgICAgIG9wdGlvbnMuZm9ybWF0dGVyLFxuICAgICAgICAgICAgb3B0aW9ucy5lbmNvZGVWYWx1ZXNPbmx5LFxuICAgICAgICAgICAgb3B0aW9ucy5jaGFyc2V0LFxuICAgICAgICAgICAgc2lkZUNoYW5uZWxcbiAgICAgICAgKSk7XG4gICAgfVxuXG4gICAgdmFyIGpvaW5lZCA9IGtleXMuam9pbihvcHRpb25zLmRlbGltaXRlcik7XG4gICAgdmFyIHByZWZpeCA9IG9wdGlvbnMuYWRkUXVlcnlQcmVmaXggPT09IHRydWUgPyAnPycgOiAnJztcblxuICAgIGlmIChvcHRpb25zLmNoYXJzZXRTZW50aW5lbCkge1xuICAgICAgICBpZiAob3B0aW9ucy5jaGFyc2V0ID09PSAnaXNvLTg4NTktMScpIHtcbiAgICAgICAgICAgIC8vIGVuY29kZVVSSUNvbXBvbmVudCgnJiMxMDAwMzsnKSwgdGhlIFwibnVtZXJpYyBlbnRpdHlcIiByZXByZXNlbnRhdGlvbiBvZiBhIGNoZWNrbWFya1xuICAgICAgICAgICAgcHJlZml4ICs9ICd1dGY4PSUyNiUyMzEwMDAzJTNCJic7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBlbmNvZGVVUklDb21wb25lbnQoJ+KckycpXG4gICAgICAgICAgICBwcmVmaXggKz0gJ3V0Zjg9JUUyJTlDJTkzJic7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gam9pbmVkLmxlbmd0aCA+IDAgPyBwcmVmaXggKyBqb2luZWQgOiAnJztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcblxudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbnZhciBkZWZhdWx0cyA9IHtcbiAgICBhbGxvd0RvdHM6IGZhbHNlLFxuICAgIGFsbG93UHJvdG90eXBlczogZmFsc2UsXG4gICAgYWxsb3dTcGFyc2U6IGZhbHNlLFxuICAgIGFycmF5TGltaXQ6IDIwLFxuICAgIGNoYXJzZXQ6ICd1dGYtOCcsXG4gICAgY2hhcnNldFNlbnRpbmVsOiBmYWxzZSxcbiAgICBjb21tYTogZmFsc2UsXG4gICAgZGVjb2RlcjogdXRpbHMuZGVjb2RlLFxuICAgIGRlbGltaXRlcjogJyYnLFxuICAgIGRlcHRoOiA1LFxuICAgIGlnbm9yZVF1ZXJ5UHJlZml4OiBmYWxzZSxcbiAgICBpbnRlcnByZXROdW1lcmljRW50aXRpZXM6IGZhbHNlLFxuICAgIHBhcmFtZXRlckxpbWl0OiAxMDAwLFxuICAgIHBhcnNlQXJyYXlzOiB0cnVlLFxuICAgIHBsYWluT2JqZWN0czogZmFsc2UsXG4gICAgc3RyaWN0TnVsbEhhbmRsaW5nOiBmYWxzZVxufTtcblxudmFyIGludGVycHJldE51bWVyaWNFbnRpdGllcyA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoLyYjKFxcZCspOy9nLCBmdW5jdGlvbiAoJDAsIG51bWJlclN0cikge1xuICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChudW1iZXJTdHIsIDEwKSk7XG4gICAgfSk7XG59O1xuXG52YXIgcGFyc2VBcnJheVZhbHVlID0gZnVuY3Rpb24gKHZhbCwgb3B0aW9ucykge1xuICAgIGlmICh2YWwgJiYgdHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgJiYgb3B0aW9ucy5jb21tYSAmJiB2YWwuaW5kZXhPZignLCcpID4gLTEpIHtcbiAgICAgICAgcmV0dXJuIHZhbC5zcGxpdCgnLCcpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWw7XG59O1xuXG4vLyBUaGlzIGlzIHdoYXQgYnJvd3NlcnMgd2lsbCBzdWJtaXQgd2hlbiB0aGUg4pyTIGNoYXJhY3RlciBvY2N1cnMgaW4gYW5cbi8vIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCBib2R5IGFuZCB0aGUgZW5jb2Rpbmcgb2YgdGhlIHBhZ2UgY29udGFpbmluZ1xuLy8gdGhlIGZvcm0gaXMgaXNvLTg4NTktMSwgb3Igd2hlbiB0aGUgc3VibWl0dGVkIGZvcm0gaGFzIGFuIGFjY2VwdC1jaGFyc2V0XG4vLyBhdHRyaWJ1dGUgb2YgaXNvLTg4NTktMS4gUHJlc3VtYWJseSBhbHNvIHdpdGggb3RoZXIgY2hhcnNldHMgdGhhdCBkbyBub3QgY29udGFpblxuLy8gdGhlIOKckyBjaGFyYWN0ZXIsIHN1Y2ggYXMgdXMtYXNjaWkuXG52YXIgaXNvU2VudGluZWwgPSAndXRmOD0lMjYlMjMxMDAwMyUzQic7IC8vIGVuY29kZVVSSUNvbXBvbmVudCgnJiMxMDAwMzsnKVxuXG4vLyBUaGVzZSBhcmUgdGhlIHBlcmNlbnQtZW5jb2RlZCB1dGYtOCBvY3RldHMgcmVwcmVzZW50aW5nIGEgY2hlY2ttYXJrLCBpbmRpY2F0aW5nIHRoYXQgdGhlIHJlcXVlc3QgYWN0dWFsbHkgaXMgdXRmLTggZW5jb2RlZC5cbnZhciBjaGFyc2V0U2VudGluZWwgPSAndXRmOD0lRTIlOUMlOTMnOyAvLyBlbmNvZGVVUklDb21wb25lbnQoJ+KckycpXG5cbnZhciBwYXJzZVZhbHVlcyA9IGZ1bmN0aW9uIHBhcnNlUXVlcnlTdHJpbmdWYWx1ZXMoc3RyLCBvcHRpb25zKSB7XG4gICAgdmFyIG9iaiA9IHt9O1xuICAgIHZhciBjbGVhblN0ciA9IG9wdGlvbnMuaWdub3JlUXVlcnlQcmVmaXggPyBzdHIucmVwbGFjZSgvXlxcPy8sICcnKSA6IHN0cjtcbiAgICB2YXIgbGltaXQgPSBvcHRpb25zLnBhcmFtZXRlckxpbWl0ID09PSBJbmZpbml0eSA/IHVuZGVmaW5lZCA6IG9wdGlvbnMucGFyYW1ldGVyTGltaXQ7XG4gICAgdmFyIHBhcnRzID0gY2xlYW5TdHIuc3BsaXQob3B0aW9ucy5kZWxpbWl0ZXIsIGxpbWl0KTtcbiAgICB2YXIgc2tpcEluZGV4ID0gLTE7IC8vIEtlZXAgdHJhY2sgb2Ygd2hlcmUgdGhlIHV0Zjggc2VudGluZWwgd2FzIGZvdW5kXG4gICAgdmFyIGk7XG5cbiAgICB2YXIgY2hhcnNldCA9IG9wdGlvbnMuY2hhcnNldDtcbiAgICBpZiAob3B0aW9ucy5jaGFyc2V0U2VudGluZWwpIHtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBpZiAocGFydHNbaV0uaW5kZXhPZigndXRmOD0nKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGlmIChwYXJ0c1tpXSA9PT0gY2hhcnNldFNlbnRpbmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYXJzZXQgPSAndXRmLTgnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFydHNbaV0gPT09IGlzb1NlbnRpbmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYXJzZXQgPSAnaXNvLTg4NTktMSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNraXBJbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgaSA9IHBhcnRzLmxlbmd0aDsgLy8gVGhlIGVzbGludCBzZXR0aW5ncyBkbyBub3QgYWxsb3cgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKGkgPT09IHNraXBJbmRleCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHBhcnQgPSBwYXJ0c1tpXTtcblxuICAgICAgICB2YXIgYnJhY2tldEVxdWFsc1BvcyA9IHBhcnQuaW5kZXhPZignXT0nKTtcbiAgICAgICAgdmFyIHBvcyA9IGJyYWNrZXRFcXVhbHNQb3MgPT09IC0xID8gcGFydC5pbmRleE9mKCc9JykgOiBicmFja2V0RXF1YWxzUG9zICsgMTtcblxuICAgICAgICB2YXIga2V5LCB2YWw7XG4gICAgICAgIGlmIChwb3MgPT09IC0xKSB7XG4gICAgICAgICAgICBrZXkgPSBvcHRpb25zLmRlY29kZXIocGFydCwgZGVmYXVsdHMuZGVjb2RlciwgY2hhcnNldCwgJ2tleScpO1xuICAgICAgICAgICAgdmFsID0gb3B0aW9ucy5zdHJpY3ROdWxsSGFuZGxpbmcgPyBudWxsIDogJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBrZXkgPSBvcHRpb25zLmRlY29kZXIocGFydC5zbGljZSgwLCBwb3MpLCBkZWZhdWx0cy5kZWNvZGVyLCBjaGFyc2V0LCAna2V5Jyk7XG4gICAgICAgICAgICB2YWwgPSB1dGlscy5tYXliZU1hcChcbiAgICAgICAgICAgICAgICBwYXJzZUFycmF5VmFsdWUocGFydC5zbGljZShwb3MgKyAxKSwgb3B0aW9ucyksXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gKGVuY29kZWRWYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMuZGVjb2RlcihlbmNvZGVkVmFsLCBkZWZhdWx0cy5kZWNvZGVyLCBjaGFyc2V0LCAndmFsdWUnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbCAmJiBvcHRpb25zLmludGVycHJldE51bWVyaWNFbnRpdGllcyAmJiBjaGFyc2V0ID09PSAnaXNvLTg4NTktMScpIHtcbiAgICAgICAgICAgIHZhbCA9IGludGVycHJldE51bWVyaWNFbnRpdGllcyh2YWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcnQuaW5kZXhPZignW109JykgPiAtMSkge1xuICAgICAgICAgICAgdmFsID0gaXNBcnJheSh2YWwpID8gW3ZhbF0gOiB2YWw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzLmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgICAgICBvYmpba2V5XSA9IHV0aWxzLmNvbWJpbmUob2JqW2tleV0sIHZhbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvYmpba2V5XSA9IHZhbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvYmo7XG59O1xuXG52YXIgcGFyc2VPYmplY3QgPSBmdW5jdGlvbiAoY2hhaW4sIHZhbCwgb3B0aW9ucywgdmFsdWVzUGFyc2VkKSB7XG4gICAgdmFyIGxlYWYgPSB2YWx1ZXNQYXJzZWQgPyB2YWwgOiBwYXJzZUFycmF5VmFsdWUodmFsLCBvcHRpb25zKTtcblxuICAgIGZvciAodmFyIGkgPSBjaGFpbi5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgb2JqO1xuICAgICAgICB2YXIgcm9vdCA9IGNoYWluW2ldO1xuXG4gICAgICAgIGlmIChyb290ID09PSAnW10nICYmIG9wdGlvbnMucGFyc2VBcnJheXMpIHtcbiAgICAgICAgICAgIG9iaiA9IFtdLmNvbmNhdChsZWFmKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9iaiA9IG9wdGlvbnMucGxhaW5PYmplY3RzID8gT2JqZWN0LmNyZWF0ZShudWxsKSA6IHt9O1xuICAgICAgICAgICAgdmFyIGNsZWFuUm9vdCA9IHJvb3QuY2hhckF0KDApID09PSAnWycgJiYgcm9vdC5jaGFyQXQocm9vdC5sZW5ndGggLSAxKSA9PT0gJ10nID8gcm9vdC5zbGljZSgxLCAtMSkgOiByb290O1xuICAgICAgICAgICAgdmFyIGluZGV4ID0gcGFyc2VJbnQoY2xlYW5Sb290LCAxMCk7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMucGFyc2VBcnJheXMgJiYgY2xlYW5Sb290ID09PSAnJykge1xuICAgICAgICAgICAgICAgIG9iaiA9IHsgMDogbGVhZiB9O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAhaXNOYU4oaW5kZXgpXG4gICAgICAgICAgICAgICAgJiYgcm9vdCAhPT0gY2xlYW5Sb290XG4gICAgICAgICAgICAgICAgJiYgU3RyaW5nKGluZGV4KSA9PT0gY2xlYW5Sb290XG4gICAgICAgICAgICAgICAgJiYgaW5kZXggPj0gMFxuICAgICAgICAgICAgICAgICYmIChvcHRpb25zLnBhcnNlQXJyYXlzICYmIGluZGV4IDw9IG9wdGlvbnMuYXJyYXlMaW1pdClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIG9iaiA9IFtdO1xuICAgICAgICAgICAgICAgIG9ialtpbmRleF0gPSBsZWFmO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvYmpbY2xlYW5Sb290XSA9IGxlYWY7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZWFmID0gb2JqO1xuICAgIH1cblxuICAgIHJldHVybiBsZWFmO1xufTtcblxudmFyIHBhcnNlS2V5cyA9IGZ1bmN0aW9uIHBhcnNlUXVlcnlTdHJpbmdLZXlzKGdpdmVuS2V5LCB2YWwsIG9wdGlvbnMsIHZhbHVlc1BhcnNlZCkge1xuICAgIGlmICghZ2l2ZW5LZXkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFRyYW5zZm9ybSBkb3Qgbm90YXRpb24gdG8gYnJhY2tldCBub3RhdGlvblxuICAgIHZhciBrZXkgPSBvcHRpb25zLmFsbG93RG90cyA/IGdpdmVuS2V5LnJlcGxhY2UoL1xcLihbXi5bXSspL2csICdbJDFdJykgOiBnaXZlbktleTtcblxuICAgIC8vIFRoZSByZWdleCBjaHVua3NcblxuICAgIHZhciBicmFja2V0cyA9IC8oXFxbW15bXFxdXSpdKS87XG4gICAgdmFyIGNoaWxkID0gLyhcXFtbXltcXF1dKl0pL2c7XG5cbiAgICAvLyBHZXQgdGhlIHBhcmVudFxuXG4gICAgdmFyIHNlZ21lbnQgPSBvcHRpb25zLmRlcHRoID4gMCAmJiBicmFja2V0cy5leGVjKGtleSk7XG4gICAgdmFyIHBhcmVudCA9IHNlZ21lbnQgPyBrZXkuc2xpY2UoMCwgc2VnbWVudC5pbmRleCkgOiBrZXk7XG5cbiAgICAvLyBTdGFzaCB0aGUgcGFyZW50IGlmIGl0IGV4aXN0c1xuXG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBpZiAocGFyZW50KSB7XG4gICAgICAgIC8vIElmIHdlIGFyZW4ndCB1c2luZyBwbGFpbiBvYmplY3RzLCBvcHRpb25hbGx5IHByZWZpeCBrZXlzIHRoYXQgd291bGQgb3ZlcndyaXRlIG9iamVjdCBwcm90b3R5cGUgcHJvcGVydGllc1xuICAgICAgICBpZiAoIW9wdGlvbnMucGxhaW5PYmplY3RzICYmIGhhcy5jYWxsKE9iamVjdC5wcm90b3R5cGUsIHBhcmVudCkpIHtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5hbGxvd1Byb3RvdHlwZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBrZXlzLnB1c2gocGFyZW50KTtcbiAgICB9XG5cbiAgICAvLyBMb29wIHRocm91Z2ggY2hpbGRyZW4gYXBwZW5kaW5nIHRvIHRoZSBhcnJheSB1bnRpbCB3ZSBoaXQgZGVwdGhcblxuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAob3B0aW9ucy5kZXB0aCA+IDAgJiYgKHNlZ21lbnQgPSBjaGlsZC5leGVjKGtleSkpICE9PSBudWxsICYmIGkgPCBvcHRpb25zLmRlcHRoKSB7XG4gICAgICAgIGkgKz0gMTtcbiAgICAgICAgaWYgKCFvcHRpb25zLnBsYWluT2JqZWN0cyAmJiBoYXMuY2FsbChPYmplY3QucHJvdG90eXBlLCBzZWdtZW50WzFdLnNsaWNlKDEsIC0xKSkpIHtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5hbGxvd1Byb3RvdHlwZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAga2V5cy5wdXNoKHNlZ21lbnRbMV0pO1xuICAgIH1cblxuICAgIC8vIElmIHRoZXJlJ3MgYSByZW1haW5kZXIsIGp1c3QgYWRkIHdoYXRldmVyIGlzIGxlZnRcblxuICAgIGlmIChzZWdtZW50KSB7XG4gICAgICAgIGtleXMucHVzaCgnWycgKyBrZXkuc2xpY2Uoc2VnbWVudC5pbmRleCkgKyAnXScpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZU9iamVjdChrZXlzLCB2YWwsIG9wdGlvbnMsIHZhbHVlc1BhcnNlZCk7XG59O1xuXG52YXIgbm9ybWFsaXplUGFyc2VPcHRpb25zID0gZnVuY3Rpb24gbm9ybWFsaXplUGFyc2VPcHRpb25zKG9wdHMpIHtcbiAgICBpZiAoIW9wdHMpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRzO1xuICAgIH1cblxuICAgIGlmIChvcHRzLmRlY29kZXIgIT09IG51bGwgJiYgb3B0cy5kZWNvZGVyICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9wdHMuZGVjb2RlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdEZWNvZGVyIGhhcyB0byBiZSBhIGZ1bmN0aW9uLicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3B0cy5jaGFyc2V0ICE9PSAndW5kZWZpbmVkJyAmJiBvcHRzLmNoYXJzZXQgIT09ICd1dGYtOCcgJiYgb3B0cy5jaGFyc2V0ICE9PSAnaXNvLTg4NTktMScpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIGNoYXJzZXQgb3B0aW9uIG11c3QgYmUgZWl0aGVyIHV0Zi04LCBpc28tODg1OS0xLCBvciB1bmRlZmluZWQnKTtcbiAgICB9XG4gICAgdmFyIGNoYXJzZXQgPSB0eXBlb2Ygb3B0cy5jaGFyc2V0ID09PSAndW5kZWZpbmVkJyA/IGRlZmF1bHRzLmNoYXJzZXQgOiBvcHRzLmNoYXJzZXQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBhbGxvd0RvdHM6IHR5cGVvZiBvcHRzLmFsbG93RG90cyA9PT0gJ3VuZGVmaW5lZCcgPyBkZWZhdWx0cy5hbGxvd0RvdHMgOiAhIW9wdHMuYWxsb3dEb3RzLFxuICAgICAgICBhbGxvd1Byb3RvdHlwZXM6IHR5cGVvZiBvcHRzLmFsbG93UHJvdG90eXBlcyA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5hbGxvd1Byb3RvdHlwZXMgOiBkZWZhdWx0cy5hbGxvd1Byb3RvdHlwZXMsXG4gICAgICAgIGFsbG93U3BhcnNlOiB0eXBlb2Ygb3B0cy5hbGxvd1NwYXJzZSA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5hbGxvd1NwYXJzZSA6IGRlZmF1bHRzLmFsbG93U3BhcnNlLFxuICAgICAgICBhcnJheUxpbWl0OiB0eXBlb2Ygb3B0cy5hcnJheUxpbWl0ID09PSAnbnVtYmVyJyA/IG9wdHMuYXJyYXlMaW1pdCA6IGRlZmF1bHRzLmFycmF5TGltaXQsXG4gICAgICAgIGNoYXJzZXQ6IGNoYXJzZXQsXG4gICAgICAgIGNoYXJzZXRTZW50aW5lbDogdHlwZW9mIG9wdHMuY2hhcnNldFNlbnRpbmVsID09PSAnYm9vbGVhbicgPyBvcHRzLmNoYXJzZXRTZW50aW5lbCA6IGRlZmF1bHRzLmNoYXJzZXRTZW50aW5lbCxcbiAgICAgICAgY29tbWE6IHR5cGVvZiBvcHRzLmNvbW1hID09PSAnYm9vbGVhbicgPyBvcHRzLmNvbW1hIDogZGVmYXVsdHMuY29tbWEsXG4gICAgICAgIGRlY29kZXI6IHR5cGVvZiBvcHRzLmRlY29kZXIgPT09ICdmdW5jdGlvbicgPyBvcHRzLmRlY29kZXIgOiBkZWZhdWx0cy5kZWNvZGVyLFxuICAgICAgICBkZWxpbWl0ZXI6IHR5cGVvZiBvcHRzLmRlbGltaXRlciA9PT0gJ3N0cmluZycgfHwgdXRpbHMuaXNSZWdFeHAob3B0cy5kZWxpbWl0ZXIpID8gb3B0cy5kZWxpbWl0ZXIgOiBkZWZhdWx0cy5kZWxpbWl0ZXIsXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1pbXBsaWNpdC1jb2VyY2lvbiwgbm8tZXh0cmEtcGFyZW5zXG4gICAgICAgIGRlcHRoOiAodHlwZW9mIG9wdHMuZGVwdGggPT09ICdudW1iZXInIHx8IG9wdHMuZGVwdGggPT09IGZhbHNlKSA/ICtvcHRzLmRlcHRoIDogZGVmYXVsdHMuZGVwdGgsXG4gICAgICAgIGlnbm9yZVF1ZXJ5UHJlZml4OiBvcHRzLmlnbm9yZVF1ZXJ5UHJlZml4ID09PSB0cnVlLFxuICAgICAgICBpbnRlcnByZXROdW1lcmljRW50aXRpZXM6IHR5cGVvZiBvcHRzLmludGVycHJldE51bWVyaWNFbnRpdGllcyA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5pbnRlcnByZXROdW1lcmljRW50aXRpZXMgOiBkZWZhdWx0cy5pbnRlcnByZXROdW1lcmljRW50aXRpZXMsXG4gICAgICAgIHBhcmFtZXRlckxpbWl0OiB0eXBlb2Ygb3B0cy5wYXJhbWV0ZXJMaW1pdCA9PT0gJ251bWJlcicgPyBvcHRzLnBhcmFtZXRlckxpbWl0IDogZGVmYXVsdHMucGFyYW1ldGVyTGltaXQsXG4gICAgICAgIHBhcnNlQXJyYXlzOiBvcHRzLnBhcnNlQXJyYXlzICE9PSBmYWxzZSxcbiAgICAgICAgcGxhaW5PYmplY3RzOiB0eXBlb2Ygb3B0cy5wbGFpbk9iamVjdHMgPT09ICdib29sZWFuJyA/IG9wdHMucGxhaW5PYmplY3RzIDogZGVmYXVsdHMucGxhaW5PYmplY3RzLFxuICAgICAgICBzdHJpY3ROdWxsSGFuZGxpbmc6IHR5cGVvZiBvcHRzLnN0cmljdE51bGxIYW5kbGluZyA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5zdHJpY3ROdWxsSGFuZGxpbmcgOiBkZWZhdWx0cy5zdHJpY3ROdWxsSGFuZGxpbmdcbiAgICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RyLCBvcHRzKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBub3JtYWxpemVQYXJzZU9wdGlvbnMob3B0cyk7XG5cbiAgICBpZiAoc3RyID09PSAnJyB8fCBzdHIgPT09IG51bGwgfHwgdHlwZW9mIHN0ciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMucGxhaW5PYmplY3RzID8gT2JqZWN0LmNyZWF0ZShudWxsKSA6IHt9O1xuICAgIH1cblxuICAgIHZhciB0ZW1wT2JqID0gdHlwZW9mIHN0ciA9PT0gJ3N0cmluZycgPyBwYXJzZVZhbHVlcyhzdHIsIG9wdGlvbnMpIDogc3RyO1xuICAgIHZhciBvYmogPSBvcHRpb25zLnBsYWluT2JqZWN0cyA/IE9iamVjdC5jcmVhdGUobnVsbCkgOiB7fTtcblxuICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUga2V5cyBhbmQgc2V0dXAgdGhlIG5ldyBvYmplY3RcblxuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXModGVtcE9iaik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgICB2YXIgbmV3T2JqID0gcGFyc2VLZXlzKGtleSwgdGVtcE9ialtrZXldLCBvcHRpb25zLCB0eXBlb2Ygc3RyID09PSAnc3RyaW5nJyk7XG4gICAgICAgIG9iaiA9IHV0aWxzLm1lcmdlKG9iaiwgbmV3T2JqLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5hbGxvd1NwYXJzZSA9PT0gdHJ1ZSkge1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH1cblxuICAgIHJldHVybiB1dGlscy5jb21wYWN0KG9iaik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgc3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9zdHJpbmdpZnknKTtcbnZhciBwYXJzZSA9IHJlcXVpcmUoJy4vcGFyc2UnKTtcbnZhciBmb3JtYXRzID0gcmVxdWlyZSgnLi9mb3JtYXRzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIGZvcm1hdHM6IGZvcm1hdHMsXG4gICAgcGFyc2U6IHBhcnNlLFxuICAgIHN0cmluZ2lmeTogc3RyaW5naWZ5XG59O1xuIiwiLypcbiAqICBiYXNlNjQuanNcbiAqXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEJTRCAzLUNsYXVzZSBMaWNlbnNlLlxuICogICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICpcbiAqICBSZWZlcmVuY2VzOlxuICogICAgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CYXNlNjRcbiAqL1xuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KGdsb2JhbClcbiAgICAgICAgOiB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWRcbiAgICAgICAgPyBkZWZpbmUoZmFjdG9yeSkgOiBmYWN0b3J5KGdsb2JhbClcbn0oKFxuICAgIHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyA/IHNlbGZcbiAgICAgICAgOiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvd1xuICAgICAgICA6IHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsXG46IHRoaXNcbiksIGZ1bmN0aW9uKGdsb2JhbCkge1xuICAgICd1c2Ugc3RyaWN0JztcbiAgICAvLyBleGlzdGluZyB2ZXJzaW9uIGZvciBub0NvbmZsaWN0KClcbiAgICBnbG9iYWwgPSBnbG9iYWwgfHwge307XG4gICAgdmFyIF9CYXNlNjQgPSBnbG9iYWwuQmFzZTY0O1xuICAgIHZhciB2ZXJzaW9uID0gXCIyLjYuNFwiO1xuICAgIC8vIGNvbnN0YW50c1xuICAgIHZhciBiNjRjaGFyc1xuICAgICAgICA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJztcbiAgICB2YXIgYjY0dGFiID0gZnVuY3Rpb24oYmluKSB7XG4gICAgICAgIHZhciB0ID0ge307XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gYmluLmxlbmd0aDsgaSA8IGw7IGkrKykgdFtiaW4uY2hhckF0KGkpXSA9IGk7XG4gICAgICAgIHJldHVybiB0O1xuICAgIH0oYjY0Y2hhcnMpO1xuICAgIHZhciBmcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xuICAgIC8vIGVuY29kZXIgc3R1ZmZcbiAgICB2YXIgY2JfdXRvYiA9IGZ1bmN0aW9uKGMpIHtcbiAgICAgICAgaWYgKGMubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgdmFyIGNjID0gYy5jaGFyQ29kZUF0KDApO1xuICAgICAgICAgICAgcmV0dXJuIGNjIDwgMHg4MCA/IGNcbiAgICAgICAgICAgICAgICA6IGNjIDwgMHg4MDAgPyAoZnJvbUNoYXJDb2RlKDB4YzAgfCAoY2MgPj4+IDYpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGZyb21DaGFyQ29kZSgweDgwIHwgKGNjICYgMHgzZikpKVxuICAgICAgICAgICAgICAgIDogKGZyb21DaGFyQ29kZSgweGUwIHwgKChjYyA+Pj4gMTIpICYgMHgwZikpXG4gICAgICAgICAgICAgICAgICAgICsgZnJvbUNoYXJDb2RlKDB4ODAgfCAoKGNjID4+PiAgNikgJiAweDNmKSlcbiAgICAgICAgICAgICAgICAgICAgKyBmcm9tQ2hhckNvZGUoMHg4MCB8ICggY2MgICAgICAgICAmIDB4M2YpKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgY2MgPSAweDEwMDAwXG4gICAgICAgICAgICAgICAgKyAoYy5jaGFyQ29kZUF0KDApIC0gMHhEODAwKSAqIDB4NDAwXG4gICAgICAgICAgICAgICAgKyAoYy5jaGFyQ29kZUF0KDEpIC0gMHhEQzAwKTtcbiAgICAgICAgICAgIHJldHVybiAoZnJvbUNoYXJDb2RlKDB4ZjAgfCAoKGNjID4+PiAxOCkgJiAweDA3KSlcbiAgICAgICAgICAgICAgICAgICAgKyBmcm9tQ2hhckNvZGUoMHg4MCB8ICgoY2MgPj4+IDEyKSAmIDB4M2YpKVxuICAgICAgICAgICAgICAgICAgICArIGZyb21DaGFyQ29kZSgweDgwIHwgKChjYyA+Pj4gIDYpICYgMHgzZikpXG4gICAgICAgICAgICAgICAgICAgICsgZnJvbUNoYXJDb2RlKDB4ODAgfCAoIGNjICAgICAgICAgJiAweDNmKSkpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB2YXIgcmVfdXRvYiA9IC9bXFx1RDgwMC1cXHVEQkZGXVtcXHVEQzAwLVxcdURGRkZGXXxbXlxceDAwLVxceDdGXS9nO1xuICAgIHZhciB1dG9iID0gZnVuY3Rpb24odSkge1xuICAgICAgICByZXR1cm4gdS5yZXBsYWNlKHJlX3V0b2IsIGNiX3V0b2IpO1xuICAgIH07XG4gICAgdmFyIGNiX2VuY29kZSA9IGZ1bmN0aW9uKGNjYykge1xuICAgICAgICB2YXIgcGFkbGVuID0gWzAsIDIsIDFdW2NjYy5sZW5ndGggJSAzXSxcbiAgICAgICAgb3JkID0gY2NjLmNoYXJDb2RlQXQoMCkgPDwgMTZcbiAgICAgICAgICAgIHwgKChjY2MubGVuZ3RoID4gMSA/IGNjYy5jaGFyQ29kZUF0KDEpIDogMCkgPDwgOClcbiAgICAgICAgICAgIHwgKChjY2MubGVuZ3RoID4gMiA/IGNjYy5jaGFyQ29kZUF0KDIpIDogMCkpLFxuICAgICAgICBjaGFycyA9IFtcbiAgICAgICAgICAgIGI2NGNoYXJzLmNoYXJBdCggb3JkID4+PiAxOCksXG4gICAgICAgICAgICBiNjRjaGFycy5jaGFyQXQoKG9yZCA+Pj4gMTIpICYgNjMpLFxuICAgICAgICAgICAgcGFkbGVuID49IDIgPyAnPScgOiBiNjRjaGFycy5jaGFyQXQoKG9yZCA+Pj4gNikgJiA2MyksXG4gICAgICAgICAgICBwYWRsZW4gPj0gMSA/ICc9JyA6IGI2NGNoYXJzLmNoYXJBdChvcmQgJiA2MylcbiAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuIGNoYXJzLmpvaW4oJycpO1xuICAgIH07XG4gICAgdmFyIGJ0b2EgPSBnbG9iYWwuYnRvYSAmJiB0eXBlb2YgZ2xvYmFsLmJ0b2EgPT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IGZ1bmN0aW9uKGIpeyByZXR1cm4gZ2xvYmFsLmJ0b2EoYikgfSA6IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgaWYgKGIubWF0Y2goL1teXFx4MDAtXFx4RkZdLykpIHRocm93IG5ldyBSYW5nZUVycm9yKFxuICAgICAgICAgICAgJ1RoZSBzdHJpbmcgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzLidcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGIucmVwbGFjZSgvW1xcc1xcU117MSwzfS9nLCBjYl9lbmNvZGUpO1xuICAgIH07XG4gICAgdmFyIF9lbmNvZGUgPSBmdW5jdGlvbih1KSB7XG4gICAgICAgIHJldHVybiBidG9hKHV0b2IoU3RyaW5nKHUpKSk7XG4gICAgfTtcbiAgICB2YXIgbWtVcmlTYWZlID0gZnVuY3Rpb24gKGI2NCkge1xuICAgICAgICByZXR1cm4gYjY0LnJlcGxhY2UoL1srXFwvXS9nLCBmdW5jdGlvbihtMCkge1xuICAgICAgICAgICAgcmV0dXJuIG0wID09ICcrJyA/ICctJyA6ICdfJztcbiAgICAgICAgfSkucmVwbGFjZSgvPS9nLCAnJyk7XG4gICAgfTtcbiAgICB2YXIgZW5jb2RlID0gZnVuY3Rpb24odSwgdXJpc2FmZSkge1xuICAgICAgICByZXR1cm4gdXJpc2FmZSA/IG1rVXJpU2FmZShfZW5jb2RlKHUpKSA6IF9lbmNvZGUodSk7XG4gICAgfTtcbiAgICB2YXIgZW5jb2RlVVJJID0gZnVuY3Rpb24odSkgeyByZXR1cm4gZW5jb2RlKHUsIHRydWUpIH07XG4gICAgdmFyIGZyb21VaW50OEFycmF5O1xuICAgIGlmIChnbG9iYWwuVWludDhBcnJheSkgZnJvbVVpbnQ4QXJyYXkgPSBmdW5jdGlvbihhLCB1cmlzYWZlKSB7XG4gICAgICAgIC8vIHJldHVybiBidG9hKGZyb21DaGFyQ29kZS5hcHBseShudWxsLCBhKSk7XG4gICAgICAgIHZhciBiNjQgPSAnJztcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBhLmxlbmd0aDsgaSA8IGw7IGkgKz0gMykge1xuICAgICAgICAgICAgdmFyIGEwID0gYVtpXSwgYTEgPSBhW2krMV0sIGEyID0gYVtpKzJdO1xuICAgICAgICAgICAgdmFyIG9yZCA9IGEwIDw8IDE2IHwgYTEgPDwgOCB8IGEyO1xuICAgICAgICAgICAgYjY0ICs9ICAgIGI2NGNoYXJzLmNoYXJBdCggb3JkID4+PiAxOClcbiAgICAgICAgICAgICAgICArICAgICBiNjRjaGFycy5jaGFyQXQoKG9yZCA+Pj4gMTIpICYgNjMpXG4gICAgICAgICAgICAgICAgKyAoIHR5cGVvZiBhMSAhPSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgICAgICAgICA/IGI2NGNoYXJzLmNoYXJBdCgob3JkID4+PiAgNikgJiA2MykgOiAnPScpXG4gICAgICAgICAgICAgICAgKyAoIHR5cGVvZiBhMiAhPSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgICAgICAgICA/IGI2NGNoYXJzLmNoYXJBdCggb3JkICAgICAgICAgJiA2MykgOiAnPScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1cmlzYWZlID8gbWtVcmlTYWZlKGI2NCkgOiBiNjQ7XG4gICAgfTtcbiAgICAvLyBkZWNvZGVyIHN0dWZmXG4gICAgdmFyIHJlX2J0b3UgPSAvW1xceEMwLVxceERGXVtcXHg4MC1cXHhCRl18W1xceEUwLVxceEVGXVtcXHg4MC1cXHhCRl17Mn18W1xceEYwLVxceEY3XVtcXHg4MC1cXHhCRl17M30vZztcbiAgICB2YXIgY2JfYnRvdSA9IGZ1bmN0aW9uKGNjY2MpIHtcbiAgICAgICAgc3dpdGNoKGNjY2MubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHZhciBjcCA9ICgoMHgwNyAmIGNjY2MuY2hhckNvZGVBdCgwKSkgPDwgMTgpXG4gICAgICAgICAgICAgICAgfCAgICAoKDB4M2YgJiBjY2NjLmNoYXJDb2RlQXQoMSkpIDw8IDEyKVxuICAgICAgICAgICAgICAgIHwgICAgKCgweDNmICYgY2NjYy5jaGFyQ29kZUF0KDIpKSA8PCAgNilcbiAgICAgICAgICAgICAgICB8ICAgICAoMHgzZiAmIGNjY2MuY2hhckNvZGVBdCgzKSksXG4gICAgICAgICAgICBvZmZzZXQgPSBjcCAtIDB4MTAwMDA7XG4gICAgICAgICAgICByZXR1cm4gKGZyb21DaGFyQ29kZSgob2Zmc2V0ICA+Pj4gMTApICsgMHhEODAwKVxuICAgICAgICAgICAgICAgICAgICArIGZyb21DaGFyQ29kZSgob2Zmc2V0ICYgMHgzRkYpICsgMHhEQzAwKSk7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHJldHVybiBmcm9tQ2hhckNvZGUoXG4gICAgICAgICAgICAgICAgKCgweDBmICYgY2NjYy5jaGFyQ29kZUF0KDApKSA8PCAxMilcbiAgICAgICAgICAgICAgICAgICAgfCAoKDB4M2YgJiBjY2NjLmNoYXJDb2RlQXQoMSkpIDw8IDYpXG4gICAgICAgICAgICAgICAgICAgIHwgICgweDNmICYgY2NjYy5jaGFyQ29kZUF0KDIpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAgZnJvbUNoYXJDb2RlKFxuICAgICAgICAgICAgICAgICgoMHgxZiAmIGNjY2MuY2hhckNvZGVBdCgwKSkgPDwgNilcbiAgICAgICAgICAgICAgICAgICAgfCAgKDB4M2YgJiBjY2NjLmNoYXJDb2RlQXQoMSkpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB2YXIgYnRvdSA9IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgcmV0dXJuIGIucmVwbGFjZShyZV9idG91LCBjYl9idG91KTtcbiAgICB9O1xuICAgIHZhciBjYl9kZWNvZGUgPSBmdW5jdGlvbihjY2NjKSB7XG4gICAgICAgIHZhciBsZW4gPSBjY2NjLmxlbmd0aCxcbiAgICAgICAgcGFkbGVuID0gbGVuICUgNCxcbiAgICAgICAgbiA9IChsZW4gPiAwID8gYjY0dGFiW2NjY2MuY2hhckF0KDApXSA8PCAxOCA6IDApXG4gICAgICAgICAgICB8IChsZW4gPiAxID8gYjY0dGFiW2NjY2MuY2hhckF0KDEpXSA8PCAxMiA6IDApXG4gICAgICAgICAgICB8IChsZW4gPiAyID8gYjY0dGFiW2NjY2MuY2hhckF0KDIpXSA8PCAgNiA6IDApXG4gICAgICAgICAgICB8IChsZW4gPiAzID8gYjY0dGFiW2NjY2MuY2hhckF0KDMpXSAgICAgICA6IDApLFxuICAgICAgICBjaGFycyA9IFtcbiAgICAgICAgICAgIGZyb21DaGFyQ29kZSggbiA+Pj4gMTYpLFxuICAgICAgICAgICAgZnJvbUNoYXJDb2RlKChuID4+PiAgOCkgJiAweGZmKSxcbiAgICAgICAgICAgIGZyb21DaGFyQ29kZSggbiAgICAgICAgICYgMHhmZilcbiAgICAgICAgXTtcbiAgICAgICAgY2hhcnMubGVuZ3RoIC09IFswLCAwLCAyLCAxXVtwYWRsZW5dO1xuICAgICAgICByZXR1cm4gY2hhcnMuam9pbignJyk7XG4gICAgfTtcbiAgICB2YXIgX2F0b2IgPSBnbG9iYWwuYXRvYiAmJiB0eXBlb2YgZ2xvYmFsLmF0b2IgPT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IGZ1bmN0aW9uKGEpeyByZXR1cm4gZ2xvYmFsLmF0b2IoYSkgfSA6IGZ1bmN0aW9uKGEpe1xuICAgICAgICByZXR1cm4gYS5yZXBsYWNlKC9cXFN7MSw0fS9nLCBjYl9kZWNvZGUpO1xuICAgIH07XG4gICAgdmFyIGF0b2IgPSBmdW5jdGlvbihhKSB7XG4gICAgICAgIHJldHVybiBfYXRvYihTdHJpbmcoYSkucmVwbGFjZSgvW15BLVphLXowLTlcXCtcXC9dL2csICcnKSk7XG4gICAgfTtcbiAgICB2YXIgX2RlY29kZSA9IGZ1bmN0aW9uKGEpIHsgcmV0dXJuIGJ0b3UoX2F0b2IoYSkpIH07XG4gICAgdmFyIF9mcm9tVVJJID0gZnVuY3Rpb24oYSkge1xuICAgICAgICByZXR1cm4gU3RyaW5nKGEpLnJlcGxhY2UoL1stX10vZywgZnVuY3Rpb24obTApIHtcbiAgICAgICAgICAgIHJldHVybiBtMCA9PSAnLScgPyAnKycgOiAnLydcbiAgICAgICAgfSkucmVwbGFjZSgvW15BLVphLXowLTlcXCtcXC9dL2csICcnKTtcbiAgICB9O1xuICAgIHZhciBkZWNvZGUgPSBmdW5jdGlvbihhKXtcbiAgICAgICAgcmV0dXJuIF9kZWNvZGUoX2Zyb21VUkkoYSkpO1xuICAgIH07XG4gICAgdmFyIHRvVWludDhBcnJheTtcbiAgICBpZiAoZ2xvYmFsLlVpbnQ4QXJyYXkpIHRvVWludDhBcnJheSA9IGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkuZnJvbShhdG9iKF9mcm9tVVJJKGEpKSwgZnVuY3Rpb24oYykge1xuICAgICAgICAgICAgcmV0dXJuIGMuY2hhckNvZGVBdCgwKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICB2YXIgbm9Db25mbGljdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgQmFzZTY0ID0gZ2xvYmFsLkJhc2U2NDtcbiAgICAgICAgZ2xvYmFsLkJhc2U2NCA9IF9CYXNlNjQ7XG4gICAgICAgIHJldHVybiBCYXNlNjQ7XG4gICAgfTtcbiAgICAvLyBleHBvcnQgQmFzZTY0XG4gICAgZ2xvYmFsLkJhc2U2NCA9IHtcbiAgICAgICAgVkVSU0lPTjogdmVyc2lvbixcbiAgICAgICAgYXRvYjogYXRvYixcbiAgICAgICAgYnRvYTogYnRvYSxcbiAgICAgICAgZnJvbUJhc2U2NDogZGVjb2RlLFxuICAgICAgICB0b0Jhc2U2NDogZW5jb2RlLFxuICAgICAgICB1dG9iOiB1dG9iLFxuICAgICAgICBlbmNvZGU6IGVuY29kZSxcbiAgICAgICAgZW5jb2RlVVJJOiBlbmNvZGVVUkksXG4gICAgICAgIGJ0b3U6IGJ0b3UsXG4gICAgICAgIGRlY29kZTogZGVjb2RlLFxuICAgICAgICBub0NvbmZsaWN0OiBub0NvbmZsaWN0LFxuICAgICAgICBmcm9tVWludDhBcnJheTogZnJvbVVpbnQ4QXJyYXksXG4gICAgICAgIHRvVWludDhBcnJheTogdG9VaW50OEFycmF5XG4gICAgfTtcbiAgICAvLyBpZiBFUzUgaXMgYXZhaWxhYmxlLCBtYWtlIEJhc2U2NC5leHRlbmRTdHJpbmcoKSBhdmFpbGFibGVcbiAgICBpZiAodHlwZW9mIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgbm9FbnVtID0gZnVuY3Rpb24odil7XG4gICAgICAgICAgICByZXR1cm4ge3ZhbHVlOnYsZW51bWVyYWJsZTpmYWxzZSx3cml0YWJsZTp0cnVlLGNvbmZpZ3VyYWJsZTp0cnVlfTtcbiAgICAgICAgfTtcbiAgICAgICAgZ2xvYmFsLkJhc2U2NC5leHRlbmRTdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgICAgICAgICAgICAgU3RyaW5nLnByb3RvdHlwZSwgJ2Zyb21CYXNlNjQnLCBub0VudW0oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVjb2RlKHRoaXMpXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgICAgICAgICAgICAgIFN0cmluZy5wcm90b3R5cGUsICd0b0Jhc2U2NCcsIG5vRW51bShmdW5jdGlvbiAodXJpc2FmZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW5jb2RlKHRoaXMsIHVyaXNhZmUpXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgICAgICAgICAgICAgIFN0cmluZy5wcm90b3R5cGUsICd0b0Jhc2U2NFVSSScsIG5vRW51bShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbmNvZGUodGhpcywgdHJ1ZSlcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8vXG4gICAgLy8gZXhwb3J0IEJhc2U2NCB0byB0aGUgbmFtZXNwYWNlXG4gICAgLy9cbiAgICBpZiAoZ2xvYmFsWydNZXRlb3InXSkgeyAvLyBNZXRlb3IuanNcbiAgICAgICAgQmFzZTY0ID0gZ2xvYmFsLkJhc2U2NDtcbiAgICB9XG4gICAgLy8gbW9kdWxlLmV4cG9ydHMgYW5kIEFNRCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLlxuICAgIC8vIG1vZHVsZS5leHBvcnRzIGhhcyBwcmVjZWRlbmNlLlxuICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cy5CYXNlNjQgPSBnbG9iYWwuQmFzZTY0O1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAgICAgLy8gQU1ELiBSZWdpc3RlciBhcyBhbiBhbm9ueW1vdXMgbW9kdWxlLlxuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uKCl7IHJldHVybiBnbG9iYWwuQmFzZTY0IH0pO1xuICAgIH1cbiAgICAvLyB0aGF0J3MgaXQhXG4gICAgcmV0dXJuIHtCYXNlNjQ6IGdsb2JhbC5CYXNlNjR9XG59KSk7XG4iLCJpbXBvcnQgRm9ybURhdGEgZnJvbSBcImZvcm0tZGF0YVwiO1xuaW1wb3J0IHFzIGZyb20gXCJxc1wiO1xuaW1wb3J0IHsgQmFzZTY0IH0gZnJvbSBcImpzLWJhc2U2NFwiO1xuXG5pbXBvcnQge1xuICBSZXF1ZXN0Q29uZmlnQnVpbGRlcixcbiAgUmVxdWVzdENvbmZpZyxcbiAgSHR0cE1ldGhvZCxcbiAgUGFyYW1zLFxuICBQcm94eUNvbmZpZyxcbn0gZnJvbSBcIi4vaHR0cC9IdHRwQ2xpZW50SW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBCYXNpY0F1dGgsIERpc2NyaW1pbmF0ZWRBdXRoIH0gZnJvbSBcIi4vdHlwZXMvYXV0aFwiO1xuaW1wb3J0IHsgcGxhdGZvcm1EZXBzIH0gZnJvbSBcIi4vcGxhdGZvcm0vXCI7XG5cbnR5cGUgRGF0YSA9IFBhcmFtcyB8IEZvcm1EYXRhO1xuXG50eXBlIEtpbnRvbmVBdXRoSGVhZGVyID1cbiAgfCB7XG4gICAgICBcIlgtQ3lib3p1LUF1dGhvcml6YXRpb25cIjogc3RyaW5nO1xuICAgICAgQXV0aG9yaXphdGlvbj86IHN0cmluZztcbiAgICB9XG4gIHwge1xuICAgICAgXCJYLUN5Ym96dS1BUEktVG9rZW5cIjogc3RyaW5nO1xuICAgICAgQXV0aG9yaXphdGlvbj86IHN0cmluZztcbiAgICB9XG4gIHwge1xuICAgICAgXCJYLVJlcXVlc3RlZC1XaXRoXCI6IFwiWE1MSHR0cFJlcXVlc3RcIjtcbiAgICAgIEF1dGhvcml6YXRpb24/OiBzdHJpbmc7XG4gICAgfVxuICB8IHtcbiAgICAgIEF1dGhvcml6YXRpb246IHN0cmluZztcbiAgICB9O1xuXG5jb25zdCBUSFJFU0hPTERfQVZPSURfUkVRVUVTVF9VUkxfVE9PX0xBUkdFID0gNDA5NjtcblxuZXhwb3J0IGNsYXNzIEtpbnRvbmVSZXF1ZXN0Q29uZmlnQnVpbGRlciBpbXBsZW1lbnRzIFJlcXVlc3RDb25maWdCdWlsZGVyIHtcbiAgcHJpdmF0ZSBiYXNlVXJsOiBzdHJpbmc7XG4gIHByaXZhdGUgaGVhZGVyczogS2ludG9uZUF1dGhIZWFkZXI7XG4gIHByaXZhdGUgYXV0aDogRGlzY3JpbWluYXRlZEF1dGg7XG4gIHByaXZhdGUgY2xpZW50Q2VydEF1dGg/OlxuICAgIHwge1xuICAgICAgICBwZng6IEJ1ZmZlcjtcbiAgICAgICAgcGFzc3dvcmQ6IHN0cmluZztcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgcGZ4RmlsZVBhdGg6IHN0cmluZztcbiAgICAgICAgcGFzc3dvcmQ6IHN0cmluZztcbiAgICAgIH07XG4gIHByaXZhdGUgcHJveHk/OiBQcm94eUNvbmZpZztcbiAgcHJpdmF0ZSByZXF1ZXN0VG9rZW46IHN0cmluZyB8IG51bGw7XG5cbiAgY29uc3RydWN0b3Ioe1xuICAgIGJhc2VVcmwsXG4gICAgYXV0aCxcbiAgICBiYXNpY0F1dGgsXG4gICAgY2xpZW50Q2VydEF1dGgsXG4gICAgcHJveHksXG4gICAgdXNlckFnZW50LFxuICB9OiB7XG4gICAgYmFzZVVybDogc3RyaW5nO1xuICAgIGF1dGg6IERpc2NyaW1pbmF0ZWRBdXRoO1xuICAgIGJhc2ljQXV0aD86IEJhc2ljQXV0aDtcbiAgICBjbGllbnRDZXJ0QXV0aD86XG4gICAgICB8IHtcbiAgICAgICAgICBwZng6IEJ1ZmZlcjtcbiAgICAgICAgICBwYXNzd29yZDogc3RyaW5nO1xuICAgICAgICB9XG4gICAgICB8IHtcbiAgICAgICAgICBwZnhGaWxlUGF0aDogc3RyaW5nO1xuICAgICAgICAgIHBhc3N3b3JkOiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgcHJveHk/OiBQcm94eUNvbmZpZztcbiAgICB1c2VyQWdlbnQ/OiBzdHJpbmc7XG4gIH0pIHtcbiAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsO1xuICAgIHRoaXMuYXV0aCA9IGF1dGg7XG4gICAgdGhpcy5oZWFkZXJzID0gdGhpcy5idWlsZEhlYWRlcnMoeyBiYXNpY0F1dGgsIHVzZXJBZ2VudCB9KTtcbiAgICB0aGlzLmNsaWVudENlcnRBdXRoID0gY2xpZW50Q2VydEF1dGg7XG4gICAgdGhpcy5wcm94eSA9IHByb3h5O1xuICAgIHRoaXMucmVxdWVzdFRva2VuID0gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBidWlsZChcbiAgICBtZXRob2Q6IEh0dHBNZXRob2QsXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIHBhcmFtczogRGF0YSxcbiAgICBvcHRpb25zPzogeyByZXNwb25zZVR5cGU6IFwiYXJyYXlidWZmZXJcIiB9XG4gICkge1xuICAgIGNvbnN0IHJlcXVlc3RDb25maWc6IFJlcXVlc3RDb25maWcgPSB7XG4gICAgICBtZXRob2QsXG4gICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICB1cmw6IGAke3RoaXMuYmFzZVVybH0ke3BhdGh9YCxcbiAgICAgIC4uLihvcHRpb25zID8gb3B0aW9ucyA6IHt9KSxcbiAgICAgIC4uLnBsYXRmb3JtRGVwcy5idWlsZFBsYXRmb3JtRGVwZW5kZW50Q29uZmlnKHtcbiAgICAgICAgY2xpZW50Q2VydEF1dGg6IHRoaXMuY2xpZW50Q2VydEF1dGgsXG4gICAgICB9KSxcbiAgICAgIHByb3h5OiB0aGlzLnByb3h5LFxuICAgIH07XG5cbiAgICBzd2l0Y2ggKG1ldGhvZCkge1xuICAgICAgY2FzZSBcImdldFwiOiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RVcmwgPSB0aGlzLmJ1aWxkUmVxdWVzdFVybChwYXRoLCBwYXJhbXMpO1xuICAgICAgICBpZiAocmVxdWVzdFVybC5sZW5ndGggPiBUSFJFU0hPTERfQVZPSURfUkVRVUVTVF9VUkxfVE9PX0xBUkdFKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnJlcXVlc3RDb25maWcsXG4gICAgICAgICAgICBtZXRob2Q6IFwicG9zdFwiIGFzIGNvbnN0LFxuICAgICAgICAgICAgaGVhZGVyczogeyAuLi50aGlzLmhlYWRlcnMsIFwiWC1IVFRQLU1ldGhvZC1PdmVycmlkZVwiOiBcIkdFVFwiIH0sXG4gICAgICAgICAgICBkYXRhOiBhd2FpdCB0aGlzLmJ1aWxkRGF0YShwYXJhbXMpLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5yZXF1ZXN0Q29uZmlnLFxuICAgICAgICAgIHVybDogcmVxdWVzdFVybCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJwb3N0XCI6IHtcbiAgICAgICAgaWYgKHBhcmFtcyBpbnN0YW5jZW9mIEZvcm1EYXRhKSB7XG4gICAgICAgICAgY29uc3QgZm9ybURhdGEgPSBhd2FpdCB0aGlzLmJ1aWxkRGF0YShwYXJhbXMpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5yZXF1ZXN0Q29uZmlnLFxuICAgICAgICAgICAgaGVhZGVyczpcbiAgICAgICAgICAgICAgLy8gTk9URTogZm9ybURhdGEuZ2V0SGVhZGVycyBkb2VzIG5vdCBleGlzdCBpbiBhIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gICAgICAgICAgICAgIHR5cGVvZiBmb3JtRGF0YS5nZXRIZWFkZXJzID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgICAgICA/IHsgLi4udGhpcy5oZWFkZXJzLCAuLi5mb3JtRGF0YS5nZXRIZWFkZXJzKCkgfVxuICAgICAgICAgICAgICAgIDogdGhpcy5oZWFkZXJzLFxuICAgICAgICAgICAgZGF0YTogZm9ybURhdGEsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnJlcXVlc3RDb25maWcsXG4gICAgICAgICAgZGF0YTogYXdhaXQgdGhpcy5idWlsZERhdGEocGFyYW1zKSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJwdXRcIjoge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnJlcXVlc3RDb25maWcsXG4gICAgICAgICAgZGF0YTogYXdhaXQgdGhpcy5idWlsZERhdGEocGFyYW1zKSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJkZWxldGVcIjoge1xuICAgICAgICBjb25zdCByZXF1ZXN0VXJsID0gdGhpcy5idWlsZFJlcXVlc3RVcmwoXG4gICAgICAgICAgcGF0aCxcbiAgICAgICAgICBhd2FpdCB0aGlzLmJ1aWxkRGF0YShwYXJhbXMpXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ucmVxdWVzdENvbmZpZyxcbiAgICAgICAgICB1cmw6IHJlcXVlc3RVcmwsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHttZXRob2R9IG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFJlcXVlc3RVcmwocGF0aDogc3RyaW5nLCBwYXJhbXM6IERhdGEpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLmJhc2VVcmx9JHtwYXRofT8ke3FzLnN0cmluZ2lmeShwYXJhbXMpfWA7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGJ1aWxkRGF0YTxUIGV4dGVuZHMgRGF0YT4ocGFyYW1zOiBUKTogUHJvbWlzZTxUPiB7XG4gICAgaWYgKHRoaXMuYXV0aC50eXBlID09PSBcInNlc3Npb25cIikge1xuICAgICAgY29uc3QgcmVxdWVzdFRva2VuID0gYXdhaXQgdGhpcy5nZXRSZXF1ZXN0VG9rZW4oKTtcbiAgICAgIGlmIChwYXJhbXMgaW5zdGFuY2VvZiBGb3JtRGF0YSkge1xuICAgICAgICBwYXJhbXMuYXBwZW5kKFwiX19SRVFVRVNUX1RPS0VOX19cIiwgcmVxdWVzdFRva2VuKTtcbiAgICAgICAgcmV0dXJuIHBhcmFtcztcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIF9fUkVRVUVTVF9UT0tFTl9fOiByZXF1ZXN0VG9rZW4sXG4gICAgICAgIC4uLnBhcmFtcyxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkSGVhZGVycyhwYXJhbXM6IHtcbiAgICBiYXNpY0F1dGg/OiBCYXNpY0F1dGg7XG4gICAgdXNlckFnZW50Pzogc3RyaW5nO1xuICB9KTogS2ludG9uZUF1dGhIZWFkZXIge1xuICAgIGNvbnN0IHsgYmFzaWNBdXRoLCB1c2VyQWdlbnQgfSA9IHBhcmFtcztcbiAgICBjb25zdCBiYXNpY0F1dGhIZWFkZXJzID0gYmFzaWNBdXRoXG4gICAgICA/IHtcbiAgICAgICAgICBBdXRob3JpemF0aW9uOiBgQmFzaWMgJHtCYXNlNjQuZW5jb2RlKFxuICAgICAgICAgICAgYCR7YmFzaWNBdXRoLnVzZXJuYW1lfToke2Jhc2ljQXV0aC5wYXNzd29yZH1gXG4gICAgICAgICAgKX1gLFxuICAgICAgICB9XG4gICAgICA6IHt9O1xuICAgIGNvbnN0IHBsYXRmb3JtRGVwc0hlYWRlcnMgPSBwbGF0Zm9ybURlcHMuYnVpbGRIZWFkZXJzKHsgdXNlckFnZW50IH0pO1xuXG4gICAgY29uc3QgY29tbW9uSGVhZGVycyA9IHsgLi4ucGxhdGZvcm1EZXBzSGVhZGVycywgLi4uYmFzaWNBdXRoSGVhZGVycyB9O1xuXG4gICAgc3dpdGNoICh0aGlzLmF1dGgudHlwZSkge1xuICAgICAgY2FzZSBcInBhc3N3b3JkXCI6IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5jb21tb25IZWFkZXJzLFxuICAgICAgICAgIFwiWC1DeWJvenUtQXV0aG9yaXphdGlvblwiOiBCYXNlNjQuZW5jb2RlKFxuICAgICAgICAgICAgYCR7dGhpcy5hdXRoLnVzZXJuYW1lfToke3RoaXMuYXV0aC5wYXNzd29yZH1gXG4gICAgICAgICAgKSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJhcGlUb2tlblwiOiB7XG4gICAgICAgIGNvbnN0IGFwaVRva2VuID0gdGhpcy5hdXRoLmFwaVRva2VuO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhcGlUb2tlbikpIHtcbiAgICAgICAgICByZXR1cm4geyAuLi5jb21tb25IZWFkZXJzLCBcIlgtQ3lib3p1LUFQSS1Ub2tlblwiOiBhcGlUb2tlbi5qb2luKFwiLFwiKSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IC4uLmNvbW1vbkhlYWRlcnMsIFwiWC1DeWJvenUtQVBJLVRva2VuXCI6IGFwaVRva2VuIH07XG4gICAgICB9XG4gICAgICBjYXNlIFwib0F1dGhUb2tlblwiOiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uY29tbW9uSGVhZGVycyxcbiAgICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dGhpcy5hdXRoLm9BdXRoVG9rZW59YCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgcmV0dXJuIHsgLi4uY29tbW9uSGVhZGVycywgXCJYLVJlcXVlc3RlZC1XaXRoXCI6IFwiWE1MSHR0cFJlcXVlc3RcIiB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0UmVxdWVzdFRva2VuKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKHRoaXMucmVxdWVzdFRva2VuID09PSBudWxsKSB7XG4gICAgICB0aGlzLnJlcXVlc3RUb2tlbiA9IGF3YWl0IHBsYXRmb3JtRGVwcy5nZXRSZXF1ZXN0VG9rZW4oKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdFRva2VuO1xuICB9XG59XG4iLCIndXNlIHN0cmljdCc7XG52YXIgUFJPUEVSX0ZVTkNUSU9OX05BTUUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpLlBST1BFUjtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyICR0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGZsYWdzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1mbGFncycpO1xuXG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciBSZWdFeHBQcm90b3R5cGUgPSBSZWdFeHAucHJvdG90eXBlO1xudmFyIG5hdGl2ZVRvU3RyaW5nID0gUmVnRXhwUHJvdG90eXBlW1RPX1NUUklOR107XG5cbnZhciBOT1RfR0VORVJJQyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5hdGl2ZVRvU3RyaW5nLmNhbGwoeyBzb3VyY2U6ICdhJywgZmxhZ3M6ICdiJyB9KSAhPSAnL2EvYic7IH0pO1xuLy8gRkY0NC0gUmVnRXhwI3RvU3RyaW5nIGhhcyBhIHdyb25nIG5hbWVcbnZhciBJTkNPUlJFQ1RfTkFNRSA9IFBST1BFUl9GVU5DVElPTl9OQU1FICYmIG5hdGl2ZVRvU3RyaW5nLm5hbWUgIT0gVE9fU1RSSU5HO1xuXG4vLyBgUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUudG9zdHJpbmdcbmlmIChOT1RfR0VORVJJQyB8fCBJTkNPUlJFQ1RfTkFNRSkge1xuICByZWRlZmluZShSZWdFeHAucHJvdG90eXBlLCBUT19TVFJJTkcsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHZhciBSID0gYW5PYmplY3QodGhpcyk7XG4gICAgdmFyIHAgPSAkdG9TdHJpbmcoUi5zb3VyY2UpO1xuICAgIHZhciByZiA9IFIuZmxhZ3M7XG4gICAgdmFyIGYgPSAkdG9TdHJpbmcocmYgPT09IHVuZGVmaW5lZCAmJiBSIGluc3RhbmNlb2YgUmVnRXhwICYmICEoJ2ZsYWdzJyBpbiBSZWdFeHBQcm90b3R5cGUpID8gZmxhZ3MuY2FsbChSKSA6IHJmKTtcbiAgICByZXR1cm4gJy8nICsgcCArICcvJyArIGY7XG4gIH0sIHsgdW5zYWZlOiB0cnVlIH0pO1xufVxuIiwiZXhwb3J0IGNsYXNzIEtpbnRvbmVBYm9ydFNlYXJjaEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcblxuICAgIHRoaXMubmFtZSA9IFwiS2ludG9uZUFib3J0U2VhcmNoRXJyb3JcIjtcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L3dpa2kvQnJlYWtpbmctQ2hhbmdlcyNleHRlbmRpbmctYnVpbHQtaW5zLWxpa2UtZXJyb3ItYXJyYXktYW5kLW1hcC1tYXktbm8tbG9uZ2VyLXdvcmtcbiAgICAvLyBTZXQgdGhlIHByb3RvdHlwZSBleHBsaWNpdGx5LlxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBLaW50b25lQWJvcnRTZWFyY2hFcnJvci5wcm90b3R5cGUpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBFcnJvclJlc3BvbnNlIH0gZnJvbSBcIi4uL2h0dHAvSHR0cENsaWVudEludGVyZmFjZVwiO1xuXG50eXBlIFNpbmdsZUVycm9yUmVzcG9uc2VEYXRhID0ge1xuICBpZDogc3RyaW5nO1xuICBjb2RlOiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgZXJyb3JzPzogYW55O1xufTtcblxudHlwZSBCdWxrUmVxdWVzdEVycm9yUmVzcG9uc2VEYXRhID0ge1xuICByZXN1bHRzOiBBcnJheTxTaW5nbGVFcnJvclJlc3BvbnNlRGF0YSB8IHt9Pjtcbn07XG5cbnR5cGUgS2ludG9uZUVycm9yUmVzcG9uc2VEYXRhID1cbiAgfCBTaW5nbGVFcnJvclJlc3BvbnNlRGF0YVxuICB8IEJ1bGtSZXF1ZXN0RXJyb3JSZXNwb25zZURhdGE7XG5cbmV4cG9ydCB0eXBlIEtpbnRvbmVFcnJvclJlc3BvbnNlID0gRXJyb3JSZXNwb25zZTxLaW50b25lRXJyb3JSZXNwb25zZURhdGE+O1xuXG5leHBvcnQgY2xhc3MgS2ludG9uZVJlc3RBUElFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgaWQ6IHN0cmluZztcbiAgY29kZTogc3RyaW5nO1xuICBzdGF0dXM6IG51bWJlcjtcbiAgYnVsa1JlcXVlc3RJbmRleD86IG51bWJlcjtcbiAgaGVhZGVyczogYW55O1xuICBlcnJvcnM/OiBhbnk7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZmluZEVycm9yUmVzcG9uc2VEYXRhV2l0aEluZGV4KFxuICAgIHJlc3VsdHM6IEJ1bGtSZXF1ZXN0RXJyb3JSZXNwb25zZURhdGFbXCJyZXN1bHRzXCJdXG4gICkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHJlc3VsdHNbaV0pLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICBjb25zdCBkYXRhID0gcmVzdWx0c1tpXSBhcyBTaW5nbGVFcnJvclJlc3BvbnNlRGF0YTtcbiAgICAgICAgcmV0dXJuIHsgZGF0YSwgYnVsa1JlcXVlc3RJbmRleDogaSB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IEVycm9yKFxuICAgICAgXCJNaXNzaW5nIHJlc3BvbnNlIGRhdGEgaW4gYHJlc3VsdHNgLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gS2ludG9uZSBSRVNUIEFQSSBDbGllbnQuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGJ1aWxkRXJyb3JSZXNwb25zZURhdGVXaXRoSW5kZXgoZXJyb3I6IEtpbnRvbmVFcnJvclJlc3BvbnNlKToge1xuICAgIGRhdGE6IFNpbmdsZUVycm9yUmVzcG9uc2VEYXRhO1xuICAgIGJ1bGtSZXF1ZXN0SW5kZXg/OiBudW1iZXI7XG4gIH0ge1xuICAgIGlmIChcInJlc3VsdHNcIiBpbiBlcnJvci5kYXRhKSB7XG4gICAgICByZXR1cm4gS2ludG9uZVJlc3RBUElFcnJvci5maW5kRXJyb3JSZXNwb25zZURhdGFXaXRoSW5kZXgoXG4gICAgICAgIGVycm9yLmRhdGEucmVzdWx0c1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgZGF0YTogZXJyb3IuZGF0YSB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IoZXJyb3I6IEtpbnRvbmVFcnJvclJlc3BvbnNlKSB7XG4gICAgY29uc3QgeyBkYXRhLCBidWxrUmVxdWVzdEluZGV4IH0gPVxuICAgICAgS2ludG9uZVJlc3RBUElFcnJvci5idWlsZEVycm9yUmVzcG9uc2VEYXRlV2l0aEluZGV4KGVycm9yKTtcblxuICAgIHN1cGVyKGRhdGEubWVzc2FnZSk7XG5cbiAgICB0aGlzLm5hbWUgPSBcIktpbnRvbmVSZXN0QVBJRXJyb3JcIjtcbiAgICB0aGlzLmlkID0gZGF0YS5pZDtcbiAgICB0aGlzLmNvZGUgPSBkYXRhLmNvZGU7XG4gICAgdGhpcy5lcnJvcnMgPSBkYXRhLmVycm9ycztcbiAgICB0aGlzLnN0YXR1cyA9IGVycm9yLnN0YXR1cztcbiAgICB0aGlzLmJ1bGtSZXF1ZXN0SW5kZXggPSBidWxrUmVxdWVzdEluZGV4O1xuICAgIHRoaXMuaGVhZGVycyA9IGVycm9yLmhlYWRlcnM7XG4gICAgdGhpcy5tZXNzYWdlID0gYFske2Vycm9yLnN0YXR1c31dIFske3RoaXMuY29kZX1dICR7dGhpcy5tZXNzYWdlfSAoJHt0aGlzLmlkfSlgO1xuXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRXJyb3IjQ3VzdG9tX0Vycm9yX1R5cGVzXG4gICAgLy8gTWFpbnRhaW5zIHByb3BlciBzdGFjayB0cmFjZSBmb3Igd2hlcmUgb3VyIGVycm9yIHdhcyB0aHJvd24gKG9ubHkgYXZhaWxhYmxlIG9uIFY4KVxuICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgS2ludG9uZVJlc3RBUElFcnJvcik7XG4gICAgfVxuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L3dpa2kvQnJlYWtpbmctQ2hhbmdlcyNleHRlbmRpbmctYnVpbHQtaW5zLWxpa2UtZXJyb3ItYXJyYXktYW5kLW1hcC1tYXktbm8tbG9uZ2VyLXdvcmtcbiAgICAvLyBTZXQgdGhlIHByb3RvdHlwZSBleHBsaWNpdGx5LlxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBLaW50b25lUmVzdEFQSUVycm9yLnByb3RvdHlwZSk7XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIEVycm9yUmVzcG9uc2UsXG4gIEh0dHBDbGllbnRFcnJvcixcbiAgUmVzcG9uc2UsXG4gIFJlc3BvbnNlSGFuZGxlcixcbn0gZnJvbSBcIi4vaHR0cC9IdHRwQ2xpZW50SW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBLaW50b25lQWJvcnRTZWFyY2hFcnJvciB9IGZyb20gXCIuL2Vycm9yL0tpbnRvbmVBYm9ydFNlYXJjaEVycm9yXCI7XG5pbXBvcnQge1xuICBLaW50b25lUmVzdEFQSUVycm9yLFxuICBLaW50b25lRXJyb3JSZXNwb25zZSxcbn0gZnJvbSBcIi4vZXJyb3IvS2ludG9uZVJlc3RBUElFcnJvclwiO1xuXG5leHBvcnQgY2xhc3MgS2ludG9uZVJlc3BvbnNlSGFuZGxlciBpbXBsZW1lbnRzIFJlc3BvbnNlSGFuZGxlciB7XG4gIHByaXZhdGUgZW5hYmxlQWJvcnRTZWFyY2hFcnJvcjogYm9vbGVhbjtcbiAgY29uc3RydWN0b3IoeyBlbmFibGVBYm9ydFNlYXJjaEVycm9yIH06IHsgZW5hYmxlQWJvcnRTZWFyY2hFcnJvcjogYm9vbGVhbiB9KSB7XG4gICAgdGhpcy5lbmFibGVBYm9ydFNlYXJjaEVycm9yID0gZW5hYmxlQWJvcnRTZWFyY2hFcnJvcjtcbiAgfVxuICBoYW5kbGU8VD4ocmVzcG9uc2U6IFByb21pc2U8UmVzcG9uc2U8VD4+KTogUHJvbWlzZTxUPiB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLnRoZW4oXG4gICAgICAocmVzKSA9PiB0aGlzLmhhbmRsZVN1Y2Nlc3NSZXNwb25zZTxUPihyZXMpLFxuICAgICAgKGVycm9yKSA9PiB0aGlzLmhhbmRsZUVycm9yUmVzcG9uc2UoZXJyb3IpXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGhhbmRsZVN1Y2Nlc3NSZXNwb25zZTxUPihyZXNwb25zZTogUmVzcG9uc2U8VD4pOiBUIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmVuYWJsZUFib3J0U2VhcmNoRXJyb3IgJiZcbiAgICAgIC9GaWx0ZXIgYWJvcnRlZCBiZWNhdXNlIG9mIHRvbyBtYW55IHNlYXJjaCByZXN1bHRzLy50ZXN0KFxuICAgICAgICByZXNwb25zZS5oZWFkZXJzW1wieC1jeWJvenUtd2FybmluZ1wiXVxuICAgICAgKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEtpbnRvbmVBYm9ydFNlYXJjaEVycm9yKHJlc3BvbnNlLmhlYWRlcnNbXCJ4LWN5Ym96dS13YXJuaW5nXCJdKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gIH1cbiAgcHJpdmF0ZSBoYW5kbGVFcnJvclJlc3BvbnNlKFxuICAgIGVycm9yOiBIdHRwQ2xpZW50RXJyb3I8RXJyb3JSZXNwb25zZTxzdHJpbmc+IHwgS2ludG9uZUVycm9yUmVzcG9uc2U+XG4gICk6IG5ldmVyIHtcbiAgICBpZiAoIWVycm9yLnJlc3BvbnNlKSB7XG4gICAgICAvLyBGSVhNRTogZmluZCBhIGJldHRlciB3YXkgdG8gaGFuZGxlIHRoaXMgZXJyb3JcbiAgICAgIGlmICgvbWFjIHZlcmlmeSBmYWlsdXJlLy50ZXN0KGVycm9yLnRvU3RyaW5nKCkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgY2xpZW50Q2VydEF1dGggc2V0dGluZ1wiKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICBjb25zdCBlcnJvclJlc3BvbnNlID0gZXJyb3IucmVzcG9uc2U7XG5cbiAgICBjb25zdCB7IGRhdGEsIC4uLnJlc3QgfSA9IGVycm9yUmVzcG9uc2U7XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7cmVzdC5zdGF0dXN9OiAke3Jlc3Quc3RhdHVzVGV4dH1gKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEtpbnRvbmVSZXN0QVBJRXJyb3IoeyBkYXRhLCAuLi5yZXN0IH0pO1xuICB9XG59XG4iLCJpbXBvcnQgeyBCdWxrUmVxdWVzdENsaWVudCwgRW5kcG9pbnROYW1lIH0gZnJvbSBcIi4vY2xpZW50L0J1bGtSZXF1ZXN0Q2xpZW50XCI7XG5pbXBvcnQgeyBBcHBDbGllbnQgfSBmcm9tIFwiLi9jbGllbnQvQXBwQ2xpZW50XCI7XG5pbXBvcnQgeyBSZWNvcmRDbGllbnQgfSBmcm9tIFwiLi9jbGllbnQvUmVjb3JkQ2xpZW50XCI7XG5pbXBvcnQgeyBGaWxlQ2xpZW50IH0gZnJvbSBcIi4vY2xpZW50L0ZpbGVDbGllbnRcIjtcbmltcG9ydCB7IERlZmF1bHRIdHRwQ2xpZW50IH0gZnJvbSBcIi4vaHR0cC9cIjtcbmltcG9ydCB7IFByb3h5Q29uZmlnIH0gZnJvbSBcIi4vaHR0cC9IdHRwQ2xpZW50SW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBCYXNpY0F1dGgsIERpc2NyaW1pbmF0ZWRBdXRoIH0gZnJvbSBcIi4vdHlwZXMvYXV0aFwiO1xuaW1wb3J0IHsgS2ludG9uZVJlcXVlc3RDb25maWdCdWlsZGVyIH0gZnJvbSBcIi4vS2ludG9uZVJlcXVlc3RDb25maWdCdWlsZGVyXCI7XG5pbXBvcnQgeyBLaW50b25lUmVzcG9uc2VIYW5kbGVyIH0gZnJvbSBcIi4vS2ludG9uZVJlc3BvbnNlSGFuZGxlclwiO1xuaW1wb3J0IHsgcGxhdGZvcm1EZXBzIH0gZnJvbSBcIi4vcGxhdGZvcm0vaW5kZXhcIjtcbmltcG9ydCB7IFVuc3VwcG9ydGVkUGxhdGZvcm1FcnJvciB9IGZyb20gXCIuL3BsYXRmb3JtL1Vuc3VwcG9ydGVkUGxhdGZvcm1FcnJvclwiO1xuXG50eXBlIE9taXRUeXBlUHJvcGVydHlGcm9tVW5pb248VD4gPSBUIGV4dGVuZHMgdW5rbm93biA/IE9taXQ8VCwgXCJ0eXBlXCI+IDogbmV2ZXI7XG50eXBlIEF1dGggPSBPbWl0VHlwZVByb3BlcnR5RnJvbVVuaW9uPERpc2NyaW1pbmF0ZWRBdXRoPjtcblxudHlwZSBPcHRpb25zID0ge1xuICBiYXNlVXJsPzogc3RyaW5nO1xuICBhdXRoPzogQXV0aDtcbiAgZ3Vlc3RTcGFjZUlkPzogbnVtYmVyIHwgc3RyaW5nO1xuICBiYXNpY0F1dGg/OiBCYXNpY0F1dGg7XG4gIGNsaWVudENlcnRBdXRoPzpcbiAgICB8IHtcbiAgICAgICAgcGZ4OiBCdWZmZXI7XG4gICAgICAgIHBhc3N3b3JkOiBzdHJpbmc7XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHBmeEZpbGVQYXRoOiBzdHJpbmc7XG4gICAgICAgIHBhc3N3b3JkOiBzdHJpbmc7XG4gICAgICB9O1xuICBwcm94eT86IFByb3h5Q29uZmlnO1xuICBmZWF0dXJlRmxhZ3M/OiB7XG4gICAgZW5hYmxlQWJvcnRTZWFyY2hFcnJvcjogYm9vbGVhbjtcbiAgfTtcbiAgdXNlckFnZW50Pzogc3RyaW5nO1xufTtcblxuY29uc3QgYnVpbGREaXNjcmltaW5hdGVkQXV0aCA9IChhdXRoOiBBdXRoKTogRGlzY3JpbWluYXRlZEF1dGggPT4ge1xuICBpZiAoXCJ1c2VybmFtZVwiIGluIGF1dGgpIHtcbiAgICByZXR1cm4geyB0eXBlOiBcInBhc3N3b3JkXCIsIC4uLmF1dGggfTtcbiAgfVxuICBpZiAoXCJhcGlUb2tlblwiIGluIGF1dGgpIHtcbiAgICByZXR1cm4geyB0eXBlOiBcImFwaVRva2VuXCIsIC4uLmF1dGggfTtcbiAgfVxuICBpZiAoXCJvQXV0aFRva2VuXCIgaW4gYXV0aCkge1xuICAgIHJldHVybiB7IHR5cGU6IFwib0F1dGhUb2tlblwiLCAuLi5hdXRoIH07XG4gIH1cbiAgdHJ5IHtcbiAgICByZXR1cm4gcGxhdGZvcm1EZXBzLmdldERlZmF1bHRBdXRoKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoZSBpbnN0YW5jZW9mIFVuc3VwcG9ydGVkUGxhdGZvcm1FcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgc2Vzc2lvbiBhdXRoZW50aWNhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGluICR7ZS5wbGF0Zm9ybX0gZW52aXJvbm1lbnQuYFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhyb3cgZTtcbiAgfVxufTtcblxuZXhwb3J0IGNsYXNzIEtpbnRvbmVSZXN0QVBJQ2xpZW50IHtcbiAgcmVjb3JkOiBSZWNvcmRDbGllbnQ7XG4gIGFwcDogQXBwQ2xpZW50O1xuICBmaWxlOiBGaWxlQ2xpZW50O1xuICBwcml2YXRlIGJ1bGtSZXF1ZXN0XzogQnVsa1JlcXVlc3RDbGllbnQ7XG4gIHByaXZhdGUgYmFzZVVybD86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBPcHRpb25zID0ge30pIHtcbiAgICB2YWxpZGF0ZU9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICB0aGlzLmJhc2VVcmwgPSBwbGF0Zm9ybURlcHMuYnVpbGRCYXNlVXJsKG9wdGlvbnMuYmFzZVVybCk7XG5cbiAgICBjb25zdCBhdXRoID0gYnVpbGREaXNjcmltaW5hdGVkQXV0aChvcHRpb25zLmF1dGggPz8ge30pO1xuICAgIGNvbnN0IHJlcXVlc3RDb25maWdCdWlsZGVyID0gbmV3IEtpbnRvbmVSZXF1ZXN0Q29uZmlnQnVpbGRlcih7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgYXV0aCxcbiAgICB9KTtcbiAgICBjb25zdCByZXNwb25zZUhhbmRsZXIgPSBuZXcgS2ludG9uZVJlc3BvbnNlSGFuZGxlcih7XG4gICAgICBlbmFibGVBYm9ydFNlYXJjaEVycm9yOlxuICAgICAgICBvcHRpb25zLmZlYXR1cmVGbGFncz8uZW5hYmxlQWJvcnRTZWFyY2hFcnJvciA/PyBmYWxzZSxcbiAgICB9KTtcbiAgICBjb25zdCBodHRwQ2xpZW50ID0gbmV3IERlZmF1bHRIdHRwQ2xpZW50KHtcbiAgICAgIHJlc3BvbnNlSGFuZGxlcixcbiAgICAgIHJlcXVlc3RDb25maWdCdWlsZGVyLFxuICAgIH0pO1xuICAgIGNvbnN0IHsgZ3Vlc3RTcGFjZUlkIH0gPSBvcHRpb25zO1xuXG4gICAgdGhpcy5idWxrUmVxdWVzdF8gPSBuZXcgQnVsa1JlcXVlc3RDbGllbnQoaHR0cENsaWVudCwgZ3Vlc3RTcGFjZUlkKTtcbiAgICB0aGlzLnJlY29yZCA9IG5ldyBSZWNvcmRDbGllbnQoaHR0cENsaWVudCwgdGhpcy5idWxrUmVxdWVzdF8sIGd1ZXN0U3BhY2VJZCk7XG4gICAgdGhpcy5hcHAgPSBuZXcgQXBwQ2xpZW50KGh0dHBDbGllbnQsIGd1ZXN0U3BhY2VJZCk7XG4gICAgdGhpcy5maWxlID0gbmV3IEZpbGVDbGllbnQoaHR0cENsaWVudCwgZ3Vlc3RTcGFjZUlkKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0IHZlcnNpb24oKSB7XG4gICAgcmV0dXJuIHBsYXRmb3JtRGVwcy5nZXRWZXJzaW9uKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QmFzZVVybCgpIHtcbiAgICByZXR1cm4gdGhpcy5iYXNlVXJsO1xuICB9XG5cbiAgcHVibGljIGJ1bGtSZXF1ZXN0KHBhcmFtczoge1xuICAgIHJlcXVlc3RzOiBBcnJheTxcbiAgICAgIHwge1xuICAgICAgICAgIG1ldGhvZDogc3RyaW5nO1xuICAgICAgICAgIGFwaTogc3RyaW5nO1xuICAgICAgICAgIHBheWxvYWQ6IG9iamVjdDtcbiAgICAgICAgfVxuICAgICAgfCB7XG4gICAgICAgICAgbWV0aG9kOiBzdHJpbmc7XG4gICAgICAgICAgZW5kcG9pbnROYW1lOiBFbmRwb2ludE5hbWU7XG4gICAgICAgICAgcGF5bG9hZDogb2JqZWN0O1xuICAgICAgICB9XG4gICAgPjtcbiAgfSk6IFByb21pc2U8eyByZXN1bHRzOiBBcnJheTx7IFtLOiBzdHJpbmddOiBhbnkgfT4gfT4ge1xuICAgIHJldHVybiB0aGlzLmJ1bGtSZXF1ZXN0Xy5zZW5kKHBhcmFtcyk7XG4gIH1cbn1cblxuY29uc3QgdmFsaWRhdGVPcHRpb25zID0gKG9wdGlvbnM6IE9wdGlvbnMpID0+IHtcbiAgdmFsaWRhdGVHdWVzdFNwYWNlSWQob3B0aW9ucy5ndWVzdFNwYWNlSWQpO1xufTtcblxuY29uc3QgdmFsaWRhdGVHdWVzdFNwYWNlSWQgPSAoZ3Vlc3RTcGFjZUlkOiBPcHRpb25zW1wiZ3Vlc3RTcGFjZUlkXCJdKSA9PiB7XG4gIGlmIChndWVzdFNwYWNlSWQgPT09IFwiXCIgfHwgZ3Vlc3RTcGFjZUlkID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGd1ZXN0U3BhY2VJZDogZ290IFske2d1ZXN0U3BhY2VJZH1dYCk7XG4gIH1cbn07XG4iLCJpbXBvcnQgeyBpbmplY3RQbGF0Zm9ybURlcHMgfSBmcm9tIFwiLi9wbGF0Zm9ybS9cIjtcbmltcG9ydCAqIGFzIGJyb3dzZXJEZXBzIGZyb20gXCIuL3BsYXRmb3JtL2Jyb3dzZXJcIjtcblxuaW5qZWN0UGxhdGZvcm1EZXBzKGJyb3dzZXJEZXBzKTtcblxuZXhwb3J0IHsgS2ludG9uZVJlc3RBUElDbGllbnQgfSBmcm9tIFwiLi9LaW50b25lUmVzdEFQSUNsaWVudFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZXJyb3JcIjtcbiJdLCJuYW1lcyI6WyJwbGF0Zm9ybURlcHMiLCJyZWFkRmlsZUZyb21QYXRoIiwiRXJyb3IiLCJnZXRSZXF1ZXN0VG9rZW4iLCJnZXREZWZhdWx0QXV0aCIsImJ1aWxkUGxhdGZvcm1EZXBlbmRlbnRDb25maWciLCJidWlsZEhlYWRlcnMiLCJidWlsZEZvcm1EYXRhVmFsdWUiLCJidWlsZEJhc2VVcmwiLCJnZXRWZXJzaW9uIiwiaW5qZWN0UGxhdGZvcm1EZXBzIiwiZGVwcyIsImdsb2JhbCIsImZhaWxzIiwicmVxdWlyZSQkMCIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciIsInRvU3RyaW5nIiwiY2xhc3NvZlJhdyIsImNsYXNzb2YiLCJyZXF1aXJlJCQxIiwicmVxdWlyZU9iamVjdENvZXJjaWJsZSIsIkluZGV4ZWRPYmplY3QiLCJ0b0luZGV4ZWRPYmplY3QiLCJpc0NhbGxhYmxlIiwiaXNPYmplY3QiLCJnZXRCdWlsdEluIiwicHJvY2VzcyIsInZlcnNpb25zIiwibWF0Y2giLCJ2ZXJzaW9uIiwiVjhfVkVSU0lPTiIsIk5BVElWRV9TWU1CT0wiLCJVU0VfU1lNQk9MX0FTX1VJRCIsInJlcXVpcmUkJDIiLCJpc1N5bWJvbCIsInRyeVRvU3RyaW5nIiwiYUNhbGxhYmxlIiwiZ2V0TWV0aG9kIiwib3JkaW5hcnlUb1ByaW1pdGl2ZSIsInNldEdsb2JhbCIsInN0b3JlIiwic2hhcmVkTW9kdWxlIiwidG9PYmplY3QiLCJ1aWQiLCJzaGFyZWQiLCJoYXNPd24iLCJyZXF1aXJlJCQzIiwicmVxdWlyZSQkNCIsInJlcXVpcmUkJDUiLCJTeW1ib2wiLCJ3ZWxsS25vd25TeW1ib2wiLCJ0b1ByaW1pdGl2ZSIsInRvUHJvcGVydHlLZXkiLCJkb2N1bWVudCIsIkVYSVNUUyIsImRvY3VtZW50Q3JlYXRlRWxlbWVudCIsIkRFU0NSSVBUT1JTIiwicHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUiLCJJRThfRE9NX0RFRklORSIsInJlcXVpcmUkJDYiLCJhbk9iamVjdCIsImRlZmluZVByb3BlcnR5TW9kdWxlIiwiY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5IiwiZnVuY3Rpb25Ub1N0cmluZyIsImluc3BlY3RTb3VyY2UiLCJXZWFrTWFwIiwia2V5cyIsInNoYXJlZEtleSIsImhpZGRlbktleXMiLCJyZXF1aXJlJCQ3IiwiaGFzIiwiRnVuY3Rpb25Qcm90b3R5cGUiLCJnZXRJbnRlcm5hbFN0YXRlIiwicmVkZWZpbmVNb2R1bGUiLCJ0b0ludGVnZXJPckluZmluaXR5IiwibWF4IiwibWluIiwidG9BYnNvbHV0ZUluZGV4IiwidG9MZW5ndGgiLCJsZW5ndGhPZkFycmF5TGlrZSIsImNyZWF0ZU1ldGhvZCIsImluZGV4T2YiLCJlbnVtQnVnS2V5cyIsImludGVybmFsT2JqZWN0S2V5cyIsImdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSIsIm93bktleXMiLCJjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzIiwiaXNGb3JjZWQiLCJkYXRhIiwicmVkZWZpbmUiLCJpc0FycmF5IiwiY3JlYXRlUHJvcGVydHkiLCJUT19TVFJJTkdfVEFHIiwiVE9fU1RSSU5HX1RBR19TVVBQT1JUIiwiZXhlYyIsImlzQ29uc3RydWN0b3IiLCJTUEVDSUVTIiwiYXJyYXlTcGVjaWVzQ29uc3RydWN0b3IiLCJhcnJheVNwZWNpZXNDcmVhdGUiLCJhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0IiwiJCIsInJlcXVpcmUkJDgiLCJyZXF1aXJlJCQ5IiwicmVxdWlyZSQkMTAiLCJ1bmRlZmluZWQiLCJkZWZpbmVQcm9wZXJ0eSIsIlVuc3VwcG9ydGVkUGxhdGZvcm1FcnJvciIsInBsYXRmb3JtIiwibWVzc2FnZSIsImNhcHR1cmVTdGFja1RyYWNlIiwibmFtZSIsIk9iamVjdCIsInNldFByb3RvdHlwZU9mIiwicHJvdG90eXBlIiwiZmlsZVBhdGgiLCJraW50b25lIiwiZ2Fyb29uIiwiY29ubmVjdCIsInR5cGUiLCJCbG9iIiwiYmFzZVVybCIsImxvY2F0aW9uIiwiaG9zdCIsInByb3RvY29sIiwiUEFDS0FHRV9WRVJTSU9OIiwiYmluZCIsInB1c2giLCJIQVNfU1BFQ0lFU19TVVBQT1JUIiwiYnVpbGRQYXRoIiwicGFyYW1zIiwiZW5kcG9pbnROYW1lIiwiZ3Vlc3RTcGFjZUlkIiwicHJldmlldyIsImd1ZXN0UGF0aCIsInByZXZpZXdQYXRoIiwiQnVsa1JlcXVlc3RDbGllbnQiLCJjbGllbnQiLCJSRVFVRVNUU19MRU5HVEhfTElNSVQiLCJyZXF1ZXN0c1BhcmFtIiwicmVxdWVzdHMiLCJtYXAiLCJyZXF1ZXN0IiwicmVzdCIsImFwaSIsImJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQiLCJwYXRoIiwicG9zdCIsIkFwcENsaWVudCIsImdldCIsInB1dCIsImRlbGV0ZSIsInNwYWNlIiwic3BhY2VQYXRoIiwiaWQiLCJkZWZhdWx0VGhyZWFkIiwidGhyZWFkIiwib2JqZWN0S2V5cyIsImFzc2lnbiIsInJlZ2V4cEZsYWdzIiwiJFJlZ0V4cCIsImh0bWwiLCJyZWdleHBFeGVjIiwiUmVnRXhwUHJvdG90eXBlIiwiYWR2YW5jZVN0cmluZ0luZGV4IiwiYVBvc3NpYmxlUHJvdG90eXBlIiwiaW5oZXJpdElmUmVxdWlyZWQiLCJ0aGlzTnVtYmVyVmFsdWUiLCJ3aGl0ZXNwYWNlcyIsInJlcXVpcmUkJDExIiwicmVxdWlyZSQkMTIiLCJ0cmltIiwicmVxdWlyZSQkMTMiLCJvYmplY3RUb1N0cmluZyIsIktpbnRvbmVBbGxSZWNvcmRzRXJyb3IiLCJwcm9jZXNzZWRSZWNvcmRzUmVzdWx0IiwidW5wcm9jZXNzZWRSZWNvcmRzIiwibnVtT2ZBbGxSZWNvcmRzIiwiZXJyb3IiLCJjaHVua0xlbmd0aCIsIm51bU9mUHJvY2Vzc2VkUmVjb3JkcyIsImxlbmd0aCIsImVycm9ySW5kZXgiLCJleHRyYWN0RXJyb3JJbmRleCIsImJ1aWxkRXJyb3JNZXNzYWdlIiwiZXJyb3JzIiwiZmlyc3RFcnJvcktleSIsInJlc3VsdCIsIk51bWJlciIsImJ1bGtSZXF1ZXN0SW5kZXgiLCJlcnJvclBhcnNlUmVzdWx0IiwicGFyc2VFcnJvckluZGV4IiwiQUREX1JFQ09SRFNfTElNSVQiLCJVUERBVEVfUkVDT1JEU19MSU1JVCIsIkRFTEVURV9SRUNPUkRTX0xJTUlUIiwiUmVjb3JkQ2xpZW50IiwiYnVsa1JlcXVlc3RDbGllbnQiLCJkaWRXYXJuTWF4aW11bU9mZnNldFZhbHVlIiwiYXBwIiwidXBkYXRlS2V5IiwicmVjb3JkIiwiZ2V0UmVjb3JkcyIsInF1ZXJ5IiwiZmllbGQiLCJ2YWx1ZSIsInJlY29yZHMiLCIkaWQiLCJ1cGRhdGVSZWNvcmQiLCJyZXZpc2lvbiIsImFkZFJlY29yZCIsInJlc3BvbnNlIiwid2Fybk1heGltdW1PZmZzZXRWYWx1ZUlmTmVlZGVkIiwicmVnZXhwIiwiY29uc29sZSIsIndhcm4iLCJpZHMiLCJyZXZpc2lvbnMiLCJpIiwiY29uZGl0aW9uIiwib3JkZXJCeSIsIndpdGhDdXJzb3IiLCJnZXRBbGxSZWNvcmRzV2l0aElkIiwiY29uZGl0aW9uUXVlcnkiLCJnZXRBbGxSZWNvcmRzV2l0aEN1cnNvciIsImdldEFsbFJlY29yZHNXaXRoT2Zmc2V0Iiwib3JpZ2luYWxGaWVsZHMiLCJmaWVsZHMiLCJnZXRBbGxSZWNvcmRzUmVjdXJzaXZlV2l0aElkIiwiR0VUX1JFQ09SRFNfTElNSVQiLCJhbGxSZWNvcmRzIiwiY29uY2F0IiwibGFzdFJlY29yZCIsImxhc3RJZCIsImdldEFsbFJlY29yZHNSZWN1cnNpdmVXaXRoT2Zmc2V0Iiwib2Zmc2V0IiwiY3JlYXRlQ3Vyc29yIiwiZ2V0QWxsUmVjb3Jkc1JlY3Vyc2l2ZUJ5Q3Vyc29yIiwiZGVsZXRlQ3Vyc29yIiwiZ2V0UmVjb3Jkc0J5Q3Vyc29yIiwibmV4dCIsImV2ZXJ5IiwiQXJyYXkiLCJhZGRBbGxSZWNvcmRzUmVjdXJzaXZlIiwicmVzdWx0cyIsIkNIVU5LX0xFTkdUSCIsInJlY29yZHNDaHVuayIsInNsaWNlIiwiYWRkQWxsUmVjb3Jkc1dpdGhCdWxrUmVxdWVzdCIsIm5ld1Jlc3VsdHMiLCJzZXBhcmF0ZWRSZWNvcmRzIiwic2VwYXJhdGVBcnJheVJlY3Vyc2l2ZSIsIm1ldGhvZCIsInBheWxvYWQiLCJzZW5kIiwicmVkdWNlIiwiYWNjIiwidXBkYXRlQWxsUmVjb3Jkc1JlY3Vyc2l2ZSIsInVwZGF0ZUFsbFJlY29yZHNXaXRoQnVsa1JlcXVlc3QiLCJkZWxldGVBbGxSZWNvcmRzUmVjdXJzaXZlIiwiZGVsZXRlQWxsUmVjb3Jkc1dpdGhCdWxrUmVxdWVzdCIsInNpemUiLCJzZXBhcmF0ZWQiLCJhcnJheSIsImNodW5rIiwiYnJvd3NlciIsIkZpbGVDbGllbnQiLCJmb3JtRGF0YSIsIkZvcm1EYXRhIiwiZmlsZSIsImFwcGVuZCIsInBvc3REYXRhIiwiZ2V0RGF0YSIsImlzQnVmZmVyIiwiaXNTdHJpbmciLCJpc051bWJlciIsImlzRGF0ZSIsIm1lcmdlIiwidXRpbHMiLCJlbmNvZGUiLCJidWlsZFVSTCIsIkludGVyY2VwdG9yTWFuYWdlciIsIm5vcm1hbGl6ZUhlYWRlck5hbWUiLCJlbmhhbmNlRXJyb3IiLCJjcmVhdGVFcnJvciIsInNldHRsZSIsImNvb2tpZXMiLCJpc0Fic29sdXRlVVJMIiwiY29tYmluZVVSTHMiLCJidWlsZEZ1bGxQYXRoIiwicGFyc2VIZWFkZXJzIiwiaXNVUkxTYW1lT3JpZ2luIiwiQ2FuY2VsIiwiZGVmYXVsdHMiLCJ0cmFuc2Zvcm1EYXRhIiwiaXNDYW5jZWwiLCJkaXNwYXRjaFJlcXVlc3QiLCJtZXJnZUNvbmZpZyIsInZhbGlkYXRvcnMiLCJ2YWxpZGF0b3IiLCJBeGlvcyIsImF4aW9zIiwiYXhpb3NNb2R1bGUiLCJBeGlvc0NsaWVudCIsInJlc3BvbnNlSGFuZGxlciIsInJlcXVlc3RDb25maWdCdWlsZGVyIiwiYnVpbGQiLCJyZXF1ZXN0Q29uZmlnIiwic2VuZFJlcXVlc3QiLCJyZXNwb25zZVR5cGUiLCJoYW5kbGUiLCJtYXhCb2R5TGVuZ3RoIiwiSW5maW5pdHkiLCJtYXhDb250ZW50TGVuZ3RoIiwiYXJyYXlNZXRob2RJc1N0cmljdCIsImhhc1N5bWJvbHMiLCJ0b1N0ciIsImltcGxlbWVudGF0aW9uIiwiJFN5bnRheEVycm9yIiwiJEZ1bmN0aW9uIiwiJFR5cGVFcnJvciIsImdldEV2YWxsZWRDb25zdHJ1Y3RvciIsIiRnT1BEIiwidGhyb3dUeXBlRXJyb3IiLCJUaHJvd1R5cGVFcnJvciIsImdldFByb3RvIiwiVHlwZWRBcnJheSIsIklOVFJJTlNJQ1MiLCJMRUdBQ1lfQUxJQVNFUyIsIiRjb25jYXQiLCIkc3BsaWNlQXBwbHkiLCIkcmVwbGFjZSIsInJlUHJvcE5hbWUiLCJyZUVzY2FwZUNoYXIiLCJzdHJpbmdUb1BhdGgiLCJnZXRCYXNlSW50cmluc2ljIiwiZ2V0SW50cmluc2ljIiwiR2V0SW50cmluc2ljIiwiY2FsbEJvdW5kIiwiaXNSZWdFeHAiLCJmb3JtYXRzIiwic3RyaW5naWZ5IiwicGFyc2UiLCJ0aGlzIiwiVEhSRVNIT0xEX0FWT0lEX1JFUVVFU1RfVVJMX1RPT19MQVJHRSIsIktpbnRvbmVSZXF1ZXN0Q29uZmlnQnVpbGRlciIsImF1dGgiLCJiYXNpY0F1dGgiLCJjbGllbnRDZXJ0QXV0aCIsInByb3h5IiwidXNlckFnZW50IiwiaGVhZGVycyIsInJlcXVlc3RUb2tlbiIsIm9wdGlvbnMiLCJ1cmwiLCJyZXF1ZXN0VXJsIiwiYnVpbGRSZXF1ZXN0VXJsIiwiYnVpbGREYXRhIiwiZ2V0SGVhZGVycyIsInFzIiwiX19SRVFVRVNUX1RPS0VOX18iLCJiYXNpY0F1dGhIZWFkZXJzIiwiQXV0aG9yaXphdGlvbiIsIkJhc2U2NCIsInVzZXJuYW1lIiwicGFzc3dvcmQiLCJwbGF0Zm9ybURlcHNIZWFkZXJzIiwiY29tbW9uSGVhZGVycyIsImFwaVRva2VuIiwiam9pbiIsIm9BdXRoVG9rZW4iLCJLaW50b25lQWJvcnRTZWFyY2hFcnJvciIsIktpbnRvbmVSZXN0QVBJRXJyb3IiLCJidWlsZEVycm9yUmVzcG9uc2VEYXRlV2l0aEluZGV4IiwiY29kZSIsInN0YXR1cyIsImZpbmRFcnJvclJlc3BvbnNlRGF0YVdpdGhJbmRleCIsIktpbnRvbmVSZXNwb25zZUhhbmRsZXIiLCJlbmFibGVBYm9ydFNlYXJjaEVycm9yIiwidGhlbiIsInJlcyIsImhhbmRsZVN1Y2Nlc3NSZXNwb25zZSIsImhhbmRsZUVycm9yUmVzcG9uc2UiLCJ0ZXN0IiwiZXJyb3JSZXNwb25zZSIsInN0YXR1c1RleHQiLCJidWlsZERpc2NyaW1pbmF0ZWRBdXRoIiwiZSIsIktpbnRvbmVSZXN0QVBJQ2xpZW50IiwidmFsaWRhdGVPcHRpb25zIiwiZmVhdHVyZUZsYWdzIiwiaHR0cENsaWVudCIsIkRlZmF1bHRIdHRwQ2xpZW50IiwiYnVsa1JlcXVlc3RfIiwidmFsaWRhdGVHdWVzdFNwYWNlSWQiLCJicm93c2VyRGVwcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0VBY08sSUFBTUEsWUFBMEIsR0FBRztFQUN4Q0MsRUFBQUEsZ0JBQWdCLEVBQUUsNEJBQU07RUFDdEIsVUFBTSxJQUFJQyxLQUFKLENBQVUsaUJBQVYsQ0FBTjtFQUNELEdBSHVDO0VBSXhDQyxFQUFBQSxlQUFlLEVBQUUsMkJBQU07RUFDckIsVUFBTSxJ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QUFFLElBQUksUUFBUSxJQUFJLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0VBQzlDLElBQUksRUFBRSxHQUFHd0ksTUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2xCLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDN0IsSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFLElBQUksS0FBSyxLQUFLLEVBQUUsRUFBRTtFQUN0QyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQy9CLE1BQU0sSUFBSSxLQUFLLEtBQUssRUFBRSxJQUFJLEtBQUssS0FBSyxHQUFHLEVBQUUsT0FBTyxHQUFHLENBQUM7RUFDcEQsS0FBSyxNQUFNLElBQUksS0FBSyxLQUFLLEVBQUUsRUFBRTtFQUM3QixNQUFNLFFBQVEsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7RUFDOUIsUUFBUSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDLENBQUMsTUFBTTtFQUN6RCxRQUFRLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsQ0FBQyxNQUFNO0VBQzFELFFBQVEsU0FBUyxPQUFPLENBQUMsRUFBRSxDQUFDO0VBQzVCLE9BQU87RUFDUCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzNCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7RUFDN0IsTUFBTSxLQUFLLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtFQUMvQyxRQUFRLElBQUksR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0VBQ3hD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QUFHLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNwQyxZQUFZLFNBQVM7RUFDckIsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUU7RUFDdEIsWUFBWSxHQUFHLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNwQyxZQUFZLFNBQVM7RUFDckIsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUU7RUFDdkIsWUFBWSxHQUFHLEdBQUcsR0FBRyxJQUFJLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2xGLFlBQVksU0FBUztFQUNyQixTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksTUFBTSxFQUFFO0VBQ3ZDLFlBQVksR0FBRyxHQUFHLEdBQUcsSUFBSSxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3hILFlBQVksU0FBUztFQUNyQixTQUFTO0FBQ1Q7RUFDQSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDZixRQUFRLENBQUMsR0FBRyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEtBQUssRUFBRSxLQUFLLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztFQUM3RSxRQUFRLEdBQUcsSUFBSSxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFF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