with-style 5.0.96 → 5.0.97

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/example.js +10 -8
  2. package/package.json +3 -3
package/example.js CHANGED
@@ -10326,8 +10326,7 @@
10326
10326
  value: function parse(nodes, state, callback) {
10327
10327
  var parsed;
10328
10328
  var part = this.getPart();
10329
- parsePart(part, nodes, state, callback);
10330
- parsed = true;
10329
+ parsed = parsePart(part, nodes, state, callback);
10331
10330
  return parsed;
10332
10331
  }
10333
10332
  },
@@ -10349,14 +10348,17 @@
10349
10348
  }(_nonTerminal.default);
10350
10349
  exports.default = OptionalPartPart;
10351
10350
  function parsePart(part, nodes, state, callback) {
10351
+ var parsed;
10352
10352
  if (callback !== null) {
10353
- var parsed = callback();
10353
+ parsed = callback();
10354
10354
  if (!parsed) {
10355
- part.parse(nodes, state, callback);
10355
+ parsed = part.parse(nodes, state, callback);
10356
10356
  }
10357
10357
  } else {
10358
10358
  part.parse(nodes, state, callback);
10359
+ parsed = true;
10359
10360
  }
10361
+ return parsed;
10360
10362
  }
10361
10363
  });
10362
10364
 
@@ -10871,8 +10873,7 @@
10871
10873
  value: function parse(nodes, state, callback) {
10872
10874
  var parsed;
10873
10875
  var part = this.getPart();
10874
- parsePart(part, nodes, state, callback);
10875
- parsed = true;
10876
+ parsed = parsePart(part, nodes, state, callback);
10876
10877
  return parsed;
10877
10878
  }
10878
10879
  },
@@ -10898,7 +10899,7 @@
10898
10899
  if (callback !== null) {
10899
10900
  parsed = callback();
10900
10901
  if (!parsed) {
10901
- part.parse(nodes, state, function() {
10902
+ parsed = part.parse(nodes, state, function() {
10902
10903
  return parsePart(part, nodes, state, callback);
10903
10904
  });
10904
10905
  }
@@ -10907,6 +10908,7 @@
10907
10908
  if (parsed) {
10908
10909
  parsePart(part, nodes, state, callback);
10909
10910
  }
10911
+ parsed = true;
10910
10912
  }
10911
10913
  return parsed;
10912
10914
  }
@@ -21754,4 +21756,4 @@
21754
21756
  ], "def", superStyle);
21755
21757
  renderStyles();
21756
21758
  })();
21757
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL3RhZ05hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2xldmVscy5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9tZXRob2RzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2hlYWRlcnMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMva2V5Q29kZXMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvZW5jb2RpbmdzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2NoYXJhY3RlcnMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvc3RhdHVzQ29kZXMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvY29udGVudFR5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL3N0YXR1c01lc3NhZ2VzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL3V0aWxpdGllcy9hcnJheS5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL2h0dHAuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL2FqYXguanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL3BhdGguanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL2FzeW5jaHJvbm91cy5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9icm93c2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3V0aWxpdGllcy9jb250ZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3R5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL3NpZ25pZmljYW50LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9ydWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3NwZWNpYWxTeW1ib2xzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL2JuZi9lbnRyaWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3V0aWxpdGllcy90b2tlbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9jb21tb24vbGV4ZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvd2hpdGVzcGFjZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9zaWduaWZpY2FudC9yZWd1bGFyRXhwcmVzc2lvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9lbmRPZkxpbmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsL2RvdWJseVF1b3RlZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9ibmYvbGV4ZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvYmFzaWMvZW50cmllcy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsL3NpbmdseVF1b3RlZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lL3B5dGhvblN0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mL3B5dGhvblN0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2YuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZi9weXRob25TdHlsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZi9weXRob25TdHlsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9iYXNpYy9sZXhlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9zaWduaWZpY2FudC9lbmRPZkxpbmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQvY29tbWVudC9lbmRPZkxpbmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lL2NTdHlsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZi9jU3R5bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZi9jU3R5bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvbWlkZGxlT2YvY1N0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL2luZGV4LmpzIiwgInNyYy9jc3MvZW50cmllcy5qcyIsICJzcmMvY3NzL2xleGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvYm5mLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3V0aWxpdGllcy9zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmF1bHRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvdXRpbGl0aWVzL2FycmF5LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJzZVRyZWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3BhcnNlVHJlZS92ZXJ0aWNhbEJyYW5jaC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFyc2VUcmVlL3J1bGVOYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJzZVRyZWUvaG9yaXpvbnRhbEJyYW5jaC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFyc2VUcmVlL2NoaWxkTm9kZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnNlVHJlZS9ub25UZXJtaW5hbE5vZGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvbm9uVGVybWluYWwuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL25hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3V0aWxpdGllcy9wYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy91dGlsaXRpZXMvbG9va0FoZWFkLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0L3Rlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJzZVRyZWUvdGVybWluYWxOb2RlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL3Rlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0L3Rlcm1pbmFsL3NpZ25pZmljYW50VG9rZW5UeXBlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL25hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGVOYW1lcy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0L25vblRlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0VHlwZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3BhcnQvbm9uVGVybWluYWwvb3B0aW9uYWxQYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0L25vblRlcm1pbmFsL2NvbGxlY3Rpb25PZlBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L25vblRlcm1pbmFsL29uZU9yTW9yZVBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L25vblRlcm1pbmFsL3plcm9Pck1vcmVQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvdXRpbGl0aWVzL2JuZi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvcGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9ydWxlTmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9wYXJ0UnVsZS90ZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9wYXJ0UnVsZS9ub25UZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9wYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9ydWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3J1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvcnVsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvZXJyb3IuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvdGVybWluYWwvd2lsZGNhcmQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vZXJyb3IuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvZXJyb3IuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL2RvY3VtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0L25vblRlcm1pbmFsL2Nob2ljZU9mUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vZG9jdW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvZG9jdW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL3J1bGVOYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL3J1bGVOYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi93aWxkY2FyZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi90ZXJtaW5hbFN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS93aWxkY2FyZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFyc2VUcmVlL2VuZE9mTGluZU5vZGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvdGVybWluYWwvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L3Rlcm1pbmFsL2VuZE9mTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2VuZE9mTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9xdWFudGlmaWVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9kZWZpbml0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL2RlZmluaXRpb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvZGVmaW5pdGlvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvZGVmaW5pdGlvbnMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3BhcnQvbm9uVGVybWluYWwvc2VxdWVuY2VPZlBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL2RlZmluaXRpb25zLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2RlZmluaXRpb25zLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9wYXJ0L3Rlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL3Rlcm1pbmFsUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvY2hvaWNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9jaG9pY2VPZlBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2Nob2ljZU9mUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL25vZGUvYm5mL3Rlcm1pbmFsU3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3NpZ25pZmljYW50VG9rZW5UeXBlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL3Rlcm1pbmFsU3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9wYXJ0L25vblRlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3BhcnRSdWxlL25vblRlcm1pbmFsL3J1bGVOYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL25vblRlcm1pbmFsUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvc2VxdWVuY2VPZlBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3NlcXVlbmNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9zZXF1ZW5jZU9mUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnNlVHJlZS9ub1doaXRlc3BhY2VOb2RlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL3Rlcm1pbmFsL25vV2hpdGVzcGFjZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC90ZXJtaW5hbC9ub1doaXRlc3BhY2UuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL25vV2hpdGVzcGFjZVBhcnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vbm9XaGl0ZXNwYWNlUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9ub1doaXRlc3BhY2VQYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL2xvb2tBaGVhZE1vZGlmaWVyUnVsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9sb29rQWhlYWRNb2RpZmllci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcGFydC90ZXJtaW5hbC9yZWd1bGFyRXhwcmVzc2lvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvcmVndWxhckV4cHJlc3Npb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvcmVndWxhckV4cHJlc3Npb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vcXVhbnRpZmllclJ1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvb3B0aW9uYWxRdWFudGlmaWVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL29uZU9yTW9yZVF1YW50aWZpZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvemVyb09yTW9yZVF1YW50aWZpZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL25vZGUvYm5mL3NpZ25pZmljYW50VG9rZW5UeXBlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL3NpZ25pZmljYW50VG9rZW5UeXBlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy91dGlsaXRpZXMvcnVsZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9wYXJzZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2Jhc2ljL2JuZi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvdXRpbGl0aWVzL3BhcnNlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvY29tbW9uL3BhcnNlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYmFzaWMvcGFyc2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvaW5kZXguanMiLCAic3JjL2Nzcy9ibmYuanMiLCAic3JjL2Nzcy9wYXJzZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWRvbS9zcmMvdXRpbGl0aWVzL2FycmF5LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1kb20vc3JjL3NwcmVhZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZG9tL3NyYy9xdWVyeS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZG9tL3NyYy91dGlsaXRpZXMvcXVlcnkuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWRvbS9zcmMvaW5kZXguanMiLCAic3JjL2NvbnN0YW50cy5qcyIsICJzcmMvdXRpbGl0aWVzL2NvbnRlbnQuanMiLCAic3JjL3N0eWxlL2RlY2xhcmF0aW9uLmpzIiwgInNyYy9zdHlsZS9kZWNsYXJhdGlvbnMuanMiLCAic3JjL3N0eWxlL3J1bGVTZXQuanMiLCAic3JjL3N0eWxlL3J1bGVTZXRzLmpzIiwgInNyYy9zdHlsZS9tZWRpYS5qcyIsICJzcmMvc3R5bGUvbWVkaWFzLmpzIiwgInNyYy9zdHlsZS5qcyIsICJzcmMvdXRpbGl0aWVzL3N0eWxlcy5qcyIsICJzcmMvdXRpbGl0aWVzL2NsYXNzTmFtZS5qcyIsICJzcmMvaW5kZXguanMiLCAic3JjL2V4YW1wbGUuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCB0YWdOYW1lcyA9IFtcbiAgXCJhXCIsIFwiYWJiclwiLCBcImFkZHJlc3NcIiwgXCJhc2lkZVwiLCBcImF1ZGlvXCIsXG4gIFwiYlwiLCBcImJhc2VcIiwgXCJiZGlcIiwgXCJiZG9cIiwgXCJibG9ja3F1b3RlXCIsIFwiYm9keVwiLCBcImJyXCIsIFwiYnV0dG9uXCIsXG4gIFwiY2FudmFzXCIsIFwiY2FwdGlvblwiLCBcImNpdGVcIiwgXCJjb2RlXCIsIFwiY29sXCIsIFwiY29sZ3JvdXBcIixcbiAgXCJkYXRhXCIsIFwiZGF0YWxpc3RcIiwgXCJkZFwiLCBcImRlbFwiLCBcImRldGFpbHNcIiwgXCJkZm5cIiwgXCJkaWFsb2dcIiwgXCJkaXZcIiwgXCJkbFwiLCBcImR0XCIsIFwiZW1cIiwgXCJlbWJlZFwiLCBcImZpZWxkc2V0XCIsIFwiZmlnY2FwdGlvblwiLCBcImZpZ3VyZVwiLCBcImZvb3RlclwiLCBcImZvcm1cIixcbiAgXCJoMVwiLCBcImgyXCIsIFwiaDNcIiwgXCJoNFwiLCBcImg1XCIsIFwiaDZcIiwgXCJoZWFkXCIsIFwiaGVhZGVyXCIsIFwiaHJcIiwgXCJodG1sXCIsXG4gIFwiaVwiLCBcImlmcmFtZVwiLCBcImltZ1wiLCBcImlucHV0XCIsIFwiaW5zXCIsIFwia2JkXCIsIFwibGFiZWxcIiwgXCJsZWdlbmRcIiwgXCJsaVwiLCBcImxpbmtcIixcbiAgXCJtYWluXCIsIFwibWFwXCIsIFwibWFya1wiLCBcIm1ldGFcIiwgXCJtZXRlclwiLCBcIm5hdlwiLCBcIm5vc2NyaXB0XCIsXG4gIFwib2JqZWN0XCIsIFwib2xcIiwgXCJvcHRncm91cFwiLCBcIm9wdGlvblwiLCBcIm91dHB1dFwiLFxuICBcInBcIiwgXCJwYXJhbVwiLCBcInBpY3R1cmVcIiwgXCJwcmVcIiwgXCJwcm9ncmVzc1wiLFxuICBcInFcIiwgXCJycFwiLCBcInJ0XCIsIFwicnVieVwiLFxuICBcInNcIiwgXCJzYW1wXCIsIFwic2NyaXB0XCIsIFwic2VjdGlvblwiLCBcInNlbGVjdFwiLCBcInNtYWxsXCIsIFwic291cmNlXCIsIFwic3BhblwiLCBcInN0cm9uZ1wiLCBcInN0eWxlXCIsIFwic3ViXCIsIFwic3VtbWFyeVwiLCBcInN1cFwiLCBcInN2Z1wiLFxuICBcInRhYmxlXCIsIFwidGJvZHlcIiwgXCJ0ZFwiLCBcInRlbXBsYXRlXCIsIFwidGV4dGFyZWFcIiwgXCJ0Zm9vdFwiLCBcInRoXCIsIFwidGhlYWRcIiwgXCJ0aW1lXCIsIFwidGl0bGVcIiwgXCJ0clwiLCBcInRyYWNrXCIsXG4gIFwidVwiLCBcInVsXCIsXG4gIFwidmFyXCIsIFwidmlkZW9cIixcbiAgXCJ3YnJcIlxuXTtcblxuZXhwb3J0IGRlZmF1bHQgdGFnTmFtZXM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBUUkFDRV9MRVZFTCA9IFwidHJhY2VcIjtcbmV4cG9ydCBjb25zdCBERUJVR19MRVZFTCA9IFwiZGVidWdcIjtcbmV4cG9ydCBjb25zdCBJTkZPX0xFVkVMID0gXCJpbmZvXCI7XG5leHBvcnQgY29uc3QgV0FSTklOR19MRVZFTCA9IFwid2FybmluZ1wiO1xuZXhwb3J0IGNvbnN0IEVSUk9SX0xFVkVMID0gXCJlcnJvclwiO1xuZXhwb3J0IGNvbnN0IEZBVEFMX0xFVkVMID0gXCJmYXRhbFwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFRSQUNFX0xFVkVMLFxuICBERUJVR19MRVZFTCxcbiAgSU5GT19MRVZFTCxcbiAgV0FSTklOR19MRVZFTCxcbiAgRVJST1JfTEVWRUwsXG4gIEZBVEFMX0xFVkVMXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgR0VUX01FVEhPRCA9IFwiR0VUXCI7XG5leHBvcnQgY29uc3QgUE9TVF9NRVRIT0QgPSBcIlBPU1RcIjtcbmV4cG9ydCBjb25zdCBERUxFVEVfTUVUSE9EID0gXCJERUxFVEVcIjtcbmV4cG9ydCBjb25zdCBPUFRJT05TX01FVEhPRCA9IFwiT1BUSU9OU1wiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIEdFVF9NRVRIT0QsXG4gIFBPU1RfTUVUSE9ELFxuICBERUxFVEVfTUVUSE9ELFxuICBPUFRJT05TX01FVEhPRFxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFBSQUdNQV9IRUFERVIgPSBcInByYWdtYVwiO1xuZXhwb3J0IGNvbnN0IEFDQ0VQVF9IRUFERVIgPSBcImFjY2VwdFwiO1xuZXhwb3J0IGNvbnN0IExPQ0FUSU9OX0hFQURFUiA9IFwibG9jYXRpb25cIjtcbmV4cG9ydCBjb25zdCBVU0VSX0FHRU5UX0hFQURFUiA9IFwidXNlci1hZ2VudFwiO1xuZXhwb3J0IGNvbnN0IENPTlRFTlRfVFlQRV9IRUFERVIgPSBcImNvbnRlbnQtdHlwZVwiO1xuZXhwb3J0IGNvbnN0IEFVVEhPUklaQVRJT05fSEVBREVSID0gXCJhdXRob3JpemF0aW9uXCI7XG5leHBvcnQgY29uc3QgQ0FDSEVfQ09OVFJPTF9IRUFERVIgPSBcImNhY2hlLWNvbnRyb2xcIjtcbmV4cG9ydCBjb25zdCBDT05URU5UX0xFTkdUSF9IRUFERVIgPSBcImNvbnRlbnQtbGVuZ3RoXCI7XG5leHBvcnQgY29uc3QgVFJBTlNGRVJfRU5DT0RJTkdfSEVBREVSID0gXCJ0cmFuc2Zlci1lbmNvZGluZ1wiO1xuZXhwb3J0IGNvbnN0IENPTlRFTlRfRElTUE9TSVRJT05fSEVBREVSID0gXCJjb250ZW50LWRpc3Bvc2l0aW9uXCI7XG5leHBvcnQgY29uc3QgQUNDRVNTX0NPTlRST0xfQUxMT1dfT1JJR0lOX0hFQURFUiA9IFwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctb3JpZ2luXCI7XG5leHBvcnQgY29uc3QgQUNDRVNTX0NPTlRST0xfQUxMT1dfTUVUSE9EU19IRUFERVIgPSBcImFjY2Vzcy1jb250cm9sLWFsbG93LW1ldGhvZHNcIjtcbmV4cG9ydCBjb25zdCBBQ0NFU1NfQ09OVFJPTF9BTExPV19IRUFERVJTX0hFQURFUiA9IFwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctaGVhZGVyc1wiO1xuZXhwb3J0IGNvbnN0IEFDQ0VTU19DT05UUk9MX1JFUVVFU1RfTUVUSE9EX0hFQURFUiA9IFwiYWNjZXNzLWNvbnRyb2wtcmVxdWVzdC1tZXRob2RcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBQUkFHTUFfSEVBREVSLFxuICBBQ0NFUFRfSEVBREVSLFxuICBMT0NBVElPTl9IRUFERVIsXG4gIFVTRVJfQUdFTlRfSEVBREVSLFxuICBDT05URU5UX1RZUEVfSEVBREVSLFxuICBBVVRIT1JJWkFUSU9OX0hFQURFUixcbiAgQ0FDSEVfQ09OVFJPTF9IRUFERVIsXG4gIENPTlRFTlRfTEVOR1RIX0hFQURFUixcbiAgVFJBTlNGRVJfRU5DT0RJTkdfSEVBREVSLFxuICBDT05URU5UX0RJU1BPU0lUSU9OX0hFQURFUixcbiAgQUNDRVNTX0NPTlRST0xfQUxMT1dfT1JJR0lOX0hFQURFUixcbiAgQUNDRVNTX0NPTlRST0xfQUxMT1dfTUVUSE9EU19IRUFERVIsXG4gIEFDQ0VTU19DT05UUk9MX0FMTE9XX0hFQURFUlNfSEVBREVSLFxuICBBQ0NFU1NfQ09OVFJPTF9SRVFVRVNUX01FVEhPRF9IRUFERVJcbn07IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgU0hJRlRfS0VZX0NPREUgPSAxNjtcbmV4cG9ydCBjb25zdCBFU0NBUEVfS0VZQ09ERSA9IDI3O1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFNISUZUX0tFWV9DT0RFLFxuICBFU0NBUEVfS0VZQ09ERVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFVURjhfRU5DT0RJTkcgPSBcInV0ZjhcIjtcbmV4cG9ydCBjb25zdCBVVEZfOF9FTkNPRElORyA9IFwidXRmLThcIjtcbmV4cG9ydCBjb25zdCBCQVNFNjRfRU5DT0RJTkcgPSBcImJhc2U2NFwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFVURjhfRU5DT0RJTkcsXG4gIFVURl84X0VOQ09ESU5HLFxuICBCQVNFNjRfRU5DT0RJTkdcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBFVFhfQ0hBUkFDVEVSID0gXCJcXHUwMDAzXCI7XG5leHBvcnQgY29uc3QgQkFSX0NIQVJBQ1RFUiA9IFwifFwiO1xuZXhwb3J0IGNvbnN0IERBU0hfQ0hBUkFDVEVSID0gXCItXCI7XG5leHBvcnQgY29uc3QgU1BBQ0VfQ0hBUkFDVEVSID0gXCIgXCI7XG5leHBvcnQgY29uc3QgQ09NTUFfQ0hBUkFDVEVSID0gXCIsXCI7XG5leHBvcnQgY29uc3QgQ09MT05fQ0hBUkFDVEVSID0gXCI6XCI7XG5leHBvcnQgY29uc3QgUEVSSU9EX0NIQVJBQ1RFUiA9IFwiLlwiO1xuZXhwb3J0IGNvbnN0IENUUkxfQ19DSEFSQUNURVIgPSBcIl5DXCI7XG5leHBvcnQgY29uc3QgV0lMRENBUkRfQ0hBUkFDVEVSID0gXCIqXCI7XG5leHBvcnQgY29uc3QgQkFDS1RJQ0tfREVMSU1JVEVSID0gXCJgXCI7XG5leHBvcnQgY29uc3QgTkVXX0xJTkVfQ0hBUkFDVEVSID0gXCJcXG5cIjtcbmV4cG9ydCBjb25zdCBCQUNLU1BBQ0VfQ0hBUkFDVEVSID0gU3RyaW5nLmZyb21DaGFyQ29kZSgxMjcpO1xuZXhwb3J0IGNvbnN0IEFNUEVSU0FORF9DSEFSQUNURVIgPSBcIiZcIjtcbmV4cG9ydCBjb25zdCBMRVNTX1RIQU5fQ0hBUkFDVEVSID0gXCImbHQ7XCI7XG5leHBvcnQgY29uc3QgR1JFQVRFUl9USEFOX0NIQVJBQ1RFUiA9IFwiJmd0O1wiO1xuZXhwb3J0IGNvbnN0IEZPUldBUkRfU0xBU0hfQ0hBUkFDVEVSID0gXCIvXCI7XG5leHBvcnQgY29uc3QgQ0FSUklBR0VfUkVUVVJOX0NIQVJBQ1RFUiA9IFwiXFxyXCI7XG5leHBvcnQgY29uc3QgRVhDTEFNQVRJT05fTUFSS19DSEFSQUNURVIgPSBcIiFcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBFVFhfQ0hBUkFDVEVSLFxuICBCQVJfQ0hBUkFDVEVSLFxuICBEQVNIX0NIQVJBQ1RFUixcbiAgU1BBQ0VfQ0hBUkFDVEVSLFxuICBDT01NQV9DSEFSQUNURVIsXG4gIENPTE9OX0NIQVJBQ1RFUixcbiAgUEVSSU9EX0NIQVJBQ1RFUixcbiAgQ1RSTF9DX0NIQVJBQ1RFUixcbiAgV0lMRENBUkRfQ0hBUkFDVEVSLFxuICBCQUNLVElDS19ERUxJTUlURVIsXG4gIE5FV19MSU5FX0NIQVJBQ1RFUixcbiAgQU1QRVJTQU5EX0NIQVJBQ1RFUixcbiAgQkFDS1NQQUNFX0NIQVJBQ1RFUixcbiAgTEVTU19USEFOX0NIQVJBQ1RFUixcbiAgR1JFQVRFUl9USEFOX0NIQVJBQ1RFUixcbiAgRk9SV0FSRF9TTEFTSF9DSEFSQUNURVIsXG4gIENBUlJJQUdFX1JFVFVSTl9DSEFSQUNURVIsXG4gIEVYQ0xBTUFUSU9OX01BUktfQ0hBUkFDVEVSXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgWkVST18wX1NUQVRVU19DT0RFID0gMDtcbmV4cG9ydCBjb25zdCBPS18yMDBfU1RBVFVTX0NPREUgPSAyMDA7XG5leHBvcnQgY29uc3QgRk9VTkRfMzAyX1NUQVRVU19DT0RFID0gMzAyO1xuZXhwb3J0IGNvbnN0IENSRUFURURfMjAxX1NUQVRVU19DT0RFID0gMjAxO1xuZXhwb3J0IGNvbnN0IFNFRV9PVEhFUl8zMDNfU1RBVFVTX0NPREUgPSAzMDM7XG5leHBvcnQgY29uc3QgRk9SQklEREVOXzQwM19TVEFUVVNfQ09ERSA9IDQwMztcbmV4cG9ydCBjb25zdCBOT1RfRk9VTkRfNDA0X1NUQVRVU19DT0RFID0gNDA0O1xuZXhwb3J0IGNvbnN0IE5PX0NPTlRFTlRfMjA0X1NUQVRVU19DT0RFID0gMjA0O1xuZXhwb3J0IGNvbnN0IEJBRF9HQVRFV0FZXzUwMl9TVEFUVVNfQ09ERSA9IDUwMjtcbmV4cG9ydCBjb25zdCBCQURfUkVRVUVTVF80MDBfU1RBVFVTX0NPREUgPSA0MDA7XG5leHBvcnQgY29uc3QgVU5BVVRIT1JJU0VEXzQwMV9TVEFUVVNfQ09ERSA9IDQwMTtcbmV4cG9ydCBjb25zdCBUT09fTUFOWV9SRVFVRVNUU180MjlfU1RBVFVTX0NPREUgPSA0Mjk7XG5leHBvcnQgY29uc3QgSU5URVJOQUxfU0VSVkVSX0VSUk9SXzUwMF9TVEFUVVNfQ09ERSA9IDUwMDtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBaRVJPXzBfU1RBVFVTX0NPREUsXG4gIE9LXzIwMF9TVEFUVVNfQ09ERSxcbiAgRk9VTkRfMzAyX1NUQVRVU19DT0RFLFxuICBDUkVBVEVEXzIwMV9TVEFUVVNfQ09ERSxcbiAgU0VFX09USEVSXzMwM19TVEFUVVNfQ09ERSxcbiAgRk9SQklEREVOXzQwM19TVEFUVVNfQ09ERSxcbiAgTk9UX0ZPVU5EXzQwNF9TVEFUVVNfQ09ERSxcbiAgTk9fQ09OVEVOVF8yMDRfU1RBVFVTX0NPREUsXG4gIEJBRF9HQVRFV0FZXzUwMl9TVEFUVVNfQ09ERSxcbiAgQkFEX1JFUVVFU1RfNDAwX1NUQVRVU19DT0RFLFxuICBVTkFVVEhPUklTRURfNDAxX1NUQVRVU19DT0RFLFxuICBUT09fTUFOWV9SRVFVRVNUU180MjlfU1RBVFVTX0NPREUsXG4gIElOVEVSTkFMX1NFUlZFUl9FUlJPUl81MDBfU1RBVFVTX0NPREVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBURVhUX0hUTUxfQ09OVEVOVF9UWVBFID0gXCJ0ZXh0L2h0bWxcIjtcbmV4cG9ydCBjb25zdCBURVhUX1BMQUlOX0NPTlRFTlRfVFlQRSA9IFwidGV4dC9wbGFpblwiO1xuZXhwb3J0IGNvbnN0IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XG5leHBvcnQgY29uc3QgQVBQTElDQVRJT05fWF9XV1dfRk9STV9FTkNPREVEX0NPTlRFTlRfVFlQRSA9IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCI7XG5leHBvcnQgY29uc3QgVEVYVF9IVE1MX0NIQVJTRVRfVVRGXzhfQ09OVEVOVF9UWVBFID0gXCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLThcIjtcbmV4cG9ydCBjb25zdCBURVhUX1BMQUlOX0NIQVJTRVRfVVRGXzhfQ09OVEVOVF9UWVBFID0gXCJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04XCI7XG5leHBvcnQgY29uc3QgQVBQTElDQVRJT05fSlNPTl9DSEFSU0VUX1VURl84X0NPTlRFTlRfVFlQRSA9IFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiO1xuZXhwb3J0IGNvbnN0IEFQUExJQ0FUSU9OX1hfV1dXX0ZPUk1fRU5DT0RFRF9DSEFSU0VUX1VURl84X0NPTlRFTlRfVFlQRSA9IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PXV0Zi04XCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgVEVYVF9IVE1MX0NPTlRFTlRfVFlQRSxcbiAgVEVYVF9QTEFJTl9DT05URU5UX1RZUEUsXG4gIEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFLFxuICBBUFBMSUNBVElPTl9KU09OX0NIQVJTRVRfVVRGXzhfQ09OVEVOVF9UWVBFLFxuICBURVhUX0hUTUxfQ0hBUlNFVF9VVEZfOF9DT05URU5UX1RZUEUsXG4gIFRFWFRfUExBSU5fQ0hBUlNFVF9VVEZfOF9DT05URU5UX1RZUEUsXG4gIEFQUExJQ0FUSU9OX1hfV1dXX0ZPUk1fRU5DT0RFRF9DT05URU5UX1RZUEUsXG4gIEFQUExJQ0FUSU9OX1hfV1dXX0ZPUk1fRU5DT0RFRF9DSEFSU0VUX1VURl84X0NPTlRFTlRfVFlQRVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IE9LXzIwMF9TVEFUVVNfTUVTU0FHRSA9IFwiT0tcIjtcbmV4cG9ydCBjb25zdCBGT1VORF8zMDJfU1RBVFVTX01FU1NBR0UgPSBcIkZvdW5kXCI7XG5leHBvcnQgY29uc3QgQ1JFQVRFRF8yMDFfU1RBVFVTX01FU1NBR0UgPSBcIkNyZWF0ZWRcIjtcbmV4cG9ydCBjb25zdCBTRUVfT1RIRVJfMzAzX1NUQVRVU19NRVNTQUdFID0gXCJTZWUgb3RoZXJcIjtcbmV4cG9ydCBjb25zdCBGT1JCSURERU5fNDAzX1NUQVRVU19NRVNTQUdFID0gXCJGb3JiaWRkZW5cIjtcbmV4cG9ydCBjb25zdCBOT1RfRk9VTkRfNDA0X1NUQVRVU19NRVNTQUdFID0gXCJOb3QgZm91bmRcIjtcbmV4cG9ydCBjb25zdCBOT19DT05URU5UXzIwNF9TVEFUVVNfTUVTU0FHRSA9IFwiTm8gY29udGVudFwiO1xuZXhwb3J0IGNvbnN0IEJBRF9HQVRFV0FZXzUwMl9TVEFUVVNfTUVTU0FHRSA9IFwiQmFkIGdhdGV3YXlcIjtcbmV4cG9ydCBjb25zdCBCQURfUkVRVUVTVF80MDBfU1RBVFVTX01FU1NBR0UgPSBcIkJhZCByZXF1ZXN0XCI7XG5leHBvcnQgY29uc3QgVU5BVVRIT1JJU0VEXzQwMV9TVEFUVVNfTUVTU0FHRSA9IFwiVW5hdXRob3Jpc2VkXCI7XG5leHBvcnQgY29uc3QgVE9PX01BTllfUkVRVUVTVFNfNDI5X1NUQVRVU19NRVNTQUdFID0gXCJUb28gbWFueSByZXF1ZXN0c1wiO1xuZXhwb3J0IGNvbnN0IElOVEVSTkFMX1NFUlZFUl9FUlJPUl81MDBfU1RBVFVTX01FU1NBR0UgPSBcIkludGVybmFsIHNlcnZlciBlcnJvclwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIE9LXzIwMF9TVEFUVVNfTUVTU0FHRSxcbiAgRk9VTkRfMzAyX1NUQVRVU19NRVNTQUdFLFxuICBDUkVBVEVEXzIwMV9TVEFUVVNfTUVTU0FHRSxcbiAgU0VFX09USEVSXzMwM19TVEFUVVNfTUVTU0FHRSxcbiAgRk9SQklEREVOXzQwM19TVEFUVVNfTUVTU0FHRSxcbiAgTk9UX0ZPVU5EXzQwNF9TVEFUVVNfTUVTU0FHRSxcbiAgTk9fQ09OVEVOVF8yMDRfU1RBVFVTX01FU1NBR0UsXG4gIEJBRF9HQVRFV0FZXzUwMl9TVEFUVVNfTUVTU0FHRSxcbiAgQkFEX1JFUVVFU1RfNDAwX1NUQVRVU19NRVNTQUdFLFxuICBVTkFVVEhPUklTRURfNDAxX1NUQVRVU19NRVNTQUdFLFxuICBUT09fTUFOWV9SRVFVRVNUU180MjlfU1RBVFVTX01FU1NBR0UsXG4gIElOVEVSTkFMX1NFUlZFUl9FUlJPUl81MDBfU1RBVFVTX01FU1NBR0Vcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaXJzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbMF07fVxuXG5leHBvcnQgZnVuY3Rpb24gc2Vjb25kKGFycmF5KSB7IHJldHVybiBhcnJheVsxXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gdGhpcmQoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzJdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3VydGgoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzNdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWZ0aChhcnJheSkgeyByZXR1cm4gYXJyYXlbNF07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpZnRoTGFzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gNV07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvdXJ0aExhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDRdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiB0aGlyZExhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDNdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWNvbmRMYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAyXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gZmlyc3RMYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAxXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gbGFzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGhlYWQoYXJyYXkpIHsgcmV0dXJuIGFycmF5LnNsaWNlKDAsIDEpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiB0YWlsKGFycmF5KSB7IHJldHVybiBhcnJheS5zbGljZSgxKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gYmFjayhhcnJheSkgeyByZXR1cm4gYXJyYXkuc2xpY2UoYXJyYXkubGVuZ3RoIC0gMSk7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb250KGFycmF5KSB7IHJldHVybiBhcnJheS5zbGljZSgwLCBhcnJheS5sZW5ndGggLSAxKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gcHVzaChhcnJheTEsIGFycmF5MikgeyBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShhcnJheTEsIGFycmF5Mik7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc2hpZnQoYXJyYXkxLCBhcnJheTIpIHsgQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkoYXJyYXkxLCBhcnJheTIpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jYXQoYXJyYXkxLCBlbGVtZW50T3JBcnJheTIpIHtcbiAgY29uc3QgYXJyYXkyID0gKGVsZW1lbnRPckFycmF5MiBpbnN0YW5jZW9mIEFycmF5KSA/XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRPckFycmF5MiA6XG4gICAgICAgICAgICAgICAgICAgICBbZWxlbWVudE9yQXJyYXkyXTtcbiAgXG4gIHB1c2goYXJyYXkxLCBhcnJheTIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXIoYXJyYXkpIHtcbiAgY29uc3Qgc3RhcnQgPSAwO1xuICBcbiAgcmV0dXJuIGFycmF5LnNwbGljZShzdGFydCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KGFycmF5MSwgYXJyYXkyKSB7XG4gIGNvbnN0IHN0YXJ0ID0gMCxcbiAgICAgICAgZGVsZXRlQ291bnQgPSBhcnJheTIubGVuZ3RoOyAgLy8vXG4gIFxuICBzcGxpY2UoYXJyYXkxLCBzdGFydCwgZGVsZXRlQ291bnQsIGFycmF5Mik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZShhcnJheTEsIGFycmF5MikgeyBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShhcnJheTEsIGFycmF5Mik7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHNwbGljZShhcnJheTEsIHN0YXJ0LCBkZWxldGVDb3VudCA9IEluZmluaXR5LCBhcnJheTIgPSBbXSkge1xuICBjb25zdCBhcmdzID0gW3N0YXJ0LCBkZWxldGVDb3VudCwgLi4uYXJyYXkyXSxcbiAgICAgICAgZGVsZXRlZEl0ZW1zQXJyYXkgPSBBcnJheS5wcm90b3R5cGUuc3BsaWNlLmFwcGx5KGFycmF5MSwgYXJncyk7XG5cbiAgcmV0dXJuIGRlbGV0ZWRJdGVtc0FycmF5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZShhcnJheSwgZWxlbWVudCwgdGVzdCkge1xuICBsZXQgc3RhcnQ7XG4gIFxuICBjb25zdCBmb3VuZCA9IGFycmF5LnNvbWUoKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gdGVzdChlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICBzdGFydCA9IGluZGV4OyAgLy8vXG4gICAgICBcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG4gIFxuICBpZiAoZm91bmQpIHtcbiAgICBjb25zdCBkZWxldGVDb3VudCA9IDE7XG5cbiAgICBhcnJheS5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50LCBlbGVtZW50KTtcbiAgfVxuXG4gIHJldHVybiBmb3VuZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlcihhcnJheSwgdGVzdCkge1xuICBjb25zdCBmaWx0ZXJlZEVsZW1lbnRzID0gW107XG4gIFxuICBiYWNrd2FyZHNGb3JFYWNoKGFycmF5LCAoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSB0ZXN0KGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmICghcGFzc2VkKSB7XG4gICAgICBjb25zdCBzdGFydCA9IGluZGV4LCAgLy8vXG4gICAgICAgICAgICBkZWxldGVDb3VudCA9IDEsXG4gICAgICAgICAgICBkZWxldGVkRWxlbWVudHMgPSBhcnJheS5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50KSxcbiAgICAgICAgICAgIGZpcnN0RGVsZXRlZEVsZW1lbnQgPSBmaXJzdChkZWxldGVkRWxlbWVudHMpO1xuICAgICAgXG4gICAgICBmaWx0ZXJlZEVsZW1lbnRzLnVuc2hpZnQoZmlyc3REZWxldGVkRWxlbWVudCk7ICAvLy9cbiAgICB9XG4gIH0pO1xuICBcbiAgcmV0dXJuIGZpbHRlcmVkRWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kKGFycmF5LCB0ZXN0KSB7XG4gIGNvbnN0IGVsZW1lbnRzID0gW107XG5cbiAgZm9yd2FyZHNGb3JFYWNoKGFycmF5LCAoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSB0ZXN0KGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmIChwYXNzZWQpIHtcbiAgICAgIGVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcnVuZShhcnJheSwgdGVzdCkge1xuICBsZXQgcHJ1bmVkRWxlbWVudCA9IHVuZGVmaW5lZDtcbiAgXG4gIGFycmF5LnNvbWUoKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gdGVzdChlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgY29uc3Qgc3RhcnQgPSBpbmRleCwgIC8vL1xuICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxLFxuICAgICAgICAgICAgZGVsZXRlZEVsZW1lbnRzID0gYXJyYXkuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCksXG4gICAgICAgICAgICBmaXJzdERlbGV0ZWRFbGVtZW50ID0gZmlyc3QoZGVsZXRlZEVsZW1lbnRzKTtcbiAgICAgIFxuICAgICAgcHJ1bmVkRWxlbWVudCA9IGZpcnN0RGVsZXRlZEVsZW1lbnQ7ICAvLy9cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcbiAgXG4gIHJldHVybiBwcnVuZWRFbGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0Y2goYXJyYXksIGVsZW1lbnQsIHRlc3QpIHtcbiAgY29uc3QgZm91bmQgPSBhcnJheS5zb21lKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IHRlc3QoZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuXG4gIGlmIChmb3VuZCkge1xuICAgIGFycmF5LnB1c2goZWxlbWVudCk7XG4gIH1cblxuICByZXR1cm4gZm91bmQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdWdtZW50KGFycmF5MSwgYXJyYXkyLCB0ZXN0KSB7XG4gIGFycmF5Mi5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IHRlc3QoZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgYXJyYXkxLnB1c2goZWxlbWVudCk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlcGFyYXRlKGFycmF5LCBhcnJheTEsIGFycmF5MiwgdGVzdCkge1xuICBhcnJheS5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IHRlc3QoZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgcGFzc2VkID9cbiAgICAgIGFycmF5MS5wdXNoKGVsZW1lbnQpIDpcbiAgICAgICAgYXJyYXkyLnB1c2goZWxlbWVudCk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNTb21lKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICAgIHJlc3VsdCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcbiAgICBcbiAgICBpZiAocmVzdWx0KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNTb21lKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgcmVzdWx0ID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNFdmVyeShhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5TGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICByZXN1bHQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzRXZlcnkoYXJyYXksIGNhbGxiYWNrKSB7XG4gIGNvbnN0IGFycmF5TGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZvciAobGV0IGluZGV4ID0gYXJyYXlMZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleC0tKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICByZXN1bHQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNSZWR1Y2UoYXJyYXksIGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpIHtcbiAgbGV0IHZhbHVlID0gaW5pdGlhbFZhbHVlO1xuXG4gIGZvcndhcmRzRm9yRWFjaChhcnJheSwgKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgdmFsdWUgPSBjYWxsYmFjayh2YWx1ZSwgZWxlbWVudCwgaW5kZXgpO1xuICB9KTtcblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNSZWR1Y2UoYXJyYXksIGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpIHtcbiAgbGV0IHZhbHVlID0gaW5pdGlhbFZhbHVlO1xuXG4gIGJhY2t3YXJkc0ZvckVhY2goYXJyYXksIChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIHZhbHVlID0gY2FsbGJhY2sodmFsdWUsIGVsZW1lbnQsIGluZGV4KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBmaXJzdCxcbiAgc2Vjb25kLFxuICB0aGlyZCxcbiAgZm91cnRoLFxuICBmaWZ0aCxcbiAgZmlmdGhMYXN0LFxuICBmb3VydGhMYXN0LFxuICB0aGlyZExhc3QsXG4gIHNlY29uZExhc3QsXG4gIGZpcnN0TGFzdCxcbiAgbGFzdCxcbiAgaGVhZCxcbiAgdGFpbCxcbiAgYmFjayxcbiAgZnJvbnQsXG4gIHB1c2gsXG4gIHVuc2hpZnQsXG4gIGNvbmNhdCxcbiAgY2xlYXIsXG4gIGNvcHksXG4gIG1lcmdlLFxuICBzcGxpY2UsXG4gIHJlcGxhY2UsXG4gIGZpbHRlcixcbiAgZmluZCxcbiAgcHJ1bmUsXG4gIHBhdGNoLFxuICBhdWdtZW50LFxuICBzZXBhcmF0ZSxcbiAgZm9yd2FyZHNTb21lLFxuICBiYWNrd2FyZHNTb21lLFxuICBmb3J3YXJkc0V2ZXJ5LFxuICBiYWNrd2FyZHNFdmVyeSxcbiAgZm9yd2FyZHNSZWR1Y2UsXG4gIGJhY2t3YXJkc1JlZHVjZSxcbiAgZm9yd2FyZHNGb3JFYWNoLFxuICBiYWNrd2FyZHNGb3JFYWNoXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgREFUQSA9IFwiZGF0YVwiO1xuZXhwb3J0IGNvbnN0IEVSUk9SID0gXCJlcnJvclwiO1xuZXhwb3J0IGNvbnN0IFNUUklORyA9IFwic3RyaW5nXCI7XG5leHBvcnQgY29uc3QgTlVNQkVSID0gXCJudW1iZXJcIjtcbmV4cG9ydCBjb25zdCBCT09MRUFOID0gXCJib29sZWFuXCI7XG5leHBvcnQgY29uc3QgREVGQVVMVCA9IFwiZGVmYXVsdFwiO1xuZXhwb3J0IGNvbnN0IEVOVklST05NRU5UID0gXCJFTlZJUk9OTUVOVFwiO1xuZXhwb3J0IGNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNlY29uZCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IENPTE9OX0NIQVJBQ1RFUiwgQU1QRVJTQU5EX0NIQVJBQ1RFUiB9IGZyb20gXCIuLi9jaGFyYWN0ZXJzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBvdmVyd3JpdGUoaGVhZGVycywgbmFtZSwgdmFsdWUpIHtcbiAgY29uc3QgbG93ZXJDYXNlTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgZXhpc3RpbmdOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlYWRlcnMpLCAgLy8vXG4gICAgICAgIGV4aXN0aW5nTmFtZSA9IGV4aXN0aW5nTmFtZXMuZmluZCgoZXhpc3RpbmdOYW1lKSA9PiB7XG4gICAgICAgICAgY29uc3QgZXhpc3RpbmdMb3dlckNhc2VOYW1lID0gZXhpc3RpbmdOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgICBpZiAoZXhpc3RpbmdMb3dlckNhc2VOYW1lID09PSBsb3dlckNhc2VOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pIHx8IG51bGw7XG5cbiAgaWYgKGV4aXN0aW5nTmFtZSAhPT0gbnVsbCkge1xuICAgIGhlYWRlcnNbZXhpc3RpbmdOYW1lXSA9IHZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bmRlcndyaXRlKGhlYWRlcnMsIG5hbWUsIHZhbHVlKSB7XG4gIGNvbnN0IGxvd2VyQ2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIGV4aXN0aW5nTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhoZWFkZXJzKSwgIC8vL1xuICAgICAgICBleGlzdGluZ05hbWUgPSBleGlzdGluZ05hbWVzLmZpbmQoKGV4aXN0aW5nTmFtZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nTG93ZXJDYXNlTmFtZSA9IGV4aXN0aW5nTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgICAgaWYgKGV4aXN0aW5nTG93ZXJDYXNlTmFtZSA9PT0gbG93ZXJDYXNlTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KSB8fCBudWxsO1xuXG4gIGlmIChleGlzdGluZ05hbWUgPT09IG51bGwpIHtcbiAgICBoZWFkZXJzW25hbWVdID0gdmFsdWU7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvcnRGcm9tSG9zdChob3N0KSB7XG4gIGxldCBwb3J0O1xuXG4gIGNvbnN0IG1hdGNoZXMgPSBob3N0Lm1hdGNoKC9eaHR0cHM/OlxcL1xcLyhbXlxcL10rKS8pLFxuICAgICAgICBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKSxcbiAgICAgICAgaW5kZXggPSBzZWNvbmRNYXRjaC5pbmRleE9mKENPTE9OX0NIQVJBQ1RFUik7XG5cbiAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgIGNvbnN0IHNlY3VyZSA9IHNlY3VyZUZyb21Ib3N0KGhvc3QpO1xuXG4gICAgcG9ydCA9IHNlY3VyZSA/IDQ0MyA6IDgwOyAvLy9cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBzdGFydCA9IGluZGV4ICsgMSxcbiAgICAgICAgICBwb3J0U3RyaW5nID0gc2Vjb25kTWF0Y2guc3Vic3RyaW5nKHN0YXJ0KTtcblxuICAgIHBvcnQgPSBOdW1iZXIocG9ydFN0cmluZyk7XG4gIH1cblxuICByZXR1cm4gcG9ydDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlY3VyZUZyb21Ib3N0KGhvc3QpIHtcbiAgY29uc3Qgc2VjdXJlID0gL15odHRwczpcXC9cXC8vLnRlc3QoaG9zdCk7XG5cbiAgcmV0dXJuIHNlY3VyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhvc3RuYW1lRnJvbUhvc3QoaG9zdCkge1xuICBjb25zdCBtYXRjaGVzID0gaG9zdC5tYXRjaCgvXmh0dHBzPzpcXC9cXC8oW146XFwvXSspLyksXG4gICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICBob3N0bmFtZSA9IHNlY29uZE1hdGNoOyAvLy9cblxuICByZXR1cm4gaG9zdG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeVN0cmluZ0Zyb21RdWVyeShxdWVyeSkge1xuICBjb25zdCBuYW1lcyA9IE9iamVjdC5rZXlzKHF1ZXJ5KSxcbiAgICAgICAgbmFtZXNMZW5ndGggPSBuYW1lcy5sZW5ndGgsXG4gICAgICAgIGxhc3RJbmRleCA9IG5hbWVzTGVuZ3RoIC0gMSxcbiAgICAgICAgcXVlcnlTdHJpbmcgPSBuYW1lcy5yZWR1Y2UoKHF1ZXJ5U3RyaW5nLCBuYW1lLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gcXVlcnlbbmFtZV0sXG4gICAgICAgICAgICAgICAgZW5jb2RlZE5hbWUgPSBlbmNvZGVVUklDb21wb25lbnQobmFtZSksXG4gICAgICAgICAgICAgICAgZW5jb2RlZFZhbHVlID0gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKSxcbiAgICAgICAgICAgICAgICBhbXBlcnNhbmRPck5vdGhpbmcgPSAoaW5kZXggIT09IGxhc3RJbmRleCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU1QRVJTQU5EX0NIQVJBQ1RFUiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVNUFRZX1NUUklORztcbiAgXG4gICAgICAgICAgcXVlcnlTdHJpbmcgKz0gYCR7ZW5jb2RlZE5hbWV9PSR7ZW5jb2RlZFZhbHVlfSR7YW1wZXJzYW5kT3JOb3RoaW5nfWA7XG4gIFxuICAgICAgICAgIHJldHVybiBxdWVyeVN0cmluZztcbiAgICAgICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICByZXR1cm4gcXVlcnlTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cmxGcm9tSG9zdFVSSUFuZFF1ZXJ5KGhvc3QsIHVyaSwgcXVlcnkpIHtcbiAgY29uc3QgcXVlcnlTdHJpbmcgPSBxdWVyeVN0cmluZ0Zyb21RdWVyeShxdWVyeSksXG4gICAgICAgIHVybCA9IChxdWVyeVN0cmluZyA9PT0gRU1QVFlfU1RSSU5HKSA/XG4gICAgICAgICAgICAgICAgYCR7aG9zdH0ke3VyaX1gIDpcbiAgICAgICAgICAgICAgICAgIGAke2hvc3R9JHt1cml9PyR7cXVlcnlTdHJpbmd9YDtcblxuICByZXR1cm4gdXJsO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG92ZXJ3cml0ZSxcbiAgdW5kZXJ3cml0ZSxcbiAgcG9ydEZyb21Ib3N0LFxuICBzZWN1cmVGcm9tSG9zdCxcbiAgaG9zdG5hbWVGcm9tSG9zdCxcbiAgcXVlcnlTdHJpbmdGcm9tUXVlcnksXG4gIHVybEZyb21Ib3N0VVJJQW5kUXVlcnlcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEdFVF9NRVRIT0QsIFBPU1RfTUVUSE9EIH0gZnJvbSBcIi4uL21ldGhvZHNcIjtcbmltcG9ydCB7IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFIH0gZnJvbSBcIi4uL2NvbnRlbnRUeXBlc1wiO1xuaW1wb3J0IHsgQUNDRVBUX0hFQURFUiwgQ09OVEVOVF9UWVBFX0hFQURFUiB9IGZyb20gXCIuLi9oZWFkZXJzXCI7XG5pbXBvcnQgeyB1bmRlcndyaXRlLCB1cmxGcm9tSG9zdFVSSUFuZFF1ZXJ5IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9odHRwXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXQoaG9zdCwgdXJpLCBxdWVyeSwgaGVhZGVycywgY2FsbGJhY2spIHtcbiAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICBjYWxsYmFjayA9IGhlYWRlcnM7IC8vL1xuICAgIGhlYWRlcnMgPSB7fTtcbiAgfVxuXG4gIGNvbnN0IG1ldGhvZCA9IEdFVF9NRVRIT0QsXG4gICAgICAgIGFjY2VwdCA9IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFLFxuICAgICAgICBjb250ZW50ID0gbnVsbDtcblxuICB1bmRlcndyaXRlQWNjZXB0SGVhZGVyKGhlYWRlcnMsIGFjY2VwdCk7XG5cbiAgcmVxdWVzdChob3N0LCB1cmksIHF1ZXJ5LCBtZXRob2QsIGhlYWRlcnMsIGNvbnRlbnQsIGNhbGxiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvc3QoaG9zdCwgdXJpLCBxdWVyeSwgaGVhZGVycywgY29udGVudCwgY2FsbGJhY2spIHtcbiAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICBjYWxsYmFjayA9IGNvbnRlbnQ7XG4gICAgY29udGVudCA9IGhlYWRlcnM7XG4gICAgaGVhZGVycyA9IHt9O1xuICB9XG5cbiAgY29uc3QgbWV0aG9kID0gUE9TVF9NRVRIT0QsXG4gICAgICAgIGFjY2VwdCA9IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFLFxuICAgICAgICBjb250ZW50VHlwZSA9IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFO1xuXG4gIHVuZGVyd3JpdGVBY2NlcHRIZWFkZXIoaGVhZGVycywgYWNjZXB0KTtcblxuICB1bmRlcndyaXRlQ29udGVudFR5cGVIZWFkZXIoaGVhZGVycywgY29udGVudFR5cGUpO1xuXG4gIHJlcXVlc3QoaG9zdCwgdXJpLCBxdWVyeSwgbWV0aG9kLCBoZWFkZXJzLCBjb250ZW50LCBjYWxsYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXF1ZXN0KGhvc3QsIHVyaSwgcXVlcnksIG1ldGhvZCwgaGVhZGVycywgY29udGVudCwgY2FsbGJhY2spIHtcbiAgY29uc3QgdXJsID0gdXJsRnJvbUhvc3RVUklBbmRRdWVyeShob3N0LCB1cmksIHF1ZXJ5KSxcbiAgICAgICAgYWNjZXB0ID0gaGVhZGVyc1tBQ0NFUFRfSEVBREVSXSB8fCBudWxsLFxuICAgICAgICBjb250ZW50VHlwZSA9IGhlYWRlcnNbQ09OVEVOVF9UWVBFX0hFQURFUl0gfHwgbnVsbCxcbiAgICAgICAgeG1sSHR0cFJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICBpZiAoY29udGVudFR5cGUgPT09IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFKSB7XG4gICAgY29uc3QganNvbiA9IGNvbnRlbnQsICAvLy9cbiAgICAgICAgICBqc29uU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoanNvbik7XG5cbiAgICBjb250ZW50ID0ganNvblN0cmluZzsgIC8vL1xuICB9XG5cbiAgeG1sSHR0cFJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgcmVhZHlTdGF0ZSwgc3RhdHVzLCByZXNwb25zZSB9ID0geG1sSHR0cFJlcXVlc3QsXG4gICAgICAgICAgc3RhdHVzQ29kZSA9IHN0YXR1cztcblxuICAgIGlmIChyZWFkeVN0YXRlID09IDQpIHtcbiAgICAgIGxldCBjb250ZW50ID0gcmVzcG9uc2U7XG5cbiAgICAgIGlmIChhY2NlcHQgPT09IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QganNvblN0cmluZyA9IGNvbnRlbnQsICAvLy9cbiAgICAgICAgICAgICAgICBqc29uID0gSlNPTi5wYXJzZShqc29uU3RyaW5nKTtcblxuICAgICAgICAgIGNvbnRlbnQgPSBqc29uOyAgLy8vXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29udGVudCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY2FsbGJhY2soY29udGVudCwgc3RhdHVzQ29kZSk7XG4gICAgfVxuICB9O1xuXG4gIHhtbEh0dHBSZXF1ZXN0Lm9wZW4obWV0aG9kLCB1cmwpO1xuXG4gIGlmIChhY2NlcHQgIT09IG51bGwpIHtcbiAgICB4bWxIdHRwUmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKEFDQ0VQVF9IRUFERVIsIGFjY2VwdCk7XG4gIH1cblxuICBpZiAoY29udGVudFR5cGUgIT09IG51bGwpIHtcbiAgICB4bWxIdHRwUmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKENPTlRFTlRfVFlQRV9IRUFERVIsIGNvbnRlbnRUeXBlKTtcbiAgfVxuXG4gIChjb250ZW50ICE9PSBudWxsKSA/XG4gICAgeG1sSHR0cFJlcXVlc3Quc2VuZChjb250ZW50KSA6XG4gICAgICB4bWxIdHRwUmVxdWVzdC5zZW5kKCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZ2V0LFxuICBwb3N0LFxuICByZXF1ZXN0XG59XG5cbmZ1bmN0aW9uIHVuZGVyd3JpdGVBY2NlcHRIZWFkZXIoaGVhZGVycywgYWNjZXB0KSB7XG4gIGNvbnN0IG5hbWUgPSBBQ0NFUFRfSEVBREVSLCAgLy8vXG4gICAgICAgIHZhbHVlID0gYWNjZXB0OyAvLy9cblxuICB1bmRlcndyaXRlKGhlYWRlcnMsIG5hbWUsIHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gdW5kZXJ3cml0ZUNvbnRlbnRUeXBlSGVhZGVyKGhlYWRlcnMsIGNvbnRlbnRUWXBlKSB7XG4gIGNvbnN0IG5hbWUgPSBDT05URU5UX1RZUEVfSEVBREVSLCAgLy8vXG4gICAgICAgIHZhbHVlID0gY29udGVudFRZcGU7IC8vL1xuXG4gIHVuZGVyd3JpdGUoaGVhZGVycywgbmFtZSwgdmFsdWUpO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBmaXJzdCwgc2Vjb25kLCBsYXN0IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNQYXRoTmFtZShwYXRoKSB7XG4gIHBhdGggPSBwYXRoLnJlcGxhY2UoL15cXC8vLCBFTVBUWV9TVFJJTkcpLnJlcGxhY2UoL1xcLyQvLCBFTVBUWV9TVFJJTkcpOyAvLy9cblxuICBjb25zdCBwYXRoTmFtZSA9ICgvXFwvLy50ZXN0KHBhdGgpID09PSBmYWxzZSk7XG5cbiAgcmV0dXJuIHBhdGhOYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQYXRoVG9wbW9zdE5hbWUocGF0aCkge1xuICBjb25zdCBwYXRoTmFtZSA9IGlzUGF0aE5hbWUocGF0aCksXG4gICAgICAgIHBhdGhBYnNvbHV0ZVBhdGggPSBpc1BhdGhBYnNvbHV0ZVBhdGgocGF0aCksXG4gICAgICAgIHBhdGhUb3Btb3N0TmFtZSA9IChwYXRoTmFtZSAmJiBwYXRoQWJzb2x1dGVQYXRoKTtcblxuICByZXR1cm4gcGF0aFRvcG1vc3ROYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQYXRoUmVsYXRpdmVQYXRoKHBhdGgpIHtcbiAgY29uc3QgcGF0aFJlbGF0aXZlUGF0aCA9ICEvXlxcLy8udGVzdChwYXRoKTtcblxuICByZXR1cm4gcGF0aFJlbGF0aXZlUGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aEFic29sdXRlUGF0aChwYXRoKSB7XG4gIGNvbnN0IHBhdGhBYnNvbHV0ZVBhdGggPSAvXlxcLy8udGVzdChwYXRoKTtcblxuICByZXR1cm4gcGF0aEFic29sdXRlUGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVG9wbW9zdE5hbWVJbkFic29sdXRlUGF0aCh0b3Btb3N0TmFtZSwgYWJzb2x1dGVQYXRoKSB7XG4gIGNvbnN0IHJlZ0V4cCA9IG5ldyBSZWdFeHAoYF4ke3RvcG1vc3ROYW1lfSg/OlxcXFwvLispPyRgKSxcbiAgICAgICAgdG9wbW9zdE5hbWVJbkFic29sdXRlUGF0aCA9IHJlZ0V4cC50ZXN0KGFic29sdXRlUGF0aCk7XG5cbiAgcmV0dXJuIHRvcG1vc3ROYW1lSW5BYnNvbHV0ZVBhdGhcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmVQYXRocyhwYXRoLCByZWxhdGl2ZVBhdGgpIHtcbiAgbGV0IGNvbWJpbmVkUGF0aCA9IG51bGw7XG5cbiAgY29uc3QgcGF0aE5hbWVzID0gcGF0aC5zcGxpdCgvXFwvLyksXG4gICAgICAgIHJlbGF0aXZlUGF0aE5hbWVzID0gcmVsYXRpdmVQYXRoLnNwbGl0KC9cXC8vKTtcblxuICBsZXQgbGFzdFBhdGhOYW1lLFxuICAgICAgZmlyc3RSZWxhdGl2ZVBhdGhOYW1lID0gZmlyc3QocmVsYXRpdmVQYXRoTmFtZXMpO1xuXG4gIGlmIChmaXJzdFJlbGF0aXZlUGF0aE5hbWUgPT09IFwiLlwiKSB7XG4gICAgcmVsYXRpdmVQYXRoTmFtZXMuc2hpZnQoKTtcbiAgfVxuXG4gIGZpcnN0UmVsYXRpdmVQYXRoTmFtZSA9IGZpcnN0KHJlbGF0aXZlUGF0aE5hbWVzKTtcbiAgbGFzdFBhdGhOYW1lID0gbGFzdChwYXRoTmFtZXMpO1xuXG4gIHdoaWxlICgoZmlyc3RSZWxhdGl2ZVBhdGhOYW1lID09PSBcIi4uXCIpICYmIChsYXN0UGF0aE5hbWUgIT09IHVuZGVmaW5lZCkpIHtcbiAgICByZWxhdGl2ZVBhdGhOYW1lcy5zaGlmdCgpO1xuICAgIHBhdGhOYW1lcy5wb3AoKTtcblxuICAgIGZpcnN0UmVsYXRpdmVQYXRoTmFtZSA9IGZpcnN0KHJlbGF0aXZlUGF0aE5hbWVzKTtcbiAgICBsYXN0UGF0aE5hbWUgPSBsYXN0KHBhdGhOYW1lcyk7XG4gIH1cblxuICBpZiAobGFzdFBhdGhOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBjb21iaW5lZFBhdGhOYW1lcyA9IFtdLmNvbmNhdChwYXRoTmFtZXMpLmNvbmNhdChyZWxhdGl2ZVBhdGhOYW1lcyk7XG5cbiAgICBjb21iaW5lZFBhdGggPSBjb21iaW5lZFBhdGhOYW1lcy5qb2luKFwiL1wiKTtcbiAgfVxuXG4gIHJldHVybiBjb21iaW5lZFBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jYXRlbmF0ZVBhdGhzKHBhdGgsIHJlbGF0aXZlUGF0aCkge1xuICBwYXRoID0gcGF0aC5yZXBsYWNlKC9cXC8kLywgRU1QVFlfU1RSSU5HKTsgIC8vL1xuXG4gIGNvbnN0IGNvbmNhdGVuYXRlZFBhdGggPSBgJHtwYXRofS8ke3JlbGF0aXZlUGF0aH1gO1xuXG4gIHJldHVybiBjb25jYXRlbmF0ZWRQYXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYm90dG9tbW9zdE5hbWVGcm9tUGF0aChwYXRoKSB7XG4gIGxldCBib3R0b21tb3N0TmFtZSA9IG51bGw7XG5cbiAgY29uc3QgbWF0Y2hlcyA9IHBhdGgubWF0Y2goL14uKlxcLyhbXlxcL10rXFwvPykkLyk7XG5cbiAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICBjb25zdCBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKTtcblxuICAgIGJvdHRvbW1vc3ROYW1lID0gc2Vjb25kTWF0Y2g7ICAvLy9cbiAgfVxuXG4gIHJldHVybiBib3R0b21tb3N0TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvcG1vc3REaXJlY3RvcnlQYXRoRnJvbVBhdGgocGF0aCkge1xuICBjb25zdCBtYXRjaGVzID0gcGF0aC5tYXRjaCgvXiguKylcXC9bXlxcL10rXFwvPyQvKSxcbiAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyksXG4gICAgICAgIHRvcG1vc3REaXJlY3RvcnlQYXRoID0gc2Vjb25kTWF0Y2g7IC8vL1xuXG4gIHJldHVybiB0b3Btb3N0RGlyZWN0b3J5UGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvcG1vc3REaXJlY3RvcnlOYW1lRnJvbVBhdGgocGF0aCkge1xuICBsZXQgdG9wbW9zdERpcmVjdG9yeU5hbWUgPSBudWxsO1xuXG4gIGNvbnN0IG1hdGNoZXMgPSBwYXRoLm1hdGNoKC9eKFteXFwvXSspXFwvLiskLyk7XG5cbiAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICBjb25zdCBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKTtcblxuICAgIHRvcG1vc3REaXJlY3RvcnlOYW1lID0gc2Vjb25kTWF0Y2g7ICAvLy9cbiAgfVxuXG4gIHJldHVybiB0b3Btb3N0RGlyZWN0b3J5TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhXaXRob3V0Qm90dG9tbW9zdE5hbWVGcm9tUGF0aChwYXRoKSB7XG4gIGxldCBwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lID0gbnVsbDtcblxuICBjb25zdCBtYXRjaGVzID0gcGF0aC5tYXRjaCgvXiguKilcXC9bXlxcL10rXFwvPyQvKTtcblxuICBpZiAobWF0Y2hlcyAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpO1xuXG4gICAgcGF0aFdpdGhvdXRCb3R0b21tb3N0TmFtZSA9IHNlY29uZE1hdGNoOyAvLy9cbiAgfVxuXG4gIHJldHVybiBwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aFdpdGhvdXRUb3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoKHBhdGgpIHtcbiAgbGV0IHBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWUgPSBudWxsO1xuXG4gIGNvbnN0IG1hdGNoZXMgPSBwYXRoLm1hdGNoKC9eW15cXC9dK1xcLyguKykkLyk7XG5cbiAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICBjb25zdCBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKTtcblxuICAgIHBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWUgPSBzZWNvbmRNYXRjaDtcbiAgfVxuXG4gIHJldHVybiBwYXRoV2l0aG91dFRvcG1vc3REaXJlY3RvcnlOYW1lO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGlzUGF0aE5hbWUsXG4gIGlzUGF0aFRvcG1vc3ROYW1lLFxuICBpc1BhdGhSZWxhdGl2ZVBhdGgsXG4gIGlzUGF0aEFic29sdXRlUGF0aCxcbiAgaXNUb3Btb3N0TmFtZUluQWJzb2x1dGVQYXRoLFxuICBjb21iaW5lUGF0aHMsXG4gIGNvbmNhdGVuYXRlUGF0aHMsXG4gIGJvdHRvbW1vc3ROYW1lRnJvbVBhdGgsXG4gIHRvcG1vc3REaXJlY3RvcnlQYXRoRnJvbVBhdGgsXG4gIHRvcG1vc3REaXJlY3RvcnlOYW1lRnJvbVBhdGgsXG4gIHBhdGhXaXRob3V0Qm90dG9tbW9zdE5hbWVGcm9tUGF0aCxcbiAgcGF0aFdpdGhvdXRUb3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHdoaWxzdChvcGVyYXRpb24sIGRvbmUsIGNvbnRleHQpIHtcclxuICBsZXQgY291bnQgPSAtMTtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgaW5kZXggPSBjb3VudCwgIC8vL1xyXG4gICAgICAgICAgdGVybWluYXRlID0gb3BlcmF0aW9uKG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5leHQoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZvckVhY2goYXJyYXksIG9wZXJhdGlvbiwgZG9uZSwgY29udGV4dCkge1xyXG4gIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsgIC8vL1xyXG5cclxuICBsZXQgY291bnQgPSAtMTtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSBsZW5ndGgpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaW5kZXggPSBjb3VudCwgIC8vL1xyXG4gICAgICAgICAgICBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xyXG5cclxuICAgICAgb3BlcmF0aW9uKGVsZW1lbnQsIG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5leHQoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNlcXVlbmNlKG9wZXJhdGlvbnMsIGRvbmUsIGNvbnRleHQpIHtcclxuICBjb25zdCBsZW5ndGggPSBvcGVyYXRpb25zLmxlbmd0aDsgIC8vL1xyXG5cclxuICBsZXQgY291bnQgPSAtMTtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSBsZW5ndGgpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaW5kZXggPSBjb3VudCwgIC8vL1xyXG4gICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25zW2luZGV4XTtcclxuXHJcbiAgICAgIG9wZXJhdGlvbihuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZXh0KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBldmVudHVhbGx5KG9wZXJhdGlvbnMsIGRvbmUsIGNvbnRleHQpIHtcclxuICBjb25zdCBsZW5ndGggPSBvcGVyYXRpb25zLmxlbmd0aDsgIC8vL1xyXG5cclxuICBsZXQgY291bnQgPSAwO1xyXG5cclxuICBmdW5jdGlvbiBuZXh0KCkge1xyXG4gICAgY291bnQrKztcclxuXHJcbiAgICBjb25zdCB0ZXJtaW5hdGUgPSAoY291bnQgPT09IGxlbmd0aCk7XHJcblxyXG4gICAgaWYgKHRlcm1pbmF0ZSkge1xyXG4gICAgICBkb25lKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvcGVyYXRpb25zLmZvckVhY2goKG9wZXJhdGlvbiwgaW5kZXgpID0+IHtcclxuICAgIG9wZXJhdGlvbihuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZXBlYXRlZGx5KG9wZXJhdGlvbiwgbGVuZ3RoLCBkb25lLCBjb250ZXh0KSB7XHJcbiAgbGV0IGNvdW50ID0gMDtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSBsZW5ndGgpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgb3BlcmF0aW9uKG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkc0ZvckVhY2goYXJyYXksIG9wZXJhdGlvbiwgZG9uZSwgY29udGV4dCkge1xyXG4gIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsgIC8vL1xyXG5cclxuICBsZXQgY291bnQgPSAtMTtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSBsZW5ndGgpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaW5kZXggPSBjb3VudCwgIC8vL1xyXG4gICAgICAgICAgICBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xyXG5cclxuICAgICAgb3BlcmF0aW9uKGVsZW1lbnQsIG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5leHQoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGJhY2t3YXJkc0ZvckVhY2goYXJyYXksIG9wZXJhdGlvbiwgZG9uZSwgY29udGV4dCkge1xyXG4gIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsgIC8vL1xyXG5cclxuICBsZXQgY291bnQgPSBsZW5ndGg7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudC0tO1xyXG5cclxuICAgIGNvbnN0IHRlcm1pbmF0ZSA9IChjb3VudCA9PT0gLTEpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaW5kZXggPSBjb3VudCwgIC8vL1xyXG4gICAgICAgICAgICBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xyXG5cclxuICAgICAgb3BlcmF0aW9uKGVsZW1lbnQsIG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5leHQoKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIHdoaWxzdCxcclxuICBmb3JFYWNoLFxyXG4gIHNlcXVlbmNlLFxyXG4gIGV2ZW50dWFsbHksXHJcbiAgcmVwZWF0ZWRseSxcclxuICBmb3J3YXJkc0ZvckVhY2gsXHJcbiAgYmFja3dhcmRzRm9yRWFjaFxyXG59O1xyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgbGV2ZWxzIH0gZnJvbSBcIi4vbGV2ZWxzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG1ldGhvZHMgfSBmcm9tIFwiLi9tZXRob2RzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGhlYWRlcnMgfSBmcm9tIFwiLi9oZWFkZXJzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGtleUNvZGVzIH0gZnJvbSBcIi4va2V5Q29kZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZW5jb2RpbmdzIH0gZnJvbSBcIi4vZW5jb2RpbmdzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNoYXJhY3RlcnMgfSBmcm9tIFwiLi9jaGFyYWN0ZXJzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHN0YXR1c0NvZGVzIH0gZnJvbSBcIi4vc3RhdHVzQ29kZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY29udGVudFR5cGVzIH0gZnJvbSBcIi4vY29udGVudFR5cGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHN0YXR1c01lc3NhZ2VzIH0gZnJvbSBcIi4vc3RhdHVzTWVzc2FnZXNcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBhamF4VXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FqYXhcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBwYXRoVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3BhdGhcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaHR0cFV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9odHRwXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FycmF5XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGFzeW5jaHJvbm91c1V0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9hc3luY2hyb25vdXNcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7IGNoYXJhY3RlcnMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XHJcblxyXG5jb25zdCB7IExFU1NfVEhBTl9DSEFSQUNURVIsIEFNUEVSU0FORF9DSEFSQUNURVIsIEdSRUFURVJfVEhBTl9DSEFSQUNURVIgfSA9IGNoYXJhY3RlcnM7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2FuaXRpc2VDb250ZW50KGNvbnRlbnQpIHtcclxuICBjb25zdCBzYW5pdGlzZWRDb250ZW50ID0gY29udGVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLyYvLCBBTVBFUlNBTkRfQ0hBUkFDVEVSKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLzwvLCBMRVNTX1RIQU5fQ0hBUkFDVEVSKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLz4vLCBHUkVBVEVSX1RIQU5fQ0hBUkFDVEVSKTtcclxuXHJcbiAgcmV0dXJuIHNhbml0aXNlZENvbnRlbnQ7XHJcbn1cclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgdHlwZVR5cGUgPSBcInR5cGVcIjtcbmV4cG9ydCBjb25zdCBuYW1lVHlwZSA9IFwibmFtZVwiO1xuZXhwb3J0IGNvbnN0IGNvbW1lbnRUeXBlID0gXCJjb21tZW50XCI7XG5leHBvcnQgY29uc3QgZW5kT2ZMaW5lVHlwZSA9IFwiZW5kLW9mLWxpbmVcIjtcbmV4cG9ydCBjb25zdCB3aGl0ZXNwYWNlVHlwZSA9IFwid2hpdGVzcGFjZVwiO1xuZXhwb3J0IGNvbnN0IHN0cmluZ0xpdGVyYWxUeXBlID0gXCJzdHJpbmctbGl0ZXJhbFwiO1xuZXhwb3J0IGNvbnN0IGVuZE9mTGluZUNvbW1lbnRUeXBlID0gYCR7ZW5kT2ZMaW5lVHlwZX0gJHtjb21tZW50VHlwZX1gO1xuZXhwb3J0IGNvbnN0IHNpbmdsZUxpbmVDb21tZW50VHlwZSA9IGBzaW5nbGUtbGluZSAke2NvbW1lbnRUeXBlfWA7XG5leHBvcnQgY29uc3QgcmVndWxhckV4cHJlc3Npb25UeXBlID0gXCJyZWd1bGFyLWV4cHJlc3Npb25cIjtcbmV4cG9ydCBjb25zdCBlbmRPZk11bHRpTGluZUNvbW1lbnRUeXBlID0gYGVuZC1vZi1tdWx0aS1saW5lICR7Y29tbWVudFR5cGV9YDtcbmV4cG9ydCBjb25zdCBzdGFydE9mTXVsdGlMaW5lQ29tbWVudFR5cGUgPSBgc3RhcnQtb2YtbXVsdGktbGluZSAke2NvbW1lbnRUeXBlfWA7XG5leHBvcnQgY29uc3QgbWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VHlwZSA9IGBtaWRkbGUtb2YtbXVsdGktbGluZSAke2NvbW1lbnRUeXBlfWA7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgdHlwZVR5cGUsXG4gIG5hbWVUeXBlLFxuICBjb21tZW50VHlwZSxcbiAgZW5kT2ZMaW5lVHlwZSxcbiAgd2hpdGVzcGFjZVR5cGUsXG4gIHN0cmluZ0xpdGVyYWxUeXBlLFxuICBlbmRPZkxpbmVDb21tZW50VHlwZSxcbiAgc2luZ2xlTGluZUNvbW1lbnRUeXBlLFxuICByZWd1bGFyRXhwcmVzc2lvblR5cGUsXG4gIGVuZE9mTXVsdGlMaW5lQ29tbWVudFR5cGUsXG4gIHN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VHlwZSxcbiAgbWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VHlwZVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCB7IHNhbml0aXNlQ29udGVudCB9IGZyb20gXCIuL3V0aWxpdGllcy9jb250ZW50XCI7XG5pbXBvcnQgeyBjb21tZW50VHlwZSwgZW5kT2ZMaW5lVHlwZSwgd2hpdGVzcGFjZVR5cGUgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9rZW4ge1xuICBjb25zdHJ1Y3Rvcih0eXBlLCBjb250ZW50LCBpbm5lckhUTUwsIHNpZ25pZmljYW50KSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLmNvbnRlbnQgPSBjb250ZW50O1xuICAgIHRoaXMuaW5uZXJIVE1MID0gaW5uZXJIVE1MO1xuICAgIHRoaXMuc2lnbmlmaWNhbnQgPSBzaWduaWZpY2FudDtcbiAgfVxuXG4gIGdldFR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgfVxuXG4gIGdldENvbnRlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGVudDtcbiAgfVxuICBcbiAgZ2V0SW5uZXJIVE1MKCkge1xuICAgIHJldHVybiB0aGlzLmlubmVySFRNTDtcbiAgfVxuXG4gIGdldENvbnRlbnRMZW5ndGgoKSB7XG4gICAgY29uc3QgY29udGVudExlbmd0aCA9IHRoaXMuY29udGVudC5sZW5ndGg7XG5cbiAgICByZXR1cm4gY29udGVudExlbmd0aDtcbiAgfVxuXG4gIGlzU2lnbmlmaWNhbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2lnbmlmaWNhbnQ7XG4gIH1cbiAgXG4gIGlzQ29tbWVudFRva2VuKCkge1xuICAgIGNvbnN0IHR5cGVJbmNsdWRlc0NvbW1lbnRUeXBlID0gdGhpcy50eXBlLmluY2x1ZGVzKGNvbW1lbnRUeXBlKSxcbiAgICAgICAgICBjb21tZW50VG9rZW4gPSB0eXBlSW5jbHVkZXNDb21tZW50VHlwZTsgLy8vXG5cbiAgICByZXR1cm4gY29tbWVudFRva2VuO1xuICB9XG5cbiAgaXNFbmRPZkxpbmVUb2tlbigpIHtcbiAgICBjb25zdCB0eXBlRW5kT2ZMaW5lVHlwZSA9ICh0aGlzLnR5cGUuaW5jbHVkZXMoZW5kT2ZMaW5lVHlwZSkpLFxuICAgICAgICAgIGVuZE9mTGluZVRva2VuID0gdHlwZUVuZE9mTGluZVR5cGU7IC8vL1xuXG4gICAgcmV0dXJuIGVuZE9mTGluZVRva2VuO1xuICB9XG5cbiAgaXNXaGl0ZXNwYWNlVG9rZW4oKSB7XG4gICAgY29uc3QgdHlwZVdoaXRlc3BhY2VUeXBlID0gKHRoaXMudHlwZSA9PT0gd2hpdGVzcGFjZVR5cGUpLFxuICAgICAgICAgIHdoaXRlc3BhY2VUb2tlbiA9IHR5cGVXaGl0ZXNwYWNlVHlwZTsgLy8vXG5cbiAgICByZXR1cm4gd2hpdGVzcGFjZVRva2VuO1xuICB9XG5cbiAgaXNFcXVhbFRvKHRva2VuKSB7XG4gICAgY29uc3QgZXF1YWxUb1Rva2VuID0gKHRoaXMgPT09IHRva2VuKTtcblxuICAgIHJldHVybiBlcXVhbFRvVG9rZW47XG4gIH1cblxuICBtYXRjaCh0b2tlbikge1xuICAgIGNvbnN0IHR5cGUgPSB0b2tlbi5nZXRUeXBlKCksXG4gICAgICAgICAgY29udGVudCA9IHRva2VuLmdldENvbnRlbnQoKSxcbiAgICAgICAgICBzaWduaWZpY2FudCA9IHRva2VuLmlzU2lnbmlmaWNhbnQoKSxcbiAgICAgICAgICBtYXRjaGVzID0gKCh0aGlzLnR5cGUgPT09IHR5cGUpICYmICh0aGlzLmNvbnRlbnQgPT09IGNvbnRlbnQpICYmICh0aGlzLnNpZ25pZmljYW50ID09PSBzaWduaWZpY2FudCkpO1xuXG4gICAgcmV0dXJuIG1hdGNoZXM7XG4gIH1cblxuICBhc0hUTUwoKSB7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gdGhpcy50eXBlLCAgLy8vXG4gICAgICAgICAgaHRtbCA9IGA8c3BhbiBjbGFzcz1cIiR7Y2xhc3NOYW1lfVwiPiR7dGhpcy5pbm5lckhUTUx9PC9zcGFuPmA7XG5cbiAgICByZXR1cm4gaHRtbDtcbiAgfVxuXG4gIGNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbiwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGxldCB0b2tlbiA9IG51bGw7XG5cbiAgICBpZiAoc3RhcnRQb3NpdGlvbiAhPT0gZW5kUG9zaXRpb24pIHtcbiAgICAgIGxldCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCk7XG5cbiAgICAgIGNvbnRlbnQgPSBjb250ZW50LnN1YnN0cmluZyhzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7ICAvLy9cblxuICAgICAgY29uc3QgdHlwZSA9IHRoaXMuZ2V0VHlwZSgpLFxuICAgICAgICAgICAgc2FuaXRpc2VkQ29udGVudCA9IHNhbml0aXNlQ29udGVudChjb250ZW50KSxcbiAgICAgICAgICAgIGlubmVySFRNTCA9IHNhbml0aXNlZENvbnRlbnQ7IC8vL1xuXG4gICAgICB0b2tlbiA9IG5ldyBDbGFzcyh0eXBlLCBjb250ZW50LCBpbm5lckhUTUwsIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIHJldHVybiB0b2tlbjtcbiAgfVxuXG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGxldCB0b2tlbiA9IG51bGw7XG5cbiAgICBjb25zdCB7IHJlZ3VsYXJFeHByZXNzaW9uIH0gPSBDbGFzcyxcbiAgICAgICAgICBtYXRjaGVzID0gY29udGVudC5tYXRjaChyZWd1bGFyRXhwcmVzc2lvbik7XG5cbiAgICBpZiAobWF0Y2hlcyAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgeyBpbmRleCB9ID0gbWF0Y2hlcztcblxuICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0TWF0Y2ggPSBmaXJzdChtYXRjaGVzKTtcblxuICAgICAgICBjb250ZW50ID0gZmlyc3RNYXRjaDsgLy8vXG5cbiAgICAgICAgY29uc3QgY29udGVudExlbmd0aCA9IGNvbnRlbnQubGVuZ3RoO1xuXG4gICAgICAgIGlmIChjb250ZW50TGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHsgdHlwZSB9ID0gQ2xhc3MsXG4gICAgICAgICAgICAgICAgc2FuaXRpc2VkQ29udGVudCA9IHNhbml0aXNlQ29udGVudChjb250ZW50KSxcbiAgICAgICAgICAgICAgICBpbm5lckhUTUwgPSBzYW5pdGlzZWRDb250ZW50OyAvLy9cblxuICAgICAgICAgIHRva2VuID0gbmV3IENsYXNzKHR5cGUsIGNvbnRlbnQsIGlubmVySFRNTCwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdG9rZW47XG4gIH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQsIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBjb25zdCB7IHR5cGUgfSA9IENsYXNzLFxuICAgICAgICAgIHNhbml0aXNlZENvbnRlbnQgPSBzYW5pdGlzZUNvbnRlbnQoY29udGVudCksXG4gICAgICAgICAgaW5uZXJIVE1MID0gc2FuaXRpc2VkQ29udGVudCwgLy8vXG4gICAgICAgICAgdG9rZW4gPSBuZXcgQ2xhc3ModHlwZSwgY29udGVudCwgaW5uZXJIVE1MLCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcblxuICAgIHJldHVybiB0b2tlbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudEFuZFR5cGUoQ2xhc3MsIGNvbnRlbnQsIHR5cGUsIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBjb25zdCBzYW5pdGlzZWRDb250ZW50ID0gc2FuaXRpc2VDb250ZW50KGNvbnRlbnQpLFxuICAgICAgICAgIGlubmVySFRNTCA9IHNhbml0aXNlZENvbnRlbnQsIC8vL1xuICAgICAgICAgIHRva2VuID0gbmV3IENsYXNzKHR5cGUsIGNvbnRlbnQsIGlubmVySFRNTCwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICByZXR1cm4gdG9rZW47XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRva2VuIGZyb20gXCIuLi90b2tlblwiO1xuXG5jb25zdCBzaWduaWZpY2FudCA9IHRydWU7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpZ25pZmljYW50VG9rZW4gZXh0ZW5kcyBUb2tlbiB7XG4gIGNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbiwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgaWYgKGVuZFBvc2l0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGVuZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbjsgIC8vL1xuICAgICAgc3RhcnRQb3NpdGlvbiA9IENsYXNzOyAgLy8vXG4gICAgICBDbGFzcyA9IFNpZ25pZmljYW50VG9rZW47IC8vL1xuICAgIH1cblxuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW4gPSBzdXBlci5jbG9uZShDbGFzcywgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24sIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuXG4gICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGlmIChjb250ZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnRlbnQgPSBDbGFzczsgIC8vL1xuICAgICAgQ2xhc3MgPSBTaWduaWZpY2FudFRva2VuOyAvLy9cbiAgICB9XG5cbiAgICBjb25zdCBzaWduaWZpY2FudFRva2VuID0gVG9rZW4ubWF0Y2goQ2xhc3MsIGNvbnRlbnQsIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuXG4gICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGlmIChjb250ZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnRlbnQgPSBDbGFzczsgIC8vL1xuICAgICAgQ2xhc3MgPSBTaWduaWZpY2FudFRva2VuOyAvLy9cbiAgICB9XG5cbiAgICBjb25zdCBzaWduaWZpY2FudFRva2VuID0gVG9rZW4uZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQsIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuXG4gICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnRBbmRUeXBlKENsYXNzLCBjb250ZW50LCB0eXBlLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0eXBlID0gY29udGVudDsgLy8vXG4gICAgICBjb250ZW50ID0gQ2xhc3M7ICAvLy9cbiAgICAgIENsYXNzID0gU2lnbmlmaWNhbnRUb2tlbjsgLy8vXG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlbiA9IFRva2VuLmZyb21Db250ZW50QW5kVHlwZShDbGFzcywgY29udGVudCwgdHlwZSwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICByZXR1cm4gc2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgVSA9IFwidVwiO1xuZXhwb3J0IGNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi90b2tlbi9zaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBVLCBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuY29uc3QgeyBmaXJzdCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGUge1xuICBjb25zdHJ1Y3Rvcih0eXBlLCByZWd1bGFyRXhwcmVzc2lvbikge1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5yZWd1bGFyRXhwcmVzc2lvbiA9IHJlZ3VsYXJFeHByZXNzaW9uO1xuICB9XG4gIFxuICBnZXRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cbiAgXG4gIGdldFJlZ3VsYXJFeHByZXNzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLnJlZ3VsYXJFeHByZXNzaW9uO1xuICB9XG5cbiAgbWF0Y2goY29udGVudCkge1xuICAgIGxldCBzaWduaWZpY2FudFRva2VuID0gbnVsbDtcblxuICAgIGNvbnN0IG1hdGNoZXMgPSBjb250ZW50Lm1hdGNoKHRoaXMucmVndWxhckV4cHJlc3Npb24pO1xuXG4gICAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHsgaW5kZXggfSA9IG1hdGNoZXM7XG5cbiAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICBjb25zdCBmaXJzdE1hdGNoID0gZmlyc3QobWF0Y2hlcyk7XG5cbiAgICAgICAgY29udGVudCA9IGZpcnN0TWF0Y2g7IC8vL1xuXG4gICAgICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSBjb250ZW50Lmxlbmd0aDtcblxuICAgICAgICBpZiAoY29udGVudExlbmd0aCA+IDApIHtcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuID0gU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudEFuZFR5cGUoY29udGVudCwgdGhpcy50eXBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzaWduaWZpY2FudFRva2VuO1xuICB9XG4gIFxuICBhc0VudHJ5KCkge1xuICAgIGNvbnN0IGVudHJ5ID0ge30sXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb25QYXR0ZXJuID0gYCR7dGhpcy5yZWd1bGFyRXhwcmVzc2lvbn1gO1xuXG4gICAgZW50cnlbdGhpcy50eXBlXSA9IHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybjtcblxuICAgIHJldHVybiBlbnRyeTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVG9rZW4oVG9rZW4pIHtcbiAgICBjb25zdCB7IHR5cGUsIHJlZ3VsYXJFeHByZXNzaW9uIH0gPSBUb2tlbixcbiAgICAgICAgICBydWxlID0gbmV3IFJ1bGUodHlwZSwgcmVndWxhckV4cHJlc3Npb24pO1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbUVudHJ5KGVudHJ5KSB7XG4gICAgY29uc3QgZW50cnlLZXlzID0gT2JqZWN0LmtleXMoZW50cnkpLFxuICAgICAgICAgIGZpcnN0RW50cnlLZXkgPSBmaXJzdChlbnRyeUtleXMpLFxuICAgICAgICAgIHR5cGUgPSBmaXJzdEVudHJ5S2V5LCAvLy9cbiAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4gPSBlbnRyeVt0eXBlXSxcbiAgICAgICAgICBydWxlID0gUnVsZS5mcm9tVHlwZUFuZFJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybih0eXBlLCByZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4pO1xuICAgICAgICBcbiAgICByZXR1cm4gcnVsZTsgXG4gIH1cblxuICBzdGF0aWMgZnJvbVR5cGVBbmRSZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4odHlwZSwgcmVndWxhckV4cHJlc3Npb25QYXR0ZXJuKSB7XG4gICAgY29uc3QgdW5pY29kZSA9IGlzVW5pY29kZShyZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4pLFxuICAgICAgICAgIGZsYWdzID0gdW5pY29kZSA/XG4gICAgICAgICAgICAgICAgICAgIFUgOlxuICAgICAgICAgICAgICAgICAgICAgIEVNUFRZX1NUUklORyxcbiAgICAgICAgICByZWdFeHAgPSBuZXcgUmVnRXhwKHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybiwgZmxhZ3MpLFxuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uID0gcmVnRXhwLCAvLy9cbiAgICAgICAgICBydWxlID0gbmV3IFJ1bGUodHlwZSwgcmVndWxhckV4cHJlc3Npb24pO1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNVbmljb2RlKHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybikge1xuICBjb25zdCB1bmljb2RlUmVndWxhckV4cHJlc3Npb24gPSAvdXsvLCAvLy9cbiAgICAgICAgaW5kZXggPSByZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4uc2VhcmNoKHVuaWNvZGVSZWd1bGFyRXhwcmVzc2lvbiksXG4gICAgICAgIHVuaWNvZGUgPSAoaW5kZXggIT09IC0xKTtcblxuICByZXR1cm4gdW5pY29kZTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBwbHVzID0gXCIrXCI7XHJcbmV4cG9ydCBjb25zdCBlcHNpbG9uID0gXCJcdTAzQjVcIjtcclxuZXhwb3J0IGNvbnN0IHdpbGRjYXJkID0gXCIuXCI7XHJcbmV4cG9ydCBjb25zdCBhc3RlcmlzayA9IFwiKlwiO1xyXG5leHBvcnQgY29uc3Qgc2VwYXJhdG9yID0gXCI6Oj1cIjtcclxuZXhwb3J0IGNvbnN0IHRlcm1pbmF0b3IgPSBcIjtcIjtcclxuZXhwb3J0IGNvbnN0IHZlcnRpY2FsQmFyID0gXCJ8XCI7XHJcbmV4cG9ydCBjb25zdCBvcGVuQnJhY2tldCA9IFwiKFwiO1xyXG5leHBvcnQgY29uc3QgY2xvc2VCcmFja2V0ID0gXCIpXCI7XHJcbmV4cG9ydCBjb25zdCBxdWVzdGlvbk1hcmsgPSBcIj9cIjtcclxuZXhwb3J0IGNvbnN0IGV4Y2xhbWF0aW9uTWFyayA9IFwiIVwiO1xyXG5leHBvcnQgY29uc3QgTk9fV0hJVEVTUEFDRSA9IFwiPE5PX1dISVRFU1BBQ0U+XCI7XHJcbmV4cG9ydCBjb25zdCBFTkRfT0ZfTElORSA9IFwiPEVORF9PRl9MSU5FPlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIHBsdXMsXHJcbiAgZXBzaWxvbixcclxuICB3aWxkY2FyZCxcclxuICBhc3RlcmlzayxcclxuICBzZXBhcmF0b3IsXHJcbiAgdGVybWluYXRvcixcclxuICB2ZXJ0aWNhbEJhcixcclxuICBvcGVuQnJhY2tldCxcclxuICBjbG9zZUJyYWNrZXQsXHJcbiAgcXVlc3Rpb25NYXJrLFxyXG4gIGV4Y2xhbWF0aW9uTWFyayxcclxuICBOT19XSElURVNQQUNFLFxyXG4gIEVORF9PRl9MSU5FXHJcbn07XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmNvbnN0IGVudHJpZXMgPSBbXHJcbiAge1xyXG4gICAgXCJzcGVjaWFsXCI6IFwiXig/Ojo6PXxcXFxcfHxcXFxcKHxcXFxcKXxcXFxcP3xcXFxcIXxcXFxcKnxcXFxcK3xcXFxcLnxcdTAzQjV8O3w8Tk9fV0hJVEVTUEFDRT58PEVORF9PRl9MSU5FPilcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJ0eXBlXCI6IFwiXlxcXFxbW15cXFxcXV0rXFxcXF1cIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJuYW1lXCI6IFwiXltcXFxcd35dK1wiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcInVuYXNzaWduZWRcIjogXCJeW15cXFxcc10rXCJcclxuICB9XHJcbl07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBlbnRyaWVzO1xyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbkNvbW1lbnRGcm9tVG9rZW5BbmRJbkNvbW1lbnQodG9rZW4sIGluQ29tbWVudCkge1xuICBjb25zdCB0b2tlbkNvbW1lbnRUb2tlbiA9IHRva2VuLmlzQ29tbWVudFRva2VuKCk7XG5cbiAgaWYgKHRva2VuQ29tbWVudFRva2VuKSB7XG4gICAgY29uc3QgY29tbWVudFRva2VuID0gdG9rZW4sIC8vL1xuICAgICAgICAgIGNvbW1lbnRUb2tlbkluQ29tbWVudFByZXNlcnZpbmcgPSBjb21tZW50VG9rZW4uaXNJbkNvbW1lbnRQcmVzZXJ2aW5nKCk7XG5cbiAgICBpbkNvbW1lbnQgPSBjb21tZW50VG9rZW5JbkNvbW1lbnRQcmVzZXJ2aW5nOyAgLy8vXG4gIH1cblxuICByZXR1cm4gaW5Db21tZW50O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcclxuXHJcbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcclxuaW1wb3J0IHsgaW5Db21tZW50RnJvbVRva2VuQW5kSW5Db21tZW50IH0gZnJvbSBcIi4uL3V0aWxpdGllcy90b2tlblwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29tbW9uTGV4ZXIge1xyXG4gIGNvbnN0cnVjdG9yKHJ1bGVzLCBJbkNvbW1lbnRDbGFzc2VzLCBOb3RJbkNvbW1lbnRDbGFzc2VzKSB7XHJcbiAgICB0aGlzLnJ1bGVzID0gcnVsZXM7XHJcbiAgICB0aGlzLkluQ29tbWVudENsYXNzZXMgPSBJbkNvbW1lbnRDbGFzc2VzO1xyXG4gICAgdGhpcy5Ob3RJbkNvbW1lbnRDbGFzc2VzID0gTm90SW5Db21tZW50Q2xhc3NlcztcclxuICB9XHJcbiAgXHJcbiAgZ2V0UnVsZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5ydWxlcztcclxuICB9XHJcblxyXG4gIGdldEluQ29tbWVudENsYXNzZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5JbkNvbW1lbnRDbGFzc2VzO1xyXG4gIH1cclxuXHJcbiAgZ2V0Tm90SW5Db21tZW50Q2xhc3NlcygpIHtcclxuICAgIHJldHVybiB0aGlzLk5vdEluQ29tbWVudENsYXNzZXM7XHJcbiAgfVxyXG5cclxuICB0b2tlbmlzZShjb250ZW50LCBpbkNvbW1lbnQgPSBmYWxzZSkge1xyXG4gICAgY29uc3QgdG9rZW5zID0gW107XHJcblxyXG4gICAgd2hpbGUgKGNvbnRlbnQgIT09IEVNUFRZX1NUUklORykge1xyXG4gICAgICBsZXQgdG9rZW4gPSBudWxsO1xyXG5cclxuICAgICAgY29uc3QgQ2xhc3NlcyA9IGluQ29tbWVudCA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuSW5Db21tZW50Q2xhc3NlcyA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5Ob3RJbkNvbW1lbnRDbGFzc2VzO1xyXG5cclxuICAgICAgQ2xhc3Nlcy5zb21lKChDbGFzcykgPT4ge1xyXG4gICAgICAgIGlmIChDbGFzcyAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgdG9rZW4gPSBDbGFzcy5tYXRjaChjb250ZW50KTtcclxuXHJcbiAgICAgICAgICBpZiAodG9rZW4gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmICh0b2tlbiA9PT0gbnVsbCkge1xyXG4gICAgICAgIGxldCBzaWduaWZpY2FudFRva2VuID0gbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5ydWxlcy5zb21lKChydWxlKSA9PiB7XHJcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuID0gcnVsZS5tYXRjaChjb250ZW50KTtcclxuXHJcbiAgICAgICAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0b2tlbiA9IHNpZ25pZmljYW50VG9rZW47IC8vL1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0b2tlbiA9PT0gbnVsbCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGNvbnRlbnQgJyR7Y29udGVudH0nIGNhbm5vdCBiZSB0b2tlbmlzZWQuYCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcclxuXHJcbiAgICAgIGluQ29tbWVudCA9IGluQ29tbWVudEZyb21Ub2tlbkFuZEluQ29tbWVudCh0b2tlbiwgaW5Db21tZW50KTtcclxuXHJcbiAgICAgIGNvbnN0IHRva2VuQ29udGVudExlbmd0aCA9IHRva2VuLmdldENvbnRlbnRMZW5ndGgoKSxcclxuICAgICAgICAgICAgc3RhcnQgPSB0b2tlbkNvbnRlbnRMZW5ndGg7IC8vL1xyXG5cclxuICAgICAgY29udGVudCA9IGNvbnRlbnQuc3Vic3RyaW5nKHN0YXJ0KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdG9rZW5zO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGZyb21Ob3RoaW5nKENsYXNzKSB7XHJcbiAgICBjb25zdCB7IGVudHJpZXMgfSA9IENsYXNzLFxyXG4gICAgICAgICAgSW5Db21tZW50Q2xhc3NlcyA9IEluQ29tbWVudENsYXNzZXNGcm9tQ2xhc3MoQ2xhc3MpLFxyXG4gICAgICAgICAgTm90SW5Db21tZW50Q2xhc3NlcyA9IE5vdEluQ29tbWVudENsYXNzZXNGcm9tQ2xhc3MoQ2xhc3MpLFxyXG4gICAgICAgICAgcnVsZXMgPSBlbnRyaWVzLm1hcCgoZW50cnkpID0+IFJ1bGUuZnJvbUVudHJ5KGVudHJ5KSksXHJcbiAgICAgICAgICBsZXhlciA9IG5ldyBDbGFzcyhydWxlcywgSW5Db21tZW50Q2xhc3NlcywgTm90SW5Db21tZW50Q2xhc3Nlcyk7XHJcblxyXG4gICAgcmV0dXJuIGxleGVyO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGZyb21SdWxlcyhDbGFzcywgcnVsZXMpIHtcclxuICAgIGNvbnN0IEluQ29tbWVudENsYXNzZXMgPSBJbkNvbW1lbnRDbGFzc2VzRnJvbUNsYXNzKENsYXNzKSxcclxuICAgICAgICAgIE5vdEluQ29tbWVudENsYXNzZXMgPSBOb3RJbkNvbW1lbnRDbGFzc2VzRnJvbUNsYXNzKENsYXNzKSxcclxuICAgICAgICAgIGxleGVyID0gbmV3IENsYXNzKHJ1bGVzLCBJbkNvbW1lbnRDbGFzc2VzLCBOb3RJbkNvbW1lbnRDbGFzc2VzKTtcclxuXHJcbiAgICByZXR1cm4gbGV4ZXI7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZnJvbUVudHJpZXMoQ2xhc3MsIGVudHJpZXMpIHtcclxuICAgIGNvbnN0IHJ1bGVzID0gZW50cmllcy5tYXAoKGVudHJ5KSA9PiBSdWxlLmZyb21FbnRyeShlbnRyeSkpLFxyXG4gICAgICAgICAgSW5Db21tZW50Q2xhc3NlcyA9IEluQ29tbWVudENsYXNzZXNGcm9tQ2xhc3MoQ2xhc3MpLFxyXG4gICAgICAgICAgTm90SW5Db21tZW50Q2xhc3NlcyA9IE5vdEluQ29tbWVudENsYXNzZXNGcm9tQ2xhc3MoQ2xhc3MpLFxyXG4gICAgICAgICAgbGV4ZXIgPSBuZXcgQ2xhc3MocnVsZXMsIEluQ29tbWVudENsYXNzZXMsIE5vdEluQ29tbWVudENsYXNzZXMpO1xyXG5cclxuICAgIHJldHVybiBsZXhlcjtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEluQ29tbWVudENsYXNzZXNGcm9tQ2xhc3MoQ2xhc3MpIHtcclxuICBjb25zdCB7IEVuZE9mTGluZUNvbW1lbnRUb2tlbiwgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIH0gPSBDbGFzcyxcclxuICAgICAgICBJbkNvbW1lbnRDbGFzc2VzID0gW1xyXG4gICAgICAgICAgRW5kT2ZMaW5lQ29tbWVudFRva2VuLFxyXG4gICAgICAgICAgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sXHJcbiAgICAgICAgICBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlblxyXG4gICAgICAgIF07XHJcblxyXG4gIHJldHVybiBJbkNvbW1lbnRDbGFzc2VzO1xyXG59XHJcblxyXG5mdW5jdGlvbiBOb3RJbkNvbW1lbnRDbGFzc2VzRnJvbUNsYXNzKENsYXNzKSB7XHJcbiAgY29uc3QgeyBFbmRPZkxpbmVUb2tlbixcclxuICAgICAgICAgIFdoaXRlc3BhY2VUb2tlbixcclxuICAgICAgICAgIFNpbmdsZUxpbmVDb21tZW50VG9rZW4sXHJcbiAgICAgICAgICBSZWd1bGFyRXhwcmVzc2lvblRva2VuLFxyXG4gICAgICAgICAgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbixcclxuICAgICAgICAgIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbixcclxuICAgICAgICAgIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiB9ID0gQ2xhc3MsXHJcbiAgICAgIE5vdEluQ29tbWVudENsYXNzZXMgPSBbXHJcbiAgICAgICAgRW5kT2ZMaW5lVG9rZW4sXHJcbiAgICAgICAgV2hpdGVzcGFjZVRva2VuLFxyXG4gICAgICAgIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sXHJcbiAgICAgICAgU2luZ2xlTGluZUNvbW1lbnRUb2tlbixcclxuICAgICAgICBSZWd1bGFyRXhwcmVzc2lvblRva2VuLFxyXG4gICAgICAgIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbixcclxuICAgICAgICBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW5cclxuICAgICAgXTtcclxuXHJcbiAgcmV0dXJuIE5vdEluQ29tbWVudENsYXNzZXM7XHJcbn0iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUb2tlbiBmcm9tIFwiLi4vdG9rZW5cIjtcblxuY29uc3Qgc2lnbmlmaWNhbnQgPSBmYWxzZTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9uU2lnbmlmaWNhbnRUb2tlbiBleHRlbmRzIFRva2VuIHtcbiAgY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShDbGFzcywgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24sIHNpZ25pZmljYW50KTsgfVxuXG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCkgeyByZXR1cm4gVG9rZW4ubWF0Y2goQ2xhc3MsIGNvbnRlbnQsIHNpZ25pZmljYW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChDbGFzcywgY29udGVudCkgeyByZXR1cm4gVG9rZW4uZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQsIHNpZ25pZmljYW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudEFuZFR5cGUoQ2xhc3MsIGNvbnRlbnQsIHR5cGUpIHsgcmV0dXJuIFRva2VuLmZyb21Db250ZW50QW5kVHlwZShDbGFzcywgY29udGVudCwgdHlwZSwgc2lnbmlmaWNhbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi90b2tlbi9ub25TaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyB3aGl0ZXNwYWNlVHlwZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXaGl0ZXNwYWNlVG9rZW4gZXh0ZW5kcyBOb25TaWduaWZpY2FudFRva2VuIHtcbiAgYXNIVE1MKCkge1xuICAgIGNvbnN0IGh0bWwgPSB0aGlzLmlubmVySFRNTDsgIC8vL1xuXG4gICAgcmV0dXJuIGh0bWw7XG4gIH1cblxuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoV2hpdGVzcGFjZVRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBzdGF0aWMgdHlwZSA9IHdoaXRlc3BhY2VUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eW1xcdCBdKy87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4ubWF0Y2goV2hpdGVzcGFjZVRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KFdoaXRlc3BhY2VUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uL3Rva2VuL3NpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IHJlZ3VsYXJFeHByZXNzaW9uVHlwZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWd1bGFyRXhwcmVzc2lvblRva2VuIGV4dGVuZHMgU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShSZWd1bGFyRXhwcmVzc2lvblRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBzdGF0aWMgdHlwZSA9IHJlZ3VsYXJFeHByZXNzaW9uVHlwZTtcblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXlxcLyg/OlxcXFxbXlxcc118W15cXC9cXHJcXG5dKSpcXC8vO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLm1hdGNoKFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoUmVndWxhckV4cHJlc3Npb25Ub2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IGVuZE9mTGluZVR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiBleHRlbmRzIE5vblNpZ25pZmljYW50VG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgYXNIVE1MKCkge1xuICAgIGNvbnN0IGh0bWwgPSB0aGlzLmlubmVySFRNTDsgIC8vL1xuXG4gICAgcmV0dXJuIGh0bWw7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IGVuZE9mTGluZVR5cGU7XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14oPzpcXHJcXG58XFxyfFxcbikvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLm1hdGNoKEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uL3Rva2VuL3NpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IHN0cmluZ0xpdGVyYWxUeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0cmluZ0xpdGVyYWxUb2tlbiBleHRlbmRzIFNpZ25pZmljYW50VG9rZW4ge1xuICBjbG9uZShDbGFzcywgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBnZXRTdHJpbmcoKSB7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxuICAgICAgICAgIGNvbnRlbnRMZW5ndGggPSBjb250ZW50Lmxlbmd0aCxcbiAgICAgICAgICBzdGFydCA9IDEsXG4gICAgICAgICAgZW5kID0gY29udGVudExlbmd0aCAtIDEsXG4gICAgICAgICAgc3RyaW5nID0gY29udGVudC5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBzdHJpbmdMaXRlcmFsVHlwZTtcblxuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4ubWF0Y2goQ2xhc3MsIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KENsYXNzLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU3RyaW5nTGl0ZXJhbFRva2VuIGZyb20gXCIuLi8uLi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiBleHRlbmRzIFN0cmluZ0xpdGVyYWxUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eXCIoPzpcXFxcW15cXHNdfFteXCJcXFxcXFxyXFxuXSkqXCIvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTdHJpbmdMaXRlcmFsVG9rZW4ubWF0Y2goRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBTdHJpbmdMaXRlcmFsVG9rZW4uZnJvbUNvbnRlbnQoRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IGVudHJpZXMgZnJvbSBcIi4vZW50cmllc1wiO1xyXG5pbXBvcnQgQ29tbW9uTGV4ZXIgZnJvbSBcIi4uL2NvbW1vbi9sZXhlclwiO1xyXG5pbXBvcnQgV2hpdGVzcGFjZVRva2VuIGZyb20gXCIuLi90b2tlbi9ub25TaWduaWZpY2FudC93aGl0ZXNwYWNlXCI7XHJcbmltcG9ydCBSZWd1bGFyRXhwcmVzc2lvblRva2VuIGZyb20gXCIuLi90b2tlbi9zaWduaWZpY2FudC9yZWd1bGFyRXhwcmVzc2lvblwiO1xyXG5pbXBvcnQgRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvZW5kT2ZMaW5lXCI7XHJcbmltcG9ydCBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gZnJvbSBcIi4uL3Rva2VuL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWwvZG91Ymx5UXVvdGVkXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCTkZMZXhlciBleHRlbmRzIENvbW1vbkxleGVyIHtcclxuICB0b2tlbnNGcm9tQk5GKGJuZikge1xyXG4gICAgY29uc3QgY29udGVudCA9IGJuZiwgIC8vL1xyXG4gICAgICAgICAgdG9rZW5zID0gc3VwZXIudG9rZW5pc2UoY29udGVudCk7XHJcblxyXG4gICAgcmV0dXJuIHRva2VucztcclxuICB9XHJcblxyXG4gIHN0YXRpYyBlbnRyaWVzID0gZW50cmllcztcclxuXHJcbiAgc3RhdGljIEVuZE9mTGluZVRva2VuID0gRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBXaGl0ZXNwYWNlVG9rZW4gPSBXaGl0ZXNwYWNlVG9rZW47XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgUmVndWxhckV4cHJlc3Npb25Ub2tlbiA9IFJlZ3VsYXJFeHByZXNzaW9uVG9rZW47XHJcblxyXG4gIHN0YXRpYyBTaW5nbGVMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbjtcclxuXHJcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbU5vdGhpbmcoQk5GTGV4ZXIpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21SdWxlcyhCTkZMZXhlciwgcnVsZXMpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tRW50cmllcyhlbnRyaWVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tRW50cmllcyhCTkZMZXhlciwgZW50cmllcyk7IH1cclxufVxyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5jb25zdCBlbnRyaWVzID0gW1xyXG4gIHtcclxuICAgIFwiZGlnaXRcIjogXCJeXFxcXGQrXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwiYnJhY2tldFwiOiBcIl4oPzpcXFxcKHxcXFxcKSlcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJvcGVyYXRvclwiOiBcIl4oPzpcXFxcK3xcXFxcLXxcXFxcKnxcXFxcLylcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJ1bmFzc2lnbmVkXCI6IFwiXlteXFxcXHNdK1wiXHJcbiAgfVxyXG5dO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZW50cmllcztcclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU3RyaW5nTGl0ZXJhbFRva2VuIGZyb20gXCIuLi8uLi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiBleHRlbmRzIFN0cmluZ0xpdGVyYWxUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eJyg/OlxcXFxbXlxcc118W14nXFxcXFxcclxcbl0pKicvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTdHJpbmdMaXRlcmFsVG9rZW4ubWF0Y2goU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBTdHJpbmdMaXRlcmFsVG9rZW4uZnJvbUNvbnRlbnQoU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgc2luZ2xlTGluZUNvbW1lbnRUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpbmdsZUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBOb25TaWduaWZpY2FudFRva2VuIHtcbiAgY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShDbGFzcywgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgaXNJbkNvbW1lbnRQcmVzZXJ2aW5nKCkge1xuICAgIGNvbnN0IGluQ29tbWVudFByZXNlcnZpbmcgPSBmYWxzZTtcblxuICAgIHJldHVybiBpbkNvbW1lbnRQcmVzZXJ2aW5nO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBzaW5nbGVMaW5lQ29tbWVudFR5cGU7XG5cbiAgc3RhdGljIG1hdGNoKENsYXNzLCBjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLm1hdGNoKENsYXNzLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChDbGFzcywgY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudChDbGFzcywgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNpbmdsZUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvc2luZ2xlTGluZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQeXRob25TdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBTaW5nbGVMaW5lQ29tbWVudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKFB5dGhvblN0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14jW15cXHJcXG5dKi87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIFNpbmdsZUxpbmVDb21tZW50VG9rZW4ubWF0Y2goUHl0aG9uU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBTaW5nbGVMaW5lQ29tbWVudFRva2VuLmZyb21Db250ZW50KFB5dGhvblN0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IGVuZE9mTGluZUNvbW1lbnRUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZUNvbW1lbnROb25TaWduaWZpY2FudFRva2VuIGV4dGVuZHMgTm9uU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShFbmRPZkxpbmVDb21tZW50Tm9uU2lnbmlmaWNhbnRUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgYXNIVE1MKCkge1xuICAgIGNvbnN0IGh0bWwgPSB0aGlzLmlubmVySFRNTDsgIC8vL1xuXG4gICAgcmV0dXJuIGh0bWw7XG4gIH1cblxuICBpc0luQ29tbWVudFByZXNlcnZpbmcoKSB7XG4gICAgY29uc3QgaW5Db21tZW50UHJlc2VydmluZyA9IHRydWU7XG5cbiAgICByZXR1cm4gaW5Db21tZW50UHJlc2VydmluZztcbiAgfVxuXG4gIHN0YXRpYyB0eXBlID0gZW5kT2ZMaW5lQ29tbWVudFR5cGU7XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14oPzpcXHJcXG58XFxyfFxcbikvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLm1hdGNoKEVuZE9mTGluZUNvbW1lbnROb25TaWduaWZpY2FudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KEVuZE9mTGluZUNvbW1lbnROb25TaWduaWZpY2FudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgZW5kT2ZNdWx0aUxpbmVDb21tZW50VHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIE5vblNpZ25pZmljYW50VG9rZW4ge1xuICBjbG9uZShDbGFzcywgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBpc0luQ29tbWVudFByZXNlcnZpbmcoKSB7XG4gICAgY29uc3QgaW5Db21tZW50UHJlc2VydmluZyA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIGluQ29tbWVudFByZXNlcnZpbmc7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IGVuZE9mTXVsdGlMaW5lQ29tbWVudFR5cGU7XG5cbiAgc3RhdGljIG1hdGNoKENsYXNzLCBjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLm1hdGNoKENsYXNzLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChDbGFzcywgY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudChDbGFzcywgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQeXRob25TdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoUHl0aG9uU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14jIyMvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5tYXRjaChQeXRob25TdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5mcm9tQ29udGVudChQeXRob25TdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgc3RhcnRPZk11bHRpTGluZUNvbW1lbnRUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBOb25TaWduaWZpY2FudFRva2VuIHtcbiAgY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShDbGFzcywgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgaXNJbkNvbW1lbnRQcmVzZXJ2aW5nKCkge1xuICAgIGNvbnN0IGluQ29tbWVudFByZXNlcnZpbmcgPSB0cnVlO1xuXG4gICAgcmV0dXJuIGluQ29tbWVudFByZXNlcnZpbmc7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IHN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VHlwZTtcblxuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4ubWF0Y2goQ2xhc3MsIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KENsYXNzLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQeXRob25TdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKFB5dGhvblN0eWxlU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14jIyMvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLm1hdGNoKFB5dGhvblN0eWxlU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5mcm9tQ29udGVudChQeXRob25TdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBtaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgTm9uU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIGlzSW5Db21tZW50UHJlc2VydmluZygpIHtcbiAgICBjb25zdCBpbkNvbW1lbnRQcmVzZXJ2aW5nID0gdHJ1ZTtcblxuICAgIHJldHVybiBpbkNvbW1lbnRQcmVzZXJ2aW5nO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBtaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUeXBlO1xuXG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChDbGFzcywgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvbWlkZGxlT2ZcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHl0aG9uU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKFB5dGhvblN0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eKD86W15cXHJcXG5dKz8oPz0jIyMpfFteXFxyXFxuXSspLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ubWF0Y2goUHl0aG9uU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoUHl0aG9uU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCBlbnRyaWVzIGZyb20gXCIuL2VudHJpZXNcIjtcclxuaW1wb3J0IENvbW1vbkxleGVyIGZyb20gXCIuLi9jb21tb24vbGV4ZXJcIjtcclxuaW1wb3J0IFdoaXRlc3BhY2VUb2tlbiBmcm9tIFwiLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvd2hpdGVzcGFjZVwiO1xyXG5pbXBvcnQgUmVndWxhckV4cHJlc3Npb25Ub2tlbiBmcm9tIFwiLi4vdG9rZW4vc2lnbmlmaWNhbnQvcmVndWxhckV4cHJlc3Npb25cIjtcclxuaW1wb3J0IEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uL3Rva2VuL25vblNpZ25pZmljYW50L2VuZE9mTGluZVwiO1xyXG5pbXBvcnQgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIGZyb20gXCIuLi90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsL3NpbmdseVF1b3RlZFwiO1xyXG5pbXBvcnQgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIGZyb20gXCIuLi90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsL2RvdWJseVF1b3RlZFwiO1xyXG5pbXBvcnQgUHl0aG9uU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmUvcHl0aG9uU3R5bGVcIjtcclxuaW1wb3J0IEVuZE9mTGluZUNvbW1lbnROb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L2VuZE9mTGluZVwiO1xyXG5pbXBvcnQgUHl0aG9uU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvZW5kT2YvcHl0aG9uU3R5bGVcIjtcclxuaW1wb3J0IFB5dGhvblN0eWxlU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZi9weXRob25TdHlsZVwiO1xyXG5pbXBvcnQgUHl0aG9uU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvbWlkZGxlT2YvcHl0aG9uU3R5bGVcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJhc2ljTGV4ZXIgZXh0ZW5kcyBDb21tb25MZXhlciB7XHJcbiAgc3RhdGljIGVudHJpZXMgPSBlbnRyaWVzO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZMaW5lVG9rZW4gPSBFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIFdoaXRlc3BhY2VUb2tlbiA9IFdoaXRlc3BhY2VUb2tlbjtcclxuXHJcbiAgc3RhdGljIEVuZE9mTGluZUNvbW1lbnRUb2tlbiA9IEVuZE9mTGluZUNvbW1lbnROb25TaWduaWZpY2FudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4gPSBSZWd1bGFyRXhwcmVzc2lvblRva2VuO1xyXG5cclxuICBzdGF0aWMgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiA9IFB5dGhvblN0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IFB5dGhvblN0eWxlRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW47IC8vL1xyXG5cclxuICBzdGF0aWMgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IFB5dGhvblN0eWxlU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IFB5dGhvblN0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW47IC8vL1xyXG5cclxuICBzdGF0aWMgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuO1xyXG5cclxuICBzdGF0aWMgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuO1xyXG5cclxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tTm90aGluZyhCYXNpY0xleGVyKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tUnVsZXMoQmFzaWNMZXhlciwgcnVsZXMpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tRW50cmllcyhlbnRyaWVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tRW50cmllcyhCYXNpY0xleGVyLCBlbnRyaWVzKTsgfVxyXG59XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uL3Rva2VuL3NpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IGVuZE9mTGluZVR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbiBleHRlbmRzIFNpZ25pZmljYW50VG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgYXNIVE1MKCkge1xuICAgIGNvbnN0IGh0bWwgPSB0aGlzLmlubmVySFRNTDsgIC8vL1xuXG4gICAgcmV0dXJuIGh0bWw7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IGVuZE9mTGluZVR5cGU7XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14oPzpcXHJcXG58XFxyfFxcbikvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLm1hdGNoKEVuZE9mTGluZVNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uL3Rva2VuL3NpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IGVuZE9mTGluZUNvbW1lbnRUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZUNvbW1lbnRTaWduaWZpY2FudFRva2VuIGV4dGVuZHMgU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShFbmRPZkxpbmVDb21tZW50U2lnbmlmaWNhbnRUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgYXNIVE1MKCkge1xuICAgIGNvbnN0IGh0bWwgPSB0aGlzLmlubmVySFRNTDsgIC8vL1xuXG4gICAgcmV0dXJuIGh0bWw7XG4gIH1cblxuICBpc0luQ29tbWVudFByZXNlcnZpbmcoKSB7XG4gICAgY29uc3QgaW5Db21tZW50UHJlc2VydmluZyA9IHRydWU7XG5cbiAgICByZXR1cm4gaW5Db21tZW50UHJlc2VydmluZztcbiAgfVxuXG4gIHN0YXRpYyB0eXBlID0gZW5kT2ZMaW5lQ29tbWVudFR5cGU7XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14oPzpcXHJcXG58XFxyfFxcbikvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLm1hdGNoKEVuZE9mTGluZUNvbW1lbnRTaWduaWZpY2FudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KEVuZE9mTGluZUNvbW1lbnRTaWduaWZpY2FudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENTdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBTaW5nbGVMaW5lQ29tbWVudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKENTdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eXFwvXFwvW15cXHJcXG5dKi87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIFNpbmdsZUxpbmVDb21tZW50VG9rZW4ubWF0Y2goQ1N0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gU2luZ2xlTGluZUNvbW1lbnRUb2tlbi5mcm9tQ29udGVudChDU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENTdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoQ1N0eWxlRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eXFwqXFwvLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ubWF0Y2goQ1N0eWxlRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLmZyb21Db250ZW50KENTdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShDU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXlxcL1xcKi87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ubWF0Y2goQ1N0eWxlU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5mcm9tQ29udGVudChDU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENTdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoQ1N0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eKD86W15cXHJcXG5dKz8oPz1cXCpcXC8pfFteXFxyXFxuXSspLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ubWF0Y2goQ1N0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuLmZyb21Db250ZW50KENTdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIFJ1bGUgfSBmcm9tIFwiLi9ydWxlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHR5cGVzIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwiLi9zcGVjaWFsU3ltYm9sc1wiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIEJORkxleGVyIH0gZnJvbSBcIi4vYm5mL2xleGVyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJhc2ljTGV4ZXIgfSBmcm9tIFwiLi9iYXNpYy9sZXhlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb21tb25MZXhlciB9IGZyb20gXCIuL2NvbW1vbi9sZXhlclwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIFNpZ25pZmljYW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9zaWduaWZpY2FudFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBOb25TaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL3NpZ25pZmljYW50L2VuZE9mTGluZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvZW5kT2ZMaW5lXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEVuZE9mTGluZUNvbW1lbnRTaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnQvY29tbWVudC9lbmRPZkxpbmVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRW5kT2ZMaW5lQ29tbWVudE5vblNpZ25pZmljYW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L2VuZE9mTGluZVwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIFdoaXRlc3BhY2VUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L3doaXRlc3BhY2VcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBTdHJpbmdMaXRlcmFsVG9rZW4gfSBmcm9tIFwiLi90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4gfSBmcm9tIFwiLi90b2tlbi9zaWduaWZpY2FudC9yZWd1bGFyRXhwcmVzc2lvblwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gfSBmcm9tIFwiLi90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsL3NpbmdseVF1b3RlZFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gfSBmcm9tIFwiLi90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsL2RvdWJseVF1b3RlZFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIFNpbmdsZUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZlwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZlwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENTdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmUvY1N0eWxlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENTdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvZW5kT2YvY1N0eWxlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENTdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mL2NTdHlsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mL2NTdHlsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQeXRob25TdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmUvcHl0aG9uU3R5bGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUHl0aG9uU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mL3B5dGhvblN0eWxlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFB5dGhvblN0eWxlU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2YvcHl0aG9uU3R5bGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUHl0aG9uU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mL3B5dGhvblN0eWxlXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5jb25zdCBlbnRyaWVzID0gW1xyXG5cclxuICB7IFwiY29sb3VyXCI6IFwiXiMoPzpbMC05YS1mQS1GXXs2fXxbMC05YS1mQS1GXXszfSlcIiB9LFxyXG5cclxuICB7IFwia2V5d29yZFwiOiBcIl4oPzohaW1wb3J0YW50fEBtZWRpYSlcIiB9LFxyXG5cclxuICB7IFwicGVyY2VudGFnZVwiOiBcIl4oPzpbMC05XSt8WzAtOV0qXFxcXC5bMC05XSspXFxcXCVcIiB9LFxyXG5cclxuICB7IFwiZnJlcXVlbmN5XCI6IFwiXig/OlswLTldK3xbMC05XSpcXFxcLlswLTldKykoPzpoenxraHopXCIgfSxcclxuXHJcbiAgeyBcImZyYWN0aW9uXCI6IFwiXlsxLTldWzAtOV0qP2ZyXCIgfSxcclxuXHJcbiAgeyBcImxlbmd0aFwiOiBcIl4oPzpbMC05XSt8WzAtOV0qXFxcXC5bMC05XSspKD86cHh8Y218bW18aW58cHR8cGMpXCIgfSxcclxuXHJcbiAgeyBcImFuZ2xlXCI6IFwiXig/OlswLTldK3xbMC05XSpcXFxcLlswLTldKykoPzpkZWd8cmFkfGdyYWQpXCIgfSxcclxuXHJcbiAgeyBcInRpbWVcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKSg/OnN8bXMpXCIgfSxcclxuXHJcbiAgeyBcInJlbXNcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKXJlbVwiIH0sXHJcblxyXG4gIHsgXCJlbXNcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKWVtXCIgfSxcclxuXHJcbiAgeyBcIm51bWJlclwiOiBcIl5bMC05XSt8WzAtOV0qXFxcXC5bMC05XStcIiB9LFxyXG5cclxuICB7IFwic3BlY2lhbFwiOiBcIl47fDo6fDp8XFxcXC58LHwvfFxcXFx8PXx+PXw9fD58XFxcXHt8XFxcXH18XFxcXCh8XFxcXCl8XFxcXFt8XFxcXF1cIiB9LFxyXG5cclxuICB7IFwib3BlcmF0b3JcIjogXCJeXig/OmFuZHxub3R8b25seSkkXCIgfSxcclxuXHJcbiAgeyBcImlkZW50aWZpZXJcIjogXCJeW19hLXpBLVowLTktXStcIiB9LFxyXG5cclxuICB7IFwidW5hcnktb3BlcmF0b3JcIjogXCJeXFxcXCt8XFxcXC1cIiB9LFxyXG5cclxuICB7IFwidW5hc3NpZ25lZFwiOiBcIl5bXlxcXFxzXStcIiB9XHJcblxyXG5dO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZW50cmllcztcclxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IHsgQ29tbW9uTGV4ZXIsIFdoaXRlc3BhY2VUb2tlbiwgRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiwgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xyXG5cclxuaW1wb3J0IGVudHJpZXMgZnJvbSBcIi4vZW50cmllc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ1NTTGV4ZXIgZXh0ZW5kcyBDb21tb25MZXhlciB7XHJcbiAgc3RhdGljIGVudHJpZXMgPSBlbnRyaWVzO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZMaW5lVG9rZW4gPSBFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIFdoaXRlc3BhY2VUb2tlbiA9IFdoaXRlc3BhY2VUb2tlbjtcclxuXHJcbiAgc3RhdGljIEVuZE9mTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7IC8vL1xyXG5cclxuICBzdGF0aWMgUmVndWxhckV4cHJlc3Npb25Ub2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBTaW5nbGVMaW5lQ29tbWVudFRva2VuID0gbnVsbDsgLy8vXHJcblxyXG4gIHN0YXRpYyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7IC8vL1xyXG5cclxuICBzdGF0aWMgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7IC8vL1xyXG5cclxuICBzdGF0aWMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsOyAvLy9cclxuXHJcbiAgc3RhdGljIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gPSBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW47XHJcblxyXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21Ob3RoaW5nKENTU0xleGVyKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tUnVsZXMoQ1NTTGV4ZXIsIHJ1bGVzKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbUVudHJpZXMoZW50cmllcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbUVudHJpZXMoQ1NTTGV4ZXIsIGVudHJpZXMpOyB9XHJcbn1cclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBibmYgPSBgXG5cbiAgICAgIGRvY3VtZW50ICAgICAgICAgICAgICA6Oj0gICggcnVsZSB8IGVycm9yICkrIDtcblxuICAgICAgcnVsZSAgICAgICAgICAgICAgICAgIDo6PSAgbmFtZSBcIjo6PVwiIGRlZmluaXRpb25zIFwiO1wiIDtcblxuICAgICAgbmFtZSAgICAgICAgICAgICAgICAgIDo6PSAgW25hbWVdIDtcblxuICAgICAgZGVmaW5pdGlvbnMgICAgICAgICAgIDo6PSAgZGVmaW5pdGlvbiAoIFwifFwiIGRlZmluaXRpb24gKSogO1xuXG4gICAgICBkZWZpbml0aW9uICAgICAgICAgICAgOjo9ICBwYXJ0KyA7XG5cbiAgICAgIHBhcnQgICAgICAgICAgICAgICAgICA6Oj0gIG5vblRlcm1pbmFsUGFydCBxdWFudGlmaWVyKlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB0ZXJtaW5hbFBhcnQgcXVhbnRpZmllcipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgbm9XaGl0ZXNwYWNlUGFydFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG5cbiAgICAgIG5vblRlcm1pbmFsUGFydCAgICAgICA6Oj0gIGNob2ljZU9mUGFydHNcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgc2VxdWVuY2VPZlBhcnRzXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHJ1bGVOYW1lIGxvb2tBaGVhZE1vZGlmaWVyP1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG5cbiAgICAgIHRlcm1pbmFsUGFydCAgICAgICAgICA6Oj0gIHNpZ25pZmljYW50VG9rZW5UeXBlXG4gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICByZWd1bGFyRXhwcmVzc2lvblxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB0ZXJtaW5hbFN5bWJvbFxuIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgZW5kT2ZMaW5lXG4gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB3aWxkY2FyZFxuIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICBub1doaXRlc3BhY2VQYXJ0ICAgICAgOjo9ICBcIjxOT19XSElURVNQQUNFPlwiIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblxuICAgICAgY2hvaWNlT2ZQYXJ0cyAgICAgICAgIDo6PSAgXCIoXCIgcGFydCAoIFwifFwiIHBhcnQgKSsgXCIpXCIgO1xuXG4gICAgICBzZXF1ZW5jZU9mUGFydHMgICAgICAgOjo9ICBcIihcIiBwYXJ0IHBhcnQrIFwiKVwiIDtcblxuICAgICAgcnVsZU5hbWUgICAgICAgICAgICAgIDo6PSAgW25hbWVdIDtcblxuICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGUgIDo6PSAgW3R5cGVdIDtcblxuICAgICAgcmVndWxhckV4cHJlc3Npb24gICAgIDo6PSAgW3JlZ3VsYXItZXhwcmVzc2lvbl0gO1xuXG4gICAgICB0ZXJtaW5hbFN5bWJvbCAgICAgICAgOjo9ICBbc3RyaW5nLWxpdGVyYWxdIDtcblxuICAgICAgZW5kT2ZMaW5lICAgICAgICAgICAgIDo6PSAgXCI8RU5EX09GX0xJTkU+XCIgO1xuXG4gICAgICB3aWxkY2FyZCAgICAgICAgICAgICAgOjo9ICBcIi5cIiA7XG5cbiAgICAgIHF1YW50aWZpZXIgICAgICAgICAgICA6Oj0gIG9wdGlvbmFsUXVhbnRpZmllclxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBvbmVPck1vcmVRdWFudGlmaWVyXG4gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB6ZXJvT3JNb3JlUXVhbnRpZmllclxuIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuXG4gICAgICBsb29rQWhlYWRNb2RpZmllciAgICAgOjo9ICA8Tk9fV0hJVEVTUEFDRT5cIiFcIiA7XG5cbiAgICAgIG9wdGlvbmFsUXVhbnRpZmllciAgICA6Oj0gIDxOT19XSElURVNQQUNFPlwiP1wiIDtcblxuICAgICAgb25lT3JNb3JlUXVhbnRpZmllciAgIDo6PSAgPE5PX1dISVRFU1BBQ0U+XCIrXCIgO1xuXG4gICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllciAgOjo9ICA8Tk9fV0hJVEVTUEFDRT5cIipcIiA7XG5cbiAgICAgIGVycm9yICAgICAgICAgICAgICAgICA6Oj0gIC4gO1xuXG5gO1xuXG5leHBvcnQgZGVmYXVsdCBibmY7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBjaGFyYWN0ZXJzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHsgU1BBQ0VfQ0hBUkFDVEVSIH0gPSBjaGFyYWN0ZXJzO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFkZGluZ0Zyb21QYWRkaW5nTGVuZ3RoKHBhZGRpbmdMZW5ndGgpIHtcbiAgbGV0IHBhZGRpbmcgPSBFTVBUWV9TVFJJTkc7XG5cbiAgZm9yIChsZXQgcG9zaXRpb24gPSAwOyBwb3NpdGlvbiA8IHBhZGRpbmdMZW5ndGg7IHBvc2l0aW9uKyspIHtcbiAgICBwYWRkaW5nICs9IFNQQUNFX0NIQVJBQ1RFUjtcbiAgfVxuXG4gIHJldHVybiBwYWRkaW5nO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IHBhZGRpbmdGcm9tUGFkZGluZ0xlbmd0aCB9IGZyb20gXCIuL3V0aWxpdGllcy9zdHJpbmdcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKG5hbWUsIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMuZGVmaW5pdGlvbnMgPSBkZWZpbml0aW9ucztcbiAgICB0aGlzLk5vblRlcm1pbmFsTm9kZSA9IE5vblRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIGdldE5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgfVxuXG4gIGdldERlZmluaXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmRlZmluaXRpb25zO1xuICB9XG5cbiAgZ2V0Tm9uVGVybWluYWxOb2RlKCkge1xuICAgIHJldHVybiB0aGlzLk5vblRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIHNldE5hbWUobmFtZSkge1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gIH1cblxuICBzZXREZWZpbml0aW9ucyhkZWZpbml0aW9ucykge1xuICAgIHRoaXMuZGVmaW5pdGlvbnMgPSBkZWZpbml0aW9ucztcbiAgfVxuXG4gIHNldE5vblRlcm1pbmFsTm9kZShOb25UZXJtaW5hbE5vZGUpIHtcbiAgICB0aGlzLk5vblRlcm1pbmFsTm9kZSA9IE5vblRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIGFkZERlZmluaXRpb24oZGVmaW5pdGlvbiwgcG9zaXRpb24pIHtcbiAgICBjb25zdCBkZWZpbml0aW9uc0luY2x1ZGVzRGVmaW5pdGlvbiA9IHRoaXMuZGVmaW5pdGlvbnMuaW5jbHVkZXMoZGVmaW5pdGlvbik7XG5cbiAgICBpZiAoIWRlZmluaXRpb25zSW5jbHVkZXNEZWZpbml0aW9uKSB7XG4gICAgICBpZiAocG9zaXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBkZWZpbml0aW9uc0xlbmd0aCA9IHRoaXMuZGVmaW5pdGlvbnMubGVuZ3RoO1xuXG4gICAgICAgIHBvc2l0aW9uID0gZGVmaW5pdGlvbnNMZW5ndGg7IC8vL1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGFydCA9IHBvc2l0aW9uLCAvLy9cbiAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMDtcblxuICAgICAgdGhpcy5kZWZpbml0aW9ucy5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50LCBkZWZpbml0aW9uKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVEZWZpbml0aW9uKGRlZmluaXRpb24pIHtcbiAgICBjb25zdCBkZWZpbml0aW9uc0luY2x1ZGVzRGVmaW5pdGlvbiA9IHRoaXMuZGVmaW5pdGlvbnMuaW5jbHVkZXMoZGVmaW5pdGlvbik7XG5cbiAgICBpZiAoZGVmaW5pdGlvbnNJbmNsdWRlc0RlZmluaXRpb24pIHtcbiAgICAgIGNvbnN0IGRlZmluaXRpb25JbmRleCA9IHRoaXMuZGVmaW5pdGlvbnMuaW5kZXhPZihkZWZpbml0aW9uKSxcbiAgICAgICAgICAgIHN0YXJ0ID0gZGVmaW5pdGlvbkluZGV4LCAgLy8vXG4gICAgICAgICAgICBkZWxldGVDb3VudCA9IDE7XG5cbiAgICAgIHRoaXMuZGVmaW5pdGlvbnMuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCk7XG4gICAgfVxuICB9XG5cbiAgcmVwbGFjZURlZmluaXRpb24ob2xkRGVmaW5pdGlvbiwgbmV3RGVmaW5pdGlvbikge1xuICAgIGNvbnN0IG9sZERlZmluaXRpb25JbmRleCA9IHRoaXMuZGVmaW5pdGlvbnMuaW5kZXhPZihvbGREZWZpbml0aW9uKTtcblxuICAgIGlmIChvbGREZWZpbml0aW9uSW5kZXggPiAtMSkge1xuICAgICAgY29uc3Qgc3RhcnQgPSBvbGREZWZpbml0aW9uSW5kZXgsIC8vL1xuICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxO1xuXG4gICAgICB0aGlzLmRlZmluaXRpb25zLnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQsIG5ld0RlZmluaXRpb24pXG4gICAgfVxuICB9XG5cbiAgcGFyc2Uoc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHJ1bGVOb2RlID0gbnVsbDtcblxuICAgIHN0YXRlLmluY3JlYXNlRGVwdGgoKTtcblxuICAgIGNvbnN0IHRvb0RlZXAgPSBzdGF0ZS5pc1Rvb0RlZXAoKTtcblxuICAgIGlmICh0b29EZWVwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBwYXJzZSB0cmVlIGlzIHRvbyBkZWVwIGF0IHJ1bGUgXCIke3RoaXMubmFtZX1cIi5gKTtcbiAgICB9XG5cbiAgICBsZXQgcGFyc2VkLFxuICAgICAgICBkZWZpbml0aW9uTm9kZXM7XG5cbiAgICB0aGlzLmRlZmluaXRpb25zLnNvbWUoKGRlZmluaXRpb24pID0+IHtcbiAgICAgIGRlZmluaXRpb25Ob2RlcyA9IFtdO1xuXG4gICAgICBwYXJzZWQgPSB0aGlzLnBhcnNlRGVmaW5pdGlvbihkZWZpbml0aW9uLCBkZWZpbml0aW9uTm9kZXMsIHN0YXRlLCBjYWxsYmFjayk7XG5cbiAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBjb25zdCBydWxlTmFtZSA9IHRoaXMubmFtZSwgLy8vXG4gICAgICAgICAgICBjaGlsZE5vZGVzID0gZGVmaW5pdGlvbk5vZGVzLCAgLy8vXG4gICAgICAgICAgICBub25UZXJtaW5hbE5vZGUgPSB0aGlzLk5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTtcblxuICAgICAgcnVsZU5vZGUgPSBub25UZXJtaW5hbE5vZGU7IC8vL1xuICAgIH1cblxuICAgIHN0YXRlLmRlY3JlYXNlRGVwdGgoKTtcblxuICAgIHJldHVybiBydWxlTm9kZTtcbiAgfVxuXG4gIHBhcnNlRGVmaW5pdGlvbihkZWZpbml0aW9uLCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGNvbnN0IHNhdmVkSW5kZXggPSBzdGF0ZS5nZXRTYXZlZEluZGV4KCk7XG5cbiAgICBwYXJzZWQgPSBkZWZpbml0aW9uLnBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spO1xuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcobWF4aW11bVJ1bGVOYW1lTGVuZ3RoLCBtdWx0aUxpbmUgPSB0cnVlKSB7XG4gICAgY29uc3QgZGVmaW5pdGlvbnNMZW5ndGggPSB0aGlzLmRlZmluaXRpb25zLmxlbmd0aDtcblxuICAgIG11bHRpTGluZSA9IG11bHRpTGluZSAmJiAoZGVmaW5pdGlvbnNMZW5ndGggPiAxKTsgIC8vL1xuXG4gICAgY29uc3QgbWF4aW11bVBhZGRpbmcgPSBwYWRkaW5nRnJvbVBhZGRpbmdMZW5ndGgobWF4aW11bVJ1bGVOYW1lTGVuZ3RoKSxcbiAgICAgICAgICBkZWZpbml0aW9uc1N0cmluZyA9IHRoaXMuZGVmaW5pdGlvbnMucmVkdWNlKChkZWZpbml0aW9uc1N0cmluZywgZGVmaW5pdGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGVmaW5pdGlvblN0cmluZyA9IGRlZmluaXRpb24uYXNTdHJpbmcoKTtcblxuICAgICAgICAgICAgaWYgKGRlZmluaXRpb25zU3RyaW5nID09PSBFTVBUWV9TVFJJTkcpIHtcbiAgICAgICAgICAgICAgZGVmaW5pdGlvbnNTdHJpbmcgPSBkZWZpbml0aW9uU3RyaW5nOyAvLy9cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGRlZmluaXRpb25zU3RyaW5nID0gbXVsdGlMaW5lID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7ZGVmaW5pdGlvbnNTdHJpbmd9XG5cbiR7bWF4aW11bVBhZGRpbmd9ICAgfCAke2RlZmluaXRpb25TdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7ZGVmaW5pdGlvbnNTdHJpbmd9IHwgJHtkZWZpbml0aW9uU3RyaW5nfWA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBkZWZpbml0aW9uc1N0cmluZztcbiAgICAgICAgICB9LCBFTVBUWV9TVFJJTkcpLFxuICAgICAgICAgIHJ1bGVOYW1lID0gdGhpcy5uYW1lLCAvLy9cbiAgICAgICAgICBydWxlTmFtZUxlbmd0aCA9IHJ1bGVOYW1lLmxlbmd0aCxcbiAgICAgICAgICBwYWRkaW5nTGVuZ3RoID0gbWF4aW11bVJ1bGVOYW1lTGVuZ3RoIC0gcnVsZU5hbWVMZW5ndGgsXG4gICAgICAgICAgcGFkZGluZyA9IHBhZGRpbmdGcm9tUGFkZGluZ0xlbmd0aChwYWRkaW5nTGVuZ3RoKTtcblxuICAgIGNvbnN0IHNlbWljb2xvblN0cmluZyA9IG11bHRpTGluZSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBcblxuJHttYXhpbXVtUGFkZGluZ30gICA7YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgO1wiLFxuICAgICAgICAgIHN0cmluZyA9IGBcblxuJHt0aGlzLm5hbWV9JHtwYWRkaW5nfSA6Oj0gJHtkZWZpbml0aW9uc1N0cmluZ30ke3NlbWljb2xvblN0cmluZ31gO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZShDbGFzcywgcnVsZSkge1xuICAgIGlmIChydWxlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJ1bGUgPSBDbGFzcztcbiAgICAgIENsYXNzID0gUnVsZTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgbmFtZSA9IHJ1bGUuZ2V0TmFtZSgpLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gcnVsZS5nZXREZWZpbml0aW9ucygpLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IHJ1bGUuZ2V0Tm9uVGVybWluYWxOb2RlKCk7XG5cbiAgICBydWxlID0gbmV3IENsYXNzKG5hbWUsIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTUFYSU1VTV9ERVBUSCA9IDk5O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBERUZBVUxUX01BWElNVU1fREVQVEggfSBmcm9tIFwiLi9kZWZhdWx0c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdGF0ZSB7XG4gIGNvbnN0cnVjdG9yKHJ1bGVNYXAsIHRva2VucywgaW5kZXgsIGRlcHRoLCBtYXhpbXVtRGVwdGgpIHtcbiAgICB0aGlzLnJ1bGVNYXAgPSBydWxlTWFwO1xuICAgIHRoaXMudG9rZW5zID0gdG9rZW5zO1xuXHRcdHRoaXMuaW5kZXggPSBpbmRleDtcblx0XHR0aGlzLmRlcHRoID0gZGVwdGg7XG4gICAgdGhpcy5tYXhpbXVtRGVwdGggPSBtYXhpbXVtRGVwdGg7XG4gIH1cblxuICBnZXRSdWxlTWFwKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVNYXA7XG4gIH1cblxuICBnZXRUb2tlbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5zO1xuICB9XG5cblx0Z2V0SW5kZXgoKSB7XG5cdFx0cmV0dXJuIHRoaXMuaW5kZXg7XG5cdH1cblxuICBnZXREZXB0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5kZXB0aDtcbiAgfVxuXG5cdGdldE1heGltdW1EZXB0aCgpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXhpbXVtRGVwdGg7XG5cdH1cblxuXHRnZXRTYXZlZEluZGV4KCkge1xuICAgIGNvbnN0IHNhdmVkSW5kZXggPSB0aGlzLmluZGV4OyAvLy9cbiAgXG4gICAgcmV0dXJuIHNhdmVkSW5kZXg7XG4gIH1cblxuICBnZXROZXh0VG9rZW4oKSB7XG4gICAgbGV0IG5leHRUb2tlbiA9IG51bGw7XG5cbiAgICBjb25zdCB0b2tlbnNMZW5ndGggPSB0aGlzLnRva2Vucy5sZW5ndGg7XG5cbiAgICBpZiAodGhpcy5pbmRleCA8IHRva2Vuc0xlbmd0aCkge1xuICAgICAgbmV4dFRva2VuID0gdGhpcy50b2tlbnNbdGhpcy5pbmRleCsrXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dFRva2VuO1xuICB9XG5cbiAgZ2V0TmV4dFNpZ25pZmljYW50VG9rZW4oKSB7XG5cdFx0bGV0IG5leHRTaWduaWZpY2FudFRva2VuID0gbnVsbDtcblxuICBcdGNvbnN0IHRva2Vuc0xlbmd0aCA9IHRoaXMudG9rZW5zLmxlbmd0aDtcblxuICBcdHdoaWxlICh0aGlzLmluZGV4IDwgdG9rZW5zTGVuZ3RoKSB7XG4gIFx0XHRjb25zdCB0b2tlbiA9IHRoaXMudG9rZW5zW3RoaXMuaW5kZXgrK10sXG5cdFx0XHRcdFx0XHR0b2tlblNpZ25pZmljYW50ID0gdG9rZW4uaXNTaWduaWZpY2FudCgpO1xuXG4gIFx0XHRpZiAodG9rZW5TaWduaWZpY2FudCkge1xuICBcdFx0ICBjb25zdCBzaWduaWZpY2FudFRva2VuID0gdG9rZW47IC8vL1xuXG5cdFx0XHRcdG5leHRTaWduaWZpY2FudFRva2VuID0gc2lnbmlmaWNhbnRUb2tlbjtcdC8vL1xuXG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuICBcdH1cblxuXHRcdHJldHVybiBuZXh0U2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIGlzTmV4dFRva2VuV2hpdGVzcGFjZVRva2VuKCkge1xuICAgIGxldCBuZXh0VG9rZW5XaGl0ZXNwYWNlVG9rZW4gPSBmYWxzZTtcblxuICAgIGNvbnN0IHRva2Vuc0xlbmd0aCA9IHRoaXMudG9rZW5zLmxlbmd0aDtcblxuICAgIGlmICh0aGlzLmluZGV4IDwgdG9rZW5zTGVuZ3RoKSB7XG4gICAgICBjb25zdCBuZXh0VG9rZW4gPSB0aGlzLnRva2Vuc1t0aGlzLmluZGV4XTtcblxuICAgICAgbmV4dFRva2VuV2hpdGVzcGFjZVRva2VuID0gbmV4dFRva2VuLmlzV2hpdGVzcGFjZVRva2VuKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHRUb2tlbldoaXRlc3BhY2VUb2tlbjtcbiAgfVxuXG4gIGlzVG9vRGVlcCgpIHtcbiAgICBjb25zdCB0b29EZWVwID0gKHRoaXMuZGVwdGggPiB0aGlzLm1heGltdW1EZXB0aCk7XG5cbiAgICByZXR1cm4gdG9vRGVlcDtcbiAgfVxuXG5cdGJhY2t0cmFjayhzYXZlZEluZGV4KSB7XG5cdFx0dGhpcy5pbmRleCA9IHNhdmVkSW5kZXg7ICAvLy9cblx0fVxuXG4gIHNldEluZGV4KGluZGV4KSB7XG4gICAgdGhpcy5pbmRleCA9IGluZGV4O1xuICB9XG5cbiAgaW5jcmVhc2VEZXB0aCgpIHtcbiAgICB0aGlzLmRlcHRoKys7XG4gIH1cblxuICBkZWNyZWFzZURlcHRoKCkge1xuICAgIHRoaXMuZGVwdGgtLTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVG9rZW5zQW5kUnVsZU1hcCh0b2tlbnMsIHJ1bGVNYXApIHtcbiAgICBjb25zdCBpbmRleCA9IDAsXG5cdFx0XHRcdFx0ZGVwdGggPSAwLFxuXHRcdFx0XHRcdG1heGltdW1EZXB0aCA9IERFRkFVTFRfTUFYSU1VTV9ERVBUSCxcblx0XHRcdFx0XHRzdGF0ZSA9IG5ldyBTdGF0ZShydWxlTWFwLCB0b2tlbnMsIGluZGV4LCBkZXB0aCwgbWF4aW11bURlcHRoKTtcblxuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuZXhwb3J0IGNvbnN0IHsgZmlyc3QsIHNlY29uZCwgdGhpcmQsIGxhc3QsIHB1c2gsIGZpbHRlciwgZm9yd2FyZHNTb21lLCBiYWNrd2FyZHNTb21lIH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGZ1bmN0aW9uIGV2ZW4oYXJyYXkpIHsgcmV0dXJuIGFycmF5LmZpbHRlcigoZW50cnksIGluZGV4KSA9PiBpc0V2ZW4oaW5kZXgpKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gYWxsQnV0Rmlyc3QoYXJyYXkpIHtcbiAgYXJyYXkgPSBhcnJheS5zbGljZSgpOyAgLy8vXG5cbiAgYXJyYXkuc2hpZnQoKTtcblxuICByZXR1cm4gYXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbGxCdXRGaXJzdEFuZExhc3QoYXJyYXkpIHtcbiAgYXJyYXkgPSBhcnJheS5zbGljZSgpOyAgLy8vXG5cbiAgYXJyYXkuc2hpZnQoKTtcblxuICBhcnJheS5wb3AoKTtcblxuICByZXR1cm4gYXJyYXk7XG59XG5cbmZ1bmN0aW9uIGlzRXZlbihpbmRleCkge1xuICBjb25zdCBldmVuID0gKE1hdGguZmxvb3IoaW5kZXgvMikgPT09IGluZGV4LzIpO1xuXG4gIHJldHVybiBldmVuO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBjaGFyYWN0ZXJzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgeyBsYXN0IH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5jb25zdCB7IE5FV19MSU5FX0NIQVJBQ1RFUiwgU1BBQ0VfQ0hBUkFDVEVSIH0gPSBjaGFyYWN0ZXJzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYXJzZVRyZWUge1xuICBjb25zdHJ1Y3RvcihsaW5lcykge1xuICAgIHRoaXMubGluZXMgPSBsaW5lcztcbiAgfVxuXG4gIGNsb25lKCkge1xuICAgIGNvbnN0IGxpbmVzID0gdGhpcy5saW5lcy5zbGljZSgpLCAgLy8vXG4gICAgICAgICAgcGFyc2VUcmVlID0gbmV3IFBhcnNlVHJlZShsaW5lcyk7XG5cbiAgICByZXR1cm4gcGFyc2VUcmVlO1xuICB9XG5cbiAgZ2V0V2lkdGgoKSB7XG4gICAgbGV0IHdpZHRoO1xuXG4gICAgbGV0IGxpbmVzTGVuZ3RoID0gdGhpcy5saW5lcy5sZW5ndGg7XG5cbiAgICBpZiAobGluZXNMZW5ndGggPT09IDApIHtcbiAgICAgIHdpZHRoID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbGFzdExpbmUgPSBsYXN0KHRoaXMubGluZXMpLFxuICAgICAgICAgICAgbGFzdExpbmVMZW5ndGggPSBsYXN0TGluZS5sZW5ndGg7XG5cbiAgICAgIHdpZHRoID0gbGFzdExpbmVMZW5ndGg7IC8vL1xuICAgIH1cblxuICAgIHJldHVybiB3aWR0aDtcbiAgfVxuXG4gIGdldERlcHRoKCkge1xuICAgIGNvbnN0IGxpbmVzTGVuZ3RoID0gdGhpcy5saW5lcy5sZW5ndGgsXG4gICAgICAgICAgZGVwdGggPSBsaW5lc0xlbmd0aDsgIC8vL1xuXG4gICAgcmV0dXJuIGRlcHRoO1xuICB9XG5cbiAgZm9yRWFjaExpbmUoY2FsbGJhY2spIHtcbiAgICB0aGlzLmxpbmVzLmZvckVhY2goY2FsbGJhY2spO1xuICB9XG5cbiAgYXBwZW5kVG9Ub3AocGFyc2VUcmVlKSB7XG4gICAgcGFyc2VUcmVlLmZvckVhY2hMaW5lKChsaW5lKSA9PiB7XG4gICAgICB0aGlzLmxpbmVzLnVuc2hpZnQobGluZSk7XG4gICAgfSk7XG4gIH1cblxuICBhcHBlbmRUb0xlZnQocGFyc2VUcmVlKSB7XG4gICAgcGFyc2VUcmVlLmZvckVhY2hMaW5lKChsaW5lLCBpbmRleCkgPT4ge1xuICAgICAgdGhpcy5saW5lc1tpbmRleF0gPSBsaW5lICsgdGhpcy5saW5lc1tpbmRleF07XG4gICAgfSk7XG4gIH1cblxuICBhcHBlbmRUb1JpZ2h0KHBhcnNlVHJlZSkge1xuICAgIHBhcnNlVHJlZS5mb3JFYWNoTGluZSgobGluZSwgaW5kZXgpID0+IHtcbiAgICAgIHRoaXMubGluZXNbaW5kZXhdID0gdGhpcy5saW5lc1tpbmRleF0gKyBsaW5lO1xuICAgIH0pO1xuICB9XG5cbiAgYXBwZW5kVG9Cb3R0b20ocGFyc2VUcmVlKSB7XG4gICAgcGFyc2VUcmVlLmZvckVhY2hMaW5lKChsaW5lKSA9PiB7XG4gICAgICB0aGlzLmxpbmVzLnB1c2gobGluZSk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRUb3BNYXJnaW4odG9wTWFyZ2luRGVwdGgpIHtcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMuZ2V0V2lkdGgoKSxcbiAgICAgICAgICB0b3BNYXJnaW5XaWR0aCA9IHdpZHRoLCAgLy8vXG4gICAgICAgICAgdG9wTWFyZ2luU3RyaW5nID0gbWFyZ2luU3RyaW5nRnJvbU1hcmdpbldpZHRoKHRvcE1hcmdpbldpZHRoKTtcblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0b3BNYXJnaW5EZXB0aDsgaW5kZXgrKykge1xuICAgICAgdGhpcy5saW5lcy51bnNoaWZ0KHRvcE1hcmdpblN0cmluZyk7XG4gICAgfVxuICB9XG5cbiAgYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpIHtcbiAgICBjb25zdCBsZWZ0TWFyZ2luU3RyaW5nID0gbWFyZ2luU3RyaW5nRnJvbU1hcmdpbldpZHRoKGxlZnRNYXJnaW5XaWR0aCksXG4gICAgICAgICAgbGluZXNMZW5ndGggPSB0aGlzLmxpbmVzLmxlbmd0aDtcblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsaW5lc0xlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdGhpcy5saW5lc1tpbmRleF0gPSBsZWZ0TWFyZ2luU3RyaW5nICsgdGhpcy5saW5lc1tpbmRleF07XG4gICAgfVxuICB9XG5cbiAgYWRkUmlnaHRNYXJnaW4ocmlnaHRNYXJnaW5XaWR0aCkge1xuICAgIGNvbnN0IHJpZ2h0TWFyZ2luU3RyaW5nID0gbWFyZ2luU3RyaW5nRnJvbU1hcmdpbldpZHRoKHJpZ2h0TWFyZ2luV2lkdGgpLFxuICAgICAgICAgIGxpbmVzTGVuZ3RoID0gdGhpcy5saW5lcy5sZW5ndGg7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGluZXNMZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHRoaXMubGluZXNbaW5kZXhdID0gdGhpcy5saW5lc1tpbmRleF0gKyByaWdodE1hcmdpblN0cmluZztcbiAgICB9XG4gIH1cblxuICBhZGRCb3R0b21NYXJnaW4oYm90dG9tTWFyZ2luRGVwdGgpIHtcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMuZ2V0V2lkdGgoKSxcbiAgICAgICAgICBib3R0b21NYXJnaW5XaWR0aCA9IHdpZHRoLCAgLy8vXG4gICAgICAgICAgYm90dG9tTWFyZ2luU3RyaW5nID0gbWFyZ2luU3RyaW5nRnJvbU1hcmdpbldpZHRoKGJvdHRvbU1hcmdpbldpZHRoKTtcblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBib3R0b21NYXJnaW5EZXB0aDsgaW5kZXgrKykge1xuICAgICAgdGhpcy5saW5lcy5wdXNoKGJvdHRvbU1hcmdpblN0cmluZyk7XG4gICAgfVxuICB9XG4gIFxuICBwb3BMaW5lKCkgeyByZXR1cm4gdGhpcy5saW5lcy5wb3AoKTsgfVxuICBcbiAgc2hpZnRMaW5lKCkgeyByZXR1cm4gdGhpcy5saW5lcy5zaGlmdCgpOyB9XG4gIFxuICBwdXNoTGluZShsaW5lKSB7IHRoaXMubGluZXMucHVzaChsaW5lKTsgfVxuICBcbiAgdW5zaGlmdExpbmUobGluZSkgeyB0aGlzLmxpbmVzLnVuc2hpZnQobGluZSk7IH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBzdHJpbmcgPSB0aGlzLmxpbmVzLnJlZHVjZSgoc3RyaW5nLCBsaW5lKSA9PiB7XG4gICAgICBzdHJpbmcgKz0gbGluZSArIE5FV19MSU5FX0NIQVJBQ1RFUjtcblxuICAgICAgcmV0dXJuIHN0cmluZztcbiAgICB9LCBFTVBUWV9TVFJJTkcpO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXJnaW5TdHJpbmdGcm9tTWFyZ2luV2lkdGgobWFyZ2luV2lkdGgsIHNwYWNlQ2hhcmFjdGVyKSB7XG4gIHNwYWNlQ2hhcmFjdGVyID0gc3BhY2VDaGFyYWN0ZXIgfHwgU1BBQ0VfQ0hBUkFDVEVSO1xuXG4gIGxldCBtYXJnaW5TdHJpbmcgPSBFTVBUWV9TVFJJTkc7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IG1hcmdpbldpZHRoOyBpbmRleCsrKSB7XG4gICAgbWFyZ2luU3RyaW5nICs9IHNwYWNlQ2hhcmFjdGVyO1xuICB9XG5cbiAgcmV0dXJuIG1hcmdpblN0cmluZztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfbmVjZXNzYXJ5ID0gcmVxdWlyZShcIm5lY2Vzc2FyeVwiKTtcbnZhciBfcGFyc2VUcmVlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vcGFyc2VUcmVlXCIpKTtcbnZhciBfY29uc3RhbnRzID0gcmVxdWlyZShcIi4uL2NvbnN0YW50c1wiKTtcbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICAgIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICAgIH1cbiAgICByZXR1cm4gc2VsZjtcbn1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspe1xuICAgICAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxuZnVuY3Rpb24gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlcikge1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBSZWZsZWN0LmdldCkge1xuICAgICAgICBfZ2V0ID0gUmVmbGVjdC5nZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgX2dldCA9IGZ1bmN0aW9uIF9nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHtcbiAgICAgICAgICAgIHZhciBiYXNlID0gX3N1cGVyUHJvcEJhc2UodGFyZ2V0LCBwcm9wZXJ0eSk7XG4gICAgICAgICAgICBpZiAoIWJhc2UpIHJldHVybjtcbiAgICAgICAgICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihiYXNlLCBwcm9wZXJ0eSk7XG4gICAgICAgICAgICBpZiAoZGVzYy5nZXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVzYy5nZXQuY2FsbChyZWNlaXZlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZGVzYy52YWx1ZTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIF9nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIgfHwgdGFyZ2V0KTtcbn1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICAgICAgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtcbiAgICB9O1xuICAgIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7XG59XG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgICB9XG4gICAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7XG59XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikge1xuICAgIHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7XG4gICAgICAgIGRlZmF1bHQ6IG9ialxuICAgIH07XG59XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gICAgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICAgICAgcmV0dXJuIGNhbGw7XG4gICAgfVxuICAgIHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICAgICAgby5fX3Byb3RvX18gPSBwO1xuICAgICAgICByZXR1cm4gbztcbiAgICB9O1xuICAgIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59XG5mdW5jdGlvbiBfc3VwZXJQcm9wQmFzZShvYmplY3QsIHByb3BlcnR5KSB7XG4gICAgd2hpbGUoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KSl7XG4gICAgICAgIG9iamVjdCA9IF9nZXRQcm90b3R5cGVPZihvYmplY3QpO1xuICAgICAgICBpZiAob2JqZWN0ID09PSBudWxsKSBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdDtcbn1cbnZhciBfdHlwZW9mID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgXCJAc3djL2hlbHBlcnMgLSB0eXBlb2ZcIjtcbiAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbn07XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkge1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7XG4gICAgdHJ5IHtcbiAgICAgICAgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbigpIHt9KSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7XG4gICAgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkge1xuICAgICAgICB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDtcbiAgICAgICAgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHtcbiAgICAgICAgICAgIHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7XG4gICAgICAgICAgICByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTtcbiAgICB9O1xufVxudmFyIEJBUl9DSEFSQUNURVIgPSBfbmVjZXNzYXJ5LmNoYXJhY3RlcnMuQkFSX0NIQVJBQ1RFUjtcbnZhciBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IC8qI19fUFVSRV9fKi8gZnVuY3Rpb24oUGFyc2VUcmVlKSB7XG4gICAgX2luaGVyaXRzKFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLCBQYXJzZVRyZWUpO1xuICAgIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoVmVydGljYWxCcmFuY2hQYXJzZVRyZWUpO1xuICAgIGZ1bmN0aW9uIFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlKGxpbmVzLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKSB7XG4gICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSk7XG4gICAgICAgIHZhciBfdGhpcztcbiAgICAgICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBsaW5lcyk7XG4gICAgICAgIF90aGlzLnZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIF9jcmVhdGVDbGFzcyhWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSwgW1xuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvblwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmVydGljYWxCcmFuY2hQb3NpdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImFkZExlZnRNYXJnaW5cIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBhZGRMZWZ0TWFyZ2luKGxlZnRNYXJnaW5XaWR0aCkge1xuICAgICAgICAgICAgICAgIF9nZXQoX2dldFByb3RvdHlwZU9mKFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLnByb3RvdHlwZSksIFwiYWRkTGVmdE1hcmdpblwiLCB0aGlzKS5jYWxsKHRoaXMsIGxlZnRNYXJnaW5XaWR0aCk7XG4gICAgICAgICAgICAgICAgdGhpcy52ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uICs9IGxlZnRNYXJnaW5XaWR0aDsgLy8vXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICBdLCBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJmcm9tV2lkdGhcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBmcm9tV2lkdGgod2lkdGgpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3RyaW5nID0gQkFSX0NIQVJBQ1RFUiwgdmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IDAsIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVN0cmluZ0FuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oVmVydGljYWxCcmFuY2hQYXJzZVRyZWUsIHN0cmluZywgdmVydGljYWxCcmFuY2hQb3NpdGlvbiksIGxlZnRNYXJnaW5XaWR0aCA9IE1hdGguZmxvb3Iod2lkdGggLyAyKSwgcmlnaHRNYXJnaW5XaWR0aCA9IHdpZHRoIC0gbGVmdE1hcmdpbldpZHRoIC0gMTtcbiAgICAgICAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5hZGRMZWZ0TWFyZ2luKGxlZnRNYXJnaW5XaWR0aCk7XG4gICAgICAgICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuYWRkUmlnaHRNYXJnaW4ocmlnaHRNYXJnaW5XaWR0aCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiZnJvbURlcHRoQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvblwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGZyb21EZXB0aEFuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oQ2xhc3MsIGRlcHRoLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgdmFyIGxpbmVzID0gbGluZXNGcm9tRGVwdGgoZGVwdGgpLCBhcmdzID0gW1xuICAgICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgICBsaW5lcyxcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWxCcmFuY2hQb3NpdGlvblxuICAgICAgICAgICAgICAgIF0sIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseShDbGFzcywgYXJncykpOyAvLy9cbiAgICAgICAgICAgICAgICByZXR1cm4gdmVydGljYWxCcmFuY2hQYXJzZVRyZWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJmcm9tU3RyaW5nQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvblwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGZyb21TdHJpbmdBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKENsYXNzLCBzdHJpbmcsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAodmVydGljYWxCcmFuY2hQb3NpdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBzdHJpbmc7IC8vL1xuICAgICAgICAgICAgICAgICAgICBzdHJpbmcgPSBDbGFzczsgLy8vXG4gICAgICAgICAgICAgICAgICAgIENsYXNzID0gX3BhcnNlVHJlZS5kZWZhdWx0OyAvLy9cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzdHJpbmcsIGxpbmVzID0gW1xuICAgICAgICAgICAgICAgICAgICBsaW5lXG4gICAgICAgICAgICAgICAgXSwgYXJncyA9IFtcbiAgICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbGluZXMsXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb25cbiAgICAgICAgICAgICAgICBdLCB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoQ2xhc3MsIGFyZ3MpKTsgLy8vXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgXSk7XG4gICAgcmV0dXJuIFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlO1xufShfcGFyc2VUcmVlLmRlZmF1bHQpO1xuZXhwb3J0cy5kZWZhdWx0ID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWU7XG5mdW5jdGlvbiBsaW5lc0Zyb21EZXB0aChkZXB0aCkge1xuICAgIHZhciBsaW5lcyA9IFtdO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgd2hpbGUoaW5kZXggPCBkZXB0aCl7XG4gICAgICAgIGxpbmVzW2luZGV4KytdID0gX2NvbnN0YW50cy5FTVBUWV9TVFJJTkc7XG4gICAgfVxuICAgIHJldHVybiBsaW5lcztcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5d1lYSnpaVlJ5WldVdmRtVnlkR2xqWVd4Q2NtRnVZMmd1YW5NaVhTd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lYQ0oxYzJVZ2MzUnlhV04wWENJN1hHNWNibWx0Y0c5eWRDQjdJR05vWVhKaFkzUmxjbk1nZlNCbWNtOXRJRndpYm1WalpYTnpZWEo1WENJN1hHNWNibWx0Y0c5eWRDQlFZWEp6WlZSeVpXVWdabkp2YlNCY0lpNHVMM0JoY25ObFZISmxaVndpTzF4dVhHNXBiWEJ2Y25RZ2V5QkZUVkJVV1Y5VFZGSkpUa2NnZlNCbWNtOXRJRndpTGk0dlkyOXVjM1JoYm5SelhDSTdYRzVjYm1OdmJuTjBJSHNnUWtGU1gwTklRVkpCUTFSRlVpQjlJRDBnWTJoaGNtRmpkR1Z5Y3p0Y2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ1kyeGhjM01nVm1WeWRHbGpZV3hDY21GdVkyaFFZWEp6WlZSeVpXVWdaWGgwWlc1a2N5QlFZWEp6WlZSeVpXVWdlMXh1SUNCamIyNXpkSEoxWTNSdmNpaHNhVzVsY3l3Z2RtVnlkR2xqWVd4Q2NtRnVZMmhRYjNOcGRHbHZiaWtnZTF4dUlDQWdJSE4xY0dWeUtHeHBibVZ6S1R0Y2JpQWdJQ0JjYmlBZ0lDQjBhR2x6TG5abGNuUnBZMkZzUW5KaGJtTm9VRzl6YVhScGIyNGdQU0IyWlhKMGFXTmhiRUp5WVc1amFGQnZjMmwwYVc5dU8xeHVJQ0I5WEc0Z0lGeHVJQ0JuWlhSV1pYSjBhV05oYkVKeVlXNWphRkJ2YzJsMGFXOXVLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG5abGNuUnBZMkZzUW5KaGJtTm9VRzl6YVhScGIyNDdYRzRnSUgxY2JseHVJQ0JoWkdSTVpXWjBUV0Z5WjJsdUtHeGxablJOWVhKbmFXNVhhV1IwYUNrZ2UxeHVJQ0FnSUhOMWNHVnlMbUZrWkV4bFpuUk5ZWEpuYVc0b2JHVm1kRTFoY21kcGJsZHBaSFJvS1R0Y2JseHVJQ0FnSUhSb2FYTXVkbVZ5ZEdsallXeENjbUZ1WTJoUWIzTnBkR2x2YmlBclBTQnNaV1owVFdGeVoybHVWMmxrZEdnN0lDOHZMMXh1SUNCOVhHNWNiaUFnYzNSaGRHbGpJR1p5YjIxWGFXUjBhQ2gzYVdSMGFDa2dlMXh1SUNBZ0lHTnZibk4wSUhOMGNtbHVaeUE5SUVKQlVsOURTRUZTUVVOVVJWSXNYRzRnSUNBZ0lDQWdJQ0FnZG1WeWRHbGpZV3hDY21GdVkyaFFiM05wZEdsdmJpQTlJREFzWEc0Z0lDQWdJQ0FnSUNBZ2RtVnlkR2xqWVd4Q2NtRnVZMmhRWVhKelpWUnlaV1VnUFNCV1pYSjBhV05oYkVKeVlXNWphRkJoY25ObFZISmxaUzVtY205dFUzUnlhVzVuUVc1a1ZtVnlkR2xqWVd4Q2NtRnVZMmhRYjNOcGRHbHZiaWhXWlhKMGFXTmhiRUp5WVc1amFGQmhjbk5sVkhKbFpTd2djM1J5YVc1bkxDQjJaWEowYVdOaGJFSnlZVzVqYUZCdmMybDBhVzl1S1N4Y2JpQWdJQ0FnSUNBZ0lDQnNaV1owVFdGeVoybHVWMmxrZEdnZ1BTQk5ZWFJvTG1ac2IyOXlLSGRwWkhSb0x6SXBMRnh1SUNBZ0lDQWdJQ0FnSUhKcFoyaDBUV0Z5WjJsdVYybGtkR2dnUFNCM2FXUjBhQ0F0SUd4bFpuUk5ZWEpuYVc1WGFXUjBhQ0F0SURFN1hHNWNiaUFnSUNCMlpYSjBhV05oYkVKeVlXNWphRkJoY25ObFZISmxaUzVoWkdSTVpXWjBUV0Z5WjJsdUtHeGxablJOWVhKbmFXNVhhV1IwYUNrN1hHNGdJQ0FnZG1WeWRHbGpZV3hDY21GdVkyaFFZWEp6WlZSeVpXVXVZV1JrVW1sbmFIUk5ZWEpuYVc0b2NtbG5hSFJOWVhKbmFXNVhhV1IwYUNrN1hHNWNiaUFnSUNCeVpYUjFjbTRnZG1WeWRHbGpZV3hDY21GdVkyaFFZWEp6WlZSeVpXVTdYRzRnSUgxY2JseHVJQ0J6ZEdGMGFXTWdabkp2YlVSbGNIUm9RVzVrVm1WeWRHbGpZV3hDY21GdVkyaFFiM05wZEdsdmJpaERiR0Z6Y3l3Z1pHVndkR2dzSUhabGNuUnBZMkZzUW5KaGJtTm9VRzl6YVhScGIyNHBJSHRjYmlBZ0lDQmpiMjV6ZENCc2FXNWxjeUE5SUd4cGJtVnpSbkp2YlVSbGNIUm9LR1JsY0hSb0tTeGNiaUFnSUNBZ0lDQWdJQ0JoY21keklEMGdXMjUxYkd3c0lHeHBibVZ6TENCMlpYSjBhV05oYkVKeVlXNWphRkJ2YzJsMGFXOXVYU3hjYmlBZ0lDQWdJQ0FnSUNCMlpYSjBhV05oYkVKeVlXNWphRkJoY25ObFZISmxaU0E5SUc1bGR5QW9SblZ1WTNScGIyNHVjSEp2ZEc5MGVYQmxMbUpwYm1RdVlYQndiSGtvUTJ4aGMzTXNJR0Z5WjNNcEtUc2dJQzh2TDF4dVhHNGdJQ0FnY21WMGRYSnVJSFpsY25ScFkyRnNRbkpoYm1Ob1VHRnljMlZVY21WbE8xeHVJQ0I5WEc1Y2JpQWdjM1JoZEdsaklHWnliMjFUZEhKcGJtZEJibVJXWlhKMGFXTmhiRUp5WVc1amFGQnZjMmwwYVc5dUtFTnNZWE56TENCemRISnBibWNzSUhabGNuUnBZMkZzUW5KaGJtTm9VRzl6YVhScGIyNHBJSHRjYmlBZ0lDQnBaaUFvZG1WeWRHbGpZV3hDY21GdVkyaFFiM05wZEdsdmJpQTlQVDBnZFc1a1pXWnBibVZrS1NCN1hHNGdJQ0FnSUNCMlpYSjBhV05oYkVKeVlXNWphRkJ2YzJsMGFXOXVJRDBnYzNSeWFXNW5PeUFnTHk4dlhHNGdJQ0FnSUNCemRISnBibWNnUFNCRGJHRnpjenNnTHk4dlhHNGdJQ0FnSUNCRGJHRnpjeUE5SUZCaGNuTmxWSEpsWlRzZ0lDOHZMMXh1SUNBZ0lIMWNiaUFnSUNCY2JpQWdJQ0JqYjI1emRDQnNhVzVsSUQwZ2MzUnlhVzVuTENBdkx5OWNiaUFnSUNBZ0lDQWdJQ0JzYVc1bGN5QTlJRnRzYVc1bFhTeGNiaUFnSUNBZ0lDQWdJQ0JoY21keklEMGdXMjUxYkd3c0lHeHBibVZ6TENCMlpYSjBhV05oYkVKeVlXNWphRkJ2YzJsMGFXOXVYU3hjYmlBZ0lDQWdJQ0FnSUNCMlpYSjBhV05oYkVKeVlXNWphRkJoY25ObFZISmxaU0E5SUc1bGR5QW9SblZ1WTNScGIyNHVjSEp2ZEc5MGVYQmxMbUpwYm1RdVlYQndiSGtvUTJ4aGMzTXNJR0Z5WjNNcEtUc2dJQzh2TDF4dVhHNGdJQ0FnY21WMGRYSnVJSFpsY25ScFkyRnNRbkpoYm1Ob1VHRnljMlZVY21WbE8xeHVJQ0I5WEc1OVhHNWNibVoxYm1OMGFXOXVJR3hwYm1WelJuSnZiVVJsY0hSb0tHUmxjSFJvS1NCN1hHNGdJR052Ym5OMElHeHBibVZ6SUQwZ1cxMDdYRzVjYmlBZ2JHVjBJR2x1WkdWNElEMGdNRHRjYmx4dUlDQjNhR2xzWlNBb2FXNWtaWGdnUENCa1pYQjBhQ2tnZTF4dUlDQWdJR3hwYm1WelcybHVaR1Y0S3l0ZElEMGdSVTFRVkZsZlUxUlNTVTVITzF4dUlDQjlYRzVjYmlBZ2NtVjBkWEp1SUd4cGJtVnpPMXh1ZlZ4dUlsMHNJbTVoYldWeklqcGJJa0pCVWw5RFNFRlNRVU5VUlZJaUxDSmphR0Z5WVdOMFpYSnpJaXdpVm1WeWRHbGpZV3hDY21GdVkyaFFZWEp6WlZSeVpXVWlMQ0pzYVc1bGN5SXNJblpsY25ScFkyRnNRbkpoYm1Ob1VHOXphWFJwYjI0aUxDSm5aWFJXWlhKMGFXTmhiRUp5WVc1amFGQnZjMmwwYVc5dUlpd2lZV1JrVEdWbWRFMWhjbWRwYmlJc0lteGxablJOWVhKbmFXNVhhV1IwYUNJc0ltWnliMjFYYVdSMGFDSXNJbmRwWkhSb0lpd2ljM1J5YVc1bklpd2lkbVZ5ZEdsallXeENjbUZ1WTJoUVlYSnpaVlJ5WldVaUxDSm1jbTl0VTNSeWFXNW5RVzVrVm1WeWRHbGpZV3hDY21GdVkyaFFiM05wZEdsdmJpSXNJazFoZEdnaUxDSm1iRzl2Y2lJc0luSnBaMmgwVFdGeVoybHVWMmxrZEdnaUxDSmhaR1JTYVdkb2RFMWhjbWRwYmlJc0ltWnliMjFFWlhCMGFFRnVaRlpsY25ScFkyRnNRbkpoYm1Ob1VHOXphWFJwYjI0aUxDSkRiR0Z6Y3lJc0ltUmxjSFJvSWl3aWJHbHVaWE5HY205dFJHVndkR2dpTENKaGNtZHpJaXdpUm5WdVkzUnBiMjRpTENKd2NtOTBiM1I1Y0dVaUxDSmlhVzVrSWl3aVlYQndiSGtpTENKMWJtUmxabWx1WldRaUxDSlFZWEp6WlZSeVpXVWlMQ0pzYVc1bElpd2lhVzVrWlhnaUxDSkZUVkJVV1Y5VFZGSkpUa2NpWFN3aWJXRndjR2x1WjNNaU9pSkJRVUZCTEVOQlFWa3NWMEZCUVN4RFFVRkRPenM3UlR0M1FqdEJRVVZqTEVkQlFWY3NRMEZCV0N4VlFVRlhPMEZCUldoQ0xFZEJRV01zUTBGQlpDeFZRVUZqTzBGQlJWQXNSMEZCWXl4RFFVRmtMRlZCUVdNN096czdPenM3T3pzN096czdPenM0UkR0elF6czJSRHRwUlRzN096dDNSVHRuUlRzN096czdNRUk3T3pzN096czdPenM3VXpzN096czdPenRMT3pzN096czdPenM3T3pzN08wMDdlVVE3T3pzN096czdPenM3T3pzN096dDFRanM3U3pzN096czdkME03T3pzN096c3lRanM3T3pzN096czdjVVk3T3pzN096czdPenM3T3p0dFJUczdhVVE3T3pzN08wRkJSVE5ETEVkQlFVc3NRMEZCUjBFc1lVRkJZU3hIUVVGTFF5eFZRVUZWTEZsQlFUVkNSQ3hoUVVGaE8wbEJSVUZGTEhWQ1FVRjFRaXhwUWtGQk4wSXNVVUZCVVR0cFJEczdZVUZCUmtFc2RVSkJRWFZDTEVOQlF6bENReXhMUVVGTExFVkJRVVZETEhOQ1FVRnpRanR6UkRzN2EwTkJRMnBEUkN4TFFVRkxMRU5EV21Zc1EwUlphVUk3WTBGRlVrTXNjMEpCUVhOQ0xFZEJRVWRCTEhOQ1FVRnpRaXhEUVVGRE96czdPenRaUVVkMlJFTXNSMEZCZVVJc1JVRkJla0pCTEVOQlFYbENPMjFDUVVGNlFrRXNVVUZCVVN4RFFVRlNRU3g1UWtGQmVVSXNSMEZCUnl4RFFVRkRPMmRDUVVNelFpeE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRSQ3h6UWtGQmMwSTdXVUZEY0VNc1EwRkJRenM3TzFsQlJVUkZMRWRCUVdFc1JVRkJZa0VzUTBGQllUdHRRa0ZCWWtFc1VVRkJVU3hEUVVGU1FTeGhRVUZoTEVOQlFVTkRMR1ZCUVdVc1JVRkJSU3hEUVVGRE8zRkRRVmhpVEN4MVFrRkJkVUlzWVVGWmJFTkpMRU5CUVdFc1owSkJRVzVDTEVsQlFVc3NZVUZCWlVNc1pVRkJaU3hEUTNSQ2RrTXNRMFJ6UW5sRE8yZENRVVZ5UXl4SlFVRkpMRU5CUVVOSUxITkNRVUZ6UWl4SlFVRkpSeXhsUVVGbExFTkJRVU1zUTBGQlF5eEZRVUZITEVGQlFVZ3NRMEZCUnp0WlFVTnlSQ3hEUVVGRE96czdPMWxCUlUxRExFZEJRVk1zUlVGQlZFRXNRMEZCVXp0dFFrRkJhRUlzVVVGQlVTeERRVUZFUVN4VFFVRlRMRU5CUVVORExFdEJRVXNzUlVGQlJTeERRVUZETzJkQ1FVTjJRaXhIUVVGTExFTkJRVU5ETEUxQlFVMHNSMEZCUjFZc1lVRkJZU3hGUVVOMFFra3NjMEpCUVhOQ0xFZEJRVWNzUTBGQlF5eEZRVU14UWs4c2RVSkJRWFZDTEVkQlFVZFVMSFZDUVVGMVFpeERRVUZEVlN4dFEwRkJiVU1zUTBGQlExWXNkVUpCUVhWQ0xFVkJRVVZSTEUxQlFVMHNSVUZCUlU0c2MwSkJRWE5DTEVkQlF6ZEpSeXhsUVVGbExFZEJRVWROTEVsQlFVa3NRMEZCUTBNc1MwRkJTeXhEUVVGRFRDeExRVUZMTEVkQlFVTXNRMEZCUXl4SFFVTndRMDBzWjBKQlFXZENMRWRCUVVkT0xFdEJRVXNzUjBGQlIwWXNaVUZCWlN4SFFVRkhMRU5CUVVNN1owSkJSWEJFU1N4MVFrRkJkVUlzUTBGQlEwd3NZVUZCWVN4RFFVRkRReXhsUVVGbExFTkJRVU1zUTBGQlF6dG5Ra0ZEZGtSSkxIVkNRVUYxUWl4RFFVRkRTeXhqUVVGakxFTkJRVU5FTEdkQ1FVRm5RaXhEUVVGRExFTkJRVU03WjBKQlJYcEVMRTFCUVUwc1EwRkJRMG9zZFVKQlFYVkNPMWxCUTJoRExFTkJRVU03T3p0WlFVVk5UU3hIUVVGclF5eEZRVUZzUTBFc1EwRkJhME03YlVKQlFYcERMRkZCUVZFc1EwRkJSRUVzYTBOQlFXdERMRU5CUVVORExFdEJRVXNzUlVGQlJVTXNTMEZCU3l4RlFVRkZaaXh6UWtGQmMwSXNSVUZCUlN4RFFVRkRPMmRDUVVNdlJTeEhRVUZMTEVOQlFVTkVMRXRCUVVzc1IwRkJSMmxDTEdOQlFXTXNRMEZCUTBRc1MwRkJTeXhIUVVNMVFrVXNTVUZCU1N4SFFVRkhMRU5CUVVNN2IwSkJRVUVzU1VGQlNUdHZRa0ZCUld4Q0xFdEJRVXM3YjBKQlFVVkRMSE5DUVVGelFqdG5Ra0ZCUVN4RFFVRkRMRVZCUXpWRFR5eDFRa0ZCZFVJc1IwRkJSeXhIUVVGSExFVkJRVVZYTEZGQlFWRXNRMEZCUTBNc1UwRkJVeXhEUVVGRFF5eEpRVUZKTEVOQlFVTkRMRXRCUVVzc1EwRkJRMUFzUzBGQlN5eEZRVUZGUnl4SlFVRkpMRWxCUVVzc1JVRkJSeXhCUVVGSUxFTkJRVWM3WjBKQlJYUkdMRTFCUVUwc1EwRkJRMVlzZFVKQlFYVkNPMWxCUTJoRExFTkJRVU03T3p0WlFVVk5ReXhIUVVGdFF5eEZRVUZ1UTBFc1EwRkJiVU03YlVKQlFURkRMRkZCUVZFc1EwRkJSRUVzYlVOQlFXMURMRU5CUVVOTkxFdEJRVXNzUlVGQlJWSXNUVUZCVFN4RlFVRkZUaXh6UWtGQmMwSXNSVUZCUlN4RFFVRkRPMmRDUVVOcVJpeEZRVUZGTEVWQlFVVkJMSE5DUVVGelFpeExRVUZMYzBJc1UwRkJVeXhGUVVGRkxFTkJRVU03YjBKQlEzcERkRUlzYzBKQlFYTkNMRWRCUVVkTkxFMUJRVTBzUTBGQlF5eERRVUZGTEVWQlFVY3NRVUZCU0N4RFFVRkhPMjlDUVVOeVEwRXNUVUZCVFN4SFFVRkhVU3hMUVVGTExFTkJRVU1zUTBGQlF5eEZRVUZITEVGQlFVZ3NRMEZCUnp0dlFrRkRia0pCTEV0QlFVc3NSMEZCUjFNc1ZVRkJVeXhSUVVGQkxFTkJRVU1zUTBGQlJTeEZRVUZITEVGQlFVZ3NRMEZCUnp0blFrRkRla0lzUTBGQlF6dG5Ra0ZGUkN4SFFVRkxMRU5CUVVORExFbEJRVWtzUjBGQlIyeENMRTFCUVUwc1JVRkRZbEFzUzBGQlN5eEhRVUZITEVOQlFVTjVRanR2UWtGQlFVRXNTVUZCU1R0blFrRkJRU3hEUVVGRExFVkJRMlJRTEVsQlFVa3NSMEZCUnl4RFFVRkRPMjlDUVVGQkxFbEJRVWs3YjBKQlFVVnNRaXhMUVVGTE8yOUNRVUZGUXl4elFrRkJjMEk3WjBKQlFVRXNRMEZCUXl4RlFVTTFRMDhzZFVKQlFYVkNMRWRCUVVjc1IwRkJSeXhGUVVGRlZ5eFJRVUZSTEVOQlFVTkRMRk5CUVZNc1EwRkJRME1zU1VGQlNTeERRVUZEUXl4TFFVRkxMRU5CUVVOUUxFdEJRVXNzUlVGQlJVY3NTVUZCU1N4SlFVRkxMRVZCUVVjc1FVRkJTQ3hEUVVGSE8yZENRVVYwUml4TlFVRk5MRU5CUVVOV0xIVkNRVUYxUWp0WlFVTm9ReXhEUVVGRE96dE5PenRGUVc1RWEwUm5RaXhWUVVGVE8ydENRVUY2UTNwQ0xIVkNRVUYxUWl4Qk8xTkJjMFJ1UTJ0Q0xHTkJRV01zUTBGQlEwUXNTMEZCU3l4RlFVRkZMRU5CUVVNN1NVRkRPVUlzUjBGQlN5eERRVUZEYUVJc1MwRkJTeXhIUVVGSExFTkJRVU1zUTBGQlF6dEpRVVZvUWl4SFFVRkhMRU5CUVVNd1FpeExRVUZMTEVkQlFVY3NRMEZCUXp0VlFVVk9RU3hMUVVGTExFZEJRVWRXTEV0QlFVc3NRMEZCUlN4RFFVRkRPMUZCUTNKQ2FFSXNTMEZCU3l4RFFVRkRNRUlzUzBGQlN5eE5RVUZOUXl4VlFVRlpMR0ZCUVVFc1EwRkJRenRKUVVOb1F5eERRVUZETzBsQlJVUXNUVUZCVFN4RFFVRkRNMElzUzBGQlN6dEJRVU5rTEVOQlFVTWlmUT09IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUgZnJvbSBcIi4vdmVydGljYWxCcmFuY2hcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZU5hbWVQYXJzZVRyZWUgZXh0ZW5kcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tTm9uVGVybWluYWxOb2RlQW5kVG9rZW5zKG5vblRlcm1pbmFsTm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICB0b2tlbkluZGV4ZXMgPSB0b2tlbkluZGV4ZXNGcm9tTm9uVGVybWluYWxOb2RlQW5kVG9rZW5zKG5vblRlcm1pbmFsTm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBzdHJpbmcgPSBgJHtydWxlTmFtZX0ke3Rva2VuSW5kZXhlc31gLFxuICAgICAgICAgIHN0cmluZ0xlbmd0aCA9IHN0cmluZy5sZW5ndGgsXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWVXaWR0aCA9IHN0cmluZ0xlbmd0aCwgLy8vXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tV2lkdGgodmVydGljYWxCcmFuY2hQYXJzZVRyZWVXaWR0aCksXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKSxcbiAgICAgICAgICBydWxlTmFtZVBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21TdHJpbmdBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKFJ1bGVOYW1lUGFyc2VUcmVlLCBzdHJpbmcsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pO1xuXG4gICAgcnVsZU5hbWVQYXJzZVRyZWUuYXBwZW5kVG9Ub3AodmVydGljYWxCcmFuY2hQYXJzZVRyZWUpO1xuXG4gICAgcmV0dXJuIHJ1bGVOYW1lUGFyc2VUcmVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRva2VuSW5kZXhlc0Zyb21Ob25UZXJtaW5hbE5vZGVBbmRUb2tlbnMobm9uVGVybWluYWxOb2RlLCB0b2tlbnMpIHtcbiAgY29uc3QgZmlyc3RTaWduaWZpY2FudFRva2VuID0gbm9uVGVybWluYWxOb2RlLmdldEZpcnN0U2lnbmlmaWNhbnRUb2tlbigpLFxuICAgICAgICBsYXN0U2lnbmlmaWNhbnRUb2tlbiA9IG5vblRlcm1pbmFsTm9kZS5nZXRMYXN0U2lnbmlmaWNhbnRUb2tlbigpLFxuICAgICAgICBmaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleCA9IHRva2Vucy5pbmRleE9mKGZpcnN0U2lnbmlmaWNhbnRUb2tlbiksXG4gICAgICAgIGxhc3RTaWduaWZpY2FudFRva2VuSW5kZXggPSB0b2tlbnMuaW5kZXhPZihsYXN0U2lnbmlmaWNhbnRUb2tlbiksXG4gICAgICAgIHRva2VuSW5kZXhlcyA9IChmaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleCAhPT0gbGFzdFNpZ25pZmljYW50VG9rZW5JbmRleCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgYCgke2ZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4fS0ke2xhc3RTaWduaWZpY2FudFRva2VuSW5kZXh9KWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBgKCR7Zmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXh9KWA7XG5cbiAgcmV0dXJuIHRva2VuSW5kZXhlcztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY2hhcmFjdGVycyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IFBhcnNlVHJlZSBmcm9tIFwiLi4vcGFyc2VUcmVlXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuY29uc3QgeyBEQVNIX0NIQVJBQ1RFUiB9ID0gY2hhcmFjdGVycztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZSBleHRlbmRzIFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tV2lkdGgod2lkdGgpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBzdHJpbmdGcm9tQ2hhcmFjdGVyc1dpZHRoKHdpZHRoLCBEQVNIX0NIQVJBQ1RFUiksXG4gICAgICAgICAgbGluZSA9IHN0cmluZywgLy8vXG4gICAgICAgICAgbGluZXMgPSBbbGluZV0sXG4gICAgICAgICAgaG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZSA9IG5ldyBIb3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlKGxpbmVzKTtcblxuICAgIHJldHVybiBob3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN0cmluZ0Zyb21DaGFyYWN0ZXJzV2lkdGgoY2hhcmFjdGVyc1dpZHRoLCBjaGFyYWN0ZXIpIHtcbiAgbGV0IHN0cmluZyA9IEVNUFRZX1NUUklORztcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgY2hhcmFjdGVyc1dpZHRoOyBpbmRleCsrKSB7XG4gICAgc3RyaW5nICs9IGNoYXJhY3RlcjtcbiAgfVxuXG4gIHJldHVybiBzdHJpbmc7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuaW1wb3J0IEhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUgZnJvbSBcIi4vaG9yaXpvbnRhbEJyYW5jaFwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hpbGROb2Rlc1BhcnNlVHJlZSBleHRlbmRzIFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIHtcbiAgc3RhdGljIGZyb21DaGlsZE5vZGVzQW5kVG9rZW5zKGNoaWxkTm9kZXMsIHRva2Vucykge1xuICAgIGxldCBjaGlsZE5vZGVzUGFyc2VUcmVlO1xuXG4gICAgY29uc3QgY2hpbGROb2RlUGFyc2VUcmVlcyA9IGNoaWxkTm9kZXMucmVkdWNlKChjaGlsZE5vZGVQYXJzZVRyZWVzLCBjaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZVBhcnNlVHJlZSA9IGNoaWxkTm9kZS5hc1BhcnNlVHJlZSh0b2tlbnMpO1xuXG4gICAgICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzLnB1c2goY2hpbGROb2RlUGFyc2VUcmVlKTtcblxuICAgICAgICAgICAgcmV0dXJuIGNoaWxkTm9kZVBhcnNlVHJlZXM7XG4gICAgICAgICAgfSwgW10pLFxuICAgICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXNMZW5ndGggPSBjaGlsZE5vZGVQYXJzZVRyZWVzLmxlbmd0aDtcblxuICAgIGlmIChjaGlsZE5vZGVQYXJzZVRyZWVzTGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCBmaXJzdENoaWxkTm9kZVBhcnNlVHJlZSA9IGZpcnN0KGNoaWxkTm9kZVBhcnNlVHJlZXMpO1xuXG4gICAgICBjaGlsZE5vZGVzUGFyc2VUcmVlID0gZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWU7ICAvLy9cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGZpcnN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHVuZGVmaW5lZCxcbiAgICAgICAgICBsYXN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IDAsXG4gICAgICAgICAgY2hpbGROb2RlUGFyc2VUcmVlc1dpZHRoID0gMCxcbiAgICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzRGVwdGggPSAwO1xuXG4gICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzLmZvckVhY2goKGNoaWxkTm9kZVBhcnNlVHJlZSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgY2hpbGROb2RlUGFyc2VUcmVlV2lkdGggPSBjaGlsZE5vZGVQYXJzZVRyZWUuZ2V0V2lkdGgoKSxcbiAgICAgICAgICAgICAgY2hpbGROb2RlUGFyc2VUcmVlRGVwdGggPSBjaGlsZE5vZGVQYXJzZVRyZWUuZ2V0RGVwdGgoKTtcblxuICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgICBjb25zdCBmaXJzdENoaWxkTm9kZVBhcnNlVHJlZSA9IGNoaWxkTm9kZVBhcnNlVHJlZSxcbiAgICAgICAgICAgICAgICBmaXJzdENoaWxkTm9kZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBmaXJzdENoaWxkTm9kZVBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCk7XG5cbiAgICAgICAgICBmaXJzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBmaXJzdENoaWxkTm9kZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb247XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5kZXggPT09IGNoaWxkTm9kZVBhcnNlVHJlZXNMZW5ndGggLSAxKSB7XG4gICAgICAgICAgY29uc3QgbGFzdENoaWxkTm9kZVBhcnNlVHJlZSA9IGNoaWxkTm9kZVBhcnNlVHJlZSxcbiAgICAgICAgICAgICAgICBsYXN0Q2hpbGROb2RlUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IGxhc3RDaGlsZE5vZGVQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpO1xuXG4gICAgICAgICAgbGFzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24gKz0gbGFzdENoaWxkTm9kZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb247XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5kZXggPCBjaGlsZE5vZGVQYXJzZVRyZWVzTGVuZ3RoIC0gMSkge1xuICAgICAgICAgIGxhc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uICs9IGNoaWxkTm9kZVBhcnNlVHJlZVdpZHRoO1xuICAgICAgICAgIGxhc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uICs9IDE7XG5cbiAgICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzV2lkdGggKz0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXNXaWR0aCArPSBjaGlsZE5vZGVQYXJzZVRyZWVXaWR0aDtcbiAgICAgICAgY2hpbGROb2RlUGFyc2VUcmVlc0RlcHRoID0gTWF0aC5tYXgoY2hpbGROb2RlUGFyc2VUcmVlc0RlcHRoLCBjaGlsZE5vZGVQYXJzZVRyZWVEZXB0aCk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgd2lkdGggPSBsYXN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiAtIGZpcnN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiArIDEsXG4gICAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21XaWR0aCh3aWR0aCksXG4gICAgICAgICAgICBob3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlID0gSG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZS5mcm9tV2lkdGgod2lkdGgpLFxuICAgICAgICAgICAgbGVmdE1hcmdpbldpZHRoID0gZmlyc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uLFxuICAgICAgICAgICAgcmlnaHRNYXJnaW5XaWR0aCA9IGNoaWxkTm9kZVBhcnNlVHJlZXNXaWR0aCAtIHdpZHRoIC0gbGVmdE1hcmdpbldpZHRoO1xuXG4gICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5hZGRMZWZ0TWFyZ2luKGxlZnRNYXJnaW5XaWR0aCk7XG4gICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5hZGRSaWdodE1hcmdpbihyaWdodE1hcmdpbldpZHRoKTtcbiAgICAgIGhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuICAgICAgaG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZS5hZGRSaWdodE1hcmdpbihyaWdodE1hcmdpbldpZHRoKTtcblxuICAgICAgY29uc3QgdmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKTtcblxuICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21EZXB0aEFuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oQ2hpbGROb2Rlc1BhcnNlVHJlZSwgY2hpbGROb2RlUGFyc2VUcmVlc0RlcHRoLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgICAgY2hpbGROb2RlUGFyc2VUcmVlcy5mb3JFYWNoKChjaGlsZE5vZGVQYXJzZVRyZWUsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZVBhcnNlVHJlZURlcHRoID0gY2hpbGROb2RlUGFyc2VUcmVlLmdldERlcHRoKCksXG4gICAgICAgICAgICAgIGNsb25lZENoaWxkTm9kZVBhcnNlVHJlZSA9IGNoaWxkTm9kZVBhcnNlVHJlZS5jbG9uZSgpO1xuXG4gICAgICAgIGlmIChpbmRleCA8IGNoaWxkTm9kZVBhcnNlVHJlZXNMZW5ndGggLSAxKSB7XG4gICAgICAgICAgY29uc3QgcmlnaHRNYXJnaW5XaWR0aCA9IDE7XG5cbiAgICAgICAgICBjbG9uZWRDaGlsZE5vZGVQYXJzZVRyZWUuYWRkUmlnaHRNYXJnaW4ocmlnaHRNYXJnaW5XaWR0aCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hpbGROb2RlUGFyc2VUcmVlRGVwdGggPCBjaGlsZE5vZGVQYXJzZVRyZWVzRGVwdGgpIHtcbiAgICAgICAgICBjb25zdCBib3R0b21NYXJnaW5EZXB0aCA9IGNoaWxkTm9kZVBhcnNlVHJlZXNEZXB0aCAtIGNoaWxkTm9kZVBhcnNlVHJlZURlcHRoO1xuXG4gICAgICAgICAgY2xvbmVkQ2hpbGROb2RlUGFyc2VUcmVlLmFkZEJvdHRvbU1hcmdpbihib3R0b21NYXJnaW5EZXB0aCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZE5vZGVzUGFyc2VUcmVlLmFwcGVuZFRvUmlnaHQoY2xvbmVkQ2hpbGROb2RlUGFyc2VUcmVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBjaGlsZE5vZGVzUGFyc2VUcmVlLmFwcGVuZFRvVG9wKGhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUpO1xuICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZS5hcHBlbmRUb1RvcCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSk7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBjaGlsZE5vZGVzUGFyc2VUcmVlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlTmFtZVBhcnNlVHJlZSBmcm9tIFwiLi9ydWxlTmFtZVwiO1xuaW1wb3J0IENoaWxkTm9kZXNQYXJzZVRyZWUgZnJvbSBcIi4vY2hpbGROb2Rlc1wiO1xuaW1wb3J0IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuL3ZlcnRpY2FsQnJhbmNoXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZSBleHRlbmRzIFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIHtcbiAgc3RhdGljIGZyb21Ob25UZXJtaW5hbE5vZGVBbmRUb2tlbnMobm9uVGVybWluYWxOb2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBydWxlTmFtZVBhcnNlVHJlZSA9IFJ1bGVOYW1lUGFyc2VUcmVlLmZyb21Ob25UZXJtaW5hbE5vZGVBbmRUb2tlbnMobm9uVGVybWluYWxOb2RlLCB0b2tlbnMpLFxuICAgICAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUgPSBDaGlsZE5vZGVzUGFyc2VUcmVlLmZyb21DaGlsZE5vZGVzQW5kVG9rZW5zKGNoaWxkTm9kZXMsIHRva2Vucyk7XG4gICAgXG4gICAgbGV0IHJ1bGVOYW1lUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHJ1bGVOYW1lUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKTtcbiAgICBcbiAgICBjb25zdCBjaGlsZE5vZGVzUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IGNoaWxkTm9kZXNQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb25zRGlmZmVyZW5jZSA9IHJ1bGVOYW1lUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbiAtIGNoaWxkTm9kZXNQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uO1xuICAgIFxuICAgIGxldCBsZWZ0TWFyZ2luV2lkdGggPSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoZmFsc2UpIHtcbiAgICAgIC8vL1xuICAgIH0gZWxzZSBpZiAodmVydGljYWxCcmFuY2hQb3NpdGlvbnNEaWZmZXJlbmNlIDwgMCkge1xuICAgICAgbGVmdE1hcmdpbldpZHRoID0gLXZlcnRpY2FsQnJhbmNoUG9zaXRpb25zRGlmZmVyZW5jZTtcblxuICAgICAgcnVsZU5hbWVQYXJzZVRyZWUuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuICAgIH0gZWxzZSBpZiAodmVydGljYWxCcmFuY2hQb3NpdGlvbnNEaWZmZXJlbmNlID4gMCkge1xuICAgICAgbGVmdE1hcmdpbldpZHRoID0gK3ZlcnRpY2FsQnJhbmNoUG9zaXRpb25zRGlmZmVyZW5jZTtcblxuICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZS5hZGRMZWZ0TWFyZ2luKGxlZnRNYXJnaW5XaWR0aCk7XG4gICAgfVxuXG4gICAgY29uc3QgcnVsZU5hbWVQYXJzZVRyZWVXaWR0aCA9IHJ1bGVOYW1lUGFyc2VUcmVlLmdldFdpZHRoKCksXG4gICAgICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZVdpZHRoID0gY2hpbGROb2Rlc1BhcnNlVHJlZS5nZXRXaWR0aCgpLFxuICAgICAgICAgIHdpZHRoc0RpZmZlcmVuY2UgPSBydWxlTmFtZVBhcnNlVHJlZVdpZHRoIC0gY2hpbGROb2Rlc1BhcnNlVHJlZVdpZHRoO1xuICAgIFxuICAgIGxldCByaWdodE1hcmdpbldpZHRoID0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGZhbHNlKSB7XG4gICAgICAvLy9cbiAgICB9IGVsc2UgaWYgKHdpZHRoc0RpZmZlcmVuY2UgPCAwKSB7XG4gICAgICByaWdodE1hcmdpbldpZHRoID0gLXdpZHRoc0RpZmZlcmVuY2U7XG4gICAgICBcbiAgICAgIHJ1bGVOYW1lUGFyc2VUcmVlLmFkZFJpZ2h0TWFyZ2luKHJpZ2h0TWFyZ2luV2lkdGgpO1xuICAgIH0gZWxzZSBpZiAod2lkdGhzRGlmZmVyZW5jZSA+IDApIHtcbiAgICAgIHJpZ2h0TWFyZ2luV2lkdGggPSArd2lkdGhzRGlmZmVyZW5jZTtcblxuICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZS5hZGRSaWdodE1hcmdpbihyaWdodE1hcmdpbldpZHRoKTtcbiAgICB9XG5cbiAgICBydWxlTmFtZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBydWxlTmFtZVBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCk7XG5cbiAgICBjb25zdCBydWxlTmFtZVBhcnNlVHJlZURlcHRoID0gcnVsZU5hbWVQYXJzZVRyZWUuZ2V0RGVwdGgoKSxcbiAgICAgICAgICBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWVEZXB0aCA9IHJ1bGVOYW1lUGFyc2VUcmVlRGVwdGgsIC8vL1xuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBydWxlTmFtZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24sIC8vL1xuICAgICAgICAgIG5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21EZXB0aEFuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oTm9uVGVybWluYWxOb2RlUGFyc2VUcmVlLCBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWVEZXB0aCwgdmVydGljYWxCcmFuY2hQb3NpdGlvbik7XG5cbiAgICBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWUuYXBwZW5kVG9SaWdodChydWxlTmFtZVBhcnNlVHJlZSk7XG4gICAgbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlLmFwcGVuZFRvQm90dG9tKGNoaWxkTm9kZXNQYXJzZVRyZWUpO1xuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlUGFyc2VUcmVlIGZyb20gXCIuLi9wYXJzZVRyZWUvbm9uVGVybWluYWxOb2RlXCI7XG5cbmltcG9ydCB7IGZvcndhcmRzU29tZSwgYmFja3dhcmRzU29tZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9uVGVybWluYWxOb2RlIHtcbiAgY29uc3RydWN0b3IocnVsZU5hbWUsIHBhcmVudE5vZGUsIGNoaWxkTm9kZXMpIHtcbiAgICB0aGlzLnJ1bGVOYW1lID0gcnVsZU5hbWU7XG4gICAgdGhpcy5wYXJlbnROb2RlID0gcGFyZW50Tm9kZTtcbiAgICB0aGlzLmNoaWxkTm9kZXMgPSBjaGlsZE5vZGVzO1xuICB9XG5cbiAgaXNUZXJtaW5hbE5vZGUoKSB7XG4gICAgY29uc3QgdGVybWluYWxOb2RlID0gZmFsc2U7XG5cbiAgICByZXR1cm4gdGVybWluYWxOb2RlO1xuICB9XG5cbiAgaXNOb25UZXJtaW5hbE5vZGUoKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gdHJ1ZTtcblxuICAgIHJldHVybiBub25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBnZXRSdWxlTmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5ydWxlTmFtZTtcbiAgfVxuXG4gIGdldFBhcmVudE5vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50Tm9kZTtcbiAgfVxuXG4gIGdldENoaWxkTm9kZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hpbGROb2RlcztcbiAgfVxuXG4gIGdldEZpcnN0U2lnbmlmaWNhbnRUb2tlbigpIHtcbiAgICBsZXQgZmlyc3RTaWduaWZpY2FudFRva2VuID0gbnVsbDtcblxuICAgIGZvcndhcmRzU29tZSh0aGlzLmNoaWxkTm9kZXMsIChjaGlsZE5vZGUpID0+IHtcbiAgICAgIGZpcnN0U2lnbmlmaWNhbnRUb2tlbiA9IGNoaWxkTm9kZS5nZXRGaXJzdFNpZ25pZmljYW50VG9rZW4oKTtcblxuICAgICAgaWYgKGZpcnN0U2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBmaXJzdFNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBnZXRMYXN0U2lnbmlmaWNhbnRUb2tlbigpIHtcbiAgICBsZXQgbGFzdFNpZ25pZmljYW50VG9rZW4gPSBudWxsO1xuXG4gICAgYmFja3dhcmRzU29tZSh0aGlzLmNoaWxkTm9kZXMsIChjaGlsZE5vZGUpID0+IHtcbiAgICAgIGxhc3RTaWduaWZpY2FudFRva2VuID0gY2hpbGROb2RlLmdldExhc3RTaWduaWZpY2FudFRva2VuKCk7XG5cbiAgICAgIGlmIChsYXN0U2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBsYXN0U2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuICBcbiAgc2V0UnVsZU5hbWUocnVsZU5hbWUpIHtcbiAgICB0aGlzLnJ1bGVOYW1lID0gcnVsZU5hbWU7XG4gIH1cblxuICBzZXRQYXJlbnROb2RlKHBhcmVudE5vZGUpIHtcbiAgICB0aGlzLnBhcmVudE5vZGUgPSBwYXJlbnROb2RlO1xuICB9XG5cbiAgc2V0Q2hpbGROb2RlcyhjaGlsZE5vZGVzKSB7XG4gICAgdGhpcy5jaGlsZE5vZGVzID0gY2hpbGROb2RlcztcbiAgfVxuICBcbiAgYXNQYXJzZVRyZWUodG9rZW5zKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gdGhpcywgIC8vL1xuICAgICAgICAgIG5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IE5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZS5mcm9tTm9uVGVybWluYWxOb2RlQW5kVG9rZW5zKG5vblRlcm1pbmFsTm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBwYXJzZVRyZWUgPSBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWU7ICAvLy9cblxuICAgIHJldHVybiBwYXJzZVRyZWU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhDbGFzcywgcnVsZU5hbWUsIGNoaWxkTm9kZXMpIHtcbiAgICBpZiAoY2hpbGROb2RlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjaGlsZE5vZGVzID0gcnVsZU5hbWU7ICAvLy9cbiAgICAgIHJ1bGVOYW1lID0gQ2xhc3M7IC8vL1xuICAgICAgQ2xhc3MgPSBOb25UZXJtaW5hbE5vZGU7ICAvLy9cbiAgICB9XG5cbiAgICBjb25zdCBjaGlsZE5vZGVzTGVuZ3RoID0gY2hpbGROb2Rlcy5sZW5ndGg7XG5cbiAgICBpZiAoY2hpbGROb2Rlc0xlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGVyZSBhcmUgbm8gY2hpbGQgbm9kZXMgYXQgcnVsZSAnJHtydWxlTmFtZX0nLmApO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBwYXJlbnROb2RlID0gdW5kZWZpbmVkLCAvLy9cbiAgICAgICAgICBub25UZXJtaW5hbE5vZGUgPSBuZXcgQ2xhc3MocnVsZU5hbWUsIHBhcmVudE5vZGUsIGNoaWxkTm9kZXMpO1xuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsTm9kZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IGZpcnN0IH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOYW1lQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdldE5hbWUoKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIGZpcnN0Q2hpbGROb2RlID0gZmlyc3QoY2hpbGROb2RlcyksXG4gICAgICAgICAgdGVybWluYWxOb2RlID0gZmlyc3RDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICB0ZXJtaW5hbE5vZGVDb250ZW50ID0gdGVybWluYWxOb2RlLmdldENvbnRlbnQoKSxcbiAgICAgICAgICBuYW1lID0gdGVybWluYWxOb2RlQ29udGVudDsgLy8vXG4gICAgXG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoTmFtZUJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNQYXJ0UnVsZU5hbWVQYXJ0V2l0aExvb2tBaGVhZChwYXJ0KSB7XG4gIGxldCBwYXJ0UnVsZU5hbWVQYXJ0V2l0aExvb2tBaGVhZCA9IGZhbHNlO1xuXG4gIGNvbnN0IHBhcnRSdWxlTmFtZVBhcnQgPSBpc1BhcnRSdWxlTmFtZVBhcnQocGFydCk7XG5cbiAgaWYgKHBhcnRSdWxlTmFtZVBhcnQpIHtcbiAgICBjb25zdCBydWxlTmFtZVBhcnQgPSBwYXJ0LCAgLy8vXG4gICAgICAgICAgbG9va0FoZWFkID0gcnVsZU5hbWVQYXJ0LmlzTG9va0FoZWFkKCk7XG5cbiAgICBpZiAobG9va0FoZWFkKSB7XG4gICAgICBwYXJ0UnVsZU5hbWVQYXJ0V2l0aExvb2tBaGVhZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhcnRSdWxlTmFtZVBhcnRXaXRoTG9va0FoZWFkO1xufVxuXG5mdW5jdGlvbiBpc1BhcnRSdWxlTmFtZVBhcnQocGFydCkge1xuICBsZXQgcGFydFJ1bGVOYW1lUGFydCA9IGZhbHNlO1xuXG4gIGNvbnN0IHBhcnRUZXJtaW5hbFBhcnQgPSBwYXJ0LmlzVGVybWluYWxQYXJ0KCksXG4gICAgICAgIHBhcnROb25UZXJtaW5hbFBhcnQgPSAhcGFydFRlcm1pbmFsUGFydDtcblxuICBpZiAocGFydE5vblRlcm1pbmFsUGFydCkge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsUGFydCA9IHBhcnQsXG4gICAgICAgICAgbm9uVGVybWluYWxQYXJ0UnVsZU5hbWVQYXJ0ID0gbm9uVGVybWluYWxQYXJ0LmlzUnVsZU5hbWVQYXJ0KCk7XG5cbiAgICBwYXJ0UnVsZU5hbWVQYXJ0ID0gbm9uVGVybWluYWxQYXJ0UnVsZU5hbWVQYXJ0OyAvLy9cbiAgfVxuXG4gIHJldHVybiBwYXJ0UnVsZU5hbWVQYXJ0O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBwdXNoIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgaXNQYXJ0UnVsZU5hbWVQYXJ0V2l0aExvb2tBaGVhZCB9IGZyb20gXCIuL3BhcnRcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUGFydHMocGFydHMsIG5vZGVzLCBpbmRleCwgc3RhdGUsIGNhbGxiYWNrKSB7XG4gIGxldCBwYXJzZWQ7XG5cbiAgY29uc3QgcGFydHNMZW5ndGggPSBwYXJ0cy5sZW5ndGg7XG5cbiAgaWYgKGluZGV4ID09PSBwYXJ0c0xlbmd0aCkge1xuICAgIHBhcnNlZCA9IChjYWxsYmFjayAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCkgOlxuICAgICAgICAgICAgICAgICAgdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBwYXJ0ID0gcGFydHNbaW5kZXhdO1xuXG4gICAgcGFyc2VkID0gcGFyc2VQYXJ0T2ZQYXJ0cyhwYXJ0LCBwYXJ0cywgbm9kZXMsIGluZGV4LCBzdGF0ZSwgY2FsbGJhY2spO1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn1cblxuZnVuY3Rpb24gcGFyc2VQYXJ0T2ZQYXJ0cyhwYXJ0LCBwYXJ0cywgbm9kZXMsIGluZGV4LCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgbGV0IHBhcnNlZDtcblxuICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICBjb25zdCBwYXJ0c05vZGVzID0gW107XG5cbiAgICBpbmRleCsrO1xuXG4gICAgcGFyc2VkID0gcGFydC5wYXJzZShub2Rlcywgc3RhdGUsICgpID0+IHBhcnNlUGFydHMocGFydHMsIHBhcnRzTm9kZXMsIGluZGV4LCBzdGF0ZSwgY2FsbGJhY2spKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIHB1c2gobm9kZXMsIHBhcnRzTm9kZXMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBwYXJ0UnVsZU5hbWVQYXJ0V2l0aExvb2tBaGVhZCA9IGlzUGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQocGFydCk7XG5cbiAgICBpZiAocGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQpIHtcbiAgICAgIGNvbnN0IHJ1bGVOYW1lUGFydCA9IHBhcnQsIC8vL1xuICAgICAgICAgICAgcGFydHNOb2RlcyA9IFtdO1xuXG4gICAgICBpbmRleCsrO1xuXG4gICAgICBwYXJzZWQgPSBydWxlTmFtZVBhcnQucGFyc2Uobm9kZXMsIHN0YXRlLCAoKSA9PiBwYXJzZVBhcnRzKHBhcnRzLCBwYXJ0c05vZGVzLCBpbmRleCwgc3RhdGUsIGNhbGxiYWNrKSk7XG5cbiAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgcHVzaChub2RlcywgcGFydHNOb2Rlcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjayk7XG5cbiAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgaW5kZXgrKztcblxuICAgICAgICBwYXJzZWQgPSBwYXJzZVBhcnRzKHBhcnRzLCBub2RlcywgaW5kZXgsIHN0YXRlLCBjYWxsYmFjayk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgcGFyc2VQYXJ0cyB9IGZyb20gXCIuL3V0aWxpdGllcy9sb29rQWhlYWRcIjtcbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZmlyc3QsIGFsbEJ1dEZpcnN0IH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcihwYXJ0cykge1xuICAgIHRoaXMucGFydHMgPSBwYXJ0cztcbiAgfVxuXG4gIGdldFBhcnRzKCkge1xuICAgIHJldHVybiB0aGlzLnBhcnRzO1xuICB9XG5cbiAgZ2V0Rmlyc3RQYXJ0KCkge1xuICAgIGNvbnN0IGZpcnN0UGFydCA9IGZpcnN0KHRoaXMucGFydHMpO1xuXG4gICAgcmV0dXJuIGZpcnN0UGFydDtcbiAgfVxuXG4gIGdldFBhcnRzTGVuZ3RoKCkge1xuICAgIGNvbnN0IHBhcnRzTGVuZ3RoID0gdGhpcy5wYXJ0cy5sZW5ndGg7XG5cbiAgICByZXR1cm4gcGFydHNMZW5ndGg7XG4gIH1cblxuICBnZXRBbGxCdXRGaXJzdFBhcnRzKCkge1xuICAgIGNvbnN0IGFsbEJ1dEZpcnN0UGFydHMgPSBhbGxCdXRGaXJzdCh0aGlzLnBhcnRzKTtcblxuICAgIHJldHVybiBhbGxCdXRGaXJzdFBhcnRzO1xuICB9XG5cbiAgYWRkUGFydChwYXJ0KSB7XG4gICAgdGhpcy5wYXJ0cy5wdXNoKHBhcnQpO1xuICB9XG5cbiAgcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBjb25zdCBpbmRleCA9IDA7XG5cbiAgICBwYXJzZWQgPSBwYXJzZVBhcnRzKHRoaXMucGFydHMsIG5vZGVzLCBpbmRleCwgc3RhdGUsIGNhbGxiYWNrKTtcblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBwYXJ0c1N0cmluZyA9IHRoaXMucGFydHMucmVkdWNlKChwYXJ0c1N0cmluZywgcGFydCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhcnRTdHJpbmcgPSBwYXJ0LmFzU3RyaW5nKCk7XG5cbiAgICAgICAgICBpZiAocGFydHNTdHJpbmcgPT09IEVNUFRZX1NUUklORykge1xuICAgICAgICAgICAgcGFydHNTdHJpbmcgPSBwYXJ0U3RyaW5nOyAvLy9cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFydHNTdHJpbmcgPSBgJHtwYXJ0c1N0cmluZ30gJHtwYXJ0U3RyaW5nfWA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHBhcnRzU3RyaW5nO1xuICAgICAgICB9LCBFTVBUWV9TVFJJTkcpLFxuICAgICAgICBzdHJpbmcgPSBwYXJ0c1N0cmluZzsgLy8vXG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikge1xuICAgIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuICAgIGZvcih2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKWFycjJbaV0gPSBhcnJbaV07XG4gICAgcmV0dXJuIGFycjI7XG59XG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KGFycik7XG59XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gICAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgICB9XG59XG5mdW5jdGlvbiBpc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgICBEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFJlZmxlY3QuY29uc3RydWN0KERhdGUsIFtdLCBmdW5jdGlvbigpIHt9KSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIF9jb25zdHJ1Y3QoUGFyZW50LCBhcmdzLCBDbGFzcykge1xuICAgIGlmIChpc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSkge1xuICAgICAgICBfY29uc3RydWN0ID0gUmVmbGVjdC5jb25zdHJ1Y3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgX2NvbnN0cnVjdCA9IGZ1bmN0aW9uIF9jb25zdHJ1Y3QoUGFyZW50LCBhcmdzLCBDbGFzcykge1xuICAgICAgICAgICAgdmFyIGEgPSBbXG4gICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGEucHVzaC5hcHBseShhLCBhcmdzKTtcbiAgICAgICAgICAgIHZhciBDb25zdHJ1Y3RvciA9IEZ1bmN0aW9uLmJpbmQuYXBwbHkoUGFyZW50LCBhKTtcbiAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IG5ldyBDb25zdHJ1Y3RvcigpO1xuICAgICAgICAgICAgaWYgKENsYXNzKSBfc2V0UHJvdG90eXBlT2YoaW5zdGFuY2UsIENsYXNzLnByb3RvdHlwZSk7XG4gICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBfY29uc3RydWN0LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG59XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikge1xuICAgIGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGl0ZXJbU3ltYm9sLml0ZXJhdG9yXSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpO1xufVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXFxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgICAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgICAgIHJldHVybiBvO1xuICAgIH07XG4gICAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHtcbiAgICByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpO1xufVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikge1xuICAgIGlmICghbykgcmV0dXJuO1xuICAgIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gICAgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpO1xuICAgIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obik7XG4gICAgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xufVxudmFyIFRlcm1pbmFsUGFydCA9IC8qI19fUFVSRV9fKi8gZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gVGVybWluYWxQYXJ0KCkge1xuICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVGVybWluYWxQYXJ0KTtcbiAgICB9XG4gICAgX2NyZWF0ZUNsYXNzKFRlcm1pbmFsUGFydCwgW1xuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiaXNOb25UZXJtaW5hbFBhcnRcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBpc05vblRlcm1pbmFsUGFydCgpIHtcbiAgICAgICAgICAgICAgICB2YXIgbm9uVGVybWluYWxQYXJ0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vblRlcm1pbmFsUGFydDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImlzVGVybWluYWxQYXJ0XCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gaXNUZXJtaW5hbFBhcnQoKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRlcm1pbmFsUGFydCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRlcm1pbmFsUGFydDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImlzTm9XaGl0ZXNwYWNlUGFydFwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGlzTm9XaGl0ZXNwYWNlUGFydCgpIHtcbiAgICAgICAgICAgICAgICB2YXIgbm9XaGl0ZXNwYWNlUGFydCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybiBub1doaXRlc3BhY2VQYXJ0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiY2xvbmVcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjbG9uZShQYXJ0KSB7XG4gICAgICAgICAgICAgICAgZm9yKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVtYWluaW5nQXJndW1lbnRzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5Kyspe1xuICAgICAgICAgICAgICAgICAgICByZW1haW5pbmdBcmd1bWVudHNbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnN0cnVjdChQYXJ0LCBfdG9Db25zdW1hYmxlQXJyYXkocmVtYWluaW5nQXJndW1lbnRzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICBdKTtcbiAgICByZXR1cm4gVGVybWluYWxQYXJ0O1xufSgpO1xuZXhwb3J0cy5kZWZhdWx0ID0gVGVybWluYWxQYXJ0O1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTl3WVhKMEwzUmxjbTFwYm1Gc0xtcHpJbDBzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWx3aWRYTmxJSE4wY21samRGd2lPMXh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0JqYkdGemN5QlVaWEp0YVc1aGJGQmhjblFnZTF4dUlDQnBjMDV2YmxSbGNtMXBibUZzVUdGeWRDZ3BJSHRjYmlBZ0lDQmpiMjV6ZENCdWIyNVVaWEp0YVc1aGJGQmhjblFnUFNCbVlXeHpaVHRjYmx4dUlDQWdJSEpsZEhWeWJpQnViMjVVWlhKdGFXNWhiRkJoY25RN1hHNGdJSDFjYmx4dUlDQnBjMVJsY20xcGJtRnNVR0Z5ZENncElIdGNiaUFnSUNCamIyNXpkQ0IwWlhKdGFXNWhiRkJoY25RZ1BTQjBjblZsTzF4dUlDQWdJRnh1SUNBZ0lISmxkSFZ5YmlCMFpYSnRhVzVoYkZCaGNuUTdYRzRnSUgxY2JseHVJQ0JwYzA1dlYyaHBkR1Z6Y0dGalpWQmhjblFvS1NCN1hHNGdJQ0FnWTI5dWMzUWdibTlYYUdsMFpYTndZV05sVUdGeWRDQTlJR1poYkhObE8xeHVYRzRnSUNBZ2NtVjBkWEp1SUc1dlYyaHBkR1Z6Y0dGalpWQmhjblE3WEc0Z0lIMWNibHh1SUNCamJHOXVaU2hRWVhKMExDQXVMaTV5WlcxaGFXNXBibWRCY21kMWJXVnVkSE1wSUhzZ2NtVjBkWEp1SUc1bGR5QlFZWEowS0M0dUxuSmxiV0ZwYm1sdVowRnlaM1Z0Wlc1MGN5azdJSDFjYm4xY2JpSmRMQ0p1WVcxbGN5STZXeUpVWlhKdGFXNWhiRkJoY25RaUxDSnBjMDV2YmxSbGNtMXBibUZzVUdGeWRDSXNJbTV2YmxSbGNtMXBibUZzVUdGeWRDSXNJbWx6VkdWeWJXbHVZV3hRWVhKMElpd2lkR1Z5YldsdVlXeFFZWEowSWl3aWFYTk9iMWRvYVhSbGMzQmhZMlZRWVhKMElpd2libTlYYUdsMFpYTndZV05sVUdGeWRDSXNJbU5zYjI1bElpd2lVR0Z5ZENJc0luSmxiV0ZwYm1sdVowRnlaM1Z0Wlc1MGN5SmRMQ0p0WVhCd2FXNW5jeUk2SWtGQlFVRXNRMEZCV1N4WFFVRkJMRU5CUVVNN096dEZPM2RDT3p0NVJEdDFSVHM3T3pzN096czdPenM3T3pzN096dG5SanM3T3pzN096czdjME03T3pzN096dHBRenM3TzJsRk96dFRPenM3T3pzN096aEVPM05ET3paRU8ybEZPenM3TzNkRk8yZEZPenM3T3pzN096czdPenQxUWpzN1N6czdPenM3T3pzN096c3JSRHM3T3p0SlFVVlJRU3haUVVGWkxHbENRVUZzUWl4UlFVRlJPMkZCUVVaQkxGbEJRVms3TWtNN096czdXVUZETDBKRExFZEJRV2xDTEVWQlFXcENRU3hEUVVGcFFqdHRRa0ZCYWtKQkxGRkJRVkVzUTBGQlVrRXNhVUpCUVdsQ0xFZEJRVWNzUTBGQlF6dG5Ra0ZEYmtJc1IwRkJTeXhEUVVGRFF5eGxRVUZsTEVkQlFVY3NTMEZCU3p0blFrRkZOMElzVFVGQlRTeERRVUZEUVN4bFFVRmxPMWxCUTNoQ0xFTkJRVU03T3p0WlFVVkVReXhIUVVGakxFVkJRV1JCTEVOQlFXTTdiVUpCUVdSQkxGRkJRVkVzUTBGQlVrRXNZMEZCWXl4SFFVRkhMRU5CUVVNN1owSkJRMmhDTEVkQlFVc3NRMEZCUTBNc1dVRkJXU3hIUVVGSExFbEJRVWs3WjBKQlJYcENMRTFCUVUwc1EwRkJRMEVzV1VGQldUdFpRVU55UWl4RFFVRkRPenM3V1VGRlJFTXNSMEZCYTBJc1JVRkJiRUpCTEVOQlFXdENPMjFDUVVGc1FrRXNVVUZCVVN4RFFVRlNRU3hyUWtGQmEwSXNSMEZCUnl4RFFVRkRPMmRDUVVOd1FpeEhRVUZMTEVOQlFVTkRMR2RDUVVGblFpeEhRVUZITEV0QlFVczdaMEpCUlRsQ0xFMUJRVTBzUTBGQlEwRXNaMEpCUVdkQ08xbEJRM3BDTEVOQlFVTTdPenRaUVVWRVF5eEhRVUZMTEVWQlFVeEJMRU5CUVVzN2JVSkJRVXhCTEZGQlFWRXNRMEZCVWtFc1MwRkJTeXhEUVVGRFF5eEpRVUZKTEVWQlFYbENMRU5CUVVNN1owSkJRWGhDTEVkQlFVZERMRU5CUVVnc1IwRkJjVUlzUTBGQmNrSXNTVUZCY1VJc1IwRkJja0lzVTBGQmNVSXNRMEZCY2tJc1RVRkJjVUlzUlVGQmJFSkJMR3RDUVVGclFpeEhRVUZ5UWl4SFFVRnhRaXhQUVVGeVFpeEpRVUZ4UWl4SFFVRnlRaXhEUVVGeFFpeEhRVUZ5UWl4SlFVRnhRaXhIUVVGeVFpeERRVUZ4UWl4UFFVRnlRaXhKUVVGeFFpeEhRVUZ5UWl4RFFVRnhRaXhGUVVGeVFpeEpRVUZ4UWl4SFFVRnlRaXhKUVVGeFFpeEZRVUZ5UWl4SlFVRnhRaXhIUVVGeVFpeERRVUZETzI5Q1FVRkZRU3hyUWtGQmEwSXNRMEZCY2tJc1NVRkJjVUlzUjBGQmNrSXNRMEZCY1VJc1NVRkJja0lzVTBGQmNVSXNRMEZCY2tJc1NVRkJjVUlzUTBOeVFtNURMRU5FY1VKdFF6dG5Ra0ZCUkN4RFFVRkRPMmRDUVVGSkxFMUJRVTBzV1VGQlMwUXNTVUZCU1N4eFFrRkJTVU1zYTBKQlFXdENPMWxCUVVjc1EwRkJRenM3VFRzN08ydENRVzVDTTBSVUxGbEJRVmtzUVNKOSIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuL3ZlcnRpY2FsQnJhbmNoXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1pbmFsTm9kZVBhcnNlVHJlZSBleHRlbmRzIFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIHtcbiAgc3RhdGljIGZyb21UZXJtaW5hbE5vZGVBbmRUb2tlbnModGVybWluYWxOb2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBzaWduaWZpY2FudFRva2VuID0gdGVybWluYWxOb2RlLmdldFNpZ25pZmljYW50VG9rZW4oKSxcbiAgICAgICAgICBjb250ZW50ID0gdGVybWluYWxOb2RlLmdldENvbnRlbnQoKSxcbiAgICAgICAgICB0eXBlID0gc2lnbmlmaWNhbnRUb2tlbi5nZXRUeXBlKCksXG4gICAgICAgICAgdG9rZW5JbmRleCA9IHRva2Vucy5pbmRleE9mKHNpZ25pZmljYW50VG9rZW4pLFxuICAgICAgICAgIHN0cmluZyA9IGAke2NvbnRlbnR9WyR7dHlwZX1dKCR7dG9rZW5JbmRleH0pYCxcbiAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGggPSBzdHJpbmdMZW5ndGgsIC8vL1xuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGgpLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCksXG4gICAgICAgICAgdGVybWluYWxOb2RlUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVN0cmluZ0FuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oVGVybWluYWxOb2RlUGFyc2VUcmVlLCBzdHJpbmcsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pO1xuXG4gICAgdGVybWluYWxOb2RlUGFyc2VUcmVlLmFwcGVuZFRvVG9wKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlKTtcblxuICAgIHJldHVybiB0ZXJtaW5hbE5vZGVQYXJzZVRyZWU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRlcm1pbmFsTm9kZVBhcnNlVHJlZSBmcm9tIFwiLi4vcGFyc2VUcmVlL3Rlcm1pbmFsTm9kZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbE5vZGUge1xuICBjb25zdHJ1Y3RvcihzaWduaWZpY2FudFRva2VuLCBwYXJlbnROb2RlKSB7XG4gICAgdGhpcy5zaWduaWZpY2FudFRva2VuID0gc2lnbmlmaWNhbnRUb2tlbjtcbiAgICB0aGlzLnBhcmVudE5vZGUgPSBwYXJlbnROb2RlO1xuICB9XG5cbiAgZ2V0U2lnbmlmaWNhbnRUb2tlbigpIHtcbiAgICByZXR1cm4gdGhpcy5zaWduaWZpY2FudFRva2VuO1xuICB9XG5cbiAgZ2V0UGFyZW50Tm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnROb2RlO1xuICB9XG5cbiAgZ2V0Rmlyc3RTaWduaWZpY2FudFRva2VuKCkge1xuICAgIGNvbnN0IGZpcnN0U2lnbmlmaWNhbnRUb2tlbiA9IHRoaXMuc2lnbmlmaWNhbnRUb2tlbjsgIC8vL1xuXG4gICAgcmV0dXJuIGZpcnN0U2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIGdldExhc3RTaWduaWZpY2FudFRva2VuKCkge1xuICAgIGNvbnN0IGxhc3RTaWduaWZpY2FudFRva2VuID0gdGhpcy5zaWduaWZpY2FudFRva2VuOyAgLy8vXG5cbiAgICByZXR1cm4gbGFzdFNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBpc05vV2hpdGVzcGFjZU5vZGUoKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlTm9kZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIG5vV2hpdGVzcGFjZU5vZGU7XG4gIH1cblxuICBpc1Rlcm1pbmFsTm9kZSgpIHtcbiAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSB0cnVlO1xuICAgIFxuICAgIHJldHVybiB0ZXJtaW5hbE5vZGU7XG4gIH1cblxuICBpc05vblRlcm1pbmFsTm9kZSgpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBmYWxzZTtcblxuICAgIHJldHVybiBub25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBnZXRUeXBlKCkgeyByZXR1cm4gdGhpcy5zaWduaWZpY2FudFRva2VuLmdldFR5cGUoKTsgfVxuXG4gIGdldENvbnRlbnQoKSB7IHJldHVybiB0aGlzLnNpZ25pZmljYW50VG9rZW4uZ2V0Q29udGVudCgpOyB9XG5cbiAgc2V0U2lnbmlmaWNhbnRUb2tlbihzaWduaWZpY2FudFRva2VuKSB7XG4gICAgdGhpcy5zaWduaWZpY2FudFRva2VuID0gc2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIHNldFBhcmVudE5vZGUocGFyZW50Tm9kZSkge1xuICAgIHRoaXMucGFyZW50Tm9kZSA9IHBhcmVudE5vZGU7XG4gIH1cblxuICBhc1BhcnNlVHJlZSh0b2tlbnMpIHtcbiAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSB0aGlzLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxOb2RlUGFyc2VUcmVlID0gVGVybWluYWxOb2RlUGFyc2VUcmVlLmZyb21UZXJtaW5hbE5vZGVBbmRUb2tlbnModGVybWluYWxOb2RlLCB0b2tlbnMpLFxuICAgICAgICAgIHBhcnNlVHJlZSA9IHRlcm1pbmFsTm9kZVBhcnNlVHJlZTsgIC8vL1xuXG4gICAgcmV0dXJuIHBhcnNlVHJlZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tU2lnbmlmaWNhbnRUb2tlbihDbGFzcywgc2lnbmlmaWNhbnRUb2tlbikge1xuICAgIGlmIChzaWduaWZpY2FudFRva2VuID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHNpZ25pZmljYW50VG9rZW4gPSBDbGFzczsgLy8vXG4gICAgICBDbGFzcyA9IFRlcm1pbmFsTm9kZTsgLy8vXG4gICAgfVxuXG4gICAgY29uc3QgcGFyZW50Tm9kZSA9IHVuZGVmaW5lZCwgLy8vXG4gICAgICAgICAgdGVybWluYWxOb2RlID0gbmV3IENsYXNzKHNpZ25pZmljYW50VG9rZW4sIHBhcmVudE5vZGUpO1xuICAgIFxuICAgIHJldHVybiB0ZXJtaW5hbE5vZGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfdGVybWluYWwgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsXCIpKTtcbnZhciBfdGVybWluYWwxID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vbm9kZS90ZXJtaW5hbFwiKSk7XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHNlbGY7XG59XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gICAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgICB9XG59XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cbmZ1bmN0aW9uIF9nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgIT09IFwidW5kZWZpbmVkXCIgJiYgUmVmbGVjdC5nZXQpIHtcbiAgICAgICAgX2dldCA9IFJlZmxlY3QuZ2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIF9nZXQgPSBmdW5jdGlvbiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSB7XG4gICAgICAgICAgICB2YXIgYmFzZSA9IF9zdXBlclByb3BCYXNlKHRhcmdldCwgcHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKCFiYXNlKSByZXR1cm47XG4gICAgICAgICAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYmFzZSwgcHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKGRlc2MuZ2V0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlc2MuZ2V0LmNhbGwocmVjZWl2ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRlc2MudmFsdWU7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyIHx8IHRhcmdldCk7XG59XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7XG4gICAgfTtcbiAgICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufVxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gICAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gICAgfVxuICAgIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDoge1xuICAgICAgICBkZWZhdWx0OiBvYmpcbiAgICB9O1xufVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICAgIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgICAgIHJldHVybiBjYWxsO1xuICAgIH1cbiAgICByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTtcbn1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgICAgIG8uX19wcm90b19fID0gcDtcbiAgICAgICAgcmV0dXJuIG87XG4gICAgfTtcbiAgICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufVxuZnVuY3Rpb24gX3N1cGVyUHJvcEJhc2Uob2JqZWN0LCBwcm9wZXJ0eSkge1xuICAgIHdoaWxlKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSkpe1xuICAgICAgICBvYmplY3QgPSBfZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTtcbiAgICAgICAgaWYgKG9iamVjdCA9PT0gbnVsbCkgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG59XG52YXIgX3R5cGVvZiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIFwiQHN3Yy9oZWxwZXJzIC0gdHlwZW9mXCI7XG4gICAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG59O1xuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTtcbiAgICBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlO1xuICAgIHRyeSB7XG4gICAgICAgIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24oKSB7fSkpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkge1xuICAgIHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpO1xuICAgIHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHtcbiAgICAgICAgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7XG4gICAgICAgIGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7XG4gICAgICAgICAgICB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yO1xuICAgICAgICAgICAgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7XG4gICAgfTtcbn1cbnZhciBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQgPSAvKiNfX1BVUkVfXyovIGZ1bmN0aW9uKFRlcm1pbmFsUGFydCkge1xuICAgIF9pbmhlcml0cyhTaWduaWZpY2FudFRva2VuVHlwZVBhcnQsIFRlcm1pbmFsUGFydCk7XG4gICAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTaWduaWZpY2FudFRva2VuVHlwZVBhcnQpO1xuICAgIGZ1bmN0aW9uIFNpZ25pZmljYW50VG9rZW5UeXBlUGFydChzaWduaWZpY2FudFRva2VuVHlwZSkge1xuICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0KTtcbiAgICAgICAgdmFyIF90aGlzO1xuICAgICAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpO1xuICAgICAgICBfdGhpcy5zaWduaWZpY2FudFRva2VuVHlwZSA9IHNpZ25pZmljYW50VG9rZW5UeXBlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIF9jcmVhdGVDbGFzcyhTaWduaWZpY2FudFRva2VuVHlwZVBhcnQsIFtcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcInBhcnNlXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHZhciBwYXJzZWQ7XG4gICAgICAgICAgICAgICAgdmFyIHRlcm1pbmFsTm9kZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgdmFyIHNhdmVkSW5kZXggPSBzdGF0ZS5nZXRTYXZlZEluZGV4KCksIG5leHRTaWduaWZpY2FudFRva2VuID0gc3RhdGUuZ2V0TmV4dFNpZ25pZmljYW50VG9rZW4oKSwgc2lnbmlmaWNhbnRUb2tlbiA9IG5leHRTaWduaWZpY2FudFRva2VuOyAvLy9cbiAgICAgICAgICAgICAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2lnbmlmaWNhbnRUb2tlblR5cGUgPSBzaWduaWZpY2FudFRva2VuLmdldFR5cGUoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNpZ25pZmljYW50VG9rZW5UeXBlID09PSB0aGlzLnNpZ25pZmljYW50VG9rZW5UeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hbE5vZGUgPSBfdGVybWluYWwxLmRlZmF1bHQuZnJvbVNpZ25pZmljYW50VG9rZW4oc2lnbmlmaWNhbnRUb2tlbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcGFyc2VkID0gdGVybWluYWxOb2RlICE9PSBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZXMucHVzaCh0ZXJtaW5hbE5vZGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZCA9IGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImFzU3RyaW5nXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gYXNTdHJpbmcoKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN0cmluZyA9IFwiW1wiLmNvbmNhdCh0aGlzLnNpZ25pZmljYW50VG9rZW5UeXBlLCBcIl1cIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImNsb25lXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xvbmUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9nZXQoX2dldFByb3RvdHlwZU9mKFNpZ25pZmljYW50VG9rZW5UeXBlUGFydC5wcm90b3R5cGUpLCBcImNsb25lXCIsIHRoaXMpLmNhbGwodGhpcywgU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0LCB0aGlzLnNpZ25pZmljYW50VG9rZW5UeXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIF0pO1xuICAgIHJldHVybiBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQ7XG59KF90ZXJtaW5hbC5kZWZhdWx0KTtcbmV4cG9ydHMuZGVmYXVsdCA9IFNpZ25pZmljYW50VG9rZW5UeXBlUGFydDtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1TDNOeVl5OXdZWEowTDNSbGNtMXBibUZzTDNOcFoyNXBabWxqWVc1MFZHOXJaVzVVZVhCbExtcHpJbDBzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWx3aWRYTmxJSE4wY21samRGd2lPMXh1WEc1cGJYQnZjblFnVkdWeWJXbHVZV3hRWVhKMElHWnliMjBnWENJdUxpOHVMaTl3WVhKMEwzUmxjbTFwYm1Gc1hDSTdYRzVwYlhCdmNuUWdWR1Z5YldsdVlXeE9iMlJsSUdaeWIyMGdYQ0l1TGk4dUxpOXViMlJsTDNSbGNtMXBibUZzWENJN1hHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElHTnNZWE56SUZOcFoyNXBabWxqWVc1MFZHOXJaVzVVZVhCbFVHRnlkQ0JsZUhSbGJtUnpJRlJsY20xcGJtRnNVR0Z5ZENCN1hHNGdJR052Ym5OMGNuVmpkRzl5S0hOcFoyNXBabWxqWVc1MFZHOXJaVzVVZVhCbEtTQjdYRzRnSUNBZ2MzVndaWElvS1R0Y2JpQWdJQ0JjYmlBZ0lDQjBhR2x6TG5OcFoyNXBabWxqWVc1MFZHOXJaVzVVZVhCbElEMGdjMmxuYm1sbWFXTmhiblJVYjJ0bGJsUjVjR1U3WEc0Z0lIMWNibHh1SUNCd1lYSnpaU2h1YjJSbGN5d2djM1JoZEdVc0lHTmhiR3hpWVdOcktTQjdYRzRnSUNBZ2JHVjBJSEJoY25ObFpEdGNibHh1SUNBZ0lHeGxkQ0IwWlhKdGFXNWhiRTV2WkdVZ1BTQnVkV3hzTzF4dUlDQWdJRnh1SUNBZ0lHTnZibk4wSUhOaGRtVmtTVzVrWlhnZ1BTQnpkR0YwWlM1blpYUlRZWFpsWkVsdVpHVjRLQ2tzWEc1Y2RGeDBJQ0FnSUNBZ2JtVjRkRk5wWjI1cFptbGpZVzUwVkc5clpXNGdQU0J6ZEdGMFpTNW5aWFJPWlhoMFUybG5ibWxtYVdOaGJuUlViMnRsYmlncExGeHVYSFJjZEZ4MFhIUmNkSE5wWjI1cFptbGpZVzUwVkc5clpXNGdQU0J1WlhoMFUybG5ibWxtYVdOaGJuUlViMnRsYmpzZ0x5OHZYRzVjYmlBZ0lDQnBaaUFvYzJsbmJtbG1hV05oYm5SVWIydGxiaUFoUFQwZ2JuVnNiQ2tnZTF4dUlDQWdJQ0FnWTI5dWMzUWdjMmxuYm1sbWFXTmhiblJVYjJ0bGJsUjVjR1VnUFNCemFXZHVhV1pwWTJGdWRGUnZhMlZ1TG1kbGRGUjVjR1VvS1R0Y2JseHVJQ0FnSUNBZ2FXWWdLSE5wWjI1cFptbGpZVzUwVkc5clpXNVVlWEJsSUQwOVBTQjBhR2x6TG5OcFoyNXBabWxqWVc1MFZHOXJaVzVVZVhCbEtTQjdYRzRnSUNBZ0lDQWdJSFJsY20xcGJtRnNUbTlrWlNBOUlGUmxjbTFwYm1Gc1RtOWtaUzVtY205dFUybG5ibWxtYVdOaGJuUlViMnRsYmloemFXZHVhV1pwWTJGdWRGUnZhMlZ1S1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JpQWdJQ0J3WVhKelpXUWdQU0FvZEdWeWJXbHVZV3hPYjJSbElDRTlQU0J1ZFd4c0tUdGNibHh1SUNBZ0lHbG1JQ2h3WVhKelpXUXBJSHRjYmlBZ0lDQWdJRzV2WkdWekxuQjFjMmdvZEdWeWJXbHVZV3hPYjJSbEtUdGNibHh1SUNBZ0lDQWdhV1lnS0dOaGJHeGlZV05ySUNFOVBTQnVkV3hzS1NCN1hHNGdJQ0FnSUNBZ0lIQmhjbk5sWkNBOUlHTmhiR3hpWVdOcktDazdYRzVjYmlBZ0lDQWdJQ0FnYVdZZ0tDRndZWEp6WldRcElIdGNiaUFnSUNBZ0lDQWdJQ0J1YjJSbGN5NXdiM0FvS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JseHVJQ0FnSUdsbUlDZ2hjR0Z5YzJWa0tTQjdYRzRnSUNBZ0lDQnpkR0YwWlM1aVlXTnJkSEpoWTJzb2MyRjJaV1JKYm1SbGVDazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2NtVjBkWEp1SUhCaGNuTmxaRHRjYmlBZ2ZWeHVYRzRnSUdGelUzUnlhVzVuS0NrZ2UxeHVJQ0FnSUdOdmJuTjBJSE4wY21sdVp5QTlJR0JiSkh0MGFHbHpMbk5wWjI1cFptbGpZVzUwVkc5clpXNVVlWEJsZlYxZ08xeHVJQ0FnSUZ4dUlDQWdJSEpsZEhWeWJpQnpkSEpwYm1jN1hHNGdJSDFjYmx4dUlDQmpiRzl1WlNncElIc2djbVYwZFhKdUlITjFjR1Z5TG1Oc2IyNWxLRk5wWjI1cFptbGpZVzUwVkc5clpXNVVlWEJsVUdGeWRDd2dkR2hwY3k1emFXZHVhV1pwWTJGdWRGUnZhMlZ1Vkhsd1pTazdJSDFjYm4xY2JpSmRMQ0p1WVcxbGN5STZXeUpUYVdkdWFXWnBZMkZ1ZEZSdmEyVnVWSGx3WlZCaGNuUWlMQ0p6YVdkdWFXWnBZMkZ1ZEZSdmEyVnVWSGx3WlNJc0luQmhjbk5sSWl3aWJtOWtaWE1pTENKemRHRjBaU0lzSW1OaGJHeGlZV05ySWl3aWNHRnljMlZrSWl3aWRHVnliV2x1WVd4T2IyUmxJaXdpYzJGMlpXUkpibVJsZUNJc0ltZGxkRk5oZG1Wa1NXNWtaWGdpTENKdVpYaDBVMmxuYm1sbWFXTmhiblJVYjJ0bGJpSXNJbWRsZEU1bGVIUlRhV2R1YVdacFkyRnVkRlJ2YTJWdUlpd2ljMmxuYm1sbWFXTmhiblJVYjJ0bGJpSXNJbWRsZEZSNWNHVWlMQ0pVWlhKdGFXNWhiRTV2WkdVaUxDSm1jbTl0VTJsbmJtbG1hV05oYm5SVWIydGxiaUlzSW5CMWMyZ2lMQ0p3YjNBaUxDSmlZV05yZEhKaFkyc2lMQ0poYzFOMGNtbHVaeUlzSW5OMGNtbHVaeUlzSW1Oc2IyNWxJaXdpVkdWeWJXbHVZV3hRWVhKMElsMHNJbTFoY0hCcGJtZHpJam9pUVVGQlFTeERRVUZaTEZkQlFVRXNRMEZCUXpzN08wVTdkMEk3UVVGRldTeEhRVUZ4UWl4RFFVRnlRaXhUUVVGeFFqdEJRVU55UWl4SFFVRnhRaXhEUVVGeVFpeFZRVUZ4UWpzN096czdPenM3T3pzN096czdPemhFTzNORE96WkVPMmxGT3pzN08zZEZPMmRGT3pzN096c3dRanM3T3pzN096czdPenRUT3pzN096czdPMHM3T3pzN096czdPenM3T3pzN1RUdDVSRHM3T3pzN096czdPenM3T3pzN08zVkNPenRMT3pzN096dDNRenM3T3pzN096SkNPenM3T3pzN096dHhSanM3T3pzN096czdPenM3TzIxRk96dHBSRHM3T3pzN1NVRkZla0pCTEhkQ1FVRjNRaXhwUWtGQk9VSXNVVUZCVVR0eFJEczdZVUZCUmtFc2QwSkJRWGRDTEVOQlF5OUNReXh2UWtGQmIwSTdkVVE3TzJsRFEwNXNReXhEUkU5Wk8yTkJSVWhCTEc5Q1FVRnZRaXhIUVVGSFFTeHZRa0ZCYjBJc1EwRkJRenM3T3pzN1dVRkhia1JETEVkQlFVc3NSVUZCVEVFc1EwRkJTenR0UWtGQlRFRXNVVUZCVVN4RFFVRlNRU3hMUVVGTExFTkJRVU5ETEV0QlFVc3NSVUZCUlVNc1MwRkJTeXhGUVVGRlF5eFJRVUZSTEVWQlFVVXNRMEZCUXp0blFrRkROMElzUjBGQlJ5eERRVUZEUXl4TlFVRk5PMmRDUVVWV0xFZEJRVWNzUTBGQlEwTXNXVUZCV1N4SFFVRkhMRWxCUVVrN1owSkJSWFpDTEVkQlFVc3NRMEZCUTBNc1ZVRkJWU3hIUVVGSFNpeExRVUZMTEVOQlFVTkxMR0ZCUVdFc1NVRkRiRU5ETEc5Q1FVRnZRaXhIUVVGSFRpeExRVUZMTEVOQlFVTlBMSFZDUVVGMVFpeEpRVU4yUkVNc1owSkJRV2RDTEVkQlFVZEdMRzlDUVVGdlFpeEZRVUZGTEVWQlFVY3NRVUZCU0N4RFFVRkhPMmRDUVVVM1F5eEZRVUZGTEVWQlFVVkZMR2RDUVVGblFpeExRVUZMTEVsQlFVa3NSVUZCUlN4RFFVRkRPMjlDUVVNNVFpeEhRVUZMTEVOQlFVTllMRzlDUVVGdlFpeEhRVUZIVnl4blFrRkJaMElzUTBGQlEwTXNUMEZCVHp0dlFrRkZja1FzUlVGQlJTeEZRVUZGV2l4dlFrRkJiMElzUzBGQlN5eEpRVUZKTEVOQlFVTkJMRzlDUVVGdlFpeEZRVUZGTEVOQlFVTTdkMEpCUTNaRVRTeFpRVUZaTEVkQlFVZFBMRlZCUVZrc1UwRkJRME1zYjBKQlFXOUNMRU5CUVVOSUxHZENRVUZuUWl4RFFVRkRMRU5CUVVNN2IwSkJRM0pGTEVOQlFVTTdaMEpCUTBnc1EwRkJRenRuUWtGRlJFNHNUVUZCVFN4SFFVRkpReXhaUVVGWkxFdEJRVXNzU1VGQlNTeEJRVUZETEVOQlFVTTdaMEpCUldwRExFVkJRVVVzUlVGQlJVUXNUVUZCVFN4RlFVRkZMRU5CUVVNN2IwSkJRMWhJTEV0QlFVc3NRMEZCUTJFc1NVRkJTU3hEUVVGRFZDeFpRVUZaTEVOQlFVTXNRMEZCUXp0dlFrRkZla0lzUlVGQlJTeEZRVUZGUml4UlFVRlJMRXRCUVVzc1NVRkJTU3hGUVVGRkxFTkJRVU03ZDBKQlEzUkNReXhOUVVGTkxFZEJRVWRFTEZGQlFWRXNSVUZCUlN4RFFVRkRPM2RDUVVWd1FpeEZRVUZGTEVkQlFVZERMRTFCUVUwc1JVRkJSU3hEUVVGRE96UkNRVU5hU0N4TFFVRkxMRU5CUVVOakxFZEJRVWNzUlVGQlJTeERRVUZETzNkQ1FVTmtMRU5CUVVNN2IwSkJRMGdzUTBGQlF6dG5Ra0ZEU0N4RFFVRkRPMmRDUVVWRUxFVkJRVVVzUjBGQlIxZ3NUVUZCVFN4RlFVRkZMRU5CUVVNN2IwSkJRMXBHTEV0QlFVc3NRMEZCUTJNc1UwRkJVeXhEUVVGRFZpeFZRVUZWTEVOQlFVTXNRMEZCUXp0blFrRkRPVUlzUTBGQlF6dG5Ra0ZGUkN4TlFVRk5MRU5CUVVOR0xFMUJRVTA3V1VGRFppeERRVUZET3pzN1dVRkZSR0VzUjBGQlVTeEZRVUZTUVN4RFFVRlJPMjFDUVVGU1FTeFJRVUZSTEVOQlFWSkJMRkZCUVZFc1IwRkJSeXhEUVVGRE8yZENRVU5XTEVkQlFVc3NRMEZCUTBNc1RVRkJUU3hIUVVGSkxFTkJRVU1zUjBGQk5FSXNUVUZCUXl4RFFVRXpRaXhKUVVGSkxFTkJRVU51UWl4dlFrRkJiMElzUlVGQlF5eERRVUZETzJkQ1FVVTVReXhOUVVGTkxFTkJRVU50UWl4TlFVRk5PMWxCUTJZc1EwRkJRenM3TzFsQlJVUkRMRWRCUVVzc1JVRkJURUVzUTBGQlN6dHRRa0ZCVEVFc1VVRkJVU3hEUVVGU1FTeExRVUZMTEVkQlFVY3NRMEZCUXp0blFrRkJReXhOUVVGTkxITkNRVzVFUjNKQ0xIZENRVUYzUWl4aFFXMUVjRUp4UWl4RFFVRkxMRkZCUVZnc1NVRkJTeXhoUVVGUGNrSXNkMEpCUVhkQ0xFVkJRVVVzU1VGQlNTeERRVUZEUXl4dlFrRkJiMEk3V1VGQlJ5eERRVUZET3p0Tk96dEZRVzVFYUVOeFFpeFRRVUZaTzJ0Q1FVRTNRM1JDTEhkQ1FVRjNRaXhCSW4wPSIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgdHlwZXMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5cbmNvbnN0IHsgbmFtZVR5cGUgfSA9IHR5cGVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOYW1lRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lU2lnbmlmaWNhbnRUb2tlblR5cGUgPSBuYW1lVHlwZSwgIC8vL1xuICAgICAgICAgIG5hbWVTaWduaWZpY2FudFRva2VuVHlwZVBhcnQgPSBuZXcgU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0KG5hbWVTaWduaWZpY2FudFRva2VuVHlwZSksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBuYW1lU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0XG4gICAgICAgICAgXTtcblxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBOYW1lUnVsZU5hbWUgPSBcIm5hbWVcIjtcbmV4cG9ydCBjb25zdCBQYXJ0UnVsZU5hbWUgPSBcInBhcnRcIjtcbmV4cG9ydCBjb25zdCBSdWxlUnVsZU5hbWUgPSBcInJ1bGVcIjtcbmV4cG9ydCBjb25zdCBFcnJvclJ1bGVOYW1lID0gXCJlcnJvclwiO1xuZXhwb3J0IGNvbnN0IFJ1bGVOYW1lUnVsZU5hbWUgPSBcInJ1bGVOYW1lXCI7XG5leHBvcnQgY29uc3QgRG9jdW1lbnRSdWxlTmFtZSA9IFwiZG9jdW1lbnRcIjtcbmV4cG9ydCBjb25zdCBXaWxkY2FyZFJ1bGVOYW1lID0gXCJ3aWxkY2FyZFwiO1xuZXhwb3J0IGNvbnN0IEVuZE9mTGluZVJ1bGVOYW1lID0gXCJlbmRPZkxpbmVcIjtcbmV4cG9ydCBjb25zdCBEZWZpbml0aW9uUnVsZU5hbWUgPSBcImRlZmluaXRpb25cIjtcbmV4cG9ydCBjb25zdCBRdWFudGlmaWVyUnVsZU5hbWUgPSBcInF1YW50aWZpZXJcIjtcbmV4cG9ydCBjb25zdCBEZWZpbml0aW9uc1J1bGVOYW1lID0gXCJkZWZpbml0aW9uc1wiO1xuZXhwb3J0IGNvbnN0IFRlcm1pbmFsUGFydFJ1bGVOYW1lID0gXCJ0ZXJtaW5hbFBhcnRcIjtcbmV4cG9ydCBjb25zdCBDaG9pY2VPZlBhcnRzUnVsZU5hbWUgPSBcImNob2ljZU9mUGFydHNcIjtcbmV4cG9ydCBjb25zdCBUZXJtaW5hbFN5bWJvbFJ1bGVOYW1lID0gXCJ0ZXJtaW5hbFN5bWJvbFwiO1xuZXhwb3J0IGNvbnN0IE5vblRlcm1pbmFsUGFydFJ1bGVOYW1lID0gXCJub25UZXJtaW5hbFBhcnRcIjtcbmV4cG9ydCBjb25zdCBTZXF1ZW5jZU9mUGFydHNSdWxlTmFtZSA9IFwic2VxdWVuY2VPZlBhcnRzXCI7XG5leHBvcnQgY29uc3QgTm9XaGl0ZXNwYWNlUGFydFJ1bGVOYW1lID0gXCJub1doaXRlc3BhY2VQYXJ0XCI7XG5leHBvcnQgY29uc3QgTG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSA9IFwibG9va0FoZWFkTW9kaWZpZXJcIjtcbmV4cG9ydCBjb25zdCBSZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lID0gXCJyZWd1bGFyRXhwcmVzc2lvblwiO1xuZXhwb3J0IGNvbnN0IE9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lID0gXCJvcHRpb25hbFF1YW50aWZpZXJcIjtcbmV4cG9ydCBjb25zdCBPbmVPck1vcmVRdWFudGlmaWVyUnVsZU5hbWUgPSBcIm9uZU9yTW9yZVF1YW50aWZpZXJcIjtcbmV4cG9ydCBjb25zdCBaZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lID0gXCJ6ZXJvT3JNb3JlUXVhbnRpZmllclwiO1xuZXhwb3J0IGNvbnN0IFNpZ25pZmljYW50VG9rZW5UeXBlUnVsZU5hbWUgPSBcInNpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBOYW1lQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvbmFtZVwiO1xuaW1wb3J0IE5hbWVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL25hbWVcIjtcblxuaW1wb3J0IHsgTmFtZVJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOYW1lUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lRGVmaW5pdGlvbiA9IG5ldyBOYW1lRGVmaW5pdGlvbigpLFxuICAgICAgICAgIG5hbWUgPSBOYW1lUnVsZU5hbWUsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBuYW1lRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IE5hbWVCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikge1xuICAgIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuICAgIGZvcih2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKWFycjJbaV0gPSBhcnJbaV07XG4gICAgcmV0dXJuIGFycjI7XG59XG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KGFycik7XG59XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gICAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgICB9XG59XG5mdW5jdGlvbiBpc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgICBEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFJlZmxlY3QuY29uc3RydWN0KERhdGUsIFtdLCBmdW5jdGlvbigpIHt9KSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIF9jb25zdHJ1Y3QoUGFyZW50LCBhcmdzLCBDbGFzcykge1xuICAgIGlmIChpc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSkge1xuICAgICAgICBfY29uc3RydWN0ID0gUmVmbGVjdC5jb25zdHJ1Y3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgX2NvbnN0cnVjdCA9IGZ1bmN0aW9uIF9jb25zdHJ1Y3QoUGFyZW50LCBhcmdzLCBDbGFzcykge1xuICAgICAgICAgICAgdmFyIGEgPSBbXG4gICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGEucHVzaC5hcHBseShhLCBhcmdzKTtcbiAgICAgICAgICAgIHZhciBDb25zdHJ1Y3RvciA9IEZ1bmN0aW9uLmJpbmQuYXBwbHkoUGFyZW50LCBhKTtcbiAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IG5ldyBDb25zdHJ1Y3RvcigpO1xuICAgICAgICAgICAgaWYgKENsYXNzKSBfc2V0UHJvdG90eXBlT2YoaW5zdGFuY2UsIENsYXNzLnByb3RvdHlwZSk7XG4gICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBfY29uc3RydWN0LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG59XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikge1xuICAgIGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGl0ZXJbU3ltYm9sLml0ZXJhdG9yXSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpO1xufVxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXFxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgICAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgICAgIHJldHVybiBvO1xuICAgIH07XG4gICAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHtcbiAgICByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpO1xufVxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikge1xuICAgIGlmICghbykgcmV0dXJuO1xuICAgIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gICAgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpO1xuICAgIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obik7XG4gICAgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xufVxudmFyIE5vblRlcm1pbmFsUGFydCA9IC8qI19fUFVSRV9fKi8gZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gTm9uVGVybWluYWxQYXJ0KHR5cGUpIHtcbiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIE5vblRlcm1pbmFsUGFydCk7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgfVxuICAgIF9jcmVhdGVDbGFzcyhOb25UZXJtaW5hbFBhcnQsIFtcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImdldFR5cGVcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRUeXBlKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnR5cGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJpc05vblRlcm1pbmFsUGFydFwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGlzTm9uVGVybWluYWxQYXJ0KCkge1xuICAgICAgICAgICAgICAgIHZhciBub25UZXJtaW5hbFBhcnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybiBub25UZXJtaW5hbFBhcnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJpc1Rlcm1pbmFsUGFydFwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGlzVGVybWluYWxQYXJ0KCkge1xuICAgICAgICAgICAgICAgIHZhciB0ZXJtaW5hbFBhcnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGVybWluYWxQYXJ0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiaXNSdWxlTmFtZVBhcnRcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBpc1J1bGVOYW1lUGFydCgpIHtcbiAgICAgICAgICAgICAgICB2YXIgcnVsZU5hbWVQYXJ0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJ1bGVOYW1lUGFydDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImNsb25lXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xvbmUoUGFydCkge1xuICAgICAgICAgICAgICAgIGZvcih2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlbWFpbmluZ0FyZ3VtZW50cyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKXtcbiAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nQXJndW1lbnRzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9jb25zdHJ1Y3QoUGFydCwgX3RvQ29uc3VtYWJsZUFycmF5KHJlbWFpbmluZ0FyZ3VtZW50cykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgXSk7XG4gICAgcmV0dXJuIE5vblRlcm1pbmFsUGFydDtcbn0oKTtcbmV4cG9ydHMuZGVmYXVsdCA9IE5vblRlcm1pbmFsUGFydDtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5d1lYSjBMMjV2YmxSbGNtMXBibUZzTG1weklsMHNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbHdpZFhObElITjBjbWxqZEZ3aU8xeHVYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQmpiR0Z6Y3lCT2IyNVVaWEp0YVc1aGJGQmhjblFnZTF4dUlDQmpiMjV6ZEhKMVkzUnZjaWgwZVhCbEtTQjdYRzRnSUNBZ2RHaHBjeTUwZVhCbElEMGdkSGx3WlRzZ0lGeHVJQ0I5WEc0Z0lGeHVJQ0JuWlhSVWVYQmxLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG5SNWNHVTdYRzRnSUgxY2JseHVJQ0JwYzA1dmJsUmxjbTFwYm1Gc1VHRnlkQ2dwSUh0Y2JpQWdJQ0JqYjI1emRDQnViMjVVWlhKdGFXNWhiRkJoY25RZ1BTQjBjblZsTzF4dVhHNGdJQ0FnY21WMGRYSnVJRzV2YmxSbGNtMXBibUZzVUdGeWREdGNiaUFnZlZ4dVhHNGdJR2x6VkdWeWJXbHVZV3hRWVhKMEtDa2dlMXh1SUNBZ0lHTnZibk4wSUhSbGNtMXBibUZzVUdGeWRDQTlJR1poYkhObE8xeHVJQ0FnSUZ4dUlDQWdJSEpsZEhWeWJpQjBaWEp0YVc1aGJGQmhjblE3WEc0Z0lIMWNibHh1SUNCcGMxSjFiR1ZPWVcxbFVHRnlkQ2dwSUh0Y2JpQWdJQ0JqYjI1emRDQnlkV3hsVG1GdFpWQmhjblFnUFNCbVlXeHpaVHRjYmx4dUlDQWdJSEpsZEhWeWJpQnlkV3hsVG1GdFpWQmhjblE3WEc0Z0lIMWNibHh1SUNCamJHOXVaU2hRWVhKMExDQXVMaTV5WlcxaGFXNXBibWRCY21kMWJXVnVkSE1wSUhzZ2NtVjBkWEp1SUc1bGR5QlFZWEowS0M0dUxuSmxiV0ZwYm1sdVowRnlaM1Z0Wlc1MGN5azdJSDFjYm4xY2JpSmRMQ0p1WVcxbGN5STZXeUpPYjI1VVpYSnRhVzVoYkZCaGNuUWlMQ0owZVhCbElpd2laMlYwVkhsd1pTSXNJbWx6VG05dVZHVnliV2x1WVd4UVlYSjBJaXdpYm05dVZHVnliV2x1WVd4UVlYSjBJaXdpYVhOVVpYSnRhVzVoYkZCaGNuUWlMQ0owWlhKdGFXNWhiRkJoY25RaUxDSnBjMUoxYkdWT1lXMWxVR0Z5ZENJc0luSjFiR1ZPWVcxbFVHRnlkQ0lzSW1Oc2IyNWxJaXdpVUdGeWRDSXNJbkpsYldGcGJtbHVaMEZ5WjNWdFpXNTBjeUpkTENKdFlYQndhVzVuY3lJNklrRkJRVUVzUTBGQldTeFhRVUZCTEVOQlFVTTdPenRGTzNkQ096dDVSRHQxUlRzN096czdPenM3T3pzN096czdPenRuUmpzN096czdPenM3YzBNN096czdPenRwUXpzN08ybEZPenRUT3pzN096czdPemhFTzNORE96WkVPMmxGT3pzN08zZEZPMmRGT3pzN096czdPenM3T3p0MVFqczdTenM3T3pzN096czdPenNyUkRzN096dEpRVVZSUVN4bFFVRmxMR2xDUVVGeVFpeFJRVUZSTzJGQlFVWkJMR1ZCUVdVc1EwRkRkRUpETEVsQlFVazdPRU03VVVGRFpDeEpRVUZKTEVOQlFVTkJMRWxCUVVrc1IwRkJSMEVzU1VGQlNTeERRVUZET3pzN08xbEJSMjVDUXl4SFFVRlBMRVZCUVZCQkxFTkJRVTg3YlVKQlFWQkJMRkZCUVZFc1EwRkJVa0VzVDBGQlR5eEhRVUZITEVOQlFVTTdaMEpCUTFRc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlEwUXNTVUZCU1R0WlFVTnNRaXhEUVVGRE96czdXVUZGUkVVc1IwRkJhVUlzUlVGQmFrSkJMRU5CUVdsQ08yMUNRVUZxUWtFc1VVRkJVU3hEUVVGU1FTeHBRa0ZCYVVJc1IwRkJSeXhEUVVGRE8yZENRVU51UWl4SFFVRkxMRU5CUVVORExHVkJRV1VzUjBGQlJ5eEpRVUZKTzJkQ1FVVTFRaXhOUVVGTkxFTkJRVU5CTEdWQlFXVTdXVUZEZUVJc1EwRkJRenM3TzFsQlJVUkRMRWRCUVdNc1JVRkJaRUVzUTBGQll6dHRRa0ZCWkVFc1VVRkJVU3hEUVVGU1FTeGpRVUZqTEVkQlFVY3NRMEZCUXp0blFrRkRhRUlzUjBGQlN5eERRVUZEUXl4WlFVRlpMRWRCUVVjc1MwRkJTenRuUWtGRk1VSXNUVUZCVFN4RFFVRkRRU3haUVVGWk8xbEJRM0pDTEVOQlFVTTdPenRaUVVWRVF5eEhRVUZqTEVWQlFXUkJMRU5CUVdNN2JVSkJRV1JCTEZGQlFWRXNRMEZCVWtFc1kwRkJZeXhIUVVGSExFTkJRVU03WjBKQlEyaENMRWRCUVVzc1EwRkJRME1zV1VGQldTeEhRVUZITEV0QlFVczdaMEpCUlRGQ0xFMUJRVTBzUTBGQlEwRXNXVUZCV1R0WlFVTnlRaXhEUVVGRE96czdXVUZGUkVNc1IwRkJTeXhGUVVGTVFTeERRVUZMTzIxQ1FVRk1RU3hSUVVGUkxFTkJRVkpCTEV0QlFVc3NRMEZCUTBNc1NVRkJTU3hGUVVGNVFpeERRVUZETzJkQ1FVRjRRaXhIUVVGSFF5eERRVUZJTEVkQlFYRkNMRU5CUVhKQ0xFbEJRWEZDTEVkQlFYSkNMRk5CUVhGQ0xFTkJRWEpDTEUxQlFYRkNMRVZCUVd4Q1FTeHJRa0ZCYTBJc1IwRkJja0lzUjBGQmNVSXNUMEZCY2tJc1NVRkJjVUlzUjBGQmNrSXNRMEZCY1VJc1IwRkJja0lzU1VGQmNVSXNSMEZCY2tJc1EwRkJjVUlzVDBGQmNrSXNTVUZCY1VJc1IwRkJja0lzUTBGQmNVSXNSVUZCY2tJc1NVRkJjVUlzUjBGQmNrSXNTVUZCY1VJc1JVRkJja0lzU1VGQmNVSXNSMEZCY2tJc1EwRkJRenR2UWtGQlJVRXNhMEpCUVd0Q0xFTkJRWEpDTEVsQlFYRkNMRWRCUVhKQ0xFTkJRWEZDTEVsQlFYSkNMRk5CUVhGQ0xFTkJRWEpDTEVsQlFYRkNMRU5ETjBKdVF5eERSRFpDYlVNN1owSkJRVVFzUTBGQlF6dG5Ra0ZCU1N4TlFVRk5MRmxCUVV0RUxFbEJRVWtzY1VKQlFVbERMR3RDUVVGclFqdFpRVUZITEVOQlFVTTdPMDA3T3p0clFrRXpRak5FV0N4bFFVRmxMRUVpZlE9PSIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFJ1bGVOYW1lUGFydFR5cGUgPSBcInJ1bGVOYW1lUGFydFwiO1xuZXhwb3J0IGNvbnN0IE9wdGlvbmFsUGFydFBhcnRUeXBlID0gXCJvcHRpb25hbFBhcnRcIjtcbmV4cG9ydCBjb25zdCBDaG9pY2VPZlBhcnRzUGFydFR5cGUgPSBcImNob2ljZU9mUGFydHNcIjtcbmV4cG9ydCBjb25zdCBPbmVPck1vcmVQYXJ0c1BhcnRUeXBlID0gXCJvbmVPck1vcmVQYXJ0c1wiO1xuZXhwb3J0IGNvbnN0IFplcm9Pck1vcmVQYXJ0c1BhcnRUeXBlID0gXCJ6ZXJvT3JNb3JlUGFydHNcIjtcbmV4cG9ydCBjb25zdCBTZXF1ZW5jZU9mUGFydHNQYXJ0VHlwZSA9IFwic2VxdWVuY2VPZlBhcnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgUnVsZU5hbWVQYXJ0VHlwZSxcbiAgT3B0aW9uYWxQYXJ0UGFydFR5cGUsXG4gIENob2ljZU9mUGFydHNQYXJ0VHlwZSxcbiAgT25lT3JNb3JlUGFydHNQYXJ0VHlwZSxcbiAgWmVyb09yTW9yZVBhcnRzUGFydFR5cGUsXG4gIFNlcXVlbmNlT2ZQYXJ0c1BhcnRUeXBlXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF9vY2NhbUxleGVycyA9IHJlcXVpcmUoXCJvY2NhbS1sZXhlcnNcIik7XG52YXIgX25vblRlcm1pbmFsID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbFwiKSk7XG52YXIgX3BhcnRUeXBlcyA9IHJlcXVpcmUoXCIuLi8uLi9wYXJ0VHlwZXNcIik7XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHNlbGY7XG59XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gICAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgICB9XG59XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cbmZ1bmN0aW9uIF9nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgIT09IFwidW5kZWZpbmVkXCIgJiYgUmVmbGVjdC5nZXQpIHtcbiAgICAgICAgX2dldCA9IFJlZmxlY3QuZ2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIF9nZXQgPSBmdW5jdGlvbiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSB7XG4gICAgICAgICAgICB2YXIgYmFzZSA9IF9zdXBlclByb3BCYXNlKHRhcmdldCwgcHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKCFiYXNlKSByZXR1cm47XG4gICAgICAgICAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYmFzZSwgcHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKGRlc2MuZ2V0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlc2MuZ2V0LmNhbGwocmVjZWl2ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRlc2MudmFsdWU7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyIHx8IHRhcmdldCk7XG59XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7XG4gICAgfTtcbiAgICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufVxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gICAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gICAgfVxuICAgIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDoge1xuICAgICAgICBkZWZhdWx0OiBvYmpcbiAgICB9O1xufVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICAgIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgICAgIHJldHVybiBjYWxsO1xuICAgIH1cbiAgICByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTtcbn1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgICAgIG8uX19wcm90b19fID0gcDtcbiAgICAgICAgcmV0dXJuIG87XG4gICAgfTtcbiAgICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufVxuZnVuY3Rpb24gX3N1cGVyUHJvcEJhc2Uob2JqZWN0LCBwcm9wZXJ0eSkge1xuICAgIHdoaWxlKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSkpe1xuICAgICAgICBvYmplY3QgPSBfZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTtcbiAgICAgICAgaWYgKG9iamVjdCA9PT0gbnVsbCkgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG59XG52YXIgX3R5cGVvZiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIFwiQHN3Yy9oZWxwZXJzIC0gdHlwZW9mXCI7XG4gICAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG59O1xuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTtcbiAgICBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlO1xuICAgIHRyeSB7XG4gICAgICAgIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24oKSB7fSkpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkge1xuICAgIHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpO1xuICAgIHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHtcbiAgICAgICAgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7XG4gICAgICAgIGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7XG4gICAgICAgICAgICB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yO1xuICAgICAgICAgICAgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7XG4gICAgfTtcbn1cbnZhciBxdWVzdGlvbk1hcmsgPSBfb2NjYW1MZXhlcnMuc3BlY2lhbFN5bWJvbHMucXVlc3Rpb25NYXJrO1xudmFyIE9wdGlvbmFsUGFydFBhcnQgPSAvKiNfX1BVUkVfXyovIGZ1bmN0aW9uKE5vblRlcm1pbmFsUGFydCkge1xuICAgIF9pbmhlcml0cyhPcHRpb25hbFBhcnRQYXJ0LCBOb25UZXJtaW5hbFBhcnQpO1xuICAgIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoT3B0aW9uYWxQYXJ0UGFydCk7XG4gICAgZnVuY3Rpb24gT3B0aW9uYWxQYXJ0UGFydChwYXJ0KSB7XG4gICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBPcHRpb25hbFBhcnRQYXJ0KTtcbiAgICAgICAgdmFyIF90aGlzO1xuICAgICAgICB2YXIgdHlwZSA9IF9wYXJ0VHlwZXMuT3B0aW9uYWxQYXJ0UGFydFR5cGU7IC8vL1xuICAgICAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHR5cGUpO1xuICAgICAgICBfdGhpcy5wYXJ0ID0gcGFydDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBfY3JlYXRlQ2xhc3MoT3B0aW9uYWxQYXJ0UGFydCwgW1xuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiZ2V0UGFydFwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFBhcnQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFydDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcInBhcnNlXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHZhciBwYXJzZWQ7XG4gICAgICAgICAgICAgICAgdmFyIHBhcnQgPSB0aGlzLmdldFBhcnQoKTtcbiAgICAgICAgICAgICAgICBwYXJzZVBhcnQocGFydCwgbm9kZXMsIHN0YXRlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgcGFyc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiYXNTdHJpbmdcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBhc1N0cmluZygpIHtcbiAgICAgICAgICAgICAgICB2YXIgb3BlcmF0b3JTdHJpbmcgPSBxdWVzdGlvbk1hcmssIHBhcnRTdHJpbmcgPSB0aGlzLnBhcnQuYXNTdHJpbmcoKSwgc3RyaW5nID0gXCJcIi5jb25jYXQocGFydFN0cmluZykuY29uY2F0KG9wZXJhdG9yU3RyaW5nKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiY2xvbmVcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjbG9uZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX2dldChfZ2V0UHJvdG90eXBlT2YoT3B0aW9uYWxQYXJ0UGFydC5wcm90b3R5cGUpLCBcImNsb25lXCIsIHRoaXMpLmNhbGwodGhpcywgT3B0aW9uYWxQYXJ0UGFydCwgdGhpcy5wYXJ0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIF0pO1xuICAgIHJldHVybiBPcHRpb25hbFBhcnRQYXJ0O1xufShfbm9uVGVybWluYWwuZGVmYXVsdCk7XG5leHBvcnRzLmRlZmF1bHQgPSBPcHRpb25hbFBhcnRQYXJ0O1xuZnVuY3Rpb24gcGFyc2VQYXJ0KHBhcnQsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIHBhcnNlZCA9IGNhbGxiYWNrKCk7XG4gICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgICBwYXJ0LnBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcGFydC5wYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcbiAgICB9XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUwzTnlZeTl3WVhKMEwyNXZibFJsY20xcGJtRnNMMjl3ZEdsdmJtRnNVR0Z5ZEM1cWN5SmRMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpjSW5WelpTQnpkSEpwWTNSY0lqdGNibHh1YVcxd2IzSjBJSHNnYzNCbFkybGhiRk41YldKdmJITWdmU0JtY205dElGd2liMk5qWVcwdGJHVjRaWEp6WENJN1hHNWNibWx0Y0c5eWRDQk9iMjVVWlhKdGFXNWhiRkJoY25RZ1puSnZiU0JjSWk0dUx5NHVMM0JoY25RdmJtOXVWR1Z5YldsdVlXeGNJanRjYmx4dWFXMXdiM0owSUhzZ1QzQjBhVzl1WVd4UVlYSjBVR0Z5ZEZSNWNHVWdmU0JtY205dElGd2lMaTR2TGk0dmNHRnlkRlI1Y0dWelhDSTdYRzVjYm1OdmJuTjBJSHNnY1hWbGMzUnBiMjVOWVhKcklIMGdQU0J6Y0dWamFXRnNVM2x0WW05c2N6dGNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdZMnhoYzNNZ1QzQjBhVzl1WVd4UVlYSjBVR0Z5ZENCbGVIUmxibVJ6SUU1dmJsUmxjbTFwYm1Gc1VHRnlkQ0I3WEc0Z0lHTnZibk4wY25WamRHOXlLSEJoY25RcElIdGNiaUFnSUNCamIyNXpkQ0IwZVhCbElEMGdUM0IwYVc5dVlXeFFZWEowVUdGeWRGUjVjR1U3SUM4dkwxeHVYRzRnSUNBZ2MzVndaWElvZEhsd1pTazdYRzVjYmlBZ0lDQjBhR2x6TG5CaGNuUWdQU0J3WVhKME8xeHVJQ0I5WEc1Y2JpQWdaMlYwVUdGeWRDZ3BJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTV3WVhKME8xeHVJQ0I5WEc1Y2JpQWdjR0Z5YzJVb2JtOWtaWE1zSUhOMFlYUmxMQ0JqWVd4c1ltRmpheWtnZTF4dUlDQWdJR3hsZENCd1lYSnpaV1E3WEc1Y2JpQWdJQ0JqYjI1emRDQndZWEowSUQwZ2RHaHBjeTVuWlhSUVlYSjBLQ2s3WEc1Y2JpQWdJQ0J3WVhKelpWQmhjblFvY0dGeWRDd2dibTlrWlhNc0lITjBZWFJsTENCallXeHNZbUZqYXlrN1hHNWNiaUFnSUNCd1lYSnpaV1FnUFNCMGNuVmxPMXh1WEc0Z0lDQWdjbVYwZFhKdUlIQmhjbk5sWkR0Y2JpQWdmVnh1WEc0Z0lHRnpVM1J5YVc1bktDa2dlMXh1SUNBZ0lHTnZibk4wSUc5d1pYSmhkRzl5VTNSeWFXNW5JRDBnY1hWbGMzUnBiMjVOWVhKckxDQWdMeTh2WEc0Z0lDQWdJQ0FnSUNBZ2NHRnlkRk4wY21sdVp5QTlJSFJvYVhNdWNHRnlkQzVoYzFOMGNtbHVaeWdwTEZ4dUlDQWdJQ0FnSUNBZ0lITjBjbWx1WnlBOUlHQWtlM0JoY25SVGRISnBibWQ5Skh0dmNHVnlZWFJ2Y2xOMGNtbHVaMzFnTzF4dVhHNGdJQ0FnY21WMGRYSnVJSE4wY21sdVp6dGNiaUFnZlZ4dVhHNGdJR05zYjI1bEtDa2dleUJ5WlhSMWNtNGdjM1Z3WlhJdVkyeHZibVVvVDNCMGFXOXVZV3hRWVhKMFVHRnlkQ3dnZEdocGN5NXdZWEowS1RzZ2ZWeHVmVnh1WEc1bWRXNWpkR2x2YmlCd1lYSnpaVkJoY25Rb2NHRnlkQ3dnYm05a1pYTXNJSE4wWVhSbExDQmpZV3hzWW1GamF5a2dlMXh1SUNCcFppQW9ZMkZzYkdKaFkyc2dJVDA5SUc1MWJHd3BJSHRjYmlBZ0lDQmpiMjV6ZENCd1lYSnpaV1FnUFNCallXeHNZbUZqYXlncE8xeHVYRzRnSUNBZ2FXWWdLQ0Z3WVhKelpXUXBJSHRjYmlBZ0lDQWdJSEJoY25RdWNHRnljMlVvYm05a1pYTXNJSE4wWVhSbExDQmpZV3hzWW1GamF5azdYRzRnSUNBZ2ZWeHVJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lIQmhjblF1Y0dGeWMyVW9ibTlrWlhNc0lITjBZWFJsTENCallXeHNZbUZqYXlrN1hHNGdJSDFjYm4xY2JpSmRMQ0p1WVcxbGN5STZXeUp4ZFdWemRHbHZiazFoY21zaUxDSnpjR1ZqYVdGc1UzbHRZbTlzY3lJc0lrOXdkR2x2Ym1Gc1VHRnlkRkJoY25RaUxDSndZWEowSWl3aWRIbHdaU0lzSWs5d2RHbHZibUZzVUdGeWRGQmhjblJVZVhCbElpd2laMlYwVUdGeWRDSXNJbkJoY25ObElpd2libTlrWlhNaUxDSnpkR0YwWlNJc0ltTmhiR3hpWVdOcklpd2ljR0Z5YzJWa0lpd2ljR0Z5YzJWUVlYSjBJaXdpWVhOVGRISnBibWNpTENKdmNHVnlZWFJ2Y2xOMGNtbHVaeUlzSW5CaGNuUlRkSEpwYm1jaUxDSnpkSEpwYm1jaUxDSmpiRzl1WlNJc0lrNXZibFJsY20xcGJtRnNVR0Z5ZENKZExDSnRZWEJ3YVc1bmN5STZJa0ZCUVVFc1EwRkJXU3hYUVVGQkxFTkJRVU03T3p0Rk8zZENPMEZCUld0Q0xFZEJRV01zUTBGQlpDeFpRVUZqTzBGQlJXcENMRWRCUVhkQ0xFTkJRWGhDTEZsQlFYZENPMEZCUldZc1IwRkJhVUlzUTBGQmFrSXNWVUZCYVVJN096czdPenM3T3pzN096czdPenM0UkR0elF6czJSRHRwUlRzN096dDNSVHRuUlRzN096czdNRUk3T3pzN096czdPenM3VXpzN096czdPenRMT3pzN096czdPenM3T3pzN08wMDdlVVE3T3pzN096czdPenM3T3pzN096dDFRanM3U3pzN096czdkME03T3pzN096c3lRanM3T3pzN096czdjVVk3T3pzN096czdPenM3T3p0dFJUczdhVVE3T3pzN08wRkJSWFJFTEVkQlFVc3NRMEZCUjBFc1dVRkJXU3hIUVVGTFF5eFpRVUZqTEdkQ1FVRXZRa1FzV1VGQldUdEpRVVZEUlN4blFrRkJaMElzYVVKQlFYUkNMRkZCUVZFN1owUTdPMkZCUVVaQkxHZENRVUZuUWl4RFFVTjJRa01zU1VGQlNUc3JRenM3VVVGRFpDeEhRVUZMTEVOQlFVTkRMRWxCUVVrc1IwRkJSME1zVlVGQmIwSXNkVUpCUVVVc1JVRkJSeXhCUVVGSUxFTkJRVWM3YTBOQlJXaERSQ3hKUVVGSkxFTkRaR1FzUTBSalowSTdZMEZGVUVRc1NVRkJTU3hIUVVGSFFTeEpRVUZKTEVOQlFVTTdPenM3TzFsQlIyNUNSeXhIUVVGUExFVkJRVkJCTEVOQlFVODdiVUpCUVZCQkxGRkJRVkVzUTBGQlVrRXNUMEZCVHl4SFFVRkhMRU5CUVVNN1owSkJRMVFzVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUTBnc1NVRkJTVHRaUVVOc1FpeERRVUZET3pzN1dVRkZSRWtzUjBGQlN5eEZRVUZNUVN4RFFVRkxPMjFDUVVGTVFTeFJRVUZSTEVOQlFWSkJMRXRCUVVzc1EwRkJRME1zUzBGQlN5eEZRVUZGUXl4TFFVRkxMRVZCUVVWRExGRkJRVkVzUlVGQlJTeERRVUZETzJkQ1FVTTNRaXhIUVVGSExFTkJRVU5ETEUxQlFVMDdaMEpCUlZZc1IwRkJTeXhEUVVGRFVpeEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRSeXhQUVVGUE8yZENRVVY2UWswc1UwRkJVeXhEUVVGRFZDeEpRVUZKTEVWQlFVVkxMRXRCUVVzc1JVRkJSVU1zUzBGQlN5eEZRVUZGUXl4UlFVRlJMRU5CUVVNc1EwRkJRenRuUWtGRmVFTkRMRTFCUVUwc1IwRkJSeXhKUVVGSkxFTkJRVU03WjBKQlJXUXNUVUZCVFN4RFFVRkRRU3hOUVVGTk8xbEJRMllzUTBGQlF6czdPMWxCUlVSRkxFZEJRVkVzUlVGQlVrRXNRMEZCVVR0dFFrRkJVa0VzVVVGQlVTeERRVUZTUVN4UlFVRlJMRWRCUVVjc1EwRkJRenRuUWtGRFZpeEhRVUZMTEVOQlFVTkRMR05CUVdNc1IwRkJSMlFzV1VGQldTeEZRVU0zUW1Vc1ZVRkJWU3hIUVVGSExFbEJRVWtzUTBGQlExb3NTVUZCU1N4RFFVRkRWU3hSUVVGUkxFbEJReTlDUnl4TlFVRk5MRWRCUVVrc1EwRkJRU3hGUVVGbFJpeE5RVUZqTEVOQlFUTkNReXhWUVVGVkxFVkJRV3RDTEUxQlFVRXNRMEZCWmtRc1kwRkJZenRuUWtGRk4wTXNUVUZCVFN4RFFVRkRSU3hOUVVGTk8xbEJRMllzUTBGQlF6czdPMWxCUlVSRExFZEJRVXNzUlVGQlRFRXNRMEZCU3p0dFFrRkJURUVzVVVGQlVTeERRVUZTUVN4TFFVRkxMRWRCUVVjc1EwRkJRenRuUWtGQlF5eE5RVUZOTEhOQ1FXcERSMllzWjBKQlFXZENMR0ZCYVVOYVpTeERRVUZMTEZGQlFWZ3NTVUZCU3l4aFFVRlBaaXhuUWtGQlowSXNSVUZCUlN4SlFVRkpMRU5CUVVORExFbEJRVWs3V1VGQlJ5eERRVUZET3p0Tk96dEZRV3BEYUVKbExGbEJRV1U3YTBKQlFYaERhRUlzWjBKQlFXZENMRUU3VTBGdlF6VkNWU3hUUVVGVExFTkJRVU5VTEVsQlFVa3NSVUZCUlVzc1MwRkJTeXhGUVVGRlF5eExRVUZMTEVWQlFVVkRMRkZCUVZFc1JVRkJSU3hEUVVGRE8wbEJRMmhFTEVWQlFVVXNSVUZCUlVFc1VVRkJVU3hMUVVGTExFbEJRVWtzUlVGQlJTeERRVUZETzFGQlEzUkNMRWRCUVVzc1EwRkJRME1zVFVGQlRTeEhRVUZIUkN4UlFVRlJPMUZCUlhaQ0xFVkJRVVVzUjBGQlIwTXNUVUZCVFN4RlFVRkZMRU5CUVVNN1dVRkRXbElzU1VGQlNTeERRVUZEU1N4TFFVRkxMRU5CUVVORExFdEJRVXNzUlVGQlJVTXNTMEZCU3l4RlFVRkZReXhSUVVGUkxFTkJRVU1zUTBGQlF6dFJRVU55UXl4RFFVRkRPMGxCUTBnc1EwRkJReXhOUVVGTkxFTkJRVU03VVVGRFRsQXNTVUZCU1N4RFFVRkRTU3hMUVVGTExFTkJRVU5ETEV0QlFVc3NSVUZCUlVNc1MwRkJTeXhGUVVGRlF5eFJRVUZSTEVOQlFVTXNRMEZCUXp0SlFVTnlReXhEUVVGRE8wRkJRMGdzUTBGQlF5SjkiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX25vblRlcm1pbmFsID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbFwiKSk7XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHNlbGY7XG59XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gICAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgICB9XG59XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cbmZ1bmN0aW9uIF9nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgIT09IFwidW5kZWZpbmVkXCIgJiYgUmVmbGVjdC5nZXQpIHtcbiAgICAgICAgX2dldCA9IFJlZmxlY3QuZ2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIF9nZXQgPSBmdW5jdGlvbiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSB7XG4gICAgICAgICAgICB2YXIgYmFzZSA9IF9zdXBlclByb3BCYXNlKHRhcmdldCwgcHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKCFiYXNlKSByZXR1cm47XG4gICAgICAgICAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYmFzZSwgcHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKGRlc2MuZ2V0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlc2MuZ2V0LmNhbGwocmVjZWl2ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRlc2MudmFsdWU7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyIHx8IHRhcmdldCk7XG59XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7XG4gICAgfTtcbiAgICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufVxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gICAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gICAgfVxuICAgIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDoge1xuICAgICAgICBkZWZhdWx0OiBvYmpcbiAgICB9O1xufVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICAgIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgICAgIHJldHVybiBjYWxsO1xuICAgIH1cbiAgICByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTtcbn1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgICAgIG8uX19wcm90b19fID0gcDtcbiAgICAgICAgcmV0dXJuIG87XG4gICAgfTtcbiAgICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufVxuZnVuY3Rpb24gX3N1cGVyUHJvcEJhc2Uob2JqZWN0LCBwcm9wZXJ0eSkge1xuICAgIHdoaWxlKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSkpe1xuICAgICAgICBvYmplY3QgPSBfZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTtcbiAgICAgICAgaWYgKG9iamVjdCA9PT0gbnVsbCkgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG59XG52YXIgX3R5cGVvZiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIFwiQHN3Yy9oZWxwZXJzIC0gdHlwZW9mXCI7XG4gICAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG59O1xuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTtcbiAgICBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlO1xuICAgIHRyeSB7XG4gICAgICAgIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24oKSB7fSkpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkge1xuICAgIHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpO1xuICAgIHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHtcbiAgICAgICAgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7XG4gICAgICAgIGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7XG4gICAgICAgICAgICB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yO1xuICAgICAgICAgICAgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7XG4gICAgfTtcbn1cbnZhciBDb2xsZWN0aW9uT2ZQYXJ0c1BhcnQgPSAvKiNfX1BVUkVfXyovIGZ1bmN0aW9uKE5vblRlcm1pbmFsUGFydCkge1xuICAgIF9pbmhlcml0cyhDb2xsZWN0aW9uT2ZQYXJ0c1BhcnQsIE5vblRlcm1pbmFsUGFydCk7XG4gICAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihDb2xsZWN0aW9uT2ZQYXJ0c1BhcnQpO1xuICAgIGZ1bmN0aW9uIENvbGxlY3Rpb25PZlBhcnRzUGFydCh0eXBlLCBwYXJ0KSB7XG4gICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDb2xsZWN0aW9uT2ZQYXJ0c1BhcnQpO1xuICAgICAgICB2YXIgX3RoaXM7XG4gICAgICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgdHlwZSk7XG4gICAgICAgIF90aGlzLnBhcnQgPSBwYXJ0O1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIF9jcmVhdGVDbGFzcyhDb2xsZWN0aW9uT2ZQYXJ0c1BhcnQsIFtcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImdldFBhcnRcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRQYXJ0KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJhc1N0cmluZ1wiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFzU3RyaW5nKG9wZXJhdG9yU3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgdmFyIHBhcnRTdHJpbmcgPSB0aGlzLnBhcnQuYXNTdHJpbmcoKSwgc3RyaW5nID0gXCJcIi5jb25jYXQocGFydFN0cmluZykuY29uY2F0KG9wZXJhdG9yU3RyaW5nKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiY2xvbmVcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjbG9uZShQYXJ0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9nZXQoX2dldFByb3RvdHlwZU9mKENvbGxlY3Rpb25PZlBhcnRzUGFydC5wcm90b3R5cGUpLCBcImNsb25lXCIsIHRoaXMpLmNhbGwodGhpcywgUGFydCwgdGhpcy5wYXJ0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIF0pO1xuICAgIHJldHVybiBDb2xsZWN0aW9uT2ZQYXJ0c1BhcnQ7XG59KF9ub25UZXJtaW5hbC5kZWZhdWx0KTtcbmV4cG9ydHMuZGVmYXVsdCA9IENvbGxlY3Rpb25PZlBhcnRzUGFydDtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1TDNOeVl5OXdZWEowTDI1dmJsUmxjbTFwYm1Gc0wyTnZiR3hsWTNScGIyNVBabEJoY25SekxtcHpJbDBzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWx3aWRYTmxJSE4wY21samRGd2lPMXh1WEc1cGJYQnZjblFnVG05dVZHVnliV2x1WVd4UVlYSjBJR1p5YjIwZ1hDSXVMaTh1TGk5d1lYSjBMMjV2YmxSbGNtMXBibUZzWENJN1hHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElHTnNZWE56SUVOdmJHeGxZM1JwYjI1UFpsQmhjblJ6VUdGeWRDQmxlSFJsYm1SeklFNXZibFJsY20xcGJtRnNVR0Z5ZENCN1hHNGdJR052Ym5OMGNuVmpkRzl5S0hSNWNHVXNJSEJoY25RcElIdGNiaUFnSUNCemRYQmxjaWgwZVhCbEtUdGNibHh1SUNBZ0lIUm9hWE11Y0dGeWRDQTlJSEJoY25RN1hHNGdJSDFjYmx4dUlDQm5aWFJRWVhKMEtDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbkJoY25RN1hHNGdJSDFjYmlBZ1hHNGdJR0Z6VTNSeWFXNW5LRzl3WlhKaGRHOXlVM1J5YVc1bktTQjdYRzRnSUNBZ1kyOXVjM1FnY0dGeWRGTjBjbWx1WnlBOUlIUm9hWE11Y0dGeWRDNWhjMU4wY21sdVp5Z3BMRnh1SUNBZ0lDQWdJQ0FnSUhOMGNtbHVaeUE5SUdBa2UzQmhjblJUZEhKcGJtZDlKSHR2Y0dWeVlYUnZjbE4wY21sdVozMWdPMXh1WEc0Z0lDQWdjbVYwZFhKdUlITjBjbWx1Wnp0Y2JpQWdmVnh1WEc0Z0lHTnNiMjVsS0ZCaGNuUXBJSHNnY21WMGRYSnVJSE4xY0dWeUxtTnNiMjVsS0ZCaGNuUXNJSFJvYVhNdWNHRnlkQ2s3SUgxY2JuMWNiaUpkTENKdVlXMWxjeUk2V3lKRGIyeHNaV04wYVc5dVQyWlFZWEowYzFCaGNuUWlMQ0owZVhCbElpd2ljR0Z5ZENJc0ltZGxkRkJoY25RaUxDSmhjMU4wY21sdVp5SXNJbTl3WlhKaGRHOXlVM1J5YVc1bklpd2ljR0Z5ZEZOMGNtbHVaeUlzSW5OMGNtbHVaeUlzSW1Oc2IyNWxJaXdpVUdGeWRDSXNJazV2YmxSbGNtMXBibUZzVUdGeWRDSmRMQ0p0WVhCd2FXNW5jeUk2SWtGQlFVRXNRMEZCV1N4WFFVRkJMRU5CUVVNN096dEZPM2RDTzBGQlJXVXNSMEZCZDBJc1EwRkJlRUlzV1VGQmQwSTdPenM3T3pzN096czdPenM3T3pzNFJEdHpRenMyUkR0cFJUczdPenQzUlR0blJUczdPenM3TUVJN096czdPenM3T3pzN1V6czdPenM3T3p0TE96czdPenM3T3pzN096czdPMDA3ZVVRN096czdPenM3T3pzN096czdPenQxUWpzN1N6czdPenM3ZDBNN096czdPenN5UWpzN096czdPenM3Y1VZN096czdPenM3T3pzN096dHRSVHM3YVVRN096czdPMGxCUlM5Q1FTeHhRa0ZCY1VJc2FVSkJRVE5DTEZGQlFWRTdjVVE3TzJGQlFVWkJMSEZDUVVGeFFpeERRVU0xUWtNc1NVRkJTU3hGUVVGRlF5eEpRVUZKTzI5RU96dHJRMEZEWkVRc1NVRkJTU3hEUTA1a0xFTkVUV2RDTzJOQlJWQkRMRWxCUVVrc1IwRkJSMEVzU1VGQlNTeERRVUZET3pzN096dFpRVWR1UWtNc1IwRkJUeXhGUVVGUVFTeERRVUZQTzIxQ1FVRlFRU3hSUVVGUkxFTkJRVkpCTEU5QlFVOHNSMEZCUnl4RFFVRkRPMmRDUVVOVUxFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTkVMRWxCUVVrN1dVRkRiRUlzUTBGQlF6czdPMWxCUlVSRkxFZEJRVkVzUlVGQlVrRXNRMEZCVVR0dFFrRkJVa0VzVVVGQlVTeERRVUZTUVN4UlFVRlJMRU5CUVVORExHTkJRV01zUlVGQlJTeERRVUZETzJkQ1FVTjRRaXhIUVVGTExFTkJRVU5ETEZWQlFWVXNSMEZCUnl4SlFVRkpMRU5CUVVOS0xFbEJRVWtzUTBGQlEwVXNVVUZCVVN4SlFVTXZRa2NzVFVGQlRTeEhRVUZKTEVOQlFVRXNSVUZCWlVZc1RVRkJZeXhEUVVFelFrTXNWVUZCVlN4RlFVRnJRaXhOUVVGQkxFTkJRV1pFTEdOQlFXTTdaMEpCUlRkRExFMUJRVTBzUTBGQlEwVXNUVUZCVFR0WlFVTm1MRU5CUVVNN096dFpRVVZFUXl4SFFVRkxMRVZCUVV4QkxFTkJRVXM3YlVKQlFVeEJMRkZCUVZFc1EwRkJVa0VzUzBGQlN5eERRVUZEUXl4SlFVRkpMRVZCUVVVc1EwRkJRenRuUWtGQlF5eE5RVUZOTEhOQ1FXeENSRlFzY1VKQlFYRkNMR0ZCYTBKaVVTeERRVUZMTEZGQlFWZ3NTVUZCU3l4aFFVRlBReXhKUVVGSkxFVkJRVVVzU1VGQlNTeERRVUZEVUN4SlFVRkpPMWxCUVVjc1EwRkJRenM3VFRzN1JVRnNRa2hSTEZsQlFXVTdhMEpCUVRkRFZpeHhRa0ZCY1VJc1FTSjkiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgQ29sbGVjdGlvbk9mUGFydHNQYXJ0IGZyb20gXCIuL2NvbGxlY3Rpb25PZlBhcnRzXCI7XG5cbmltcG9ydCB7IHB1c2ggfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBPbmVPck1vcmVQYXJ0c1BhcnRUeXBlIH0gZnJvbSBcIi4uLy4uL3BhcnRUeXBlc1wiO1xuXG5jb25zdCB7IHBsdXMgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPbmVPck1vcmVQYXJ0c1BhcnQgZXh0ZW5kcyBDb2xsZWN0aW9uT2ZQYXJ0c1BhcnQge1xuICBjb25zdHJ1Y3RvcihwYXJ0KSB7XG4gICAgY29uc3QgdHlwZSA9IE9uZU9yTW9yZVBhcnRzUGFydFR5cGU7IC8vL1xuXG4gICAgc3VwZXIodHlwZSwgcGFydCk7XG4gIH1cblxuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGNvbnN0IHBhcnQgPSB0aGlzLmdldFBhcnQoKSxcbiAgICAgICAgICBwYXJ0Tm9kZXMgPSBbXSxcbiAgICAgICAgICBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpO1xuXG4gICAgcGFyc2VkID0gcGFyc2VQYXJ0KHBhcnQsIHBhcnROb2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIHB1c2gobm9kZXMsIHBhcnROb2Rlcyk7XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgb3BlcmF0b3JTdHJpbmcgPSBwbHVzLCAgLy8vXG4gICAgICAgICAgc3RyaW5nID0gc3VwZXIuYXNTdHJpbmcob3BlcmF0b3JTdHJpbmcpO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIGNsb25lKCkgeyByZXR1cm4gc3VwZXIuY2xvbmUoT25lT3JNb3JlUGFydHNQYXJ0KTsgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVBhcnQocGFydCwgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICBsZXQgcGFyc2VkO1xuXG4gIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIHN0YXRlLCAoKSA9PiB7XG4gICAgICBsZXQgcGFyc2VkID0gY2FsbGJhY2soKTtcblxuICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgcGFyc2VkID0gcGFyc2VQYXJ0KHBhcnQsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFyc2VkO1xuICAgIH0pXG4gIH0gZWxzZSB7XG4gICAgcGFyc2VkID0gcGFydC5wYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIHBhcnNlUGFydChwYXJ0LCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJzZWQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgQ29sbGVjdGlvbk9mUGFydHNQYXJ0IGZyb20gXCIuL2NvbGxlY3Rpb25PZlBhcnRzXCI7XG5cbmltcG9ydCB7IFplcm9Pck1vcmVQYXJ0c1BhcnRUeXBlIH0gZnJvbSBcIi4uLy4uL3BhcnRUeXBlc1wiO1xuXG5jb25zdCB7IGFzdGVyaXNrIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgWmVyb09yTW9yZVBhcnRzUGFydCBleHRlbmRzIENvbGxlY3Rpb25PZlBhcnRzUGFydCB7XG4gIGNvbnN0cnVjdG9yKHBhcnQpIHtcbiAgICBjb25zdCB0eXBlID0gWmVyb09yTW9yZVBhcnRzUGFydFR5cGU7IC8vL1xuXG4gICAgc3VwZXIodHlwZSwgcGFydCk7XG4gIH1cblxuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGNvbnN0IHBhcnQgPSB0aGlzLmdldFBhcnQoKTtcblxuICAgIHBhcnNlUGFydChwYXJ0LCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcblxuICAgIHBhcnNlZCA9IHRydWU7XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgb3BlcmF0b3JTdHJpbmcgPSBhc3RlcmlzaywgIC8vL1xuICAgICAgICAgIHN0cmluZyA9IHN1cGVyLmFzU3RyaW5nKG9wZXJhdG9yU3RyaW5nKTtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBjbG9uZSgpIHsgcmV0dXJuIHN1cGVyLmNsb25lKFplcm9Pck1vcmVQYXJ0c1BhcnQpOyB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlUGFydChwYXJ0LCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gIGxldCBwYXJzZWQ7XG5cbiAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgcGFyc2VkID0gY2FsbGJhY2soKTtcblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBwYXJ0LnBhcnNlKG5vZGVzLCBzdGF0ZSwgKCkgPT4gcGFyc2VQYXJ0KHBhcnQsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcGFyc2VkID0gcGFydC5wYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIHBhcnNlUGFydChwYXJ0LCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFyc2VkO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IExvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUsIFF1YW50aWZpZXJSdWxlTmFtZSwgUnVsZU5hbWVSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzTm9kZUNob2ljZU5vZGUobm9kZSkge1xuICBsZXQgbm9kZU5vQ2hvaWNlTm9kZSA9IGZhbHNlO1xuXG4gIGNvbnN0IG5vZGVUZXJtaW5hbE5vZGUgPSBub2RlLmlzVGVybWluYWxOb2RlKCk7XG5cbiAgaWYgKG5vZGVUZXJtaW5hbE5vZGUpIHtcbiAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSBub2RlLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxOb2RlQ29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCk7XG5cbiAgICBub2RlTm9DaG9pY2VOb2RlID0gKHRlcm1pbmFsTm9kZUNvbnRlbnQgPT09IFwifFwiKTtcbiAgfVxuXG4gIHJldHVybiBub2RlTm9DaG9pY2VOb2RlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOb2RlUnVsZU5hbWVOb2RlKG5vZGUpIHtcbiAgbGV0IG5vZGVSdWxlTmFtZU5vZGUgPSBmYWxzZTtcblxuICBjb25zdCBub2RlVGVybWluYWxOb2RlID0gbm9kZS5pc1Rlcm1pbmFsTm9kZSgpLFxuICAgICAgICBub2RlTm9uVGVybWluYWxOb2RlID0gIW5vZGVUZXJtaW5hbE5vZGU7XG5cbiAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICBub25UZXJtaW5hbE5vZGVSdWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpO1xuXG4gICAgbm9kZVJ1bGVOYW1lTm9kZSA9IChub25UZXJtaW5hbE5vZGVSdWxlTmFtZSA9PT0gUnVsZU5hbWVSdWxlTmFtZSk7XG4gIH1cblxuICByZXR1cm4gbm9kZVJ1bGVOYW1lTm9kZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTm9kZVF1YW50aWZpZXJOb2RlKG5vZGUpIHtcbiAgbGV0IG5vZGVRdWFudGlmaWVyTm9kZSA9IGZhbHNlO1xuXG4gIGNvbnN0IG5vZGVOb25UZXJtaW5hbE5vZGUgPSBub2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgIHJ1bGVOYW1lUXVhbnRpZmllclJ1bGVOYW1lID0gKHJ1bGVOYW1lID09PSBRdWFudGlmaWVyUnVsZU5hbWUpO1xuXG4gICAgbm9kZVF1YW50aWZpZXJOb2RlID0gcnVsZU5hbWVRdWFudGlmaWVyUnVsZU5hbWU7ICAvLy9cbiAgfVxuXG4gIHJldHVybiBub2RlUXVhbnRpZmllck5vZGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vZGVMb29rQWhlYWRNb2RpZmllck5vZGUobm9kZSkge1xuICBsZXQgbm9kZUxvb2tBaGVhZE1vZGlmaWVyTm9kZSA9IGZhbHNlO1xuXG4gIGNvbnN0IG5vZGVOb25UZXJtaW5hbE5vZGUgPSBub2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgIHJ1bGVOYW1lTG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSA9IChydWxlTmFtZSA9PT0gTG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSk7XG5cbiAgICBub2RlTG9va0FoZWFkTW9kaWZpZXJOb2RlID0gcnVsZU5hbWVMb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lOyAgLy8vXG4gIH1cblxuICByZXR1cm4gbm9kZUxvb2tBaGVhZE1vZGlmaWVyTm9kZTtcblxufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVsZU5hbWVGcm9tUXVhbnRpZmllck5vZGUocXVhbnRpZmllck5vZGUpIHtcbiAgbGV0IG5vblRlcm1pbmFsTm9kZTtcblxuICBub25UZXJtaW5hbE5vZGUgPSBxdWFudGlmaWVyTm9kZTsgLy8vXG5cbiAgY29uc3QgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgIGZpcnN0Q2hpbGROb2RlID0gZmlyc3QoY2hpbGROb2Rlcyk7XG5cbiAgbm9uVGVybWluYWxOb2RlID0gZmlyc3RDaGlsZE5vZGU7ICAvLy9cblxuICBjb25zdCBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpO1xuXG4gIHJldHVybiBydWxlTmFtZTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuaW1wb3J0IE9wdGlvbmFsUGFydFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWwvb3B0aW9uYWxQYXJ0XCI7XG5pbXBvcnQgT25lT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsL29uZU9yTW9yZVBhcnRzXCI7XG5pbXBvcnQgWmVyb09yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC96ZXJvT3JNb3JlUGFydHNcIjtcblxuaW1wb3J0IHsgbGFzdCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IGlzTm9kZVF1YW50aWZpZXJOb2RlLCBydWxlTmFtZUZyb21RdWFudGlmaWVyTm9kZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYm5mXCI7XG5pbXBvcnQgeyBPcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSwgT25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lLCBaZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYXJ0Qk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgbm9kZXMgPSBjaGlsZE5vZGVzLnNsaWNlKCksXG4gICAgICAgICAgcGFydCA9IHBhcnRGcm9tTm9kZXMobm9kZXMpO1xuXG4gICAgcmV0dXJuIHBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoUGFydEJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuXG5mdW5jdGlvbiBwYXJ0RnJvbU5vZGVzKG5vZGVzKSB7XG4gIGxldCBwYXJ0ID0gbnVsbDtcblxuICBjb25zdCBub2Rlc0xlbmd0aCA9IG5vZGVzLmxlbmd0aDtcblxuICBpZiAobm9kZXNMZW5ndGggPT09IDEpIHtcbiAgICBjb25zdCBub2RlID0gbm9kZXMucG9wKCksXG4gICAgICAgICAgbG9va0FoZWFkID0gZmFsc2U7XG5cbiAgICBwYXJ0ID0gbm9kZS5nZW5lcmF0ZVBhcnQobG9va0FoZWFkKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBsYXN0Tm9kZVF1YW50aWZpZXJOb2RlID0gaXNMYXN0Tm9kZVF1YW50aWZpZXJOb2RlKG5vZGVzKTtcblxuICAgIGlmIChsYXN0Tm9kZVF1YW50aWZpZXJOb2RlKSB7XG4gICAgICBjb25zdCBub2RlID0gbm9kZXMucG9wKCksXG4gICAgICAgICAgICBxdWFudGlmaWVyTm9kZSA9IG5vZGU7ICAvLy9cblxuICAgICAgcGFydCA9IHBhcnRGcm9tTm9kZXMobm9kZXMpO1xuXG4gICAgICBjb25zdCBydWxlTmFtZSA9IHJ1bGVOYW1lRnJvbVF1YW50aWZpZXJOb2RlKHF1YW50aWZpZXJOb2RlKSxcbiAgICAgICAgICAgIGNvbGxlY3Rpb25PZlBhcnRzUGFydCA9IGNvbGxlY3Rpb25PZlBhcnRzUGFydEZyb21QYXJ0QW5kUnVsZU5hbWUocGFydCwgcnVsZU5hbWUpO1xuXG4gICAgICBwYXJ0ID0gY29sbGVjdGlvbk9mUGFydHNQYXJ0OyAvLy9cbiAgICB9IGVsc2Uge1xuICAgICAgbm9kZXMuc2hpZnQoKTtcblxuICAgICAgcGFydCA9IHBhcnRGcm9tTm9kZXMobm9kZXMpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0O1xufVxuXG5mdW5jdGlvbiBpc0xhc3ROb2RlUXVhbnRpZmllck5vZGUobm9kZXMpIHtcbiAgY29uc3QgbGFzdE5vZGUgPSBsYXN0KG5vZGVzKSxcbiAgICAgICAgbGFzdE5vZGVRdWFudGlmaWVyTm9kZSA9IGlzTm9kZVF1YW50aWZpZXJOb2RlKGxhc3ROb2RlKTtcblxuICByZXR1cm4gbGFzdE5vZGVRdWFudGlmaWVyTm9kZTtcbn1cblxuZnVuY3Rpb24gY29sbGVjdGlvbk9mUGFydHNQYXJ0RnJvbVBhcnRBbmRSdWxlTmFtZShwYXJ0LCBydWxlTmFtZSkge1xuICBsZXQgY29sbGVjdGlvbk9mUGFydHNQYXJ0O1xuXG4gIHN3aXRjaCAocnVsZU5hbWUpIHtcbiAgICBjYXNlIE9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lIDpcbiAgICAgIGNvbnN0IG9wdGlvbmFsUGFydFBhcnQgPSBuZXcgT3B0aW9uYWxQYXJ0UGFydChwYXJ0KTtcblxuICAgICAgY29sbGVjdGlvbk9mUGFydHNQYXJ0ID0gb3B0aW9uYWxQYXJ0UGFydDsgLy8vXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgT25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lIDpcbiAgICAgIGNvbnN0IG9uZU9yTW9yZVBhcnRzUGFydCA9IG5ldyBPbmVPck1vcmVQYXJ0c1BhcnQocGFydCk7XG5cbiAgICAgIGNvbGxlY3Rpb25PZlBhcnRzUGFydCA9IG9uZU9yTW9yZVBhcnRzUGFydDsgLy8vXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgWmVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSA6XG4gICAgICBjb25zdCB6ZXJvT3JNb3JlUGFydHNQYXJ0ID0gbmV3IFplcm9Pck1vcmVQYXJ0c1BhcnQocGFydCk7XG5cbiAgICAgIGNvbGxlY3Rpb25PZlBhcnRzUGFydCA9IHplcm9Pck1vcmVQYXJ0c1BhcnQ7ICAvLy9cbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIGNvbGxlY3Rpb25PZlBhcnRzUGFydDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfb2NjYW1MZXhlcnMgPSByZXF1aXJlKFwib2NjYW0tbGV4ZXJzXCIpO1xudmFyIF9ub25UZXJtaW5hbCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uLy4uL3BhcnQvbm9uVGVybWluYWxcIikpO1xudmFyIF9jb25zdGFudHMgPSByZXF1aXJlKFwiLi4vLi4vY29uc3RhbnRzXCIpO1xudmFyIF9wYXJ0VHlwZXMgPSByZXF1aXJlKFwiLi4vLi4vcGFydFR5cGVzXCIpO1xuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gICAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gICAgfVxuICAgIHJldHVybiBzZWxmO1xufVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG59XG5mdW5jdGlvbiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ICE9PSBcInVuZGVmaW5lZFwiICYmIFJlZmxlY3QuZ2V0KSB7XG4gICAgICAgIF9nZXQgPSBSZWZsZWN0LmdldDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBfZ2V0ID0gZnVuY3Rpb24gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlcikge1xuICAgICAgICAgICAgdmFyIGJhc2UgPSBfc3VwZXJQcm9wQmFzZSh0YXJnZXQsIHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmICghYmFzZSkgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGJhc2UsIHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmIChkZXNjLmdldCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZXNjLmdldC5jYWxsKHJlY2VpdmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkZXNjLnZhbHVlO1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlciB8fCB0YXJnZXQpO1xufVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgICAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICAgIH07XG4gICAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn1cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICAgIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICAgIH1cbiAgICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHtcbiAgICAgICAgZGVmYXVsdDogb2JqXG4gICAgfTtcbn1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgICAgICByZXR1cm4gY2FsbDtcbiAgICB9XG4gICAgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgICAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgICAgIHJldHVybiBvO1xuICAgIH07XG4gICAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cbmZ1bmN0aW9uIF9zdXBlclByb3BCYXNlKG9iamVjdCwgcHJvcGVydHkpIHtcbiAgICB3aGlsZSghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpKXtcbiAgICAgICAgb2JqZWN0ID0gX2dldFByb3RvdHlwZU9mKG9iamVjdCk7XG4gICAgICAgIGlmIChvYmplY3QgPT09IG51bGwpIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xufVxudmFyIF90eXBlb2YgPSBmdW5jdGlvbihvYmopIHtcbiAgICBcIkBzd2MvaGVscGVycyAtIHR5cGVvZlwiO1xuICAgIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xufTtcbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgICBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uKCkge30pKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHtcbiAgICB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7XG4gICAgICAgIHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0O1xuICAgICAgICBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkge1xuICAgICAgICAgICAgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgIHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpO1xuICAgIH07XG59XG52YXIgZXhjbGFtYXRpb25NYXJrID0gX29jY2FtTGV4ZXJzLnNwZWNpYWxTeW1ib2xzLmV4Y2xhbWF0aW9uTWFyaztcbnZhciBSdWxlTmFtZVBhcnQgPSAvKiNfX1BVUkVfXyovIGZ1bmN0aW9uKE5vblRlcm1pbmFsUGFydCkge1xuICAgIF9pbmhlcml0cyhSdWxlTmFtZVBhcnQsIE5vblRlcm1pbmFsUGFydCk7XG4gICAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihSdWxlTmFtZVBhcnQpO1xuICAgIGZ1bmN0aW9uIFJ1bGVOYW1lUGFydChydWxlTmFtZSkge1xuICAgICAgICB2YXIgbG9va0FoZWFkID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcbiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFJ1bGVOYW1lUGFydCk7XG4gICAgICAgIHZhciBfdGhpcztcbiAgICAgICAgdmFyIHR5cGUgPSBfcGFydFR5cGVzLlJ1bGVOYW1lUGFydFR5cGU7IC8vL1xuICAgICAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHR5cGUpO1xuICAgICAgICBfdGhpcy5ydWxlTmFtZSA9IHJ1bGVOYW1lO1xuICAgICAgICBfdGhpcy5sb29rQWhlYWQgPSBsb29rQWhlYWQ7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgX2NyZWF0ZUNsYXNzKFJ1bGVOYW1lUGFydCwgW1xuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiZ2V0UnVsZU5hbWVcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSdWxlTmFtZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ydWxlTmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImlzTG9va0FoZWFkXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gaXNMb29rQWhlYWQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9va0FoZWFkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiaXNSdWxlTmFtZVBhcnRcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBpc1J1bGVOYW1lUGFydCgpIHtcbiAgICAgICAgICAgICAgICB2YXIgcnVsZU5hbWVQYXJ0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcnVsZU5hbWVQYXJ0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwic2V0TG9va0FoZWFkXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gc2V0TG9va0FoZWFkKGxvb2tBaGVhZCkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9va0FoZWFkID0gbG9va0FoZWFkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiZmluZFJ1bGVcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBmaW5kUnVsZShzdGF0ZSkge1xuICAgICAgICAgICAgICAgIHZhciBydWxlTWFwID0gc3RhdGUuZ2V0UnVsZU1hcCgpLCBydWxlID0gcnVsZU1hcFt0aGlzLnJ1bGVOYW1lXSB8fCBudWxsOyAvLy9cbiAgICAgICAgICAgICAgICByZXR1cm4gcnVsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcInBhcnNlXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHZhciBwYXJzZWQ7XG4gICAgICAgICAgICAgICAgdmFyIHJ1bGUgPSB0aGlzLmZpbmRSdWxlKHN0YXRlKTtcbiAgICAgICAgICAgICAgICBpZiAocnVsZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcnVsZU5vZGUgPSBydWxlLnBhcnNlKHN0YXRlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZCA9IHJ1bGVOb2RlICE9PSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2Rlcy5wdXNoKHJ1bGVOb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiYXNTdHJpbmdcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBhc1N0cmluZygpIHtcbiAgICAgICAgICAgICAgICB2YXIgbG9va0FoZWFkU3RyaW5nID0gdGhpcy5sb29rQWhlYWQgPyBleGNsYW1hdGlvbk1hcmsgOiBfY29uc3RhbnRzLkVNUFRZX1NUUklORywgc3RyaW5nID0gXCJcIi5jb25jYXQodGhpcy5ydWxlTmFtZSkuY29uY2F0KGxvb2tBaGVhZFN0cmluZyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImNsb25lXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xvbmUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9nZXQoX2dldFByb3RvdHlwZU9mKFJ1bGVOYW1lUGFydC5wcm90b3R5cGUpLCBcImNsb25lXCIsIHRoaXMpLmNhbGwodGhpcywgUnVsZU5hbWVQYXJ0LCB0aGlzLnJ1bGVOYW1lLCB0aGlzLmxvb2tBaGVhZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICBdKTtcbiAgICByZXR1cm4gUnVsZU5hbWVQYXJ0O1xufShfbm9uVGVybWluYWwuZGVmYXVsdCk7XG5leHBvcnRzLmRlZmF1bHQgPSBSdWxlTmFtZVBhcnQ7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUwzTnlZeTl3WVhKMEwyNXZibFJsY20xcGJtRnNMM0oxYkdWT1lXMWxMbXB6SWwwc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklsd2lkWE5sSUhOMGNtbGpkRndpTzF4dVhHNXBiWEJ2Y25RZ2V5QnpjR1ZqYVdGc1UzbHRZbTlzY3lCOUlHWnliMjBnWENKdlkyTmhiUzFzWlhobGNuTmNJanRjYmx4dWFXMXdiM0owSUU1dmJsUmxjbTFwYm1Gc1VHRnlkQ0JtY205dElGd2lMaTR2TGk0dmNHRnlkQzl1YjI1VVpYSnRhVzVoYkZ3aU8xeHVYRzVwYlhCdmNuUWdleUJGVFZCVVdWOVRWRkpKVGtjZ2ZTQm1jbTl0SUZ3aUxpNHZMaTR2WTI5dWMzUmhiblJ6WENJN1hHNXBiWEJ2Y25RZ2V5QlNkV3hsVG1GdFpWQmhjblJVZVhCbElIMGdabkp2YlNCY0lpNHVMeTR1TDNCaGNuUlVlWEJsYzF3aU8xeHVYRzVqYjI1emRDQjdJR1Y0WTJ4aGJXRjBhVzl1VFdGeWF5QjlJRDBnYzNCbFkybGhiRk41YldKdmJITTdYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJR05zWVhOeklGSjFiR1ZPWVcxbFVHRnlkQ0JsZUhSbGJtUnpJRTV2YmxSbGNtMXBibUZzVUdGeWRDQjdYRzRnSUdOdmJuTjBjblZqZEc5eUtISjFiR1ZPWVcxbExDQnNiMjlyUVdobFlXUWdQU0JtWVd4elpTa2dlMXh1SUNBZ0lHTnZibk4wSUhSNWNHVWdQU0JTZFd4bFRtRnRaVkJoY25SVWVYQmxPeUF2THk5Y2JseHVJQ0FnSUhOMWNHVnlLSFI1Y0dVcE8xeHVYRzRnSUNBZ2RHaHBjeTV5ZFd4bFRtRnRaU0E5SUhKMWJHVk9ZVzFsTzF4dVhHNGdJQ0FnZEdocGN5NXNiMjlyUVdobFlXUWdQU0JzYjI5clFXaGxZV1E3WEc0Z0lIMWNiaUFnWEc0Z0lHZGxkRkoxYkdWT1lXMWxLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG5KMWJHVk9ZVzFsTzF4dUlDQjlYRzVjYmlBZ2FYTk1iMjlyUVdobFlXUW9LU0I3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11Ykc5dmEwRm9aV0ZrTzF4dUlDQjlYRzVjYmlBZ2FYTlNkV3hsVG1GdFpWQmhjblFvS1NCN1hHNGdJQ0FnWTI5dWMzUWdjblZzWlU1aGJXVlFZWEowSUQwZ2RISjFaVHRjYmx4dUlDQWdJSEpsZEhWeWJpQnlkV3hsVG1GdFpWQmhjblE3WEc0Z0lIMWNibHh1SUNCelpYUk1iMjlyUVdobFlXUW9iRzl2YTBGb1pXRmtLU0I3WEc0Z0lDQWdkR2hwY3k1c2IyOXJRV2hsWVdRZ1BTQnNiMjlyUVdobFlXUTdYRzRnSUgxY2JseHVJQ0JtYVc1a1VuVnNaU2h6ZEdGMFpTa2dlMXh1SUNBZ0lHTnZibk4wSUhKMWJHVk5ZWEFnUFNCemRHRjBaUzVuWlhSU2RXeGxUV0Z3S0Nrc1hHNGdJQ0FnSUNBZ0lDQWdjblZzWlNBOUlISjFiR1ZOWVhCYmRHaHBjeTV5ZFd4bFRtRnRaVjBnZkh3Z2JuVnNiRHNnSUM4dkwxeHVYRzRnSUNBZ2NtVjBkWEp1SUhKMWJHVTdYRzRnSUgxY2JseHVJQ0J3WVhKelpTaHViMlJsY3l3Z2MzUmhkR1VzSUdOaGJHeGlZV05yS1NCN1hHNGdJQ0FnYkdWMElIQmhjbk5sWkR0Y2JseHVJQ0FnSUdOdmJuTjBJSEoxYkdVZ1BTQjBhR2x6TG1acGJtUlNkV3hsS0hOMFlYUmxLVHRjYmx4dUlDQWdJR2xtSUNoeWRXeGxJRDA5UFNCdWRXeHNLU0I3WEc0Z0lDQWdJQ0J3WVhKelpXUWdQU0JtWVd4elpUdGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnWTI5dWMzUWdjblZzWlU1dlpHVWdQU0J5ZFd4bExuQmhjbk5sS0hOMFlYUmxMQ0JqWVd4c1ltRmpheWs3WEc1Y2JpQWdJQ0FnSUhCaGNuTmxaQ0E5SUNoeWRXeGxUbTlrWlNBaFBUMGdiblZzYkNrN1hHNWNiaUFnSUNBZ0lHbG1JQ2h3WVhKelpXUXBJSHRjYmlBZ0lDQWdJQ0FnYm05a1pYTXVjSFZ6YUNoeWRXeGxUbTlrWlNrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dVhHNGdJQ0FnY21WMGRYSnVJSEJoY25ObFpEdGNiaUFnZlZ4dVhHNGdJR0Z6VTNSeWFXNW5LQ2tnZTF4dUlDQWdJR052Ym5OMElHeHZiMnRCYUdWaFpGTjBjbWx1WnlBOUlIUm9hWE11Ykc5dmEwRm9aV0ZrSUQ5Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1Y0WTJ4aGJXRjBhVzl1VFdGeWF5QTZYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lFVk5VRlJaWDFOVVVrbE9SeXhjYmlBZ0lDQWdJQ0FnSUNCemRISnBibWNnUFNCZ0pIdDBhR2x6TG5KMWJHVk9ZVzFsZlNSN2JHOXZhMEZvWldGa1UzUnlhVzVuZldBN1hHNWNiaUFnSUNCeVpYUjFjbTRnYzNSeWFXNW5PMXh1SUNCOVhHNWNiaUFnWTJ4dmJtVW9LU0I3SUhKbGRIVnliaUJ6ZFhCbGNpNWpiRzl1WlNoU2RXeGxUbUZ0WlZCaGNuUXNJSFJvYVhNdWNuVnNaVTVoYldVc0lIUm9hWE11Ykc5dmEwRm9aV0ZrS1RzZ2ZWeHVmVnh1SWwwc0ltNWhiV1Z6SWpwYkltVjRZMnhoYldGMGFXOXVUV0Z5YXlJc0luTndaV05wWVd4VGVXMWliMnh6SWl3aVVuVnNaVTVoYldWUVlYSjBJaXdpY25Wc1pVNWhiV1VpTENKc2IyOXJRV2hsWVdRaUxDSjBlWEJsSWl3aVVuVnNaVTVoYldWUVlYSjBWSGx3WlNJc0ltZGxkRkoxYkdWT1lXMWxJaXdpYVhOTWIyOXJRV2hsWVdRaUxDSnBjMUoxYkdWT1lXMWxVR0Z5ZENJc0luSjFiR1ZPWVcxbFVHRnlkQ0lzSW5ObGRFeHZiMnRCYUdWaFpDSXNJbVpwYm1SU2RXeGxJaXdpYzNSaGRHVWlMQ0p5ZFd4bFRXRndJaXdpWjJWMFVuVnNaVTFoY0NJc0luSjFiR1VpTENKd1lYSnpaU0lzSW01dlpHVnpJaXdpWTJGc2JHSmhZMnNpTENKd1lYSnpaV1FpTENKeWRXeGxUbTlrWlNJc0luQjFjMmdpTENKaGMxTjBjbWx1WnlJc0lteHZiMnRCYUdWaFpGTjBjbWx1WnlJc0lrVk5VRlJaWDFOVVVrbE9SeUlzSW5OMGNtbHVaeUlzSW1Oc2IyNWxJaXdpVG05dVZHVnliV2x1WVd4UVlYSjBJbDBzSW0xaGNIQnBibWR6SWpvaVFVRkJRU3hEUVVGWkxGZEJRVUVzUTBGQlF6czdPMFU3ZDBJN1FVRkZhMElzUjBGQll5eERRVUZrTEZsQlFXTTdRVUZGYWtJc1IwRkJkMElzUTBGQmVFSXNXVUZCZDBJN1FVRkZka0lzUjBGQmFVSXNRMEZCYWtJc1ZVRkJhVUk3UVVGRFlpeEhRVUZwUWl4RFFVRnFRaXhWUVVGcFFqczdPenM3T3pzN096czdPenM3T3poRU8zTkRPelpFTzJsRk96czdPM2RGTzJkRk96czdPenN3UWpzN096czdPenM3T3p0VE96czdPenM3TzBzN096czdPenM3T3pzN096czdUVHQ1UkRzN096czdPenM3T3pzN096czdPM1ZDT3p0TE96czdPenQzUXpzN096czdPekpDT3pzN096czdPenR4UmpzN096czdPenM3T3pzN08yMUZPenRwUkRzN096czdRVUZGYkVRc1IwRkJTeXhEUVVGSFFTeGxRVUZsTEVkQlFVdERMRmxCUVdNc1owSkJRV3hEUkN4bFFVRmxPMGxCUlVaRkxGbEJRVmtzYVVKQlFXeENMRkZCUVZFN05FTTdPMkZCUVVaQkxGbEJRVmtzUTBGRGJrSkRMRkZCUVZFN1dVRkJSVU1zVTBGQlV5eHZSVUZCUnl4TFFVRkxPekpET3p0UlFVTnlReXhIUVVGTExFTkJRVU5ETEVsQlFVa3NSMEZCUjBNc1ZVRkJaMElzYlVKQlFVVXNSVUZCUnl4QlFVRklMRU5CUVVjN2EwTkJSVFZDUkN4SlFVRkpMRU5EWm1Rc1EwUmxaMEk3WTBGRlVFWXNVVUZCVVN4SFFVRkhRU3hSUVVGUkxFTkJRVU03WTBGRmNFSkRMRk5CUVZNc1IwRkJSMEVzVTBGQlV5eERRVUZET3pzN096dFpRVWMzUWtjc1IwRkJWeXhGUVVGWVFTeERRVUZYTzIxQ1FVRllRU3hSUVVGUkxFTkJRVkpCTEZkQlFWY3NSMEZCUnl4RFFVRkRPMmRDUVVOaUxFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTktMRkZCUVZFN1dVRkRkRUlzUTBGQlF6czdPMWxCUlVSTExFZEJRVmNzUlVGQldFRXNRMEZCVnp0dFFrRkJXRUVzVVVGQlVTeERRVUZTUVN4WFFVRlhMRWRCUVVjc1EwRkJRenRuUWtGRFlpeE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRTaXhUUVVGVE8xbEJRM1pDTEVOQlFVTTdPenRaUVVWRVN5eEhRVUZqTEVWQlFXUkJMRU5CUVdNN2JVSkJRV1JCTEZGQlFWRXNRMEZCVWtFc1kwRkJZeXhIUVVGSExFTkJRVU03WjBKQlEyaENMRWRCUVVzc1EwRkJRME1zV1VGQldTeEhRVUZITEVsQlFVazdaMEpCUlhwQ0xFMUJRVTBzUTBGQlEwRXNXVUZCV1R0WlFVTnlRaXhEUVVGRE96czdXVUZGUkVNc1IwRkJXU3hGUVVGYVFTeERRVUZaTzIxQ1FVRmFRU3hSUVVGUkxFTkJRVkpCTEZsQlFWa3NRMEZCUTFBc1UwRkJVeXhGUVVGRkxFTkJRVU03WjBKQlEzWkNMRWxCUVVrc1EwRkJRMEVzVTBGQlV5eEhRVUZIUVN4VFFVRlRMRU5CUVVNN1dVRkROMElzUTBGQlF6czdPMWxCUlVSUkxFZEJRVkVzUlVGQlVrRXNRMEZCVVR0dFFrRkJVa0VzVVVGQlVTeERRVUZTUVN4UlFVRlJMRU5CUVVORExFdEJRVXNzUlVGQlJTeERRVUZETzJkQ1FVTm1MRWRCUVVzc1EwRkJRME1zVDBGQlR5eEhRVUZIUkN4TFFVRkxMRU5CUVVORkxGVkJRVlVzU1VGRE1VSkRMRWxCUVVrc1IwRkJSMFlzVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUTFnc1VVRkJVU3hMUVVGTExFbEJRVWtzUlVGQlJ5eEZRVUZITEVGQlFVZ3NRMEZCUnp0blFrRkZha1FzVFVGQlRTeERRVUZEWVN4SlFVRkpPMWxCUTJJc1EwRkJRenM3TzFsQlJVUkRMRWRCUVVzc1JVRkJURUVzUTBGQlN6dHRRa0ZCVEVFc1VVRkJVU3hEUVVGU1FTeExRVUZMTEVOQlFVTkRMRXRCUVVzc1JVRkJSVXdzUzBGQlN5eEZRVUZGVFN4UlFVRlJMRVZCUVVVc1EwRkJRenRuUWtGRE4wSXNSMEZCUnl4RFFVRkRReXhOUVVGTk8yZENRVVZXTEVkQlFVc3NRMEZCUTBvc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlEwb3NVVUZCVVN4RFFVRkRReXhMUVVGTE8yZENRVVZvUXl4RlFVRkZMRVZCUVVWSExFbEJRVWtzUzBGQlN5eEpRVUZKTEVWQlFVVXNRMEZCUXp0dlFrRkRiRUpKTEUxQlFVMHNSMEZCUnl4TFFVRkxMRU5CUVVNN1owSkJRMnBDTEVOQlFVTXNUVUZCVFN4RFFVRkRPMjlDUVVOT0xFZEJRVXNzUTBGQlEwTXNVVUZCVVN4SFFVRkhUQ3hKUVVGSkxFTkJRVU5ETEV0QlFVc3NRMEZCUTBvc1MwRkJTeXhGUVVGRlRTeFJRVUZSTzI5Q1FVVXpRME1zVFVGQlRTeEhRVUZKUXl4UlFVRlJMRXRCUVVzc1NVRkJTU3hCUVVGRExFTkJRVU03YjBKQlJUZENMRVZCUVVVc1JVRkJSVVFzVFVGQlRTeEZRVUZGTEVOQlFVTTdkMEpCUTFoR0xFdEJRVXNzUTBGQlEwa3NTVUZCU1N4RFFVRkRSQ3hSUVVGUkxFTkJRVU1zUTBGQlF6dHZRa0ZEZGtJc1EwRkJRenRuUWtGRFNDeERRVUZETzJkQ1FVVkVMRTFCUVUwc1EwRkJRMFFzVFVGQlRUdFpRVU5tTEVOQlFVTTdPenRaUVVWRVJ5eEhRVUZSTEVWQlFWSkJMRU5CUVZFN2JVSkJRVkpCTEZGQlFWRXNRMEZCVWtFc1VVRkJVU3hIUVVGSExFTkJRVU03WjBKQlExWXNSMEZCU3l4RFFVRkRReXhsUVVGbExFZEJRVWNzU1VGQlNTeERRVUZEY0VJc1UwRkJVeXhIUVVOYVNpeGxRVUZsTEVkQlEySjVRaXhWUVVGWkxHVkJRMnhEUXl4TlFVRk5MRWRCUVVrc1EwRkJRU3hGUVVGclFrWXNUVUZCWlN4RFFVRXZRaXhKUVVGSkxFTkJRVU55UWl4UlFVRlJMRVZCUVcxQ0xFMUJRVUVzUTBGQmFFSnhRaXhsUVVGbE8yZENRVVZxUkN4TlFVRk5MRU5CUVVORkxFMUJRVTA3V1VGRFppeERRVUZET3pzN1dVRkZSRU1zUjBGQlN5eEZRVUZNUVN4RFFVRkxPMjFDUVVGTVFTeFJRVUZSTEVOQlFWSkJMRXRCUVVzc1IwRkJSeXhEUVVGRE8yZENRVUZETEUxQlFVMHNjMEpCYWtWSGVrSXNXVUZCV1N4aFFXbEZVbmxDTEVOQlFVc3NVVUZCV0N4SlFVRkxMR0ZCUVU5NlFpeFpRVUZaTEVWQlFVVXNTVUZCU1N4RFFVRkRReXhSUVVGUkxFVkJRVVVzU1VGQlNTeERRVUZEUXl4VFFVRlRPMWxCUVVjc1EwRkJRenM3VFRzN1JVRnFSWEJEZDBJc1dVRkJaVHRyUWtGQmNFTXhRaXhaUVVGWkxFRWlmUT09IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlTmFtZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IocnVsZU5hbWUpIHtcbiAgICBjb25zdCBydWxlTmFtZVJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocnVsZU5hbWUpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgcnVsZU5hbWVSdWxlTmFtZVBhcnRcbiAgICAgICAgICBdO1xuICAgIFxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi8uLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgWmVyb09yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC96ZXJvT3JNb3JlUGFydHNcIjtcblxuaW1wb3J0IHsgUXVhbnRpZmllclJ1bGVOYW1lLCBUZXJtaW5hbFBhcnRSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcXVhbnRpZmllclJ1bGVOYW1lID0gUXVhbnRpZmllclJ1bGVOYW1lLFxuICAgICAgICAgIHRlcm1pbmFsUGFydFJ1bGVOYW1lID0gVGVybWluYWxQYXJ0UnVsZU5hbWUsXG4gICAgICAgICAgcXVhbnRpZmllclJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocXVhbnRpZmllclJ1bGVOYW1lKSxcbiAgICAgICAgICB0ZXJtaW5hbFBhcnRSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHRlcm1pbmFsUGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lUGFydHNQYXJ0ID0gbmV3IFplcm9Pck1vcmVQYXJ0c1BhcnQocXVhbnRpZmllclJ1bGVOYW1lUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICB0ZXJtaW5hbFBhcnRSdWxlTmFtZVBhcnQsXG4gICAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lUGFydHNQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IFplcm9Pck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWwvemVyb09yTW9yZVBhcnRzXCI7XG5cbmltcG9ydCB7IFF1YW50aWZpZXJSdWxlTmFtZSwgTm9uVGVybWluYWxQYXJ0UnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHF1YW50aWZpZXJSdWxlTmFtZSA9IFF1YW50aWZpZXJSdWxlTmFtZSxcbiAgICAgICAgICBub25UZXJtaW5hbFBhcnRSdWxlTmFtZSA9IE5vblRlcm1pbmFsUGFydFJ1bGVOYW1lLFxuICAgICAgICAgIHF1YW50aWZpZXJSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHF1YW50aWZpZXJSdWxlTmFtZSksXG4gICAgICAgICAgbm9uVGVybWluYWxQYXJ0UnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChub25UZXJtaW5hbFBhcnRSdWxlTmFtZSksXG4gICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZVBhcnRzUGFydCA9IG5ldyBaZXJvT3JNb3JlUGFydHNQYXJ0KHF1YW50aWZpZXJSdWxlTmFtZVBhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgbm9uVGVybWluYWxQYXJ0UnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZVBhcnRzUGFydFxuICAgICAgICAgIF07XG4gICAgXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBQYXJ0Qk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvcGFydFwiO1xuaW1wb3J0IFJ1bGVOYW1lRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9ydWxlTmFtZVwiO1xuaW1wb3J0IFRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3BhcnRSdWxlL3Rlcm1pbmFsXCI7XG5pbXBvcnQgTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcGFydFJ1bGUvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgUGFydFJ1bGVOYW1lLCBOb1doaXRlc3BhY2VQYXJ0UnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhcnRSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSBQYXJ0UnVsZU5hbWUsXG4gICAgICAgICAgdGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gPSBuZXcgVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24oKSxcbiAgICAgICAgICBub25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiA9IG5ldyBOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbigpLFxuICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnRSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKE5vV2hpdGVzcGFjZVBhcnRSdWxlTmFtZSksXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBub25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbixcbiAgICAgICAgICAgIHRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uLFxuICAgICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydFJ1bGVOYW1lRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFBhcnRCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgZmlyc3QsIHRoaXJkIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUnVsZShSdWxlKSB7XG4gICAgY29uc3QgbmFtZSA9IHRoaXMuZ2V0TmFtZSgpLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gdGhpcy5nZW5lcmF0ZURlZmluaXRpb25zKCksXG4gICAgICAgICAgTm9kZSA9IE5vblRlcm1pbmFsTm9kZSxcbiAgICAgICAgICBydWxlID0gbmV3IFJ1bGUobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpO1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cblxuICBnZXROYW1lKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICAgIG5hbWVCTkZOb2RlID0gZmlyc3RDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICBuYW1lID0gbmFtZUJORk5vZGUuZ2V0TmFtZSgpO1xuICAgIFxuICAgIHJldHVybiBuYW1lO1xuICB9XG4gIFxuICBnZW5lcmF0ZURlZmluaXRpb25zKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICB0aGlyZENoaWxkTm9kZSA9IHRoaXJkKGNoaWxkTm9kZXMpLFxuICAgICAgICAgIGRlZmluaXRpb25zTm9kZSA9IHRoaXJkQ2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBkZWZpbml0aW9uc05vZGUuZ2VuZXJhdGVEZWZpbml0aW9ucygpO1xuICAgIFxuICAgIHJldHVybiBkZWZpbml0aW9ucztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhSdWxlQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX3Rlcm1pbmFsID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vcGFydC90ZXJtaW5hbFwiKSk7XG52YXIgX3Rlcm1pbmFsMSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uLy4uL25vZGUvdGVybWluYWxcIikpO1xuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gICAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gICAgfVxuICAgIHJldHVybiBzZWxmO1xufVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG59XG5mdW5jdGlvbiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ICE9PSBcInVuZGVmaW5lZFwiICYmIFJlZmxlY3QuZ2V0KSB7XG4gICAgICAgIF9nZXQgPSBSZWZsZWN0LmdldDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBfZ2V0ID0gZnVuY3Rpb24gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlcikge1xuICAgICAgICAgICAgdmFyIGJhc2UgPSBfc3VwZXJQcm9wQmFzZSh0YXJnZXQsIHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmICghYmFzZSkgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGJhc2UsIHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmIChkZXNjLmdldCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZXNjLmdldC5jYWxsKHJlY2VpdmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkZXNjLnZhbHVlO1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlciB8fCB0YXJnZXQpO1xufVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgICAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICAgIH07XG4gICAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn1cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICAgIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICAgIH1cbiAgICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHtcbiAgICAgICAgZGVmYXVsdDogb2JqXG4gICAgfTtcbn1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgICAgICByZXR1cm4gY2FsbDtcbiAgICB9XG4gICAgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgICAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgICAgIHJldHVybiBvO1xuICAgIH07XG4gICAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cbmZ1bmN0aW9uIF9zdXBlclByb3BCYXNlKG9iamVjdCwgcHJvcGVydHkpIHtcbiAgICB3aGlsZSghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpKXtcbiAgICAgICAgb2JqZWN0ID0gX2dldFByb3RvdHlwZU9mKG9iamVjdCk7XG4gICAgICAgIGlmIChvYmplY3QgPT09IG51bGwpIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xufVxudmFyIF90eXBlb2YgPSBmdW5jdGlvbihvYmopIHtcbiAgICBcIkBzd2MvaGVscGVycyAtIHR5cGVvZlwiO1xuICAgIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xufTtcbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgICBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uKCkge30pKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHtcbiAgICB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7XG4gICAgICAgIHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0O1xuICAgICAgICBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkge1xuICAgICAgICAgICAgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgIHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpO1xuICAgIH07XG59XG52YXIgVGVybWluYWxTeW1ib2xQYXJ0ID0gLyojX19QVVJFX18qLyBmdW5jdGlvbihUZXJtaW5hbFBhcnQpIHtcbiAgICBfaW5oZXJpdHMoVGVybWluYWxTeW1ib2xQYXJ0LCBUZXJtaW5hbFBhcnQpO1xuICAgIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoVGVybWluYWxTeW1ib2xQYXJ0KTtcbiAgICBmdW5jdGlvbiBUZXJtaW5hbFN5bWJvbFBhcnQoY29udGVudCkge1xuICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVGVybWluYWxTeW1ib2xQYXJ0KTtcbiAgICAgICAgdmFyIF90aGlzO1xuICAgICAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpO1xuICAgICAgICBfdGhpcy5jb250ZW50ID0gY29udGVudDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBfY3JlYXRlQ2xhc3MoVGVybWluYWxTeW1ib2xQYXJ0LCBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJwYXJzZVwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB2YXIgcGFyc2VkO1xuICAgICAgICAgICAgICAgIHZhciB0ZXJtaW5hbE5vZGUgPSBudWxsO1xuICAgICAgICAgICAgICAgIHZhciBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpLCBuZXh0U2lnbmlmaWNhbnRUb2tlbiA9IHN0YXRlLmdldE5leHRTaWduaWZpY2FudFRva2VuKCksIHNpZ25pZmljYW50VG9rZW4gPSBuZXh0U2lnbmlmaWNhbnRUb2tlbjsgLy8vXG4gICAgICAgICAgICAgICAgaWYgKHNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSBzaWduaWZpY2FudFRva2VuLmdldENvbnRlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnQgPT09IHRoaXMuY29udGVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGVybWluYWxOb2RlID0gX3Rlcm1pbmFsMS5kZWZhdWx0LmZyb21TaWduaWZpY2FudFRva2VuKHNpZ25pZmljYW50VG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBhcnNlZCA9IHRlcm1pbmFsTm9kZSAhPT0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGVzLnB1c2godGVybWluYWxOb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWQgPSBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rlcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJhc1N0cmluZ1wiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFzU3RyaW5nKCkge1xuICAgICAgICAgICAgICAgIHZhciBjb250ZW50ID0gdGhpcy5jb250ZW50LnJlcGxhY2UoL1xcXFwvLCBcIlxcXFxcXFxcXCIpLCBzdHJpbmcgPSBcIlxcXCJcIi5jb25jYXQoY29udGVudCwgXCJcXFwiXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJjbG9uZVwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsb25lKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfZ2V0KF9nZXRQcm90b3R5cGVPZihUZXJtaW5hbFN5bWJvbFBhcnQucHJvdG90eXBlKSwgXCJjbG9uZVwiLCB0aGlzKS5jYWxsKHRoaXMsIFRlcm1pbmFsU3ltYm9sUGFydCwgdGhpcy5jb250ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIF0pO1xuICAgIHJldHVybiBUZXJtaW5hbFN5bWJvbFBhcnQ7XG59KF90ZXJtaW5hbC5kZWZhdWx0KTtcbmV4cG9ydHMuZGVmYXVsdCA9IFRlcm1pbmFsU3ltYm9sUGFydDtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1TDNOeVl5OXdZWEowTDNSbGNtMXBibUZzTDNSbGNtMXBibUZzVTNsdFltOXNMbXB6SWwwc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklsd2lkWE5sSUhOMGNtbGpkRndpTzF4dVhHNXBiWEJ2Y25RZ1ZHVnliV2x1WVd4UVlYSjBJR1p5YjIwZ1hDSXVMaTh1TGk5d1lYSjBMM1JsY20xcGJtRnNYQ0k3WEc1cGJYQnZjblFnVkdWeWJXbHVZV3hPYjJSbElHWnliMjBnWENJdUxpOHVMaTl1YjJSbEwzUmxjbTFwYm1Gc1hDSTdYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJR05zWVhOeklGUmxjbTFwYm1Gc1UzbHRZbTlzVUdGeWRDQmxlSFJsYm1SeklGUmxjbTFwYm1Gc1VHRnlkQ0I3WEc0Z0lHTnZibk4wY25WamRHOXlLR052Ym5SbGJuUXBJSHRjYmlBZ0lDQnpkWEJsY2lncE8xeHVJQ0FnSUZ4dUlDQWdJSFJvYVhNdVkyOXVkR1Z1ZENBOUlHTnZiblJsYm5RN1hHNGdJSDFjYmx4dUlDQndZWEp6WlNodWIyUmxjeXdnYzNSaGRHVXNJR05oYkd4aVlXTnJLU0I3WEc0Z0lDQWdiR1YwSUhCaGNuTmxaRHRjYmx4dUlDQWdJR3hsZENCMFpYSnRhVzVoYkU1dlpHVWdQU0J1ZFd4c08xeHVJQ0FnSUZ4dUlDQWdJR052Ym5OMElITmhkbVZrU1c1a1pYZ2dQU0J6ZEdGMFpTNW5aWFJUWVhabFpFbHVaR1Y0S0Nrc1hHNWNkRngwSUNBZ0lDQWdibVY0ZEZOcFoyNXBabWxqWVc1MFZHOXJaVzRnUFNCemRHRjBaUzVuWlhST1pYaDBVMmxuYm1sbWFXTmhiblJVYjJ0bGJpZ3BMRnh1WEhSY2RGeDBYSFJjZEhOcFoyNXBabWxqWVc1MFZHOXJaVzRnUFNCdVpYaDBVMmxuYm1sbWFXTmhiblJVYjJ0bGJqc2dMeTh2WEc1Y2JpQWdJQ0JwWmlBb2MybG5ibWxtYVdOaGJuUlViMnRsYmlBaFBUMGdiblZzYkNrZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnWTI5dWRHVnVkQ0E5SUhOcFoyNXBabWxqWVc1MFZHOXJaVzR1WjJWMFEyOXVkR1Z1ZENncE8xeHVYRzRnSUNBZ0lDQnBaaUFvWTI5dWRHVnVkQ0E5UFQwZ2RHaHBjeTVqYjI1MFpXNTBLU0I3WEc0Z0lDQWdJQ0FnSUhSbGNtMXBibUZzVG05a1pTQTlJRlJsY20xcGJtRnNUbTlrWlM1bWNtOXRVMmxuYm1sbWFXTmhiblJVYjJ0bGJpaHphV2R1YVdacFkyRnVkRlJ2YTJWdUtUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNCd1lYSnpaV1FnUFNBb2RHVnliV2x1WVd4T2IyUmxJQ0U5UFNCdWRXeHNLVHRjYmx4dUlDQWdJR2xtSUNod1lYSnpaV1FwSUh0Y2JpQWdJQ0FnSUc1dlpHVnpMbkIxYzJnb2RHVnliV2x1WVd4T2IyUmxLVHRjYmx4dUlDQWdJQ0FnYVdZZ0tHTmhiR3hpWVdOcklDRTlQU0J1ZFd4c0tTQjdYRzRnSUNBZ0lDQWdJSEJoY25ObFpDQTlJR05oYkd4aVlXTnJLQ2s3WEc1Y2JpQWdJQ0FnSUNBZ2FXWWdLQ0Z3WVhKelpXUXBJSHRjYmlBZ0lDQWdJQ0FnSUNCdWIyUmxjeTV3YjNBb0tUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNibHh1SUNBZ0lHbG1JQ2doY0dGeWMyVmtLU0I3WEc0Z0lDQWdJQ0J6ZEdGMFpTNWlZV05yZEhKaFkyc29jMkYyWldSSmJtUmxlQ2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdjbVYwZFhKdUlIQmhjbk5sWkR0Y2JpQWdmVnh1SUNCY2JpQWdZWE5UZEhKcGJtY29LU0I3WEc0Z0lDQWdZMjl1YzNRZ1kyOXVkR1Z1ZENBOUlIUm9hWE11WTI5dWRHVnVkQzV5WlhCc1lXTmxLQzljWEZ4Y0x5d2dYQ0pjWEZ4Y1hGeGNYRndpS1N4Y2JpQWdJQ0FnSUNBZ0lDQnpkSEpwYm1jZ1BTQmdYQ0lrZTJOdmJuUmxiblI5WENKZ08xeHVJQ0FnSUZ4dUlDQWdJSEpsZEhWeWJpQnpkSEpwYm1jN1hHNGdJSDFjYmx4dUlDQmpiRzl1WlNncElIc2djbVYwZFhKdUlITjFjR1Z5TG1Oc2IyNWxLRlJsY20xcGJtRnNVM2x0WW05c1VHRnlkQ3dnZEdocGN5NWpiMjUwWlc1MEtUc2dmVnh1ZlZ4dUlsMHNJbTVoYldWeklqcGJJbFJsY20xcGJtRnNVM2x0WW05c1VHRnlkQ0lzSW1OdmJuUmxiblFpTENKd1lYSnpaU0lzSW01dlpHVnpJaXdpYzNSaGRHVWlMQ0pqWVd4c1ltRmpheUlzSW5CaGNuTmxaQ0lzSW5SbGNtMXBibUZzVG05a1pTSXNJbk5oZG1Wa1NXNWtaWGdpTENKblpYUlRZWFpsWkVsdVpHVjRJaXdpYm1WNGRGTnBaMjVwWm1sallXNTBWRzlyWlc0aUxDSm5aWFJPWlhoMFUybG5ibWxtYVdOaGJuUlViMnRsYmlJc0luTnBaMjVwWm1sallXNTBWRzlyWlc0aUxDSm5aWFJEYjI1MFpXNTBJaXdpVkdWeWJXbHVZV3hPYjJSbElpd2labkp2YlZOcFoyNXBabWxqWVc1MFZHOXJaVzRpTENKd2RYTm9JaXdpY0c5d0lpd2lZbUZqYTNSeVlXTnJJaXdpWVhOVGRISnBibWNpTENKeVpYQnNZV05sSWl3aWMzUnlhVzVuSWl3aVkyeHZibVVpTENKVVpYSnRhVzVoYkZCaGNuUWlYU3dpYldGd2NHbHVaM01pT2lKQlFVRkJMRU5CUVZrc1YwRkJRU3hEUVVGRE96czdSVHQzUWp0QlFVVlpMRWRCUVhGQ0xFTkJRWEpDTEZOQlFYRkNPMEZCUTNKQ0xFZEJRWEZDTEVOQlFYSkNMRlZCUVhGQ096czdPenM3T3pzN096czdPenM3T0VRN2MwTTdOa1E3YVVVN096czdkMFU3WjBVN096czdPekJDT3pzN096czdPenM3TzFNN096czdPenM3U3pzN096czdPenM3T3pzN096dE5PM2xFT3pzN096czdPenM3T3pzN096czdkVUk3TzBzN096czdPM2RET3pzN096czdNa0k3T3pzN096czdPM0ZHT3pzN096czdPenM3T3pzN2JVVTdPMmxFT3pzN096dEpRVVY2UWtFc2EwSkJRV3RDTEdsQ1FVRjRRaXhSUVVGUk95dERPenRoUVVGR1FTeHJRa0ZCYTBJc1EwRkRla0pETEU5QlFVODdhVVE3TzJsRFEwNXlRaXhEUkU5Wk8yTkJSVWhCTEU5QlFVOHNSMEZCUjBFc1QwRkJUeXhEUVVGRE96czdPenRaUVVkNlFrTXNSMEZCU3l4RlFVRk1RU3hEUVVGTE8yMUNRVUZNUVN4UlFVRlJMRU5CUVZKQkxFdEJRVXNzUTBGQlEwTXNTMEZCU3l4RlFVRkZReXhMUVVGTExFVkJRVVZETEZGQlFWRXNSVUZCUlN4RFFVRkRPMmRDUVVNM1FpeEhRVUZITEVOQlFVTkRMRTFCUVUwN1owSkJSVllzUjBGQlJ5eERRVUZEUXl4WlFVRlpMRWRCUVVjc1NVRkJTVHRuUWtGRmRrSXNSMEZCU3l4RFFVRkRReXhWUVVGVkxFZEJRVWRLTEV0QlFVc3NRMEZCUTBzc1lVRkJZU3hKUVVOc1EwTXNiMEpCUVc5Q0xFZEJRVWRPTEV0QlFVc3NRMEZCUTA4c2RVSkJRWFZDTEVsQlEzWkVReXhuUWtGQlowSXNSMEZCUjBZc2IwSkJRVzlDTEVWQlFVVXNSVUZCUnl4QlFVRklMRU5CUVVjN1owSkJSVGRETEVWQlFVVXNSVUZCUlVVc1owSkJRV2RDTEV0QlFVc3NTVUZCU1N4RlFVRkZMRU5CUVVNN2IwSkJRemxDTEVkQlFVc3NRMEZCUTFnc1QwRkJUeXhIUVVGSFZ5eG5Ra0ZCWjBJc1EwRkJRME1zVlVGQlZUdHZRa0ZGTTBNc1JVRkJSU3hGUVVGRldpeFBRVUZQTEV0QlFVc3NTVUZCU1N4RFFVRkRRU3hQUVVGUExFVkJRVVVzUTBGQlF6dDNRa0ZETjBKTkxGbEJRVmtzUjBGQlIwOHNWVUZCV1N4VFFVRkRReXh2UWtGQmIwSXNRMEZCUTBnc1owSkJRV2RDTEVOQlFVTXNRMEZCUXp0dlFrRkRja1VzUTBGQlF6dG5Ra0ZEU0N4RFFVRkRPMmRDUVVWRVRpeE5RVUZOTEVkQlFVbERMRmxCUVZrc1MwRkJTeXhKUVVGSkxFRkJRVU1zUTBGQlF6dG5Ra0ZGYWtNc1JVRkJSU3hGUVVGRlJDeE5RVUZOTEVWQlFVVXNRMEZCUXp0dlFrRkRXRWdzUzBGQlN5eERRVUZEWVN4SlFVRkpMRU5CUVVOVUxGbEJRVmtzUTBGQlF5eERRVUZETzI5Q1FVVjZRaXhGUVVGRkxFVkJRVVZHTEZGQlFWRXNTMEZCU3l4SlFVRkpMRVZCUVVVc1EwRkJRenQzUWtGRGRFSkRMRTFCUVUwc1IwRkJSMFFzVVVGQlVTeEZRVUZGTEVOQlFVTTdkMEpCUlhCQ0xFVkJRVVVzUjBGQlIwTXNUVUZCVFN4RlFVRkZMRU5CUVVNN05FSkJRMXBJTEV0QlFVc3NRMEZCUTJNc1IwRkJSeXhGUVVGRkxFTkJRVU03ZDBKQlEyUXNRMEZCUXp0dlFrRkRTQ3hEUVVGRE8yZENRVU5JTEVOQlFVTTdaMEpCUlVRc1JVRkJSU3hIUVVGSFdDeE5RVUZOTEVWQlFVVXNRMEZCUXp0dlFrRkRXa1lzUzBGQlN5eERRVUZEWXl4VFFVRlRMRU5CUVVOV0xGVkJRVlVzUTBGQlF5eERRVUZETzJkQ1FVTTVRaXhEUVVGRE8yZENRVVZFTEUxQlFVMHNRMEZCUTBZc1RVRkJUVHRaUVVObUxFTkJRVU03T3p0WlFVVkVZU3hIUVVGUkxFVkJRVkpCTEVOQlFWRTdiVUpCUVZKQkxGRkJRVkVzUTBGQlVrRXNVVUZCVVN4SFFVRkhMRU5CUVVNN1owSkJRMVlzUjBGQlN5eERRVUZEYkVJc1QwRkJUeXhIUVVGSExFbEJRVWtzUTBGQlEwRXNUMEZCVHl4RFFVRkRiVUlzVDBGQlR5eFBRVUZQTEVOQlFVMHNVVUZETTBORExFMUJRVTBzUjBGQlNTeERRVUZETEVsQlFWVXNUVUZCUXl4RFFVRlVjRUlzVDBGQlR5eEZRVUZETEVOQlFVTTdaMEpCUlRWQ0xFMUJRVTBzUTBGQlEyOUNMRTFCUVUwN1dVRkRaaXhEUVVGRE96czdXVUZGUkVNc1IwRkJTeXhGUVVGTVFTeERRVUZMTzIxQ1FVRk1RU3hSUVVGUkxFTkJRVkpCTEV0QlFVc3NSMEZCUnl4RFFVRkRPMmRDUVVGRExFMUJRVTBzYzBKQmNFUkhkRUlzYTBKQlFXdENMR0ZCYjBSa2MwSXNRMEZCU3l4UlFVRllMRWxCUVVzc1lVRkJUM1JDTEd0Q1FVRnJRaXhGUVVGRkxFbEJRVWtzUTBGQlEwTXNUMEZCVHp0WlFVRkhMRU5CUVVNN08wMDdPMFZCY0VSdVFuTkNMRk5CUVZrN2EwSkJRWFpEZGtJc2EwSkJRV3RDTEVFaWZRPT0iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuXG5pbXBvcnQgeyBOYW1lUnVsZU5hbWUsIERlZmluaXRpb25zUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgc2VwYXJhdG9yLCB0ZXJtaW5hdG9yIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3Qgc2VwYXJhdG9yVGVybWluYWxTeW1ib2xDb250ZW50ID0gc2VwYXJhdG9yLFxuICAgICAgICAgIHRlcm1pbmF0b3JUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSB0ZXJtaW5hdG9yLFxuICAgICAgICAgIG5hbWVSdWxlTmFtZSA9IE5hbWVSdWxlTmFtZSxcbiAgICAgICAgICBkZWZpbml0aW9uc1J1bGVOYW1lID0gRGVmaW5pdGlvbnNSdWxlTmFtZSxcbiAgICAgICAgICBuYW1lUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChuYW1lUnVsZU5hbWUpLFxuICAgICAgICAgIHNlcGFyYXRvclRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoc2VwYXJhdG9yVGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBkZWZpbml0aW9uc1J1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQoZGVmaW5pdGlvbnNSdWxlTmFtZSksXG4gICAgICAgICAgdGVybWluYXRvclRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQodGVybWluYXRvclRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBuYW1lUnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgc2VwYXJhdG9yVGVybWluYWxTeW1ib2xQYXJ0LFxuICAgICAgICAgICAgZGVmaW5pdGlvbnNSdWxlTmFtZVBhcnQsXG4gICAgICAgICAgICB0ZXJtaW5hdG9yVGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFJ1bGVCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9ydWxlXCI7XG5pbXBvcnQgUnVsZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcnVsZVwiO1xuXG5pbXBvcnQgeyBSdWxlUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHJ1bGVEZWZpbml0aW9uID0gbmV3IFJ1bGVEZWZpbml0aW9uKCksXG4gICAgICAgICAgbmFtZSA9IFJ1bGVSdWxlTmFtZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIHJ1bGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gUnVsZUJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXJyb3JCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKEVycm9yQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsXCI7XG5pbXBvcnQgVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL3Rlcm1pbmFsXCI7XG5cbmNvbnN0IHsgd2lsZGNhcmQgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXaWxkY2FyZFBhcnQgZXh0ZW5kcyBUZXJtaW5hbFBhcnQge1xuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGxldCB0ZXJtaW5hbE5vZGUgPSBudWxsO1xuICAgIFxuICAgIGNvbnN0IHNhdmVkSW5kZXggPSBzdGF0ZS5nZXRTYXZlZEluZGV4KCksXG5cdFx0ICAgICAgbmV4dFNpZ25pZmljYW50VG9rZW4gPSBzdGF0ZS5nZXROZXh0U2lnbmlmaWNhbnRUb2tlbigpLFxuXHRcdFx0XHRcdHNpZ25pZmljYW50VG9rZW4gPSBuZXh0U2lnbmlmaWNhbnRUb2tlbjsgLy8vXG5cbiAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgdGVybWluYWxOb2RlID0gVGVybWluYWxOb2RlLmZyb21TaWduaWZpY2FudFRva2VuKHNpZ25pZmljYW50VG9rZW4pO1xuICAgIH1cblxuICAgIHBhcnNlZCA9ICh0ZXJtaW5hbE5vZGUgIT09IG51bGwpO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgbm9kZXMucHVzaCh0ZXJtaW5hbE5vZGUpO1xuXG4gICAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgcGFyc2VkID0gY2FsbGJhY2soKTtcblxuICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgIG5vZGVzLnBvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gd2lsZGNhcmQ7ICAvLy9cblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBjbG9uZSgpIHsgcmV0dXJuIHN1cGVyLmNsb25lKFdpbGRjYXJkUGFydCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBXaWxkY2FyZFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvd2lsZGNhcmRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXJyb3JEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHdpbGRjYXJkUGFydCA9IG5ldyBXaWxkY2FyZFBhcnQoKSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIHdpbGRjYXJkUGFydFxuICAgICAgICAgIF07XG5cbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IEVycm9yQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvZXJyb3JcIjtcbmltcG9ydCBFcnJvckRlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vZXJyb3JcIjtcblxuaW1wb3J0IHsgRXJyb3JSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXJyb3JSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IGVycm9yRGVmaW5pdGlvbiA9IG5ldyBFcnJvckRlZmluaXRpb24oKSxcbiAgICAgICAgICBuYW1lID0gRXJyb3JSdWxlTmFtZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGVycm9yRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IEVycm9yQk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSk7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IFJ1bGVSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG9jdW1lbnRCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVSdWxlcyhSdWxlKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIHJ1bGVOb2RlcyA9IGNoaWxkTm9kZXMucmVkdWNlKChydWxlTm9kZXMsIGNoaWxkTm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlTm9uVGVybWluYWxOb2RlID0gY2hpbGROb2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgICAgICAgICAgIGlmIChjaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgICAgICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gY2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgICAgICAgICAgIHJ1bGVOYW1lID0gY2hpbGROb2RlLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgICAgICAgICAgIHJ1bGVOYW1lUnVsZVJ1bGVOYW1lID0gKHJ1bGVOYW1lID09PSBSdWxlUnVsZU5hbWUpLFxuICAgICAgICAgICAgICAgICAgICBub25UZXJtaW5hbE5vZGVSdWxlTm9kZSA9IHJ1bGVOYW1lUnVsZVJ1bGVOYW1lOyAgLy8vXG5cbiAgICAgICAgICAgICAgaWYgKG5vblRlcm1pbmFsTm9kZVJ1bGVOb2RlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcnVsZU5vZGUgPSBub25UZXJtaW5hbE5vZGU7IC8vL1xuXG4gICAgICAgICAgICAgICAgcnVsZU5vZGVzLnB1c2gocnVsZU5vZGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBydWxlTm9kZXM7XG4gICAgICAgICAgfSwgW10pLFxuICAgICAgICAgIHJ1bGVzID0gcnVsZU5vZGVzLm1hcCgocnVsZU5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJ1bGUgPSBydWxlTm9kZS5nZW5lcmF0ZVJ1bGUoUnVsZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiBydWxlO1xuICAgICAgICAgIH0pO1xuICAgIFxuICAgIHJldHVybiBydWxlcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhEb2N1bWVudEJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF9ub25UZXJtaW5hbCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uLy4uL3BhcnQvbm9uVGVybWluYWxcIikpO1xudmFyIF9wYXJ0VHlwZXMgPSByZXF1aXJlKFwiLi4vLi4vcGFydFR5cGVzXCIpO1xudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIik7XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHNlbGY7XG59XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gICAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgICB9XG59XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cbmZ1bmN0aW9uIF9nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgIT09IFwidW5kZWZpbmVkXCIgJiYgUmVmbGVjdC5nZXQpIHtcbiAgICAgICAgX2dldCA9IFJlZmxlY3QuZ2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIF9nZXQgPSBmdW5jdGlvbiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSB7XG4gICAgICAgICAgICB2YXIgYmFzZSA9IF9zdXBlclByb3BCYXNlKHRhcmdldCwgcHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKCFiYXNlKSByZXR1cm47XG4gICAgICAgICAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYmFzZSwgcHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKGRlc2MuZ2V0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlc2MuZ2V0LmNhbGwocmVjZWl2ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRlc2MudmFsdWU7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyIHx8IHRhcmdldCk7XG59XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7XG4gICAgfTtcbiAgICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufVxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gICAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gICAgfVxuICAgIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDoge1xuICAgICAgICBkZWZhdWx0OiBvYmpcbiAgICB9O1xufVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICAgIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgICAgIHJldHVybiBjYWxsO1xuICAgIH1cbiAgICByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTtcbn1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgICAgIG8uX19wcm90b19fID0gcDtcbiAgICAgICAgcmV0dXJuIG87XG4gICAgfTtcbiAgICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufVxuZnVuY3Rpb24gX3N1cGVyUHJvcEJhc2Uob2JqZWN0LCBwcm9wZXJ0eSkge1xuICAgIHdoaWxlKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSkpe1xuICAgICAgICBvYmplY3QgPSBfZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTtcbiAgICAgICAgaWYgKG9iamVjdCA9PT0gbnVsbCkgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG59XG52YXIgX3R5cGVvZiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIFwiQHN3Yy9oZWxwZXJzIC0gdHlwZW9mXCI7XG4gICAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG59O1xuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTtcbiAgICBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlO1xuICAgIHRyeSB7XG4gICAgICAgIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24oKSB7fSkpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkge1xuICAgIHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpO1xuICAgIHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHtcbiAgICAgICAgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7XG4gICAgICAgIGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7XG4gICAgICAgICAgICB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yO1xuICAgICAgICAgICAgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7XG4gICAgfTtcbn1cbnZhciBDaG9pY2VPZlBhcnRzUGFydCA9IC8qI19fUFVSRV9fKi8gZnVuY3Rpb24oTm9uVGVybWluYWxQYXJ0KSB7XG4gICAgX2luaGVyaXRzKENob2ljZU9mUGFydHNQYXJ0LCBOb25UZXJtaW5hbFBhcnQpO1xuICAgIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoQ2hvaWNlT2ZQYXJ0c1BhcnQpO1xuICAgIGZ1bmN0aW9uIENob2ljZU9mUGFydHNQYXJ0KHBhcnRzKSB7XG4gICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDaG9pY2VPZlBhcnRzUGFydCk7XG4gICAgICAgIHZhciBfdGhpcztcbiAgICAgICAgdmFyIHR5cGUgPSBfcGFydFR5cGVzLkNob2ljZU9mUGFydHNQYXJ0VHlwZTsgLy8vXG4gICAgICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgdHlwZSk7XG4gICAgICAgIF90aGlzLnBhcnRzID0gcGFydHM7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgX2NyZWF0ZUNsYXNzKENob2ljZU9mUGFydHNQYXJ0LCBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJnZXRQYXJ0c1wiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFBhcnRzKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnRzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwicGFyc2VcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHBhcnNlZDtcbiAgICAgICAgICAgICAgICB0aGlzLnBhcnRzLnNvbWUoZnVuY3Rpb24ocGFydCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJzZWQgPSBwYXJ0LnBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJhc1N0cmluZ1wiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFzU3RyaW5nKCkge1xuICAgICAgICAgICAgICAgIHZhciBwYXJ0c1N0cmluZzEgPSB0aGlzLnBhcnRzLnJlZHVjZShmdW5jdGlvbihwYXJ0c1N0cmluZywgcGFydCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcGFydFN0cmluZyA9IHBhcnQuYXNTdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnRzU3RyaW5nID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0c1N0cmluZyA9IHBhcnRTdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0c1N0cmluZyA9IFwiXCIuY29uY2F0KHBhcnRzU3RyaW5nLCBcIiB8IFwiKS5jb25jYXQocGFydFN0cmluZyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnRzU3RyaW5nO1xuICAgICAgICAgICAgICAgIH0sIG51bGwpLCBzdHJpbmcgPSBcIiggXCIuY29uY2F0KHBhcnRzU3RyaW5nMSwgXCIgKVwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiY2xvbmVcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjbG9uZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX2dldChfZ2V0UHJvdG90eXBlT2YoQ2hvaWNlT2ZQYXJ0c1BhcnQucHJvdG90eXBlKSwgXCJjbG9uZVwiLCB0aGlzKS5jYWxsKHRoaXMsIENob2ljZU9mUGFydHNQYXJ0LCB0aGlzLnBhcnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIF0sIFtcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImZyb21Ob2Rlc1wiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGZyb21Ob2Rlcyhub2Rlcykge1xuICAgICAgICAgICAgICAgIHZhciBhbGxCdXRGaXJzdEFuZExhc3ROb2RlcyA9ICgwLCBfYXJyYXkpLmFsbEJ1dEZpcnN0QW5kTGFzdChub2Rlcyk7XG4gICAgICAgICAgICAgICAgbm9kZXMgPSBhbGxCdXRGaXJzdEFuZExhc3ROb2RlczsgLy8vXG4gICAgICAgICAgICAgICAgdmFyIGV2ZW5Ob2RlcyA9ICgwLCBfYXJyYXkpLmV2ZW4obm9kZXMpO1xuICAgICAgICAgICAgICAgIG5vZGVzID0gZXZlbk5vZGVzOyAvLy9cbiAgICAgICAgICAgICAgICB2YXIgbG9va0FoZWFkID0gZmFsc2UsIHBhcnRzID0gbm9kZXMubWFwKGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnQgPSBub2RlLmdlbmVyYXRlUGFydChsb29rQWhlYWQpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFydDtcbiAgICAgICAgICAgICAgICB9KSwgY2hvaWNlT2ZQYXJ0c1BhcnQgPSBuZXcgQ2hvaWNlT2ZQYXJ0c1BhcnQocGFydHMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBjaG9pY2VPZlBhcnRzUGFydDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIF0pO1xuICAgIHJldHVybiBDaG9pY2VPZlBhcnRzUGFydDtcbn0oX25vblRlcm1pbmFsLmRlZmF1bHQpO1xuZXhwb3J0cy5kZWZhdWx0ID0gQ2hvaWNlT2ZQYXJ0c1BhcnQ7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUwzTnlZeTl3WVhKMEwyNXZibFJsY20xcGJtRnNMMk5vYjJsalpVOW1VR0Z5ZEhNdWFuTWlYU3dpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpWENKMWMyVWdjM1J5YVdOMFhDSTdYRzVjYm1sdGNHOXlkQ0JPYjI1VVpYSnRhVzVoYkZCaGNuUWdabkp2YlNCY0lpNHVMeTR1TDNCaGNuUXZibTl1VkdWeWJXbHVZV3hjSWp0Y2JseHVhVzF3YjNKMElIc2dRMmh2YVdObFQyWlFZWEowYzFCaGNuUlVlWEJsSUgwZ1puSnZiU0JjSWk0dUx5NHVMM0JoY25SVWVYQmxjMXdpTzF4dWFXMXdiM0owSUhzZ1pYWmxiaXdnWVd4c1FuVjBSbWx5YzNSQmJtUk1ZWE4wSUgwZ1puSnZiU0JjSWk0dUx5NHVMM1YwYVd4cGRHbGxjeTloY25KaGVWd2lPMXh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0JqYkdGemN5QkRhRzlwWTJWUFpsQmhjblJ6VUdGeWRDQmxlSFJsYm1SeklFNXZibFJsY20xcGJtRnNVR0Z5ZENCN1hHNGdJR052Ym5OMGNuVmpkRzl5S0hCaGNuUnpLU0I3WEc0Z0lDQWdZMjl1YzNRZ2RIbHdaU0E5SUVOb2IybGpaVTltVUdGeWRITlFZWEowVkhsd1pUc2dMeTh2WEc1Y2JpQWdJQ0J6ZFhCbGNpaDBlWEJsS1R0Y2JpQWdJQ0JjYmlBZ0lDQjBhR2x6TG5CaGNuUnpJRDBnY0dGeWRITTdYRzRnSUgxY2JpQWdYRzRnSUdkbGRGQmhjblJ6S0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxuQmhjblJ6TzF4dUlDQjlYRzVjYmlBZ2NHRnljMlVvYm05a1pYTXNJSE4wWVhSbExDQmpZV3hzWW1GamF5a2dlMXh1SUNBZ0lHeGxkQ0J3WVhKelpXUTdYRzVjYmlBZ0lDQjBhR2x6TG5CaGNuUnpMbk52YldVb0tIQmhjblFwSUQwK0lIdGNiaUFnSUNBZ0lIQmhjbk5sWkNBOUlIQmhjblF1Y0dGeWMyVW9ibTlrWlhNc0lITjBZWFJsTENCallXeHNZbUZqYXlrN1hHNWNiaUFnSUNBZ0lHbG1JQ2h3WVhKelpXUXBJSHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSFJ5ZFdVN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlNrN1hHNWNiaUFnSUNCeVpYUjFjbTRnY0dGeWMyVmtPMXh1SUNCOVhHNWNiaUFnWVhOVGRISnBibWNvS1NCN1hHNGdJQ0FnWTI5dWMzUWdjR0Z5ZEhOVGRISnBibWNnUFNCMGFHbHpMbkJoY25SekxuSmxaSFZqWlNnb2NHRnlkSE5UZEhKcGJtY3NJSEJoY25RcElEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZibk4wSUhCaGNuUlRkSEpwYm1jZ1BTQndZWEowTG1GelUzUnlhVzVuS0NrN1hHNGdJQ0FnWEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvY0dGeWRITlRkSEpwYm1jZ1BUMDlJRzUxYkd3cElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2NHRnlkSE5UZEhKcGJtY2dQU0J3WVhKMFUzUnlhVzVuTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2NHRnlkSE5UZEhKcGJtY2dQU0JnSkh0d1lYSjBjMU4wY21sdVozMGdmQ0FrZTNCaGNuUlRkSEpwYm1kOVlEdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0JjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCd1lYSjBjMU4wY21sdVp6dGNiaUFnSUNBZ0lDQWdJQ0I5TENCdWRXeHNLU3hjYmlBZ0lDQWdJQ0FnSUNCemRISnBibWNnUFNCZ0tDQWtlM0JoY25SelUzUnlhVzVuZlNBcFlEdGNiaUFnSUNCY2JpQWdJQ0J5WlhSMWNtNGdjM1J5YVc1bk8xeHVJQ0I5WEc1Y2JpQWdZMnh2Ym1Vb0tTQjdJSEpsZEhWeWJpQnpkWEJsY2k1amJHOXVaU2hEYUc5cFkyVlBabEJoY25SelVHRnlkQ3dnZEdocGN5NXdZWEowY3lrN0lIMWNibHh1SUNCemRHRjBhV01nWm5KdmJVNXZaR1Z6S0c1dlpHVnpLU0I3WEc0Z0lDQWdZMjl1YzNRZ1lXeHNRblYwUm1seWMzUkJibVJNWVhOMFRtOWtaWE1nUFNCaGJHeENkWFJHYVhKemRFRnVaRXhoYzNRb2JtOWtaWE1wTzF4dVhHNGdJQ0FnYm05a1pYTWdQU0JoYkd4Q2RYUkdhWEp6ZEVGdVpFeGhjM1JPYjJSbGN6c2dJQzh2TDF4dUlDQWdJRnh1SUNBZ0lHTnZibk4wSUdWMlpXNU9iMlJsY3lBOUlHVjJaVzRvYm05a1pYTXBPMXh1WEc0Z0lDQWdibTlrWlhNZ1BTQmxkbVZ1VG05a1pYTTdJQ0F2THk5Y2JseHVJQ0FnSUdOdmJuTjBJR3h2YjJ0QmFHVmhaQ0E5SUdaaGJITmxMRnh1SUNBZ0lDQWdJQ0FnSUhCaGNuUnpJRDBnYm05a1pYTXViV0Z3S0NodWIyUmxLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQndZWEowSUQwZ2JtOWtaUzVuWlc1bGNtRjBaVkJoY25Rb2JHOXZhMEZvWldGa0tUdGNibHh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhCaGNuUTdYRzRnSUNBZ0lDQWdJQ0FnZlNrc1hHNGdJQ0FnSUNBZ0lDQWdZMmh2YVdObFQyWlFZWEowYzFCaGNuUWdQU0J1WlhjZ1EyaHZhV05sVDJaUVlYSjBjMUJoY25Rb2NHRnlkSE1wTzF4dVhHNGdJQ0FnY21WMGRYSnVJR05vYjJsalpVOW1VR0Z5ZEhOUVlYSjBPMXh1SUNCOVhHNTlYRzRpWFN3aWJtRnRaWE1pT2xzaVEyaHZhV05sVDJaUVlYSjBjMUJoY25RaUxDSndZWEowY3lJc0luUjVjR1VpTENKRGFHOXBZMlZQWmxCaGNuUnpVR0Z5ZEZSNWNHVWlMQ0puWlhSUVlYSjBjeUlzSW5CaGNuTmxJaXdpYm05a1pYTWlMQ0p6ZEdGMFpTSXNJbU5oYkd4aVlXTnJJaXdpY0dGeWMyVmtJaXdpYzI5dFpTSXNJbkJoY25RaUxDSmhjMU4wY21sdVp5SXNJbkJoY25SelUzUnlhVzVuSWl3aWNtVmtkV05sSWl3aWNHRnlkRk4wY21sdVp5SXNJbk4wY21sdVp5SXNJbU5zYjI1bElpd2labkp2YlU1dlpHVnpJaXdpWVd4c1FuVjBSbWx5YzNSQmJtUk1ZWE4wVG05a1pYTWlMQ0poYkd4Q2RYUkdhWEp6ZEVGdVpFeGhjM1FpTENKbGRtVnVUbTlrWlhNaUxDSmxkbVZ1SWl3aWJHOXZhMEZvWldGa0lpd2liV0Z3SWl3aWJtOWtaU0lzSW1kbGJtVnlZWFJsVUdGeWRDSXNJbU5vYjJsalpVOW1VR0Z5ZEhOUVlYSjBJaXdpVG05dVZHVnliV2x1WVd4UVlYSjBJbDBzSW0xaGNIQnBibWR6SWpvaVFVRkJRU3hEUVVGWkxGZEJRVUVzUTBGQlF6czdPMFU3ZDBJN1FVRkZaU3hIUVVGM1FpeERRVUY0UWl4WlFVRjNRanRCUVVWa0xFZEJRV2xDTEVOQlFXcENMRlZCUVdsQ08wRkJRMlFzUjBGQmRVSXNRMEZCZGtJc1RVRkJkVUk3T3pzN096czdPenM3T3pzN096czRSRHR6UXpzMlJEdHBSVHM3T3p0M1JUdG5SVHM3T3pzN01FSTdPenM3T3pzN096czdVenM3T3pzN096dExPenM3T3pzN096czdPenM3TzAwN2VVUTdPenM3T3pzN096czdPenM3T3p0MVFqczdTenM3T3pzN2QwTTdPenM3T3pzeVFqczdPenM3T3pzN2NVWTdPenM3T3pzN096czdPenR0UlRzN2FVUTdPenM3TzBsQlJUTkRRU3hwUWtGQmFVSXNhVUpCUVhaQ0xGRkJRVkU3YVVRN08yRkJRVVpCTEdsQ1FVRnBRaXhEUVVONFFrTXNTMEZCU3p0blJEczdVVUZEWml4SFFVRkxMRU5CUVVORExFbEJRVWtzUjBGQlIwTXNWVUZCY1VJc2QwSkJRVVVzUlVGQlJ5eEJRVUZJTEVOQlFVYzdhME5CUldwRFJDeEpRVUZKTEVORFdHUXNRMFJYWjBJN1kwRkZVRVFzUzBGQlN5eEhRVUZIUVN4TFFVRkxMRU5CUVVNN096czdPMWxCUjNKQ1J5eEhRVUZSTEVWQlFWSkJMRU5CUVZFN2JVSkJRVkpCTEZGQlFWRXNRMEZCVWtFc1VVRkJVU3hIUVVGSExFTkJRVU03WjBKQlExWXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJRMGdzUzBGQlN6dFpRVU51UWl4RFFVRkRPenM3V1VGRlJFa3NSMEZCU3l4RlFVRk1RU3hEUVVGTE8yMUNRVUZNUVN4UlFVRlJMRU5CUVZKQkxFdEJRVXNzUTBGQlEwTXNTMEZCU3l4RlFVRkZReXhMUVVGTExFVkJRVVZETEZGQlFWRXNSVUZCUlN4RFFVRkRPMmRDUVVNM1FpeEhRVUZITEVOQlFVTkRMRTFCUVUwN1owSkJSVllzU1VGQlNTeERRVUZEVWl4TFFVRkxMRU5CUVVOVExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFWQkRMRWxCUVVrc1JVRkJTeXhEUVVGRE8yOUNRVU42UWtZc1RVRkJUU3hIUVVGSFJTeEpRVUZKTEVOQlFVTk9MRXRCUVVzc1EwRkJRME1zUzBGQlN5eEZRVUZGUXl4TFFVRkxMRVZCUVVWRExGRkJRVkVzUTBGQlF5eERRVUZETzI5Q1FVVTFReXhGUVVGRkxFVkJRVVZETEUxQlFVMHNSVUZCUlN4RFFVRkRPM2RDUVVOWUxFMUJRVTBzUTBGQlF5eEpRVUZKTzI5Q1FVTmlMRU5CUVVNN1owSkJRMGdzUTBGQlF5eERRVUZETEVOQlFVTTdaMEpCUlVnc1RVRkJUU3hEUVVGRFFTeE5RVUZOTzFsQlEyWXNRMEZCUXpzN08xbEJSVVJITEVkQlFWRXNSVUZCVWtFc1EwRkJVVHR0UWtGQlVrRXNVVUZCVVN4RFFVRlNRU3hSUVVGUkxFZEJRVWNzUTBGQlF6dG5Ra0ZEVml4SFFVRkxMRU5CUVVORExGbEJRVmNzUjBGQlJ5eEpRVUZKTEVOQlFVTmFMRXRCUVVzc1EwRkJRMkVzVFVGQlRTeERRVUZETEZGQlFWRXNRMEZCVUVRc1YwRkJWeXhGUVVGRlJpeEpRVUZKTEVWQlFVc3NRMEZCUXp0dlFrRkRkRVFzUjBGQlN5eERRVUZEU1N4VlFVRlZMRWRCUVVkS0xFbEJRVWtzUTBGQlEwTXNVVUZCVVR0dlFrRkZhRU1zUlVGQlJTeEZRVUZGUXl4WFFVRlhMRXRCUVVzc1NVRkJTU3hGUVVGRkxFTkJRVU03ZDBKQlEzcENRU3hYUVVGWExFZEJRVWRGTEZWQlFWVXNRMEZCUXp0dlFrRkRNMElzUTBGQlF5eE5RVUZOTEVOQlFVTTdkMEpCUTA1R0xGZEJRVmNzUjBGQlNTeERRVUZCTEVWQlFXMUNSU3hOUVVGVkxFTkJRVE5DUml4WFFVRlhMRVZCUVVNc1EwRkJSeXhOUVVGaExFMUJRVUVzUTBGQldFVXNWVUZCVlN4RFFVRkZMRU5CUVVNN2IwSkJRMnBFTEVOQlFVTTdiMEpCUlVRc1RVRkJUU3hEUVVGRFJpeFhRVUZYTzJkQ1FVTndRaXhEUVVGRExFVkJRVVVzU1VGQlNTeEhRVU5RUnl4TlFVRk5MRWRCUVVrc1EwRkJSU3hKUVVGakxFMUJRVVVzUTBGQlpFZ3NXVUZCVnl4RlFVRkRMRU5CUVVVN1owSkJSV3hETEUxQlFVMHNRMEZCUTBjc1RVRkJUVHRaUVVObUxFTkJRVU03T3p0WlFVVkVReXhIUVVGTExFVkJRVXhCTEVOQlFVczdiVUpCUVV4QkxGRkJRVkVzUTBGQlVrRXNTMEZCU3l4SFFVRkhMRU5CUVVNN1owSkJRVU1zVFVGQlRTeHpRa0UxUTBkcVFpeHBRa0ZCYVVJc1lVRTBRMkpwUWl4RFFVRkxMRkZCUVZnc1NVRkJTeXhoUVVGUGFrSXNhVUpCUVdsQ0xFVkJRVVVzU1VGQlNTeERRVUZEUXl4TFFVRkxPMWxCUVVjc1EwRkJRenM3T3p0WlFVVjJSR2xDTEVkQlFWTXNSVUZCVkVFc1EwRkJVenR0UWtGQmFFSXNVVUZCVVN4RFFVRkVRU3hUUVVGVExFTkJRVU5hTEV0QlFVc3NSVUZCUlN4RFFVRkRPMmRDUVVOMlFpeEhRVUZMTEVOQlFVTmhMSFZDUVVGMVFpeFBRVUZIUXl4TlFVRnJRaXh4UWtGQlEyUXNTMEZCU3p0blFrRkZlRVJCTEV0QlFVc3NSMEZCUjJFc2RVSkJRWFZDTEVOQlFVTXNRMEZCUlN4RlFVRkhMRUZCUVVnc1EwRkJSenRuUWtGRmNrTXNSMEZCU3l4RFFVRkRSU3hUUVVGVExFOUJRVWRETEUxQlFVa3NUMEZCUTJoQ0xFdEJRVXM3WjBKQlJUVkNRU3hMUVVGTExFZEJRVWRsTEZOQlFWTXNRMEZCUXl4RFFVRkZMRVZCUVVjc1FVRkJTQ3hEUVVGSE8yZENRVVYyUWl4SFFVRkxMRU5CUVVORkxGTkJRVk1zUjBGQlJ5eExRVUZMTEVWQlEycENkRUlzUzBGQlN5eEhRVUZIU3l4TFFVRkxMRU5CUVVOclFpeEhRVUZITEVOQlFVTXNVVUZCVVN4RFFVRlFReXhKUVVGSkxFVkJRVXNzUTBGQlF6dHZRa0ZETTBJc1IwRkJTeXhEUVVGRFpDeEpRVUZKTEVkQlFVZGpMRWxCUVVrc1EwRkJRME1zV1VGQldTeERRVUZEU0N4VFFVRlRPMjlDUVVWNFF5eE5RVUZOTEVOQlFVTmFMRWxCUVVrN1owSkJRMklzUTBGQlF5eEhRVU5FWjBJc2FVSkJRV2xDTEVkQlFVY3NSMEZCUnl4RFFVRkRNMElzYVVKQlFXbENMRU5CUVVORExFdEJRVXM3WjBKQlJYSkVMRTFCUVUwc1EwRkJRekJDTEdsQ1FVRnBRanRaUVVNeFFpeERRVUZET3p0Tk96dEZRV2hGTkVORExGbEJRV1U3YTBKQlFYcEROVUlzYVVKQlFXbENMRUVpZlE9PSIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBDaG9pY2VPZlBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9jaG9pY2VPZlBhcnRzXCI7XG5pbXBvcnQgT25lT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL29uZU9yTW9yZVBhcnRzXCI7XG5cbmltcG9ydCB7IFJ1bGVSdWxlTmFtZSwgRXJyb3JSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG9jdW1lbnREZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHJ1bGVSdWxlTmFtZSA9IFJ1bGVSdWxlTmFtZSxcbiAgICAgICAgICBlcnJvclJ1bGVOYW1lID0gRXJyb3JSdWxlTmFtZSxcbiAgICAgICAgICBydWxlUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChydWxlUnVsZU5hbWUpLFxuICAgICAgICAgIGVycm9yUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChlcnJvclJ1bGVOYW1lKSxcbiAgICAgICAgICBydWxlUnVsZU5hbWVBbmRFcnJvclJ1bGVOYW1lUGFydHMgPSBbXG4gICAgICAgICAgICBydWxlUnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgZXJyb3JSdWxlTmFtZVBhcnRcbiAgICAgICAgICBdLFxuICAgICAgICAgIGNob2ljZU9mUnVsZVJ1bGVOYW1lQW5kRXJyb3JSdWxlTmFtZVBhcnRzUGFydCA9IG5ldyBDaG9pY2VPZlBhcnRzUGFydChydWxlUnVsZU5hbWVBbmRFcnJvclJ1bGVOYW1lUGFydHMpLFxuICAgICAgICAgIG9uZU9yTW9yZUNob2ljZU9mUnVsZVJ1bGVOYW1lQW5kRXJyb3JSdWxlTmFtZVBhcnRzUGFydHNQYXJ0ID0gbmV3IE9uZU9yTW9yZVBhcnRzUGFydChjaG9pY2VPZlJ1bGVSdWxlTmFtZUFuZEVycm9yUnVsZU5hbWVQYXJ0c1BhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgb25lT3JNb3JlQ2hvaWNlT2ZSdWxlUnVsZU5hbWVBbmRFcnJvclJ1bGVOYW1lUGFydHNQYXJ0c1BhcnRcbiAgICAgICAgICBdO1xuICAgIFxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgRG9jdW1lbnRCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9kb2N1bWVudFwiO1xuaW1wb3J0IERvY3VtZW50RGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9kb2N1bWVudFwiO1xuXG5pbXBvcnQgeyBEb2N1bWVudFJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb2N1bWVudFJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgZG9jdW1lbnREZWZpbml0aW9uID0gbmV3IERvY3VtZW50RGVmaW5pdGlvbigpLFxuICAgICAgICAgIG5hbWUgPSBEb2N1bWVudFJ1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgZG9jdW1lbnREZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gRG9jdW1lbnRCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVOYW1lQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCBydWxlTmFtZSA9IHRoaXMuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICBydWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHJ1bGVOYW1lLCBsb29rQWhlYWQpO1xuXG4gICAgcmV0dXJuIHJ1bGVOYW1lUGFydDtcbiAgfVxuXG4gIGdldFJ1bGVOYW1lKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxOb2RlQ29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCksXG4gICAgICAgICAgcnVsZU5hbWUgPSB0ZXJtaW5hbE5vZGVDb250ZW50OyAvLy9cbiAgICBcbiAgICByZXR1cm4gcnVsZU5hbWU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoUnVsZU5hbWVCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBOYW1lRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9uYW1lXCI7XG5pbXBvcnQgUnVsZU5hbWVCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9ydWxlTmFtZVwiO1xuXG5pbXBvcnQgeyBSdWxlTmFtZVJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlTmFtZVJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZURlZmluaXRpb24gPSBuZXcgTmFtZURlZmluaXRpb24oKSxcbiAgICAgICAgICBuYW1lID0gUnVsZU5hbWVSdWxlTmFtZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIG5hbWVEZWZpbml0aW9uICAvLy9cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBSdWxlTmFtZUJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFdpbGRjYXJkUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbC93aWxkY2FyZFwiO1xuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXaWxkY2FyZEJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3Qgd2lsZGNhcmRQYXJ0ID0gbmV3IFdpbGRjYXJkUGFydCgpO1xuXG4gICAgcmV0dXJuIHdpbGRjYXJkUGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhXaWxkY2FyZEJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFN5bWJvbERlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoY29udGVudCkge1xuICAgIGNvbnN0IHRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoY29udGVudCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFBhcnRcbiAgICAgICAgICBdO1xuICAgIFxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFdpbGRjYXJkQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvd2lsZGNhcmRcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vdGVybWluYWxTeW1ib2xcIjtcblxuaW1wb3J0IHsgV2lsZGNhcmRSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyB3aWxkY2FyZCB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdpbGRjYXJkUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCB3aWxkY2FyZFRlcm1pbmFsU3ltYm9sQ29udGVudCA9IHdpbGRjYXJkLFxuICAgICAgICAgIHdpbGRjYXJkVGVybWluYWxTeW1ib2xEZWZpbml0aW9uID0gbmV3IFRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbih3aWxkY2FyZFRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgbmFtZSA9IFdpbGRjYXJkUnVsZU5hbWUsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICB3aWxkY2FyZFRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFdpbGRjYXJkQk5GTm9kZTtcblxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUgZnJvbSBcIi4vdmVydGljYWxCcmFuY2hcIjtcblxuY29uc3QgeyBFTkRfT0ZfTElORSB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZUJORk5vZGVQYXJzZVRyZWUgZXh0ZW5kcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBFTkRfT0ZfTElORSwgLy8vXG4gICAgICAgICAgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoID0gc3RyaW5nTGVuZ3RoLCAvLy9cbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21XaWR0aCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21TdHJpbmdBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKEVuZE9mTGluZUJORk5vZGVQYXJzZVRyZWUsIHN0cmluZywgdmVydGljYWxCcmFuY2hQb3NpdGlvbik7XG5cbiAgICB0ZXJtaW5hbE5vZGVQYXJzZVRyZWUuYXBwZW5kVG9Ub3AodmVydGljYWxCcmFuY2hQYXJzZVRyZWUpO1xuXG4gICAgY29uc3QgZW5kT2ZMaW5lQk5GTm9kZVBhcnNlVHJlZSA9IHRlcm1pbmFsTm9kZVBhcnNlVHJlZTsgLy8vXG5cbiAgICByZXR1cm4gZW5kT2ZMaW5lQk5GTm9kZVBhcnNlVHJlZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVGVybWluYWxOb2RlIGZyb20gXCIuLi90ZXJtaW5hbFwiO1xuaW1wb3J0IEVuZE9mTGluZUJORk5vZGVQYXJzZVRyZWUgZnJvbSBcIi4uLy4uL3BhcnNlVHJlZS9lbmRPZkxpbmVOb2RlXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lQk5GTm9kZSBleHRlbmRzIFRlcm1pbmFsTm9kZSB7XG4gIGdldENvbnRlbnQoKSB7XG4gICAgY29uc3QgY29udGVudCA9IEVNUFRZX1NUUklORztcblxuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgYXNQYXJzZVRyZWUodG9rZW5zKSB7XG4gICAgY29uc3QgZW5kT2ZMaW5lQk5GTm9kZVBhcnNlVHJlZSA9IEVuZE9mTGluZUJORk5vZGVQYXJzZVRyZWUuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBwYXJzZVRyZWUgPSBlbmRPZkxpbmVCTkZOb2RlUGFyc2VUcmVlOyAgLy8vXG5cbiAgICByZXR1cm4gcGFyc2VUcmVlO1xuICB9XG5cbiAgc3RhdGljIGZyb21TaWduaWZpY2FudFRva2VuKHNpZ25pZmljYW50VG9rZW4pIHsgcmV0dXJuIFRlcm1pbmFsTm9kZS5mcm9tU2lnbmlmaWNhbnRUb2tlbihFbmRPZkxpbmVCTkZOb2RlLCBzaWduaWZpY2FudFRva2VuKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbFwiO1xuaW1wb3J0IEVuZE9mTGluZUJORk5vZGUgZnJvbSBcIi4uLy4uL25vZGUvdGVybWluYWwvZW5kT2ZMaW5lXCI7XG5cbmNvbnN0IHsgRU5EX09GX0xJTkUgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRPZkxpbmVQYXJ0IGV4dGVuZHMgVGVybWluYWxQYXJ0IHtcbiAgcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBsZXQgZW5kT2ZMaW5lQk5GTm9kZSA9IG51bGw7XG4gICAgXG4gICAgY29uc3Qgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKSxcblx0XHQgICAgICBuZXh0U2lnbmlmaWNhbnRUb2tlbiA9IHN0YXRlLmdldE5leHRTaWduaWZpY2FudFRva2VuKCksXG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlbiA9IG5leHRTaWduaWZpY2FudFRva2VuOyAvLy9cblxuICAgIGlmIChzaWduaWZpY2FudFRva2VuICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzaWduaWZpY2FudFRva2VuRW5kT2ZMaW5lVG9rZW4gPSBzaWduaWZpY2FudFRva2VuLmlzRW5kT2ZMaW5lVG9rZW4oKTtcblxuICAgICAgaWYgKHNpZ25pZmljYW50VG9rZW5FbmRPZkxpbmVUb2tlbikge1xuICAgICAgICBlbmRPZkxpbmVCTkZOb2RlID0gRW5kT2ZMaW5lQk5GTm9kZS5mcm9tU2lnbmlmaWNhbnRUb2tlbihzaWduaWZpY2FudFRva2VuKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZWQgPSAoZW5kT2ZMaW5lQk5GTm9kZSAhPT0gbnVsbCk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBub2Rlcy5wdXNoKGVuZE9mTGluZUJORk5vZGUpO1xuXG4gICAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgcGFyc2VkID0gY2FsbGJhY2soKTtcblxuICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgIG5vZGVzLnBvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gRU5EX09GX0xJTkU7IC8vL1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIGNsb25lKCkgeyByZXR1cm4gc3VwZXIuY2xvbmUoRW5kT2ZMaW5lUGFydCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVuZE9mTGluZVBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWwvZW5kT2ZMaW5lXCI7XG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZUJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgZW5kT2ZMaW5lUGFydCA9IG5ldyBFbmRPZkxpbmVQYXJ0KCk7XG5cbiAgICByZXR1cm4gZW5kT2ZMaW5lUGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhFbmRPZkxpbmVCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgRW5kT2ZMaW5lQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvZW5kT2ZMaW5lXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3Rlcm1pbmFsU3ltYm9sXCI7XG5cbmltcG9ydCB7IEVuZE9mTGluZVJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IEVORF9PRl9MSU5FIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBlbmRPZkxpbmVUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBFTkRfT0ZfTElORSxcbiAgICAgICAgICBlbmRPZkxpbmVUZXJtaW5hbFN5bWJvbERlZmluaXRpb24gPSBuZXcgVGVybWluYWxTeW1ib2xEZWZpbml0aW9uKGVuZE9mTGluZVRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgbmFtZSA9IEVuZE9mTGluZVJ1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgZW5kT2ZMaW5lVGVybWluYWxTeW1ib2xEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gRW5kT2ZMaW5lQk5GTm9kZTtcblxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgUGFydEJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3BhcnRcIjtcbmltcG9ydCBSdWxlTmFtZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcnVsZU5hbWVcIjtcblxuaW1wb3J0IHsgUXVhbnRpZmllclJ1bGVOYW1lLCBPcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSwgT25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lLCBaZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBRdWFudGlmaWVyUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gUXVhbnRpZmllclJ1bGVOYW1lLFxuICAgICAgICAgIG9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lID0gT3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUsXG4gICAgICAgICAgb25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lID0gT25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lLFxuICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWUgPSBaZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lLFxuICAgICAgICAgIG9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24ob3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUpLFxuICAgICAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSksXG4gICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWUpLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgb3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgb25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gUGFydEJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uLy4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmaW5pdGlvbkJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZURlZmluaXRpb24oKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIHBhcnROb2RlcyA9IGNoaWxkTm9kZXMsIC8vL1xuICAgICAgICAgIGxvb2tBaGVhZCA9IGZhbHNlLCAgLy8vXG4gICAgICAgICAgcGFydHMgPSBwYXJ0Tm9kZXMubWFwKChwYXJ0Tm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFydCA9IHBhcnROb2RlLmdlbmVyYXRlUGFydChsb29rQWhlYWQpO1xuICBcbiAgICAgICAgICAgIHJldHVybiBwYXJ0O1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGRlZmluaXRpb24gPSBuZXcgRGVmaW5pdGlvbihwYXJ0cyk7XG5cbiAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhEZWZpbml0aW9uQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgT25lT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL29uZU9yTW9yZVBhcnRzXCI7XG5cbmltcG9ydCB7IFBhcnRSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmaW5pdGlvbkRlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcGFydFJ1bGVOYW1lID0gUGFydFJ1bGVOYW1lLFxuICAgICAgICAgIHBhcnRSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHBhcnRSdWxlTmFtZSksXG4gICAgICAgICAgb25lT3JNb3JlUnVsZU5hbWVQYXJ0c1BhcnQgPSBuZXcgT25lT3JNb3JlUGFydHNQYXJ0KHBhcnRSdWxlTmFtZVBhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgb25lT3JNb3JlUnVsZU5hbWVQYXJ0c1BhcnRcbiAgICAgICAgICBdO1xuXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBEZWZpbml0aW9uQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvZGVmaW5pdGlvblwiO1xuaW1wb3J0IERlZmluaXRpb25EZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL2RlZmluaXRpb25cIjtcblxuaW1wb3J0IHsgRGVmaW5pdGlvblJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZpbml0aW9uUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gRGVmaW5pdGlvblJ1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25EZWZpbml0aW9uID0gbmV3IERlZmluaXRpb25EZWZpbml0aW9uKCksXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBkZWZpbml0aW9uRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IERlZmluaXRpb25CTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgZXZlbiB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmaW5pdGlvbnNCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVEZWZpbml0aW9ucygpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgZXZlbkNoaWxkTm9kZXMgPSBldmVuKGNoaWxkTm9kZXMpLCAgLy8vXG4gICAgICAgICAgZGVmaW5pdGlvbk5vZGVzID0gZXZlbkNoaWxkTm9kZXMsIC8vL1xuICAgICAgICAgIGRlZmluaXRpb25zID0gZGVmaW5pdGlvbk5vZGVzLm1hcCgoZGVmaW5pdGlvbk5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb24gPSBkZWZpbml0aW9uTm9kZS5nZW5lcmF0ZURlZmluaXRpb24oKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIGRlZmluaXRpb247XG4gICAgICAgICAgfSk7XG4gICAgXG4gICAgcmV0dXJuIGRlZmluaXRpb25zO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKERlZmluaXRpb25zQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX25vblRlcm1pbmFsID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbFwiKSk7XG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiKTtcbnZhciBfbG9va0FoZWFkID0gcmVxdWlyZShcIi4uLy4uL3V0aWxpdGllcy9sb29rQWhlYWRcIik7XG52YXIgX3BhcnRUeXBlcyA9IHJlcXVpcmUoXCIuLi8uLi9wYXJ0VHlwZXNcIik7XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHNlbGY7XG59XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gICAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgICB9XG59XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cbmZ1bmN0aW9uIF9nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgIT09IFwidW5kZWZpbmVkXCIgJiYgUmVmbGVjdC5nZXQpIHtcbiAgICAgICAgX2dldCA9IFJlZmxlY3QuZ2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIF9nZXQgPSBmdW5jdGlvbiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSB7XG4gICAgICAgICAgICB2YXIgYmFzZSA9IF9zdXBlclByb3BCYXNlKHRhcmdldCwgcHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKCFiYXNlKSByZXR1cm47XG4gICAgICAgICAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYmFzZSwgcHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKGRlc2MuZ2V0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlc2MuZ2V0LmNhbGwocmVjZWl2ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRlc2MudmFsdWU7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyIHx8IHRhcmdldCk7XG59XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7XG4gICAgfTtcbiAgICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufVxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gICAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gICAgfVxuICAgIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDoge1xuICAgICAgICBkZWZhdWx0OiBvYmpcbiAgICB9O1xufVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICAgIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgICAgIHJldHVybiBjYWxsO1xuICAgIH1cbiAgICByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTtcbn1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgICAgIG8uX19wcm90b19fID0gcDtcbiAgICAgICAgcmV0dXJuIG87XG4gICAgfTtcbiAgICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufVxuZnVuY3Rpb24gX3N1cGVyUHJvcEJhc2Uob2JqZWN0LCBwcm9wZXJ0eSkge1xuICAgIHdoaWxlKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSkpe1xuICAgICAgICBvYmplY3QgPSBfZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTtcbiAgICAgICAgaWYgKG9iamVjdCA9PT0gbnVsbCkgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG59XG52YXIgX3R5cGVvZiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIFwiQHN3Yy9oZWxwZXJzIC0gdHlwZW9mXCI7XG4gICAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG59O1xuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTtcbiAgICBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlO1xuICAgIHRyeSB7XG4gICAgICAgIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24oKSB7fSkpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkge1xuICAgIHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpO1xuICAgIHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHtcbiAgICAgICAgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7XG4gICAgICAgIGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7XG4gICAgICAgICAgICB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yO1xuICAgICAgICAgICAgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7XG4gICAgfTtcbn1cbnZhciBTZXF1ZW5jZU9mUGFydHNQYXJ0ID0gLyojX19QVVJFX18qLyBmdW5jdGlvbihOb25UZXJtaW5hbFBhcnQpIHtcbiAgICBfaW5oZXJpdHMoU2VxdWVuY2VPZlBhcnRzUGFydCwgTm9uVGVybWluYWxQYXJ0KTtcbiAgICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFNlcXVlbmNlT2ZQYXJ0c1BhcnQpO1xuICAgIGZ1bmN0aW9uIFNlcXVlbmNlT2ZQYXJ0c1BhcnQocGFydHMpIHtcbiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFNlcXVlbmNlT2ZQYXJ0c1BhcnQpO1xuICAgICAgICB2YXIgX3RoaXM7XG4gICAgICAgIHZhciB0eXBlID0gX3BhcnRUeXBlcy5TZXF1ZW5jZU9mUGFydHNQYXJ0VHlwZTsgLy8vXG4gICAgICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgdHlwZSk7XG4gICAgICAgIF90aGlzLnBhcnRzID0gcGFydHM7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgX2NyZWF0ZUNsYXNzKFNlcXVlbmNlT2ZQYXJ0c1BhcnQsIFtcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImdldFBhcnRzXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UGFydHMoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFydHM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJwYXJzZVwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB2YXIgcGFyc2VkO1xuICAgICAgICAgICAgICAgIHZhciBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpLCBwYXJ0c05vZGVzID0gW10sIGluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICBwYXJzZWQgPSAoMCwgX2xvb2tBaGVhZCkucGFyc2VQYXJ0cyh0aGlzLnBhcnRzLCBwYXJ0c05vZGVzLCBpbmRleCwgc3RhdGUsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICgwLCBfYXJyYXkpLnB1c2gobm9kZXMsIHBhcnRzTm9kZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJhc1N0cmluZ1wiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFzU3RyaW5nKCkge1xuICAgICAgICAgICAgICAgIHZhciBwYXJ0c1N0cmluZzEgPSB0aGlzLnBhcnRzLnJlZHVjZShmdW5jdGlvbihwYXJ0c1N0cmluZywgcGFydCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcGFydFN0cmluZyA9IHBhcnQuYXNTdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnRzU3RyaW5nID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0c1N0cmluZyA9IHBhcnRTdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0c1N0cmluZyA9IFwiXCIuY29uY2F0KHBhcnRzU3RyaW5nLCBcIiBcIikuY29uY2F0KHBhcnRTdHJpbmcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJ0c1N0cmluZztcbiAgICAgICAgICAgICAgICB9LCBudWxsKSwgc3RyaW5nID0gXCIoIFwiLmNvbmNhdChwYXJ0c1N0cmluZzEsIFwiIClcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImNsb25lXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xvbmUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9nZXQoX2dldFByb3RvdHlwZU9mKFNlcXVlbmNlT2ZQYXJ0c1BhcnQucHJvdG90eXBlKSwgXCJjbG9uZVwiLCB0aGlzKS5jYWxsKHRoaXMsIFNlcXVlbmNlT2ZQYXJ0c1BhcnQsIHRoaXMucGFydHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgXSwgW1xuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiZnJvbU5vZGVzXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZnJvbU5vZGVzKG5vZGVzKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFsbEJ1dEZpcnN0QW5kTGFzdE5vZGVzID0gKDAsIF9hcnJheSkuYWxsQnV0Rmlyc3RBbmRMYXN0KG5vZGVzKTtcbiAgICAgICAgICAgICAgICBub2RlcyA9IGFsbEJ1dEZpcnN0QW5kTGFzdE5vZGVzOyAvLy9cbiAgICAgICAgICAgICAgICB2YXIgbG9va0FoZWFkID0gZmFsc2UsIHBhcnRzID0gbm9kZXMubWFwKGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnQgPSBub2RlLmdlbmVyYXRlUGFydChsb29rQWhlYWQpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFydDtcbiAgICAgICAgICAgICAgICB9KSwgc2VxdWVuY2VPZlBhcnRzUGFydCA9IG5ldyBTZXF1ZW5jZU9mUGFydHNQYXJ0KHBhcnRzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VxdWVuY2VPZlBhcnRzUGFydDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIF0pO1xuICAgIHJldHVybiBTZXF1ZW5jZU9mUGFydHNQYXJ0O1xufShfbm9uVGVybWluYWwuZGVmYXVsdCk7XG5leHBvcnRzLmRlZmF1bHQgPSBTZXF1ZW5jZU9mUGFydHNQYXJ0O1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUx5NHVMM055WXk5d1lYSjBMMjV2YmxSbGNtMXBibUZzTDNObGNYVmxibU5sVDJaUVlYSjBjeTVxY3lKZExDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SmNJblZ6WlNCemRISnBZM1JjSWp0Y2JseHVhVzF3YjNKMElFNXZibFJsY20xcGJtRnNVR0Z5ZENCbWNtOXRJRndpTGk0dkxpNHZjR0Z5ZEM5dWIyNVVaWEp0YVc1aGJGd2lPMXh1WEc1cGJYQnZjblFnZXlCd2RYTm9JSDBnWm5KdmJTQmNJaTR1THk0dUwzVjBhV3hwZEdsbGN5OWhjbkpoZVZ3aU8xeHVhVzF3YjNKMElIc2djR0Z5YzJWUVlYSjBjeUI5SUdaeWIyMGdYQ0l1TGk4dUxpOTFkR2xzYVhScFpYTXZiRzl2YTBGb1pXRmtYQ0k3WEc1cGJYQnZjblFnZXlCaGJHeENkWFJHYVhKemRFRnVaRXhoYzNRZ2ZTQm1jbTl0SUZ3aUxpNHZMaTR2ZFhScGJHbDBhV1Z6TDJGeWNtRjVYQ0k3WEc1cGJYQnZjblFnZXlCVFpYRjFaVzVqWlU5bVVHRnlkSE5RWVhKMFZIbHdaU0I5SUdaeWIyMGdYQ0l1TGk4dUxpOXdZWEowVkhsd1pYTmNJanRjYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnWTJ4aGMzTWdVMlZ4ZFdWdVkyVlBabEJoY25SelVHRnlkQ0JsZUhSbGJtUnpJRTV2YmxSbGNtMXBibUZzVUdGeWRDQjdYRzRnSUdOdmJuTjBjblZqZEc5eUtIQmhjblJ6S1NCN1hHNGdJQ0FnWTI5dWMzUWdkSGx3WlNBOUlGTmxjWFZsYm1ObFQyWlFZWEowYzFCaGNuUlVlWEJsT3lBdkx5OWNibHh1SUNBZ0lITjFjR1Z5S0hSNWNHVXBPMXh1WEc0Z0lDQWdkR2hwY3k1d1lYSjBjeUE5SUhCaGNuUnpPMXh1SUNCOVhHNWNiaUFnWjJWMFVHRnlkSE1vS1NCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdWNHRnlkSE03WEc0Z0lIMWNibHh1SUNCd1lYSnpaU2h1YjJSbGN5d2djM1JoZEdVc0lHTmhiR3hpWVdOcktTQjdYRzRnSUNBZ2JHVjBJSEJoY25ObFpEdGNibHh1SUNBZ0lHTnZibk4wSUhOaGRtVmtTVzVrWlhnZ1BTQnpkR0YwWlM1blpYUlRZWFpsWkVsdVpHVjRLQ2tzWEc0Z0lDQWdJQ0FnSUNBZ2NHRnlkSE5PYjJSbGN5QTlJRnRkTEZ4dUlDQWdJQ0FnSUNBZ0lHbHVaR1Y0SUQwZ01EdGNibHh1SUNBZ0lIQmhjbk5sWkNBOUlIQmhjbk5sVUdGeWRITW9kR2hwY3k1d1lYSjBjeXdnY0dGeWRITk9iMlJsY3l3Z2FXNWtaWGdzSUhOMFlYUmxMQ0JqWVd4c1ltRmpheWs3WEc1Y2JpQWdJQ0JwWmlBb2NHRnljMlZrS1NCN1hHNGdJQ0FnSUNCd2RYTm9LRzV2WkdWekxDQndZWEowYzA1dlpHVnpLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnBaaUFvSVhCaGNuTmxaQ2tnZTF4dUlDQWdJQ0FnYzNSaGRHVXVZbUZqYTNSeVlXTnJLSE5oZG1Wa1NXNWtaWGdwTzF4dUlDQWdJSDFjYmx4dUlDQWdJSEpsZEhWeWJpQndZWEp6WldRN1hHNGdJSDFjYmx4dUlDQmhjMU4wY21sdVp5Z3BJSHRjYmlBZ0lDQmpiMjV6ZENCd1lYSjBjMU4wY21sdVp5QTlJSFJvYVhNdWNHRnlkSE11Y21Wa2RXTmxLQ2h3WVhKMGMxTjBjbWx1Wnl3Z2NHRnlkQ2tnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdjR0Z5ZEZOMGNtbHVaeUE5SUhCaGNuUXVZWE5UZEhKcGJtY29LVHRjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0hCaGNuUnpVM1J5YVc1bklEMDlQU0J1ZFd4c0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lIQmhjblJ6VTNSeWFXNW5JRDBnY0dGeWRGTjBjbWx1Wnp0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lIQmhjblJ6VTNSeWFXNW5JRDBnWUNSN2NHRnlkSE5UZEhKcGJtZDlJQ1I3Y0dGeWRGTjBjbWx1WjMxZ08xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjR0Z5ZEhOVGRISnBibWM3WEc0Z0lDQWdJQ0FnSUNBZ2ZTd2diblZzYkNrc1hHNGdJQ0FnSUNBZ0lDQWdjM1J5YVc1bklEMGdZQ2dnSkh0d1lYSjBjMU4wY21sdVozMGdLV0E3WEc1Y2JpQWdJQ0J5WlhSMWNtNGdjM1J5YVc1bk8xeHVJQ0I5WEc1Y2JpQWdZMnh2Ym1Vb0tTQjdJSEpsZEhWeWJpQnpkWEJsY2k1amJHOXVaU2hUWlhGMVpXNWpaVTltVUdGeWRITlFZWEowTENCMGFHbHpMbkJoY25SektUc2dmVnh1WEc0Z0lITjBZWFJwWXlCbWNtOXRUbTlrWlhNb2JtOWtaWE1wSUh0Y2JpQWdJQ0JqYjI1emRDQmhiR3hDZFhSR2FYSnpkRUZ1WkV4aGMzUk9iMlJsY3lBOUlHRnNiRUoxZEVacGNuTjBRVzVrVEdGemRDaHViMlJsY3lrN1hHNWNiaUFnSUNCdWIyUmxjeUE5SUdGc2JFSjFkRVpwY25OMFFXNWtUR0Z6ZEU1dlpHVnpPeUFnTHk4dlhHNWNiaUFnSUNCamIyNXpkQ0JzYjI5clFXaGxZV1FnUFNCbVlXeHpaU3hjYmlBZ0lDQWdJQ0FnSUNCd1lYSjBjeUE5SUc1dlpHVnpMbTFoY0Nnb2JtOWtaU2tnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdjR0Z5ZENBOUlHNXZaR1V1WjJWdVpYSmhkR1ZRWVhKMEtHeHZiMnRCYUdWaFpDazdYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCd1lYSjBPMXh1SUNBZ0lDQWdJQ0FnSUgwcExGeHVJQ0FnSUNBZ0lDQWdJSE5sY1hWbGJtTmxUMlpRWVhKMGMxQmhjblFnUFNCdVpYY2dVMlZ4ZFdWdVkyVlBabEJoY25SelVHRnlkQ2h3WVhKMGN5azdYRzVjYmlBZ0lDQnlaWFIxY200Z2MyVnhkV1Z1WTJWUFpsQmhjblJ6VUdGeWREdGNiaUFnZlZ4dWZWeHVJbDBzSW01aGJXVnpJanBiSWxObGNYVmxibU5sVDJaUVlYSjBjMUJoY25RaUxDSndZWEowY3lJc0luUjVjR1VpTENKVFpYRjFaVzVqWlU5bVVHRnlkSE5RWVhKMFZIbHdaU0lzSW1kbGRGQmhjblJ6SWl3aWNHRnljMlVpTENKdWIyUmxjeUlzSW5OMFlYUmxJaXdpWTJGc2JHSmhZMnNpTENKd1lYSnpaV1FpTENKellYWmxaRWx1WkdWNElpd2laMlYwVTJGMlpXUkpibVJsZUNJc0luQmhjblJ6VG05a1pYTWlMQ0pwYm1SbGVDSXNJbkJoY25ObFVHRnlkSE1pTENKd2RYTm9JaXdpWW1GamEzUnlZV05ySWl3aVlYTlRkSEpwYm1jaUxDSndZWEowYzFOMGNtbHVaeUlzSW5KbFpIVmpaU0lzSW5CaGNuUWlMQ0p3WVhKMFUzUnlhVzVuSWl3aWMzUnlhVzVuSWl3aVkyeHZibVVpTENKbWNtOXRUbTlrWlhNaUxDSmhiR3hDZFhSR2FYSnpkRUZ1WkV4aGMzUk9iMlJsY3lJc0ltRnNiRUoxZEVacGNuTjBRVzVrVEdGemRDSXNJbXh2YjJ0QmFHVmhaQ0lzSW0xaGNDSXNJbTV2WkdVaUxDSm5aVzVsY21GMFpWQmhjblFpTENKelpYRjFaVzVqWlU5bVVHRnlkSE5RWVhKMElpd2lUbTl1VkdWeWJXbHVZV3hRWVhKMElsMHNJbTFoY0hCcGJtZHpJam9pUVVGQlFTeERRVUZaTEZkQlFVRXNRMEZCUXpzN08wVTdkMEk3UVVGRlpTeEhRVUYzUWl4RFFVRjRRaXhaUVVGM1FqdEJRVVV2UWl4SFFVRjFRaXhEUVVGMlFpeE5RVUYxUWp0QlFVTnFRaXhIUVVFeVFpeERRVUV6UWl4VlFVRXlRanRCUVVWa0xFZEJRV2xDTEVOQlFXcENMRlZCUVdsQ096czdPenM3T3pzN096czdPenM3T0VRN2MwTTdOa1E3YVVVN096czdkMFU3WjBVN096czdPekJDT3pzN096czdPenM3TzFNN096czdPenM3U3pzN096czdPenM3T3pzN096dE5PM2xFT3pzN096czdPenM3T3pzN096czdkVUk3TzBzN096czdPM2RET3pzN096czdNa0k3T3pzN096czdPM0ZHT3pzN096czdPenM3T3pzN2JVVTdPMmxFT3pzN096dEpRVVZ3UTBFc2JVSkJRVzFDTEdsQ1FVRjZRaXhSUVVGUk8yMUVPenRoUVVGR1FTeHRRa0ZCYlVJc1EwRkRNVUpETEV0QlFVczdhMFE3TzFGQlEyWXNSMEZCU3l4RFFVRkRReXhKUVVGSkxFZEJRVWRETEZWQlFYVkNMREJDUVVGRkxFVkJRVWNzUVVGQlNDeERRVUZITzJ0RFFVVnVRMFFzU1VGQlNTeERRMkprTEVORVlXZENPMk5CUlZCRUxFdEJRVXNzUjBGQlIwRXNTMEZCU3l4RFFVRkRPenM3T3p0WlFVZHlRa2NzUjBGQlVTeEZRVUZTUVN4RFFVRlJPMjFDUVVGU1FTeFJRVUZSTEVOQlFWSkJMRkZCUVZFc1IwRkJSeXhEUVVGRE8yZENRVU5XTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVOSUxFdEJRVXM3V1VGRGJrSXNRMEZCUXpzN08xbEJSVVJKTEVkQlFVc3NSVUZCVEVFc1EwRkJTenR0UWtGQlRFRXNVVUZCVVN4RFFVRlNRU3hMUVVGTExFTkJRVU5ETEV0QlFVc3NSVUZCUlVNc1MwRkJTeXhGUVVGRlF5eFJRVUZSTEVWQlFVVXNRMEZCUXp0blFrRkROMElzUjBGQlJ5eERRVUZEUXl4TlFVRk5PMmRDUVVWV0xFZEJRVXNzUTBGQlEwTXNWVUZCVlN4SFFVRkhTQ3hMUVVGTExFTkJRVU5KTEdGQlFXRXNTVUZEYUVORExGVkJRVlVzUjBGQlJ5eERRVUZETEVOQlFVTXNSVUZEWmtNc1MwRkJTeXhIUVVGSExFTkJRVU03WjBKQlJXWktMRTFCUVUwc1QwRkJSMHNzVlVGQlZTeGhRVUZETEVsQlFVa3NRMEZCUTJJc1MwRkJTeXhGUVVGRlZ5eFZRVUZWTEVWQlFVVkRMRXRCUVVzc1JVRkJSVTRzUzBGQlN5eEZRVUZGUXl4UlFVRlJMRU5CUVVNc1EwRkJRenRuUWtGRmNFVXNSVUZCUlN4RlFVRkZReXhOUVVGTkxFVkJRVVVzUTBGQlF6dDNRa0ZEV0Uwc1RVRkJTU3hQUVVGRFZDeExRVUZMTEVWQlFVVk5MRlZCUVZVc1EwRkJReXhEUVVGRE8yZENRVU14UWl4RFFVRkRPMmRDUVVWRUxFVkJRVVVzUjBGQlIwZ3NUVUZCVFN4RlFVRkZMRU5CUVVNN2IwSkJRMXBHTEV0QlFVc3NRMEZCUTFNc1UwRkJVeXhEUVVGRFRpeFZRVUZWTEVOQlFVTXNRMEZCUXp0blFrRkRPVUlzUTBGQlF6dG5Ra0ZGUkN4TlFVRk5MRU5CUVVORUxFMUJRVTA3V1VGRFppeERRVUZET3pzN1dVRkZSRkVzUjBGQlVTeEZRVUZTUVN4RFFVRlJPMjFDUVVGU1FTeFJRVUZSTEVOQlFWSkJMRkZCUVZFc1IwRkJSeXhEUVVGRE8yZENRVU5XTEVkQlFVc3NRMEZCUTBNc1dVRkJWeXhIUVVGSExFbEJRVWtzUTBGQlEycENMRXRCUVVzc1EwRkJRMnRDTEUxQlFVMHNRMEZCUXl4UlFVRlJMRU5CUVZCRUxGZEJRVmNzUlVGQlJVVXNTVUZCU1N4RlFVRkxMRU5CUVVNN2IwSkJRM1JFTEVkQlFVc3NRMEZCUTBNc1ZVRkJWU3hIUVVGSFJDeEpRVUZKTEVOQlFVTklMRkZCUVZFN2IwSkJSV2hETEVWQlFVVXNSVUZCUlVNc1YwRkJWeXhMUVVGTExFbEJRVWtzUlVGQlJTeERRVUZETzNkQ1FVTjZRa0VzVjBGQlZ5eEhRVUZIUnl4VlFVRlZMRU5CUVVNN2IwSkJRek5DTEVOQlFVTXNUVUZCVFN4RFFVRkRPM2RDUVVOT1NDeFhRVUZYTEVkQlFVa3NRMEZCUVN4RlFVRnBRa2NzVFVGQlZTeERRVUY2UWtnc1YwRkJWeXhGUVVGRExFTkJRVU1zU1VGQllTeE5RVUZCTEVOQlFWaEhMRlZCUVZVc1EwRkJSU3hEUVVGRE8yOUNRVU12UXl4RFFVRkRPMjlDUVVWRUxFMUJRVTBzUTBGQlEwZ3NWMEZCVnp0blFrRkRjRUlzUTBGQlF5eEZRVUZGTEVsQlFVa3NSMEZEVUVrc1RVRkJUU3hIUVVGSkxFTkJRVVVzU1VGQll5eE5RVUZGTEVOQlFXUktMRmxCUVZjc1JVRkJReXhEUVVGRk8yZENRVVZzUXl4TlFVRk5MRU5CUVVOSkxFMUJRVTA3V1VGRFppeERRVUZET3pzN1dVRkZSRU1zUjBGQlN5eEZRVUZNUVN4RFFVRkxPMjFDUVVGTVFTeFJRVUZSTEVOQlFWSkJMRXRCUVVzc1IwRkJSeXhEUVVGRE8yZENRVUZETEUxQlFVMHNjMEpCYkVSSGRrSXNiVUpCUVcxQ0xHRkJhMFJtZFVJc1EwRkJTeXhSUVVGWUxFbEJRVXNzWVVGQlQzWkNMRzFDUVVGdFFpeEZRVUZGTEVsQlFVa3NRMEZCUTBNc1MwRkJTenRaUVVGSExFTkJRVU03T3pzN1dVRkZla1IxUWl4SFFVRlRMRVZCUVZSQkxFTkJRVk03YlVKQlFXaENMRkZCUVZFc1EwRkJSRUVzVTBGQlV5eERRVUZEYkVJc1MwRkJTeXhGUVVGRkxFTkJRVU03WjBKQlEzWkNMRWRCUVVzc1EwRkJRMjFDTEhWQ1FVRjFRaXhQUVVGSFF5eE5RVUZyUWl4eFFrRkJRM0JDTEV0QlFVczdaMEpCUlhoRVFTeExRVUZMTEVkQlFVZHRRaXgxUWtGQmRVSXNRMEZCUXl4RFFVRkZMRVZCUVVjc1FVRkJTQ3hEUVVGSE8yZENRVVZ5UXl4SFFVRkxMRU5CUVVORkxGTkJRVk1zUjBGQlJ5eExRVUZMTEVWQlEycENNVUlzUzBGQlN5eEhRVUZIU3l4TFFVRkxMRU5CUVVOelFpeEhRVUZITEVOQlFVTXNVVUZCVVN4RFFVRlFReXhKUVVGSkxFVkJRVXNzUTBGQlF6dHZRa0ZETTBJc1IwRkJTeXhEUVVGRFZDeEpRVUZKTEVkQlFVZFRMRWxCUVVrc1EwRkJRME1zV1VGQldTeERRVUZEU0N4VFFVRlRPMjlDUVVWNFF5eE5RVUZOTEVOQlFVTlFMRWxCUVVrN1owSkJRMklzUTBGQlF5eEhRVU5FVnl4dFFrRkJiVUlzUjBGQlJ5eEhRVUZITEVOQlFVTXZRaXh0UWtGQmJVSXNRMEZCUTBNc1MwRkJTenRuUWtGRmVrUXNUVUZCVFN4RFFVRkRPRUlzYlVKQlFXMUNPMWxCUXpWQ0xFTkJRVU03TzAwN08wVkJiRVU0UTBNc1dVRkJaVHRyUWtGQk0wTm9ReXh0UWtGQmJVSXNRU0o5IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcbmltcG9ydCBaZXJvT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3plcm9Pck1vcmVQYXJ0c1wiO1xuaW1wb3J0IFNlcXVlbmNlT2ZQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvc2VxdWVuY2VPZlBhcnRzXCI7XG5cbmltcG9ydCB7IERlZmluaXRpb25SdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyB2ZXJ0aWNhbEJhciB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlZmluaXRpb25zRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBkZWZpbml0aW9uUnVsZU5hbWUgPSBEZWZpbml0aW9uUnVsZU5hbWUsXG4gICAgICAgICAgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSB2ZXJ0aWNhbEJhcixcbiAgICAgICAgICBkZWZpbml0aW9uUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChkZWZpbml0aW9uUnVsZU5hbWUpLFxuICAgICAgICAgIHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydCh2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbFRoZW5EZWZpbml0aW9uUnVsZU5hbWVQYXJ0cyA9IFtcbiAgICAgICAgICAgIHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xQYXJ0LFxuICAgICAgICAgICAgZGVmaW5pdGlvblJ1bGVOYW1lUGFydFxuICAgICAgICAgIF0sXG4gICAgICAgICAgc2VxdWVuY2VPZlBhcnRzUGFydCA9IG5ldyBTZXF1ZW5jZU9mUGFydHNQYXJ0KHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xUaGVuRGVmaW5pdGlvblJ1bGVOYW1lUGFydHMpLFxuICAgICAgICAgIHplcm9Pck1vcmVTZXF1ZW5jZU9mUGFydHNQYXJ0ID0gbmV3IFplcm9Pck1vcmVQYXJ0c1BhcnQoc2VxdWVuY2VPZlBhcnRzUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBkZWZpbml0aW9uUnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgemVyb09yTW9yZVNlcXVlbmNlT2ZQYXJ0c1BhcnRcbiAgICAgICAgICBdO1xuICAgIFxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgRGVmaW5pdGlvbnNCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9kZWZpbml0aW9uc1wiO1xuaW1wb3J0IERlZmluaXRpb25zRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9kZWZpbml0aW9uc1wiO1xuXG5pbXBvcnQgeyBEZWZpbml0aW9uc1J1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZpbml0aW9uc1J1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgZGVmaW5pdGlvbnNEZWZpbml0aW9uID0gbmV3IERlZmluaXRpb25zRGVmaW5pdGlvbigpLFxuICAgICAgICAgIG5hbWUgPSBEZWZpbml0aW9uc1J1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgZGVmaW5pdGlvbnNEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gRGVmaW5pdGlvbnNCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1pbmFsUGFydEJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIGZpcnN0Q2hpbGROb2RlID0gZmlyc3QoY2hpbGROb2RlcyksXG4gICAgICAgICAgbm9kZSA9IGZpcnN0Q2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgcGFydCA9IG5vZGUuZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCk7XG5cbiAgICByZXR1cm4gcGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhUZXJtaW5hbFBhcnRCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBUZXJtaW5hbFBhcnRCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9wYXJ0L3Rlcm1pbmFsXCI7XG5pbXBvcnQgUnVsZU5hbWVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3J1bGVOYW1lXCI7XG5cbmltcG9ydCB7IFRlcm1pbmFsUGFydFJ1bGVOYW1lLCBSZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lLCBTaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lLCBUZXJtaW5hbFN5bWJvbFJ1bGVOYW1lLCBFbmRPZkxpbmVSdWxlTmFtZSwgV2lsZGNhcmRSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxQYXJ0UnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gVGVybWluYWxQYXJ0UnVsZU5hbWUsXG4gICAgICAgICAgd2lsZGNhcmRSdWxlTmFtZSA9IFdpbGRjYXJkUnVsZU5hbWUsXG4gICAgICAgICAgZW5kT2ZMaW5lUnVsZU5hbWUgPSBFbmRPZkxpbmVSdWxlTmFtZSxcbiAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFJ1bGVOYW1lID0gVGVybWluYWxTeW1ib2xSdWxlTmFtZSxcbiAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lID0gUmVndWxhckV4cHJlc3Npb25SdWxlTmFtZSxcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lID0gU2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlTmFtZSxcbiAgICAgICAgICB3aWxkY2FyZFJ1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24od2lsZGNhcmRSdWxlTmFtZSksXG4gICAgICAgICAgZW5kT2ZMaW5lUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbihlbmRPZkxpbmVSdWxlTmFtZSksXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKHRlcm1pbmFsU3ltYm9sUnVsZU5hbWUpLFxuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbihyZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lKSxcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24oc2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlTmFtZSksXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgdGVybWluYWxTeW1ib2xSdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICBlbmRPZkxpbmVSdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICB3aWxkY2FyZFJ1bGVOYW1lRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFRlcm1pbmFsUGFydEJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuaW1wb3J0IENob2ljZU9mUGFydHNQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsL2Nob2ljZU9mUGFydHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hvaWNlT2ZQYXJ0c0JORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIG5vZGVzID0gY2hpbGROb2Rlcy5zbGljZSgpLFxuICAgICAgICAgIHBhcnQgPSBDaG9pY2VPZlBhcnRzUGFydC5mcm9tTm9kZXMobm9kZXMpO1xuXG4gICAgcmV0dXJuIHBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoQ2hvaWNlT2ZQYXJ0c0JORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBPbmVPck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvb25lT3JNb3JlUGFydHNcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuXG5pbXBvcnQgeyBQYXJ0UnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgdmVydGljYWxCYXIsIG9wZW5CcmFja2V0LCBjbG9zZUJyYWNrZXQgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaG9pY2VPZlBhcnRzRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBwYXJ0UnVsZU5hbWUgPSBQYXJ0UnVsZU5hbWUsXG4gICAgICAgICAgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSB2ZXJ0aWNhbEJhciwgLy8vXG4gICAgICAgICAgb3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBvcGVuQnJhY2tldCwgLy8vXG4gICAgICAgICAgY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50ID0gY2xvc2VCcmFja2V0LCAvLy9cbiAgICAgICAgICBwYXJ0UnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChwYXJ0UnVsZU5hbWUpLFxuICAgICAgICAgIHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydCh2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgb3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KG9wZW5CcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBjbG9zZUJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbFRoZW5QYXJ0UnVsZU5hbWVQYXJ0cyA9IFtcbiAgICAgICAgICAgIHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xQYXJ0LFxuICAgICAgICAgICAgcGFydFJ1bGVOYW1lUGFydFxuICAgICAgICAgIF0sXG4gICAgICAgICAgc2VxdWVuY2VPZlBhcnRzUGFydCA9IG5ldyBTZXF1ZW5jZU9mUGFydHNQYXJ0KHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xUaGVuUGFydFJ1bGVOYW1lUGFydHMpLFxuICAgICAgICAgIG9uZU9yTW9yZVNlcXVlbmNlT2ZQYXJ0c1BhcnQgPSBuZXcgT25lT3JNb3JlUGFydHNQYXJ0KHNlcXVlbmNlT2ZQYXJ0c1BhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgb3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnQsXG4gICAgICAgICAgICBwYXJ0UnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgb25lT3JNb3JlU2VxdWVuY2VPZlBhcnRzUGFydCxcbiAgICAgICAgICAgIGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydFxuICAgICAgICAgIF07XG5cbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IENob2ljZU9mUGFydHNCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9jaG9pY2VPZlBhcnRzXCI7XG5pbXBvcnQgQ2hvaWNlT2ZQYXJ0c0RlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vY2hvaWNlT2ZQYXJ0c1wiO1xuXG5pbXBvcnQgeyBDaG9pY2VPZlBhcnRzUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENob2ljZU9mUGFydHNSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSBDaG9pY2VPZlBhcnRzUnVsZU5hbWUsXG4gICAgICAgICAgY2hvaWNlT2ZQYXJ0c0RlZmluaXRpb24gPSBuZXcgQ2hvaWNlT2ZQYXJ0c0RlZmluaXRpb24oKSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGNob2ljZU9mUGFydHNEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gQ2hvaWNlT2ZQYXJ0c0JORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfbm9uVGVybWluYWwgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCIpKTtcbnZhciBfdGVybWluYWxTeW1ib2wgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCIpKTtcbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCIpO1xuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gICAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gICAgfVxuICAgIHJldHVybiBzZWxmO1xufVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG59XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gICAgaWYgKGtleSBpbiBvYmopIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbn1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICAgICAgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtcbiAgICB9O1xuICAgIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7XG59XG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgICB9XG4gICAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7XG59XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikge1xuICAgIHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7XG4gICAgICAgIGRlZmF1bHQ6IG9ialxuICAgIH07XG59XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gICAgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICAgICAgcmV0dXJuIGNhbGw7XG4gICAgfVxuICAgIHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICAgICAgby5fX3Byb3RvX18gPSBwO1xuICAgICAgICByZXR1cm4gbztcbiAgICB9O1xuICAgIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59XG52YXIgX3R5cGVvZiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIFwiQHN3Yy9oZWxwZXJzIC0gdHlwZW9mXCI7XG4gICAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG59O1xuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTtcbiAgICBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlO1xuICAgIHRyeSB7XG4gICAgICAgIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24oKSB7fSkpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkge1xuICAgIHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpO1xuICAgIHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHtcbiAgICAgICAgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7XG4gICAgICAgIGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7XG4gICAgICAgICAgICB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yO1xuICAgICAgICAgICAgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7XG4gICAgfTtcbn1cbnZhciBUZXJtaW5hbFN5bWJvbEJORk5vZGUgPSAvKiNfX1BVUkVfXyovIGZ1bmN0aW9uKE5vblRlcm1pbmFsTm9kZSkge1xuICAgIF9pbmhlcml0cyhUZXJtaW5hbFN5bWJvbEJORk5vZGUsIE5vblRlcm1pbmFsTm9kZSk7XG4gICAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihUZXJtaW5hbFN5bWJvbEJORk5vZGUpO1xuICAgIGZ1bmN0aW9uIFRlcm1pbmFsU3ltYm9sQk5GTm9kZSgpIHtcbiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFRlcm1pbmFsU3ltYm9sQk5GTm9kZSk7XG4gICAgICAgIHZhciBfdGhpcztcbiAgICAgICAgX3RoaXMgPSBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInJlZ3VsYXJFeHByZXNzaW9uXCIsIC9eXCIoKD86XFxcXC58W15cIlxcXFxdKSopXCIkLyk7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgX2NyZWF0ZUNsYXNzKFRlcm1pbmFsU3ltYm9sQk5GTm9kZSwgW1xuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiZ2VuZXJhdGVQYXJ0XCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgICAgICAgICAgICAgIHZhciBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksIHRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBfdGVybWluYWxTeW1ib2wuZGVmYXVsdChjb250ZW50KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGVybWluYWxTeW1ib2xQYXJ0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiZ2V0Q29udGVudFwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldENvbnRlbnQoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSwgZmlyc3RDaGlsZE5vZGUgPSAoMCwgX2FycmF5KS5maXJzdChjaGlsZE5vZGVzKSwgdGVybWluYWxOb2RlID0gZmlyc3RDaGlsZE5vZGUsIHRlcm1pbmFsTm9kZUNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpLCBtYXRjaGVzID0gdGVybWluYWxOb2RlQ29udGVudC5tYXRjaCh0aGlzLnJlZ3VsYXJFeHByZXNzaW9uKSwgc2Vjb25kTWF0Y2ggPSAoMCwgX2FycmF5KS5zZWNvbmQobWF0Y2hlcyksIGNvbnRlbnQgPSBzZWNvbmRNYXRjaC5yZXBsYWNlKC9cXFxcXFxcXC9nLCBcIlxcXFxcIikucmVwbGFjZSgvXFxcXFwiL2csIFwiXFxcIlwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIF0sIFtcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXNcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9ub25UZXJtaW5hbC5kZWZhdWx0LmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoVGVybWluYWxTeW1ib2xCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICBdKTtcbiAgICByZXR1cm4gVGVybWluYWxTeW1ib2xCTkZOb2RlO1xufShfbm9uVGVybWluYWwuZGVmYXVsdCk7XG5leHBvcnRzLmRlZmF1bHQgPSBUZXJtaW5hbFN5bWJvbEJORk5vZGU7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUwzTnlZeTl1YjJSbEwySnVaaTkwWlhKdGFXNWhiRk41YldKdmJDNXFjeUpkTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKY0luVnpaU0J6ZEhKcFkzUmNJanRjYmx4dWFXMXdiM0owSUU1dmJsUmxjbTFwYm1Gc1RtOWtaU0JtY205dElGd2lMaTR2TGk0dmJtOWtaUzl1YjI1VVpYSnRhVzVoYkZ3aU8xeHVhVzF3YjNKMElGUmxjbTFwYm1Gc1UzbHRZbTlzVUdGeWRDQm1jbTl0SUZ3aUxpNHZMaTR2Y0dGeWRDOTBaWEp0YVc1aGJDOTBaWEp0YVc1aGJGTjViV0p2YkZ3aU8xeHVYRzVwYlhCdmNuUWdleUJtYVhKemRDd2djMlZqYjI1a0lIMGdabkp2YlNCY0lpNHVMeTR1TDNWMGFXeHBkR2xsY3k5aGNuSmhlVndpTzF4dVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCamJHRnpjeUJVWlhKdGFXNWhiRk41YldKdmJFSk9SazV2WkdVZ1pYaDBaVzVrY3lCT2IyNVVaWEp0YVc1aGJFNXZaR1VnZTF4dUlDQnlaV2QxYkdGeVJYaHdjbVZ6YzJsdmJpQTlJQzllWENJb0tEODZYRnhjWEM1OFcxNWNJbHhjWEZ4ZEtTb3BYQ0lrTHp0Y2JseHVJQ0JuWlc1bGNtRjBaVkJoY25Rb2JHOXZhMEZvWldGa0tTQjdYRzRnSUNBZ1kyOXVjM1FnWTI5dWRHVnVkQ0E5SUhSb2FYTXVaMlYwUTI5dWRHVnVkQ2dwTEZ4dUlDQWdJQ0FnSUNBZ0lIUmxjbTFwYm1Gc1UzbHRZbTlzVUdGeWRDQTlJRzVsZHlCVVpYSnRhVzVoYkZONWJXSnZiRkJoY25Rb1kyOXVkR1Z1ZENrN1hHNWNiaUFnSUNCeVpYUjFjbTRnZEdWeWJXbHVZV3hUZVcxaWIyeFFZWEowTzF4dUlDQjlYRzVjYmlBZ1oyVjBRMjl1ZEdWdWRDZ3BJSHRjYmlBZ0lDQmpiMjV6ZENCamFHbHNaRTV2WkdWeklEMGdkR2hwY3k1blpYUkRhR2xzWkU1dlpHVnpLQ2tzWEc0Z0lDQWdJQ0FnSUNBZ1ptbHljM1JEYUdsc1pFNXZaR1VnUFNCbWFYSnpkQ2hqYUdsc1pFNXZaR1Z6S1N4Y2JpQWdJQ0FnSUNBZ0lDQjBaWEp0YVc1aGJFNXZaR1VnUFNCbWFYSnpkRU5vYVd4a1RtOWtaU3dnSUM4dkwxeHVJQ0FnSUNBZ0lDQWdJSFJsY20xcGJtRnNUbTlrWlVOdmJuUmxiblFnUFNCMFpYSnRhVzVoYkU1dlpHVXVaMlYwUTI5dWRHVnVkQ2dwTEZ4dUlDQWdJQ0FnSUNBZ0lHMWhkR05vWlhNZ1BTQjBaWEp0YVc1aGJFNXZaR1ZEYjI1MFpXNTBMbTFoZEdOb0tIUm9hWE11Y21WbmRXeGhja1Y0Y0hKbGMzTnBiMjRwTEZ4dUlDQWdJQ0FnSUNBZ0lITmxZMjl1WkUxaGRHTm9JRDBnYzJWamIyNWtLRzFoZEdOb1pYTXBMRnh1SUNBZ0lDQWdJQ0FnSUdOdmJuUmxiblFnUFNCelpXTnZibVJOWVhSamFDNXlaWEJzWVdObEtDOWNYRnhjWEZ4Y1hDOW5MQ0JjSWx4Y1hGeGNJaWt1Y21Wd2JHRmpaU2d2WEZ4Y1hGd2lMMmNzSUZ3aVhGeGNJbHdpS1R0Y2JseHVJQ0FnSUhKbGRIVnliaUJqYjI1MFpXNTBPMXh1SUNCOVhHNWNiaUFnYzNSaGRHbGpJR1p5YjIxU2RXeGxUbUZ0WlVGdVpFTm9hV3hrVG05a1pYTW9jblZzWlU1aGJXVXNJR05vYVd4a1RtOWtaWE1wSUhzZ2NtVjBkWEp1SUU1dmJsUmxjbTFwYm1Gc1RtOWtaUzVtY205dFVuVnNaVTVoYldWQmJtUkRhR2xzWkU1dlpHVnpLRlJsY20xcGJtRnNVM2x0WW05c1FrNUdUbTlrWlN3Z2NuVnNaVTVoYldVc0lHTm9hV3hrVG05a1pYTXBPeUI5WEc1OVhHNWNiaUpkTENKdVlXMWxjeUk2V3lKVVpYSnRhVzVoYkZONWJXSnZiRUpPUms1dlpHVWlMQ0p5WldkMWJHRnlSWGh3Y21WemMybHZiaUlzSW1kbGJtVnlZWFJsVUdGeWRDSXNJbXh2YjJ0QmFHVmhaQ0lzSW1OdmJuUmxiblFpTENKblpYUkRiMjUwWlc1MElpd2lkR1Z5YldsdVlXeFRlVzFpYjJ4UVlYSjBJaXdpVkdWeWJXbHVZV3hUZVcxaWIyeFFZWEowSWl3aVkyaHBiR1JPYjJSbGN5SXNJbWRsZEVOb2FXeGtUbTlrWlhNaUxDSm1hWEp6ZEVOb2FXeGtUbTlrWlNJc0ltWnBjbk4wSWl3aWRHVnliV2x1WVd4T2IyUmxJaXdpZEdWeWJXbHVZV3hPYjJSbFEyOXVkR1Z1ZENJc0ltMWhkR05vWlhNaUxDSnRZWFJqYUNJc0luTmxZMjl1WkUxaGRHTm9JaXdpYzJWamIyNWtJaXdpY21Wd2JHRmpaU0lzSW1aeWIyMVNkV3hsVG1GdFpVRnVaRU5vYVd4a1RtOWtaWE1pTENKeWRXeGxUbUZ0WlNJc0lrNXZibFJsY20xcGJtRnNUbTlrWlNKZExDSnRZWEJ3YVc1bmN5STZJa0ZCUVVFc1EwRkJXU3hYUVVGQkxFTkJRVU03T3p0Rk8zZENPMEZCUldVc1IwRkJkMElzUTBGQmVFSXNXVUZCZDBJN1FVRkRja0lzUjBGQmIwTXNRMEZCY0VNc1pVRkJiME03UVVGRmNrTXNSMEZCZFVJc1EwRkJka0lzVFVGQmRVSTdPenM3T3pzN096czdPenM3T3pzNFJEdHpRenMyUkR0cFJUczdPenQzUlR0blJUczdPenM3T3pzN096dFZPenQzUWpzN096czdPenRMT3pzN096czdPenM3T3pzN08wMDdlVVE3T3pzN096czdPenM3T3pzN096dDFRanM3U3pzN096c3lRanM3T3pzN096czdjVVk3T3pzN096czdPenM3T3p0dFJUczdhVVE3T3pzN08wbEJSV2hEUVN4eFFrRkJjVUlzYVVKQlFUTkNMRkZCUVZFN2NVUTdPMkZCUVVaQkxIRkNRVUZ4UWp0dlJEczdOa003ZFVSQlEzaERReXhEUVVGcFFpdzBRME5TYmtJc1EwUlJPRU03T3pzN08xbEJSVFZEUXl4SFFVRlpMRVZCUVZwQkxFTkJRVms3YlVKQlFWcEJMRkZCUVZFc1EwRkJVa0VzV1VGQldTeERRVUZEUXl4VFFVRlRMRVZCUVVVc1EwRkJRenRuUWtGRGRrSXNSMEZCU3l4RFFVRkRReXhQUVVGUExFZEJRVWNzU1VGQlNTeERRVUZEUXl4VlFVRlZMRWxCUTNwQ1F5eHJRa0ZCYTBJc1IwRkJSeXhIUVVGSExFTkJRVU5ETEdWQlFXdENMRk5CUVVOSUxFOUJRVTg3WjBKQlJYcEVMRTFCUVUwc1EwRkJRMFVzYTBKQlFXdENPMWxCUXpOQ0xFTkJRVU03T3p0WlFVVkVSQ3hIUVVGVkxFVkJRVlpCTEVOQlFWVTdiVUpCUVZaQkxGRkJRVkVzUTBGQlVrRXNWVUZCVlN4SFFVRkhMRU5CUVVNN1owSkJRMW9zUjBGQlN5eERRVUZEUnl4VlFVRlZMRWRCUVVjc1NVRkJTU3hEUVVGRFF5eGhRVUZoTEVsQlF5OUNReXhqUVVGakxFOUJRVWRETEUxQlFVc3NVVUZCUTBnc1ZVRkJWU3hIUVVOcVEwa3NXVUZCV1N4SFFVRkhSaXhqUVVGakxFVkJRemRDUnl4dFFrRkJiVUlzUjBGQlIwUXNXVUZCV1N4RFFVRkRVQ3hWUVVGVkxFbEJRemREVXl4UFFVRlBMRWRCUVVkRUxHMUNRVUZ0UWl4RFFVRkRSU3hMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZEWkN4cFFrRkJhVUlzUjBGRE1VUmxMRmRCUVZjc1QwRkJSME1zVFVGQlRTeFRRVUZEU0N4UFFVRlBMRWRCUXpWQ1ZpeFBRVUZQTEVkQlFVZFpMRmRCUVZjc1EwRkJRMFVzVDBGQlR5eFZRVUZWTEVOQlFVa3NTMEZCUlVFc1QwRkJUeXhUUVVGVExFTkJRVWs3WjBKQlJYWkZMRTFCUVUwc1EwRkJRMlFzVDBGQlR6dFpRVU5vUWl4RFFVRkRPenM3TzFsQlJVMWxMRWRCUVhsQ0xFVkJRWHBDUVN4RFFVRjVRanR0UWtGQmFFTXNVVUZCVVN4RFFVRkVRU3g1UWtGQmVVSXNRMEZCUTBNc1VVRkJVU3hGUVVGRldpeFZRVUZWTEVWQlFVVXNRMEZCUXp0blFrRkJReXhOUVVGTkxFTkJRVU5oTEZsQlFXVXNVMEZCUTBZc2VVSkJRWGxDTEVOQlFVTnVRaXh4UWtGQmNVSXNSVUZCUlc5Q0xGRkJRVkVzUlVGQlJWb3NWVUZCVlR0WlFVRkhMRU5CUVVNN08wMDdPMFZCZEVKNFIyRXNXVUZCWlR0clFrRkJOME55UWl4eFFrRkJjVUlzUVNKOSIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHNpZ25pZmljYW50VG9rZW5UeXBlKSB7XG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0ID0gbmV3IFNpZ25pZmljYW50VG9rZW5UeXBlUGFydChzaWduaWZpY2FudFRva2VuVHlwZSksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZVBhcnRcbiAgICAgICAgICBdO1xuICAgIFxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHR5cGVzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvdGVybWluYWxTeW1ib2xcIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuaW1wb3J0IHsgVGVybWluYWxTeW1ib2xSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyBzdHJpbmdMaXRlcmFsVHlwZSB9ID0gdHlwZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1pbmFsU3ltYm9sUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBzdHJpbmdMaXRlcmFsU2lnbmlmaWNhbnRUb2tlblR5cGUgPSBzdHJpbmdMaXRlcmFsVHlwZSwgIC8vL1xuICAgICAgICAgIHN0cmluZ0xpdGVyYWxTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gPSBuZXcgU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uKHN0cmluZ0xpdGVyYWxTaWduaWZpY2FudFRva2VuVHlwZSksXG4gICAgICAgICAgbmFtZSA9IFRlcm1pbmFsU3ltYm9sUnVsZU5hbWUsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBzdHJpbmdMaXRlcmFsU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gVGVybWluYWxTeW1ib2xCTkZOb2RlO1xuXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb25UZXJtaW5hbFBhcnRCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBub2RlcyA9IGNoaWxkTm9kZXMuc2xpY2UoKSxcbiAgICAgICAgICBwYXJ0ID0gcGFydEZyb21Ob2Rlcyhub2RlcywgbG9va0FoZWFkKTtcblxuICAgIHJldHVybiBwYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKE5vblRlcm1pbmFsUGFydEJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuXG5mdW5jdGlvbiBwYXJ0RnJvbU5vZGVzKG5vZGVzLCBsb29rQWhlYWQpIHtcbiAgbGV0IHBhcnQgPSBudWxsO1xuXG4gIGNvbnN0IG5vZGVzTGVuZ3RoID0gbm9kZXMubGVuZ3RoO1xuXG4gIGlmIChub2Rlc0xlbmd0aCA9PT0gMSkge1xuICAgIGNvbnN0IG5vZGUgPSBub2Rlcy5wb3AoKTtcblxuICAgIHBhcnQgPSBub2RlLmdlbmVyYXRlUGFydChsb29rQWhlYWQpO1xuICB9IGVsc2Uge1xuICAgIG5vZGVzLnBvcCgpO1xuXG4gICAgbG9va0FoZWFkID0gdHJ1ZTtcblxuICAgIHBhcnQgPSBwYXJ0RnJvbU5vZGVzKG5vZGVzLCBsb29rQWhlYWQpO1xuICB9XG5cbiAgcmV0dXJuIHBhcnQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi8uLi8uLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi8uLi8uLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgT3B0aW9uYWxQYXJ0UGFydCBmcm9tIFwiLi4vLi4vLi4vcGFydC9ub25UZXJtaW5hbC9vcHRpb25hbFBhcnRcIjtcblxuaW1wb3J0IHsgUnVsZU5hbWVSdWxlTmFtZSwgTG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi8uLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZU5hbWVOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBydWxlTmFtZVJ1bGVOYW1lID0gUnVsZU5hbWVSdWxlTmFtZSxcbiAgICAgICAgICBsb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lID0gTG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSxcbiAgICAgICAgICBydWxlTmFtZVJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocnVsZU5hbWVSdWxlTmFtZSksXG4gICAgICAgICAgbG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KGxvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUpLFxuICAgICAgICAgIG9wdGlvbmFsTG9va0FoZWFkUnVsZU5hbWVQYXJ0UGFydCA9IG5ldyBPcHRpb25hbFBhcnRQYXJ0KGxvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWVQYXJ0KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIHJ1bGVOYW1lUnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgb3B0aW9uYWxMb29rQWhlYWRSdWxlTmFtZVBhcnRQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFJ1bGVOYW1lRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9ydWxlTmFtZVwiO1xuaW1wb3J0IE5vblRlcm1pbmFsUGFydEJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3BhcnQvbm9uVGVybWluYWxcIjtcbmltcG9ydCBSdWxlTmFtZU5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3BhcnRSdWxlL25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5cbmltcG9ydCB7IE5vblRlcm1pbmFsUGFydFJ1bGVOYW1lLCBDaG9pY2VPZlBhcnRzUnVsZU5hbWUsIFNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb25UZXJtaW5hbFBhcnRSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSBOb25UZXJtaW5hbFBhcnRSdWxlTmFtZSxcbiAgICAgICAgICBjaG9pY2VPZlBhcnRzUnVsZU5hbWUgPSBDaG9pY2VPZlBhcnRzUnVsZU5hbWUsXG4gICAgICAgICAgc2VxdWVuY2VPZlBhcnRzUnVsZU5hbWUgPSBTZXF1ZW5jZU9mUGFydHNSdWxlTmFtZSxcbiAgICAgICAgICBjaG9pY2VPZlBhcnRzUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbihjaG9pY2VPZlBhcnRzUnVsZU5hbWUpLFxuICAgICAgICAgIHNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24oc2VxdWVuY2VPZlBhcnRzUnVsZU5hbWUpLFxuICAgICAgICAgIHJ1bGVOYW1lTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbigpLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgY2hvaWNlT2ZQYXJ0c1J1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIHNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIHJ1bGVOYW1lTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBOb25UZXJtaW5hbFBhcnRCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXF1ZW5jZU9mUGFydHNCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBub2RlcyA9IGNoaWxkTm9kZXMuc2xpY2UoKSxcbiAgICAgICAgICBwYXJ0ID0gU2VxdWVuY2VPZlBhcnRzUGFydC5mcm9tTm9kZXMobm9kZXMpO1xuXG4gICAgcmV0dXJuIHBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoU2VxdWVuY2VPZlBhcnRzQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuaW1wb3J0IE9uZU9yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9vbmVPck1vcmVQYXJ0c1wiO1xuXG5pbXBvcnQgeyBQYXJ0UnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgb3BlbkJyYWNrZXQsIGNsb3NlQnJhY2tldCB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlcXVlbmNlT2ZQYXJ0c0RlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcGFydFJ1bGVOYW1lID0gUGFydFJ1bGVOYW1lLFxuICAgICAgICAgIG9wZW5CcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50ID0gb3BlbkJyYWNrZXQsIC8vL1xuICAgICAgICAgIGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCA9IGNsb3NlQnJhY2tldCwgLy8vXG4gICAgICAgICAgcGFydFJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICBvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQob3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBvbmVPck1vcmVQYXJ0UnVsZU5hbWVQYXJ0c1BhcnQgPSBuZXcgT25lT3JNb3JlUGFydHNQYXJ0KHBhcnRSdWxlTmFtZVBhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgb3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnQsXG4gICAgICAgICAgICBwYXJ0UnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgb25lT3JNb3JlUGFydFJ1bGVOYW1lUGFydHNQYXJ0LFxuICAgICAgICAgICAgY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXTtcblxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgU2VxdWVuY2VPZlBhcnRzQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvc2VxdWVuY2VPZlBhcnRzXCI7XG5pbXBvcnQgU2VxdWVuY2VPZlBhcnRzRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9zZXF1ZW5jZU9mUGFydHNcIjtcblxuaW1wb3J0IHsgU2VxdWVuY2VPZlBhcnRzUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlcXVlbmNlT2ZQYXJ0c1J1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IFNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lLFxuICAgICAgICAgIHNlcXVlbmNlT2ZQYXJ0c0RlZmluaXRpb24gPSBuZXcgU2VxdWVuY2VPZlBhcnRzRGVmaW5pdGlvbigpLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgc2VxdWVuY2VPZlBhcnRzRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFNlcXVlbmNlT2ZQYXJ0c0JORk5vZGU7XG5cbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuL3ZlcnRpY2FsQnJhbmNoXCI7XG5cbmNvbnN0IHsgTk9fV0hJVEVTUEFDRSB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vV2hpdGVzcGFjZU5vZGVQYXJzZVRyZWUgZXh0ZW5kcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBOT19XSElURVNQQUNFLCAvLy9cbiAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGggPSBzdHJpbmdMZW5ndGgsIC8vL1xuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGgpLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCksXG4gICAgICAgICAgdGVybWluYWxOb2RlUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVN0cmluZ0FuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oTm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZSwgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZS5hcHBlbmRUb1RvcCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSk7XG5cbiAgICBjb25zdCBub1doaXRlc3BhY2VOb2RlUGFyc2VUcmVlID0gdGVybWluYWxOb2RlUGFyc2VUcmVlOyAvLy9cblxuICAgIHJldHVybiBub1doaXRlc3BhY2VOb2RlUGFyc2VUcmVlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXJtaW5hbE5vZGUgZnJvbSBcIi4uL3Rlcm1pbmFsXCI7XG5pbXBvcnQgTm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZSBmcm9tIFwiLi4vLi4vcGFyc2VUcmVlL25vV2hpdGVzcGFjZU5vZGVcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb1doaXRlc3BhY2VOb2RlIGV4dGVuZHMgVGVybWluYWxOb2RlIHtcbiAgZ2V0VHlwZSgpIHtcbiAgICBjb25zdCB0eXBlID0gbnVsbDsgIC8vL1xuXG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBnZXRDb250ZW50KCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBFTVBUWV9TVFJJTkc7XG5cbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIGlzTm9XaGl0ZXNwYWNlTm9kZSgpIHtcbiAgICBjb25zdCBub1doaXRlc3BhY2VOb2RlID0gdHJ1ZTtcblxuICAgIHJldHVybiBub1doaXRlc3BhY2VOb2RlO1xuICB9XG5cbiAgYXNQYXJzZVRyZWUodG9rZW5zKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZSA9IE5vV2hpdGVzcGFjZU5vZGVQYXJzZVRyZWUuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBwYXJzZVRyZWUgPSBub1doaXRlc3BhY2VOb2RlUGFyc2VUcmVlOyAgLy8vXG5cbiAgICByZXR1cm4gcGFyc2VUcmVlO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW4gPSBudWxsLFxuICAgICAgICAgIG5vV2hpdGVzcGFjZU5vZGUgPSBUZXJtaW5hbE5vZGUuZnJvbVNpZ25pZmljYW50VG9rZW4oTm9XaGl0ZXNwYWNlTm9kZSwgc2lnbmlmaWNhbnRUb2tlbik7XG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlTm9kZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbFwiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZU5vZGUgZnJvbSBcIi4uLy4uL25vZGUvdGVybWluYWwvbm9XaGl0ZXNwYWNlXCI7XG5cbmNvbnN0IHsgTk9fV0hJVEVTUEFDRSB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vV2hpdGVzcGFjZVBhcnQgZXh0ZW5kcyBUZXJtaW5hbFBhcnQge1xuICBpc05vV2hpdGVzcGFjZVBhcnQoKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlUGFydCA9IHRydWU7XG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlUGFydDtcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgbGV0IG5vV2hpdGVzcGFjZU5vZGUgPSBudWxsO1xuXG4gICAgY29uc3Qgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKSxcbiAgICAgICAgICBuZXh0VG9rZW5XaGl0ZXNwYWNlVG9rZW4gPSBzdGF0ZS5pc05leHRUb2tlbldoaXRlc3BhY2VUb2tlbigpO1xuXG4gICAgaWYgKCFuZXh0VG9rZW5XaGl0ZXNwYWNlVG9rZW4pIHtcbiAgICAgIG5vV2hpdGVzcGFjZU5vZGUgPSBOb1doaXRlc3BhY2VOb2RlLmZyb21Ob3RoaW5nKCk7XG4gICAgfVxuXG4gICAgcGFyc2VkID0gKG5vV2hpdGVzcGFjZU5vZGUgIT09IG51bGwpXG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBub2Rlcy5wdXNoKG5vV2hpdGVzcGFjZU5vZGUpO1xuXG4gICAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgcGFyc2VkID0gY2FsbGJhY2soKTtcblxuICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgIG5vZGVzLnBvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gTk9fV0hJVEVTUEFDRTsgLy8vXG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgY2xvbmUoKSB7IHJldHVybiBzdXBlci5jbG9uZShOb1doaXRlc3BhY2VQYXJ0KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5pbXBvcnQgTm9XaGl0ZXNwYWNlUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbC9ub1doaXRlc3BhY2VcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9XaGl0ZXNwYWNlUGFydEJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlUGFydCA9IG5ldyBOb1doaXRlc3BhY2VQYXJ0KCk7XG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlUGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhOb1doaXRlc3BhY2VQYXJ0Qk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuXG5jb25zdCB7IE5PX1dISVRFU1BBQ0UgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb1doaXRlc3BhY2VQYXJ0RGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBjb250ZW50ID0gTk9fV0hJVEVTUEFDRSxcbiAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KGNvbnRlbnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXTtcblxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgTm9XaGl0ZXNwYWNlUGFydEJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL25vV2hpdGVzcGFjZVBhcnRcIjtcbmltcG9ydCBOb1doaXRlc3BhY2VQYXJ0RGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9ub1doaXRlc3BhY2VQYXJ0XCI7XG5cbmltcG9ydCB7IE5vV2hpdGVzcGFjZVBhcnRSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9XaGl0ZXNwYWNlUGFydFJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlUGFydERlZmluaXRpb24gPSBuZXcgTm9XaGl0ZXNwYWNlUGFydERlZmluaXRpb24oKSxcbiAgICAgICAgICBuYW1lID0gTm9XaGl0ZXNwYWNlUGFydFJ1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydERlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBOb1doaXRlc3BhY2VQYXJ0Qk5GTm9kZTtcblxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZVBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvbm9XaGl0ZXNwYWNlXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5cbmNvbnN0IHsgZXhjbGFtYXRpb25NYXJrIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9va0FoZWFkTW9kaWZpZXJSdWxlRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBjb250ZW50ID0gZXhjbGFtYXRpb25NYXJrLCAgLy8vXG4gICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydCA9IG5ldyBOb1doaXRlc3BhY2VQYXJ0KCksXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydChjb250ZW50KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnQsXG4gICAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFBhcnRcbiAgICAgICAgICBdO1xuXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBEZWZpbml0aW9uQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvZGVmaW5pdGlvblwiO1xuaW1wb3J0IExvb2tBaGVhZE1vZGlmaWVyUnVsZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vbG9va0FoZWFkTW9kaWZpZXJSdWxlXCI7XG5cbmltcG9ydCB7IExvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvb2tBaGVhZE1vZGlmaWVyUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gTG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSxcbiAgICAgICAgICBsb29rQWhlYWRNb2RpZmllclJ1bGVEZWZpbml0aW9uID0gbmV3IExvb2tBaGVhZE1vZGlmaWVyUnVsZURlZmluaXRpb24oKSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGxvb2tBaGVhZE1vZGlmaWVyUnVsZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBEZWZpbml0aW9uQk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF90ZXJtaW5hbCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uLy4uL3BhcnQvdGVybWluYWxcIikpO1xudmFyIF90ZXJtaW5hbDEgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi8uLi9ub2RlL3Rlcm1pbmFsXCIpKTtcbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCIpO1xuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gICAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gICAgfVxuICAgIHJldHVybiBzZWxmO1xufVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG59XG5mdW5jdGlvbiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ICE9PSBcInVuZGVmaW5lZFwiICYmIFJlZmxlY3QuZ2V0KSB7XG4gICAgICAgIF9nZXQgPSBSZWZsZWN0LmdldDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBfZ2V0ID0gZnVuY3Rpb24gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlcikge1xuICAgICAgICAgICAgdmFyIGJhc2UgPSBfc3VwZXJQcm9wQmFzZSh0YXJnZXQsIHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmICghYmFzZSkgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGJhc2UsIHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmIChkZXNjLmdldCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZXNjLmdldC5jYWxsKHJlY2VpdmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkZXNjLnZhbHVlO1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlciB8fCB0YXJnZXQpO1xufVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgICAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICAgIH07XG4gICAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn1cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICAgIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICAgIH1cbiAgICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHtcbiAgICAgICAgZGVmYXVsdDogb2JqXG4gICAgfTtcbn1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgICAgICByZXR1cm4gY2FsbDtcbiAgICB9XG4gICAgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgICAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgICAgIHJldHVybiBvO1xuICAgIH07XG4gICAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cbmZ1bmN0aW9uIF9zdXBlclByb3BCYXNlKG9iamVjdCwgcHJvcGVydHkpIHtcbiAgICB3aGlsZSghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpKXtcbiAgICAgICAgb2JqZWN0ID0gX2dldFByb3RvdHlwZU9mKG9iamVjdCk7XG4gICAgICAgIGlmIChvYmplY3QgPT09IG51bGwpIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xufVxudmFyIF90eXBlb2YgPSBmdW5jdGlvbihvYmopIHtcbiAgICBcIkBzd2MvaGVscGVycyAtIHR5cGVvZlwiO1xuICAgIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xufTtcbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgICBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uKCkge30pKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHtcbiAgICB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7XG4gICAgICAgIHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0O1xuICAgICAgICBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkge1xuICAgICAgICAgICAgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgIHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpO1xuICAgIH07XG59XG52YXIgUmVndWxhckV4cHJlc3Npb25QYXJ0ID0gLyojX19QVVJFX18qLyBmdW5jdGlvbihUZXJtaW5hbFBhcnQpIHtcbiAgICBfaW5oZXJpdHMoUmVndWxhckV4cHJlc3Npb25QYXJ0LCBUZXJtaW5hbFBhcnQpO1xuICAgIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoUmVndWxhckV4cHJlc3Npb25QYXJ0KTtcbiAgICBmdW5jdGlvbiBSZWd1bGFyRXhwcmVzc2lvblBhcnQocmVndWxhckV4cHJlc3Npb24pIHtcbiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFJlZ3VsYXJFeHByZXNzaW9uUGFydCk7XG4gICAgICAgIHZhciBfdGhpcztcbiAgICAgICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKTtcbiAgICAgICAgX3RoaXMucmVndWxhckV4cHJlc3Npb24gPSByZWd1bGFyRXhwcmVzc2lvbjtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBfY3JlYXRlQ2xhc3MoUmVndWxhckV4cHJlc3Npb25QYXJ0LCBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJwYXJzZVwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB2YXIgcGFyc2VkO1xuICAgICAgICAgICAgICAgIHZhciB0ZXJtaW5hbE5vZGUgPSBudWxsO1xuICAgICAgICAgICAgICAgIHZhciBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpLCBuZXh0U2lnbmlmaWNhbnRUb2tlbiA9IHN0YXRlLmdldE5leHRTaWduaWZpY2FudFRva2VuKCksIHNpZ25pZmljYW50VG9rZW4gPSBuZXh0U2lnbmlmaWNhbnRUb2tlbjsgLy8vXG4gICAgICAgICAgICAgICAgaWYgKHNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSBzaWduaWZpY2FudFRva2VuLmdldENvbnRlbnQoKSwgbWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2godGhpcy5yZWd1bGFyRXhwcmVzc2lvbik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlyc3RNYXRjaCA9ICgwLCBfYXJyYXkpLmZpcnN0KG1hdGNoZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0TWF0Y2ggPT09IGNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hbE5vZGUgPSBfdGVybWluYWwxLmRlZmF1bHQuZnJvbVNpZ25pZmljYW50VG9rZW4oc2lnbmlmaWNhbnRUb2tlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcGFyc2VkID0gdGVybWluYWxOb2RlICE9PSBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZXMucHVzaCh0ZXJtaW5hbE5vZGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZCA9IGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImFzU3RyaW5nXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gYXNTdHJpbmcoKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlZ3VsYXJFeHByZXNzaW9uU3RyaW5nID0gdGhpcy5yZWd1bGFyRXhwcmVzc2lvbi50b1N0cmluZygpLCBzdHJpbmcgPSByZWd1bGFyRXhwcmVzc2lvblN0cmluZzsgLy8vXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImNsb25lXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xvbmUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9nZXQoX2dldFByb3RvdHlwZU9mKFJlZ3VsYXJFeHByZXNzaW9uUGFydC5wcm90b3R5cGUpLCBcImNsb25lXCIsIHRoaXMpLmNhbGwodGhpcywgUmVndWxhckV4cHJlc3Npb25QYXJ0LCB0aGlzLnJlZ3VsYXJFeHByZXNzaW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIF0pO1xuICAgIHJldHVybiBSZWd1bGFyRXhwcmVzc2lvblBhcnQ7XG59KF90ZXJtaW5hbC5kZWZhdWx0KTtcbmV4cG9ydHMuZGVmYXVsdCA9IFJlZ3VsYXJFeHByZXNzaW9uUGFydDtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1TDNOeVl5OXdZWEowTDNSbGNtMXBibUZzTDNKbFozVnNZWEpGZUhCeVpYTnphVzl1TG1weklsMHNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbHdpZFhObElITjBjbWxqZEZ3aU8xeHVYRzVwYlhCdmNuUWdWR1Z5YldsdVlXeFFZWEowSUdaeWIyMGdYQ0l1TGk4dUxpOXdZWEowTDNSbGNtMXBibUZzWENJN1hHNXBiWEJ2Y25RZ1ZHVnliV2x1WVd4T2IyUmxJR1p5YjIwZ1hDSXVMaTh1TGk5dWIyUmxMM1JsY20xcGJtRnNYQ0k3WEc1Y2JtbHRjRzl5ZENCN0lHWnBjbk4wSUgwZ1puSnZiU0JjSWk0dUx5NHVMM1YwYVd4cGRHbGxjeTloY25KaGVWd2lPMXh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0JqYkdGemN5QlNaV2QxYkdGeVJYaHdjbVZ6YzJsdmJsQmhjblFnWlhoMFpXNWtjeUJVWlhKdGFXNWhiRkJoY25RZ2UxeHVJQ0JqYjI1emRISjFZM1J2Y2loeVpXZDFiR0Z5Ulhod2NtVnpjMmx2YmlrZ2UxeHVJQ0FnSUhOMWNHVnlLQ2s3WEc1Y2JpQWdJQ0IwYUdsekxuSmxaM1ZzWVhKRmVIQnlaWE56YVc5dUlEMGdjbVZuZFd4aGNrVjRjSEpsYzNOcGIyNDdYRzRnSUgxY2JseHVJQ0J3WVhKelpTaHViMlJsY3l3Z2MzUmhkR1VzSUdOaGJHeGlZV05yS1NCN1hHNGdJQ0FnYkdWMElIQmhjbk5sWkR0Y2JseHVJQ0FnSUd4bGRDQjBaWEp0YVc1aGJFNXZaR1VnUFNCdWRXeHNPMXh1SUNBZ0lGeHVJQ0FnSUdOdmJuTjBJSE5oZG1Wa1NXNWtaWGdnUFNCemRHRjBaUzVuWlhSVFlYWmxaRWx1WkdWNEtDa3NYRzVjZEZ4MElDQWdJQ0FnYm1WNGRGTnBaMjVwWm1sallXNTBWRzlyWlc0Z1BTQnpkR0YwWlM1blpYUk9aWGgwVTJsbmJtbG1hV05oYm5SVWIydGxiaWdwTEZ4dVhIUmNkRngwWEhSY2RITnBaMjVwWm1sallXNTBWRzlyWlc0Z1BTQnVaWGgwVTJsbmJtbG1hV05oYm5SVWIydGxianNnTHk4dlhHNWNiaUFnSUNCcFppQW9jMmxuYm1sbWFXTmhiblJVYjJ0bGJpQWhQVDBnYm5Wc2JDa2dlMXh1SUNBZ0lDQWdZMjl1YzNRZ1kyOXVkR1Z1ZENBOUlITnBaMjVwWm1sallXNTBWRzlyWlc0dVoyVjBRMjl1ZEdWdWRDZ3BMRnh1SUNBZ0lDQWdJQ0FnSUNBZ2JXRjBZMmhsY3lBOUlHTnZiblJsYm5RdWJXRjBZMmdvZEdocGN5NXlaV2QxYkdGeVJYaHdjbVZ6YzJsdmJpazdYRzVjYmlBZ0lDQWdJR2xtSUNodFlYUmphR1Z6SUNFOVBTQnVkV3hzS1NCN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUdacGNuTjBUV0YwWTJnZ1BTQm1hWEp6ZENodFlYUmphR1Z6S1R0Y2JseHVJQ0FnSUNBZ0lDQnBaaUFvWm1seWMzUk5ZWFJqYUNBOVBUMGdZMjl1ZEdWdWRDa2dlMXh1SUNBZ0lDQWdJQ0FnSUhSbGNtMXBibUZzVG05a1pTQTlJRlJsY20xcGJtRnNUbTlrWlM1bWNtOXRVMmxuYm1sbWFXTmhiblJVYjJ0bGJpaHphV2R1YVdacFkyRnVkRlJ2YTJWdUtUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNibHh1SUNBZ0lIQmhjbk5sWkNBOUlDaDBaWEp0YVc1aGJFNXZaR1VnSVQwOUlHNTFiR3dwTzF4dVhHNGdJQ0FnYVdZZ0tIQmhjbk5sWkNrZ2UxeHVJQ0FnSUNBZ2JtOWtaWE11Y0hWemFDaDBaWEp0YVc1aGJFNXZaR1VwTzF4dVhHNGdJQ0FnSUNCcFppQW9ZMkZzYkdKaFkyc2dJVDA5SUc1MWJHd3BJSHRjYmlBZ0lDQWdJQ0FnY0dGeWMyVmtJRDBnWTJGc2JHSmhZMnNvS1R0Y2JseHVJQ0FnSUNBZ0lDQnBaaUFvSVhCaGNuTmxaQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lHNXZaR1Z6TG5CdmNDZ3BPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhV1lnS0NGd1lYSnpaV1FwSUh0Y2JpQWdJQ0FnSUhOMFlYUmxMbUpoWTJ0MGNtRmpheWh6WVhabFpFbHVaR1Y0S1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0J5WlhSMWNtNGdjR0Z5YzJWa08xeHVJQ0I5WEc1Y2JpQWdZWE5UZEhKcGJtY29LU0I3WEc0Z0lDQWdZMjl1YzNRZ2NtVm5kV3hoY2tWNGNISmxjM05wYjI1VGRISnBibWNnUFNCMGFHbHpMbkpsWjNWc1lYSkZlSEJ5WlhOemFXOXVMblJ2VTNSeWFXNW5LQ2tzWEc1Y2RGeDBJQ0FnSUNBZ2MzUnlhVzVuSUQwZ2NtVm5kV3hoY2tWNGNISmxjM05wYjI1VGRISnBibWM3SUM4dkwxeHVYRzRnSUNBZ2NtVjBkWEp1SUhOMGNtbHVaenRjYmlBZ2ZWeHVYRzRnSUdOc2IyNWxLQ2tnZXlCeVpYUjFjbTRnYzNWd1pYSXVZMnh2Ym1Vb1VtVm5kV3hoY2tWNGNISmxjM05wYjI1UVlYSjBMQ0IwYUdsekxuSmxaM1ZzWVhKRmVIQnlaWE56YVc5dUtUc2dmVnh1ZlZ4dUlsMHNJbTVoYldWeklqcGJJbEpsWjNWc1lYSkZlSEJ5WlhOemFXOXVVR0Z5ZENJc0luSmxaM1ZzWVhKRmVIQnlaWE56YVc5dUlpd2ljR0Z5YzJVaUxDSnViMlJsY3lJc0luTjBZWFJsSWl3aVkyRnNiR0poWTJzaUxDSndZWEp6WldRaUxDSjBaWEp0YVc1aGJFNXZaR1VpTENKellYWmxaRWx1WkdWNElpd2laMlYwVTJGMlpXUkpibVJsZUNJc0ltNWxlSFJUYVdkdWFXWnBZMkZ1ZEZSdmEyVnVJaXdpWjJWMFRtVjRkRk5wWjI1cFptbGpZVzUwVkc5clpXNGlMQ0p6YVdkdWFXWnBZMkZ1ZEZSdmEyVnVJaXdpWTI5dWRHVnVkQ0lzSW1kbGRFTnZiblJsYm5RaUxDSnRZWFJqYUdWeklpd2liV0YwWTJnaUxDSm1hWEp6ZEUxaGRHTm9JaXdpWm1seWMzUWlMQ0pVWlhKdGFXNWhiRTV2WkdVaUxDSm1jbTl0VTJsbmJtbG1hV05oYm5SVWIydGxiaUlzSW5CMWMyZ2lMQ0p3YjNBaUxDSmlZV05yZEhKaFkyc2lMQ0poYzFOMGNtbHVaeUlzSW5KbFozVnNZWEpGZUhCeVpYTnphVzl1VTNSeWFXNW5JaXdpZEc5VGRISnBibWNpTENKemRISnBibWNpTENKamJHOXVaU0lzSWxSbGNtMXBibUZzVUdGeWRDSmRMQ0p0WVhCd2FXNW5jeUk2SWtGQlFVRXNRMEZCV1N4WFFVRkJMRU5CUVVNN096dEZPM2RDTzBGQlJWa3NSMEZCY1VJc1EwRkJja0lzVTBGQmNVSTdRVUZEY2tJc1IwRkJjVUlzUTBGQmNrSXNWVUZCY1VJN1FVRkZlRUlzUjBGQmRVSXNRMEZCZGtJc1RVRkJkVUk3T3pzN096czdPenM3T3pzN096czRSRHR6UXpzMlJEdHBSVHM3T3p0M1JUdG5SVHM3T3pzN01FSTdPenM3T3pzN096czdVenM3T3pzN096dExPenM3T3pzN096czdPenM3TzAwN2VVUTdPenM3T3pzN096czdPenM3T3p0MVFqczdTenM3T3pzN2QwTTdPenM3T3pzeVFqczdPenM3T3pzN2NVWTdPenM3T3pzN096czdPenR0UlRzN2FVUTdPenM3TzBsQlJYaENRU3h4UWtGQmNVSXNhVUpCUVROQ0xGRkJRVkU3YTBRN08yRkJRVVpCTEhGQ1FVRnhRaXhEUVVNMVFrTXNhVUpCUVdsQ08yOUVPenRwUTBOU0wwSXNRMFJUV1R0alFVVklRU3hwUWtGQmFVSXNSMEZCUjBFc2FVSkJRV2xDTEVOQlFVTTdPenM3TzFsQlJ6ZERReXhIUVVGTExFVkJRVXhCTEVOQlFVczdiVUpCUVV4QkxGRkJRVkVzUTBGQlVrRXNTMEZCU3l4RFFVRkRReXhMUVVGTExFVkJRVVZETEV0QlFVc3NSVUZCUlVNc1VVRkJVU3hGUVVGRkxFTkJRVU03WjBKQlF6ZENMRWRCUVVjc1EwRkJRME1zVFVGQlRUdG5Ra0ZGVml4SFFVRkhMRU5CUVVORExGbEJRVmtzUjBGQlJ5eEpRVUZKTzJkQ1FVVjJRaXhIUVVGTExFTkJRVU5ETEZWQlFWVXNSMEZCUjBvc1MwRkJTeXhEUVVGRFN5eGhRVUZoTEVsQlEyeERReXh2UWtGQmIwSXNSMEZCUjA0c1MwRkJTeXhEUVVGRFR5eDFRa0ZCZFVJc1NVRkRka1JETEdkQ1FVRm5RaXhIUVVGSFJpeHZRa0ZCYjBJc1JVRkJSU3hGUVVGSExFRkJRVWdzUTBGQlJ6dG5Ra0ZGTjBNc1JVRkJSU3hGUVVGRlJTeG5Ra0ZCWjBJc1MwRkJTeXhKUVVGSkxFVkJRVVVzUTBGQlF6dHZRa0ZET1VJc1IwRkJTeXhEUVVGRFF5eFBRVUZQTEVkQlFVZEVMR2RDUVVGblFpeERRVUZEUlN4VlFVRlZMRWxCUTNKRFF5eFBRVUZQTEVkQlFVZEdMRTlCUVU4c1EwRkJRMGNzUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUTJZc2FVSkJRV2xDTzI5Q1FVVndSQ3hGUVVGRkxFVkJRVVZqTEU5QlFVOHNTMEZCU3l4SlFVRkpMRVZCUVVVc1EwRkJRenQzUWtGRGNrSXNSMEZCU3l4RFFVRkRSU3hWUVVGVkxFOUJRVWRETEUxQlFVc3NVVUZCUTBnc1QwRkJUenQzUWtGRmFFTXNSVUZCUlN4RlFVRkZSU3hWUVVGVkxFdEJRVXRLTEU5QlFVOHNSVUZCUlN4RFFVRkRPelJDUVVNelFrNHNXVUZCV1N4SFFVRkhXU3hWUVVGWkxGTkJRVU5ETEc5Q1FVRnZRaXhEUVVGRFVpeG5Ra0ZCWjBJc1EwRkJReXhEUVVGRE8zZENRVU55UlN4RFFVRkRPMjlDUVVOSUxFTkJRVU03WjBKQlEwZ3NRMEZCUXp0blFrRkZSRTRzVFVGQlRTeEhRVUZKUXl4WlFVRlpMRXRCUVVzc1NVRkJTU3hCUVVGRExFTkJRVU03WjBKQlJXcERMRVZCUVVVc1JVRkJSVVFzVFVGQlRTeEZRVUZGTEVOQlFVTTdiMEpCUTFoSUxFdEJRVXNzUTBGQlEydENMRWxCUVVrc1EwRkJRMlFzV1VGQldTeERRVUZETEVOQlFVTTdiMEpCUlhwQ0xFVkJRVVVzUlVGQlJVWXNVVUZCVVN4TFFVRkxMRWxCUVVrc1JVRkJSU3hEUVVGRE8zZENRVU4wUWtNc1RVRkJUU3hIUVVGSFJDeFJRVUZSTEVWQlFVVXNRMEZCUXp0M1FrRkZjRUlzUlVGQlJTeEhRVUZIUXl4TlFVRk5MRVZCUVVVc1EwRkJRenMwUWtGRFdrZ3NTMEZCU3l4RFFVRkRiVUlzUjBGQlJ5eEZRVUZGTEVOQlFVTTdkMEpCUTJRc1EwRkJRenR2UWtGRFNDeERRVUZETzJkQ1FVTklMRU5CUVVNN1owSkJSVVFzUlVGQlJTeEhRVUZIYUVJc1RVRkJUU3hGUVVGRkxFTkJRVU03YjBKQlExcEdMRXRCUVVzc1EwRkJRMjFDTEZOQlFWTXNRMEZCUTJZc1ZVRkJWU3hEUVVGRExFTkJRVU03WjBKQlF6bENMRU5CUVVNN1owSkJSVVFzVFVGQlRTeERRVUZEUml4TlFVRk5PMWxCUTJZc1EwRkJRenM3TzFsQlJVUnJRaXhIUVVGUkxFVkJRVkpCTEVOQlFWRTdiVUpCUVZKQkxGRkJRVkVzUTBGQlVrRXNVVUZCVVN4SFFVRkhMRU5CUVVNN1owSkJRMVlzUjBGQlN5eERRVUZEUXl4MVFrRkJkVUlzUjBGQlJ5eEpRVUZKTEVOQlFVTjRRaXhwUWtGQmFVSXNRMEZCUTNsQ0xGRkJRVkVzU1VGRE0wUkRMRTFCUVUwc1IwRkJSMFlzZFVKQlFYVkNMRVZCUVVVc1JVRkJSeXhCUVVGSUxFTkJRVWM3WjBKQlJYcERMRTFCUVUwc1EwRkJRMFVzVFVGQlRUdFpRVU5tTEVOQlFVTTdPenRaUVVWRVF5eEhRVUZMTEVWQlFVeEJMRU5CUVVzN2JVSkJRVXhCTEZGQlFWRXNRMEZCVWtFc1MwRkJTeXhIUVVGSExFTkJRVU03WjBKQlFVTXNUVUZCVFN4elFrRjZSRWMxUWl4eFFrRkJjVUlzWVVGNVJHcENORUlzUTBGQlN5eFJRVUZZTEVsQlFVc3NZVUZCVHpWQ0xIRkNRVUZ4UWl4RlFVRkZMRWxCUVVrc1EwRkJRME1zYVVKQlFXbENPMWxCUVVjc1EwRkJRenM3VFRzN1JVRjZSRGRDTkVJc1UwRkJXVHRyUWtGQk1VTTNRaXh4UWtGQmNVSXNRU0o5IiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF9ub25UZXJtaW5hbCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIikpO1xudmFyIF9yZWd1bGFyRXhwcmVzc2lvbiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uLy4uL3BhcnQvdGVybWluYWwvcmVndWxhckV4cHJlc3Npb25cIikpO1xudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIik7XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHNlbGY7XG59XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gICAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgICB9XG59XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAgICBpZiAoa2V5IGluIG9iaikge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBvYmpba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xufVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgICAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICAgIH07XG4gICAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn1cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICAgIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICAgIH1cbiAgICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHtcbiAgICAgICAgZGVmYXVsdDogb2JqXG4gICAgfTtcbn1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgICAgICByZXR1cm4gY2FsbDtcbiAgICB9XG4gICAgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgICAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgICAgIHJldHVybiBvO1xuICAgIH07XG4gICAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cbnZhciBfdHlwZW9mID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgXCJAc3djL2hlbHBlcnMgLSB0eXBlb2ZcIjtcbiAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbn07XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkge1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7XG4gICAgdHJ5IHtcbiAgICAgICAgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbigpIHt9KSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7XG4gICAgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkge1xuICAgICAgICB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDtcbiAgICAgICAgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHtcbiAgICAgICAgICAgIHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7XG4gICAgICAgICAgICByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTtcbiAgICB9O1xufVxudmFyIFJlZ3VsYXJFeHByZXNzaW9uQk5GTm9kZSA9IC8qI19fUFVSRV9fKi8gZnVuY3Rpb24oTm9uVGVybWluYWxOb2RlKSB7XG4gICAgX2luaGVyaXRzKFJlZ3VsYXJFeHByZXNzaW9uQk5GTm9kZSwgTm9uVGVybWluYWxOb2RlKTtcbiAgICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFJlZ3VsYXJFeHByZXNzaW9uQk5GTm9kZSk7XG4gICAgZnVuY3Rpb24gUmVndWxhckV4cHJlc3Npb25CTkZOb2RlKCkge1xuICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUmVndWxhckV4cHJlc3Npb25CTkZOb2RlKTtcbiAgICAgICAgdmFyIF90aGlzO1xuICAgICAgICBfdGhpcyA9IF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicmVndWxhckV4cHJlc3Npb25cIiwgL15cXC8oKD86XFxcXC58W15cXC9dKSopXFwvJC8pO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIF9jcmVhdGVDbGFzcyhSZWd1bGFyRXhwcmVzc2lvbkJORk5vZGUsIFtcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImdlbmVyYXRlUGFydFwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVndWxhckV4cHJlc3Npb24gPSB0aGlzLmdldFJlZ3VsYXJFeHByZXNzaW9uKCksIHJlZ3VsYXJFeHByZXNzaW9uUGFydCA9IG5ldyBfcmVndWxhckV4cHJlc3Npb24uZGVmYXVsdChyZWd1bGFyRXhwcmVzc2lvbik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZ3VsYXJFeHByZXNzaW9uUGFydDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImdldFJlZ3VsYXJFeHByZXNzaW9uXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UmVndWxhckV4cHJlc3Npb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSwgZmlyc3RDaGlsZE5vZGUgPSAoMCwgX2FycmF5KS5maXJzdChjaGlsZE5vZGVzKSwgdGVybWluYWxOb2RlID0gZmlyc3RDaGlsZE5vZGUsIHRlcm1pbmFsTm9kZUNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpLCBtYXRjaGVzID0gdGVybWluYWxOb2RlQ29udGVudC5tYXRjaCh0aGlzLnJlZ3VsYXJFeHByZXNzaW9uKSwgc2Vjb25kTWF0Y2ggPSAoMCwgX2FycmF5KS5zZWNvbmQobWF0Y2hlcyksIHBhdHRlcm4gPSBzZWNvbmRNYXRjaCwgcmVndWxhckV4cHJlc3Npb24gPSBuZXcgUmVnRXhwKHBhdHRlcm4pOyAvLy9cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVndWxhckV4cHJlc3Npb247XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICBdLCBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2Rlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiBfbm9uVGVybWluYWwuZGVmYXVsdC5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKFJlZ3VsYXJFeHByZXNzaW9uQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgXSk7XG4gICAgcmV0dXJuIFJlZ3VsYXJFeHByZXNzaW9uQk5GTm9kZTtcbn0oX25vblRlcm1pbmFsLmRlZmF1bHQpO1xuZXhwb3J0cy5kZWZhdWx0ID0gUmVndWxhckV4cHJlc3Npb25CTkZOb2RlO1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUx5NHVMM055WXk5dWIyUmxMMkp1Wmk5eVpXZDFiR0Z5Ulhod2NtVnpjMmx2Ymk1cWN5SmRMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpjSW5WelpTQnpkSEpwWTNSY0lqdGNibHh1YVcxd2IzSjBJRTV2YmxSbGNtMXBibUZzVG05a1pTQm1jbTl0SUZ3aUxpNHZMaTR2Ym05a1pTOXViMjVVWlhKdGFXNWhiRndpTzF4dWFXMXdiM0owSUZKbFozVnNZWEpGZUhCeVpYTnphVzl1VUdGeWRDQm1jbTl0SUZ3aUxpNHZMaTR2Y0dGeWRDOTBaWEp0YVc1aGJDOXlaV2QxYkdGeVJYaHdjbVZ6YzJsdmJsd2lPMXh1WEc1cGJYQnZjblFnZXlCbWFYSnpkQ3dnYzJWamIyNWtJSDBnWm5KdmJTQmNJaTR1THk0dUwzVjBhV3hwZEdsbGN5OWhjbkpoZVZ3aU8xeHVYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQmpiR0Z6Y3lCU1pXZDFiR0Z5Ulhod2NtVnpjMmx2YmtKT1JrNXZaR1VnWlhoMFpXNWtjeUJPYjI1VVpYSnRhVzVoYkU1dlpHVWdlMXh1SUNCeVpXZDFiR0Z5Ulhod2NtVnpjMmx2YmlBOUlDOWVYRnd2S0NnL09seGNYRnd1ZkZ0ZVhGd3ZYU2txS1Z4Y0x5UXZPMXh1WEc0Z0lHZGxibVZ5WVhSbFVHRnlkQ2hzYjI5clFXaGxZV1FwSUh0Y2JpQWdJQ0JqYjI1emRDQnlaV2QxYkdGeVJYaHdjbVZ6YzJsdmJpQTlJSFJvYVhNdVoyVjBVbVZuZFd4aGNrVjRjSEpsYzNOcGIyNG9LU3hjYmlBZ0lDQWdJQ0FnSUNCeVpXZDFiR0Z5Ulhod2NtVnpjMmx2YmxCaGNuUWdQU0J1WlhjZ1VtVm5kV3hoY2tWNGNISmxjM05wYjI1UVlYSjBLSEpsWjNWc1lYSkZlSEJ5WlhOemFXOXVLVHRjYmx4dUlDQWdJSEpsZEhWeWJpQnlaV2QxYkdGeVJYaHdjbVZ6YzJsdmJsQmhjblE3WEc0Z0lIMWNibHh1SUNCblpYUlNaV2QxYkdGeVJYaHdjbVZ6YzJsdmJpZ3BJSHRjYmlBZ0lDQmpiMjV6ZENCamFHbHNaRTV2WkdWeklEMGdkR2hwY3k1blpYUkRhR2xzWkU1dlpHVnpLQ2tzWEc0Z0lDQWdJQ0FnSUNBZ1ptbHljM1JEYUdsc1pFNXZaR1VnUFNCbWFYSnpkQ2hqYUdsc1pFNXZaR1Z6S1N4Y2JpQWdJQ0FnSUNBZ0lDQjBaWEp0YVc1aGJFNXZaR1VnUFNCbWFYSnpkRU5vYVd4a1RtOWtaU3dnSUM4dkwxeHVJQ0FnSUNBZ0lDQWdJSFJsY20xcGJtRnNUbTlrWlVOdmJuUmxiblFnUFNCMFpYSnRhVzVoYkU1dlpHVXVaMlYwUTI5dWRHVnVkQ2dwTEZ4dUlDQWdJQ0FnSUNBZ0lHMWhkR05vWlhNZ1BTQjBaWEp0YVc1aGJFNXZaR1ZEYjI1MFpXNTBMbTFoZEdOb0tIUm9hWE11Y21WbmRXeGhja1Y0Y0hKbGMzTnBiMjRwTEZ4dUlDQWdJQ0FnSUNBZ0lITmxZMjl1WkUxaGRHTm9JRDBnYzJWamIyNWtLRzFoZEdOb1pYTXBMRnh1SUNBZ0lDQWdJQ0FnSUhCaGRIUmxjbTRnUFNCelpXTnZibVJOWVhSamFDd2dMeTh2WEc0Z0lDQWdJQ0FnSUNBZ2NtVm5kV3hoY2tWNGNISmxjM05wYjI0Z1BTQnVaWGNnVW1WblJYaHdLSEJoZEhSbGNtNHBPeUFnTHk4dlhHNWNiaUFnSUNCeVpYUjFjbTRnY21WbmRXeGhja1Y0Y0hKbGMzTnBiMjQ3WEc0Z0lIMWNibHh1SUNCemRHRjBhV01nWm5KdmJWSjFiR1ZPWVcxbFFXNWtRMmhwYkdST2IyUmxjeWh5ZFd4bFRtRnRaU3dnWTJocGJHUk9iMlJsY3lrZ2V5QnlaWFIxY200Z1RtOXVWR1Z5YldsdVlXeE9iMlJsTG1aeWIyMVNkV3hsVG1GdFpVRnVaRU5vYVd4a1RtOWtaWE1vVW1WbmRXeGhja1Y0Y0hKbGMzTnBiMjVDVGtaT2IyUmxMQ0J5ZFd4bFRtRnRaU3dnWTJocGJHUk9iMlJsY3lrN0lIMWNibjFjYmx4dUlsMHNJbTVoYldWeklqcGJJbEpsWjNWc1lYSkZlSEJ5WlhOemFXOXVRazVHVG05a1pTSXNJbkpsWjNWc1lYSkZlSEJ5WlhOemFXOXVJaXdpWjJWdVpYSmhkR1ZRWVhKMElpd2liRzl2YTBGb1pXRmtJaXdpWjJWMFVtVm5kV3hoY2tWNGNISmxjM05wYjI0aUxDSnlaV2QxYkdGeVJYaHdjbVZ6YzJsdmJsQmhjblFpTENKU1pXZDFiR0Z5Ulhod2NtVnpjMmx2YmxCaGNuUWlMQ0pqYUdsc1pFNXZaR1Z6SWl3aVoyVjBRMmhwYkdST2IyUmxjeUlzSW1acGNuTjBRMmhwYkdST2IyUmxJaXdpWm1seWMzUWlMQ0owWlhKdGFXNWhiRTV2WkdVaUxDSjBaWEp0YVc1aGJFNXZaR1ZEYjI1MFpXNTBJaXdpWjJWMFEyOXVkR1Z1ZENJc0ltMWhkR05vWlhNaUxDSnRZWFJqYUNJc0luTmxZMjl1WkUxaGRHTm9JaXdpYzJWamIyNWtJaXdpY0dGMGRHVnliaUlzSWxKbFowVjRjQ0lzSW1aeWIyMVNkV3hsVG1GdFpVRnVaRU5vYVd4a1RtOWtaWE1pTENKeWRXeGxUbUZ0WlNJc0lrNXZibFJsY20xcGJtRnNUbTlrWlNKZExDSnRZWEJ3YVc1bmN5STZJa0ZCUVVFc1EwRkJXU3hYUVVGQkxFTkJRVU03T3p0Rk8zZENPMEZCUldVc1IwRkJkMElzUTBGQmVFSXNXVUZCZDBJN1FVRkRiRUlzUjBGQmRVTXNRMEZCZGtNc2EwSkJRWFZETzBGQlJUTkRMRWRCUVhWQ0xFTkJRWFpDTEUxQlFYVkNPenM3T3pzN096czdPenM3T3pzN09FUTdjME03TmtRN2FVVTdPenM3ZDBVN1owVTdPenM3T3pzN096czdWVHM3ZDBJN096czdPenM3U3pzN096czdPenM3T3pzN096dE5PM2xFT3pzN096czdPenM3T3pzN096czdkVUk3TzBzN096czdNa0k3T3pzN096czdPM0ZHT3pzN096czdPenM3T3pzN2JVVTdPMmxFT3pzN096dEpRVVZvUTBFc2QwSkJRWGRDTEdsQ1FVRTVRaXhSUVVGUk8zZEVPenRoUVVGR1FTeDNRa0ZCZDBJN2RVUTdPelpETzNWRVFVTXpRME1zUTBGQmFVSXNOa05EVW01Q0xFTkVVU3RET3pzN096dFpRVVUzUTBNc1IwRkJXU3hGUVVGYVFTeERRVUZaTzIxQ1FVRmFRU3hSUVVGUkxFTkJRVkpCTEZsQlFWa3NRMEZCUTBNc1UwRkJVeXhGUVVGRkxFTkJRVU03WjBKQlEzWkNMRWRCUVVzc1EwRkJRMFlzYVVKQlFXbENMRWRCUVVjc1NVRkJTU3hEUVVGRFJ5eHZRa0ZCYjBJc1NVRkROME5ETEhGQ1FVRnhRaXhIUVVGSExFZEJRVWNzUTBGQlEwTXNhMEpCUVhGQ0xGTkJRVU5NTEdsQ1FVRnBRanRuUWtGRmVrVXNUVUZCVFN4RFFVRkRTU3h4UWtGQmNVSTdXVUZET1VJc1EwRkJRenM3TzFsQlJVUkVMRWRCUVc5Q0xFVkJRWEJDUVN4RFFVRnZRanR0UWtGQmNFSkJMRkZCUVZFc1EwRkJVa0VzYjBKQlFXOUNMRWRCUVVjc1EwRkJRenRuUWtGRGRFSXNSMEZCU3l4RFFVRkRSeXhWUVVGVkxFZEJRVWNzU1VGQlNTeERRVUZEUXl4aFFVRmhMRWxCUXk5Q1F5eGpRVUZqTEU5QlFVZERMRTFCUVVzc1VVRkJRMGdzVlVGQlZTeEhRVU5xUTBrc1dVRkJXU3hIUVVGSFJpeGpRVUZqTEVWQlF6ZENSeXh0UWtGQmJVSXNSMEZCUjBRc1dVRkJXU3hEUVVGRFJTeFZRVUZWTEVsQlF6ZERReXhQUVVGUExFZEJRVWRHTEcxQ1FVRnRRaXhEUVVGRFJ5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRaQ3hwUWtGQmFVSXNSMEZETVVSbExGZEJRVmNzVDBGQlIwTXNUVUZCVFN4VFFVRkRTQ3hQUVVGUExFZEJRelZDU1N4UFFVRlBMRWRCUVVkR0xGZEJRVmNzUlVGRGNrSm1MR2xDUVVGcFFpeEhRVUZITEVkQlFVY3NRMEZCUTJ0Q0xFMUJRVTBzUTBGQlEwUXNUMEZCVHl4SFFVRkpMRVZCUVVjc1FVRkJTQ3hEUVVGSE8yZENRVVZ1UkN4TlFVRk5MRU5CUVVOcVFpeHBRa0ZCYVVJN1dVRkRNVUlzUTBGQlF6czdPenRaUVVWTmJVSXNSMEZCZVVJc1JVRkJla0pCTEVOQlFYbENPMjFDUVVGb1F5eFJRVUZSTEVOQlFVUkJMSGxDUVVGNVFpeERRVUZEUXl4UlFVRlJMRVZCUVVWa0xGVkJRVlVzUlVGQlJTeERRVUZETzJkQ1FVRkRMRTFCUVUwc1EwRkJRMlVzV1VGQlpTeFRRVUZEUml4NVFrRkJlVUlzUTBGQlEzQkNMSGRDUVVGM1FpeEZRVUZGY1VJc1VVRkJVU3hGUVVGRlpDeFZRVUZWTzFsQlFVY3NRMEZCUXpzN1RUczdSVUYyUW5oSFpTeFpRVUZsTzJ0Q1FVRm9SSFJDTEhkQ1FVRjNRaXhCSW4wPSIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgdHlwZXMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgUmVndWxhckV4cHJlc3Npb25CTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9yZWd1bGFyRXhwcmVzc2lvblwiO1xuaW1wb3J0IFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9zaWduaWZpY2FudFRva2VuVHlwZVwiO1xuXG5pbXBvcnQgeyBSZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IHJlZ3VsYXJFeHByZXNzaW9uVHlwZSB9ID0gdHlwZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZ3VsYXJFeHByZXNzaW9uUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCByZWd1bGFyRXhwcmVzc2lvblNpZ25pZmljYW50VG9rZW5UeXBlID0gcmVndWxhckV4cHJlc3Npb25UeXBlLCAgLy8vXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb25TaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gPSBuZXcgU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uKHJlZ3VsYXJFeHByZXNzaW9uU2lnbmlmaWNhbnRUb2tlblR5cGUpLFxuICAgICAgICAgIG5hbWUgPSBSZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgcmVndWxhckV4cHJlc3Npb25TaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBSZWd1bGFyRXhwcmVzc2lvbkJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBOb1doaXRlc3BhY2VQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL25vV2hpdGVzcGFjZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBRdWFudGlmaWVyUnVsZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IodGVybWluYWxTeW1ib2xDb250ZW50KSB7XG4gICAgY29uc3QgY29udGVudCA9IHRlcm1pbmFsU3ltYm9sQ29udGVudCwgIC8vL1xuICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnQgPSBuZXcgTm9XaGl0ZXNwYWNlUGFydCgpLFxuICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoY29udGVudCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBub1doaXRlc3BhY2VQYXJ0LFxuICAgICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXTtcblxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IERlZmluaXRpb25CTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3F1YW50aWZpZXJSdWxlXCI7XG5cbmltcG9ydCB7IE9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IHF1ZXN0aW9uTWFyayB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9wdGlvbmFsUXVhbnRpZmllclJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IE9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lLFxuICAgICAgICAgIG9wdGlvbmFsUXVhbnRpZmllclRlcm1pbmFsU3ltYm9sQ29udGVudCA9IHF1ZXN0aW9uTWFyaywgLy8vXG4gICAgICAgICAgb3B0aW9uYWxRdWFudGlmaWVyUnVsZURlZmluaXRpb24gPSBuZXcgUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uKG9wdGlvbmFsUXVhbnRpZmllclRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBvcHRpb25hbFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IERlZmluaXRpb25CTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IERlZmluaXRpb25CTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3F1YW50aWZpZXJSdWxlXCI7XG5cbmltcG9ydCB7IE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyBwbHVzIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT25lT3JNb3JlUXVhbnRpZmllclJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSxcbiAgICAgICAgICBvbmVPck1vcmVRdWFudGlmaWVyVGVybWluYWxTeW1ib2xDb250ZW50ID0gcGx1cywgLy8vXG4gICAgICAgICAgb25lT3JNb3JlUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uID0gbmV3IFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbihvbmVPck1vcmVRdWFudGlmaWVyVGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IERlZmluaXRpb25CTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IERlZmluaXRpb25CTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3F1YW50aWZpZXJSdWxlXCI7XG5cbmltcG9ydCB7IFplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgYXN0ZXJpc2sgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaZXJvT3JNb3JlUXVhbnRpZmllclJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IFplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWUsXG4gICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBhc3RlcmlzaywgLy8vXG4gICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbiA9IG5ldyBRdWFudGlmaWVyUnVsZURlZmluaXRpb24oemVyb09yTW9yZVF1YW50aWZpZXJUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IERlZmluaXRpb25CTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX25vblRlcm1pbmFsID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiKSk7XG52YXIgX3NpZ25pZmljYW50VG9rZW5UeXBlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vcGFydC90ZXJtaW5hbC9zaWduaWZpY2FudFRva2VuVHlwZVwiKSk7XG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiKTtcbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICAgIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICAgIH1cbiAgICByZXR1cm4gc2VsZjtcbn1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspe1xuICAgICAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICAgIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIG9ialtrZXldID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG59XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7XG4gICAgfTtcbiAgICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufVxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gICAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gICAgfVxuICAgIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDoge1xuICAgICAgICBkZWZhdWx0OiBvYmpcbiAgICB9O1xufVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICAgIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgICAgIHJldHVybiBjYWxsO1xuICAgIH1cbiAgICByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTtcbn1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgICAgIG8uX19wcm90b19fID0gcDtcbiAgICAgICAgcmV0dXJuIG87XG4gICAgfTtcbiAgICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufVxudmFyIF90eXBlb2YgPSBmdW5jdGlvbihvYmopIHtcbiAgICBcIkBzd2MvaGVscGVycyAtIHR5cGVvZlwiO1xuICAgIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xufTtcbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgICBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uKCkge30pKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHtcbiAgICB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7XG4gICAgICAgIHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0O1xuICAgICAgICBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkge1xuICAgICAgICAgICAgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgIHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpO1xuICAgIH07XG59XG52YXIgU2lnbmlmaWNhbnRUb2tlblR5cGVCTkZOb2RlID0gLyojX19QVVJFX18qLyBmdW5jdGlvbihOb25UZXJtaW5hbE5vZGUpIHtcbiAgICBfaW5oZXJpdHMoU2lnbmlmaWNhbnRUb2tlblR5cGVCTkZOb2RlLCBOb25UZXJtaW5hbE5vZGUpO1xuICAgIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU2lnbmlmaWNhbnRUb2tlblR5cGVCTkZOb2RlKTtcbiAgICBmdW5jdGlvbiBTaWduaWZpY2FudFRva2VuVHlwZUJORk5vZGUoKSB7XG4gICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTaWduaWZpY2FudFRva2VuVHlwZUJORk5vZGUpO1xuICAgICAgICB2YXIgX3RoaXM7XG4gICAgICAgIF90aGlzID0gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyZWd1bGFyRXhwcmVzc2lvblwiLCAvXlxcWyhbXlxcXV0rKV0kLyk7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgX2NyZWF0ZUNsYXNzKFNpZ25pZmljYW50VG9rZW5UeXBlQk5GTm9kZSwgW1xuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiZ2VuZXJhdGVQYXJ0XCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgICAgICAgICAgICAgIHZhciBzaWduaWZpY2FudFRva2VuVHlwZSA9IHRoaXMuZ2V0U2lnbmlmaWNhbnRUb2tlblR5cGUoKSwgc2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0ID0gbmV3IF9zaWduaWZpY2FudFRva2VuVHlwZS5kZWZhdWx0KHNpZ25pZmljYW50VG9rZW5UeXBlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiZ2V0U2lnbmlmaWNhbnRUb2tlblR5cGVcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRTaWduaWZpY2FudFRva2VuVHlwZSgpIHtcbiAgICAgICAgICAgICAgICB2YXIgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLCBmaXJzdENoaWxkTm9kZSA9ICgwLCBfYXJyYXkpLmZpcnN0KGNoaWxkTm9kZXMpLCB0ZXJtaW5hbE5vZGUgPSBmaXJzdENoaWxkTm9kZSwgdGVybWluYWxOb2RlQ29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCksIG1hdGNoZXMgPSB0ZXJtaW5hbE5vZGVDb250ZW50Lm1hdGNoKHRoaXMucmVndWxhckV4cHJlc3Npb24pLCBzZWNvbmRNYXRjaCA9ICgwLCBfYXJyYXkpLnNlY29uZChtYXRjaGVzKSwgc2lnbmlmaWNhbnRUb2tlblR5cGUgPSBzZWNvbmRNYXRjaDsgLy8vXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW5UeXBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgXSwgW1xuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2Rlc1wiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX25vblRlcm1pbmFsLmRlZmF1bHQuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhTaWduaWZpY2FudFRva2VuVHlwZUJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIF0pO1xuICAgIHJldHVybiBTaWduaWZpY2FudFRva2VuVHlwZUJORk5vZGU7XG59KF9ub25UZXJtaW5hbC5kZWZhdWx0KTtcbmV4cG9ydHMuZGVmYXVsdCA9IFNpZ25pZmljYW50VG9rZW5UeXBlQk5GTm9kZTtcbm1vZHVsZS5leHBvcnRzID0gU2lnbmlmaWNhbnRUb2tlblR5cGVCTkZOb2RlO1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUx5NHVMM055WXk5dWIyUmxMMkp1Wmk5emFXZHVhV1pwWTJGdWRGUnZhMlZ1Vkhsd1pTNXFjeUpkTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKY0luVnpaU0J6ZEhKcFkzUmNJanRjYmx4dWFXMXdiM0owSUU1dmJsUmxjbTFwYm1Gc1RtOWtaU0JtY205dElGd2lMaTR2TGk0dmJtOWtaUzl1YjI1VVpYSnRhVzVoYkZ3aU8xeHVhVzF3YjNKMElGTnBaMjVwWm1sallXNTBWRzlyWlc1VWVYQmxVR0Z5ZENCbWNtOXRJRndpTGk0dkxpNHZjR0Z5ZEM5MFpYSnRhVzVoYkM5emFXZHVhV1pwWTJGdWRGUnZhMlZ1Vkhsd1pWd2lPMXh1WEc1cGJYQnZjblFnZXlCbWFYSnpkQ3dnYzJWamIyNWtJSDBnWm5KdmJTQmNJaTR1THk0dUwzVjBhV3hwZEdsbGN5OWhjbkpoZVZ3aU8xeHVYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQmpiR0Z6Y3lCVGFXZHVhV1pwWTJGdWRGUnZhMlZ1Vkhsd1pVSk9SazV2WkdVZ1pYaDBaVzVrY3lCT2IyNVVaWEp0YVc1aGJFNXZaR1VnZTF4dUlDQnlaV2QxYkdGeVJYaHdjbVZ6YzJsdmJpQTlJQzllWEZ4YktGdGVYRnhkWFNzcFhTUXZPMXh1WEc0Z0lHZGxibVZ5WVhSbFVHRnlkQ2hzYjI5clFXaGxZV1FwSUh0Y2JpQWdJQ0JqYjI1emRDQnphV2R1YVdacFkyRnVkRlJ2YTJWdVZIbHdaU0E5SUhSb2FYTXVaMlYwVTJsbmJtbG1hV05oYm5SVWIydGxibFI1Y0dVb0tTeGNiaUFnSUNBZ0lDQWdJQ0J6YVdkdWFXWnBZMkZ1ZEZSdmEyVnVWSGx3WlZCaGNuUWdQU0J1WlhjZ1UybG5ibWxtYVdOaGJuUlViMnRsYmxSNWNHVlFZWEowS0hOcFoyNXBabWxqWVc1MFZHOXJaVzVVZVhCbEtUdGNibHh1SUNBZ0lISmxkSFZ5YmlCemFXZHVhV1pwWTJGdWRGUnZhMlZ1Vkhsd1pWQmhjblE3WEc0Z0lIMWNibHh1SUNCblpYUlRhV2R1YVdacFkyRnVkRlJ2YTJWdVZIbHdaU2dwSUh0Y2JpQWdJQ0JqYjI1emRDQmphR2xzWkU1dlpHVnpJRDBnZEdocGN5NW5aWFJEYUdsc1pFNXZaR1Z6S0Nrc1hHNGdJQ0FnSUNBZ0lDQWdabWx5YzNSRGFHbHNaRTV2WkdVZ1BTQm1hWEp6ZENoamFHbHNaRTV2WkdWektTeGNiaUFnSUNBZ0lDQWdJQ0IwWlhKdGFXNWhiRTV2WkdVZ1BTQm1hWEp6ZEVOb2FXeGtUbTlrWlN3Z0lDOHZMMXh1SUNBZ0lDQWdJQ0FnSUhSbGNtMXBibUZzVG05a1pVTnZiblJsYm5RZ1BTQjBaWEp0YVc1aGJFNXZaR1V1WjJWMFEyOXVkR1Z1ZENncExGeHVJQ0FnSUNBZ0lDQWdJRzFoZEdOb1pYTWdQU0IwWlhKdGFXNWhiRTV2WkdWRGIyNTBaVzUwTG0xaGRHTm9LSFJvYVhNdWNtVm5kV3hoY2tWNGNISmxjM05wYjI0cExGeHVJQ0FnSUNBZ0lDQWdJSE5sWTI5dVpFMWhkR05vSUQwZ2MyVmpiMjVrS0cxaGRHTm9aWE1wTEZ4dUlDQWdJQ0FnSUNBZ0lITnBaMjVwWm1sallXNTBWRzlyWlc1VWVYQmxJRDBnYzJWamIyNWtUV0YwWTJnN0lDOHZMMXh1WEc0Z0lDQWdjbVYwZFhKdUlITnBaMjVwWm1sallXNTBWRzlyWlc1VWVYQmxPMXh1SUNCOVhHNWNiaUFnYzNSaGRHbGpJR1p5YjIxU2RXeGxUbUZ0WlVGdVpFTm9hV3hrVG05a1pYTW9jblZzWlU1aGJXVXNJR05vYVd4a1RtOWtaWE1wSUhzZ2NtVjBkWEp1SUU1dmJsUmxjbTFwYm1Gc1RtOWtaUzVtY205dFVuVnNaVTVoYldWQmJtUkRhR2xzWkU1dlpHVnpLRk5wWjI1cFptbGpZVzUwVkc5clpXNVVlWEJsUWs1R1RtOWtaU3dnY25Wc1pVNWhiV1VzSUdOb2FXeGtUbTlrWlhNcE95QjlYRzU5WEc1Y2JtMXZaSFZzWlM1bGVIQnZjblJ6SUQwZ1UybG5ibWxtYVdOaGJuUlViMnRsYmxSNWNHVkNUa1pPYjJSbE8xeHVYRzVjYmlKZExDSnVZVzFsY3lJNld5SlRhV2R1YVdacFkyRnVkRlJ2YTJWdVZIbHdaVUpPUms1dlpHVWlMQ0p5WldkMWJHRnlSWGh3Y21WemMybHZiaUlzSW1kbGJtVnlZWFJsVUdGeWRDSXNJbXh2YjJ0QmFHVmhaQ0lzSW5OcFoyNXBabWxqWVc1MFZHOXJaVzVVZVhCbElpd2laMlYwVTJsbmJtbG1hV05oYm5SVWIydGxibFI1Y0dVaUxDSnphV2R1YVdacFkyRnVkRlJ2YTJWdVZIbHdaVkJoY25RaUxDSlRhV2R1YVdacFkyRnVkRlJ2YTJWdVZIbHdaVkJoY25RaUxDSmphR2xzWkU1dlpHVnpJaXdpWjJWMFEyaHBiR1JPYjJSbGN5SXNJbVpwY25OMFEyaHBiR1JPYjJSbElpd2labWx5YzNRaUxDSjBaWEp0YVc1aGJFNXZaR1VpTENKMFpYSnRhVzVoYkU1dlpHVkRiMjUwWlc1MElpd2laMlYwUTI5dWRHVnVkQ0lzSW0xaGRHTm9aWE1pTENKdFlYUmphQ0lzSW5ObFkyOXVaRTFoZEdOb0lpd2ljMlZqYjI1a0lpd2labkp2YlZKMWJHVk9ZVzFsUVc1a1EyaHBiR1JPYjJSbGN5SXNJbkoxYkdWT1lXMWxJaXdpVG05dVZHVnliV2x1WVd4T2IyUmxJaXdpYlc5a2RXeGxJaXdpWlhod2IzSjBjeUpkTENKdFlYQndhVzVuY3lJNklrRkJRVUVzUTBGQldTeFhRVUZCTEVOQlFVTTdPenRGTzNkQ08wRkJSV1VzUjBGQmQwSXNRMEZCZUVJc1dVRkJkMEk3UVVGRFppeEhRVUV3UXl4RFFVRXhReXh4UWtGQk1FTTdRVUZGYWtRc1IwRkJkVUlzUTBGQmRrSXNUVUZCZFVJN096czdPenM3T3pzN096czdPenM0UkR0elF6czJSRHRwUlRzN096dDNSVHRuUlRzN096czdPenM3T3p0Vk96dDNRanM3T3pzN096dExPenM3T3pzN096czdPenM3TzAwN2VVUTdPenM3T3pzN096czdPenM3T3p0MVFqczdTenM3T3pzeVFqczdPenM3T3pzN2NVWTdPenM3T3pzN096czdPenR0UlRzN2FVUTdPenM3TzBsQlJXaERRU3d5UWtGQk1rSXNhVUpCUVdwRExGRkJRVkU3TWtRN08yRkJRVVpCTERKQ1FVRXlRanN3UkRzN05rTTdkVVJCUXpsRFF5eERRVUZwUWl4dlEwTlNia0lzUTBSUmMwTTdPenM3TzFsQlJYQkRReXhIUVVGWkxFVkJRVnBCTEVOQlFWazdiVUpCUVZwQkxGRkJRVkVzUTBGQlVrRXNXVUZCV1N4RFFVRkRReXhUUVVGVExFVkJRVVVzUTBGQlF6dG5Ra0ZEZGtJc1IwRkJTeXhEUVVGRFF5eHZRa0ZCYjBJc1IwRkJSeXhKUVVGSkxFTkJRVU5ETEhWQ1FVRjFRaXhKUVVOdVJFTXNkMEpCUVhkQ0xFZEJRVWNzUjBGQlJ5eERRVUZEUXl4eFFrRkJkMElzVTBGQlEwZ3NiMEpCUVc5Q08yZENRVVZzUml4TlFVRk5MRU5CUVVORkxIZENRVUYzUWp0WlFVTnFReXhEUVVGRE96czdXVUZGUkVRc1IwRkJkVUlzUlVGQmRrSkJMRU5CUVhWQ08yMUNRVUYyUWtFc1VVRkJVU3hEUVVGU1FTeDFRa0ZCZFVJc1IwRkJSeXhEUVVGRE8yZENRVU42UWl4SFFVRkxMRU5CUVVOSExGVkJRVlVzUjBGQlJ5eEpRVUZKTEVOQlFVTkRMR0ZCUVdFc1NVRkRMMEpETEdOQlFXTXNUMEZCUjBNc1RVRkJTeXhSUVVGRFNDeFZRVUZWTEVkQlEycERTU3haUVVGWkxFZEJRVWRHTEdOQlFXTXNSVUZETjBKSExHMUNRVUZ0UWl4SFFVRkhSQ3haUVVGWkxFTkJRVU5GTEZWQlFWVXNTVUZETjBORExFOUJRVThzUjBGQlIwWXNiVUpCUVcxQ0xFTkJRVU5ITEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVObUxHbENRVUZwUWl4SFFVTXhSR2RDTEZkQlFWY3NUMEZCUjBNc1RVRkJUU3hUUVVGRFNDeFBRVUZQTEVkQlF6VkNXQ3h2UWtGQmIwSXNSMEZCUjJFc1YwRkJWeXhGUVVGRkxFVkJRVWNzUVVGQlNDeERRVUZITzJkQ1FVVTNReXhOUVVGTkxFTkJRVU5pTEc5Q1FVRnZRanRaUVVNM1FpeERRVUZET3pzN08xbEJSVTFsTEVkQlFYbENMRVZCUVhwQ1FTeERRVUY1UWp0dFFrRkJhRU1zVVVGQlVTeERRVUZFUVN4NVFrRkJlVUlzUTBGQlEwTXNVVUZCVVN4RlFVRkZXaXhWUVVGVkxFVkJRVVVzUTBGQlF6dG5Ra0ZCUXl4TlFVRk5MRU5CUVVOaExGbEJRV1VzVTBGQlEwWXNlVUpCUVhsQ0xFTkJRVU51UWl3eVFrRkJNa0lzUlVGQlJXOUNMRkZCUVZFc1JVRkJSVm9zVlVGQlZUdFpRVUZITEVOQlFVTTdPMDA3TzBWQmRFSjRSMkVzV1VGQlpUdHJRa0ZCYmtSeVFpd3lRa0ZCTWtJc1FUdEJRWGxDYUVSelFpeE5RVUZOTEVOQlFVTkRMRTlCUVU4c1IwRkJSM1pDTERKQ1FVRXlRaXhEUVVGREluMD0iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHR5cGVzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFNpZ25pZmljYW50VG9rZW5UeXBlQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuaW1wb3J0IHsgU2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyB0eXBlVHlwZSB9ID0gdHlwZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpZ25pZmljYW50VG9rZW5UeXBlUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCB0eXBlU2lnbmlmaWNhbnRUb2tlblR5cGUgPSB0eXBlVHlwZSwgIC8vL1xuICAgICAgICAgIHR5cGVTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gPSBuZXcgU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uKHR5cGVTaWduaWZpY2FudFRva2VuVHlwZSksXG4gICAgICAgICAgbmFtZSA9IFNpZ25pZmljYW50VG9rZW5UeXBlUnVsZU5hbWUsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICB0eXBlU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gU2lnbmlmaWNhbnRUb2tlblR5cGVCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGZpcnN0IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gcnVsZU1hcEZyb21SdWxlcyhydWxlcykge1xuICBjb25zdCBydWxlTWFwID0ge307XG5cbiAgcnVsZXMuZm9yRWFjaCgocnVsZSkgPT4ge1xuICAgIGNvbnN0IHJ1bGVOYW1lID0gcnVsZS5nZXROYW1lKCk7XG5cbiAgICBydWxlTWFwW3J1bGVOYW1lXSA9IHJ1bGU7XG4gIH0pO1xuXG4gIHJldHVybiBydWxlTWFwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRSdWxlRnJvbVJ1bGVzKHJ1bGVzKSB7XG4gIGNvbnN0IGZpcnN0UnVsZSA9IGZpcnN0KHJ1bGVzKSxcbiAgICAgIHN0YXJ0UnVsZSA9IGZpcnN0UnVsZTsgIC8vL1xuXG4gIHJldHVybiBzdGFydFJ1bGU7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBibmYgZnJvbSBcIi4vYm5mXCI7XG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFN0YXRlIGZyb20gXCIuLi9zdGF0ZVwiO1xuaW1wb3J0IE5hbWVSdWxlIGZyb20gXCIuLi9ydWxlL25hbWVcIjtcbmltcG9ydCBQYXJ0UnVsZSBmcm9tIFwiLi4vcnVsZS9wYXJ0XCI7XG5pbXBvcnQgUnVsZVJ1bGUgZnJvbSBcIi4uL3J1bGUvcnVsZVwiO1xuaW1wb3J0IEVycm9yUnVsZSBmcm9tIFwiLi4vcnVsZS9lcnJvclwiO1xuaW1wb3J0IERvY3VtZW50UnVsZSBmcm9tIFwiLi4vcnVsZS9kb2N1bWVudFwiO1xuaW1wb3J0IFJ1bGVOYW1lUnVsZSBmcm9tIFwiLi4vcnVsZS9ydWxlTmFtZVwiO1xuaW1wb3J0IFdpbGRjYXJkUnVsZSBmcm9tIFwiLi4vcnVsZS93aWxkY2FyZFwiO1xuaW1wb3J0IEVuZE9mTGluZVJ1bGUgZnJvbSBcIi4uL3J1bGUvZW5kT2ZMaW5lXCI7XG5pbXBvcnQgUXVhbnRpZmllclJ1bGUgZnJvbSBcIi4uL3J1bGUvcXVhbnRpZmllclwiO1xuaW1wb3J0IERlZmluaXRpb25SdWxlIGZyb20gXCIuLi9ydWxlL2RlZmluaXRpb25cIjtcbmltcG9ydCBEZWZpbml0aW9uc1J1bGUgZnJvbSBcIi4uL3J1bGUvZGVmaW5pdGlvbnNcIjtcbmltcG9ydCBUZXJtaW5hbFBhcnRSdWxlIGZyb20gXCIuLi9ydWxlL3Rlcm1pbmFsUGFydFwiO1xuaW1wb3J0IENob2ljZU9mUGFydHNSdWxlIGZyb20gXCIuLi9ydWxlL2Nob2ljZU9mUGFydHNcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFJ1bGUgZnJvbSBcIi4uL3J1bGUvdGVybWluYWxTeW1ib2xcIjtcbmltcG9ydCBOb25UZXJtaW5hbFBhcnRSdWxlIGZyb20gXCIuLi9ydWxlL25vblRlcm1pbmFsUGFydFwiO1xuaW1wb3J0IFNlcXVlbmNlT2ZQYXJ0c1J1bGUgZnJvbSBcIi4uL3J1bGUvc2VxdWVuY2VPZlBhcnRzXCI7XG5pbXBvcnQgTm9XaGl0ZXNwYWNlUGFydFJ1bGUgZnJvbSBcIi4uL3J1bGUvbm9XaGl0ZXNwYWNlUGFydFwiO1xuaW1wb3J0IExvb2tBaGVhZE1vZGlmaWVyUnVsZSBmcm9tIFwiLi4vcnVsZS9sb29rQWhlYWRNb2RpZmllclwiO1xuaW1wb3J0IFJlZ3VsYXJFeHByZXNzaW9uUnVsZSBmcm9tIFwiLi4vcnVsZS9yZWd1bGFyRXhwcmVzc2lvblwiO1xuaW1wb3J0IE9wdGlvbmFsUXVhbnRpZmllclJ1bGUgZnJvbSBcIi4uL3J1bGUvb3B0aW9uYWxRdWFudGlmaWVyXCI7XG5pbXBvcnQgT25lT3JNb3JlUXVhbnRpZmllclJ1bGUgZnJvbSBcIi4uL3J1bGUvb25lT3JNb3JlUXVhbnRpZmllclwiO1xuaW1wb3J0IFplcm9Pck1vcmVRdWFudGlmaWVyUnVsZSBmcm9tIFwiLi4vcnVsZS96ZXJvT3JNb3JlUXVhbnRpZmllclwiO1xuaW1wb3J0IFNpZ25pZmljYW50VG9rZW5UeXBlUnVsZSBmcm9tIFwiLi4vcnVsZS9zaWduaWZpY2FudFRva2VuVHlwZVwiO1xuXG5pbXBvcnQgeyBzdGFydFJ1bGVGcm9tUnVsZXMsIHJ1bGVNYXBGcm9tUnVsZXMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3J1bGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJORlBhcnNlciB7XG4gIGNvbnN0cnVjdG9yKHN0YXJ0UnVsZSwgcnVsZU1hcCkge1xuICAgIHRoaXMuc3RhcnRSdWxlID0gc3RhcnRSdWxlO1xuICAgIHRoaXMucnVsZU1hcCA9IHJ1bGVNYXA7XG4gIH1cblxuICBnZXRTdGFydFJ1bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRSdWxlO1xuICB9XG5cbiAgZ2V0UnVsZU1hcCgpIHtcbiAgICByZXR1cm4gdGhpcy5ydWxlTWFwO1xuICB9XG5cbiAgcGFyc2UodG9rZW5zLCBydWxlID0gdGhpcy5zdGFydFJ1bGUpIHtcbiAgICBjb25zdCBzdGF0ZSA9IFN0YXRlLmZyb21Ub2tlbnNBbmRSdWxlTWFwKHRva2VucywgdGhpcy5ydWxlTWFwKSxcbiAgICAgICAgICBjYWxsYmFjayA9IG51bGwsXG4gICAgICAgICAgcnVsZU5vZGUgPSBydWxlLnBhcnNlKHN0YXRlLCBjYWxsYmFjayksXG4gICAgICAgICAgbm9kZSA9IHJ1bGVOb2RlOyAvLy9cblxuICAgIHJldHVybiBub2RlO1xuICB9XG5cblx0cnVsZXNGcm9tVG9rZW5zKHRva2Vucykge1xuXHQgIGxldCBydWxlcztcblxuICAgIGNvbnN0IG5vZGUgPSB0aGlzLnBhcnNlKHRva2Vucyk7XG5cbiAgICBpZiAobm9kZSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGVyZSBpcyBubyBub2RlLmApO1xuICAgIH1cblxuICAgIHJ1bGVzID0gbm9kZS5nZW5lcmF0ZVJ1bGVzKFJ1bGUpO1xuXG4gICAgY29uc3QgcnVsZXNMZW5ndGggPSBydWxlcy5sZW5ndGg7XG5cbiAgICBpZiAocnVsZXNMZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlcmUgYXJlIG5vIHJ1bGVzLmApO1xuICAgIH1cblxuICAgIHJldHVybiBydWxlcztcbiAgfVxuXG4gIHN0YXRpYyBibmYgPSBibmY7XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IG5hbWVSdWxlID0gbmV3IE5hbWVSdWxlKCksXG4gICAgICAgICAgcGFydFJ1bGUgPSBuZXcgUGFydFJ1bGUoKSxcbiAgICAgICAgICBydWxlUnVsZSA9IG5ldyBSdWxlUnVsZSgpLFxuICAgICAgICAgIGVycm9yUnVsZSA9IG5ldyBFcnJvclJ1bGUoKSxcbiAgICAgICAgICBkb2N1bWVudFJ1bGUgPSBuZXcgRG9jdW1lbnRSdWxlKCksXG4gICAgICAgICAgcnVsZU5hbWVSdWxlID0gbmV3IFJ1bGVOYW1lUnVsZSgpLFxuICAgICAgICAgIHdpbGRjYXJkUnVsZSA9IG5ldyBXaWxkY2FyZFJ1bGUoKSxcbiAgICAgICAgICBlbmRPZkxpbmVSdWxlID0gbmV3IEVuZE9mTGluZVJ1bGUoKSxcbiAgICAgICAgICBxdWFudGlmaWVyUnVsZSA9IG5ldyBRdWFudGlmaWVyUnVsZSgpLFxuICAgICAgICAgIGRlZmluaXRpb25SdWxlID0gbmV3IERlZmluaXRpb25SdWxlKCksXG4gICAgICAgICAgZGVmaW5pdGlvbnNSdWxlID0gbmV3IERlZmluaXRpb25zUnVsZSgpLFxuICAgICAgICAgIHRlcm1pbmFsUGFydFJ1bGUgPSBuZXcgVGVybWluYWxQYXJ0UnVsZSgpLFxuICAgICAgICAgIGNob2ljZU9mUGFydHNSdWxlID0gbmV3IENob2ljZU9mUGFydHNSdWxlKCksXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xSdWxlID0gbmV3IFRlcm1pbmFsU3ltYm9sUnVsZSgpLFxuICAgICAgICAgIG5vblRlcm1pbmFsUGFydFJ1bGUgPSBuZXcgTm9uVGVybWluYWxQYXJ0UnVsZSgpLFxuICAgICAgICAgIHNlcXVlbmNlT2ZQYXJ0c1J1bGUgPSBuZXcgU2VxdWVuY2VPZlBhcnRzUnVsZSgpLFxuICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnRSdWxlID0gbmV3IE5vV2hpdGVzcGFjZVBhcnRSdWxlKCksXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb25SdWxlID0gbmV3IFJlZ3VsYXJFeHByZXNzaW9uUnVsZSgpLFxuICAgICAgICAgIGxvb2tBaGVhZE1vZGlmaWVyUnVsZSA9IG5ldyBMb29rQWhlYWRNb2RpZmllclJ1bGUoKSxcbiAgICAgICAgICBvcHRpb25hbFF1YW50aWZpZXJSdWxlID0gbmV3IE9wdGlvbmFsUXVhbnRpZmllclJ1bGUoKSxcbiAgICAgICAgICBvbmVPck1vcmVRdWFudGlmaWVyUnVsZSA9IG5ldyBPbmVPck1vcmVRdWFudGlmaWVyUnVsZSgpLFxuICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZSA9IG5ldyBaZXJvT3JNb3JlUXVhbnRpZmllclJ1bGUoKSxcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZVJ1bGUgPSBuZXcgU2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlKCk7XG5cbiAgICBsZXQgcnVsZXMgPSBbXG4gICAgICBkb2N1bWVudFJ1bGUsXG4gICAgICBydWxlUnVsZSxcbiAgICAgIG5hbWVSdWxlLFxuICAgICAgZGVmaW5pdGlvbnNSdWxlLFxuICAgICAgZGVmaW5pdGlvblJ1bGUsXG4gICAgICBwYXJ0UnVsZSxcbiAgICAgIG5vblRlcm1pbmFsUGFydFJ1bGUsXG4gICAgICB0ZXJtaW5hbFBhcnRSdWxlLFxuICAgICAgbm9XaGl0ZXNwYWNlUGFydFJ1bGUsXG4gICAgICBzZXF1ZW5jZU9mUGFydHNSdWxlLFxuICAgICAgY2hvaWNlT2ZQYXJ0c1J1bGUsXG4gICAgICBydWxlTmFtZVJ1bGUsXG4gICAgICBzaWduaWZpY2FudFRva2VuVHlwZVJ1bGUsXG4gICAgICByZWd1bGFyRXhwcmVzc2lvblJ1bGUsXG4gICAgICB0ZXJtaW5hbFN5bWJvbFJ1bGUsXG4gICAgICBlbmRPZkxpbmVSdWxlLFxuICAgICAgd2lsZGNhcmRSdWxlLFxuICAgICAgcXVhbnRpZmllclJ1bGUsXG4gICAgICBsb29rQWhlYWRNb2RpZmllclJ1bGUsXG4gICAgICBvcHRpb25hbFF1YW50aWZpZXJSdWxlLFxuICAgICAgb25lT3JNb3JlUXVhbnRpZmllclJ1bGUsXG4gICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGUsXG4gICAgICBlcnJvclJ1bGVcbiAgICBdO1xuXG4gICAgY29uc3Qgc3RhcnRSdWxlID0gc3RhcnRSdWxlRnJvbVJ1bGVzKHJ1bGVzKSxcbiAgICAgICAgICBydWxlTWFwID0gcnVsZU1hcEZyb21SdWxlcyhydWxlcyksXG4gICAgICAgICAgYm5mUGFyc2VyID0gbmV3IEJORlBhcnNlcihzdGFydFJ1bGUsIHJ1bGVNYXApO1xuICAgIFxuICAgIHJldHVybiBibmZQYXJzZXI7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgYm5mID0gYFxuXG4gIGV4cHJlc3Npb24gIDo6PSBleHByZXNzaW9uXyBvcGVyYXRvciBleHByZXNzaW9uIGV4cHJlc3Npb25+KlxuXG4gICAgICAgICAgICAgICAgfCBleHByZXNzaW9uX1xuXG4gICAgICAgICAgICAgICAgO1xuXG4gIG9wZXJhdG9yICAgIDo6PSBcIitcIlxuXG4gICAgICAgICAgICAgICAgfCBcIi1cIlxuXG4gICAgICAgICAgICAgICAgfCBcIi9cIlxuXG4gICAgICAgICAgICAgICAgfCBcIipcIlxuXG4gICAgICAgICAgICAgICAgO1xuXG4gIHRlcm0gICAgICAgIDo6PSAvXFxcXGQrLyA7XG5cbiAgZXhwcmVzc2lvbl8gOjo9IFwiKFwiIGV4cHJlc3Npb24gXCIpXCJcblxuICAgICAgICAgICAgICAgIHwgdGVybVxuXG4gICAgICAgICAgICAgICAgO1xuXG4gIGV4cHJlc3Npb25+IDo6PSBvcGVyYXRvciBleHByZXNzaW9uIDtcbiAgXG5gO1xuXG5leHBvcnQgZGVmYXVsdCBibmY7IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBCTkZMZXhlciB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IEJORlBhcnNlciBmcm9tIFwiLi4vYm5mL3BhcnNlclwiO1xuXG5pbXBvcnQgeyBzdGFydFJ1bGVGcm9tUnVsZXMsIHJ1bGVNYXBGcm9tUnVsZXMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3J1bGVzXCI7XG5cbmNvbnN0IGJuZkxleGVyID0gQk5GTGV4ZXIuZnJvbU5vdGhpbmcoKSxcbiAgICAgIGJuZlBhcnNlciA9IEJORlBhcnNlci5mcm9tTm90aGluZygpO1xuXG5leHBvcnQgZnVuY3Rpb24gcnVsZXNGcm9tQk5GKGJuZikge1xuICBjb25zdCB0b2tlbnMgPSBibmZMZXhlci50b2tlbnNGcm9tQk5GKGJuZiksXG4gICAgICAgIHJ1bGVzID0gYm5mUGFyc2VyLnJ1bGVzRnJvbVRva2Vucyh0b2tlbnMpO1xuXG4gIHJldHVybiBydWxlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlckZyb21SdWxlcyhDbGFzcywgcnVsZXMpIHtcbiAgY29uc3Qgc3RhcnRSdWxlID0gc3RhcnRSdWxlRnJvbVJ1bGVzKHJ1bGVzKSxcbiAgICAgICAgcnVsZU1hcCA9IHJ1bGVNYXBGcm9tUnVsZXMocnVsZXMpLFxuICAgICAgICBwYXJzZXIgPSBuZXcgQ2xhc3Moc3RhcnRSdWxlLCBydWxlTWFwKTtcblxuICByZXR1cm4gcGFyc2VyO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU3RhdGUgZnJvbSBcIi4uL3N0YXRlXCI7XG5cbmltcG9ydCB7IHJ1bGVzRnJvbUJORiwgcGFyc2VyRnJvbVJ1bGVzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9wYXJzZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29tbW9uUGFyc2VyIHtcbiAgY29uc3RydWN0b3Ioc3RhcnRSdWxlLCBydWxlTWFwKSB7XG4gICAgdGhpcy5zdGFydFJ1bGUgPSBzdGFydFJ1bGU7XG4gICAgdGhpcy5ydWxlTWFwID0gcnVsZU1hcDtcbiAgfVxuXG4gIGdldFN0YXJ0UnVsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydFJ1bGU7XG4gIH1cblxuICBnZXRSdWxlTWFwKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVNYXA7XG4gIH1cblxuICBwYXJzZSh0b2tlbnMsIHJ1bGUgPSB0aGlzLnN0YXJ0UnVsZSkge1xuICAgIGNvbnN0IHN0YXRlID0gU3RhdGUuZnJvbVRva2Vuc0FuZFJ1bGVNYXAodG9rZW5zLCB0aGlzLnJ1bGVNYXApLFxuICAgICAgICAgIGNhbGxiYWNrID0gbnVsbCxcbiAgICAgICAgICBydWxlTm9kZSA9IHJ1bGUucGFyc2Uoc3RhdGUsIGNhbGxiYWNrKSxcbiAgICAgICAgICBub2RlID0gcnVsZU5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoQ2xhc3MpIHtcbiAgICBjb25zdCB7IGJuZiB9ID0gQ2xhc3MsXG4gICAgICAgICAgcnVsZXMgPSBydWxlc0Zyb21CTkYoYm5mKSxcbiAgICAgICAgICBwYXJzZXIgPSBwYXJzZXJGcm9tUnVsZXMoQ2xhc3MsIHJ1bGVzKTtcblxuICAgIHJldHVybiBwYXJzZXI7XG4gIH1cblxuICBzdGF0aWMgZnJvbUJORihDbGFzcywgYm5mKSB7XG4gICAgY29uc3QgcnVsZXMgPSBydWxlc0Zyb21CTkYoYm5mKSxcbiAgICAgICAgICBwYXJzZXIgPSBwYXJzZXJGcm9tUnVsZXMoQ2xhc3MsIHJ1bGVzKTtcblxuICAgIHJldHVybiBwYXJzZXI7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVzKENsYXNzLCBydWxlcykge1xuICAgIGNvbnN0IHBhcnNlciA9IHBhcnNlckZyb21SdWxlcyhDbGFzcywgcnVsZXMpO1xuXG4gICAgcmV0dXJuIHBhcnNlcjtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgYm5mIGZyb20gXCIuL2JuZlwiO1xuaW1wb3J0IENvbW1vblBhcnNlciBmcm9tIFwiLi4vY29tbW9uL3BhcnNlclwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCYXNpY1BhcnNlciBleHRlbmRzIENvbW1vblBhcnNlciB7XG4gIHN0YXRpYyBibmYgPSBibmY7XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21Ob3RoaW5nKEJhc2ljUGFyc2VyKTsgfVxuXG4gIHN0YXRpYyBmcm9tQk5GKGJuZikgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21CTkYoQmFzaWNQYXJzZXIsIGJuZik7IH1cblxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbVJ1bGVzKEJhc2ljUGFyc2VyLCBydWxlcyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFdpbGRjYXJkUGFydCBmcm9tIFwiLi9wYXJ0L3Rlcm1pbmFsL3dpbGRjYXJkXCI7XG5pbXBvcnQgRW5kT2ZMaW5lUGFydCBmcm9tIFwiLi9wYXJ0L3Rlcm1pbmFsL2VuZE9mTGluZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5pbXBvcnQgUmVndWxhckV4cHJlc3Npb25QYXJ0IGZyb20gXCIuL3BhcnQvdGVybWluYWwvcmVndWxhckV4cHJlc3Npb25cIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQgZnJvbSBcIi4vcGFydC90ZXJtaW5hbC9zaWduaWZpY2FudFRva2VuVHlwZVwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgT3B0aW9uYWxQYXJ0UGFydCBmcm9tIFwiLi9wYXJ0L25vblRlcm1pbmFsL29wdGlvbmFsUGFydFwiO1xuaW1wb3J0IFplcm9Pck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4vcGFydC9ub25UZXJtaW5hbC96ZXJvT3JNb3JlUGFydHNcIjtcbmltcG9ydCBPbmVPck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4vcGFydC9ub25UZXJtaW5hbC9vbmVPck1vcmVQYXJ0c1wiO1xuaW1wb3J0IFNlcXVlbmNlT2ZQYXJ0c1BhcnQgZnJvbSBcIi4vcGFydC9ub25UZXJtaW5hbC9zZXF1ZW5jZU9mUGFydHNcIjtcbmltcG9ydCBDaG9pY2VPZlBhcnRzUGFydCBmcm9tIFwiLi9wYXJ0L25vblRlcm1pbmFsL2Nob2ljZU9mUGFydHNcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBXaWxkY2FyZFBhcnQsXG4gIEVuZE9mTGluZVBhcnQsXG4gIFRlcm1pbmFsU3ltYm9sUGFydCxcbiAgUmVndWxhckV4cHJlc3Npb25QYXJ0LFxuICBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQsXG4gIFJ1bGVOYW1lUGFydCxcbiAgT3B0aW9uYWxQYXJ0UGFydCxcbiAgWmVyb09yTW9yZVBhcnRzUGFydCxcbiAgT25lT3JNb3JlUGFydHNQYXJ0LFxuICBTZXF1ZW5jZU9mUGFydHNQYXJ0LFxuICBDaG9pY2VPZlBhcnRzUGFydFxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBCTkZQYXJzZXIgfSBmcm9tIFwiLi9ibmYvcGFyc2VyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJhc2ljUGFyc2VyIH0gZnJvbSBcIi4vYmFzaWMvcGFyc2VyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENvbW1vblBhcnNlciB9IGZyb20gXCIuL2NvbW1vbi9wYXJzZXJcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBSdWxlIH0gZnJvbSBcIi4vcnVsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQYXJ0cyB9IGZyb20gXCIuL3BhcnRzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHBhcnRUeXBlcyB9IGZyb20gXCIuL3BhcnRUeXBlc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEZWZpbml0aW9uIH0gZnJvbSBcIi4vZGVmaW5pdGlvblwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUZXJtaW5hbE5vZGUgfSBmcm9tIFwiLi9ub2RlL3Rlcm1pbmFsXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE5vblRlcm1pbmFsTm9kZSB9IGZyb20gXCIuL25vZGUvbm9uVGVybWluYWxcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgYm5mID0gYFxuXG5cblxuICAgIHN0eWxlc2hlZXQgICAgICAgICAgICAgICAgIDo6PSAoIG1lZGlhIHwgcnVsZVNldCB8IGRlY2xhcmF0aW9uIHwgZXJyb3IgKSsgO1xuXG5cblxuXG5cbiAgICBtZWRpYSAgICAgICAgICAgICAgICAgICAgICA6Oj0gXCJAbWVkaWFcIiBtZWRpYVF1ZXJpZXMgXCJ7XCIgKCBydWxlU2V0IHwgZGVjbGFyYXRpb24gKSogXCJ9XCIgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgbWVkaWFRdWVyaWVzICAgICAgICAgICAgICAgOjo9ICBtZWRpYVF1ZXJ5ICggXCIsXCIgbWVkaWFRdWVyeSApKiA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICBtZWRpYVF1ZXJ5ICAgICAgICAgICAgICAgICA6Oj0gIFwibm90XCI/ICggXCJvbmx5XCI/IG1lZGlhVHlwZSBcImFuZFwiICk/IG1lZGlhRXhwcmVzc2lvbiAoIFwiYW5kXCIgbWVkaWFFeHByZXNzaW9uICkqIDtcblxuXG4gICAgbWVkaWFUeXBlICAgICAgICAgICAgICAgICAgOjo9ICBcImFsbFwiIHwgXCJwcmludFwiIHwgXCJzY3JlZW5cIiB8IFwic3BlZWNoXCIgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgbWVkaWFFeHByZXNzaW9uICAgICAgICAgICAgOjo9ICBcIihcIiBbaWRlbnRpZmllcl0gKCBcIjpcIiBleHByZXNzaW9uICk/IFwiKVwiIDtcblxuXG5cblxuXG4gICAgcnVsZVNldCAgICAgICAgICAgICAgICAgICAgOjo9ICBzZWxlY3RvcnMgXCJ7XCIgZGVjbGFyYXRpb24qIFwifVwiIDtcbiAgICBcbiAgICBcbiAgICBzZWxlY3RvcnMgICAgICAgICAgICAgICAgICA6Oj0gIHNlbGVjdG9yICggXCIsXCIgc2VsZWN0b3IgKSogO1xuXG5cbiAgICBzZWxlY3RvciAgICAgICAgICAgICAgICAgICA6Oj0gICggY2xhc3MgfCBwc2V1ZG9DbGFzcyB8IHBzZXVkb0VsZW1lbnQgfCBhdHRyaWJ1dGUgKSsgO1xuXG5cblxuXG5cbiAgICBkZWNsYXJhdGlvbiAgICAgICAgICAgICAgICA6Oj0gIHByb3BlcnR5IFwiOlwiIGV4cHJlc3Npb24gKCBcIixcIiBleHByZXNzaW9uICkqIHByaW9yaXR5PyBcIjtcIiA7XG5cblxuICAgIGNsYXNzICAgICAgICAgICAgICAgICAgICAgIDo6PSAgXCIuXCI8Tk9fV0hJVEVTUEFDRT5baWRlbnRpZmllcl0gcGFyZW50aGVzaXNlZFNlbGVjdG9yPyA7XG5cblxuICAgIHBzZXVkb0NsYXNzICAgICAgICAgICAgICAgIDo6PSAgXCI6XCI8Tk9fV0hJVEVTUEFDRT5baWRlbnRpZmllcl0gcGFyZW50aGVzaXNlZFNlbGVjdG9yPyA7XG5cblxuICAgIHBzZXVkb0VsZW1lbnQgICAgICAgICAgICAgIDo6PSAgXCI6OlwiPE5PX1dISVRFU1BBQ0U+W2lkZW50aWZpZXJdIHBhcmVudGhlc2lzZWRTZWxlY3Rvcj8gO1xuXG5cbiAgICBwYXJlbnRoZXNpc2VkU2VsZWN0b3IgICAgICA6Oj0gIDxOT19XSElURVNQQUNFPlwiKFwiIHNlbGVjdG9yIDxOT19XSElURVNQQUNFPlwiKVwiIDtcblxuXG4gICAgYXR0cmlidXRlICAgICAgICAgICAgICAgICAgOjo9ICBcIltcIlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRlbnRpZmllcl1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggXCI9XCIgfCBcIn49XCIgfCBcInw9XCIgKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggW2lkZW50aWZpZXJdIHwgW3N0cmluZy1saXRlcmFsXSApXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk/XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXVwiXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcblxuXG4gICAgcHJvcGVydHkgICAgICAgICAgICAgICAgICAgOjo9ICBbaWRlbnRpZmllcl0gO1xuXG5cbiAgICBleHByZXNzaW9uICAgICAgICAgICAgICAgICA6Oj0gIHRlcm0gKCBcIixcIj8gdGVybSApKiA7XG5cblxuICAgIHByaW9yaXR5ICAgICAgICAgICAgICAgICAgIDo6PSAgXCIhaW1wb3J0YW50XCIgO1xuXG5cblxuXG5cbiAgICB0ZXJtICAgICAgICAgICAgICAgICAgICAgICA6Oj0gIFt1bmFyeS1vcGVyYXRvcl0/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIFtwZXJjZW50YWdlXSB8IFtmcmVxdWVuY3ldIHwgW2ZyYWN0aW9uXSB8IFtsZW5ndGhdIHwgW2FuZ2xlXSB8IFtyZW1zXSB8IFtlbXNdIHwgW3RpbWVdIHwgW251bWJlcl0gKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0cmluZy1saXRlcmFsXStcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkZW50aWZpZXJdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xvdXJdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuXG5cbiAgICB1cmkgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gIFwidXJsXCI8Tk9fV0hJVEVTUEFDRT5cIihcIiBbc3RyaW5nLWxpdGVyYWxdIFwiKVwiIDtcblxuXG4gICAgZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgOjo9ICBbaWRlbnRpZmllcl08Tk9fV0hJVEVTUEFDRT5cIihcIiBleHByZXNzaW9uIFwiKVwiIDtcblxuXG5cblxuXG4gICAgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgOjo9ICAuIDtcblxuXG5cbmA7XG5cbmV4cG9ydCBkZWZhdWx0IGJuZjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQ29tbW9uUGFyc2VyIH0gZnJvbSBcIm9jY2FtLXBhcnNlcnNcIjtcblxuaW1wb3J0IGJuZiBmcm9tIFwiLi9ibmZcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ1NTUGFyc2VyIGV4dGVuZHMgQ29tbW9uUGFyc2VyIHtcbiAgc3RhdGljIGJuZiA9IGJuZjtcblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbU5vdGhpbmcoQ1NTUGFyc2VyKTsgfVxuXG4gIHN0YXRpYyBmcm9tQk5GKGJuZikgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21CTkYoQ1NTUGFyc2VyLCBibmYpOyB9XG5cbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21SdWxlcyhDU1NQYXJzZXIsIHJ1bGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuZXhwb3J0IGNvbnN0IHsgY2xlYXIsIHB1c2gsIHNlY29uZCwgdGhpcmQsIGZvdXJ0aCwgZmlmdGggfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZnVuY3Rpb24gdHJpbShhcnJheSwgc3RhcnRJbmRleCwgZW5kSW5kZXgpIHtcbiAgbGV0IHN0YXJ0LFxuICAgICAgZGVsZXRlQ291bnQ7XG5cbiAgaWYgKGVuZEluZGV4ICE9PSBJbmZpbml0eSkge1xuICAgIHN0YXJ0ID0gZW5kSW5kZXggKyAxO1xuXG4gICAgYXJyYXkuc3BsaWNlKHN0YXJ0KTtcbiAgfVxuXG4gIHN0YXJ0ID0gMDtcbiAgZGVsZXRlQ291bnQgPSBzdGFydEluZGV4O1xuXG4gIGFycmF5LnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5jbHVkZXMoYXJyYXksIC4uLmVsZW1lbnRzKSB7XG4gIHJldHVybiBlbGVtZW50cy5zb21lKChlbGVtZW50KSA9PiBhcnJheS5pbmNsdWRlcyhlbGVtZW50KSk7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGNoYXJhY3RlcnMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCB7IGNsZWFyLCB0cmltLCBzZWNvbmQsIHRoaXJkLCBmb3VydGggfSBmcm9tIFwiLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuY29uc3QgeyBFWENMQU1BVElPTl9NQVJLX0NIQVJBQ1RFUiB9ID0gY2hhcmFjdGVycztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3ByZWFkIHtcbiAgY29uc3RydWN0b3Ioc3RhcnRJbmRleCwgZW5kSW5kZXgsIHVuaXF1ZSkge1xuICAgIHRoaXMuc3RhcnRJbmRleCA9IHN0YXJ0SW5kZXg7XG4gICAgdGhpcy5lbmRJbmRleCA9IGVuZEluZGV4O1xuICAgIHRoaXMudW5pcXVlID0gdW5pcXVlO1xuICB9XG5cbiAgYWRqdXN0Tm9kZXMobm9kZXMpIHtcbiAgICBpZiAodGhpcy51bmlxdWUpIHtcbiAgICAgIGNvbnN0IG5vZGVzTGVuZ3RoID0gbm9kZXMubGVuZ3RoO1xuXG4gICAgICBpZiAobm9kZXNMZW5ndGggPiAxKSB7XG4gICAgICAgIGNsZWFyKG5vZGVzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdHJpbShub2RlcywgdGhpcy5zdGFydEluZGV4LCB0aGlzLmVuZEluZGV4KTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZnJvbVNwcmVhZEV4cHJlc3Npb24oc3ByZWFkRXhwcmVzc2lvbikge1xuICAgIGxldCBzdGFydEluZGV4ID0gMCxcbiAgICAgICAgZW5kSW5kZXggPSBJbmZpbml0eSxcbiAgICAgICAgdW5pcXVlID0gZmFsc2U7XG5cbiAgICBpZiAoc3ByZWFkRXhwcmVzc2lvbiAhPT0gbnVsbCkge1xuICAgICAgaWYgKHNwcmVhZEV4cHJlc3Npb24gPT09IEVYQ0xBTUFUSU9OX01BUktfQ0hBUkFDVEVSKSB7XG4gICAgICAgIHVuaXF1ZSA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByZWdFeHAgPSAvXFxbKFxcZCspPyhcXC5cXC5cXC4pPyhcXGQrKT9dLyxcbiAgICAgICAgICAgICAgbWF0Y2hlcyA9IHNwcmVhZEV4cHJlc3Npb24ubWF0Y2gocmVnRXhwKSxcbiAgICAgICAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyksXG4gICAgICAgICAgICAgIHRoaXJkTWF0Y2ggPSB0aGlyZChtYXRjaGVzKSxcbiAgICAgICAgICAgICAgZm91cnRoTWF0Y2ggPSBmb3VydGgobWF0Y2hlcyk7XG5cbiAgICAgICAgaWYgKHNlY29uZE1hdGNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzdGFydEluZGV4ID0gcGFyc2VJbnQoc2Vjb25kTWF0Y2gpO1xuXG4gICAgICAgICAgaWYgKHRoaXJkTWF0Y2ggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZW5kSW5kZXggPSBzdGFydEluZGV4O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmb3VydGhNYXRjaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZW5kSW5kZXggPSBwYXJzZUludChmb3VydGhNYXRjaCk7XG5cbiAgICAgICAgICBpZiAodGhpcmRNYXRjaCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzdGFydEluZGV4ID0gZW5kSW5kZXg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc3ByZWFkID0gbmV3IFNwcmVhZChzdGFydEluZGV4LCBlbmRJbmRleCwgdW5pcXVlKTtcblxuICAgIHJldHVybiBzcHJlYWQ7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY2hhcmFjdGVycyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IFNwcmVhZCBmcm9tIFwiLi9zcHJlYWRcIjtcblxuaW1wb3J0IHsgaW5jbHVkZXMsIHB1c2gsIGNsZWFyLCBzZWNvbmQsIHRoaXJkLCBmb3VydGgsIGZpZnRoIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmNvbnN0IHsgV0lMRENBUkRfQ0hBUkFDVEVSIH0gPSBjaGFyYWN0ZXJzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBRdWVyeSB7XG4gIGNvbnN0cnVjdG9yKHJ1bGVOYW1lcywgdHlwZXMsIHNwcmVhZCwgc3ViUXVlcnksICBtYXhpbXVtRGVwdGgsIGluZmluaXRlRGVzY2VudCwgaW50ZXJtZWRpYXRlTm9kZXMpIHtcbiAgICB0aGlzLnJ1bGVOYW1lcyA9IHJ1bGVOYW1lcztcbiAgICB0aGlzLnR5cGVzID0gdHlwZXM7XG4gICAgdGhpcy5zcHJlYWQgPSBzcHJlYWQ7XG4gICAgdGhpcy5zdWJRdWVyeSA9IHN1YlF1ZXJ5O1xuICAgIHRoaXMubWF4aW11bURlcHRoID0gbWF4aW11bURlcHRoO1xuICAgIHRoaXMuaW5maW5pdGVEZXNjZW50ID0gaW5maW5pdGVEZXNjZW50O1xuICAgIHRoaXMuaW50ZXJtZWRpYXRlTm9kZXMgPSBpbnRlcm1lZGlhdGVOb2RlcztcbiAgfVxuXG4gIGV4ZWN1dGUobm9kZSwgZGVwdGggPSAwLCBtYXhpbXVtRGVwdGggPSB0aGlzLm1heGltdW1EZXB0aCkge1xuICAgIGNvbnN0IG5vZGVzID0gW107XG5cbiAgICB0aGlzLmNsZWFyKCk7XG5cbiAgICB0aGlzLmZpbmQobm9kZSwgZGVwdGgsIG1heGltdW1EZXB0aCk7XG5cbiAgICB0aGlzLmFwcGx5KG5vZGVzLCBkZXB0aCwgbWF4aW11bURlcHRoKTtcblxuICAgIHJldHVybiBub2RlcztcbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIGNsZWFyKHRoaXMuaW50ZXJtZWRpYXRlTm9kZXMpO1xuICB9XG5cbiAgZmluZChub2RlLCBkZXB0aCwgbWF4aW11bURlcHRoKSB7XG4gICAgaWYgKGRlcHRoID4gbWF4aW11bURlcHRoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZVRlcm1pbmFsTm9kZSA9IG5vZGUuaXNUZXJtaW5hbE5vZGUoKSxcbiAgICAgICAgICBub2RlTm9uVGVybWluYWxOb2RlID0gIW5vZGVUZXJtaW5hbE5vZGU7XG5cbiAgICBsZXQgZm91bmQ7XG5cbiAgICBpZiAobm9kZVRlcm1pbmFsTm9kZSkge1xuICAgICAgY29uc3QgdGVybWluYWxOb2RlID0gbm9kZSwgIC8vL1xuICAgICAgICAgICAgdHlwZSA9IHRlcm1pbmFsTm9kZS5nZXRUeXBlKCk7XG5cbiAgICAgIGZvdW5kID0gaW5jbHVkZXModGhpcy50eXBlcywgdHlwZSwgV0lMRENBUkRfQ0hBUkFDVEVSKTtcbiAgICB9XG5cbiAgICBpZiAobm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgICBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpO1xuXG4gICAgICBmb3VuZCA9IGluY2x1ZGVzKHRoaXMucnVsZU5hbWVzLCBydWxlTmFtZSwgV0lMRENBUkRfQ0hBUkFDVEVSKTtcbiAgICB9XG5cbiAgICBpZiAoZm91bmQpIHtcbiAgICAgIGNvbnN0IGludGVybWVkaWF0ZU5vZGUgPSBub2RlOyAvLy9cblxuICAgICAgdGhpcy5pbnRlcm1lZGlhdGVOb2Rlcy5wdXNoKGludGVybWVkaWF0ZU5vZGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmluZmluaXRlRGVzY2VudCkge1xuICAgICAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgICAgZGVwdGgrKztcblxuICAgICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICAgICAgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCk7XG5cbiAgICAgICAgY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZE5vZGUpID0+IHRoaXMuZmluZChjaGlsZE5vZGUsIGRlcHRoLCBtYXhpbXVtRGVwdGgpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhcHBseShub2RlcywgZGVwdGgsIG1heGltdW1EZXB0aCkge1xuICAgIHRoaXMuc3ByZWFkLmFkanVzdE5vZGVzKHRoaXMuaW50ZXJtZWRpYXRlTm9kZXMpO1xuXG4gICAgaWYgKHRoaXMuc3ViUXVlcnkgPT09IG51bGwpIHtcbiAgICAgIHB1c2gobm9kZXMsIHRoaXMuaW50ZXJtZWRpYXRlTm9kZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmludGVybWVkaWF0ZU5vZGVzLmZvckVhY2goKGludGVybWVkaWF0ZU5vZGUpID0+IHtcbiAgICAgICAgY29uc3QgaW50ZXJtZWRpYXRlTm9kZU5vblRlcm1pbmFsTm9kZSA9IGludGVybWVkaWF0ZU5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICAgICAgICBpZiAoaW50ZXJtZWRpYXRlTm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgICAgICAgIGRlcHRoKys7XG5cbiAgICAgICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBpbnRlcm1lZGlhdGVOb2RlLCAvLy9cbiAgICAgICAgICAgICAgICBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKTtcblxuICAgICAgICAgIHRoaXMuc3ViUXVlcnkuY2xlYXIoKTtcblxuICAgICAgICAgIGNoaWxkTm9kZXMuZm9yRWFjaCgoY2hpbGROb2RlKSA9PiB0aGlzLnN1YlF1ZXJ5LmZpbmQoY2hpbGROb2RlLCBkZXB0aCwgbWF4aW11bURlcHRoKSk7XG5cbiAgICAgICAgICB0aGlzLnN1YlF1ZXJ5LmFwcGx5KG5vZGVzLCBkZXB0aCwgbWF4aW11bURlcHRoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGZyb21TdWJFeHByZXNzaW9uQW5kVHlwZXMoc3ViRXhwcmVzaW9uLCB0eXBlcykge1xuICAgIGxldCBxdWVyeSA9IG51bGw7XG5cbiAgICBpZiAoc3ViRXhwcmVzaW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB0eXBlc0xlbmd0aCA9IHR5cGVzLmxlbmd0aDtcblxuICAgICAgaWYgKHR5cGVzTGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSBzdWJFeHByZXNpb247ICAvLy9cblxuICAgICAgICBxdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKGV4cHJlc3Npb24pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBxdWVyeTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tRXhwcmVzc2lvbihleHByZXNzaW9uLCBtYXhpbXVtRGVwdGggPSBJbmZpbml0eSkge1xuICAgIGNvbnN0IHJlZ0V4cCA9IC9eXFwvKFxcLyk/KFteL1xcWyFdKykoXFxbW15cXF1dK118ISk/KFxcLy4qKT8kLyxcbiAgICAgICAgICBtYXRjaGVzID0gZXhwcmVzc2lvbi5tYXRjaChyZWdFeHApLFxuICAgICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICAgIHRoaXJkTWF0Y2ggPSB0aGlyZChtYXRjaGVzKSxcbiAgICAgICAgICBmb3VydGhNYXRjaCA9IGZvdXJ0aChtYXRjaGVzKSxcbiAgICAgICAgICBmaWZ0aE1hdGNoID0gZmlmdGgobWF0Y2hlcyksXG4gICAgICAgICAgc2VsZWN0b3JzID0gdGhpcmRNYXRjaC5zcGxpdChcInxcIiksXG4gICAgICAgICAgc3ViRXhwcmVzc2lvbiA9IGZpZnRoTWF0Y2ggfHwgbnVsbCxcbiAgICAgICAgICBzcHJlYWRFeHByZXNzaW9uID0gZm91cnRoTWF0Y2ggfHwgbnVsbCxcbiAgICAgICAgICB0eXBlcyA9IHR5cGVzRnJvbVNlbGVjdG9ycyhzZWxlY3RvcnMpLFxuICAgICAgICAgIHJ1bGVOYW1lcyA9IHJ1bGVOYW1lc0Zyb21TZWxlY3RvcnNBbmRUeXBlcyhzZWxlY3RvcnMsIHR5cGVzKSxcbiAgICAgICAgICBzcHJlYWQgPSBTcHJlYWQuZnJvbVNwcmVhZEV4cHJlc3Npb24oc3ByZWFkRXhwcmVzc2lvbiksXG4gICAgICAgICAgc3ViUXVlcnkgPSBRdWVyeS5mcm9tU3ViRXhwcmVzc2lvbkFuZFR5cGVzKHN1YkV4cHJlc3Npb24sIHR5cGVzKSxcbiAgICAgICAgICBpbmZpbml0ZURlc2NlbnQgPSAoc2Vjb25kTWF0Y2ggPT09IFwiL1wiKSwgIC8vL1xuICAgICAgICAgIGludGVybWVkaWF0ZU5vZGVzID0gW10sXG4gICAgICAgICAgcXVlcnkgPSBuZXcgUXVlcnkocnVsZU5hbWVzLCB0eXBlcywgc3ByZWFkLCBzdWJRdWVyeSwgbWF4aW11bURlcHRoLCBpbmZpbml0ZURlc2NlbnQsIGludGVybWVkaWF0ZU5vZGVzKTtcbiAgICBcbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHlwZXNGcm9tU2VsZWN0b3JzKHNlbGVjdG9ycykge1xuICBjb25zdCB0eXBlcyA9IFtdO1xuXG4gIHNlbGVjdG9ycy5mb3JFYWNoKChzZWxlY3RvcikgPT4ge1xuICAgIGNvbnN0IHNlbGVjdG9yVHlwZVNlbGVjdG9yID0gaXNTZWxlY3RvclR5cGVTZWxlY3RvcihzZWxlY3Rvcik7XG5cbiAgICBpZiAoc2VsZWN0b3JUeXBlU2VsZWN0b3IpIHtcbiAgICAgIGNvbnN0IHR5cGUgPSBzZWxlY3Rvci5zdWJzdHJpbmcoMSk7XG5cbiAgICAgIHR5cGVzLnB1c2godHlwZSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdHlwZXM7XG59XG5cbmZ1bmN0aW9uIGlzU2VsZWN0b3JUeXBlU2VsZWN0b3Ioc2VsZWN0b3IpIHsgcmV0dXJuIC9eQC8udGVzdChzZWxlY3Rvcik7IH1cblxuZnVuY3Rpb24gcnVsZU5hbWVzRnJvbVNlbGVjdG9ycyhzZWxlY3RvcnMpIHsgcmV0dXJuIHNlbGVjdG9ycy5maWx0ZXIoaXNTZWxlY3RvclJ1bGVOYW1lU2VsZWN0b3IpOyB9XG5cbmZ1bmN0aW9uIGlzU2VsZWN0b3JSdWxlTmFtZVNlbGVjdG9yKHNlbGVjdG9yKSB7IHJldHVybiAvXlteQF0vLnRlc3Qoc2VsZWN0b3IpOyB9XG5cbmZ1bmN0aW9uIHJ1bGVOYW1lc0Zyb21TZWxlY3RvcnNBbmRUeXBlcyhzZWxlY3RvcnMsIHR5cGVzKSB7XG4gIGxldCBydWxlTmFtZXMgPSBbXTtcblxuICBjb25zdCB0eXBlc0xlbmd0aCA9IHR5cGVzLmxlbmd0aDtcblxuICBpZiAodHlwZXNMZW5ndGggPT09IDApIHtcbiAgICBydWxlTmFtZXMgPSBydWxlTmFtZXNGcm9tU2VsZWN0b3JzKHNlbGVjdG9ycyk7XG4gIH1cblxuICByZXR1cm4gcnVsZU5hbWVzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUXVlcnkgZnJvbSBcIi4uL3F1ZXJ5XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeUJ5Q2xhc3Mobm9kZSwgQ2xhc3MsIG5vZGVzID0gW10pIHtcbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDbGFzcykge1xuICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gIH1cblxuICBjb25zdCBub2RlTm9uVGVybWluYWxOb2RlID0gbm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IG5vZGUuZ2V0Q2hpbGROb2RlcygpO1xuXG4gICAgY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZE5vZGUpID0+IHF1ZXJ5QnlDbGFzcyhjaGlsZE5vZGUsIENsYXNzLCBub2RlcykpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlCeUNsYXNzZXMobm9kZSwgQ2xhc3Nlcywgbm9kZXMgPSBbXSkge1xuICBDbGFzc2VzLnNvbWUoKENsYXNzKSA9PiB7XG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDbGFzcykge1xuICAgICAgbm9kZXMucHVzaChub2RlKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBub2RlTm9uVGVybWluYWxOb2RlID0gbm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IG5vZGUuZ2V0Q2hpbGROb2RlcygpO1xuXG4gICAgY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZE5vZGUpID0+IHF1ZXJ5QnlDbGFzc2VzKGNoaWxkTm9kZSwgQ2xhc3Nlcywgbm9kZXMpKTtcbiAgfVxuXG4gIHJldHVybiBub2Rlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5QnlFeHByZXNzaW9uKG5vZGUsIGV4cHJlc3Npb24sIG1heGltdW1EZXB0aCkge1xuICBjb25zdCBxdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKGV4cHJlc3Npb24sIG1heGltdW1EZXB0aCksXG4gICAgICAgIG5vZGVzID0gcXVlcnkuZXhlY3V0ZShub2RlKTtcblxuICByZXR1cm4gbm9kZXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcXVlcnlCeUNsYXNzLFxuICBxdWVyeUJ5Q2xhc3NlcyxcbiAgcXVlcnlCeUV4cHJlc3Npb25cbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgUXVlcnkgfSBmcm9tIFwiLi9xdWVyeVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBxdWVyeVV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9xdWVyeVwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgSEVBRCA9IFwiaGVhZFwiO1xuZXhwb3J0IGNvbnN0IFNUWUxFID0gXCJzdHlsZVwiO1xuZXhwb3J0IGNvbnN0IENIQVJBQ1RFUlMgPSBcImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpcIjtcbmV4cG9ydCBjb25zdCBUV09fU1BBQ0VTID0gXCIgIFwiO1xuZXhwb3J0IGNvbnN0IEZPVVJfU1BBQ0VTID0gXCIgICAgXCI7XG5leHBvcnQgY29uc3QgRU1QVFlfU1RSSU5HID0gXCJcIjtcbmV4cG9ydCBjb25zdCBDTEFTU19OQU1FX0xFTkdUSCA9IDY7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHsgZmlyc3QgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZnVuY3Rpb24gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMocXVlcnksIG5vZGUsIHRva2Vucykge1xuICBjb25zdCBub2RlcyA9IHF1ZXJ5LmV4ZWN1dGUobm9kZSksXG4gICAgICAgIGZpcnN0Tm9kZSA9IGZpcnN0KG5vZGVzKTtcblxuICBub2RlID0gZmlyc3ROb2RlOyAvLy9cblxuICBjb25zdCBjb250ZW50ID0gY29udGVudEZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucyk7XG5cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG5cbmZ1bmN0aW9uIGNvbnRlbnRGcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgY29uc3QgZmlyc3RTaWduaWZpY2FudFRva2VuID0gbm9kZS5nZXRGaXJzdFNpZ25pZmljYW50VG9rZW4oKSxcbiAgICAgICAgbGFzdFNpZ25pZmljYW50VG9rZW4gPSBub2RlLmdldExhc3RTaWduaWZpY2FudFRva2VuKCksXG4gICAgICAgIGZpcnN0VG9rZW4gPSBmaXJzdFNpZ25pZmljYW50VG9rZW4sIC8vL1xuICAgICAgICBsYXN0VG9rZW4gPSBsYXN0U2lnbmlmaWNhbnRUb2tlbiwgLy8vXG4gICAgICAgIGZpcnN0VG9rZW5JbmRleCA9IHRva2Vucy5pbmRleE9mKGZpcnN0VG9rZW4pLFxuICAgICAgICBsYXN0VG9rZW5JbmRleCA9IHRva2Vucy5pbmRleE9mKGxhc3RUb2tlbik7XG5cbiAgbGV0IGNvbnRlbnQgPSBFTVBUWV9TVFJJTkc7XG5cbiAgZm9yIChsZXQgaW5kZXggPSBmaXJzdFRva2VuSW5kZXg7IGluZGV4IDw9IGxhc3RUb2tlbkluZGV4OyBpbmRleCsrKSB7XG4gICAgY29uc3QgdG9rZW4gPSB0b2tlbnNbaW5kZXhdLFxuICAgICAgICAgIHRva2VuQ29udGVudCA9IHRva2VuLmdldENvbnRlbnQoKTtcblxuICAgIGNvbnRlbnQgKz0gdG9rZW5Db250ZW50O1xuICB9XG5cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSBcIm9jY2FtLWRvbVwiO1xuXG5pbXBvcnQgeyBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2VucyB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGVudFwiO1xuXG5jb25zdCBwcm9wZXJ0eVF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oXCIvKi9wcm9wZXJ0eVwiKSxcbiAgICAgIGV4cHJlc3Npb25RdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKFwiLyovZXhwcmVzc2lvblwiKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVjbGFyYXRpb24ge1xuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eSwgZXhwcmVzc2lvbikge1xuICAgIHRoaXMucHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uO1xuICB9XG5cbiAgZ2V0UHJvcGVydHkoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHk7XG4gIH1cblxuICBnZXRFeHByZXNzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLmV4cHJlc3Npb247XG4gIH1cblxuICBjaGVja01hdGNoZXMoZGVjbGFyYXRpb25zKSB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IGRlY2xhcmF0aW9ucy5zb21lKChkZWNsYXJhdGlvbikgPT4ge1xuICAgICAgY29uc3QgcHJvcGVydHkgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eSgpLFxuICAgICAgICAgICAgcHJvcGVydGllc01hdGNoID0gKHByb3BlcnR5ID09PSB0aGlzLnByb3BlcnR5KTtcblxuICAgICAgaWYgKHByb3BlcnRpZXNNYXRjaCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBtYXRjaGVzO1xuICB9XG5cbiAgYXNDU1MoaW5kZW50LCBsYXN0KSB7XG4gICAgY29uc3QgY3NzID0gbGFzdCA/XG4gICAgICAgICAgICAgICAgYCR7aW5kZW50fSR7dGhpcy5wcm9wZXJ0eX06ICR7dGhpcy5leHByZXNzaW9ufTtgIDpcbiAgICAgICAgICAgICAgICAgIGAke2luZGVudH0ke3RoaXMucHJvcGVydHl9OiAke3RoaXMuZXhwcmVzc2lvbn07XFxuYDtcblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgcHJvcGVydHlDb250ZW50ID0gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMocHJvcGVydHlRdWVyeSwgbm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBleHByZXNzaW9uQ29udGVudCA9IGNvbnRlbnRGcm9tUXVlcnlOb2RlQW5kVG9rZW5zKGV4cHJlc3Npb25RdWVyeSwgbm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnR5Q29udGVudCwgLy8vXG4gICAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25Db250ZW50LCAvLy9cbiAgICAgICAgICBkZWNsYXJhdGlvbiA9IG5ldyBEZWNsYXJhdGlvbihwcm9wZXJ0eSwgZXhwcmVzc2lvbik7XG5cbiAgICByZXR1cm4gZGVjbGFyYXRpb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tZG9tXCI7XG5cbmltcG9ydCBEZWNsYXJhdGlvbiBmcm9tIFwiLi9kZWNsYXJhdGlvblwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IGRlY2xhcmF0aW9uUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi8qL2RlY2xhcmF0aW9uXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWNsYXJhdGlvbnMge1xuICBjb25zdHJ1Y3RvcihhcnJheSkge1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbiAgfVxuXG4gIGZvcndhcmRzRm9yRWFjaChjYWxsYmFjaykge1xuICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuYXJyYXkubGVuZ3RoLFxuICAgICAgICAgIGZpcnN0SW5kZXggPSAwLFxuICAgICAgICAgIGxhc3RJbmRleCA9IGxlbmd0aCAtIDE7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IGZpcnN0SW5kZXg7IGluZGV4IDw9IGxhc3RJbmRleDsgaW5kZXgrKykge1xuICAgICAgY29uc3QgZGVjbGFyYXRpb24gPSB0aGlzLmFycmF5W2luZGV4XTtcblxuICAgICAgY2FsbGJhY2soZGVjbGFyYXRpb24sIGluZGV4KTtcbiAgICB9XG4gIH1cblxuICBiYWNrd2FyZHNGb3JFYWNoKGNhbGxiYWNrKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gdGhpcy5hcnJheS5sZW5ndGgsXG4gICAgICAgICAgZmlyc3RJbmRleCA9IDAsXG4gICAgICAgICAgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMTtcblxuICAgIGZvciAobGV0IGluZGV4ID0gbGFzdEluZGV4OyBpbmRleCA+PSBmaXJzdEluZGV4OyBpbmRleC0tKSB7XG4gICAgICBjb25zdCBkZWNsYXJhdGlvbiA9IHRoaXMuYXJyYXlbaW5kZXhdO1xuXG4gICAgICBjYWxsYmFjayhkZWNsYXJhdGlvbiwgaW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHVuc2hpZnQoZGVjbGFyYXRpb25zKSB7XG4gICAgZGVjbGFyYXRpb25zLmJhY2t3YXJkc0ZvckVhY2goKGRlY2xhcmF0aW9uKSA9PiB7XG4gICAgICBjb25zdCBtYXRjaGVzID0gZGVjbGFyYXRpb24uY2hlY2tNYXRjaGVzKHRoaXMuYXJyYXkpOyAvLy9cblxuICAgICAgaWYgKCFtYXRjaGVzKSB7XG4gICAgICAgIHRoaXMuYXJyYXkudW5zaGlmdChkZWNsYXJhdGlvbik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUsIGluZGVudCkge1xuICAgIGlmIChpbmRlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaW5kZW50ID0gY2xhc3NOYW1lOyAvLy9cblxuICAgICAgY2xhc3NOYW1lID0gbnVsbDsgLy8vXG4gICAgfVxuXG4gICAgbGV0IGNzcyA9IEVNUFRZX1NUUklORztcblxuICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuYXJyYXkubGVuZ3RoO1xuXG4gICAgaWYgKGxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGxhc3RJbmRleCA9IGxlbmd0aCAtIDEsXG4gICAgICAgICAgICBkZWNsYXJhdGlvbnNDU1MgPSB0aGlzLmFycmF5LnJlZHVjZSgoZGVjbGFyYXRpb25zQ1NTLCBkZWNsYXJhdGlvbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbGFzdCA9IChpbmRleCA9PT0gbGFzdEluZGV4KSxcbiAgICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb25DU1MgPSBkZWNsYXJhdGlvbi5hc0NTUyhpbmRlbnQsIGxhc3QpO1xuXG4gICAgICAgICAgICAgIGRlY2xhcmF0aW9uc0NTUyArPSBkZWNsYXJhdGlvbkNTUztcblxuICAgICAgICAgICAgICByZXR1cm4gZGVjbGFyYXRpb25zQ1NTO1xuICAgICAgICAgICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgICAgaWYgKGNsYXNzTmFtZSA9PT0gbnVsbCkge1xuICAgICAgICBjc3MgPSBkZWNsYXJhdGlvbnNDU1M7ICAvLy9cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNzcyA9IGAuJHtjbGFzc05hbWV9IHtcbiR7ZGVjbGFyYXRpb25zQ1NTfVxufVxuXG5gO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb25Ob2RlcyA9IGRlY2xhcmF0aW9uUXVlcnkuZXhlY3V0ZShub2RlKSxcbiAgICAgICAgICBhcnJheSA9IGRlY2xhcmF0aW9uTm9kZXMubWFwKChkZWNsYXJhdGlvbk5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBkZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb24gPSBEZWNsYXJhdGlvbi5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpO1xuXG4gICAgICAgICAgICByZXR1cm4gZGVjbGFyYXRpb247XG4gICAgICAgICAgfSksXG4gICAgICAgICAgZGVjbGFyYXRpb25zID0gbmV3IERlY2xhcmF0aW9ucyhhcnJheSk7XG5cbiAgICByZXR1cm4gZGVjbGFyYXRpb25zO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSBcIm9jY2FtLWRvbVwiO1xuXG5pbXBvcnQgRGVjbGFyYXRpb25zIGZyb20gXCIuL2RlY2xhcmF0aW9uc1wiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2VucyB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGVudFwiO1xuXG5jb25zdCBzZWxlY3RvcnNRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKFwiLy9zZWxlY3RvcnNcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVTZXQge1xuICBjb25zdHJ1Y3RvcihzZWxlY3RvcnMsIGRlY2xhcmF0aW9ucykge1xuICAgIHRoaXMuc2VsZWN0b3JzID0gc2VsZWN0b3JzO1xuICAgIHRoaXMuZGVjbGFyYXRpb25zID0gZGVjbGFyYXRpb25zO1xuICB9XG5cbiAgZ2V0U2VsZWN0b3JzKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdG9ycztcbiAgfVxuXG4gIGdldERlY2xhcmF0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5kZWNsYXJhdGlvbnM7XG4gIH1cblxuICB1bnNoaWZ0KHJ1bGVTZXQpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbnMgPSBydWxlU2V0LmdldERlY2xhcmF0aW9ucygpO1xuXG4gICAgdGhpcy5kZWNsYXJhdGlvbnMudW5zaGlmdChkZWNsYXJhdGlvbnMpO1xuICB9XG5cbiAgZmluZE1hdGNoaW5nUnVsZVNldChydWxlU2V0cykge1xuICAgIGNvbnN0IG1hdGNoaW5nUnVsZVNldCA9IHJ1bGVTZXRzLmZpbmQoKHJ1bGVTZXQpID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdG9ycyA9IHJ1bGVTZXQuZ2V0U2VsZWN0b3JzKCksXG4gICAgICAgICAgICBzZWxlY3RvcnNNYXRjaCA9IChzZWxlY3RvcnMgPT09IHRoaXMuc2VsZWN0b3JzKSxcbiAgICAgICAgICAgIHJ1bGVTZXRzTWF0Y2ggPSBzZWxlY3RvcnNNYXRjaDsgLy8vXG5cbiAgICAgIGlmIChydWxlU2V0c01hdGNoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pIHx8IG51bGw7IC8vL1xuXG4gICAgcmV0dXJuIG1hdGNoaW5nUnVsZVNldDtcbiAgfVxuXG4gIGFzQ1NTKGNsYXNzTmFtZSwgaW5kZW50KSB7XG4gICAgbGV0IGNzcyA9IEVNUFRZX1NUUklORztcblxuICAgIGNvbnN0IGRlY2xhcmF0aW9uc0NTUyA9IHRoaXMuZGVjbGFyYXRpb25zLmFzQ1NTKGAgICR7aW5kZW50fWApO1xuXG4gICAgaWYgKGRlY2xhcmF0aW9uc0NTUyAhPT0gRU1QVFlfU1RSSU5HKSB7XG4gICAgICAgY3NzID0gYCR7aW5kZW50fS4ke2NsYXNzTmFtZX0ke3RoaXMuc2VsZWN0b3JzfSB7XG4ke2RlY2xhcmF0aW9uc0NTU31cbiR7aW5kZW50fX1cblxuYDtcbiAgICB9XG5cbiAgICByZXR1cm4gY3NzO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucykge1xuICAgIGNvbnN0IHNlbGVjdG9ycyA9IHNlbGVjdG9yc0Zyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgZGVjbGFyYXRpb25zID0gRGVjbGFyYXRpb25zLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgbWVkaWEgPSBuZXcgUnVsZVNldChzZWxlY3RvcnMsIGRlY2xhcmF0aW9ucyk7XG5cbiAgICByZXR1cm4gbWVkaWE7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2VsZWN0b3JzRnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gIGNvbnN0IHNlbGVjdG9yc05vZGVDb250ZW50ID0gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMoc2VsZWN0b3JzUXVlcnksIG5vZGUsIHRva2VucyksXG4gICAgICAgIHNlbGVjdG9ycyA9IGAke3NlbGVjdG9yc05vZGVDb250ZW50fWA7XG5cbiAgcmV0dXJuIHNlbGVjdG9ycztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tZG9tXCI7XG5cbmltcG9ydCBSdWxlU2V0IGZyb20gXCIuL3J1bGVTZXRcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCBydWxlU2V0UXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi8qL3J1bGVTZXRcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVTZXRzIHtcbiAgY29uc3RydWN0b3IoYXJyYXkpIHtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG4gIH1cblxuICB1bnNoaWZ0KHJ1bGVTZXRzKSB7XG4gICAgcnVsZVNldHMuZm9yRWFjaCgocnVsZVNldCkgPT4ge1xuICAgICAgY29uc3QgbWF0Y2hpbmdSdWxlU2V0ID0gcnVsZVNldC5maW5kTWF0Y2hpbmdSdWxlU2V0KHRoaXMuYXJyYXkpOyAvLy9cblxuICAgICAgKG1hdGNoaW5nUnVsZVNldCA9PT0gbnVsbCkgP1xuICAgICAgICB0aGlzLmFycmF5LnVuc2hpZnQocnVsZVNldCkgOlxuICAgICAgICAgIG1hdGNoaW5nUnVsZVNldC51bnNoaWZ0KHJ1bGVTZXQpO1xuICAgIH0pO1xuICB9XG5cbiAgZm9yRWFjaChjYWxsYmFjaykge1xuICAgIHRoaXMuYXJyYXkuZm9yRWFjaChjYWxsYmFjayk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUsIGluZGVudCkge1xuICAgIGNvbnN0IGNzcyA9IHRoaXMuYXJyYXkucmVkdWNlKChjc3MsIHJ1bGVTZXQpID0+IHtcbiAgICAgIGNvbnN0IHJ1bGVTZXRDU1MgPSBydWxlU2V0LmFzQ1NTKGNsYXNzTmFtZSwgaW5kZW50KTtcblxuICAgICAgY3NzICs9IHJ1bGVTZXRDU1M7XG5cbiAgICAgIHJldHVybiBjc3M7XG4gICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgcnVsZVNldE5vZGVzID0gcnVsZVNldFF1ZXJ5LmV4ZWN1dGUobm9kZSksXG4gICAgICAgICAgYXJyYXkgPSBydWxlU2V0Tm9kZXMubWFwKChydWxlU2V0Tm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHJ1bGVTZXROb2RlLCAvLy9cbiAgICAgICAgICAgICAgICAgIHJ1bGVTZXQgPSBSdWxlU2V0LmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucyk7XG5cbiAgICAgICAgICAgIHJldHVybiBydWxlU2V0O1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHJ1bGVTZXRzID0gbmV3IFJ1bGVTZXRzKGFycmF5KTtcblxuICAgIHJldHVybiBydWxlU2V0cztcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gXCJvY2NhbS1kb21cIjtcblxuaW1wb3J0IFJ1bGVTZXRzIGZyb20gXCIuL3J1bGVTZXRzXCI7XG5pbXBvcnQgRGVjbGFyYXRpb25zIGZyb20gXCIuL2RlY2xhcmF0aW9uc1wiO1xuXG5pbXBvcnQgeyBUV09fU1BBQ0VTLCBGT1VSX1NQQUNFUyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGNvbnRlbnRGcm9tUXVlcnlOb2RlQW5kVG9rZW5zIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZW50XCI7XG5cbmNvbnN0IG1lZGlhUXVlcmllc1F1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oXCIvbWVkaWEvbWVkaWFRdWVyaWVzXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZWRpYSB7XG4gIGNvbnN0cnVjdG9yKG1lZGlhUXVlcmllcywgZGVjbGFyYXRpb25zLCBydWxlU2V0cykge1xuICAgIHRoaXMubWVkaWFRdWVyaWVzID0gbWVkaWFRdWVyaWVzO1xuICAgIHRoaXMuZGVjbGFyYXRpb25zID0gZGVjbGFyYXRpb25zO1xuICAgIHRoaXMucnVsZVNldHMgPSBydWxlU2V0cztcbiAgfVxuXG4gIGdldE1lZGlhUXVlcmllcygpIHtcbiAgICByZXR1cm4gdGhpcy5tZWRpYVF1ZXJpZXM7XG4gIH1cblxuICBnZXREZWNsYXJhdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVjbGFyYXRpb25zO1xuICB9XG5cbiAgZ2V0UnVsZVNldHMoKSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZVNldHM7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUpIHtcbiAgICBsZXQgY3NzID0gXCJcIjtcblxuICAgIGNvbnN0IHJ1bGVTZXRzQ1NTID0gdGhpcy5ydWxlU2V0cy5hc0NTUyhjbGFzc05hbWUsIFRXT19TUEFDRVMpLFxuICAgICAgICAgIGRlY2xhcmF0aW9uc0NTUyA9IHRoaXMuZGVjbGFyYXRpb25zLmFzQ1NTKGNsYXNzTmFtZSwgRk9VUl9TUEFDRVMpO1xuXG4gICAgaWYgKChydWxlU2V0c0NTUyAhPT0gbnVsbCkgfHwgKGRlY2xhcmF0aW9uc0NTUyAhPT0gbnVsbCkpIHtcbiAgICAgIGNzcyA9IGBAbWVkaWEgJHt0aGlzLm1lZGlhUXVlcmllc30ge1xuJHtkZWNsYXJhdGlvbnNDU1N9JHtydWxlU2V0c0NTU31cbn1cblxuYDtcbiAgICB9XG5cbiAgICByZXR1cm4gY3NzO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucykge1xuICAgIGNvbnN0IG1lZGlhUXVlcmllcyA9IG1lZGlhUXVlcmllc0Zyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgZGVjbGFyYXRpb25zID0gRGVjbGFyYXRpb25zLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgcnVsZVNldHMgPSBSdWxlU2V0cy5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpLFxuICAgICAgICAgIG1lZGlhID0gbmV3IE1lZGlhKG1lZGlhUXVlcmllcywgZGVjbGFyYXRpb25zLCBydWxlU2V0cyk7XG5cbiAgICByZXR1cm4gbWVkaWE7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWVkaWFRdWVyaWVzRnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gIGNvbnN0IG1lZGlhUXVlcmllc05vZGVDb250ZW50ID0gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMobWVkaWFRdWVyaWVzUXVlcnksIG5vZGUsIHRva2VucyksXG4gICAgICAgIG1lZGlhUXVlcmllcyA9IGAke21lZGlhUXVlcmllc05vZGVDb250ZW50fWA7XG5cbiAgcmV0dXJuIG1lZGlhUXVlcmllcztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tZG9tXCI7XG5cbmltcG9ydCBNZWRpYSBmcm9tIFwiLi9tZWRpYVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IG1lZGlhUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi9zdHlsZXNoZWV0L21lZGlhXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZWRpYXMge1xuICBjb25zdHJ1Y3RvcihhcnJheSkge1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbiAgfVxuXG4gIHVuc2hpZnQobWVkaWFzKSB7XG4gICAgbWVkaWFzLmZvckVhY2goKG1lZGlhKSA9PiB7XG4gICAgICB0aGlzLmFycmF5LnVuc2hpZnQobWVkaWEpO1xuICAgIH0pO1xuICB9XG5cbiAgZm9yRWFjaChjYWxsYmFjaykge1xuICAgIHRoaXMuYXJyYXkuZm9yRWFjaChjYWxsYmFjayk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUpIHtcbiAgICBjb25zdCBjc3MgPSB0aGlzLmFycmF5LnJlZHVjZSgoY3NzLCBtZWRpYSkgPT4ge1xuICAgICAgY29uc3QgbWVkaWFDU1MgPSBtZWRpYS5hc0NTUyhjbGFzc05hbWUpO1xuXG4gICAgICBjc3MgKz0gbWVkaWFDU1M7XG5cbiAgICAgIHJldHVybiBjc3M7XG4gICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgbWVkaWFOb2RlcyA9IG1lZGlhUXVlcnkuZXhlY3V0ZShub2RlKSxcbiAgICAgICAgICBhcnJheSA9IG1lZGlhTm9kZXMubWFwKChtZWRpYU5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBtZWRpYU5vZGUsIC8vL1xuICAgICAgICAgICAgICAgICAgbWVkaWEgPSBNZWRpYS5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpO1xuXG4gICAgICAgICAgICByZXR1cm4gbWVkaWE7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgbWVkaWFzID0gbmV3IE1lZGlhcyhhcnJheSk7XG5cbiAgICByZXR1cm4gbWVkaWFzO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBNZWRpYXMgZnJvbSBcIi4vc3R5bGUvbWVkaWFzXCI7XG5pbXBvcnQgUnVsZVNldHMgZnJvbSBcIi4vc3R5bGUvcnVsZVNldHNcIjtcbmltcG9ydCBEZWNsYXJhdGlvbnMgZnJvbSBcIi4vc3R5bGUvZGVjbGFyYXRpb25zXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0eWxlIHtcbiAgY29uc3RydWN0b3IoZGVjbGFyYXRpb25zLCBydWxlU2V0cywgbWVkaWFzKSB7XG4gICAgdGhpcy5kZWNsYXJhdGlvbnMgPSBkZWNsYXJhdGlvbnM7XG4gICAgdGhpcy5ydWxlU2V0cyA9IHJ1bGVTZXRzO1xuICAgIHRoaXMubWVkaWFzID0gbWVkaWFzO1xuICB9XG5cbiAgZ2V0RGVjbGFyYXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmRlY2xhcmF0aW9ucztcbiAgfVxuXG4gIGdldFJ1bGVTZXRzKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVTZXRzO1xuICB9XG5cbiAgZ2V0TWVkaWFzKCkge1xuICAgIHJldHVybiB0aGlzLm1lZGlhcztcbiAgfVxuXG4gIGV4dGVuZHMoc3VwZXJTdHlsZSkge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9ucyA9IHN1cGVyU3R5bGUuZ2V0RGVjbGFyYXRpb25zKCksXG4gICAgICAgICAgcnVsZVNldHMgPSBzdXBlclN0eWxlLmdldFJ1bGVTZXRzKCksXG4gICAgICAgICAgbWVkaWFzID0gc3VwZXJTdHlsZS5nZXRNZWRpYXMoKTtcblxuICAgIHRoaXMudW5zaGlmdChkZWNsYXJhdGlvbnMsIHJ1bGVTZXRzLCBtZWRpYXMpO1xuICB9XG5cbiAgdW5zaGlmdChkZWNsYXJhdGlvbnMsIHJ1bGVTZXRzLCBtZWRpYXMpIHtcbiAgICB0aGlzLmRlY2xhcmF0aW9ucy51bnNoaWZ0KGRlY2xhcmF0aW9ucyk7XG4gICAgdGhpcy5ydWxlU2V0cy51bnNoaWZ0KHJ1bGVTZXRzKTtcbiAgICB0aGlzLm1lZGlhcy51bnNoaWZ0KG1lZGlhcyk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbnNDU1MgPSB0aGlzLmRlY2xhcmF0aW9ucy5hc0NTUyhjbGFzc05hbWUsIFwiICBcIiksXG4gICAgICAgICAgcnVsZVNldHNDU1MgPSB0aGlzLnJ1bGVTZXRzLmFzQ1NTKGNsYXNzTmFtZSwgXCJcIiksXG4gICAgICAgICAgbWVkaWFzQ1NTID0gdGhpcy5tZWRpYXMuYXNDU1MoY2xhc3NOYW1lKSxcbiAgICAgICAgICBjc3MgPSBgJHtkZWNsYXJhdGlvbnNDU1N9JHtydWxlU2V0c0NTU30ke21lZGlhc0NTU31gO1xuXG4gICAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbnMgPSBEZWNsYXJhdGlvbnMuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBydWxlU2V0cyA9IFJ1bGVTZXRzLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgbWVkaWFzID0gTWVkaWFzLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgc3R5bGUgPSBuZXcgU3R5bGUoZGVjbGFyYXRpb25zLCBydWxlU2V0cywgbWVkaWFzKTtcblxuICAgIHJldHVybiBzdHlsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU3R5bGUgZnJvbSBcIi4uL3N0eWxlXCI7XG5pbXBvcnQgQ1NTTGV4ZXIgZnJvbSBcIi4uL2Nzcy9sZXhlclwiO1xuaW1wb3J0IENTU1BhcnNlciBmcm9tIFwiLi4vY3NzL3BhcnNlclwiO1xuXG5pbXBvcnQgeyBIRUFELCBTVFlMRSwgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCBjc3NMZXhlciA9IENTU0xleGVyLmZyb21Ob3RoaW5nKCksXG4gICAgICBjc3NQYXJzZXIgPSBDU1NQYXJzZXIuZnJvbU5vdGhpbmcoKTtcblxuaWYgKCFnbG9iYWxUaGlzLnN0eWxlTWFwKSB7XG4gIGdsb2JhbFRoaXMuc3R5bGVNYXAgPSB7fTtcbn1cblxuY29uc3QgeyBzdHlsZU1hcCB9ID0gZ2xvYmFsVGhpcztcblxuZnVuY3Rpb24gcmVuZGVyU3R5bGUoc3R5bGUpIHtcbiAgY29uc3QgaGVhZERPTUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKEhFQUQpLFxuICAgICAgICBzdHlsZURPTUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFNUWUxFKSxcbiAgICAgICAgaW5uZXJIVE1MID0gYFxuICAgICAgICBcbiR7c3R5bGV9YDtcblxuICBPYmplY3QuYXNzaWduKHN0eWxlRE9NRWxlbWVudCwge1xuICAgIGlubmVySFRNTFxuICB9KTtcblxuICBoZWFkRE9NRWxlbWVudC5hcHBlbmRDaGlsZChzdHlsZURPTUVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiByZW5kZXJTdHlsZXMoKSB7XG4gIGNvbnN0IHN0eWxlc0NTUyA9IHJldHJpZXZlU3R5bGVzQ1NTKCksXG4gICAgICAgIHN0eWxlID0gc3R5bGVzQ1NTOyAgLy8vXG5cbiAgcmVuZGVyU3R5bGUoc3R5bGUpO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVN0eWxlKGFyZ3MsIGNsYXNzTmFtZSwgc3VwZXJTdHlsZSA9IG51bGwpIHtcbiAgY29uc3Qgc3RyaW5ncyA9IGFyZ3Muc2hpZnQoKSxcdC8vL1xuICAgICAgICBjb250ZW50ID0gc3RyaW5ncy5yZWR1Y2UoKGNvbnRlbnQsIHN0cmluZywgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCBhcmcgPSBhcmdzW2luZGV4XTtcblxuICAgICAgICAgIGNvbnRlbnQgPSAoYXJnICE9PSB1bmRlZmluZWQpID9cbiAgICAgICAgICAgICAgICAgICAgICBgJHtjb250ZW50fSR7c3RyaW5nfSR7YXJnfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgYCR7Y29udGVudH0ke3N0cmluZ31gO1xuXG4gICAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICAgIH0sIEVNUFRZX1NUUklORyksXG4gICAgICAgIHRva2VucyA9IGNzc0xleGVyLnRva2VuaXNlKGNvbnRlbnQpLFxuICAgICAgICBub2RlID0gY3NzUGFyc2VyLnBhcnNlKHRva2VucyksXG4gICAgICAgIHN0eWxlID0gU3R5bGUuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKTtcblxuICAgICAgICBpZiAoc3VwZXJTdHlsZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHN0eWxlLmV4dGVuZHMoc3VwZXJTdHlsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBzdHlsZU1hcFtjbGFzc05hbWVdID0gc3R5bGU7XG59XG5cbmZ1bmN0aW9uIHJldHJpZXZlU3R5bGUoY2xhc3NOYW1lKSB7XG4gIGNvbnN0IHN0eWxlID0gc3R5bGVNYXBbY2xhc3NOYW1lXSB8fCBudWxsO1xuXG4gIHJldHVybiBzdHlsZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICByZW5kZXJTdHlsZSxcbiAgcmVuZGVyU3R5bGVzLFxuICBnZW5lcmF0ZVN0eWxlLFxuICByZXRyaWV2ZVN0eWxlXG59O1xuXG5mdW5jdGlvbiByZXRyaWV2ZVN0eWxlc0NTUygpIHtcbiAgY29uc3QgY2xhc3NOYW1lcyA9IE9iamVjdC5rZXlzKHN0eWxlTWFwKSxcbiAgICAgICAgc3R5bGVzQ1NTID0gY2xhc3NOYW1lcy5yZWR1Y2UoKHN0eWxlc0NTUywgY2xhc3NOYW1lKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3R5bGUgPSByZXRyaWV2ZVN0eWxlKGNsYXNzTmFtZSksXG4gICAgICAgICAgICAgICAgc3R5bGVDU1MgPSBzdHlsZS5hc0NTUyhjbGFzc05hbWUpO1xuXG4gICAgICAgICAgc3R5bGVzQ1NTICs9IHN0eWxlQ1NTO1xuXG4gICAgICAgICAgcmV0dXJuIHN0eWxlc0NTUztcbiAgICAgICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICByZXR1cm4gc3R5bGVzQ1NTO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDSEFSQUNURVJTLCBFTVBUWV9TVFJJTkcsIENMQVNTX05BTUVfTEVOR1RIIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCBsZW5ndGggPSBDTEFTU19OQU1FX0xFTkdUSCxcbiAgICAgIGNoYXJhY3RlcnMgPSBDSEFSQUNURVJTLFxuICAgICAgY2hhcmFjdGVyc0xlbmd0aCA9IGNoYXJhY3RlcnMubGVuZ3RoO1xuXG5jb25zdCBjbGFzc05hbWVzID0gW107XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUNsYXNzTmFtZSgpIHtcbiAgbGV0IGNsYXNzTmFtZSA9IEVNUFRZX1NUUklORztcblxuICBmb3IgKGxldCBjb3VudCA9IDA7IGNvdW50IDwgbGVuZ3RoOyBjb3VudCsrKSB7XG4gICAgY29uc3QgaW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjaGFyYWN0ZXJzTGVuZ3RoKSxcbiAgICAgICAgICBjaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzW2luZGV4XTtcblxuICAgIGNsYXNzTmFtZSArPSBjaGFyYWN0ZXI7XG4gIH1cblxuICBjb25zdCBjbGFzc05hbWVzSW5jbHVkZXNDbGFzc05hbWUgPSBjbGFzc05hbWVzLmluY2x1ZGVzKGNsYXNzTmFtZSk7XG5cbiAgaWYgKCFjbGFzc05hbWVzSW5jbHVkZXNDbGFzc05hbWUpIHtcbiAgICBjbGFzc05hbWVzLnB1c2goY2xhc3NOYW1lKTtcbiAgfSBlbHNlIHtcbiAgICBjbGFzc05hbWUgPSBnZW5lcmF0ZUNsYXNzTmFtZSgpO1xuICB9XG5cbiAgcmV0dXJuIGNsYXNzTmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHJpZXZlQ2xhc3NOYW1lKGVsZW1lbnQpIHtcbiAgY29uc3QgeyBjbGFzc05hbWUgfSA9IGVsZW1lbnQucmVhY3RGdW5jdGlvbiB8fCBlbGVtZW50LnJlYWN0Q29tcG9uZW50LmNvbnN0cnVjdG9yO1xuXG4gIHJldHVybiBjbGFzc05hbWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZ2VuZXJhdGVDbGFzc05hbWUsXG4gIHJldHJpZXZlQ2xhc3NOYW1lXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIHRhZ05hbWVzIH0gZnJvbSBcIi4vdGFnTmFtZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ1NTTGV4ZXIgfSBmcm9tIFwiLi9jc3MvbGV4ZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ1NTUGFyc2VyIH0gZnJvbSBcIi4vY3NzL3BhcnNlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzdHlsZXNVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvc3R5bGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNsYXNzTmFtZVV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9jbGFzc05hbWVcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3R5bGVzVXRpbGl0aWVzIH0gZnJvbSBcIi4vaW5kZXhcIjsgLy8vXG5cbmNvbnN0IHsgZ2VuZXJhdGVTdHlsZSwgcmV0cmlldmVTdHlsZSwgcmVuZGVyU3R5bGVzIH0gPSBzdHlsZXNVdGlsaXRpZXM7XG5cbmNvbnN0IGZpcmFDb2RlRm9udE1peGluID0gYFxuXG4gIGZvbnQtc2l6ZTogMS4zcmVtO1xuICBsaW5lLWhlaWdodDogMjBweDtcbiAgZm9udC1mYW1pbHk6IFwiRmlyYSBDb2RlXCI7XG4gIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7IC8qIEZvcmNlIGxpZ2F0dXJlcyBmb3IgV2Via2l0LCBCbGluaywgR2Vja28gKi9cbiAgZm9udC1mZWF0dXJlLXNldHRpbmdzOiBcImNhbHRcIiAxOyAgLyogRW5hYmxlIGxpZ2F0dXJlcyBmb3IgSUUgMTArLCBFZGdlICovXG5cbmA7XG5cbmNvbnN0IG1vbm9zcGFjZUZvbnRNaXhpbiA9IGBcblxuICBmb250LXNpemU6IDEuM3JlbTtcbiAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7XG4gICBcbmA7XG5cbmdlbmVyYXRlU3R5bGUoW1tgXG5cbiAgZGlzcGxheTogbm9uZTtcbiAgXG4gIC5hY3RpdmUge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG5cbmBdXSwgXCJhYmNcIik7XG5cbmNvbnN0IHN1cGVyU3R5bGUgPSByZXRyaWV2ZVN0eWxlKFwiYWJjXCIpO1xuXG5nZW5lcmF0ZVN0eWxlKFtbYFxuXG4gIGNvbG9yOiB0cmFuc3BhcmVudDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgY3Vyc29yOiBhdXRvO1xuICByZXNpemU6IG5vbmU7XG4gIG91dGxpbmU6IG5vbmU7XG4gIHRhYi1zaXplOiAyO1xuICBib3JkZXItdG9wOiBub25lO1xuICBvdmVyZmxvdy14OiBzY3JvbGw7XG4gIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgY2FyZXQtY29sb3I6IHRyYW5zcGFyZW50O1xuICB3aGl0ZS1zcGFjZTogcHJlO1xuICBvdmVyZmxvdy13cmFwOiBub3JtYWw7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuXG4gIDo6c2VsZWN0aW9uIHsgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IH1cbiAgXG4gICR7bW9ub3NwYWNlRm9udE1peGlufVxuXG4gIC5maXJhLWNvZGUge1xuXG4gICAgJHtmaXJhQ29kZUZvbnRNaXhpbn1cbiAgICBcbiAgfVxuICBcbmBdXSwgXCJkZWZcIiwgc3VwZXJTdHlsZSk7XG5cbnJlbmRlclN0eWxlcygpO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7OztBQUFBOzs7Ozs7QUFFQSxRQUFNLFdBQVc7TUFDZjtNQUFLO01BQVE7TUFBVztNQUFTO01BQ2pDO01BQUs7TUFBUTtNQUFPO01BQU87TUFBYztNQUFRO01BQU07TUFDdkQ7TUFBVTtNQUFXO01BQVE7TUFBUTtNQUFPO01BQzVDO01BQVE7TUFBWTtNQUFNO01BQU87TUFBVztNQUFPO01BQVU7TUFBTztNQUFNO01BQU07TUFBTTtNQUFTO01BQVk7TUFBYztNQUFVO01BQVU7TUFDN0k7TUFBTTtNQUFNO01BQU07TUFBTTtNQUFNO01BQU07TUFBUTtNQUFVO01BQU07TUFDNUQ7TUFBSztNQUFVO01BQU87TUFBUztNQUFPO01BQU87TUFBUztNQUFVO01BQU07TUFDdEU7TUFBUTtNQUFPO01BQVE7TUFBUTtNQUFTO01BQU87TUFDL0M7TUFBVTtNQUFNO01BQVk7TUFBVTtNQUN0QztNQUFLO01BQVM7TUFBVztNQUFPO01BQ2hDO01BQUs7TUFBTTtNQUFNO01BQ2pCO01BQUs7TUFBUTtNQUFVO01BQVc7TUFBVTtNQUFTO01BQVU7TUFBUTtNQUFVO01BQVM7TUFBTztNQUFXO01BQU87TUFDbkg7TUFBUztNQUFTO01BQU07TUFBWTtNQUFZO01BQVM7TUFBTTtNQUFTO01BQVE7TUFBUztNQUFNO01BQy9GO01BQUs7TUFDTDtNQUFPO01BQ1A7O21CQUdhOzs7OztBQ3BCZjs7Ozs7O0FBRU8sUUFBTSxjQUFjO1lBQWQsY0FBQTtBQUNOLFFBQU0sY0FBYztZQUFkLGNBQUE7QUFDTixRQUFNLGFBQWE7WUFBYixhQUFBO0FBQ04sUUFBTSxnQkFBZ0I7WUFBaEIsZ0JBQUE7QUFDTixRQUFNLGNBQWM7WUFBZCxjQUFBO0FBQ04sUUFBTSxjQUFjO1lBQWQsY0FBQTttQkFFRTtNQUNiO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTs7Ozs7O0FDZkY7Ozs7OztBQUVPLFFBQU0sYUFBYTtZQUFiLGFBQUE7QUFDTixRQUFNLGNBQWM7WUFBZCxjQUFBO0FBQ04sUUFBTSxnQkFBZ0I7WUFBaEIsZ0JBQUE7QUFDTixRQUFNLGlCQUFpQjtZQUFqQixpQkFBQTttQkFFRTtNQUNiO01BQ0E7TUFDQTtNQUNBOzs7Ozs7QUNYRjs7Ozs7O0FBRU8sUUFBTSxnQkFBZ0I7WUFBaEIsZ0JBQUE7QUFDTixRQUFNLGdCQUFnQjtZQUFoQixnQkFBQTtBQUNOLFFBQU0sa0JBQWtCO1lBQWxCLGtCQUFBO0FBQ04sUUFBTSxvQkFBb0I7WUFBcEIsb0JBQUE7QUFDTixRQUFNLHNCQUFzQjtZQUF0QixzQkFBQTtBQUNOLFFBQU0sdUJBQXVCO1lBQXZCLHVCQUFBO0FBQ04sUUFBTSx1QkFBdUI7WUFBdkIsdUJBQUE7QUFDTixRQUFNLHdCQUF3QjtZQUF4Qix3QkFBQTtBQUNOLFFBQU0sMkJBQTJCO1lBQTNCLDJCQUFBO0FBQ04sUUFBTSw2QkFBNkI7WUFBN0IsNkJBQUE7QUFDTixRQUFNLHFDQUFxQztZQUFyQyxxQ0FBQTtBQUNOLFFBQU0sc0NBQXNDO1lBQXRDLHNDQUFBO0FBQ04sUUFBTSxzQ0FBc0M7WUFBdEMsc0NBQUE7QUFDTixRQUFNLHVDQUF1QztZQUF2Qyx1Q0FBQTttQkFFRTtNQUNiO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7Ozs7OztBQy9CRjs7Ozs7O0FBRU8sUUFBTSxpQkFBaUI7WUFBakIsaUJBQUE7QUFDTixRQUFNLGlCQUFpQjtZQUFqQixpQkFBQTttQkFFRTtNQUNiO01BQ0E7Ozs7OztBQ1BGOzs7Ozs7QUFFTyxRQUFNLGdCQUFnQjtZQUFoQixnQkFBQTtBQUNOLFFBQU0saUJBQWlCO1lBQWpCLGlCQUFBO0FBQ04sUUFBTSxrQkFBa0I7WUFBbEIsa0JBQUE7bUJBRUU7TUFDYjtNQUNBO01BQ0E7Ozs7OztBQ1RGOzs7Ozs7QUFFTyxRQUFNLGdCQUFnQjtZQUFoQixnQkFBQTtBQUNOLFFBQU0sZ0JBQWdCO1lBQWhCLGdCQUFBO0FBQ04sUUFBTSxpQkFBaUI7WUFBakIsaUJBQUE7QUFDTixRQUFNLGtCQUFrQjtZQUFsQixrQkFBQTtBQUNOLFFBQU0sa0JBQWtCO1lBQWxCLGtCQUFBO0FBQ04sUUFBTSxrQkFBa0I7WUFBbEIsa0JBQUE7QUFDTixRQUFNLG1CQUFtQjtZQUFuQixtQkFBQTtBQUNOLFFBQU0sbUJBQW1CO1lBQW5CLG1CQUFBO0FBQ04sUUFBTSxxQkFBcUI7WUFBckIscUJBQUE7QUFDTixRQUFNLHFCQUFxQjtZQUFyQixxQkFBQTtBQUNOLFFBQU0scUJBQXFCO1lBQXJCLHFCQUFBO0FBQ04sUUFBTSxzQkFBc0IsT0FBTyxhQUFhO1lBQTFDLHNCQUFBO0FBQ04sUUFBTSxzQkFBc0I7WUFBdEIsc0JBQUE7QUFDTixRQUFNLHNCQUFzQjtZQUF0QixzQkFBQTtBQUNOLFFBQU0seUJBQXlCO1lBQXpCLHlCQUFBO0FBQ04sUUFBTSwwQkFBMEI7WUFBMUIsMEJBQUE7QUFDTixRQUFNLDRCQUE0QjtZQUE1Qiw0QkFBQTtBQUNOLFFBQU0sNkJBQTZCO1lBQTdCLDZCQUFBO21CQUVFO01BQ2I7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBOzs7Ozs7QUN2Q0Y7Ozs7OztBQUVPLFFBQU0scUJBQXFCO1lBQXJCLHFCQUFBO0FBQ04sUUFBTSxxQkFBcUI7WUFBckIscUJBQUE7QUFDTixRQUFNLHdCQUF3QjtZQUF4Qix3QkFBQTtBQUNOLFFBQU0sMEJBQTBCO1lBQTFCLDBCQUFBO0FBQ04sUUFBTSw0QkFBNEI7WUFBNUIsNEJBQUE7QUFDTixRQUFNLDRCQUE0QjtZQUE1Qiw0QkFBQTtBQUNOLFFBQU0sNEJBQTRCO1lBQTVCLDRCQUFBO0FBQ04sUUFBTSw2QkFBNkI7WUFBN0IsNkJBQUE7QUFDTixRQUFNLDhCQUE4QjtZQUE5Qiw4QkFBQTtBQUNOLFFBQU0sOEJBQThCO1lBQTlCLDhCQUFBO0FBQ04sUUFBTSwrQkFBK0I7WUFBL0IsK0JBQUE7QUFDTixRQUFNLG9DQUFvQztZQUFwQyxvQ0FBQTtBQUNOLFFBQU0sd0NBQXdDO1lBQXhDLHdDQUFBO21CQUVFO01BQ2I7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7Ozs7OztBQzdCRjs7Ozs7O0FBRU8sUUFBTSx5QkFBeUI7WUFBekIseUJBQUE7QUFDTixRQUFNLDBCQUEwQjtZQUExQiwwQkFBQTtBQUNOLFFBQU0sZ0NBQWdDO1lBQWhDLGdDQUFBO0FBQ04sUUFBTSw4Q0FBOEM7WUFBOUMsOENBQUE7QUFDTixRQUFNLHVDQUF1QztZQUF2Qyx1Q0FBQTtBQUNOLFFBQU0sd0NBQXdDO1lBQXhDLHdDQUFBO0FBQ04sUUFBTSw4Q0FBOEM7WUFBOUMsOENBQUE7QUFDTixRQUFNLDREQUE0RDtZQUE1RCw0REFBQTttQkFFRTtNQUNiO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7Ozs7OztBQ25CRjs7Ozs7O0FBRU8sUUFBTSx3QkFBd0I7WUFBeEIsd0JBQUE7QUFDTixRQUFNLDJCQUEyQjtZQUEzQiwyQkFBQTtBQUNOLFFBQU0sNkJBQTZCO1lBQTdCLDZCQUFBO0FBQ04sUUFBTSwrQkFBK0I7WUFBL0IsK0JBQUE7QUFDTixRQUFNLCtCQUErQjtZQUEvQiwrQkFBQTtBQUNOLFFBQU0sK0JBQStCO1lBQS9CLCtCQUFBO0FBQ04sUUFBTSxnQ0FBZ0M7WUFBaEMsZ0NBQUE7QUFDTixRQUFNLGlDQUFpQztZQUFqQyxpQ0FBQTtBQUNOLFFBQU0saUNBQWlDO1lBQWpDLGlDQUFBO0FBQ04sUUFBTSxrQ0FBa0M7WUFBbEMsa0NBQUE7QUFDTixRQUFNLHVDQUF1QztZQUF2Qyx1Q0FBQTtBQUNOLFFBQU0sMkNBQTJDO1lBQTNDLDJDQUFBO21CQUVFO01BQ2I7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBOzs7Ozs7QUMzQkY7Ozs7O1lBRWdCLFFBQUE7WUFFQSxTQUFBO1lBRUEsUUFBQTtZQUVBLFNBQUE7WUFFQSxRQUFBO1lBRUEsWUFBQTtZQUVBLGFBQUE7WUFFQSxZQUFBO1lBRUEsYUFBQTtZQUVBLFlBQUE7WUFFQSxPQUFBO1lBRUEsT0FBQTtZQUVBLE9BQUE7WUFFQSxPQUFBO1lBRUEsUUFBQTtZQUVBLE9BQUE7WUFFQSxVQUFBO1lBRUEsU0FBQTtZQVFBLFFBQUE7WUFNQSxPQUFBO1lBT0EsUUFBQTtZQUVBLFNBQUE7WUFPQSxVQUFBO1lBc0JBLFNBQUE7WUFtQkEsT0FBQTtZQWNBLFFBQUE7WUFxQkEsUUFBQTtZQWlCQSxVQUFBO1lBVUEsV0FBQTtZQVVBLGVBQUE7WUFlQSxnQkFBQTtZQWVBLGdCQUFBO1lBZUEsaUJBQUE7WUFlQSxpQkFBQTtZQVVBLGtCQUFBO1lBVUEsa0JBQUE7WUFVQSxtQkFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzttQkEzUU0sT0FBTztBQUFFLGFBQU8sTUFBTTs7b0JBRXJCLE9BQU87QUFBRSxhQUFPLE1BQU07O21CQUV2QixPQUFPO0FBQUUsYUFBTyxNQUFNOztvQkFFckIsT0FBTztBQUFFLGFBQU8sTUFBTTs7bUJBRXZCLE9BQU87QUFBRSxhQUFPLE1BQU07O3VCQUVsQixPQUFPO0FBQUUsYUFBTyxNQUFNLE1BQU0sU0FBUzs7d0JBRXBDLE9BQU87QUFBRSxhQUFPLE1BQU0sTUFBTSxTQUFTOzt1QkFFdEMsT0FBTztBQUFFLGFBQU8sTUFBTSxNQUFNLFNBQVM7O3dCQUVwQyxPQUFPO0FBQUUsYUFBTyxNQUFNLE1BQU0sU0FBUzs7dUJBRXRDLE9BQU87QUFBRSxhQUFPLE1BQU0sTUFBTSxTQUFTOztrQkFFMUMsT0FBTztBQUFFLGFBQU8sTUFBTSxNQUFNLFNBQVM7O2tCQUVyQyxPQUFPO0FBQUUsYUFBTyxNQUFNLE1BQU0sR0FBRzs7a0JBRS9CLE9BQU87QUFBRSxhQUFPLE1BQU0sTUFBTTs7a0JBRTVCLE9BQU87QUFBRSxhQUFPLE1BQU0sTUFBTSxNQUFNLFNBQVM7O21CQUUxQyxPQUFPO0FBQUUsYUFBTyxNQUFNLE1BQU0sR0FBRyxNQUFNLFNBQVM7O2tCQUUvQyxRQUFRLFFBQVE7QUFBRSxZQUFNLFVBQVUsS0FBSyxNQUFNLFFBQVE7O3FCQUVsRCxRQUFRLFFBQVE7QUFBRSxZQUFNLFVBQVUsUUFBUSxNQUFNLFFBQVE7O29CQUV6RCxRQUFRLGlCQUFpQjtBQUM5QyxVQUFNLFNBQVUsWUFBQSxpQkFBMkIsU0FDekIsa0JBQ0M7UUFBQzs7QUFFcEIsV0FBSyxRQUFROzttQkFHTyxPQUFPO0FBQzNCLFVBQU0sUUFBUTtBQUVkLGFBQU8sTUFBTSxPQUFPOztrQkFHRCxRQUFRLFFBQVE7QUFDbkMsVUFBTSxRQUFRLEdBQ1IsY0FBYyxPQUFPO0FBRTNCLGFBQU8sUUFBUSxPQUFPLGFBQWE7O21CQUdmLFFBQVEsUUFBUTtBQUFFLFlBQU0sVUFBVSxLQUFLLE1BQU0sUUFBUTs7b0JBRXBELFFBQVEsT0FBNEM7VUFBckMsY0FBVyxVQUFBLFNBQUEsS0FBQSxVQUFBLE9BQUEsU0FBQSxVQUFBLEtBQUcsVUFBVSxTQUFNLFVBQUEsU0FBQSxLQUFBLFVBQUEsT0FBQSxTQUFBLFVBQUEsS0FBRztBQUNyRSxVQUFNLE9BQU87UUFBQztRQUFPO1FBQVIsT0FBK0IsbUJBQVAsVUFDL0Isb0JBQW9CLE1BQU0sVUFBVSxPQUFPLE1BQU0sUUFBUTtBQUUvRCxhQUFPOztxQkFHZSxPQUFPLFVBQVMsTUFBTTtBQUM1QyxVQUFJO0FBRUosVUFBTSxRQUFRLE1BQU0sS0FBSyxTQUFDLFNBQVMsT0FBVTtBQUMzQyxZQUFNLFNBQVMsS0FBSyxTQUFTO0FBRTdCLFlBQUksUUFBUTtBQUNWLGtCQUFRO0FBRVIsaUJBQU87OztBQUlYLFVBQUksT0FBTztBQUNULFlBQU0sY0FBYztBQUVwQixjQUFNLE9BQU8sT0FBTyxhQUFhOztBQUduQyxhQUFPOztvQkFHYyxPQUFPLE1BQU07QUFDbEMsVUFBTSxtQkFBbUI7QUFFekIsdUJBQWlCLE9BQU8sU0FBQyxTQUFTLE9BQVU7QUFDMUMsWUFBTSxTQUFTLEtBQUssU0FBUztBQUU3QixZQUFFLENBQUcsUUFBUTtBQUNYLGNBQU0sUUFBUSxPQUNSLGNBQWMsR0FDZCxrQkFBa0IsTUFBTSxPQUFPLE9BQU8sY0FDdEMsc0JBQXNCLE1BQU07QUFFbEMsMkJBQWlCLFFBQVE7OztBQUk3QixhQUFPOztrQkFHWSxPQUFPLE1BQU07QUFDaEMsVUFBTSxXQUFXO0FBRWpCLHNCQUFnQixPQUFPLFNBQUMsU0FBUyxPQUFVO0FBQ3pDLFlBQU0sU0FBUyxLQUFLLFNBQVM7QUFFN0IsWUFBSSxRQUFRO0FBQ1YsbUJBQVMsS0FBSzs7O0FBSWxCLGFBQU87O21CQUdhLE9BQU8sTUFBTTtBQUNqQyxVQUFJLGdCQUFnQjtBQUVwQixZQUFNLEtBQUssU0FBQyxTQUFTLE9BQVU7QUFDN0IsWUFBTSxTQUFTLEtBQUssU0FBUztBQUU3QixZQUFFLENBQUcsUUFBUTtBQUNYLGNBQU0sUUFBUSxPQUNSLGNBQWMsR0FDZCxrQkFBa0IsTUFBTSxPQUFPLE9BQU8sY0FDdEMsc0JBQXNCLE1BQU07QUFFbEMsMEJBQWdCO0FBRWhCLGlCQUFPOzs7QUFJWCxhQUFPOzttQkFHYSxPQUFPLFVBQVMsTUFBTTtBQUMxQyxVQUFNLFFBQVEsTUFBTSxLQUFLLFNBQUMsU0FBUyxPQUFVO0FBQzNDLFlBQU0sU0FBUyxLQUFLLFNBQVM7QUFFN0IsWUFBSSxRQUFRO0FBQ1YsaUJBQU87OztBQUtYLFVBQUksT0FBTztBQUNULGNBQU0sS0FBSzs7QUFHYixhQUFPOztxQkFHZSxRQUFRLFFBQVEsTUFBTTtBQUM1QyxhQUFPLFFBQVEsU0FBQyxTQUFTLE9BQVU7QUFDakMsWUFBTSxTQUFTLEtBQUssU0FBUztBQUU3QixZQUFJLFFBQVE7QUFDVixpQkFBTyxLQUFLOzs7O3NCQUtPLE9BQU8sUUFBUSxRQUFRLE1BQU07QUFDcEQsWUFBTSxRQUFRLFNBQUMsU0FBUyxPQUFVO0FBQ2hDLFlBQU0sU0FBUyxLQUFLLFNBQVM7QUFFN0IsaUJBQ0UsT0FBTyxLQUFLLFdBQ1YsT0FBTyxLQUFLOzs7MEJBSVMsT0FBTyxVQUFVO0FBQzVDLFVBQU0sY0FBYyxNQUFNO0FBRTFCLGVBQVMsUUFBUSxHQUFHLFFBQVEsYUFBYSxTQUFTO0FBQ2hELFlBQU0sVUFBVSxNQUFNLFFBQ2hCLFNBQVMsU0FBUyxTQUFTO0FBRWpDLFlBQUksUUFBUTtBQUNWLGlCQUFPOzs7QUFJWCxhQUFPOzsyQkFHcUIsT0FBTyxVQUFVO0FBQzdDLFVBQU0sY0FBYyxNQUFNO0FBRTFCLGVBQVMsUUFBUSxjQUFjLEdBQUcsU0FBUyxHQUFHLFNBQVM7QUFDckQsWUFBTSxVQUFVLE1BQU0sUUFDaEIsU0FBUyxTQUFTLFNBQVM7QUFFakMsWUFBSSxRQUFRO0FBQ1YsaUJBQU87OztBQUlYLGFBQU87OzJCQUdxQixPQUFPLFVBQVU7QUFDN0MsVUFBTSxjQUFjLE1BQU07QUFFMUIsZUFBUyxRQUFRLEdBQUcsUUFBUSxhQUFhLFNBQVM7QUFDaEQsWUFBTSxVQUFVLE1BQU0sUUFDaEIsU0FBUyxTQUFTLFNBQVM7QUFFakMsWUFBRSxDQUFHLFFBQVE7QUFDWCxpQkFBTzs7O0FBSVgsYUFBTzs7NEJBR3NCLE9BQU8sVUFBVTtBQUM5QyxVQUFNLGNBQWMsTUFBTTtBQUUxQixlQUFTLFFBQVEsY0FBYyxHQUFHLFNBQVMsR0FBRyxTQUFTO0FBQ3JELFlBQU0sVUFBVSxNQUFNLFFBQ2hCLFNBQVMsU0FBUyxTQUFTO0FBRWpDLFlBQUUsQ0FBRyxRQUFRO0FBQ1gsaUJBQU87OztBQUlYLGFBQU87OzRCQUdzQixPQUFPLFVBQVUsY0FBYztBQUM1RCxVQUFJLFFBQVE7QUFFWixzQkFBZ0IsT0FBTyxTQUFDLFNBQVMsT0FBVTtBQUN6QyxnQkFBUSxTQUFTLE9BQU8sU0FBUzs7QUFHbkMsYUFBTzs7NkJBR3VCLE9BQU8sVUFBVSxjQUFjO0FBQzdELFVBQUksUUFBUTtBQUVaLHVCQUFpQixPQUFPLFNBQUMsU0FBUyxPQUFVO0FBQzFDLGdCQUFRLFNBQVMsT0FBTyxTQUFTOztBQUduQyxhQUFPOzs2QkFHdUIsT0FBTyxVQUFVO0FBQy9DLFVBQU0sY0FBYyxNQUFNO0FBRTFCLGVBQVMsUUFBUSxHQUFHLFFBQVEsYUFBYSxTQUFTO0FBQ2hELFlBQU0sVUFBVSxNQUFNO0FBRXRCLGlCQUFTLFNBQVM7Ozs4QkFJVyxPQUFPLFVBQVU7QUFDaEQsVUFBTSxjQUFjLE1BQU07QUFFMUIsZUFBUyxRQUFRLGNBQWMsR0FBRyxTQUFTLEdBQUcsU0FBUztBQUNyRCxZQUFNLFVBQVUsTUFBTTtBQUV0QixpQkFBUyxTQUFTOzs7bUJBSVA7TUFDYjtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTs7Ozs7O0FDNVRGOzs7Ozs7QUFFTyxRQUFNLE9BQU87WUFBUCxPQUFBO0FBQ04sUUFBTSxRQUFRO1lBQVIsUUFBQTtBQUNOLFFBQU0sU0FBUztZQUFULFNBQUE7QUFDTixRQUFNLFNBQVM7WUFBVCxTQUFBO0FBQ04sUUFBTSxVQUFVO1lBQVYsVUFBQTtBQUNOLFFBQU0sVUFBVTtZQUFWLFVBQUE7QUFDTixRQUFNLGNBQWM7WUFBZCxjQUFBO0FBQ04sUUFBTSxlQUFlO1lBQWYsZUFBQTs7OztBQ1RiOzs7OztZQU1nQixZQUFBO1lBZ0JBLGFBQUE7WUFnQkEsZUFBQTtZQXFCQSxpQkFBQTtZQU1BLG1CQUFBO1lBUUEsdUJBQUE7WUFvQkEseUJBQUE7O0FBM0ZPLFFBQUEsU0FBb0I7QUFDZCxRQUFBLGFBQWM7QUFDVSxRQUFBLGNBQWU7dUJBRTFDLFNBQVMsTUFBTSxPQUFPO0FBQzlDLFVBQU0sZ0JBQWdCLEtBQUssZUFDckIsZ0JBQWdCLE9BQU8sb0JBQW9CLFVBQzNDLGdCQUFlLGNBQWMsS0FBSyxTQUFDLGNBQWlCO0FBQ2xELFlBQU0sd0JBQXdCLGFBQWE7QUFFM0MsWUFBSSwwQkFBMEIsZUFBZTtBQUMzQyxpQkFBTzs7WUFFTDtBQUVaLFVBQUksa0JBQWlCLE1BQU07QUFDekIsZ0JBQVEsaUJBQWdCOzs7d0JBSUQsU0FBUyxNQUFNLE9BQU87QUFDL0MsVUFBTSxnQkFBZ0IsS0FBSyxlQUNyQixnQkFBZ0IsT0FBTyxvQkFBb0IsVUFDM0MsZ0JBQWUsY0FBYyxLQUFLLFNBQUMsY0FBaUI7QUFDbEQsWUFBTSx3QkFBd0IsYUFBYTtBQUUzQyxZQUFJLDBCQUEwQixlQUFlO0FBQzNDLGlCQUFPOztZQUVMO0FBRVosVUFBSSxrQkFBaUIsTUFBTTtBQUN6QixnQkFBUSxRQUFROzs7MEJBSVMsTUFBTTtBQUNqQyxVQUFJO0FBRUosVUFBTSxVQUFVLEtBQUssTUFBSyx5QkFDcEIsY0FBVyxJQXhDSSxRQUFvQixPQXdDZCxVQUNyQixRQUFRLFlBQVksUUF2Q3lCLFlBQWU7QUF5Q2xFLFVBQUksVUFBSyxJQUFTO0FBQ2hCLFlBQU0sU0FBUyxlQUFlO0FBRTlCLGVBQU8sU0FBUyxNQUFNO2FBQ2pCO0FBQ0wsWUFBTSxRQUFRLFFBQVEsR0FDaEIsYUFBYSxZQUFZLFVBQVU7QUFFekMsZUFBTyxPQUFPOztBQUdoQixhQUFPOzs0QkFHc0IsTUFBTTtBQUNuQyxVQUFNLFNBQU0sY0FBaUIsS0FBSztBQUVsQyxhQUFPOzs4QkFHd0IsTUFBTTtBQUNyQyxVQUFNLFVBQVUsS0FBSyxNQUFLLDBCQUNwQixjQUFXLElBakVJLFFBQW9CLE9BaUVkLFVBQ3JCLFdBQVc7QUFFakIsYUFBTzs7a0NBRzRCLE9BQU87QUFDMUMsVUFBTSxRQUFRLE9BQU8sS0FBSyxRQUNwQixjQUFjLE1BQU0sUUFDcEIsWUFBWSxjQUFjLEdBQzFCLGVBQWMsTUFBTSxPQUFPLFNBQUMsYUFBYSxNQUFNLE9BQVU7QUFDdkQsWUFBTSxRQUFRLE1BQU0sT0FDZCxjQUFjLG1CQUFtQixPQUNqQyxlQUFlLG1CQUFtQixRQUNsQyxxQkFBc0IsVUFBVSxZQTdFSyxZQUFlLHNCQUR2QyxXQUFjO0FBa0ZqQyx1QkFBZ0IsR0FBaUIsT0FBZixhQUFZLEtBQWtCLE9BQWYsY0FBa0MsT0FBbkI7QUFFaEQsZUFBTztTQXBGWSxXQUFjO0FBdUZ6QyxhQUFPOztvQ0FHOEIsTUFBTSxLQUFLLE9BQU87QUFDdkQsVUFBTSxjQUFjLHFCQUFxQixRQUNuQyxNQUFPLGdCQTVGYyxXQUFjLGVBNkYxQixHQUFTLE9BQVAsTUFBVyxPQUFKLE9BQ1AsR0FBUyxPQUFQLE1BQWMsT0FBUCxLQUFJLEtBQWUsT0FBWjtBQUVqQyxhQUFPOzttQkFHTTtNQUNiO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBOzs7Ozs7QUM3R0Y7Ozs7O1lBT2dCLE1BQUE7WUFlQSxPQUFBO1lBa0JBLFVBQUE7O0FBdEN3QixRQUFBLFdBQVk7QUFDTixRQUFBLGdCQUFpQjtBQUNaLFFBQUEsV0FBWTtBQUNaLFFBQUEsUUFBbUI7aUJBRWxELE1BQU0sS0FBSyxPQUFPLFNBQVMsVUFBVTtBQUN2RCxVQUFJLGFBQWEsUUFBVztBQUMxQixtQkFBVztBQUNYLGtCQUFVOztBQUdaLFVBQU0sU0FYZ0MsU0FBWSxZQVk1QyxTQVhzQyxjQUFpQiwrQkFZdkQsVUFBVTtBQUVoQiw2QkFBdUIsU0FBUztBQUVoQyxjQUFRLE1BQU0sS0FBSyxPQUFPLFFBQVEsU0FBUyxTQUFTOztrQkFHakMsTUFBTSxLQUFLLE9BQU8sU0FBUyxTQUFTLFVBQVU7QUFDakUsVUFBSSxhQUFhLFFBQVc7QUFDMUIsbUJBQVc7QUFDWCxrQkFBVTtBQUNWLGtCQUFVOztBQUdaLFVBQU0sU0EzQmdDLFNBQVksYUE0QjVDLFNBM0JzQyxjQUFpQiwrQkE0QnZELGNBNUJzQyxjQUFpQjtBQThCN0QsNkJBQXVCLFNBQVM7QUFFaEMsa0NBQTRCLFNBQVM7QUFFckMsY0FBUSxNQUFNLEtBQUssT0FBTyxRQUFRLFNBQVMsU0FBUzs7cUJBRzlCLE1BQU0sS0FBSyxPQUFPLFFBQVEsU0FBUyxVQUFTLFVBQVU7QUFDNUUsVUFBTSxNQUFHLElBcEN3QyxPQUFtQix1QkFvQ2pDLE1BQU0sS0FBSyxRQUN4QyxTQUFTLFFBdENrQyxTQUFZLGtCQXNDcEIsTUFDbkMsY0FBYyxRQXZDNkIsU0FBWSx3QkF1Q1QsTUFDOUMsaUJBQWlCLElBQUk7QUFFM0IsVUFBSSxnQkEzQ3dDLGNBQWlCLCtCQTJDVjtBQUNqRCxZQUFNLE9BQU8sVUFDUCxhQUFhLEtBQUssVUFBVTtBQUVsQyxtQkFBVTs7QUFHWixxQkFBZSxxQkFBcUIsV0FBTTtBQUN4QyxZQUFRLGFBQWlDLGVBQWpDLFlBQVksU0FBcUIsZUFBckIsUUFBUSxXQUFhLGVBQWIsVUFDdEIsYUFBYTtBQUVuQixZQUFJLGNBQWMsR0FBRztBQUNuQixjQUFJLFVBQVU7QUFFZCxjQUFJLFdBekRvQyxjQUFpQiwrQkF5RFg7QUFDNUMsZ0JBQUk7QUFDRixrQkFBTSxjQUFhLFNBQ2IsUUFBTyxLQUFLLE1BQU07QUFFeEIsd0JBQVU7cUJBQ0gsT0FBUDtBQUNBLHdCQUFVOzs7QUFJZCxtQkFBUyxTQUFTOzs7QUFJdEIscUJBQWUsS0FBSyxRQUFRO0FBRTVCLFVBQUksV0FBVyxNQUFNO0FBQ25CLHVCQUFlLGlCQTFFZ0MsU0FBWSxlQTBFWjs7QUFHakQsVUFBSSxnQkFBZ0IsTUFBTTtBQUN4Qix1QkFBZSxpQkE5RWdDLFNBQVkscUJBOEVOOztBQUd0RCxtQkFBWSxPQUNYLGVBQWUsS0FBSyxZQUNsQixlQUFlOzttQkFHTjtNQUNiO01BQ0E7TUFDQTs7O29DQUc4QixTQUFTLFFBQVE7QUFDL0MsVUFBTSxPQTdGMkMsU0FBWSxlQThGdkQsUUFBUTtVQTdGbUMsT0FBbUIsV0ErRnpELFNBQVMsTUFBTTs7eUNBR1MsU0FBUyxhQUFhO0FBQ3pELFVBQU0sT0FwRzJDLFNBQVkscUJBcUd2RCxRQUFRO1VBcEdtQyxPQUFtQixXQXNHekQsU0FBUyxNQUFNOzs7OztBQzNHNUI7Ozs7O1lBS2dCLGFBQUE7WUFRQSxvQkFBQTtZQVFBLHFCQUFBO1lBTUEscUJBQUE7WUFNQSw4QkFBQTtZQU9BLGVBQUE7WUFpQ0EsbUJBQUE7WUFRQSx5QkFBQTtZQWNBLCtCQUFBO1lBUUEsK0JBQUE7WUFjQSxvQ0FBQTtZQWNBLDBDQUFBOztBQWpJYSxRQUFBLGFBQWM7QUFDUCxRQUFBLFNBQW9CO3dCQUU3QixNQUFNO0FBQy9CLGFBQU8sS0FBSyxRQUFPLE9BSlEsV0FBYyxjQUlBLFFBQU8sT0FKckIsV0FBYztBQU16QyxVQUFNLFdBQVEsS0FBUyxLQUFLLFVBQVU7QUFFdEMsYUFBTzs7K0JBR3lCLE1BQU07QUFDdEMsVUFBTSxXQUFXLFdBQVcsT0FDdEIsbUJBQW1CLG1CQUFtQixPQUN0QyxrQkFBbUIsWUFBWTtBQUVyQyxhQUFPOztnQ0FHMEIsTUFBTTtBQUN2QyxVQUFNLG1CQUFnQixDQUFBLE1BQVUsS0FBSztBQUVyQyxhQUFPOztnQ0FHMEIsTUFBTTtBQUN2QyxVQUFNLG1CQUFnQixNQUFTLEtBQUs7QUFFcEMsYUFBTzs7eUNBR21DLGFBQWEsY0FBYztBQUNyRSxVQUFNLFNBQVMsSUFBSSxPQUFRLElBQWUsT0FBWixhQUFZLGlCQUNwQyw0QkFBNEIsT0FBTyxLQUFLO0FBRTlDLGFBQU87OzBCQUdvQixNQUFNLGNBQWM7QUFDL0MsVUFBSSxlQUFlO0FBRW5CLFVBQU0sWUFBWSxLQUFLLE1BQUssT0FDdEIsb0JBQW9CLGFBQWEsTUFBSztBQUU1QyxVQUFJLGNBQ0Esd0JBQXFCLElBNUNTLFFBQW9CLE1BNENwQjtBQUVsQyxVQUFJLDBCQUEwQixLQUFLO0FBQ2pDLDBCQUFrQjs7QUFHcEIsOEJBQXFCLElBbERhLFFBQW9CLE1Ba0R4QjtBQUM5QixxQkFBWSxJQW5Ec0IsUUFBb0IsS0FtRGxDO2FBRVosMEJBQTBCLFFBQVUsaUJBQWlCLFFBQVk7QUFDdkUsMEJBQWtCO0FBQ2xCLGtCQUFVO0FBRVYsZ0NBQXFCLElBekRXLFFBQW9CLE1BeUR0QjtBQUM5Qix1QkFBWSxJQTFEb0IsUUFBb0IsS0EwRGhDOztBQUd0QixVQUFJLGlCQUFpQixRQUFXO0FBQzlCLFlBQU0sb0JBQW9CLEdBQUcsT0FBTyxXQUFXLE9BQU87QUFFdEQsdUJBQWUsa0JBQWtCLEtBQUs7O0FBR3hDLGFBQU87OzhCQUd3QixNQUFNLGNBQWM7QUFDbkQsYUFBTyxLQUFLLFFBQU8sT0F4RVEsV0FBYztBQTBFekMsVUFBTSxtQkFBb0IsR0FBVSxPQUFSLE1BQUssS0FBZ0IsT0FBYjtBQUVwQyxhQUFPOztvQ0FHOEIsTUFBTTtBQUMzQyxVQUFJLGlCQUFpQjtBQUVyQixVQUFNLFVBQVUsS0FBSyxNQUFLO0FBRTFCLFVBQUksWUFBWSxNQUFNO0FBQ3BCLFlBQU0sY0FBVyxJQXBGZSxRQUFvQixPQW9GekI7QUFFM0IseUJBQWlCOztBQUduQixhQUFPOzswQ0FHb0MsTUFBTTtBQUNqRCxVQUFNLFVBQVUsS0FBSyxNQUFLLHNCQUNwQixjQUFXLElBOUZpQixRQUFvQixPQThGM0IsVUFDckIsdUJBQXVCO0FBRTdCLGFBQU87OzBDQUdvQyxNQUFNO0FBQ2pELFVBQUksdUJBQXVCO0FBRTNCLFVBQU0sVUFBVSxLQUFLLE1BQUs7QUFFMUIsVUFBSSxZQUFZLE1BQU07QUFDcEIsWUFBTSxjQUFXLElBMUdlLFFBQW9CLE9BMEd6QjtBQUUzQiwrQkFBdUI7O0FBR3pCLGFBQU87OytDQUd5QyxNQUFNO0FBQ3RELFVBQUksNEJBQTRCO0FBRWhDLFVBQU0sVUFBVSxLQUFLLE1BQUs7QUFFMUIsVUFBSSxZQUFZLE1BQU07QUFDcEIsWUFBTSxjQUFXLElBeEhlLFFBQW9CLE9Bd0h6QjtBQUUzQixvQ0FBNEI7O0FBRzlCLGFBQU87O3FEQUcrQyxNQUFNO0FBQzVELFVBQUksa0NBQWtDO0FBRXRDLFVBQU0sVUFBVSxLQUFLLE1BQUs7QUFFMUIsVUFBSSxZQUFZLE1BQU07QUFDcEIsWUFBTSxjQUFXLElBdEllLFFBQW9CLE9Bc0l6QjtBQUUzQiwwQ0FBa0M7O0FBR3BDLGFBQU87O21CQUdNO01BQ2I7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBOzs7Ozs7QUM3SkY7Ozs7O1lBRWdCLFNBQUE7WUFpQkEsVUFBQTtZQXVCQSxXQUFBO1lBdUJBLGFBQUE7WUFvQkEsYUFBQTtZQWtCQSxrQkFBQTtZQXVCQSxtQkFBQTs7b0JBNUhPLFdBQVcsTUFBTSxTQUFTO0FBQy9DLFVBQUksUUFBSztzQkFFTztBQUNkO0FBRUEsWUFBTSxRQUFRLE9BQ1IsWUFBWSxVQUFVLE1BQU0sTUFBTSxTQUFTO0FBRWpELFlBQUksV0FBVztBQUNiOzs7QUFJSjs7cUJBR3NCLE9BQU8sV0FBVyxNQUFNLFNBQVM7QUFDdkQsVUFBTSxTQUFTLE1BQU07QUFFckIsVUFBSSxRQUFLO3NCQUVPO0FBQ2Q7QUFFQSxZQUFNLFlBQWEsVUFBVTtBQUU3QixZQUFJLFdBQVc7QUFDYjtlQUNLO0FBQ0wsY0FBTSxRQUFRLE9BQ1IsVUFBVSxNQUFNO0FBRXRCLG9CQUFVLFNBQVMsTUFBTSxNQUFNLFNBQVM7OztBQUk1Qzs7c0JBR3VCLFlBQVksTUFBTSxTQUFTO0FBQ2xELFVBQU0sU0FBUyxXQUFXO0FBRTFCLFVBQUksUUFBSztzQkFFTztBQUNkO0FBRUEsWUFBTSxZQUFhLFVBQVU7QUFFN0IsWUFBSSxXQUFXO0FBQ2I7ZUFDSztBQUNMLGNBQU0sUUFBUSxPQUNSLFlBQVksV0FBVztBQUU3QixvQkFBVSxNQUFNLE1BQU0sU0FBUzs7O0FBSW5DOzt3QkFHeUIsWUFBWSxNQUFNLFNBQVM7VUFLM0MsT0FBVCxpQkFBZ0I7QUFDZDtBQUVBLFlBQU0sWUFBYSxVQUFVO0FBRTdCLFlBQUksV0FBVztBQUNiOzs7QUFWSixVQUFNLFNBQVMsV0FBVztBQUUxQixVQUFJLFFBQVE7QUFZWixpQkFBVyxRQUFRLFNBQUMsV0FBVyxPQUFVO0FBQ3ZDLGtCQUFVLE1BQU0sTUFBTSxTQUFTOzs7d0JBSVIsV0FBVyxRQUFRLE1BQU0sU0FBUztVQUdsRCxPQUFULGlCQUFnQjtBQUNkO0FBRUEsWUFBTSxZQUFhLFVBQVU7QUFFN0IsWUFBSSxXQUFXO0FBQ2I7OztBQVJKLFVBQUksUUFBUTtBQVlaLGVBQVMsUUFBUSxHQUFHLFFBQVEsUUFBUSxTQUFTO0FBQzNDLGtCQUFVLE1BQU0sTUFBTSxTQUFTOzs7NkJBSUgsT0FBTyxXQUFXLE1BQU0sU0FBUztBQUMvRCxVQUFNLFNBQVMsTUFBTTtBQUVyQixVQUFJLFFBQUs7c0JBRU87QUFDZDtBQUVBLFlBQU0sWUFBYSxVQUFVO0FBRTdCLFlBQUksV0FBVztBQUNiO2VBQ0s7QUFDTCxjQUFNLFFBQVEsT0FDUixVQUFVLE1BQU07QUFFdEIsb0JBQVUsU0FBUyxNQUFNLE1BQU0sU0FBUzs7O0FBSTVDOzs4QkFHK0IsT0FBTyxXQUFXLE1BQU0sU0FBUztBQUNoRSxVQUFNLFNBQVMsTUFBTTtBQUVyQixVQUFJLFFBQVE7c0JBRUk7QUFDZDtBQUVBLFlBQU0sWUFBYSxVQUFLO0FBRXhCLFlBQUksV0FBVztBQUNiO2VBQ0s7QUFDTCxjQUFNLFFBQVEsT0FDUixVQUFVLE1BQU07QUFFdEIsb0JBQVUsU0FBUyxNQUFNLE1BQU0sU0FBUzs7O0FBSTVDOzttQkFHYTtNQUNiO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBOzs7Ozs7QUM1SkY7Ozs7O21DQUVvQixVQUFNOzs7dUJBQWpCOzs7bUNBQ1csV0FBTzs7O3dCQUFsQjs7O21DQUNXLFdBQU87Ozt3QkFBbEI7OzttQ0FDVyxZQUFROzs7eUJBQW5COzs7bUNBQ1csYUFBUzs7OzBCQUFwQjs7O21DQUNXLGNBQVU7OzsyQkFBckI7OzttQ0FDVyxlQUFXOzs7NEJBQXRCOzs7bUNBQ1csZ0JBQVk7Ozs2QkFBdkI7OzttQ0FDVyxrQkFBYzs7OytCQUF6Qjs7O21DQUVXLGlCQUFhOzs7cUJBQXhCOzs7bUNBRVcsaUJBQWE7OztxQkFBeEI7OzttQ0FDVyxpQkFBYTs7O3FCQUF4Qjs7O21DQUNXLGtCQUFjOzs7c0JBQXpCOzs7bUNBQ1cseUJBQXFCOzs7NkJBQWhDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDakJUOzs7OztZQU1nQixrQkFBQTtBQUpXLFFBQUEsYUFBVztBQUV0QyxRQUFRLHNCQUFxRSxXQUFVLFdBQS9FO0FBQVIsUUFBNkIsc0JBQWdELFdBQVUsV0FBMUQ7QUFBN0IsUUFBa0QseUJBQTJCLFdBQVUsV0FBckM7NkJBRWxCLFNBQVM7QUFDdkMsVUFBTSxtQkFBbUIsUUFDRSxRQUFPLEtBQU0scUJBQ2IsUUFBTyxLQUFNLHFCQUNiLFFBQU8sS0FBTTtBQUV4QyxhQUFPOzs7OztBQ1pUOzs7Ozs7QUFFTyxRQUFNLFdBQVc7WUFBWCxXQUFBO0FBQ04sUUFBTSxXQUFXO1lBQVgsV0FBQTtBQUNOLFFBQU0sY0FBYztZQUFkLGNBQUE7QUFDTixRQUFNLGdCQUFnQjtZQUFoQixnQkFBQTtBQUNOLFFBQU0saUJBQWlCO1lBQWpCLGlCQUFBO0FBQ04sUUFBTSxvQkFBb0I7WUFBcEIsb0JBQUE7QUFDTixRQUFNLHVCQUF3QixHQUFtQixPQUFqQixlQUFjLEtBQWUsT0FBWjtZQUEzQyx1QkFBQTtBQUNOLFFBQU0sd0JBQXlCLGVBQTBCLE9BQVo7WUFBdkMsd0JBQUE7QUFDTixRQUFNLHdCQUF3QjtZQUF4Qix3QkFBQTtBQUNOLFFBQU0sNEJBQTZCLHFCQUFnQyxPQUFaO1lBQWpELDRCQUFBO0FBQ04sUUFBTSw4QkFBK0IsdUJBQWtDLE9BQVo7WUFBckQsOEJBQUE7QUFDTixRQUFNLCtCQUFnQyx3QkFBbUMsT0FBWjtZQUF2RCwrQkFBQTttQkFFRTtNQUNiO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTs7Ozs7O0FDM0JGOzs7Ozs7QUFFK0IsUUFBQSxhQUFXO0FBRVYsUUFBQSxXQUFxQjtBQUNNLFFBQUEsU0FBUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVwRSxRQUFRLFFBQVUsV0FBYyxlQUF4QjtRQUVhLFFBQU4sMkJBQVE7c0JBQ1QsTUFBTSxTQUFTLFdBQVcsYUFBVzs7QUFDL0MsYUFBSyxPQUFPO0FBQ1osYUFBSyxVQUFVO0FBQ2YsYUFBSyxZQUFZO0FBQ2pCLGFBQUssY0FBYzs7OztVQUdyQixLQUFBO2lCQUFBLG1CQUFVO0FBQ1IsbUJBQU8sS0FBSzs7OztVQUdkLEtBQUE7aUJBQUEsc0JBQWE7QUFDWCxtQkFBTyxLQUFLOzs7O1VBR2QsS0FBQTtpQkFBQSx3QkFBZTtBQUNiLG1CQUFPLEtBQUs7Ozs7VUFHZCxLQUFBO2lCQUFBLDRCQUFtQjtBQUNqQixnQkFBTSxnQkFBZ0IsS0FBSyxRQUFRO0FBRW5DLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSx5QkFBZ0I7QUFDZCxtQkFBTyxLQUFLOzs7O1VBR2QsS0FBQTtpQkFBQSwwQkFBaUI7QUFDZixnQkFBTSwwQkFBMEIsS0FBSyxLQUFLLFNBQVMsT0FBVyxjQUN4RCxlQUFlO0FBRXJCLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSw0QkFBbUI7QUFDakIsZ0JBQU0sb0JBQXFCLEtBQUssS0FBSyxTQUFTLE9BQWEsZ0JBQ3JELGlCQUFpQjtBQUV2QixtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsNkJBQW9CO0FBQ2xCLGdCQUFNLHFCQUFzQixLQUFLLFNBQVMsT0FBYyxnQkFDbEQsa0JBQWtCO0FBRXhCLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxtQkFBVSxPQUFPO0FBQ2YsZ0JBQU0sZUFBZ0IsU0FBUztBQUUvQixtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsZUFBTSxPQUFPO0FBQ1gsZ0JBQU0sT0FBTyxNQUFNLFdBQ2IsVUFBVSxNQUFNLGNBQ2hCLGNBQWMsTUFBTSxpQkFDcEIsVUFBWSxLQUFLLFNBQVMsUUFBVSxLQUFLLFlBQVksV0FBYSxLQUFLLGdCQUFnQjtBQUU3RixtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsa0JBQVM7QUFDUCxnQkFBTSxZQUFZLEtBQUssTUFDakIsT0FBUSxnQkFBNkIsT0FBZCxXQUFVLE1BQW1CLE9BQWYsS0FBSyxXQUFVO0FBRTFELG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxlQUFNLE9BQU8sZUFBZSxhQUFhLGFBQW9DO0FBQXZCLHFCQUFBLE9BQUEsVUFBQSxRQUFHLHFCQUFILElBQXFCLE1BQXJCLE9BQUEsSUFBQSxPQUFBLElBQXFCLElBQXJCLE9BQUEsR0FBQSxPQUFBLE1BQUEsUUFBQTtBQUFHLGlDQUFILE9BQUEsS0FBQSxVQUFBOztBQUNwRCxnQkFBSSxRQUFRO0FBRVosZ0JBQUksa0JBQWtCLGFBQWE7QUFDakMsa0JBQUksVUFBVSxLQUFLO0FBRW5CLHdCQUFVLFFBQVEsVUFBVSxlQUFlO0FBRTNDLGtCQUFNLE9BQU8sS0FBSyxXQUNaLG1CQUFnQixJQUFHLFVBQWUsZ0JBQUMsVUFDbkMsWUFBWTtBQUVsQixzQkFBSyxXQUFPLE9BQUo7Z0JBQVU7Z0JBQU07Z0JBQVM7Z0JBQVc7Z0JBQXBDLE9BQXVFLG1CQUFuQjs7QUFHOUQsbUJBQU87Ozs7O1VBR0YsS0FBQTtpQkFBUCxlQUFhLE9BQU8sU0FBUyxhQUFvQztBQUF2QixxQkFBQSxPQUFBLFVBQUEsUUFBRyxxQkFBSCxJQUFxQixNQUFyQixPQUFBLElBQUEsT0FBQSxJQUFxQixJQUFyQixPQUFBLEdBQUEsT0FBQSxNQUFBLFFBQUE7QUFBRyxpQ0FBSCxPQUFBLEtBQUEsVUFBQTs7QUFDeEMsZ0JBQUksUUFBUTtBQUVaLGdCQUFRLG9CQUFzQixNQUF0QixtQkFDRixVQUFVLFFBQVEsTUFBTTtBQUU5QixnQkFBSSxZQUFZLE1BQU07QUFDcEIsa0JBQVEsUUFBVSxRQUFWO0FBRVIsa0JBQUksVUFBVSxHQUFHO0FBQ2Ysb0JBQU0sYUFBYSxNQUFNO0FBRXpCLDBCQUFVO0FBRVYsb0JBQU0sZ0JBQWdCLFFBQVE7QUFFOUIsb0JBQUksZ0JBQWdCLEdBQUc7QUFDckIsc0JBQVEsT0FBUyxNQUFULE1BQ0YsbUJBQWdCLElBQUcsVUFBZSxnQkFBQyxVQUNuQyxZQUFZO0FBRWxCLDBCQUFLLFdBQU8sT0FBSjtvQkFBVTtvQkFBTTtvQkFBUztvQkFBVztvQkFBcEMsT0FBdUUsbUJBQW5COzs7O0FBS2xFLG1CQUFPOzs7O1VBR0YsS0FBQTtpQkFBUCxxQkFBbUIsT0FBTyxTQUFTLGFBQW9DO0FBQXZCLHFCQUFBLE9BQUEsVUFBQSxRQUFHLHFCQUFILElBQXFCLE1BQXJCLE9BQUEsSUFBQSxPQUFBLElBQXFCLElBQXJCLE9BQUEsR0FBQSxPQUFBLE1BQUEsUUFBQTtBQUFHLGlDQUFILE9BQUEsS0FBQSxVQUFBOztBQUM5QyxnQkFBUSxPQUFTLE1BQVQsTUFDRixtQkFBZ0IsSUFBRyxVQUFlLGdCQUFDLFVBQ25DLFlBQVksa0JBQ1osUUFBSyxXQUFPLE9BQUo7Y0FBVTtjQUFNO2NBQVM7Y0FBVztjQUFwQyxPQUF1RSxtQkFBbkI7QUFFbEUsbUJBQU87Ozs7VUFHRixLQUFBO2lCQUFQLDRCQUEwQixPQUFPLFNBQVMsTUFBTSxhQUFvQztBQUF2QixxQkFBQSxPQUFBLFVBQUEsUUFBRyxxQkFBSCxJQUFxQixNQUFyQixPQUFBLElBQUEsT0FBQSxJQUFxQixJQUFyQixPQUFBLEdBQUEsT0FBQSxNQUFBLFFBQUE7QUFBRyxpQ0FBSCxPQUFBLEtBQUEsVUFBQTs7QUFDM0QsZ0JBQU0sbUJBQWdCLElBQUcsVUFBZSxnQkFBQyxVQUNuQyxZQUFZLGtCQUNaLFFBQUssV0FBTyxPQUFKO2NBQVU7Y0FBTTtjQUFTO2NBQVc7Y0FBcEMsT0FBdUUsbUJBQW5CO0FBRWxFLG1CQUFPOzs7Ozs7c0JBdElVOzs7O0FDVHJCOzs7Ozs7QUFFa0IsUUFBQSxTQUFVLHVCQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUU1QixRQUFNLGNBQWM7UUFFQyxtQkFBTix5QkFBUSxPQUFBOzs7bUNBQWM7Ozs7OztVQUNuQyxLQUFBO2lCQUFBLGVBQU0sT0FBTyxlQUFlLGFBQW9DO0FBQXZCLHFCQUFBLE9BQUEsVUFBQSxRQUFHLHFCQUFILElBQXFCLE1BQXJCLE9BQUEsSUFBQSxPQUFBLElBQXFCLElBQXJCLE9BQUEsR0FBQSxPQUFBLE1BQUEsUUFBQTtBQUFHLGlDQUFILE9BQUEsS0FBQSxVQUFBOztnQkFPZDtBQU56QixnQkFBSSxnQkFBZ0IsUUFBVztBQUM3Qiw0QkFBYztBQUNkLDhCQUFnQjtBQUNoQixzQkFBUTs7QUFHVixnQkFBTSxtQkFBbUIsYUFBSyxLQUFBLGdCQVJiLGtCQUFnQixZQVFGLFNBQU4sT0FBSyxLQUFBLE1BQUwsV0FBSzs7Y0FBTztjQUFPO2NBQWU7Y0FBYTt3Q0FBZ0I7QUFFeEYsbUJBQU87Ozs7O1VBR0YsS0FBQTtpQkFBUCxlQUFhLE9BQU8sU0FBZ0M7QUFBdkIscUJBQUEsT0FBQSxVQUFBLFFBQUcscUJBQUgsSUFBcUIsTUFBckIsT0FBQSxJQUFBLE9BQUEsSUFBcUIsSUFBckIsT0FBQSxHQUFBLE9BQUEsTUFBQSxRQUFBO0FBQUcsaUNBQUgsT0FBQSxLQUFBLFVBQUE7O2dCQU1GO0FBTHpCLGdCQUFJLFlBQVksUUFBVztBQUN6Qix3QkFBVTtBQUNWLHNCQUFROztBQUdWLGdCQUFNLG1CQUFtQixVQUFBLE9BQUssU0FBQyxNQUFOLE1BQUEsUUFBQTtjQUFZO2NBQU87Y0FBUztjQUE1QixPQUErRCxtQkFBbkI7QUFFckUsbUJBQU87Ozs7VUFHRixLQUFBO2lCQUFQLHFCQUFtQixPQUFPLFNBQWdDO0FBQXZCLHFCQUFBLE9BQUEsVUFBQSxRQUFHLHFCQUFILElBQXFCLE1BQXJCLE9BQUEsSUFBQSxPQUFBLElBQXFCLElBQXJCLE9BQUEsR0FBQSxPQUFBLE1BQUEsUUFBQTtBQUFHLGlDQUFILE9BQUEsS0FBQSxVQUFBOztnQkFNUjtBQUx6QixnQkFBSSxZQUFZLFFBQVc7QUFDekIsd0JBQVU7QUFDVixzQkFBUTs7QUFHVixnQkFBTSxtQkFBbUIsVUFBQSxPQUFLLFNBQUMsWUFBTixNQUFBLFFBQUE7Y0FBa0I7Y0FBTztjQUFTO2NBQWxDLE9BQXFFLG1CQUFuQjtBQUUzRSxtQkFBTzs7OztVQUdGLEtBQUE7aUJBQVAsNEJBQTBCLE9BQU8sU0FBUyxNQUE2QjtBQUF2QixxQkFBQSxPQUFBLFVBQUEsUUFBRyxxQkFBSCxJQUFxQixNQUFyQixPQUFBLElBQUEsT0FBQSxJQUFxQixJQUFyQixPQUFBLEdBQUEsT0FBQSxNQUFBLFFBQUE7QUFBRyxpQ0FBSCxPQUFBLEtBQUEsVUFBQTs7Z0JBT3JCO0FBTnpCLGdCQUFJLFNBQVMsUUFBVztBQUN0QixxQkFBTztBQUNQLHdCQUFVO0FBQ1Ysc0JBQVE7O0FBR1YsZ0JBQU0sbUJBQW1CLFVBQUEsT0FBSyxTQUFDLG1CQUFOLE1BQUEsUUFBQTtjQUF5QjtjQUFPO2NBQVM7Y0FBTTtjQUEvQyxPQUFrRixtQkFBbkI7QUFFeEYsbUJBQU87Ozs7O01BNUNtQyxPQUFLO3NCQUE5Qjs7OztBQ05yQjs7Ozs7O0FBRU8sUUFBTSxJQUFJO1lBQUosSUFBQTtBQUNOLFFBQU0sZUFBZTtZQUFmLGVBQUE7Ozs7QUNIYjs7Ozs7O0FBRStCLFFBQUEsYUFBVztBQUViLFFBQUEsZUFBcUIsdUJBQUE7QUFFbEIsUUFBQSxhQUFhOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRTdDLFFBQVEsUUFBVSxXQUFjLGVBQXhCO1FBRWEsT0FBTiwyQkFBUTtxQkFDVCxNQUFNLG1CQUFpQjs7QUFDakMsYUFBSyxPQUFPO0FBQ1osYUFBSyxvQkFBb0I7Ozs7VUFHM0IsS0FBQTtpQkFBQSxtQkFBVTtBQUNSLG1CQUFPLEtBQUs7Ozs7VUFHZCxLQUFBO2lCQUFBLGdDQUF1QjtBQUNyQixtQkFBTyxLQUFLOzs7O1VBR2QsS0FBQTtpQkFBQSxlQUFNLFNBQVM7QUFDYixnQkFBSSxtQkFBbUI7QUFFdkIsZ0JBQU0sVUFBVSxRQUFRLE1BQU0sS0FBSztBQUVuQyxnQkFBSSxZQUFZLE1BQU07QUFDcEIsa0JBQVEsUUFBVSxRQUFWO0FBRVIsa0JBQUksVUFBVSxHQUFHO0FBQ2Ysb0JBQU0sYUFBYSxNQUFNO0FBRXpCLDBCQUFVO0FBRVYsb0JBQU0sZ0JBQWdCLFFBQVE7QUFFOUIsb0JBQUksZ0JBQWdCLEdBQUc7QUFDckIscUNBQW1CLGFBQWdCLFFBQUMsbUJBQW1CLFNBQVMsS0FBSzs7OztBQUszRSxtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsbUJBQVU7QUFDUixnQkFBTSxRQUFRLElBQ1IsMkJBQTRCLEdBQXlCLE9BQXZCLEtBQUs7QUFFekMsa0JBQU0sS0FBSyxRQUFRO0FBRW5CLG1CQUFPOzs7OztVQUdGLEtBQUE7aUJBQVAsbUJBQWlCLE9BQU87QUFDdEIsZ0JBQVEsT0FBNEIsTUFBNUIsTUFBTSxvQkFBc0IsTUFBdEIsbUJBQ1IsT0FBTyxJQUFJLE1BQUssTUFBTTtBQUU1QixtQkFBTzs7OztVQUdGLEtBQUE7aUJBQVAsbUJBQWlCLE9BQU87QUFDdEIsZ0JBQU0sWUFBWSxPQUFPLEtBQUssUUFDeEIsZ0JBQWdCLE1BQU0sWUFDdEIsT0FBTyxlQUNQLDJCQUEyQixNQUFNLE9BQ2pDLE9BQU8sTUFBSyxvQ0FBb0MsTUFBTTtBQUU1RCxtQkFBTzs7OztVQUdGLEtBQUE7aUJBQVAsNkNBQTJDLE1BQU0sMEJBQTBCO0FBQ3pFLGdCQUFNLFVBQVUsVUFBVSwyQkFDcEIsUUFBUSxVQUNFLFdBQUMsSUFDQyxXQUFZLGNBQ3hCLFNBQVMsSUFBSSxPQUFPLDBCQUEwQixRQUM5QyxvQkFBb0IsUUFDcEIsT0FBTyxJQUFJLE1BQUssTUFBTTtBQUU1QixtQkFBTzs7Ozs7O3NCQXpFVTt1QkE2RUYsMEJBQTBCO0FBQzNDLFVBQU0sMkJBQXdCLE1BQ3hCLFFBQVEseUJBQXlCLE9BQU8sMkJBQ3hDLFVBQVcsVUFBSztBQUV0QixhQUFPOzs7OztBQzVGVDs7Ozs7O0FBRU8sUUFBTSxPQUFPO1lBQVAsT0FBQTtBQUNOLFFBQU0sVUFBVTtZQUFWLFVBQUE7QUFDTixRQUFNLFdBQVc7WUFBWCxXQUFBO0FBQ04sUUFBTSxXQUFXO1lBQVgsV0FBQTtBQUNOLFFBQU0sWUFBWTtZQUFaLFlBQUE7QUFDTixRQUFNLGFBQWE7WUFBYixhQUFBO0FBQ04sUUFBTSxjQUFjO1lBQWQsY0FBQTtBQUNOLFFBQU0sY0FBYztZQUFkLGNBQUE7QUFDTixRQUFNLGVBQWU7WUFBZixlQUFBO0FBQ04sUUFBTSxlQUFlO1lBQWYsZUFBQTtBQUNOLFFBQU0sa0JBQWtCO1lBQWxCLGtCQUFBO0FBQ04sUUFBTSxnQkFBZ0I7WUFBaEIsZ0JBQUE7QUFDTixRQUFNLGNBQWM7WUFBZCxjQUFBO21CQUVFO01BQ2I7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7Ozs7OztBQzdCRjs7Ozs7O0FBRUEsUUFBTSxVQUFVO01BQ2Q7UUFDRSxTQUFXOztNQUViO1FBQ0UsTUFBUTs7TUFFVjtRQUNFLE1BQVE7O01BRVY7UUFDRSxZQUFjOzs7bUJBSUg7Ozs7O0FDakJmOzs7OztZQUVnQixpQ0FBQTs0Q0FBK0IsT0FBTyxXQUFXO0FBQy9ELFVBQU0sb0JBQW9CLE1BQU07QUFFaEMsVUFBSSxtQkFBbUI7QUFDckIsWUFBTSxlQUFlLE9BQ2Ysa0NBQWtDLGFBQWE7QUFFckQsb0JBQVk7O0FBR2QsYUFBTzs7Ozs7QUNaVDs7Ozs7O0FBRWlCLFFBQUEsUUFBUyx1QkFBQTtBQUVHLFFBQUEsYUFBYztBQUNJLFFBQUEsU0FBb0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7UUFFOUMsY0FBTiwyQkFBUTs0QkFDVCxPQUFPLGtCQUFrQixxQkFBbUI7O0FBQ3RELGFBQUssUUFBUTtBQUNiLGFBQUssbUJBQW1CO0FBQ3hCLGFBQUssc0JBQXNCOzs7O1VBRzdCLEtBQUE7aUJBQUEsb0JBQVc7QUFDVCxtQkFBTyxLQUFLOzs7O1VBR2QsS0FBQTtpQkFBQSwrQkFBc0I7QUFDcEIsbUJBQU8sS0FBSzs7OztVQUdkLEtBQUE7aUJBQUEsa0NBQXlCO0FBQ3ZCLG1CQUFPLEtBQUs7Ozs7VUFHZCxLQUFBO2lCQUFBLGtCQUFTLFNBQTRCO2dCQUFuQixZQUFTLFVBQUEsU0FBQSxLQUFBLFVBQUEsT0FBQSxTQUFBLFVBQUEsS0FBRztBQUM1QixnQkFBTSxTQUFTO21CQUVSLFlBQVksV0FBWSxjQUFFO0FBQy9CLGtCQUFJLFFBQVE7QUFFWixrQkFBTSxVQUFVLFlBQ0UsS0FBSyxtQkFDSCxLQUFLO0FBRXpCLHNCQUFRLEtBQUssU0FBQyxPQUFVO0FBQ3RCLG9CQUFJLFVBQVUsTUFBTTtBQUNsQiwwQkFBUSxNQUFNLE1BQU07QUFFcEIsc0JBQUksVUFBVSxNQUFNO0FBQ2xCLDJCQUFPOzs7O0FBS2Isa0JBQUksVUFBVSxNQUFNO0FBQ2xCLG9CQUFJLG1CQUFtQjtBQUV2QixxQkFBSyxNQUFNLEtBQUssU0FBQyxNQUFTO0FBQ3hCLHFDQUFtQixLQUFLLE1BQU07QUFFOUIsc0JBQUkscUJBQXFCLE1BQU07QUFDN0IsNEJBQVE7QUFFUiwyQkFBTzs7OztBQUtiLGtCQUFJLFVBQVUsTUFBTTtBQUNsQixzQkFBTSxJQUFJLE1BQU8sZ0JBQXVCLE9BQVIsU0FBUTs7QUFHMUMscUJBQU8sS0FBSztBQUVaLDBCQUFTLElBQUcsUUFBOEIsK0JBQUMsT0FBTztBQUVsRCxrQkFBTSxxQkFBcUIsTUFBTSxvQkFDM0IsUUFBUTtBQUVkLHdCQUFVLFFBQVEsVUFBVTs7QUFHOUIsbUJBQU87Ozs7O1VBR0YsS0FBQTtpQkFBUCxxQkFBbUIsT0FBTztBQUN4QixnQkFBUSxVQUFZLE1BQVosU0FDRixtQkFBbUIsMEJBQTBCLFFBQzdDLHNCQUFzQiw2QkFBNkIsUUFDbkQsUUFBUSxRQUFRLElBQUksU0FBQyxPQUFLO0FBQUsscUJBQUEsTUFBSSxRQUFDLFVBQVU7Z0JBQzlDLFFBQVEsSUFBSSxNQUFNLE9BQU8sa0JBQWtCO0FBRWpELG1CQUFPOzs7O1VBR0YsS0FBQTtpQkFBUCxtQkFBaUIsT0FBTyxPQUFPO0FBQzdCLGdCQUFNLG1CQUFtQiwwQkFBMEIsUUFDN0Msc0JBQXNCLDZCQUE2QixRQUNuRCxRQUFRLElBQUksTUFBTSxPQUFPLGtCQUFrQjtBQUVqRCxtQkFBTzs7OztVQUdGLEtBQUE7aUJBQVAscUJBQW1CLE9BQU8sU0FBUztBQUNqQyxnQkFBTSxRQUFRLFFBQVEsSUFBSSxTQUFDLE9BQUs7QUFBSyxxQkFBQSxNQUFJLFFBQUMsVUFBVTtnQkFDOUMsbUJBQW1CLDBCQUEwQixRQUM3QyxzQkFBc0IsNkJBQTZCLFFBQ25ELFFBQVEsSUFBSSxNQUFNLE9BQU8sa0JBQWtCO0FBRWpELG1CQUFPOzs7Ozs7c0JBOUZVO3VDQWtHYyxPQUFPO0FBQ3hDLFVBQVEsd0JBQXFGLE1BQXJGLHVCQUF1Qiw2QkFBOEQsTUFBOUQsNEJBQTRCLGdDQUFrQyxNQUFsQywrQkFDckQsbUJBQW1CO1FBQ2pCO1FBQ0E7UUFDQTs7QUFHUixhQUFPOzswQ0FHNkIsT0FBTztBQUMzQyxVQUFRLGlCQU1tQyxNQU5uQyxnQkFDQSxrQkFLbUMsTUFMbkMsaUJBQ0EseUJBSW1DLE1BSm5DLHdCQUNBLHlCQUdtQyxNQUhuQyx3QkFDQSwrQkFFbUMsTUFGbkMsOEJBQ0EsaUNBQ21DLE1BRG5DLGdDQUNBLGlDQUFtQyxNQUFuQyxnQ0FDSixzQkFBc0I7UUFDcEI7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O0FBR04sYUFBTzs7Ozs7QUN0SVQ7Ozs7OztBQUVrQixRQUFBLFNBQVUsdUJBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFNUIsUUFBTSxjQUFjO1FBRUMsc0JBQU4seUJBQVEsT0FBQTs7O3NDQUFpQjs7Ozs7O1VBQ3RDLEtBQUE7aUJBQUEsZUFBTSxPQUFPLGVBQWUsYUFBYTtBQUFFLG1CQUFNLEtBQUEsZ0JBRDlCLHFCQUFtQixZQUNrQixTQUFOLE1BQUssS0FBQSxNQUFPLE9BQU8sZUFBZSxhQUFhOzs7OztVQUUxRixLQUFBO2lCQUFQLGVBQWEsT0FBTyxTQUFTO0FBQUUsbUJBQU8sT0FBSyxRQUFDLE1BQU0sT0FBTyxTQUFTOzs7O1VBRTNELEtBQUE7aUJBQVAscUJBQW1CLE9BQU8sU0FBUztBQUFFLG1CQUFPLE9BQUssUUFBQyxZQUFZLE9BQU8sU0FBUzs7OztVQUV2RSxLQUFBO2lCQUFQLDRCQUEwQixPQUFPLFNBQVMsTUFBTTtBQUFFLG1CQUFPLE9BQUssUUFBQyxtQkFBbUIsT0FBTyxTQUFTLE1BQU07Ozs7O01BUHpELE9BQUs7c0JBQWpDOzs7O0FDTnJCOzs7Ozs7QUFFZ0MsUUFBQSxrQkFBNEIsdUJBQUE7QUFFN0IsUUFBQSxTQUFhOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztRQUV2QixrQkFBTix5QkFBUSxxQkFBQTs7O2tDQUFhOzs7Ozs7VUFDbEMsS0FBQTtpQkFBQSxrQkFBUztBQUNQLGdCQUFNLE9BQU8sS0FBSztBQUVsQixtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsZUFBTSxlQUFlLGFBQWE7QUFBRSxtQkFBTSxLQUFBLGdCQVB2QixpQkFBZSxZQU9lLFNBQU4sTUFBSyxLQUFBLE1BQU8sa0JBQWlCLGVBQWU7Ozs7O1VBTWhGLEtBQUE7aUJBQVAsZUFBYSxTQUFTO0FBQUUsbUJBQU8sZ0JBQW1CLFFBQUMsTUFBTSxrQkFBaUI7Ozs7VUFFbkUsS0FBQTtpQkFBUCxxQkFBbUIsU0FBUztBQUFFLG1CQUFPLGdCQUFtQixRQUFDLFlBQVksa0JBQWlCOzs7OztNQWYzQyxnQkFBbUI7c0JBQTNDO29CQUFBLGlCQVNaLFFBQU8sT0FBYztvQkFUVCxpQkFXWixxQkFBaUI7Ozs7QUNqQjFCOzs7Ozs7QUFFNkIsUUFBQSxlQUF5Qix1QkFBQTtBQUVoQixRQUFBLFNBQWE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1FBRTlCLHlCQUFOLHlCQUFRLGtCQUFBOzs7eUNBQW9COzs7Ozs7VUFDekMsS0FBQTtpQkFBQSxlQUFNLGVBQWUsYUFBYTtBQUFFLG1CQUFNLEtBQUEsZ0JBRHZCLHdCQUFzQixZQUNRLFNBQU4sTUFBSyxLQUFBLE1BQU8seUJBQXdCLGVBQWU7Ozs7O1VBTXZGLEtBQUE7aUJBQVAsZUFBYSxTQUFTO0FBQUUsbUJBQU8sYUFBZ0IsUUFBQyxNQUFNLHlCQUF3Qjs7OztVQUV2RSxLQUFBO2lCQUFQLHFCQUFtQixTQUFTO0FBQUUsbUJBQU8sYUFBZ0IsUUFBQyxZQUFZLHlCQUF3Qjs7Ozs7TUFUeEMsYUFBZ0I7c0JBQS9DO29CQUFBLHdCQUdaLFFBQU8sT0FBcUI7b0JBSGhCLHdCQUtaLHFCQUFpQjs7OztBQ1gxQjs7Ozs7O0FBRWdDLFFBQUEsa0JBQTRCLHVCQUFBO0FBRTlCLFFBQUEsU0FBYTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7UUFFdEIsK0JBQU4seUJBQVEscUJBQUE7OzsrQ0FBMEI7Ozs7OztVQUMvQyxLQUFBO2lCQUFBLGVBQU0sZUFBZSxhQUFhO0FBQUUsbUJBQU0sS0FBQSxnQkFEdkIsOEJBQTRCLFlBQ0UsU0FBTixNQUFLLEtBQUEsTUFBTywrQkFBOEIsZUFBZTs7OztVQUVwRyxLQUFBO2lCQUFBLGtCQUFTO0FBQ1AsZ0JBQU0sT0FBTyxLQUFLO0FBRWxCLG1CQUFPOzs7OztVQU9GLEtBQUE7aUJBQVAsZUFBYSxTQUFTO0FBQUUsbUJBQU8sZ0JBQW1CLFFBQUMsTUFBTSwrQkFBOEI7Ozs7VUFFaEYsS0FBQTtpQkFBUCxxQkFBbUIsU0FBUztBQUFFLG1CQUFPLGdCQUFtQixRQUFDLFlBQVksK0JBQThCOzs7OztNQWYzQyxnQkFBbUI7c0JBQXhEO29CQUFBLDhCQVNaLFFBQU8sT0FBYTtvQkFUUiw4QkFXWixxQkFBaUI7Ozs7QUNqQjFCOzs7Ozs7QUFFNkIsUUFBQSxlQUF5Qix1QkFBQTtBQUVwQixRQUFBLFNBQWE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1FBRTFCLHFCQUFOLHlCQUFRLGtCQUFBOzs7cUNBQWdCOzs7Ozs7VUFDckMsS0FBQTtpQkFBQSxlQUFNLE9BQU8sZUFBZSxhQUFhO0FBQUUsbUJBQU0sS0FBQSxnQkFEOUIsb0JBQWtCLFlBQ21CLFNBQU4sTUFBSyxLQUFBLE1BQU8sT0FBTyxlQUFlOzs7O1VBRXBGLEtBQUE7aUJBQUEscUJBQVk7QUFDVixnQkFBTSxVQUFVLEtBQUssY0FDZixnQkFBZ0IsUUFBUSxRQUN4QixRQUFRLEdBQ1IsTUFBTSxnQkFBZ0IsR0FDdEIsU0FBUyxRQUFRLFVBQVUsT0FBTztBQUV4QyxtQkFBTzs7Ozs7VUFLRixLQUFBO2lCQUFQLGVBQWEsT0FBTyxTQUFTO0FBQUUsbUJBQU8sYUFBZ0IsUUFBQyxNQUFNLE9BQU87Ozs7VUFFN0QsS0FBQTtpQkFBUCxxQkFBbUIsT0FBTyxTQUFTO0FBQUUsbUJBQU8sYUFBZ0IsUUFBQyxZQUFZLE9BQU87Ozs7O01BakJsQyxhQUFnQjtzQkFBM0M7b0JBQUEsb0JBYVosUUFBTyxPQUFpQjs7OztBQ25CakM7Ozs7OztBQUUrQixRQUFBLGlCQUFpQyx1QkFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7UUFFM0MsaUNBQU4seUJBQVEsb0JBQUE7OztpREFBNEI7Ozs7OztVQUNqRCxLQUFBO2lCQUFBLGVBQU0sZUFBZSxhQUFhO0FBQUUsbUJBQU0sS0FBQSxnQkFEdkIsZ0NBQThCLFlBQ0EsU0FBTixNQUFLLEtBQUEsTUFBTyxpQ0FBZ0MsZUFBZTs7Ozs7VUFJL0YsS0FBQTtpQkFBUCxlQUFhLFNBQVM7QUFBRSxtQkFBTyxlQUFrQixRQUFDLE1BQU0saUNBQWdDOzs7O1VBRWpGLEtBQUE7aUJBQVAscUJBQW1CLFNBQVM7QUFBRSxtQkFBTyxlQUFrQixRQUFDLFlBQVksaUNBQWdDOzs7OztNQVAxQyxlQUFrQjtzQkFBekQ7b0JBQUEsZ0NBR1oscUJBQWlCOzs7O0FDUDFCOzs7Ozs7QUFFb0IsUUFBQSxXQUFXLHVCQUFBO0FBQ1AsUUFBQSxTQUFpQix1QkFBQTtBQUNiLFFBQUEsY0FBb0MsdUJBQUE7QUFDN0IsUUFBQSxxQkFBd0MsdUJBQUE7QUFDbEMsUUFBQSxhQUFtQyx1QkFBQTtBQUNqQyxRQUFBLGdCQUFpRCx1QkFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7UUFFdkUsV0FBTix5QkFBUSxhQUFBOzs7MkJBQU07Ozs7OztVQUMzQixLQUFBO2lCQUFBLHVCQUFjLEtBQUs7QUFDakIsZ0JBQU0sVUFBVSxLQUNWLFNBQU0sS0FBQSxnQkFISyxVQUFRLFlBR0osWUFBTixNQUFLLEtBQUEsTUFBVTtBQUU5QixtQkFBTzs7Ozs7VUF5QkYsS0FBQTtpQkFBUCx1QkFBcUI7QUFBRSxtQkFBTyxPQUFXLFFBQUMsWUFBWTs7OztVQUUvQyxLQUFBO2lCQUFQLG1CQUFpQixPQUFPO0FBQUUsbUJBQU8sT0FBVyxRQUFDLFVBQVUsV0FBVTs7OztVQUUxRCxLQUFBO2lCQUFQLHFCQUFtQixTQUFTO0FBQUUsbUJBQU8sT0FBVyxRQUFDLFlBQVksV0FBVTs7Ozs7TUFsQ25DLE9BQVc7c0JBQTVCO29CQUFBLFVBUVosV0FBVSxTQUFPO29CQVJMLFVBVVosa0JBQWlCLFdBQTRCO29CQVZqQyxVQVlaLG1CQUFrQixZQUFlO29CQVpyQixVQWNaLHlCQUF3QjtvQkFkWixVQWdCWiwwQkFBeUIsbUJBQXNCO29CQWhCbkMsVUFrQlosMEJBQXlCO29CQWxCYixVQW9CWiw4QkFBNkI7b0JBcEJqQixVQXNCWixnQ0FBK0I7b0JBdEJuQixVQXdCWixpQ0FBZ0M7b0JBeEJwQixVQTBCWixrQ0FBaUM7b0JBMUJyQixVQTRCWixrQ0FBaUMsY0FBOEI7Ozs7QUNyQ3hFOzs7Ozs7QUFFQSxRQUFNLFVBQVU7TUFDZDtRQUNFLE9BQVM7O01BRVg7UUFDRSxTQUFXOztNQUViO1FBQ0UsVUFBWTs7TUFFZDtRQUNFLFlBQWM7OzttQkFJSDs7Ozs7QUNqQmY7Ozs7OztBQUUrQixRQUFBLGlCQUFpQyx1QkFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7UUFFM0MsaUNBQU4seUJBQVEsb0JBQUE7OztpREFBNEI7Ozs7OztVQUNqRCxLQUFBO2lCQUFBLGVBQU0sZUFBZSxhQUFhO0FBQUUsbUJBQU0sS0FBQSxnQkFEdkIsZ0NBQThCLFlBQ0EsU0FBTixNQUFLLEtBQUEsTUFBTyxpQ0FBZ0MsZUFBZTs7Ozs7VUFJL0YsS0FBQTtpQkFBUCxlQUFhLFNBQVM7QUFBRSxtQkFBTyxlQUFrQixRQUFDLE1BQU0saUNBQWdDOzs7O1VBRWpGLEtBQUE7aUJBQVAscUJBQW1CLFNBQVM7QUFBRSxtQkFBTyxlQUFrQixRQUFDLFlBQVksaUNBQWdDOzs7OztNQVAxQyxlQUFrQjtzQkFBekQ7b0JBQUEsZ0NBR1oscUJBQWlCOzs7O0FDUDFCOzs7Ozs7QUFFZ0MsUUFBQSxrQkFBK0IsdUJBQUE7QUFFekIsUUFBQSxTQUFnQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7UUFFakMseUJBQU4seUJBQVEscUJBQUE7Ozt5Q0FBb0I7Ozs7OztVQUN6QyxLQUFBO2lCQUFBLGVBQU0sT0FBTyxlQUFlLGFBQWE7QUFBRSxtQkFBTSxLQUFBLGdCQUQ5Qix3QkFBc0IsWUFDZSxTQUFOLE1BQUssS0FBQSxNQUFPLE9BQU8sZUFBZTs7OztVQUVwRixLQUFBO2lCQUFBLGlDQUF3QjtBQUN0QixnQkFBTSxzQkFBc0I7QUFFNUIsbUJBQU87Ozs7O1VBS0YsS0FBQTtpQkFBUCxlQUFhLE9BQU8sU0FBUztBQUFFLG1CQUFPLGdCQUFtQixRQUFDLE1BQU0sT0FBTzs7OztVQUVoRSxLQUFBO2lCQUFQLHFCQUFtQixPQUFPLFNBQVM7QUFBRSxtQkFBTyxnQkFBbUIsUUFBQyxZQUFZLE9BQU87Ozs7O01BYmpDLGdCQUFtQjtzQkFBbEQ7b0JBQUEsd0JBU1osUUFBTyxPQUFxQjs7OztBQ2ZyQzs7Ozs7O0FBRW1DLFFBQUEsY0FBcUQsdUJBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1FBRW5FLG9DQUFOLHlCQUFRLHdCQUFBOzs7b0RBQStCOzs7Ozs7VUFDcEQsS0FBQTtpQkFBQSxlQUFNLGVBQWUsYUFBYTtBQUFFLG1CQUFNLEtBQUEsZ0JBRHZCLG1DQUFpQyxZQUNILFNBQU4sTUFBSyxLQUFBLE1BQU8sb0NBQW1DLGVBQWU7Ozs7O1VBSWxHLEtBQUE7aUJBQVAsZUFBYSxTQUFTO0FBQUUsbUJBQU8sWUFBc0IsUUFBQyxNQUFNLG9DQUFtQzs7OztVQUV4RixLQUFBO2lCQUFQLHFCQUFtQixTQUFTO0FBQUUsbUJBQU8sWUFBc0IsUUFBQyxZQUFZLG9DQUFtQzs7Ozs7TUFQOUMsWUFBc0I7c0JBQWhFO29CQUFBLG1DQUdaLHFCQUFpQjs7OztBQ1AxQjs7Ozs7O0FBRWdDLFFBQUEsa0JBQStCLHVCQUFBO0FBRTFCLFFBQUEsU0FBZ0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1FBRWhDLHNDQUFOLHlCQUFRLHFCQUFBOzs7c0RBQWlDOzs7Ozs7VUFDdEQsS0FBQTtpQkFBQSxlQUFNLGVBQWUsYUFBYTtBQUFFLG1CQUFNLEtBQUEsZ0JBRHZCLHFDQUFtQyxZQUNMLFNBQU4sTUFBSyxLQUFBLE1BQU8sc0NBQXFDLGVBQWU7Ozs7VUFFM0csS0FBQTtpQkFBQSxrQkFBUztBQUNQLGdCQUFNLE9BQU8sS0FBSztBQUVsQixtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsaUNBQXdCO0FBQ3RCLGdCQUFNLHNCQUFzQjtBQUU1QixtQkFBTzs7Ozs7VUFPRixLQUFBO2lCQUFQLGVBQWEsU0FBUztBQUFFLG1CQUFPLGdCQUFtQixRQUFDLE1BQU0sc0NBQXFDOzs7O1VBRXZGLEtBQUE7aUJBQVAscUJBQW1CLFNBQVM7QUFBRSxtQkFBTyxnQkFBbUIsUUFBQyxZQUFZLHNDQUFxQzs7Ozs7TUFyQjNDLGdCQUFtQjtzQkFBL0Q7b0JBQUEscUNBZVosUUFBTyxPQUFvQjtvQkFmZixxQ0FpQloscUJBQWlCOzs7O0FDdkIxQjs7Ozs7O0FBRWdDLFFBQUEsa0JBQWtDLHVCQUFBO0FBRXhCLFFBQUEsU0FBbUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1FBRXhDLDZCQUFOLHlCQUFRLHFCQUFBOzs7NkNBQXdCOzs7Ozs7VUFDN0MsS0FBQTtpQkFBQSxlQUFNLE9BQU8sZUFBZSxhQUFhO0FBQUUsbUJBQU0sS0FBQSxnQkFEOUIsNEJBQTBCLFlBQ1csU0FBTixNQUFLLEtBQUEsTUFBTyxPQUFPLGVBQWU7Ozs7VUFFcEYsS0FBQTtpQkFBQSxpQ0FBd0I7QUFDdEIsZ0JBQU0sc0JBQXNCO0FBRTVCLG1CQUFPOzs7OztVQUtGLEtBQUE7aUJBQVAsZUFBYSxPQUFPLFNBQVM7QUFBRSxtQkFBTyxnQkFBbUIsUUFBQyxNQUFNLE9BQU87Ozs7VUFFaEUsS0FBQTtpQkFBUCxxQkFBbUIsT0FBTyxTQUFTO0FBQUUsbUJBQU8sZ0JBQW1CLFFBQUMsWUFBWSxPQUFPOzs7OztNQWI3QixnQkFBbUI7c0JBQXREO29CQUFBLDRCQVNaLFFBQU8sT0FBeUI7Ozs7QUNmekM7Ozs7OztBQUV1QyxRQUFBLFNBQTZELHVCQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztRQUUvRSx3Q0FBTix5QkFBUSw0QkFBQTs7O3dEQUFtQzs7Ozs7O1VBQ3hELEtBQUE7aUJBQUEsZUFBTSxlQUFlLGFBQWE7QUFBRSxtQkFBTSxLQUFBLGdCQUR2Qix1Q0FBcUMsWUFDUCxTQUFOLE1BQUssS0FBQSxNQUFPLHdDQUF1QyxlQUFlOzs7OztVQUl0RyxLQUFBO2lCQUFQLGVBQWEsU0FBUztBQUFFLG1CQUFPLE9BQTBCLFFBQUMsTUFBTSx3Q0FBdUM7Ozs7VUFFaEcsS0FBQTtpQkFBUCxxQkFBbUIsU0FBUztBQUFFLG1CQUFPLE9BQTBCLFFBQUMsWUFBWSx3Q0FBdUM7Ozs7O01BUGxELE9BQTBCO3NCQUF4RTtvQkFBQSx1Q0FHWixxQkFBaUI7Ozs7QUNQMUI7Ozs7OztBQUVnQyxRQUFBLGtCQUFrQyx1QkFBQTtBQUV0QixRQUFBLFNBQW1COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztRQUUxQywrQkFBTix5QkFBUSxxQkFBQTs7OytDQUEwQjs7Ozs7O1VBQy9DLEtBQUE7aUJBQUEsZUFBTSxPQUFPLGVBQWUsYUFBYTtBQUFFLG1CQUFNLEtBQUEsZ0JBRDlCLDhCQUE0QixZQUNTLFNBQU4sTUFBSyxLQUFBLE1BQU8sT0FBTyxlQUFlOzs7O1VBRXBGLEtBQUE7aUJBQUEsaUNBQXdCO0FBQ3RCLGdCQUFNLHNCQUFzQjtBQUU1QixtQkFBTzs7Ozs7VUFLRixLQUFBO2lCQUFQLGVBQWEsT0FBTyxTQUFTO0FBQUUsbUJBQU8sZ0JBQW1CLFFBQUMsTUFBTSxPQUFPOzs7O1VBRWhFLEtBQUE7aUJBQVAscUJBQW1CLE9BQU8sU0FBUztBQUFFLG1CQUFPLGdCQUFtQixRQUFDLFlBQVksT0FBTzs7Ozs7TUFiM0IsZ0JBQW1CO3NCQUF4RDtvQkFBQSw4QkFTWixRQUFPLE9BQTJCOzs7O0FDZjNDOzs7Ozs7QUFFeUMsUUFBQSxXQUErRCx1QkFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7UUFFbkYsMENBQU4seUJBQVEsOEJBQUE7OzswREFBcUM7Ozs7OztVQUMxRCxLQUFBO2lCQUFBLGVBQU0sZUFBZSxhQUFhO0FBQUUsbUJBQU0sS0FBQSxnQkFEdkIseUNBQXVDLFlBQ1QsU0FBTixNQUFLLEtBQUEsTUFBTywwQ0FBeUMsZUFBZTs7Ozs7VUFJeEcsS0FBQTtpQkFBUCxlQUFhLFNBQVM7QUFBRSxtQkFBTyxTQUE0QixRQUFDLE1BQU0sMENBQXlDOzs7O1VBRXBHLEtBQUE7aUJBQVAscUJBQW1CLFNBQVM7QUFBRSxtQkFBTyxTQUE0QixRQUFDLFlBQVksMENBQXlDOzs7OztNQVBwRCxTQUE0QjtzQkFBNUU7b0JBQUEseUNBR1oscUJBQWlCOzs7O0FDUDFCOzs7Ozs7QUFFZ0MsUUFBQSxrQkFBa0MsdUJBQUE7QUFFckIsUUFBQSxTQUFtQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7UUFFM0MsZ0NBQU4seUJBQVEscUJBQUE7OztnREFBMkI7Ozs7OztVQUNoRCxLQUFBO2lCQUFBLGVBQU0sT0FBTyxlQUFlLGFBQWE7QUFBRSxtQkFBTSxLQUFBLGdCQUQ5QiwrQkFBNkIsWUFDUSxTQUFOLE1BQUssS0FBQSxNQUFPLE9BQU8sZUFBZTs7OztVQUVwRixLQUFBO2lCQUFBLGlDQUF3QjtBQUN0QixnQkFBTSxzQkFBc0I7QUFFNUIsbUJBQU87Ozs7O1VBS0YsS0FBQTtpQkFBUCxlQUFhLE9BQU8sU0FBUztBQUFFLG1CQUFPLGdCQUFtQixRQUFDLE1BQU0sT0FBTzs7OztVQUVoRSxLQUFBO2lCQUFQLHFCQUFtQixPQUFPLFNBQVM7QUFBRSxtQkFBTyxnQkFBbUIsUUFBQyxZQUFZLE9BQU87Ozs7O01BYjFCLGdCQUFtQjtzQkFBekQ7b0JBQUEsK0JBU1osUUFBTyxPQUE0Qjs7OztBQ2Y1Qzs7Ozs7O0FBRTBDLFFBQUEsWUFBZ0UsdUJBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1FBRXJGLDJDQUFOLHlCQUFRLCtCQUFBOzs7MkRBQXNDOzs7Ozs7VUFDM0QsS0FBQTtpQkFBQSxlQUFNLGVBQWUsYUFBYTtBQUFFLG1CQUFNLEtBQUEsZ0JBRHZCLDBDQUF3QyxZQUNWLFNBQU4sTUFBSyxLQUFBLE1BQU8sMkNBQTBDLGVBQWU7Ozs7O1VBSXpHLEtBQUE7aUJBQVAsZUFBYSxTQUFTO0FBQUUsbUJBQU8sVUFBNkIsUUFBQyxNQUFNLDJDQUEwQzs7OztVQUV0RyxLQUFBO2lCQUFQLHFCQUFtQixTQUFTO0FBQUUsbUJBQU8sVUFBNkIsUUFBQyxZQUFZLDJDQUEwQzs7Ozs7TUFQckQsVUFBNkI7c0JBQTlFO29CQUFBLDBDQUdaLHFCQUFpQjs7OztBQ1AxQjs7Ozs7O0FBRW9CLFFBQUEsV0FBVyx1QkFBQTtBQUNQLFFBQUEsU0FBaUIsdUJBQUE7QUFDYixRQUFBLGNBQW9DLHVCQUFBO0FBQzdCLFFBQUEscUJBQXdDLHVCQUFBO0FBQ2xDLFFBQUEsYUFBbUMsdUJBQUE7QUFDakMsUUFBQSxnQkFBaUQsdUJBQUE7QUFDakQsUUFBQSxnQkFBaUQsdUJBQUE7QUFDOUMsUUFBQSxlQUF3RCx1QkFBQTtBQUN0RCxRQUFBLGNBQTJDLHVCQUFBO0FBQ3pDLFFBQUEsZ0JBQTZELHVCQUFBO0FBQzNELFFBQUEsZ0JBQStELHVCQUFBO0FBQzlELFFBQUEsZ0JBQWdFLHVCQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1FBRWhHLGFBQU4seUJBQVEsYUFBQTs7OzZCQUFROzs7Ozs7VUF1QnRCLEtBQUE7aUJBQVAsdUJBQXFCO0FBQUUsbUJBQU8sT0FBVyxRQUFDLFlBQVk7Ozs7VUFFL0MsS0FBQTtpQkFBUCxtQkFBaUIsT0FBTztBQUFFLG1CQUFPLE9BQVcsUUFBQyxVQUFVLGFBQVk7Ozs7VUFFNUQsS0FBQTtpQkFBUCxxQkFBbUIsU0FBUztBQUFFLG1CQUFPLE9BQVcsUUFBQyxZQUFZLGFBQVk7Ozs7O01BM0JuQyxPQUFXO3NCQUE5QjtvQkFBQSxZQUNaLFdBQVUsU0FBTztvQkFETCxZQUdaLGtCQUFpQixXQUE0QjtvQkFIakMsWUFLWixtQkFBa0IsWUFBZTtvQkFMckIsWUFPWix5QkFBd0IsWUFBbUM7b0JBUC9DLFlBU1osMEJBQXlCLG1CQUFzQjtvQkFUbkMsWUFXWiwwQkFBeUIsYUFBaUM7b0JBWDlDLFlBYVosOEJBQTZCLGNBQXFDO29CQWJ0RCxZQWVaLGdDQUErQixjQUF1QztvQkFmMUQsWUFpQlosaUNBQWdDLGNBQXdDO29CQWpCNUQsWUFtQlosa0NBQWlDLGNBQThCO29CQW5CbkQsWUFxQlosa0NBQWlDLGNBQThCOzs7O0FDcEN4RTs7Ozs7O0FBRTZCLFFBQUEsZUFBeUIsdUJBQUE7QUFFeEIsUUFBQSxTQUFhOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztRQUV0Qiw0QkFBTix5QkFBUSxrQkFBQTs7OzRDQUF1Qjs7Ozs7O1VBQzVDLEtBQUE7aUJBQUEsZUFBTSxlQUFlLGFBQWE7QUFBRSxtQkFBTSxLQUFBLGdCQUR2QiwyQkFBeUIsWUFDSyxTQUFOLE1BQUssS0FBQSxNQUFPLDRCQUEyQixlQUFlOzs7O1VBRWpHLEtBQUE7aUJBQUEsa0JBQVM7QUFDUCxnQkFBTSxPQUFPLEtBQUs7QUFFbEIsbUJBQU87Ozs7O1VBT0YsS0FBQTtpQkFBUCxlQUFhLFNBQVM7QUFBRSxtQkFBTyxhQUFnQixRQUFDLE1BQU0sNEJBQTJCOzs7O1VBRTFFLEtBQUE7aUJBQVAscUJBQW1CLFNBQVM7QUFBRSxtQkFBTyxhQUFnQixRQUFDLFlBQVksNEJBQTJCOzs7OztNQWZ4QyxhQUFnQjtzQkFBbEQ7b0JBQUEsMkJBU1osUUFBTyxPQUFhO29CQVRSLDJCQVdaLHFCQUFpQjs7OztBQ2pCMUI7Ozs7OztBQUU2QixRQUFBLGVBQTRCLHVCQUFBO0FBRXBCLFFBQUEsU0FBZ0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1FBRWhDLG1DQUFOLHlCQUFRLGtCQUFBOzs7bURBQThCOzs7Ozs7VUFDbkQsS0FBQTtpQkFBQSxlQUFNLGVBQWUsYUFBYTtBQUFFLG1CQUFNLEtBQUEsZ0JBRHZCLGtDQUFnQyxZQUNGLFNBQU4sTUFBSyxLQUFBLE1BQU8sbUNBQWtDLGVBQWU7Ozs7VUFFeEcsS0FBQTtpQkFBQSxrQkFBUztBQUNQLGdCQUFNLE9BQU8sS0FBSztBQUVsQixtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsaUNBQXdCO0FBQ3RCLGdCQUFNLHNCQUFzQjtBQUU1QixtQkFBTzs7Ozs7VUFPRixLQUFBO2lCQUFQLGVBQWEsU0FBUztBQUFFLG1CQUFPLGFBQWdCLFFBQUMsTUFBTSxtQ0FBa0M7Ozs7VUFFakYsS0FBQTtpQkFBUCxxQkFBbUIsU0FBUztBQUFFLG1CQUFPLGFBQWdCLFFBQUMsWUFBWSxtQ0FBa0M7Ozs7O01BckJ4QyxhQUFnQjtzQkFBekQ7b0JBQUEsa0NBZVosUUFBTyxPQUFvQjtvQkFmZixrQ0FpQloscUJBQWlCOzs7O0FDdkIxQjs7Ozs7O0FBRW1DLFFBQUEsY0FBcUQsdUJBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1FBRW5FLCtCQUFOLHlCQUFRLHdCQUFBOzs7K0NBQTBCOzs7Ozs7VUFDL0MsS0FBQTtpQkFBQSxlQUFNLGVBQWUsYUFBYTtBQUFFLG1CQUFNLEtBQUEsZ0JBRHZCLDhCQUE0QixZQUNFLFNBQU4sTUFBSyxLQUFBLE1BQU8sK0JBQThCLGVBQWU7Ozs7O1VBSTdGLEtBQUE7aUJBQVAsZUFBYSxTQUFTO0FBQUUsbUJBQU8sWUFBc0IsUUFBQyxNQUFNLCtCQUE4Qjs7OztVQUVuRixLQUFBO2lCQUFQLHFCQUFtQixTQUFTO0FBQUUsbUJBQU8sWUFBc0IsUUFBQyxZQUFZLCtCQUE4Qjs7Ozs7TUFQOUMsWUFBc0I7c0JBQTNEO29CQUFBLDhCQUdaLHFCQUFpQjs7OztBQ1AxQjs7Ozs7O0FBRXVDLFFBQUEsU0FBNkQsdUJBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1FBRS9FLG1DQUFOLHlCQUFRLDRCQUFBOzs7bURBQThCOzs7Ozs7VUFDbkQsS0FBQTtpQkFBQSxlQUFNLGVBQWUsYUFBYTtBQUFFLG1CQUFNLEtBQUEsZ0JBRHZCLGtDQUFnQyxZQUNGLFNBQU4sTUFBSyxLQUFBLE1BQU8sbUNBQWtDLGVBQWU7Ozs7O1VBSWpHLEtBQUE7aUJBQVAsZUFBYSxTQUFTO0FBQUUsbUJBQU8sT0FBMEIsUUFBQyxNQUFNLG1DQUFrQzs7OztVQUUzRixLQUFBO2lCQUFQLHFCQUFtQixTQUFTO0FBQUUsbUJBQU8sT0FBMEIsUUFBQyxZQUFZLG1DQUFrQzs7Ozs7TUFQbEQsT0FBMEI7c0JBQW5FO29CQUFBLGtDQUdaLHFCQUFpQjs7OztBQ1AxQjs7Ozs7O0FBRXlDLFFBQUEsV0FBK0QsdUJBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1FBRW5GLHFDQUFOLHlCQUFRLDhCQUFBOzs7cURBQWdDOzs7Ozs7VUFDckQsS0FBQTtpQkFBQSxlQUFNLGVBQWUsYUFBYTtBQUFFLG1CQUFNLEtBQUEsZ0JBRHZCLG9DQUFrQyxZQUNKLFNBQU4sTUFBSyxLQUFBLE1BQU8scUNBQW9DLGVBQWU7Ozs7O1VBSW5HLEtBQUE7aUJBQVAsZUFBYSxTQUFTO0FBQUUsbUJBQU8sU0FBNEIsUUFBQyxNQUFNLHFDQUFvQzs7OztVQUUvRixLQUFBO2lCQUFQLHFCQUFtQixTQUFTO0FBQUUsbUJBQU8sU0FBNEIsUUFBQyxZQUFZLHFDQUFvQzs7Ozs7TUFQcEQsU0FBNEI7c0JBQXZFO29CQUFBLG9DQUdaLHFCQUFpQjs7OztBQ1AxQjs7Ozs7O0FBRTBDLFFBQUEsWUFBZ0UsdUJBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1FBRXJGLHNDQUFOLHlCQUFRLCtCQUFBOzs7c0RBQWlDOzs7Ozs7VUFDdEQsS0FBQTtpQkFBQSxlQUFNLGVBQWUsYUFBYTtBQUFFLG1CQUFNLEtBQUEsZ0JBRHZCLHFDQUFtQyxZQUNMLFNBQU4sTUFBSyxLQUFBLE1BQU8sc0NBQXFDLGVBQWU7Ozs7O1VBSXBHLEtBQUE7aUJBQVAsZUFBYSxTQUFTO0FBQUUsbUJBQU8sVUFBNkIsUUFBQyxNQUFNLHNDQUFxQzs7OztVQUVqRyxLQUFBO2lCQUFQLHFCQUFtQixTQUFTO0FBQUUsbUJBQU8sVUFBNkIsUUFBQyxZQUFZLHNDQUFxQzs7Ozs7TUFQckQsVUFBNkI7c0JBQXpFO29CQUFBLHFDQUdaLHFCQUFpQjs7OztBQ1AxQjs7Ozs7bUNBRW9CLFFBQUk7OztxQkFBZjs7O21DQUNXLFNBQUs7OztzQkFBaEI7OzttQ0FDVyxrQkFBYzs7OytCQUF6Qjs7O21DQUVXLFlBQVE7OztzQkFBbkI7OzttQ0FDVyxjQUFVOzs7dUJBQXJCOzs7bUNBQ1csZUFBVzs7O3VCQUF0Qjs7O21DQUVXLG9CQUFnQjs7OzRCQUEzQjs7O21DQUNXLHVCQUFtQjs7OytCQUE5Qjs7O21DQUNXLDZCQUF5Qjs7OzBCQUFwQzs7O21DQUNXLGdDQUE0Qjs7OzJCQUF2Qzs7O21DQUNXLG9DQUFnQzs7OzJCQUEzQzs7O21DQUNXLHVDQUFtQzs7OzJCQUE5Qzs7O21DQUVXLG1CQUFlOzs7MkJBQTFCOzs7bUNBRVcsc0JBQWtCOzs7OEJBQTdCOzs7bUNBQ1csMEJBQXNCOzs7a0NBQWpDOzs7bUNBQ1csa0NBQThCOzs7NkJBQXpDOzs7bUNBQ1csa0NBQThCOzs7NkJBQXpDOzs7bUNBRVcsMEJBQXNCOzs7MkJBQWpDOzs7bUNBQ1csOEJBQTBCOzs7c0JBQXJDOzs7bUNBQ1csZ0NBQTRCOzs7d0JBQXZDOzs7bUNBQ1csaUNBQTZCOzs7eUJBQXhDOzs7bUNBQ1csZ0NBQTRCOzs7dUJBQXZDOzs7bUNBQ1csb0NBQWdDOzs7d0JBQTNDOzs7bUNBQ1csc0NBQWtDOzs7d0JBQTdDOzs7bUNBQ1csdUNBQW1DOzs7d0JBQTlDOzs7bUNBQ1cscUNBQWlDOzs7NEJBQTVDOzs7bUNBQ1cseUNBQXFDOzs7NkJBQWhEOzs7bUNBQ1csMkNBQXVDOzs7NkJBQWxEOzs7bUNBQ1csNENBQXdDOzs7NkJBQW5EOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbkNUOzs7Ozs7QUFFQSxRQUFNLFVBQVU7TUFFZDtRQUFFLFFBQVU7O01BRVo7UUFBRSxTQUFXOztNQUViO1FBQUUsWUFBYzs7TUFFaEI7UUFBRSxXQUFhOztNQUVmO1FBQUUsVUFBWTs7TUFFZDtRQUFFLFFBQVU7O01BRVo7UUFBRSxPQUFTOztNQUVYO1FBQUUsTUFBUTs7TUFFVjtRQUFFLE1BQVE7O01BRVY7UUFBRSxLQUFPOztNQUVUO1FBQUUsUUFBVTs7TUFFWjtRQUFFLFNBQVc7O01BRWI7UUFBRSxVQUFZOztNQUVkO1FBQUUsWUFBYzs7TUFFaEI7UUFBRSxrQkFBa0I7O01BRXBCO1FBQUUsWUFBYzs7O21CQUlIOzs7OztBQ3RDZjs7Ozs7O0FBRTJHLFFBQUEsZUFBYztBQUVyRyxRQUFBLFdBQVcsdUJBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7UUFFVixXQUFOLHlCQUFRLGFBQUE7OzsyQkFBTTs7Ozs7O1VBdUJwQixLQUFBO2lCQUFQLHVCQUFxQjtBQUFFLG1CQUFPLGFBQVcsWUFBQyxZQUFZOzs7O1VBRS9DLEtBQUE7aUJBQVAsbUJBQWlCLE9BQU87QUFBRSxtQkFBTyxhQUFXLFlBQUMsVUFBVSxXQUFVOzs7O1VBRTFELEtBQUE7aUJBQVAscUJBQW1CLFNBQVM7QUFBRSxtQkFBTyxhQUFXLFlBQUMsWUFBWSxXQUFVOzs7OztNQTNCbkMsYUFBVztvQkFBNUIsVUFDWixXQUFVLFNBQU87b0JBREwsVUFHWixrQkFBaUIsYUFBNEI7b0JBSGpDLFVBS1osbUJBQWtCLGFBQWU7b0JBTHJCLFVBT1oseUJBQXdCO29CQVBaLFVBU1osMEJBQXlCO29CQVRiLFVBV1osMEJBQXlCO29CQVhiLFVBYVosOEJBQTZCO29CQWJqQixVQWVaLGdDQUErQjtvQkFmbkIsVUFpQlosaUNBQWdDO29CQWpCcEIsVUFtQlosa0NBQWlDO29CQW5CckIsVUFxQlosa0NBQWlDLGFBQThCO3NCQXJCbkQ7Ozs7QUNOckI7Ozs7OztBQUVBLFFBQU0sTUFBTzttQkE4RUU7Ozs7O0FDaEZmOzs7Ozs7QUFFTyxRQUFNLGVBQWU7WUFBZixlQUFBOzs7O0FDRmI7Ozs7O1lBUWdCLDJCQUFBO0FBTlcsUUFBQSxhQUFXO0FBRVQsUUFBQSxhQUFjO0FBRTNDLFFBQVEsa0JBQW9CLFdBQVUsV0FBOUI7c0NBRWlDLGVBQWU7QUFDdEQsVUFBSSxVQUFVLFdBQVk7QUFFMUIsZUFBUyxXQUFXLEdBQUcsV0FBVyxlQUFlLFlBQVk7QUFDM0QsbUJBQVc7O0FBR2IsYUFBTzs7Ozs7QUNmVDs7Ozs7O0FBRTZCLFFBQUEsYUFBYTtBQUNELFFBQUEsVUFBb0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1FBRXhDLE9BQU4sMkJBQVE7cUJBQ1QsTUFBTSxhQUFhLGlCQUFlOztBQUM1QyxhQUFLLE9BQU87QUFDWixhQUFLLGNBQWM7QUFDbkIsYUFBSyxrQkFBa0I7Ozs7VUFHekIsS0FBQTtpQkFBQSxtQkFBVTtBQUNSLG1CQUFPLEtBQUs7Ozs7VUFHZCxLQUFBO2lCQUFBLDBCQUFpQjtBQUNmLG1CQUFPLEtBQUs7Ozs7VUFHZCxLQUFBO2lCQUFBLDhCQUFxQjtBQUNuQixtQkFBTyxLQUFLOzs7O1VBR2QsS0FBQTtpQkFBQSxpQkFBUSxNQUFNO0FBQ1osaUJBQUssT0FBTzs7OztVQUdkLEtBQUE7aUJBQUEsd0JBQWUsYUFBYTtBQUMxQixpQkFBSyxjQUFjOzs7O1VBR3JCLEtBQUE7aUJBQUEsNEJBQW1CLGlCQUFpQjtBQUNsQyxpQkFBSyxrQkFBa0I7Ozs7VUFHekIsS0FBQTtpQkFBQSx1QkFBYyxZQUFZLFVBQVU7QUFDbEMsZ0JBQU0sZ0NBQWdDLEtBQUssWUFBWSxTQUFTO0FBRWhFLGdCQUFFLENBQUcsK0JBQStCO0FBQ2xDLGtCQUFJLGFBQWEsUUFBVztBQUMxQixvQkFBTSxvQkFBb0IsS0FBSyxZQUFZO0FBRTNDLDJCQUFXOztBQUdiLGtCQUFNLFFBQVEsVUFDUixjQUFjO0FBRXBCLG1CQUFLLFlBQVksT0FBTyxPQUFPLGFBQWE7Ozs7O1VBSWhELEtBQUE7aUJBQUEsMEJBQWlCLFlBQVk7QUFDM0IsZ0JBQU0sZ0NBQWdDLEtBQUssWUFBWSxTQUFTO0FBRWhFLGdCQUFJLCtCQUErQjtBQUNqQyxrQkFBTSxrQkFBa0IsS0FBSyxZQUFZLFFBQVEsYUFDM0MsUUFBUSxpQkFDUixjQUFjO0FBRXBCLG1CQUFLLFlBQVksT0FBTyxPQUFPOzs7OztVQUluQyxLQUFBO2lCQUFBLDJCQUFrQixlQUFlLGVBQWU7QUFDOUMsZ0JBQU0scUJBQXFCLEtBQUssWUFBWSxRQUFRO0FBRXBELGdCQUFJLHFCQUFrQixJQUFPO0FBQzNCLGtCQUFNLFFBQVEsb0JBQ1IsY0FBYztBQUVwQixtQkFBSyxZQUFZLE9BQU8sT0FBTyxhQUFhOzs7OztVQUloRCxLQUFBO2lCQUFBLGVBQU0sT0FBTyxVQUFVOztBQUNyQixnQkFBSSxXQUFXO0FBRWYsa0JBQU07QUFFTixnQkFBTSxVQUFVLE1BQU07QUFFdEIsZ0JBQUksU0FBUztBQUNYLG9CQUFNLElBQUksTUFBTyx1Q0FBZ0QsT0FBVixLQUFLLE1BQUs7O0FBR25FLGdCQUFJLFFBQ0E7QUFFSixpQkFBSyxZQUFZLEtBQUssU0FBQyxZQUFlO0FBQ3BDLGdDQUFrQjtBQUVsQix1QkFBTSxNQUFRLGdCQUFnQixZQUFZLGlCQUFpQixPQUFPO0FBRWxFLGtCQUFJLFFBQVE7QUFDVix1QkFBTzs7O0FBSVgsZ0JBQUksUUFBUTtBQUNWLGtCQUFNLFdBQVcsS0FBSyxNQUNoQixhQUFhLGlCQUNiLGtCQUFrQixLQUFLLGdCQUFnQiwwQkFBMEIsVUFBVTtBQUVqRix5QkFBVzs7QUFHYixrQkFBTTtBQUVOLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSx5QkFBZ0IsWUFBWSxPQUFPLE9BQU8sVUFBVTtBQUNsRCxnQkFBSTtBQUVKLGdCQUFNLGFBQWEsTUFBTTtBQUV6QixxQkFBUyxXQUFXLE1BQU0sT0FBTyxPQUFPO0FBRXhDLGdCQUFFLENBQUcsUUFBUTtBQUNYLG9CQUFNLFVBQVU7O0FBR2xCLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxrQkFBUyx1QkFBeUM7Z0JBQWxCLFlBQVMsVUFBQSxTQUFBLEtBQUEsVUFBQSxPQUFBLFNBQUEsVUFBQSxLQUFHO0FBQzFDLGdCQUFNLG9CQUFvQixLQUFLLFlBQVk7QUFFM0Msd0JBQVksYUFBYyxvQkFBb0I7QUFFOUMsZ0JBQU0saUJBQWMsSUFBRyxTQUF3Qix5QkFBQyx3QkFDMUMscUJBQW9CLEtBQUssWUFBWSxPQUFPLFNBQUMsbUJBQW1CLFlBQWU7QUFDN0Usa0JBQU0sbUJBQW1CLFdBQVc7QUFFcEMsa0JBQUksc0JBQXNCLFdBQVksY0FBRTtBQUN0QyxvQ0FBb0I7cUJBQ2Y7QUFDTCxvQ0FBb0IsWUFDRSxHQUVsQyxPQUZvQyxtQkFBa0IsUUFFaEMsT0FBdEIsZ0JBQWUsU0FBd0IsT0FBakIsb0JBQ2MsR0FBeUIsT0FBdkIsbUJBQWtCLE9BQXNCLE9BQWpCOztBQUduRCxxQkFBTztlQUNOLFdBQVksZUFDZixXQUFXLEtBQUssTUFDaEIsaUJBQWlCLFNBQVMsUUFDMUIsZ0JBQWdCLHdCQUF3QixnQkFDeEMsVUFBTyxJQUFHLFNBQXdCLHlCQUFDO0FBRXpDLGdCQUFNLGtCQUFrQixZQUNFLE9BRWIsT0FBZixnQkFBZSxVQUNjLE1BQ3JCLFNBQVUsT0FFTixPQUFaLEtBQUssTUFBc0IsT0FBZixTQUFRLFNBQTJCLE9BQXBCLG9CQUFvQyxPQUFoQjtBQUU3QyxtQkFBTzs7Ozs7VUFHRixLQUFBO2lCQUFQLGtCQUFnQixPQUFPLE1BQU07QUFDM0IsZ0JBQUksU0FBUyxRQUFXO0FBQ3RCLHFCQUFPO0FBQ1Asc0JBQVE7O0FBR1YsZ0JBQU0sT0FBTyxLQUFLLFdBQ1osY0FBYyxLQUFLLGtCQUNuQixrQkFBa0IsS0FBSztBQUU3QixtQkFBTyxJQUFJLE1BQU0sTUFBTSxhQUFhO0FBRXBDLG1CQUFPOzs7Ozs7c0JBNUtVOzs7O0FDTHJCOzs7Ozs7QUFFTyxRQUFNLHdCQUF3QjtZQUF4Qix3QkFBQTs7OztBQ0ZiOzs7Ozs7QUFFc0MsUUFBQSxZQUFZOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztRQUU3QixRQUFOLDJCQUFRO3NCQUNULFNBQVMsUUFBUSxPQUFPLE9BQU8sY0FBWTs7QUFDckQsYUFBSyxVQUFVO0FBQ2YsYUFBSyxTQUFTO0FBQ2hCLGFBQUssUUFBUTtBQUNiLGFBQUssUUFBUTtBQUNYLGFBQUssZUFBZTs7OztVQUd0QixLQUFBO2lCQUFBLHNCQUFhO0FBQ1gsbUJBQU8sS0FBSzs7OztVQUdkLEtBQUE7aUJBQUEscUJBQVk7QUFDVixtQkFBTyxLQUFLOzs7O1VBR2YsS0FBQTtpQkFBQSxvQkFBVztBQUNWLG1CQUFPLEtBQUs7Ozs7VUFHWixLQUFBO2lCQUFBLG9CQUFXO0FBQ1QsbUJBQU8sS0FBSzs7OztVQUdmLEtBQUE7aUJBQUEsMkJBQWtCO0FBQ2pCLG1CQUFPLEtBQUs7Ozs7VUFHYixLQUFBO2lCQUFBLHlCQUFnQjtBQUNiLGdCQUFNLGFBQWEsS0FBSztBQUV4QixtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsd0JBQWU7QUFDYixnQkFBSSxZQUFZO0FBRWhCLGdCQUFNLGVBQWUsS0FBSyxPQUFPO0FBRWpDLGdCQUFJLEtBQUssUUFBUSxjQUFjO0FBQzdCLDBCQUFZLEtBQUssT0FBTyxLQUFLOztBQUcvQixtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsbUNBQTBCO0FBQzFCLGdCQUFJLHVCQUF1QjtBQUUxQixnQkFBTSxlQUFlLEtBQUssT0FBTzttQkFFMUIsS0FBSyxRQUFRLGNBQWM7QUFDakMsa0JBQU0sUUFBUSxLQUFLLE9BQU8sS0FBSyxVQUM3QixtQkFBbUIsTUFBTTtBQUUzQixrQkFBSSxrQkFBa0I7QUFDcEIsb0JBQU0sbUJBQW1CO0FBRTNCLHVDQUF1QjtBQUV2Qjs7O0FBSUYsbUJBQU87Ozs7VUFHUCxLQUFBO2lCQUFBLHNDQUE2QjtBQUMzQixnQkFBSSwyQkFBMkI7QUFFL0IsZ0JBQU0sZUFBZSxLQUFLLE9BQU87QUFFakMsZ0JBQUksS0FBSyxRQUFRLGNBQWM7QUFDN0Isa0JBQU0sWUFBWSxLQUFLLE9BQU8sS0FBSztBQUVuQyx5Q0FBMkIsVUFBVTs7QUFHdkMsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLHFCQUFZO0FBQ1YsZ0JBQU0sVUFBVyxLQUFLLFFBQVEsS0FBSztBQUVuQyxtQkFBTzs7OztVQUdWLEtBQUE7aUJBQUEsbUJBQVUsWUFBWTtBQUNyQixpQkFBSyxRQUFROzs7O1VBR2IsS0FBQTtpQkFBQSxrQkFBUyxPQUFPO0FBQ2QsaUJBQUssUUFBUTs7OztVQUdmLEtBQUE7aUJBQUEseUJBQWdCO0FBQ2QsaUJBQUs7Ozs7VUFHUCxLQUFBO2lCQUFBLHlCQUFnQjtBQUNkLGlCQUFLOzs7OztVQUdBLEtBQUE7aUJBQVAsOEJBQTRCLFFBQVEsU0FBUztBQUMzQyxnQkFBTSxRQUFRLEdBQ2IsUUFBUSxHQUNSLGVBQWUsVUFBcUIsdUJBQ3BDLFFBQVEsSUFBSSxPQUFNLFNBQVMsUUFBUSxPQUFPLE9BQU87QUFFbEQsbUJBQU87Ozs7OztzQkE5R1U7Ozs7QUNKckI7Ozs7O1lBTWdCLE9BQUE7WUFFQSxjQUFBO1lBUUEscUJBQUE7O0FBZGUsUUFBQSxhQUFXO0FBRW5DLFFBQVEsUUFBMEUsV0FBYyxlQUF4RjtBQUFSLFFBQWUsU0FBbUUsV0FBYyxlQUFqRjtBQUFmLFFBQXVCLFFBQTJELFdBQWMsZUFBekU7QUFBdkIsUUFBOEIsT0FBb0QsV0FBYyxlQUFsRTtBQUE5QixRQUFvQyxPQUE4QyxXQUFjLGVBQTVEO0FBQXBDLFFBQTBDLFNBQXdDLFdBQWMsZUFBdEQ7QUFBMUMsUUFBa0QsZUFBZ0MsV0FBYyxlQUE5QztBQUFsRCxRQUFnRSxnQkFBa0IsV0FBYyxlQUFoQztZQUF4RCxRQUFBO1lBQU8sU0FBQTtZQUFRLFFBQUE7WUFBTyxPQUFBO1lBQU0sT0FBQTtZQUFNLFNBQUE7WUFBUSxlQUFBO1lBQWMsZ0JBQUE7a0JBRWxELE9BQU87QUFBRSxhQUFPLE1BQU0sT0FBTyxTQUFDLE9BQU8sT0FBSztBQUFLLGVBQUEsT0FBTzs7O3lCQUUvQyxPQUFPO0FBQ2pDLGNBQVEsTUFBTTtBQUVkLFlBQU07QUFFTixhQUFPOztnQ0FHMEIsT0FBTztBQUN4QyxjQUFRLE1BQU07QUFFZCxZQUFNO0FBRU4sWUFBTTtBQUVOLGFBQU87O29CQUdPLE9BQU87QUFDckIsVUFBTSxRQUFRLEtBQUssTUFBTSxRQUFNLE9BQU8sUUFBTTtBQUU1QyxhQUFPOzs7OztBQzdCVDs7Ozs7O0FBRTJCLFFBQUEsYUFBVztBQUVqQixRQUFBLFNBQW1CO0FBRVgsUUFBQSxhQUFhOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUUxQyxRQUFRLHFCQUF3QyxXQUFVLFdBQWxEO0FBQVIsUUFBNEIsa0JBQW9CLFdBQVUsV0FBOUI7UUFFUCxZQUFOLDJCQUFROzBCQUNULE9BQUs7O0FBQ2YsYUFBSyxRQUFROzs7O1VBR2YsS0FBQTtpQkFBQSxpQkFBUTtBQUNOLGdCQUFNLFFBQVEsS0FBSyxNQUFNLFNBQ25CLFlBQVksSUFBSSxXQUFVO0FBRWhDLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxvQkFBVztBQUNULGdCQUFJO0FBRUosZ0JBQUksY0FBYyxLQUFLLE1BQU07QUFFN0IsZ0JBQUksZ0JBQWdCLEdBQUc7QUFDckIsc0JBQVE7bUJBQ0g7QUFDTCxrQkFBTSxXQUFRLElBQUcsUUFBSSxLQUFDLEtBQUssUUFDckIsaUJBQWlCLFNBQVM7QUFFaEMsc0JBQVE7O0FBR1YsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLG9CQUFXO0FBQ1QsZ0JBQU0sY0FBYyxLQUFLLE1BQU0sUUFDekIsUUFBUTtBQUVkLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxxQkFBWSxVQUFVO0FBQ3BCLGlCQUFLLE1BQU0sUUFBUTs7OztVQUdyQixLQUFBO2lCQUFBLHFCQUFZLFdBQVc7O0FBQ3JCLHNCQUFVLFlBQVksU0FBQyxNQUFTO29CQUN6QixNQUFNLFFBQVE7Ozs7O1VBSXZCLEtBQUE7aUJBQUEsc0JBQWEsV0FBVzs7QUFDdEIsc0JBQVUsWUFBWSxTQUFDLE1BQU0sT0FBVTtvQkFDaEMsTUFBTSxTQUFTLE9BQUksTUFBUSxNQUFNOzs7OztVQUkxQyxLQUFBO2lCQUFBLHVCQUFjLFdBQVc7O0FBQ3ZCLHNCQUFVLFlBQVksU0FBQyxNQUFNLE9BQVU7b0JBQ2hDLE1BQU0sU0FBSyxNQUFTLE1BQU0sU0FBUzs7Ozs7VUFJNUMsS0FBQTtpQkFBQSx3QkFBZSxXQUFXOztBQUN4QixzQkFBVSxZQUFZLFNBQUMsTUFBUztvQkFDekIsTUFBTSxLQUFLOzs7OztVQUlwQixLQUFBO2lCQUFBLHNCQUFhLGdCQUFnQjtBQUMzQixnQkFBTSxRQUFRLEtBQUssWUFDYixpQkFBaUIsT0FDakIsa0JBQWtCLDRCQUE0QjtBQUVwRCxxQkFBUyxRQUFRLEdBQUcsUUFBUSxnQkFBZ0IsU0FBUztBQUNuRCxtQkFBSyxNQUFNLFFBQVE7Ozs7O1VBSXZCLEtBQUE7aUJBQUEsdUJBQWMsaUJBQWlCO0FBQzdCLGdCQUFNLG1CQUFtQiw0QkFBNEIsa0JBQy9DLGNBQWMsS0FBSyxNQUFNO0FBRS9CLHFCQUFTLFFBQVEsR0FBRyxRQUFRLGFBQWEsU0FBUztBQUNoRCxtQkFBSyxNQUFNLFNBQVMsbUJBQW1CLEtBQUssTUFBTTs7Ozs7VUFJdEQsS0FBQTtpQkFBQSx3QkFBZSxrQkFBa0I7QUFDL0IsZ0JBQU0sb0JBQW9CLDRCQUE0QixtQkFDaEQsY0FBYyxLQUFLLE1BQU07QUFFL0IscUJBQVMsUUFBUSxHQUFHLFFBQVEsYUFBYSxTQUFTO0FBQ2hELG1CQUFLLE1BQU0sU0FBUyxLQUFLLE1BQU0sU0FBUzs7Ozs7VUFJNUMsS0FBQTtpQkFBQSx5QkFBZ0IsbUJBQW1CO0FBQ2pDLGdCQUFNLFFBQVEsS0FBSyxZQUNiLG9CQUFvQixPQUNwQixxQkFBcUIsNEJBQTRCO0FBRXZELHFCQUFTLFFBQVEsR0FBRyxRQUFRLG1CQUFtQixTQUFTO0FBQ3RELG1CQUFLLE1BQU0sS0FBSzs7Ozs7VUFJcEIsS0FBQTtpQkFBQSxtQkFBVTtBQUFFLG1CQUFPLEtBQUssTUFBTTs7OztVQUU5QixLQUFBO2lCQUFBLHFCQUFZO0FBQUUsbUJBQU8sS0FBSyxNQUFNOzs7O1VBRWhDLEtBQUE7aUJBQUEsa0JBQVMsTUFBTTtBQUFFLGlCQUFLLE1BQU0sS0FBSzs7OztVQUVqQyxLQUFBO2lCQUFBLHFCQUFZLE1BQU07QUFBRSxpQkFBSyxNQUFNLFFBQVE7Ozs7VUFFdkMsS0FBQTtpQkFBQSxvQkFBVztBQUNULGdCQUFNLFVBQVMsS0FBSyxNQUFNLE9BQU8sU0FBQyxRQUFRLE1BQVM7QUFDakQsd0JBQVUsT0FBTztBQUVqQixxQkFBTztlQUNOLFdBQVk7QUFFZixtQkFBTzs7Ozs7O3NCQXJIVTt5Q0F5SGdCLGFBQWEsZ0JBQWdCO0FBQ2hFLHVCQUFpQixrQkFBa0I7QUFFbkMsVUFBSSxlQUFlLFdBQVk7QUFFL0IsZUFBUyxRQUFRLEdBQUcsUUFBUSxhQUFhLFNBQVM7QUFDaEQsd0JBQWdCOztBQUdsQixhQUFPOzs7OztBQzVJVDtBQUFBO0FBQ0EsV0FBTyxlQUFlLFNBQVMsY0FBYztBQUFBLE1BQ3pDLE9BQU87QUFBQTtBQUVYLFlBQVEsVUFBVTtBQUNsQixRQUFJLGFBQWE7QUFDakIsUUFBSSxhQUFhLHVCQUF1QjtBQUN4QyxRQUFJLGFBQWE7QUFDakIsb0NBQWdDLE1BQU07QUFDbEMsVUFBSSxTQUFTLFFBQVE7QUFDakIsY0FBTSxJQUFJLGVBQWU7QUFBQTtBQUU3QixhQUFPO0FBQUE7QUFFWCw2QkFBeUIsVUFBVSxhQUFhO0FBQzVDLFVBQUksQ0FBRSxxQkFBb0IsY0FBYztBQUNwQyxjQUFNLElBQUksVUFBVTtBQUFBO0FBQUE7QUFHNUIsK0JBQTJCLFFBQVEsT0FBTztBQUN0QyxlQUFRLElBQUksR0FBRyxJQUFJLE1BQU0sUUFBUSxLQUFJO0FBQ2pDLFlBQUksYUFBYSxNQUFNO0FBQ3ZCLG1CQUFXLGFBQWEsV0FBVyxjQUFjO0FBQ2pELG1CQUFXLGVBQWU7QUFDMUIsWUFBSSxXQUFXO0FBQVkscUJBQVcsV0FBVztBQUNqRCxlQUFPLGVBQWUsUUFBUSxXQUFXLEtBQUs7QUFBQTtBQUFBO0FBR3RELDBCQUFzQixhQUFhLFlBQVksYUFBYTtBQUN4RCxVQUFJO0FBQVksMEJBQWtCLFlBQVksV0FBVztBQUN6RCxVQUFJO0FBQWEsMEJBQWtCLGFBQWE7QUFDaEQsYUFBTztBQUFBO0FBRVgsa0JBQWMsUUFBUSxVQUFVLFVBQVU7QUFDdEMsVUFBSSxPQUFPLFlBQVksZUFBZSxRQUFRLEtBQUs7QUFDL0MsZUFBTyxRQUFRO0FBQUEsYUFDWjtBQUNILGVBQU8sZUFBYyxTQUFRLFdBQVUsV0FBVTtBQUM3QyxjQUFJLE9BQU8sZUFBZSxTQUFRO0FBQ2xDLGNBQUksQ0FBQztBQUFNO0FBQ1gsY0FBSSxPQUFPLE9BQU8seUJBQXlCLE1BQU07QUFDakQsY0FBSSxLQUFLLEtBQUs7QUFDVixtQkFBTyxLQUFLLElBQUksS0FBSztBQUFBO0FBRXpCLGlCQUFPLEtBQUs7QUFBQTtBQUFBO0FBR3BCLGFBQU8sS0FBSyxRQUFRLFVBQVUsWUFBWTtBQUFBO0FBRTlDLDZCQUF5QixHQUFHO0FBQ3hCLHdCQUFrQixPQUFPLGlCQUFpQixPQUFPLGlCQUFpQiwwQkFBeUIsSUFBRztBQUMxRixlQUFPLEdBQUUsYUFBYSxPQUFPLGVBQWU7QUFBQTtBQUVoRCxhQUFPLGdCQUFnQjtBQUFBO0FBRTNCLHVCQUFtQixVQUFVLFlBQVk7QUFDckMsVUFBSSxPQUFPLGVBQWUsY0FBYyxlQUFlLE1BQU07QUFDekQsY0FBTSxJQUFJLFVBQVU7QUFBQTtBQUV4QixlQUFTLFlBQVksT0FBTyxPQUFPLGNBQWMsV0FBVyxXQUFXO0FBQUEsUUFDbkUsYUFBYTtBQUFBLFVBQ1QsT0FBTztBQUFBLFVBQ1AsVUFBVTtBQUFBLFVBQ1YsY0FBYztBQUFBO0FBQUE7QUFHdEIsVUFBSTtBQUFZLHdCQUFnQixVQUFVO0FBQUE7QUFFOUMsb0NBQWdDLEtBQUs7QUFDakMsYUFBTyxPQUFPLElBQUksYUFBYSxNQUFNO0FBQUEsUUFDakMsU0FBUztBQUFBO0FBQUE7QUFHakIsd0NBQW9DLE1BQU0sTUFBTTtBQUM1QyxVQUFJLFFBQVMsU0FBUSxVQUFVLFlBQVksT0FBTyxTQUFTLGFBQWE7QUFDcEUsZUFBTztBQUFBO0FBRVgsYUFBTyx1QkFBdUI7QUFBQTtBQUVsQyw2QkFBeUIsR0FBRyxHQUFHO0FBQzNCLHdCQUFrQixPQUFPLGtCQUFrQiwwQkFBeUIsSUFBRyxJQUFHO0FBQ3RFLFdBQUUsWUFBWTtBQUNkLGVBQU87QUFBQTtBQUVYLGFBQU8sZ0JBQWdCLEdBQUc7QUFBQTtBQUU5Qiw0QkFBd0IsUUFBUSxVQUFVO0FBQ3RDLGFBQU0sQ0FBQyxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsV0FBVTtBQUMxRCxpQkFBUyxnQkFBZ0I7QUFDekIsWUFBSSxXQUFXO0FBQU07QUFBQTtBQUV6QixhQUFPO0FBQUE7QUFFWCxRQUFJLFVBQVUsU0FBUyxLQUFLO0FBQ3hCO0FBQ0EsYUFBTyxPQUFPLE9BQU8sV0FBVyxlQUFlLElBQUksZ0JBQWdCLFNBQVMsV0FBVyxPQUFPO0FBQUE7QUFFbEcseUNBQXFDO0FBQ2pDLFVBQUksT0FBTyxZQUFZLGVBQWUsQ0FBQyxRQUFRO0FBQVcsZUFBTztBQUNqRSxVQUFJLFFBQVEsVUFBVTtBQUFNLGVBQU87QUFDbkMsVUFBSSxPQUFPLFVBQVU7QUFBWSxlQUFPO0FBQ3hDLFVBQUk7QUFDQSxnQkFBUSxVQUFVLFFBQVEsS0FBSyxRQUFRLFVBQVUsU0FBUyxJQUFJLFdBQVc7QUFBQTtBQUN6RSxlQUFPO0FBQUEsZUFDRixHQUFQO0FBQ0UsZUFBTztBQUFBO0FBQUE7QUFHZiwwQkFBc0IsU0FBUztBQUMzQixVQUFJLDRCQUE0QjtBQUNoQyxhQUFPLGdDQUFnQztBQUNuQyxZQUFJLFFBQVEsZ0JBQWdCLFVBQVU7QUFDdEMsWUFBSSwyQkFBMkI7QUFDM0IsY0FBSSxZQUFZLGdCQUFnQixNQUFNO0FBQ3RDLG1CQUFTLFFBQVEsVUFBVSxPQUFPLFdBQVc7QUFBQSxlQUMxQztBQUNILG1CQUFTLE1BQU0sTUFBTSxNQUFNO0FBQUE7QUFFL0IsZUFBTywyQkFBMkIsTUFBTTtBQUFBO0FBQUE7QUFHaEQsUUFBSSxnQkFBZ0IsV0FBVyxXQUFXO0FBQzFDLFFBQUksMEJBQXdDLHlCQUFTLFdBQVc7QUFDNUQsZ0JBQVUsMEJBQXlCO0FBQ25DLFVBQUksU0FBUyxhQUFhO0FBQzFCLHdDQUFpQyxPQUFPLHdCQUF3QjtBQUM1RCx3QkFBZ0IsTUFBTTtBQUN0QixZQUFJO0FBQ0osZ0JBQVEsT0FBTyxLQUFLLE1BQU07QUFDMUIsY0FBTSx5QkFBeUI7QUFDL0IsZUFBTztBQUFBO0FBRVgsbUJBQWEsMEJBQXlCO0FBQUEsUUFDbEM7QUFBQSxVQUNJLEtBQUs7QUFBQSxVQUNMLE9BQU8scUNBQXFDO0FBQ3hDLG1CQUFPLEtBQUs7QUFBQTtBQUFBO0FBQUEsUUFHcEI7QUFBQSxVQUNJLEtBQUs7QUFBQSxVQUNMLE9BQU8sdUJBQXVCLGlCQUFpQjtBQUMzQyxpQkFBSyxnQkFBZ0IseUJBQXdCLFlBQVksaUJBQWlCLE1BQU0sS0FBSyxNQUFNO0FBQzNGLGlCQUFLLDBCQUEwQjtBQUFBO0FBQUE7QUFBQSxTQUd4QztBQUFBLFFBQ0M7QUFBQSxVQUNJLEtBQUs7QUFBQSxVQUNMLE9BQU8sbUJBQW1CLE9BQU87QUFDN0IsZ0JBQUksU0FBUyxlQUFlLHlCQUF5QixHQUFHLDBCQUEwQix5QkFBd0Isb0NBQW9DLDBCQUF5QixRQUFRLHlCQUF5QixrQkFBa0IsS0FBSyxNQUFNLFFBQVEsSUFBSSxtQkFBbUIsUUFBUSxrQkFBa0I7QUFDOVIsb0NBQXdCLGNBQWM7QUFDdEMsb0NBQXdCLGVBQWU7QUFDdkMsbUJBQU87QUFBQTtBQUFBO0FBQUEsUUFHZjtBQUFBLFVBQ0ksS0FBSztBQUFBLFVBQ0wsT0FBTyw0Q0FBNEMsT0FBTyxPQUFPLHdCQUF3QjtBQUNyRixnQkFBSSxRQUFRLGVBQWUsUUFBUSxPQUFPO0FBQUEsY0FDdEM7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLGVBQ0QsMEJBQTBCLElBQUssVUFBUyxVQUFVLEtBQUssTUFBTSxPQUFPO0FBQ3ZFLG1CQUFPO0FBQUE7QUFBQTtBQUFBLFFBR2Y7QUFBQSxVQUNJLEtBQUs7QUFBQSxVQUNMLE9BQU8sNkNBQTZDLE9BQU8sUUFBUSx3QkFBd0I7QUFDdkYsZ0JBQUksMkJBQTJCLFFBQVc7QUFDdEMsdUNBQXlCO0FBQ3pCLHVCQUFTO0FBQ1Qsc0JBQVEsV0FBVztBQUFBO0FBRXZCLGdCQUFJLE9BQU8sUUFBUSxRQUFRO0FBQUEsY0FDdkI7QUFBQSxlQUNELE9BQU87QUFBQSxjQUNOO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxlQUNELDBCQUEwQixJQUFLLFVBQVMsVUFBVSxLQUFLLE1BQU0sT0FBTztBQUN2RSxtQkFBTztBQUFBO0FBQUE7QUFBQTtBQUluQixhQUFPO0FBQUEsTUFDVCxXQUFXO0FBQ2IsWUFBUSxVQUFVO0FBQ2xCLDRCQUF3QixPQUFPO0FBQzNCLFVBQUksUUFBUTtBQUNaLFVBQUksUUFBUTtBQUNaLGFBQU0sUUFBUSxPQUFNO0FBQ2hCLGNBQU0sV0FBVyxXQUFXO0FBQUE7QUFFaEMsYUFBTztBQUFBO0FBQUE7OztBQ25NWDs7Ozs7O0FBRW9DLFFBQUEsa0JBQWtCLHVCQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7UUFFakMsb0JBQU4seUJBQVEseUJBQUE7OztvQ0FBZTs7Ozs7O1VBQzdCLEtBQUE7aUJBQVAsc0NBQW9DLGlCQUFpQixRQUFRO0FBQzNELGdCQUFNLFdBQVcsZ0JBQWdCLGVBQzNCLGVBQWUseUNBQXlDLGlCQUFpQixTQUN6RSxTQUFVLEdBQWEsT0FBWCxVQUF3QixPQUFiLGVBQ3ZCLGVBQWUsT0FBTyxRQUN0QiwrQkFBK0IsY0FDL0IsMEJBQTBCLGdCQUF1QixRQUFDLFVBQVUsK0JBQzVELHlCQUF5Qix3QkFBd0IsNkJBQ2pELG9CQUFvQixnQkFBdUIsUUFBQyxvQ0FBb0Msb0JBQW1CLFFBQVE7QUFFakgsOEJBQWtCLFlBQVk7QUFFOUIsbUJBQU87Ozs7O01BYm9DLGdCQUF1QjtzQkFBakQ7c0RBaUI2QixpQkFBaUIsUUFBUTtBQUN6RSxVQUFNLHdCQUF3QixnQkFBZ0IsNEJBQ3hDLHVCQUF1QixnQkFBZ0IsMkJBQ3ZDLDZCQUE2QixPQUFPLFFBQVEsd0JBQzVDLDRCQUE0QixPQUFPLFFBQVEsdUJBQzNDLGVBQWdCLCtCQUErQiw0QkFDOUIsSUFBaUMsT0FBOUIsNEJBQTJCLEtBQTZCLE9BQTFCLDJCQUEwQixPQUN6RCxJQUE4QixPQUEzQiw0QkFBMkI7QUFFdkQsYUFBTzs7Ozs7QUM5QlQ7Ozs7OztBQUUyQixRQUFBLGFBQVc7QUFFaEIsUUFBQSxhQUFjLHVCQUFBO0FBRVAsUUFBQSxhQUFjOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFM0MsUUFBUSxpQkFBbUIsV0FBVSxXQUE3QjtRQUVhLDRCQUFOLHlCQUFRLFdBQUE7Ozs0Q0FBdUI7Ozs7OztVQUNyQyxLQUFBO2lCQUFQLG1CQUFpQixPQUFPO0FBQ3RCLGdCQUFNLFNBQVMsMEJBQTBCLE9BQU8saUJBQzFDLE9BQU8sUUFDUCxRQUFRO2NBQUM7ZUFDVCw0QkFBNEIsSUFBSSwyQkFBMEI7QUFFaEUsbUJBQU87Ozs7O01BUDRDLFdBQVM7c0JBQTNDO3VDQVdjLGlCQUFpQixXQUFXO0FBQzdELFVBQUksU0FBUyxXQUFZO0FBRXpCLGVBQVMsUUFBUSxHQUFHLFFBQVEsaUJBQWlCLFNBQVM7QUFDcEQsa0JBQVU7O0FBR1osYUFBTzs7Ozs7QUM1QlQ7Ozs7OztBQUVvQyxRQUFBLGtCQUFrQix1QkFBQTtBQUNoQixRQUFBLG9CQUFvQix1QkFBQTtBQUVwQyxRQUFBLFNBQW9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7UUFFckIsc0JBQU4seUJBQVEseUJBQUE7OztzQ0FBaUI7Ozs7OztVQUMvQixLQUFBO2lCQUFQLGlDQUErQixZQUFZLFFBQVE7QUFDakQsZ0JBQUk7QUFFSixnQkFBTSx1QkFBc0IsV0FBVyxPQUFPLFNBQUMscUJBQXFCLFdBQWM7QUFDMUUsa0JBQU0scUJBQXFCLFVBQVUsWUFBWTtBQUVqRCxrQ0FBb0IsS0FBSztBQUV6QixxQkFBTztlQUNOLEtBQ0gsNEJBQTRCLHFCQUFvQjtBQUV0RCxnQkFBSSw4QkFBOEIsR0FBRztBQUNuQyxrQkFBTSwwQkFBdUIsSUFBRyxRQUFLLE1BQUM7QUFFdEMsb0NBQXNCO21CQUNqQjtBQUNMLGtCQUFJLDhCQUE4QixRQUM5Qiw2QkFBNkIsR0FDN0IsMkJBQTJCLEdBQzNCLDJCQUEyQjtBQUUvQixtQ0FBb0IsUUFBUSxTQUFDLG9CQUFvQixPQUFVO0FBQ3pELG9CQUFNLDBCQUEwQixtQkFBbUIsWUFDN0MsMEJBQTBCLG1CQUFtQjtBQUVuRCxvQkFBSSxVQUFVLEdBQUc7QUFDZixzQkFBTSwyQkFBMEIsb0JBQzFCLGdEQUFnRCx5QkFBd0I7QUFFOUUsZ0RBQThCOztBQUdoQyxvQkFBSSxVQUFVLDRCQUE0QixHQUFHO0FBQzNDLHNCQUFNLHlCQUF5QixvQkFDekIsK0NBQStDLHVCQUF1QjtBQUU1RSxnREFBOEI7O0FBR2hDLG9CQUFJLFFBQVEsNEJBQTRCLEdBQUc7QUFDekMsZ0RBQThCO0FBQzlCLGdEQUE4QjtBQUU5Qiw4Q0FBNEI7O0FBRzlCLDRDQUE0QjtBQUM1QiwyQ0FBMkIsS0FBSyxJQUFJLDBCQUEwQjs7QUFHaEUsa0JBQU0sUUFBUSw2QkFBNkIsOEJBQThCLEdBQ25FLDBCQUEwQixnQkFBdUIsUUFBQyxVQUFVLFFBQzVELDRCQUE0QixrQkFBeUIsUUFBQyxVQUFVLFFBQ2hFLGtCQUFrQiw2QkFDbEIsb0JBQW1CLDJCQUEyQixRQUFRO0FBRTVELHNDQUF3QixjQUFjO0FBQ3RDLHNDQUF3QixlQUFlO0FBQ3ZDLHdDQUEwQixjQUFjO0FBQ3hDLHdDQUEwQixlQUFlO0FBRXpDLGtCQUFNLHlCQUF5Qix3QkFBd0I7QUFFdkQsb0NBQXNCLGdCQUF1QixRQUFDLG1DQUFtQyxzQkFBcUIsMEJBQTBCO0FBRWhJLG1DQUFvQixRQUFRLFNBQUMsb0JBQW9CLE9BQVU7QUFDekQsb0JBQU0sMEJBQTBCLG1CQUFtQixZQUM3QywyQkFBMkIsbUJBQW1CO0FBRXBELG9CQUFJLFFBQVEsNEJBQTRCLEdBQUc7QUFDekMsc0JBQU0sbUJBQW1CO0FBRXpCLDJDQUF5QixlQUFlOztBQUcxQyxvQkFBSSwwQkFBMEIsMEJBQTBCO0FBQ3RELHNCQUFNLG9CQUFvQiwyQkFBMkI7QUFFckQsMkNBQXlCLGdCQUFnQjs7QUFHM0Msb0NBQW9CLGNBQWM7O0FBR3BDLGtDQUFvQixZQUFZO0FBQ2hDLGtDQUFvQixZQUFZOztBQUdsQyxtQkFBTzs7Ozs7TUExRnNDLGdCQUF1QjtzQkFBbkQ7Ozs7QUNQckI7Ozs7OztBQUU4QixRQUFBLFlBQVksdUJBQUE7QUFDVixRQUFBLGNBQWMsdUJBQUE7QUFDVixRQUFBLGtCQUFrQix1QkFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1FBRWpDLDJCQUFOLHlCQUFRLHlCQUFBOzs7MkNBQXNCOzs7Ozs7VUFDcEMsS0FBQTtpQkFBUCxzQ0FBb0MsaUJBQWlCLFFBQVE7QUFDM0QsZ0JBQU0sYUFBYSxnQkFBZ0IsaUJBQzdCLG9CQUFvQixVQUFpQixRQUFDLDZCQUE2QixpQkFBaUIsU0FDcEYsc0JBQXNCLFlBQW1CLFFBQUMsd0JBQXdCLFlBQVk7QUFFcEYsZ0JBQUksMENBQTBDLGtCQUFrQjtBQUVoRSxnQkFBTSw0Q0FBNEMsb0JBQW9CLDZCQUNoRSxvQ0FBb0MsMENBQTBDO0FBRXBGLGdCQUFJLGtCQUFrQjtBQUV0QixnQkFBSSxPQUFPO3VCQUVBLG9DQUFvQyxHQUFHO0FBQ2hELGdDQUFlLENBQUk7QUFFbkIsZ0NBQWtCLGNBQWM7dUJBQ3ZCLG9DQUFvQyxHQUFHO0FBQ2hELGdDQUFlLENBQUk7QUFFbkIsa0NBQW9CLGNBQWM7O0FBR3BDLGdCQUFNLHlCQUF5QixrQkFBa0IsWUFDM0MsMkJBQTJCLG9CQUFvQixZQUMvQyxtQkFBbUIseUJBQXlCO0FBRWxELGdCQUFJLG1CQUFtQjtBQUV2QixnQkFBSSxPQUFPO3VCQUVBLG1CQUFtQixHQUFHO0FBQy9CLGlDQUFnQixDQUFJO0FBRXBCLGdDQUFrQixlQUFlO3VCQUN4QixtQkFBbUIsR0FBRztBQUMvQixpQ0FBZ0IsQ0FBSTtBQUVwQixrQ0FBb0IsZUFBZTs7QUFHckMsc0RBQTBDLGtCQUFrQjtBQUU1RCxnQkFBTSx5QkFBeUIsa0JBQWtCLFlBQzNDLGdDQUFnQyx3QkFDaEMseUJBQXlCLHlDQUN6QiwyQkFBMkIsZ0JBQXVCLFFBQUMsbUNBQW1DLDJCQUEwQiwrQkFBK0I7QUFFckoscUNBQXlCLGNBQWM7QUFDdkMscUNBQXlCLGVBQWU7QUFFeEMsbUJBQU87Ozs7O01BckQyQyxnQkFBdUI7c0JBQXhEOzs7O0FDTnJCOzs7Ozs7QUFFcUMsUUFBQSxtQkFBOEIsdUJBQUE7QUFFdkIsUUFBQSxTQUFvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztRQUUzQyxrQkFBTiwyQkFBUTtnQ0FDVCxVQUFVLFlBQVksWUFBVTs7QUFDMUMsYUFBSyxXQUFXO0FBQ2hCLGFBQUssYUFBYTtBQUNsQixhQUFLLGFBQWE7Ozs7VUFHcEIsS0FBQTtpQkFBQSwwQkFBaUI7QUFDZixnQkFBTSxlQUFlO0FBRXJCLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSw2QkFBb0I7QUFDbEIsZ0JBQU0sa0JBQWtCO0FBRXhCLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSx1QkFBYztBQUNaLG1CQUFPLEtBQUs7Ozs7VUFHZCxLQUFBO2lCQUFBLHlCQUFnQjtBQUNkLG1CQUFPLEtBQUs7Ozs7VUFHZCxLQUFBO2lCQUFBLHlCQUFnQjtBQUNkLG1CQUFPLEtBQUs7Ozs7VUFHZCxLQUFBO2lCQUFBLG9DQUEyQjtBQUN6QixnQkFBSSx3QkFBd0I7Z0JBRTVCLFFBQVksYUFBQyxLQUFLLFlBQVksU0FBQyxXQUFjO0FBQzNDLHNDQUF3QixVQUFVO0FBRWxDLGtCQUFJLDBCQUEwQixNQUFNO0FBQ2xDLHVCQUFPOzs7QUFJWCxtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsbUNBQTBCO0FBQ3hCLGdCQUFJLHVCQUF1QjtnQkFFM0IsUUFBYSxjQUFDLEtBQUssWUFBWSxTQUFDLFdBQWM7QUFDNUMscUNBQXVCLFVBQVU7QUFFakMsa0JBQUkseUJBQXlCLE1BQU07QUFDakMsdUJBQU87OztBQUlYLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxxQkFBWSxVQUFVO0FBQ3BCLGlCQUFLLFdBQVc7Ozs7VUFHbEIsS0FBQTtpQkFBQSx1QkFBYyxZQUFZO0FBQ3hCLGlCQUFLLGFBQWE7Ozs7VUFHcEIsS0FBQTtpQkFBQSx1QkFBYyxZQUFZO0FBQ3hCLGlCQUFLLGFBQWE7Ozs7VUFHcEIsS0FBQTtpQkFBQSxxQkFBWSxRQUFRO0FBQ2xCLGdCQUFNLGtCQUFrQixNQUNsQiwyQkFBMkIsaUJBQXdCLFFBQUMsNkJBQTZCLGlCQUFpQixTQUNsRyxZQUFZO0FBRWxCLG1CQUFPOzs7OztVQUdGLEtBQUE7aUJBQVAsbUNBQWlDLE9BQU8sVUFBVSxZQUFZO0FBQzVELGdCQUFJLGVBQWUsUUFBVztBQUM1QiwyQkFBYTtBQUNiLHlCQUFXO0FBQ1gsc0JBQVE7O0FBR1YsZ0JBQU0sbUJBQW1CLFdBQVc7QUFFcEMsZ0JBQUkscUJBQXFCLEdBQUc7QUFDMUIsb0JBQU0sSUFBSSxNQUFPLHFDQUE2QyxPQUFULFVBQVM7O0FBR2hFLGdCQUFNLGFBQWEsUUFDYixrQkFBa0IsSUFBSSxNQUFNLFVBQVUsWUFBWTtBQUV4RCxtQkFBTzs7Ozs7O3NCQS9GVTs7OztBQ05yQjs7Ozs7O0FBRTRCLFFBQUEsZUFBd0IsdUJBQUE7QUFFOUIsUUFBQSxTQUF1Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1FBRXhCLGNBQU4seUJBQVEsaUJBQUE7Ozs4QkFBUzs7Ozs7O1VBQzlCLEtBQUE7aUJBQUEsbUJBQVU7QUFDUixnQkFBTSxhQUFhLEtBQUssaUJBQ2xCLGlCQUFjLElBQUcsUUFBSyxNQUFDLGFBQ3ZCLGVBQWUsZ0JBQ2Ysc0JBQXNCLGFBQWEsY0FDbkMsT0FBTztBQUViLG1CQUFPOzs7OztVQUdGLEtBQUE7aUJBQVAsbUNBQWlDLFVBQVUsWUFBWTtBQUFFLG1CQUFPLGFBQWUsUUFBQywwQkFBMEIsY0FBYSxVQUFVOzs7OztNQVgxRixhQUFlO3NCQUFuQzs7OztBQ05yQjs7Ozs7WUFFZ0Isa0NBQUE7NkNBQWdDLE1BQU07QUFDcEQsVUFBSSxnQ0FBZ0M7QUFFcEMsVUFBTSxtQkFBbUIsbUJBQW1CO0FBRTVDLFVBQUksa0JBQWtCO0FBQ3BCLFlBQU0sZUFBZSxNQUNmLFlBQVksYUFBYTtBQUUvQixZQUFJLFdBQVc7QUFDYiwwQ0FBZ0M7OztBQUlwQyxhQUFPOztnQ0FHbUIsTUFBTTtBQUNoQyxVQUFJLG1CQUFtQjtBQUV2QixVQUFNLG1CQUFtQixLQUFLLGtCQUN4QixzQkFBbUIsQ0FBSTtBQUU3QixVQUFJLHFCQUFxQjtBQUN2QixZQUFNLGtCQUFrQixNQUNsQiw4QkFBOEIsZ0JBQWdCO0FBRXBELDJCQUFtQjs7QUFHckIsYUFBTzs7Ozs7QUNoQ1Q7Ozs7O1lBS2dCLGFBQUE7QUFISyxRQUFBLFNBQW9CO0FBQ08sUUFBQSxRQUFRO3dCQUU3QixPQUFPLE9BQU8sT0FBTyxPQUFPLFVBQVU7QUFDL0QsVUFBSTtBQUVKLFVBQU0sY0FBYyxNQUFNO0FBRTFCLFVBQUksVUFBVSxhQUFhO0FBQ3pCLGlCQUFVLGFBQWEsT0FDWCxhQUNFO2FBQ1Q7QUFDTCxZQUFNLE9BQU8sTUFBTTtBQUVuQixpQkFBUyxpQkFBaUIsTUFBTSxPQUFPLE9BQU8sT0FBTyxPQUFPOztBQUc5RCxhQUFPOzs4QkFHaUIsTUFBTSxPQUFPLE9BQU8sT0FBTyxPQUFPLFVBQVU7QUFDcEUsVUFBSTtBQUVKLFVBQUksYUFBYSxNQUFNO0FBQ3JCLFlBQU0sYUFBYTtBQUVuQjtBQUVBLGlCQUFTLEtBQUssTUFBTSxPQUFPLE9BQU8sV0FBUTtBQUFGLGlCQUFBLFdBQVcsT0FBTyxZQUFZLE9BQU8sT0FBTzs7QUFFcEYsWUFBSSxRQUFRO2NBQ1YsUUFBSSxLQUFDLE9BQU87O2FBRVQ7QUFDTCxZQUFNLGdDQUE2QixJQUFHLE9BQStCLGdDQUFDO0FBRXRFLFlBQUksK0JBQStCO0FBQ2pDLGNBQU0sZUFBZSxNQUNmLGNBQWE7QUFFbkI7QUFFQSxtQkFBUyxhQUFhLE1BQU0sT0FBTyxPQUFPLFdBQVE7QUFBRixtQkFBQSxXQUFXLE9BQU8sYUFBWSxPQUFPLE9BQU87O0FBRTVGLGNBQUksUUFBUTtnQkFDVixRQUFJLEtBQUMsT0FBTzs7ZUFFVDtBQUNMLG1CQUFTLEtBQUssTUFBTSxPQUFPLE9BQU87QUFFbEMsY0FBSSxRQUFRO0FBQ1Y7QUFFQSxxQkFBUyxXQUFXLE9BQU8sT0FBTyxPQUFPLE9BQU87Ozs7QUFLdEQsYUFBTzs7Ozs7QUM3RFQ7Ozs7OztBQUUyQixRQUFBLGFBQXVCO0FBQ3JCLFFBQUEsYUFBYTtBQUNQLFFBQUEsU0FBbUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1FBRWpDLGFBQU4sMkJBQVE7MkJBQ1QsT0FBSzs7QUFDZixhQUFLLFFBQVE7Ozs7VUFHZixLQUFBO2lCQUFBLG9CQUFXO0FBQ1QsbUJBQU8sS0FBSzs7OztVQUdkLEtBQUE7aUJBQUEsd0JBQWU7QUFDYixnQkFBTSxZQUFTLElBQUcsUUFBSyxNQUFDLEtBQUs7QUFFN0IsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLDBCQUFpQjtBQUNmLGdCQUFNLGNBQWMsS0FBSyxNQUFNO0FBRS9CLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSwrQkFBc0I7QUFDcEIsZ0JBQU0sbUJBQWdCLElBQUcsUUFBVyxZQUFDLEtBQUs7QUFFMUMsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLGlCQUFRLE1BQU07QUFDWixpQkFBSyxNQUFNLEtBQUs7Ozs7VUFHbEIsS0FBQTtpQkFBQSxlQUFNLE9BQU8sT0FBTyxVQUFVO0FBQzVCLGdCQUFJO0FBRUosZ0JBQU0sUUFBUTtBQUVkLHFCQUFNLElBQUcsWUFBVSxXQUFDLEtBQUssT0FBTyxPQUFPLE9BQU8sT0FBTztBQUVyRCxtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsb0JBQVc7QUFDVCxnQkFBTSxlQUFjLEtBQUssTUFBTSxPQUFPLFNBQUMsYUFBYSxNQUFTO0FBQ3ZELGtCQUFNLGFBQWEsS0FBSztBQUV4QixrQkFBSSxnQkFBZ0IsV0FBWSxjQUFFO0FBQ2hDLDhCQUFjO3FCQUNUO0FBQ0wsOEJBQWUsR0FBaUIsT0FBZixhQUFZLEtBQWMsT0FBWDs7QUFHbEMscUJBQU87ZUFDTixXQUFZLGVBQ2YsU0FBUztBQUViLG1CQUFPOzs7Ozs7c0JBdkRVOzs7O0FDTnJCO0FBQUE7QUFDQSxXQUFPLGVBQWUsU0FBUyxjQUFjO0FBQUEsTUFDekMsT0FBTztBQUFBO0FBRVgsWUFBUSxVQUFVO0FBQ2xCLCtCQUEyQixLQUFLLEtBQUs7QUFDakMsVUFBSSxPQUFPLFFBQVEsTUFBTSxJQUFJO0FBQVEsY0FBTSxJQUFJO0FBQy9DLGVBQVEsSUFBSSxHQUFHLE9BQU8sSUFBSSxNQUFNLE1BQU0sSUFBSSxLQUFLO0FBQUksYUFBSyxLQUFLLElBQUk7QUFDakUsYUFBTztBQUFBO0FBRVgsZ0NBQTRCLEtBQUs7QUFDN0IsVUFBSSxNQUFNLFFBQVE7QUFBTSxlQUFPLGtCQUFrQjtBQUFBO0FBRXJELDZCQUF5QixVQUFVLGFBQWE7QUFDNUMsVUFBSSxDQUFFLHFCQUFvQixjQUFjO0FBQ3BDLGNBQU0sSUFBSSxVQUFVO0FBQUE7QUFBQTtBQUc1Qix3Q0FBb0M7QUFDaEMsVUFBSSxPQUFPLFlBQVksZUFBZSxDQUFDLFFBQVE7QUFBVyxlQUFPO0FBQ2pFLFVBQUksUUFBUSxVQUFVO0FBQU0sZUFBTztBQUNuQyxVQUFJLE9BQU8sVUFBVTtBQUFZLGVBQU87QUFDeEMsVUFBSTtBQUNBLGFBQUssVUFBVSxTQUFTLEtBQUssUUFBUSxVQUFVLE1BQU0sSUFBSSxXQUFXO0FBQUE7QUFDcEUsZUFBTztBQUFBLGVBQ0YsR0FBUDtBQUNFLGVBQU87QUFBQTtBQUFBO0FBR2Ysd0JBQW9CLFFBQVEsTUFBTSxPQUFPO0FBQ3JDLFVBQUksNEJBQTRCO0FBQzVCLHFCQUFhLFFBQVE7QUFBQSxhQUNsQjtBQUNILHFCQUFhLHFCQUFvQixTQUFRLE9BQU0sUUFBTztBQUNsRCxjQUFJLElBQUk7QUFBQSxZQUNKO0FBQUE7QUFFSixZQUFFLEtBQUssTUFBTSxHQUFHO0FBQ2hCLGNBQUksY0FBYyxTQUFTLEtBQUssTUFBTSxTQUFRO0FBQzlDLGNBQUksV0FBVyxJQUFJO0FBQ25CLGNBQUk7QUFBTyw0QkFBZ0IsVUFBVSxPQUFNO0FBQzNDLGlCQUFPO0FBQUE7QUFBQTtBQUdmLGFBQU8sV0FBVyxNQUFNLE1BQU07QUFBQTtBQUVsQywrQkFBMkIsUUFBUSxPQUFPO0FBQ3RDLGVBQVEsSUFBSSxHQUFHLElBQUksTUFBTSxRQUFRLEtBQUk7QUFDakMsWUFBSSxhQUFhLE1BQU07QUFDdkIsbUJBQVcsYUFBYSxXQUFXLGNBQWM7QUFDakQsbUJBQVcsZUFBZTtBQUMxQixZQUFJLFdBQVc7QUFBWSxxQkFBVyxXQUFXO0FBQ2pELGVBQU8sZUFBZSxRQUFRLFdBQVcsS0FBSztBQUFBO0FBQUE7QUFHdEQsMEJBQXNCLGFBQWEsWUFBWSxhQUFhO0FBQ3hELFVBQUk7QUFBWSwwQkFBa0IsWUFBWSxXQUFXO0FBQ3pELFVBQUk7QUFBYSwwQkFBa0IsYUFBYTtBQUNoRCxhQUFPO0FBQUE7QUFFWCw4QkFBMEIsTUFBTTtBQUM1QixVQUFJLE9BQU8sV0FBVyxlQUFlLEtBQUssT0FBTyxhQUFhLFFBQVEsS0FBSyxpQkFBaUI7QUFBTSxlQUFPLE1BQU0sS0FBSztBQUFBO0FBRXhILGtDQUE4QjtBQUMxQixZQUFNLElBQUksVUFBVTtBQUFBO0FBRXhCLDZCQUF5QixHQUFHLEdBQUc7QUFDM0Isd0JBQWtCLE9BQU8sa0JBQWtCLDBCQUF5QixJQUFHLElBQUc7QUFDdEUsV0FBRSxZQUFZO0FBQ2QsZUFBTztBQUFBO0FBRVgsYUFBTyxnQkFBZ0IsR0FBRztBQUFBO0FBRTlCLGdDQUE0QixLQUFLO0FBQzdCLGFBQU8sbUJBQW1CLFFBQVEsaUJBQWlCLFFBQVEsNEJBQTRCLFFBQVE7QUFBQTtBQUVuRyx5Q0FBcUMsR0FBRyxRQUFRO0FBQzVDLFVBQUksQ0FBQztBQUFHO0FBQ1IsVUFBSSxPQUFPLE1BQU07QUFBVSxlQUFPLGtCQUFrQixHQUFHO0FBQ3ZELFVBQUksSUFBSSxPQUFPLFVBQVUsU0FBUyxLQUFLLEdBQUcsTUFBTSxHQUFHO0FBQ25ELFVBQUksTUFBTSxZQUFZLEVBQUU7QUFBYSxZQUFJLEVBQUUsWUFBWTtBQUN2RCxVQUFJLE1BQU0sU0FBUyxNQUFNO0FBQU8sZUFBTyxNQUFNLEtBQUs7QUFDbEQsVUFBSSxNQUFNLGVBQWUsMkNBQTJDLEtBQUs7QUFBSSxlQUFPLGtCQUFrQixHQUFHO0FBQUE7QUFFN0csUUFBSSxlQUE2QiwyQkFBVztBQUN4QywrQkFBd0I7QUFDcEIsd0JBQWdCLE1BQU07QUFBQTtBQUUxQixtQkFBYSxlQUFjO0FBQUEsUUFDdkI7QUFBQSxVQUNJLEtBQUs7QUFBQSxVQUNMLE9BQU8sNkJBQTZCO0FBQ2hDLGdCQUFJLGtCQUFrQjtBQUN0QixtQkFBTztBQUFBO0FBQUE7QUFBQSxRQUdmO0FBQUEsVUFDSSxLQUFLO0FBQUEsVUFDTCxPQUFPLDBCQUEwQjtBQUM3QixnQkFBSSxlQUFlO0FBQ25CLG1CQUFPO0FBQUE7QUFBQTtBQUFBLFFBR2Y7QUFBQSxVQUNJLEtBQUs7QUFBQSxVQUNMLE9BQU8sOEJBQThCO0FBQ2pDLGdCQUFJLG1CQUFtQjtBQUN2QixtQkFBTztBQUFBO0FBQUE7QUFBQSxRQUdmO0FBQUEsVUFDSSxLQUFLO0FBQUEsVUFDTCxPQUFPLGVBQWUsTUFBTTtBQUN4QixxQkFBUSxPQUFPLFVBQVUsUUFBUSxxQkFBcUIsSUFBSSxNQUFNLE9BQU8sSUFBSSxPQUFPLElBQUksSUFBSSxPQUFPLEdBQUcsT0FBTyxNQUFNLFFBQU87QUFDcEgsaUNBQW1CLE9BQU8sS0FBSyxVQUFVO0FBQUE7QUFFN0MsbUJBQU8sV0FBVyxNQUFNLG1CQUFtQjtBQUFBO0FBQUE7QUFBQTtBQUl2RCxhQUFPO0FBQUE7QUFFWCxZQUFRLFVBQVU7QUFBQTs7O0FDMUhsQjs7Ozs7O0FBRW9DLFFBQUEsa0JBQWtCLHVCQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7UUFFakMsd0JBQU4seUJBQVEseUJBQUE7Ozt3Q0FBbUI7Ozs7OztVQUNqQyxLQUFBO2lCQUFQLG1DQUFpQyxjQUFjLFFBQVE7QUFDckQsZ0JBQU0sbUJBQW1CLGFBQWEsdUJBQ2hDLFVBQVUsYUFBYSxjQUN2QixPQUFPLGlCQUFpQixXQUN4QixhQUFhLE9BQU8sUUFBUSxtQkFDNUIsU0FBVSxHQUFhLE9BQVgsU0FBUSxLQUFZLE9BQVQsTUFBSyxNQUFlLE9BQVgsWUFBVyxNQUMzQyxlQUFlLE9BQU8sUUFDdEIsK0JBQStCLGNBQy9CLDBCQUEwQixnQkFBdUIsUUFBQyxVQUFVLCtCQUM1RCx5QkFBeUIsd0JBQXdCLDZCQUNqRCx3QkFBd0IsZ0JBQXVCLFFBQUMsb0NBQW9DLHdCQUF1QixRQUFRO0FBRXpILGtDQUFzQixZQUFZO0FBRWxDLG1CQUFPOzs7OztNQWZ3QyxnQkFBdUI7c0JBQXJEOzs7O0FDSnJCOzs7Ozs7QUFFa0MsUUFBQSxnQkFBMkIsdUJBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7UUFFeEMsZUFBTiwyQkFBUTs2QkFDVCxrQkFBa0IsWUFBVTs7QUFDdEMsYUFBSyxtQkFBbUI7QUFDeEIsYUFBSyxhQUFhOzs7O1VBR3BCLEtBQUE7aUJBQUEsK0JBQXNCO0FBQ3BCLG1CQUFPLEtBQUs7Ozs7VUFHZCxLQUFBO2lCQUFBLHlCQUFnQjtBQUNkLG1CQUFPLEtBQUs7Ozs7VUFHZCxLQUFBO2lCQUFBLG9DQUEyQjtBQUN6QixnQkFBTSx3QkFBd0IsS0FBSztBQUVuQyxtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsbUNBQTBCO0FBQ3hCLGdCQUFNLHVCQUF1QixLQUFLO0FBRWxDLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSw4QkFBcUI7QUFDbkIsZ0JBQU0sbUJBQW1CO0FBRXpCLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSwwQkFBaUI7QUFDZixnQkFBTSxlQUFlO0FBRXJCLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSw2QkFBb0I7QUFDbEIsZ0JBQU0sa0JBQWtCO0FBRXhCLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxtQkFBVTtBQUFFLG1CQUFPLEtBQUssaUJBQWlCOzs7O1VBRXpDLEtBQUE7aUJBQUEsc0JBQWE7QUFBRSxtQkFBTyxLQUFLLGlCQUFpQjs7OztVQUU1QyxLQUFBO2lCQUFBLDZCQUFvQixrQkFBa0I7QUFDcEMsaUJBQUssbUJBQW1COzs7O1VBRzFCLEtBQUE7aUJBQUEsdUJBQWMsWUFBWTtBQUN4QixpQkFBSyxhQUFhOzs7O1VBR3BCLEtBQUE7aUJBQUEscUJBQVksUUFBUTtBQUNsQixnQkFBTSxlQUFlLE1BQ2Ysd0JBQXdCLGNBQXFCLFFBQUMsMEJBQTBCLGNBQWMsU0FDdEYsWUFBWTtBQUVsQixtQkFBTzs7Ozs7VUFHRixLQUFBO2lCQUFQLDhCQUE0QixPQUFPLGtCQUFrQjtBQUNuRCxnQkFBSSxxQkFBcUIsUUFBVztBQUNsQyxpQ0FBbUI7QUFDbkIsc0JBQVE7O0FBR1YsZ0JBQU0sYUFBYSxRQUNiLGVBQWUsSUFBSSxNQUFNLGtCQUFrQjtBQUVqRCxtQkFBTzs7Ozs7O3NCQXpFVTs7OztBQ0pyQjtBQUFBO0FBQ0EsV0FBTyxlQUFlLFNBQVMsY0FBYztBQUFBLE1BQ3pDLE9BQU87QUFBQTtBQUVYLFlBQVEsVUFBVTtBQUNsQixRQUFJLFlBQVksdUJBQXVCO0FBQ3ZDLFFBQUksYUFBYSx1QkFBdUI7QUFDeEMsb0NBQWdDLE1BQU07QUFDbEMsVUFBSSxTQUFTLFFBQVE7QUFDakIsY0FBTSxJQUFJLGVBQWU7QUFBQTtBQUU3QixhQUFPO0FBQUE7QUFFWCw2QkFBeUIsVUFBVSxhQUFhO0FBQzVDLFVBQUksQ0FBRSxxQkFBb0IsY0FBYztBQUNwQyxjQUFNLElBQUksVUFBVTtBQUFBO0FBQUE7QUFHNUIsK0JBQTJCLFFBQVEsT0FBTztBQUN0QyxlQUFRLElBQUksR0FBRyxJQUFJLE1BQU0sUUFBUSxLQUFJO0FBQ2pDLFlBQUksYUFBYSxNQUFNO0FBQ3ZCLG1CQUFXLGFBQWEsV0FBVyxjQUFjO0FBQ2pELG1CQUFXLGVBQWU7QUFDMUIsWUFBSSxXQUFXO0FBQVkscUJBQVcsV0FBVztBQUNqRCxlQUFPLGVBQWUsUUFBUSxXQUFXLEtBQUs7QUFBQTtBQUFBO0FBR3RELDBCQUFzQixhQUFhLFlBQVksYUFBYTtBQUN4RCxVQUFJO0FBQVksMEJBQWtCLFlBQVksV0FBVztBQUN6RCxVQUFJO0FBQWEsMEJBQWtCLGFBQWE7QUFDaEQsYUFBTztBQUFBO0FBRVgsa0JBQWMsUUFBUSxVQUFVLFVBQVU7QUFDdEMsVUFBSSxPQUFPLFlBQVksZUFBZSxRQUFRLEtBQUs7QUFDL0MsZUFBTyxRQUFRO0FBQUEsYUFDWjtBQUNILGVBQU8sZUFBYyxTQUFRLFdBQVUsV0FBVTtBQUM3QyxjQUFJLE9BQU8sZUFBZSxTQUFRO0FBQ2xDLGNBQUksQ0FBQztBQUFNO0FBQ1gsY0FBSSxPQUFPLE9BQU8seUJBQXlCLE1BQU07QUFDakQsY0FBSSxLQUFLLEtBQUs7QUFDVixtQkFBTyxLQUFLLElBQUksS0FBSztBQUFBO0FBRXpCLGlCQUFPLEtBQUs7QUFBQTtBQUFBO0FBR3BCLGFBQU8sS0FBSyxRQUFRLFVBQVUsWUFBWTtBQUFBO0FBRTlDLDZCQUF5QixHQUFHO0FBQ3hCLHdCQUFrQixPQUFPLGlCQUFpQixPQUFPLGlCQUFpQiwwQkFBeUIsSUFBRztBQUMxRixlQUFPLEdBQUUsYUFBYSxPQUFPLGVBQWU7QUFBQTtBQUVoRCxhQUFPLGdCQUFnQjtBQUFBO0FBRTNCLHVCQUFtQixVQUFVLFlBQVk7QUFDckMsVUFBSSxPQUFPLGVBQWUsY0FBYyxlQUFlLE1BQU07QUFDekQsY0FBTSxJQUFJLFVBQVU7QUFBQTtBQUV4QixlQUFTLFlBQVksT0FBTyxPQUFPLGNBQWMsV0FBVyxXQUFXO0FBQUEsUUFDbkUsYUFBYTtBQUFBLFVBQ1QsT0FBTztBQUFBLFVBQ1AsVUFBVTtBQUFBLFVBQ1YsY0FBYztBQUFBO0FBQUE7QUFHdEIsVUFBSTtBQUFZLHdCQUFnQixVQUFVO0FBQUE7QUFFOUMsb0NBQWdDLEtBQUs7QUFDakMsYUFBTyxPQUFPLElBQUksYUFBYSxNQUFNO0FBQUEsUUFDakMsU0FBUztBQUFBO0FBQUE7QUFHakIsd0NBQW9DLE1BQU0sTUFBTTtBQUM1QyxVQUFJLFFBQVMsU0FBUSxVQUFVLFlBQVksT0FBTyxTQUFTLGFBQWE7QUFDcEUsZUFBTztBQUFBO0FBRVgsYUFBTyx1QkFBdUI7QUFBQTtBQUVsQyw2QkFBeUIsR0FBRyxHQUFHO0FBQzNCLHdCQUFrQixPQUFPLGtCQUFrQiwwQkFBeUIsSUFBRyxJQUFHO0FBQ3RFLFdBQUUsWUFBWTtBQUNkLGVBQU87QUFBQTtBQUVYLGFBQU8sZ0JBQWdCLEdBQUc7QUFBQTtBQUU5Qiw0QkFBd0IsUUFBUSxVQUFVO0FBQ3RDLGFBQU0sQ0FBQyxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsV0FBVTtBQUMxRCxpQkFBUyxnQkFBZ0I7QUFDekIsWUFBSSxXQUFXO0FBQU07QUFBQTtBQUV6QixhQUFPO0FBQUE7QUFFWCxRQUFJLFVBQVUsU0FBUyxLQUFLO0FBQ3hCO0FBQ0EsYUFBTyxPQUFPLE9BQU8sV0FBVyxlQUFlLElBQUksZ0JBQWdCLFNBQVMsV0FBVyxPQUFPO0FBQUE7QUFFbEcseUNBQXFDO0FBQ2pDLFVBQUksT0FBTyxZQUFZLGVBQWUsQ0FBQyxRQUFRO0FBQVcsZUFBTztBQUNqRSxVQUFJLFFBQVEsVUFBVTtBQUFNLGVBQU87QUFDbkMsVUFBSSxPQUFPLFVBQVU7QUFBWSxlQUFPO0FBQ3hDLFVBQUk7QUFDQSxnQkFBUSxVQUFVLFFBQVEsS0FBSyxRQUFRLFVBQVUsU0FBUyxJQUFJLFdBQVc7QUFBQTtBQUN6RSxlQUFPO0FBQUEsZUFDRixHQUFQO0FBQ0UsZUFBTztBQUFBO0FBQUE7QUFHZiwwQkFBc0IsU0FBUztBQUMzQixVQUFJLDRCQUE0QjtBQUNoQyxhQUFPLGdDQUFnQztBQUNuQyxZQUFJLFFBQVEsZ0JBQWdCLFVBQVU7QUFDdEMsWUFBSSwyQkFBMkI7QUFDM0IsY0FBSSxZQUFZLGdCQUFnQixNQUFNO0FBQ3RDLG1CQUFTLFFBQVEsVUFBVSxPQUFPLFdBQVc7QUFBQSxlQUMxQztBQUNILG1CQUFTLE1BQU0sTUFBTSxNQUFNO0FBQUE7QUFFL0IsZUFBTywyQkFBMkIsTUFBTTtBQUFBO0FBQUE7QUFHaEQsUUFBSSwyQkFBeUMseUJBQVMsY0FBYztBQUNoRSxnQkFBVSwyQkFBMEI7QUFDcEMsVUFBSSxTQUFTLGFBQWE7QUFDMUIseUNBQWtDLHNCQUFzQjtBQUNwRCx3QkFBZ0IsTUFBTTtBQUN0QixZQUFJO0FBQ0osZ0JBQVEsT0FBTyxLQUFLO0FBQ3BCLGNBQU0sdUJBQXVCO0FBQzdCLGVBQU87QUFBQTtBQUVYLG1CQUFhLDJCQUEwQjtBQUFBLFFBQ25DO0FBQUEsVUFDSSxLQUFLO0FBQUEsVUFDTCxPQUFPLGVBQWUsT0FBTyxPQUFPLFVBQVU7QUFDMUMsZ0JBQUk7QUFDSixnQkFBSSxlQUFlO0FBQ25CLGdCQUFJLGFBQWEsTUFBTSxpQkFBaUIsdUJBQXVCLE1BQU0sMkJBQTJCLG1CQUFtQjtBQUNuSCxnQkFBSSxxQkFBcUIsTUFBTTtBQUMzQixrQkFBSSx1QkFBdUIsaUJBQWlCO0FBQzVDLGtCQUFJLHlCQUF5QixLQUFLLHNCQUFzQjtBQUNwRCwrQkFBZSxXQUFXLFFBQVEscUJBQXFCO0FBQUE7QUFBQTtBQUcvRCxxQkFBUyxpQkFBaUI7QUFDMUIsZ0JBQUksUUFBUTtBQUNSLG9CQUFNLEtBQUs7QUFDWCxrQkFBSSxhQUFhLE1BQU07QUFDbkIseUJBQVM7QUFDVCxvQkFBSSxDQUFDLFFBQVE7QUFDVCx3QkFBTTtBQUFBO0FBQUE7QUFBQTtBQUlsQixnQkFBSSxDQUFDLFFBQVE7QUFDVCxvQkFBTSxVQUFVO0FBQUE7QUFFcEIsbUJBQU87QUFBQTtBQUFBO0FBQUEsUUFHZjtBQUFBLFVBQ0ksS0FBSztBQUFBLFVBQ0wsT0FBTyxvQkFBb0I7QUFDdkIsZ0JBQUksU0FBUyxJQUFJLE9BQU8sS0FBSyxzQkFBc0I7QUFDbkQsbUJBQU87QUFBQTtBQUFBO0FBQUEsUUFHZjtBQUFBLFVBQ0ksS0FBSztBQUFBLFVBQ0wsT0FBTyxpQkFBaUI7QUFDcEIsbUJBQU8sS0FBSyxnQkFBZ0IsMEJBQXlCLFlBQVksU0FBUyxNQUFNLEtBQUssTUFBTSwyQkFBMEIsS0FBSztBQUFBO0FBQUE7QUFBQTtBQUl0SSxhQUFPO0FBQUEsTUFDVCxVQUFVO0FBQ1osWUFBUSxVQUFVO0FBQUE7OztBQy9LbEI7Ozs7OztBQUVzQixRQUFBLGVBQWM7QUFFYixRQUFBLGNBQWUsdUJBQUE7QUFDRCxRQUFBLHdCQUF1Qyx1QkFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUU1RSxRQUFRLFdBQWEsYUFBSyxNQUFsQjtRQUVhLGlCQUFOLHlCQUFRLFlBQUE7OztpQ0FBWTs7QUFFL0IsWUFBTSwyQkFBMkIsVUFDM0IsK0JBQStCLElBQUksc0JBQXdCLFFBQUMsMkJBQzVELFFBQVE7VUFDTjs7aUNBR0Y7OztNQVJrQyxZQUFVO3NCQUFqQzs7OztBQ1RyQjs7Ozs7O0FBRU8sUUFBTSxlQUFlO1lBQWYsZUFBQTtBQUNOLFFBQU0sZUFBZTtZQUFmLGVBQUE7QUFDTixRQUFNLGVBQWU7WUFBZixlQUFBO0FBQ04sUUFBTSxnQkFBZ0I7WUFBaEIsZ0JBQUE7QUFDTixRQUFNLG1CQUFtQjtZQUFuQixtQkFBQTtBQUNOLFFBQU0sbUJBQW1CO1lBQW5CLG1CQUFBO0FBQ04sUUFBTSxtQkFBbUI7WUFBbkIsbUJBQUE7QUFDTixRQUFNLG9CQUFvQjtZQUFwQixvQkFBQTtBQUNOLFFBQU0scUJBQXFCO1lBQXJCLHFCQUFBO0FBQ04sUUFBTSxxQkFBcUI7WUFBckIscUJBQUE7QUFDTixRQUFNLHNCQUFzQjtZQUF0QixzQkFBQTtBQUNOLFFBQU0sdUJBQXVCO1lBQXZCLHVCQUFBO0FBQ04sUUFBTSx3QkFBd0I7WUFBeEIsd0JBQUE7QUFDTixRQUFNLHlCQUF5QjtZQUF6Qix5QkFBQTtBQUNOLFFBQU0sMEJBQTBCO1lBQTFCLDBCQUFBO0FBQ04sUUFBTSwwQkFBMEI7WUFBMUIsMEJBQUE7QUFDTixRQUFNLDJCQUEyQjtZQUEzQiwyQkFBQTtBQUNOLFFBQU0sNEJBQTRCO1lBQTVCLDRCQUFBO0FBQ04sUUFBTSw0QkFBNEI7WUFBNUIsNEJBQUE7QUFDTixRQUFNLDZCQUE2QjtZQUE3Qiw2QkFBQTtBQUNOLFFBQU0sOEJBQThCO1lBQTlCLDhCQUFBO0FBQ04sUUFBTSwrQkFBK0I7WUFBL0IsK0JBQUE7QUFDTixRQUFNLCtCQUErQjtZQUEvQiwrQkFBQTs7OztBQ3hCYjs7Ozs7O0FBRWlCLFFBQUEsUUFBUyx1QkFBQTtBQUNGLFFBQUEsUUFBa0IsdUJBQUE7QUFDZixRQUFBLFNBQW9CLHVCQUFBO0FBRWxCLFFBQUEsYUFBYzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztRQUV0QixXQUFOLHlCQUFRLE1BQUE7OzsyQkFBTTs7QUFFekIsWUFBTSxpQkFBaUIsSUFBSSxPQUFjLFdBQ25DLE9BQU8sV0FBWSxjQUNuQixjQUFjO1VBQ1o7V0FFRixPQUFPLE1BQVc7aUNBRWxCLE1BQU0sYUFBYTs7O01BVFMsTUFBSTtzQkFBckI7Ozs7QUNSckI7QUFBQTtBQUNBLFdBQU8sZUFBZSxTQUFTLGNBQWM7QUFBQSxNQUN6QyxPQUFPO0FBQUE7QUFFWCxZQUFRLFVBQVU7QUFDbEIsK0JBQTJCLEtBQUssS0FBSztBQUNqQyxVQUFJLE9BQU8sUUFBUSxNQUFNLElBQUk7QUFBUSxjQUFNLElBQUk7QUFDL0MsZUFBUSxJQUFJLEdBQUcsT0FBTyxJQUFJLE1BQU0sTUFBTSxJQUFJLEtBQUs7QUFBSSxhQUFLLEtBQUssSUFBSTtBQUNqRSxhQUFPO0FBQUE7QUFFWCxnQ0FBNEIsS0FBSztBQUM3QixVQUFJLE1BQU0sUUFBUTtBQUFNLGVBQU8sa0JBQWtCO0FBQUE7QUFFckQsNkJBQXlCLFVBQVUsYUFBYTtBQUM1QyxVQUFJLENBQUUscUJBQW9CLGNBQWM7QUFDcEMsY0FBTSxJQUFJLFVBQVU7QUFBQTtBQUFBO0FBRzVCLHdDQUFvQztBQUNoQyxVQUFJLE9BQU8sWUFBWSxlQUFlLENBQUMsUUFBUTtBQUFXLGVBQU87QUFDakUsVUFBSSxRQUFRLFVBQVU7QUFBTSxlQUFPO0FBQ25DLFVBQUksT0FBTyxVQUFVO0FBQVksZUFBTztBQUN4QyxVQUFJO0FBQ0EsYUFBSyxVQUFVLFNBQVMsS0FBSyxRQUFRLFVBQVUsTUFBTSxJQUFJLFdBQVc7QUFBQTtBQUNwRSxlQUFPO0FBQUEsZUFDRixHQUFQO0FBQ0UsZUFBTztBQUFBO0FBQUE7QUFHZix3QkFBb0IsUUFBUSxNQUFNLE9BQU87QUFDckMsVUFBSSw0QkFBNEI7QUFDNUIscUJBQWEsUUFBUTtBQUFBLGFBQ2xCO0FBQ0gscUJBQWEscUJBQW9CLFNBQVEsT0FBTSxRQUFPO0FBQ2xELGNBQUksSUFBSTtBQUFBLFlBQ0o7QUFBQTtBQUVKLFlBQUUsS0FBSyxNQUFNLEdBQUc7QUFDaEIsY0FBSSxjQUFjLFNBQVMsS0FBSyxNQUFNLFNBQVE7QUFDOUMsY0FBSSxXQUFXLElBQUk7QUFDbkIsY0FBSTtBQUFPLDRCQUFnQixVQUFVLE9BQU07QUFDM0MsaUJBQU87QUFBQTtBQUFBO0FBR2YsYUFBTyxXQUFXLE1BQU0sTUFBTTtBQUFBO0FBRWxDLCtCQUEyQixRQUFRLE9BQU87QUFDdEMsZUFBUSxJQUFJLEdBQUcsSUFBSSxNQUFNLFFBQVEsS0FBSTtBQUNqQyxZQUFJLGFBQWEsTUFBTTtBQUN2QixtQkFBVyxhQUFhLFdBQVcsY0FBYztBQUNqRCxtQkFBVyxlQUFlO0FBQzFCLFlBQUksV0FBVztBQUFZLHFCQUFXLFdBQVc7QUFDakQsZUFBTyxlQUFlLFFBQVEsV0FBVyxLQUFLO0FBQUE7QUFBQTtBQUd0RCwwQkFBc0IsYUFBYSxZQUFZLGFBQWE7QUFDeEQsVUFBSTtBQUFZLDBCQUFrQixZQUFZLFdBQVc7QUFDekQsVUFBSTtBQUFhLDBCQUFrQixhQUFhO0FBQ2hELGFBQU87QUFBQTtBQUVYLDhCQUEwQixNQUFNO0FBQzVCLFVBQUksT0FBTyxXQUFXLGVBQWUsS0FBSyxPQUFPLGFBQWEsUUFBUSxLQUFLLGlCQUFpQjtBQUFNLGVBQU8sTUFBTSxLQUFLO0FBQUE7QUFFeEgsa0NBQThCO0FBQzFCLFlBQU0sSUFBSSxVQUFVO0FBQUE7QUFFeEIsNkJBQXlCLEdBQUcsR0FBRztBQUMzQix3QkFBa0IsT0FBTyxrQkFBa0IsMEJBQXlCLElBQUcsSUFBRztBQUN0RSxXQUFFLFlBQVk7QUFDZCxlQUFPO0FBQUE7QUFFWCxhQUFPLGdCQUFnQixHQUFHO0FBQUE7QUFFOUIsZ0NBQTRCLEtBQUs7QUFDN0IsYUFBTyxtQkFBbUIsUUFBUSxpQkFBaUIsUUFBUSw0QkFBNEIsUUFBUTtBQUFBO0FBRW5HLHlDQUFxQyxHQUFHLFFBQVE7QUFDNUMsVUFBSSxDQUFDO0FBQUc7QUFDUixVQUFJLE9BQU8sTUFBTTtBQUFVLGVBQU8sa0JBQWtCLEdBQUc7QUFDdkQsVUFBSSxJQUFJLE9BQU8sVUFBVSxTQUFTLEtBQUssR0FBRyxNQUFNLEdBQUc7QUFDbkQsVUFBSSxNQUFNLFlBQVksRUFBRTtBQUFhLFlBQUksRUFBRSxZQUFZO0FBQ3ZELFVBQUksTUFBTSxTQUFTLE1BQU07QUFBTyxlQUFPLE1BQU0sS0FBSztBQUNsRCxVQUFJLE1BQU0sZUFBZSwyQ0FBMkMsS0FBSztBQUFJLGVBQU8sa0JBQWtCLEdBQUc7QUFBQTtBQUU3RyxRQUFJLGtCQUFnQywyQkFBVztBQUMzQyxnQ0FBeUIsTUFBTTtBQUMzQix3QkFBZ0IsTUFBTTtBQUN0QixhQUFLLE9BQU87QUFBQTtBQUVoQixtQkFBYSxrQkFBaUI7QUFBQSxRQUMxQjtBQUFBLFVBQ0ksS0FBSztBQUFBLFVBQ0wsT0FBTyxtQkFBbUI7QUFDdEIsbUJBQU8sS0FBSztBQUFBO0FBQUE7QUFBQSxRQUdwQjtBQUFBLFVBQ0ksS0FBSztBQUFBLFVBQ0wsT0FBTyw2QkFBNkI7QUFDaEMsZ0JBQUksa0JBQWtCO0FBQ3RCLG1CQUFPO0FBQUE7QUFBQTtBQUFBLFFBR2Y7QUFBQSxVQUNJLEtBQUs7QUFBQSxVQUNMLE9BQU8sMEJBQTBCO0FBQzdCLGdCQUFJLGVBQWU7QUFDbkIsbUJBQU87QUFBQTtBQUFBO0FBQUEsUUFHZjtBQUFBLFVBQ0ksS0FBSztBQUFBLFVBQ0wsT0FBTywwQkFBMEI7QUFDN0IsZ0JBQUksZUFBZTtBQUNuQixtQkFBTztBQUFBO0FBQUE7QUFBQSxRQUdmO0FBQUEsVUFDSSxLQUFLO0FBQUEsVUFDTCxPQUFPLGVBQWUsTUFBTTtBQUN4QixxQkFBUSxPQUFPLFVBQVUsUUFBUSxxQkFBcUIsSUFBSSxNQUFNLE9BQU8sSUFBSSxPQUFPLElBQUksSUFBSSxPQUFPLEdBQUcsT0FBTyxNQUFNLFFBQU87QUFDcEgsaUNBQW1CLE9BQU8sS0FBSyxVQUFVO0FBQUE7QUFFN0MsbUJBQU8sV0FBVyxNQUFNLG1CQUFtQjtBQUFBO0FBQUE7QUFBQTtBQUl2RCxhQUFPO0FBQUE7QUFFWCxZQUFRLFVBQVU7QUFBQTs7O0FDaklsQjs7Ozs7O0FBRU8sUUFBTSxtQkFBbUI7WUFBbkIsbUJBQUE7QUFDTixRQUFNLHVCQUF1QjtZQUF2Qix1QkFBQTtBQUNOLFFBQU0sd0JBQXdCO1lBQXhCLHdCQUFBO0FBQ04sUUFBTSx5QkFBeUI7WUFBekIseUJBQUE7QUFDTixRQUFNLDBCQUEwQjtZQUExQiwwQkFBQTtBQUNOLFFBQU0sMEJBQTBCO1lBQTFCLDBCQUFBO21CQUVFO01BQ2I7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBOzs7Ozs7QUNmRjtBQUFBO0FBQ0EsV0FBTyxlQUFlLFNBQVMsY0FBYztBQUFBLE1BQ3pDLE9BQU87QUFBQTtBQUVYLFlBQVEsVUFBVTtBQUNsQixRQUFJLGVBQWU7QUFDbkIsUUFBSSxlQUFlLHVCQUF1QjtBQUMxQyxRQUFJLGFBQWE7QUFDakIsb0NBQWdDLE1BQU07QUFDbEMsVUFBSSxTQUFTLFFBQVE7QUFDakIsY0FBTSxJQUFJLGVBQWU7QUFBQTtBQUU3QixhQUFPO0FBQUE7QUFFWCw2QkFBeUIsVUFBVSxhQUFhO0FBQzVDLFVBQUksQ0FBRSxxQkFBb0IsY0FBYztBQUNwQyxjQUFNLElBQUksVUFBVTtBQUFBO0FBQUE7QUFHNUIsK0JBQTJCLFFBQVEsT0FBTztBQUN0QyxlQUFRLElBQUksR0FBRyxJQUFJLE1BQU0sUUFBUSxLQUFJO0FBQ2pDLFlBQUksYUFBYSxNQUFNO0FBQ3ZCLG1CQUFXLGFBQWEsV0FBVyxjQUFjO0FBQ2pELG1CQUFXLGVBQWU7QUFDMUIsWUFBSSxXQUFXO0FBQVkscUJBQVcsV0FBVztBQUNqRCxlQUFPLGVBQWUsUUFBUSxXQUFXLEtBQUs7QUFBQTtBQUFBO0FBR3RELDBCQUFzQixhQUFhLFlBQVksYUFBYTtBQUN4RCxVQUFJO0FBQVksMEJBQWtCLFlBQVksV0FBVztBQUN6RCxVQUFJO0FBQWEsMEJBQWtCLGFBQWE7QUFDaEQsYUFBTztBQUFBO0FBRVgsa0JBQWMsUUFBUSxVQUFVLFVBQVU7QUFDdEMsVUFBSSxPQUFPLFlBQVksZUFBZSxRQUFRLEtBQUs7QUFDL0MsZUFBTyxRQUFRO0FBQUEsYUFDWjtBQUNILGVBQU8sZUFBYyxTQUFRLFdBQVUsV0FBVTtBQUM3QyxjQUFJLE9BQU8sZUFBZSxTQUFRO0FBQ2xDLGNBQUksQ0FBQztBQUFNO0FBQ1gsY0FBSSxPQUFPLE9BQU8seUJBQXlCLE1BQU07QUFDakQsY0FBSSxLQUFLLEtBQUs7QUFDVixtQkFBTyxLQUFLLElBQUksS0FBSztBQUFBO0FBRXpCLGlCQUFPLEtBQUs7QUFBQTtBQUFBO0FBR3BCLGFBQU8sS0FBSyxRQUFRLFVBQVUsWUFBWTtBQUFBO0FBRTlDLDZCQUF5QixHQUFHO0FBQ3hCLHdCQUFrQixPQUFPLGlCQUFpQixPQUFPLGlCQUFpQiwwQkFBeUIsSUFBRztBQUMxRixlQUFPLEdBQUUsYUFBYSxPQUFPLGVBQWU7QUFBQTtBQUVoRCxhQUFPLGdCQUFnQjtBQUFBO0FBRTNCLHVCQUFtQixVQUFVLFlBQVk7QUFDckMsVUFBSSxPQUFPLGVBQWUsY0FBYyxlQUFlLE1BQU07QUFDekQsY0FBTSxJQUFJLFVBQVU7QUFBQTtBQUV4QixlQUFTLFlBQVksT0FBTyxPQUFPLGNBQWMsV0FBVyxXQUFXO0FBQUEsUUFDbkUsYUFBYTtBQUFBLFVBQ1QsT0FBTztBQUFBLFVBQ1AsVUFBVTtBQUFBLFVBQ1YsY0FBYztBQUFBO0FBQUE7QUFHdEIsVUFBSTtBQUFZLHdCQUFnQixVQUFVO0FBQUE7QUFFOUMsb0NBQWdDLEtBQUs7QUFDakMsYUFBTyxPQUFPLElBQUksYUFBYSxNQUFNO0FBQUEsUUFDakMsU0FBUztBQUFBO0FBQUE7QUFHakIsd0NBQW9DLE1BQU0sTUFBTTtBQUM1QyxVQUFJLFFBQVMsU0FBUSxVQUFVLFlBQVksT0FBTyxTQUFTLGFBQWE7QUFDcEUsZUFBTztBQUFBO0FBRVgsYUFBTyx1QkFBdUI7QUFBQTtBQUVsQyw2QkFBeUIsR0FBRyxHQUFHO0FBQzNCLHdCQUFrQixPQUFPLGtCQUFrQiwwQkFBeUIsSUFBRyxJQUFHO0FBQ3RFLFdBQUUsWUFBWTtBQUNkLGVBQU87QUFBQTtBQUVYLGFBQU8sZ0JBQWdCLEdBQUc7QUFBQTtBQUU5Qiw0QkFBd0IsUUFBUSxVQUFVO0FBQ3RDLGFBQU0sQ0FBQyxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsV0FBVTtBQUMxRCxpQkFBUyxnQkFBZ0I7QUFDekIsWUFBSSxXQUFXO0FBQU07QUFBQTtBQUV6QixhQUFPO0FBQUE7QUFFWCxRQUFJLFVBQVUsU0FBUyxLQUFLO0FBQ3hCO0FBQ0EsYUFBTyxPQUFPLE9BQU8sV0FBVyxlQUFlLElBQUksZ0JBQWdCLFNBQVMsV0FBVyxPQUFPO0FBQUE7QUFFbEcseUNBQXFDO0FBQ2pDLFVBQUksT0FBTyxZQUFZLGVBQWUsQ0FBQyxRQUFRO0FBQVcsZUFBTztBQUNqRSxVQUFJLFFBQVEsVUFBVTtBQUFNLGVBQU87QUFDbkMsVUFBSSxPQUFPLFVBQVU7QUFBWSxlQUFPO0FBQ3hDLFVBQUk7QUFDQSxnQkFBUSxVQUFVLFFBQVEsS0FBSyxRQUFRLFVBQVUsU0FBUyxJQUFJLFdBQVc7QUFBQTtBQUN6RSxlQUFPO0FBQUEsZUFDRixHQUFQO0FBQ0UsZUFBTztBQUFBO0FBQUE7QUFHZiwwQkFBc0IsU0FBUztBQUMzQixVQUFJLDRCQUE0QjtBQUNoQyxhQUFPLGdDQUFnQztBQUNuQyxZQUFJLFFBQVEsZ0JBQWdCLFVBQVU7QUFDdEMsWUFBSSwyQkFBMkI7QUFDM0IsY0FBSSxZQUFZLGdCQUFnQixNQUFNO0FBQ3RDLG1CQUFTLFFBQVEsVUFBVSxPQUFPLFdBQVc7QUFBQSxlQUMxQztBQUNILG1CQUFTLE1BQU0sTUFBTSxNQUFNO0FBQUE7QUFFL0IsZUFBTywyQkFBMkIsTUFBTTtBQUFBO0FBQUE7QUFHaEQsUUFBSSxlQUFlLGFBQWEsZUFBZTtBQUMvQyxRQUFJLG1CQUFpQyx5QkFBUyxpQkFBaUI7QUFDM0QsZ0JBQVUsbUJBQWtCO0FBQzVCLFVBQUksU0FBUyxhQUFhO0FBQzFCLGlDQUEwQixNQUFNO0FBQzVCLHdCQUFnQixNQUFNO0FBQ3RCLFlBQUk7QUFDSixZQUFJLE9BQU8sV0FBVztBQUN0QixnQkFBUSxPQUFPLEtBQUssTUFBTTtBQUMxQixjQUFNLE9BQU87QUFDYixlQUFPO0FBQUE7QUFFWCxtQkFBYSxtQkFBa0I7QUFBQSxRQUMzQjtBQUFBLFVBQ0ksS0FBSztBQUFBLFVBQ0wsT0FBTyxtQkFBbUI7QUFDdEIsbUJBQU8sS0FBSztBQUFBO0FBQUE7QUFBQSxRQUdwQjtBQUFBLFVBQ0ksS0FBSztBQUFBLFVBQ0wsT0FBTyxlQUFlLE9BQU8sT0FBTyxVQUFVO0FBQzFDLGdCQUFJO0FBQ0osZ0JBQUksT0FBTyxLQUFLO0FBQ2hCLHNCQUFVLE1BQU0sT0FBTyxPQUFPO0FBQzlCLHFCQUFTO0FBQ1QsbUJBQU87QUFBQTtBQUFBO0FBQUEsUUFHZjtBQUFBLFVBQ0ksS0FBSztBQUFBLFVBQ0wsT0FBTyxvQkFBb0I7QUFDdkIsZ0JBQUksaUJBQWlCLGNBQWMsYUFBYSxLQUFLLEtBQUssWUFBWSxTQUFTLEdBQUcsT0FBTyxZQUFZLE9BQU87QUFDNUcsbUJBQU87QUFBQTtBQUFBO0FBQUEsUUFHZjtBQUFBLFVBQ0ksS0FBSztBQUFBLFVBQ0wsT0FBTyxpQkFBaUI7QUFDcEIsbUJBQU8sS0FBSyxnQkFBZ0Isa0JBQWlCLFlBQVksU0FBUyxNQUFNLEtBQUssTUFBTSxtQkFBa0IsS0FBSztBQUFBO0FBQUE7QUFBQTtBQUl0SCxhQUFPO0FBQUEsTUFDVCxhQUFhO0FBQ2YsWUFBUSxVQUFVO0FBQ2xCLHVCQUFtQixNQUFNLE9BQU8sT0FBTyxVQUFVO0FBQzdDLFVBQUksYUFBYSxNQUFNO0FBQ25CLFlBQUksU0FBUztBQUNiLFlBQUksQ0FBQyxRQUFRO0FBQ1QsZUFBSyxNQUFNLE9BQU8sT0FBTztBQUFBO0FBQUEsYUFFMUI7QUFDSCxhQUFLLE1BQU0sT0FBTyxPQUFPO0FBQUE7QUFBQTtBQUFBOzs7QUM5S2pDO0FBQUE7QUFDQSxXQUFPLGVBQWUsU0FBUyxjQUFjO0FBQUEsTUFDekMsT0FBTztBQUFBO0FBRVgsWUFBUSxVQUFVO0FBQ2xCLFFBQUksZUFBZSx1QkFBdUI7QUFDMUMsb0NBQWdDLE1BQU07QUFDbEMsVUFBSSxTQUFTLFFBQVE7QUFDakIsY0FBTSxJQUFJLGVBQWU7QUFBQTtBQUU3QixhQUFPO0FBQUE7QUFFWCw2QkFBeUIsVUFBVSxhQUFhO0FBQzVDLFVBQUksQ0FBRSxxQkFBb0IsY0FBYztBQUNwQyxjQUFNLElBQUksVUFBVTtBQUFBO0FBQUE7QUFHNUIsK0JBQTJCLFFBQVEsT0FBTztBQUN0QyxlQUFRLElBQUksR0FBRyxJQUFJLE1BQU0sUUFBUSxLQUFJO0FBQ2pDLFlBQUksYUFBYSxNQUFNO0FBQ3ZCLG1CQUFXLGFBQWEsV0FBVyxjQUFjO0FBQ2pELG1CQUFXLGVBQWU7QUFDMUIsWUFBSSxXQUFXO0FBQVkscUJBQVcsV0FBVztBQUNqRCxlQUFPLGVBQWUsUUFBUSxXQUFXLEtBQUs7QUFBQTtBQUFBO0FBR3RELDBCQUFzQixhQUFhLFlBQVksYUFBYTtBQUN4RCxVQUFJO0FBQVksMEJBQWtCLFlBQVksV0FBVztBQUN6RCxVQUFJO0FBQWEsMEJBQWtCLGFBQWE7QUFDaEQsYUFBTztBQUFBO0FBRVgsa0JBQWMsUUFBUSxVQUFVLFVBQVU7QUFDdEMsVUFBSSxPQUFPLFlBQVksZUFBZSxRQUFRLEtBQUs7QUFDL0MsZUFBTyxRQUFRO0FBQUEsYUFDWjtBQUNILGVBQU8sZUFBYyxTQUFRLFdBQVUsV0FBVTtBQUM3QyxjQUFJLE9BQU8sZUFBZSxTQUFRO0FBQ2xDLGNBQUksQ0FBQztBQUFNO0FBQ1gsY0FBSSxPQUFPLE9BQU8seUJBQXlCLE1BQU07QUFDakQsY0FBSSxLQUFLLEtBQUs7QUFDVixtQkFBTyxLQUFLLElBQUksS0FBSztBQUFBO0FBRXpCLGlCQUFPLEtBQUs7QUFBQTtBQUFBO0FBR3BCLGFBQU8sS0FBSyxRQUFRLFVBQVUsWUFBWTtBQUFBO0FBRTlDLDZCQUF5QixHQUFHO0FBQ3hCLHdCQUFrQixPQUFPLGlCQUFpQixPQUFPLGlCQUFpQiwwQkFBeUIsSUFBRztBQUMxRixlQUFPLEdBQUUsYUFBYSxPQUFPLGVBQWU7QUFBQTtBQUVoRCxhQUFPLGdCQUFnQjtBQUFBO0FBRTNCLHVCQUFtQixVQUFVLFlBQVk7QUFDckMsVUFBSSxPQUFPLGVBQWUsY0FBYyxlQUFlLE1BQU07QUFDekQsY0FBTSxJQUFJLFVBQVU7QUFBQTtBQUV4QixlQUFTLFlBQVksT0FBTyxPQUFPLGNBQWMsV0FBVyxXQUFXO0FBQUEsUUFDbkUsYUFBYTtBQUFBLFVBQ1QsT0FBTztBQUFBLFVBQ1AsVUFBVTtBQUFBLFVBQ1YsY0FBYztBQUFBO0FBQUE7QUFHdEIsVUFBSTtBQUFZLHdCQUFnQixVQUFVO0FBQUE7QUFFOUMsb0NBQWdDLEtBQUs7QUFDakMsYUFBTyxPQUFPLElBQUksYUFBYSxNQUFNO0FBQUEsUUFDakMsU0FBUztBQUFBO0FBQUE7QUFHakIsd0NBQW9DLE1BQU0sTUFBTTtBQUM1QyxVQUFJLFFBQVMsU0FBUSxVQUFVLFlBQVksT0FBTyxTQUFTLGFBQWE7QUFDcEUsZUFBTztBQUFBO0FBRVgsYUFBTyx1QkFBdUI7QUFBQTtBQUVsQyw2QkFBeUIsR0FBRyxHQUFHO0FBQzNCLHdCQUFrQixPQUFPLGtCQUFrQiwwQkFBeUIsSUFBRyxJQUFHO0FBQ3RFLFdBQUUsWUFBWTtBQUNkLGVBQU87QUFBQTtBQUVYLGFBQU8sZ0JBQWdCLEdBQUc7QUFBQTtBQUU5Qiw0QkFBd0IsUUFBUSxVQUFVO0FBQ3RDLGFBQU0sQ0FBQyxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsV0FBVTtBQUMxRCxpQkFBUyxnQkFBZ0I7QUFDekIsWUFBSSxXQUFXO0FBQU07QUFBQTtBQUV6QixhQUFPO0FBQUE7QUFFWCxRQUFJLFVBQVUsU0FBUyxLQUFLO0FBQ3hCO0FBQ0EsYUFBTyxPQUFPLE9BQU8sV0FBVyxlQUFlLElBQUksZ0JBQWdCLFNBQVMsV0FBVyxPQUFPO0FBQUE7QUFFbEcseUNBQXFDO0FBQ2pDLFVBQUksT0FBTyxZQUFZLGVBQWUsQ0FBQyxRQUFRO0FBQVcsZUFBTztBQUNqRSxVQUFJLFFBQVEsVUFBVTtBQUFNLGVBQU87QUFDbkMsVUFBSSxPQUFPLFVBQVU7QUFBWSxlQUFPO0FBQ3hDLFVBQUk7QUFDQSxnQkFBUSxVQUFVLFFBQVEsS0FBSyxRQUFRLFVBQVUsU0FBUyxJQUFJLFdBQVc7QUFBQTtBQUN6RSxlQUFPO0FBQUEsZUFDRixHQUFQO0FBQ0UsZUFBTztBQUFBO0FBQUE7QUFHZiwwQkFBc0IsU0FBUztBQUMzQixVQUFJLDRCQUE0QjtBQUNoQyxhQUFPLGdDQUFnQztBQUNuQyxZQUFJLFFBQVEsZ0JBQWdCLFVBQVU7QUFDdEMsWUFBSSwyQkFBMkI7QUFDM0IsY0FBSSxZQUFZLGdCQUFnQixNQUFNO0FBQ3RDLG1CQUFTLFFBQVEsVUFBVSxPQUFPLFdBQVc7QUFBQSxlQUMxQztBQUNILG1CQUFTLE1BQU0sTUFBTSxNQUFNO0FBQUE7QUFFL0IsZUFBTywyQkFBMkIsTUFBTTtBQUFBO0FBQUE7QUFHaEQsUUFBSSx3QkFBc0MseUJBQVMsaUJBQWlCO0FBQ2hFLGdCQUFVLHdCQUF1QjtBQUNqQyxVQUFJLFNBQVMsYUFBYTtBQUMxQixzQ0FBK0IsTUFBTSxNQUFNO0FBQ3ZDLHdCQUFnQixNQUFNO0FBQ3RCLFlBQUk7QUFDSixnQkFBUSxPQUFPLEtBQUssTUFBTTtBQUMxQixjQUFNLE9BQU87QUFDYixlQUFPO0FBQUE7QUFFWCxtQkFBYSx3QkFBdUI7QUFBQSxRQUNoQztBQUFBLFVBQ0ksS0FBSztBQUFBLFVBQ0wsT0FBTyxtQkFBbUI7QUFDdEIsbUJBQU8sS0FBSztBQUFBO0FBQUE7QUFBQSxRQUdwQjtBQUFBLFVBQ0ksS0FBSztBQUFBLFVBQ0wsT0FBTyxrQkFBa0IsZ0JBQWdCO0FBQ3JDLGdCQUFJLGFBQWEsS0FBSyxLQUFLLFlBQVksU0FBUyxHQUFHLE9BQU8sWUFBWSxPQUFPO0FBQzdFLG1CQUFPO0FBQUE7QUFBQTtBQUFBLFFBR2Y7QUFBQSxVQUNJLEtBQUs7QUFBQSxVQUNMLE9BQU8sZUFBZSxNQUFNO0FBQ3hCLG1CQUFPLEtBQUssZ0JBQWdCLHVCQUFzQixZQUFZLFNBQVMsTUFBTSxLQUFLLE1BQU0sTUFBTSxLQUFLO0FBQUE7QUFBQTtBQUFBO0FBSS9HLGFBQU87QUFBQSxNQUNULGFBQWE7QUFDZixZQUFRLFVBQVU7QUFBQTs7O0FDeEpsQjs7Ozs7O0FBRStCLFFBQUEsZUFBYztBQUVYLFFBQUEscUJBQXFCLHVCQUFBO0FBRWxDLFFBQUEsU0FBdUI7QUFDTCxRQUFBLGFBQWlCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRXhELFFBQVEsT0FBUyxhQUFjLGVBQXZCO1FBRWEscUJBQU4seUJBQVEsdUJBQUE7OzttQ0FDVCxNQUFJOztBQUNkLFlBQU0sT0FBTyxXQUFzQjtpQ0FFN0IsTUFBTTs7OztVQUdkLEtBQUE7aUJBQUEsZUFBTSxPQUFPLE9BQU8sVUFBVTtBQUM1QixnQkFBSTtBQUVKLGdCQUFNLE9BQU8sS0FBSyxXQUNaLFlBQVksSUFDWixhQUFhLE1BQU07QUFFekIscUJBQVMsVUFBVSxNQUFNLFdBQVcsT0FBTztBQUUzQyxnQkFBSSxRQUFRO2tCQUNWLFFBQUksS0FBQyxPQUFPOztBQUdkLGdCQUFFLENBQUcsUUFBUTtBQUNYLG9CQUFNLFVBQVU7O0FBR2xCLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxvQkFBVztBQUNULGdCQUFNLGlCQUFpQixNQUNqQixTQUFNLEtBQUEsZ0JBN0JLLG9CQUFrQixZQTZCZCxZQUFOLE1BQUssS0FBQSxNQUFVO0FBRTlCLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxpQkFBUTtBQUFFLG1CQUFNLEtBQUEsZ0JBbENHLG9CQUFrQixZQWtDZCxTQUFOLE1BQUssS0FBQSxNQUFPOzs7OztNQWxDaUIsbUJBQXFCO3NCQUFoRDt1QkFxQ0YsTUFBTSxPQUFPLE9BQU8sVUFBVTtBQUMvQyxVQUFJO0FBRUosVUFBSSxhQUFhLE1BQU07QUFDckIsa0JBQVMsS0FBSyxNQUFNLE9BQU8sT0FBTyxXQUFNO0FBQ3RDLGNBQUksU0FBUztBQUViLGNBQUUsQ0FBRyxRQUFRO0FBQ1gscUJBQVMsVUFBVSxNQUFNLE9BQU8sT0FBTzs7QUFHekMsaUJBQU87O2FBRUo7QUFDTCxrQkFBUyxLQUFLLE1BQU0sT0FBTyxPQUFPO0FBRWxDLFlBQUksU0FBUTtBQUNWLG9CQUFVLE1BQU0sT0FBTyxPQUFPOzs7QUFJbEMsYUFBTzs7Ozs7QUNyRVQ7Ozs7OztBQUUrQixRQUFBLGVBQWM7QUFFWCxRQUFBLHFCQUFxQix1QkFBQTtBQUVmLFFBQUEsYUFBaUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFekQsUUFBUSxXQUFhLGFBQWMsZUFBM0I7UUFFYSxzQkFBTix5QkFBUSx1QkFBQTs7O29DQUNULE1BQUk7O0FBQ2QsWUFBTSxPQUFPLFdBQXVCO2lDQUU5QixNQUFNOzs7O1VBR2QsS0FBQTtpQkFBQSxlQUFNLE9BQU8sT0FBTyxVQUFVO0FBQzVCLGdCQUFJO0FBRUosZ0JBQU0sT0FBTyxLQUFLO0FBRWxCLHNCQUFVLE1BQU0sT0FBTyxPQUFPO0FBRTlCLHFCQUFTO0FBRVQsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLG9CQUFXO0FBQ1QsZ0JBQU0saUJBQWlCLFVBQ2pCLFNBQU0sS0FBQSxnQkFyQksscUJBQW1CLFlBcUJmLFlBQU4sTUFBSyxLQUFBLE1BQVU7QUFFOUIsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLGlCQUFRO0FBQUUsbUJBQU0sS0FBQSxnQkExQkcscUJBQW1CLFlBMEJmLFNBQU4sTUFBSyxLQUFBLE1BQU87Ozs7O01BMUJrQixtQkFBcUI7c0JBQWpEO3VCQTZCRixNQUFNLE9BQU8sT0FBTyxVQUFVO0FBQy9DLFVBQUk7QUFFSixVQUFJLGFBQWEsTUFBTTtBQUNyQixpQkFBUztBQUVULFlBQUUsQ0FBRyxRQUFRO0FBQ1gsZUFBSyxNQUFNLE9BQU8sT0FBTyxXQUFRO0FBQUYsbUJBQUEsVUFBVSxNQUFNLE9BQU8sT0FBTzs7O2FBRTFEO0FBQ0wsaUJBQVMsS0FBSyxNQUFNLE9BQU8sT0FBTztBQUVsQyxZQUFJLFFBQVE7QUFDVixvQkFBVSxNQUFNLE9BQU8sT0FBTzs7O0FBSWxDLGFBQU87Ozs7O0FDeERUOzs7OztZQUtnQixtQkFBQTtZQWVBLHFCQUFBO1lBZ0JBLHVCQUFBO1lBZ0JBLDhCQUFBO1lBaUJBLDZCQUFBO0FBbkVNLFFBQUEsU0FBb0I7QUFDc0MsUUFBQSxhQUFjOzhCQUU3RCxNQUFNO0FBQ3JDLFVBQUksbUJBQW1CO0FBRXZCLFVBQU0sbUJBQW1CLEtBQUs7QUFFOUIsVUFBSSxrQkFBa0I7QUFDcEIsWUFBTSxlQUFlLE1BQ2Ysc0JBQXNCLGFBQWE7QUFFekMsMkJBQW9CLHdCQUF3Qjs7QUFHOUMsYUFBTzs7Z0NBRzBCLE1BQU07QUFDdkMsVUFBSSxtQkFBbUI7QUFFdkIsVUFBTSxtQkFBbUIsS0FBSyxrQkFDeEIsc0JBQW1CLENBQUk7QUFFN0IsVUFBSSxxQkFBcUI7QUFDdkIsWUFBTSxrQkFBa0IsTUFDbEIsMEJBQTBCLGdCQUFnQjtBQUVoRCwyQkFBb0IsNEJBQTRCLFdBQWdCOztBQUdsRSxhQUFPOztrQ0FHNEIsTUFBTTtBQUN6QyxVQUFJLHFCQUFxQjtBQUV6QixVQUFNLHNCQUFzQixLQUFLO0FBRWpDLFVBQUkscUJBQXFCO0FBQ3ZCLFlBQU0sa0JBQWtCLE1BQ2xCLFdBQVcsZ0JBQWdCLGVBQzNCLDZCQUE4QixhQUFhLFdBQWtCO0FBRW5FLDZCQUFxQjs7QUFHdkIsYUFBTzs7eUNBR21DLE1BQU07QUFDaEQsVUFBSSw0QkFBNEI7QUFFaEMsVUFBTSxzQkFBc0IsS0FBSztBQUVqQyxVQUFJLHFCQUFxQjtBQUN2QixZQUFNLGtCQUFrQixNQUNsQixXQUFXLGdCQUFnQixlQUMzQixvQ0FBcUMsYUFBYSxXQUF5QjtBQUVqRixvQ0FBNEI7O0FBRzlCLGFBQU87O3dDQUlrQyxnQkFBZ0I7QUFDekQsVUFBSTtBQUVKLHdCQUFrQjtBQUVsQixVQUFNLGFBQWEsZ0JBQWdCLGlCQUM3QixpQkFBYyxJQUFHLFFBQUssTUFBQztBQUU3Qix3QkFBa0I7QUFFbEIsVUFBTSxXQUFXLGdCQUFnQjtBQUVqQyxhQUFPOzs7OztBQ2pGVDs7Ozs7O0FBRTRCLFFBQUEsZUFBd0IsdUJBQUE7QUFDdkIsUUFBQSxnQkFBcUMsdUJBQUE7QUFDbkMsUUFBQSxrQkFBdUMsdUJBQUE7QUFDdEMsUUFBQSxtQkFBd0MsdUJBQUE7QUFFbkQsUUFBQSxTQUF1QjtBQUNxQixRQUFBLE9BQXFCO0FBQ2dCLFFBQUEsYUFBaUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztRQUVsRyxjQUFOLHlCQUFRLGlCQUFBOzs7OEJBQVM7Ozs7OztVQUM5QixLQUFBO2lCQUFBLHNCQUFhLFdBQVc7QUFDdEIsZ0JBQU0sYUFBYSxLQUFLLGlCQUNsQixRQUFRLFdBQVcsU0FDbkIsT0FBTyxjQUFjO0FBRTNCLG1CQUFPOzs7OztVQUdGLEtBQUE7aUJBQVAsbUNBQWlDLFVBQVUsWUFBWTtBQUFFLG1CQUFPLGFBQWUsUUFBQywwQkFBMEIsY0FBYSxVQUFVOzs7OztNQVQxRixhQUFlO3NCQUFuQzsyQkFZRSxPQUFPO0FBQzVCLFVBQUksT0FBTztBQUVYLFVBQU0sY0FBYyxNQUFNO0FBRTFCLFVBQUksZ0JBQWdCLEdBQUc7QUFDckIsWUFBTSxPQUFPLE1BQU0sT0FDYixZQUFZO0FBRWxCLGVBQU8sS0FBSyxhQUFhO2FBQ3BCO0FBQ0wsWUFBTSx5QkFBeUIseUJBQXlCO0FBRXhELFlBQUksd0JBQXdCO0FBQzFCLGNBQU0sUUFBTyxNQUFNLE9BQ2IsaUJBQWlCO0FBRXZCLGlCQUFPLGNBQWM7QUFFckIsY0FBTSxXQUFRLElBQUcsTUFBMEIsMkJBQUMsaUJBQ3RDLHdCQUF3Qix5Q0FBeUMsTUFBTTtBQUU3RSxpQkFBTztlQUNGO0FBQ0wsZ0JBQU07QUFFTixpQkFBTyxjQUFjOzs7QUFJekIsYUFBTzs7c0NBR3lCLE9BQU87QUFDdkMsVUFBTSxXQUFRLElBQUcsUUFBSSxLQUFDLFFBQ2hCLHlCQUFzQixJQUFHLE1BQW9CLHFCQUFDO0FBRXBELGFBQU87O3NEQUd5QyxNQUFNLFVBQVU7QUFDaEUsVUFBSTtBQUVKLGNBQVE7YUFDRCxXQUEwQjtBQUM3QixjQUFNLG1CQUFtQixJQUFJLGNBQWdCLFFBQUM7QUFFOUMsa0NBQXdCO0FBQ3hCO2FBRUcsV0FBMkI7QUFDOUIsY0FBTSxxQkFBcUIsSUFBSSxnQkFBa0IsUUFBQztBQUVsRCxrQ0FBd0I7QUFDeEI7YUFFRyxXQUE0QjtBQUMvQixjQUFNLHNCQUFzQixJQUFJLGlCQUFtQixRQUFDO0FBRXBELGtDQUF3QjtBQUN4Qjs7QUFHSixhQUFPOzs7OztBQ3RGVDtBQUFBO0FBQ0EsV0FBTyxlQUFlLFNBQVMsY0FBYztBQUFBLE1BQ3pDLE9BQU87QUFBQTtBQUVYLFlBQVEsVUFBVTtBQUNsQixRQUFJLGVBQWU7QUFDbkIsUUFBSSxlQUFlLHVCQUF1QjtBQUMxQyxRQUFJLGFBQWE7QUFDakIsUUFBSSxhQUFhO0FBQ2pCLG9DQUFnQyxNQUFNO0FBQ2xDLFVBQUksU0FBUyxRQUFRO0FBQ2pCLGNBQU0sSUFBSSxlQUFlO0FBQUE7QUFFN0IsYUFBTztBQUFBO0FBRVgsNkJBQXlCLFVBQVUsYUFBYTtBQUM1QyxVQUFJLENBQUUscUJBQW9CLGNBQWM7QUFDcEMsY0FBTSxJQUFJLFVBQVU7QUFBQTtBQUFBO0FBRzVCLCtCQUEyQixRQUFRLE9BQU87QUFDdEMsZUFBUSxJQUFJLEdBQUcsSUFBSSxNQUFNLFFBQVEsS0FBSTtBQUNqQyxZQUFJLGFBQWEsTUFBTTtBQUN2QixtQkFBVyxhQUFhLFdBQVcsY0FBYztBQUNqRCxtQkFBVyxlQUFlO0FBQzFCLFlBQUksV0FBVztBQUFZLHFCQUFXLFdBQVc7QUFDakQsZUFBTyxlQUFlLFFBQVEsV0FBVyxLQUFLO0FBQUE7QUFBQTtBQUd0RCwwQkFBc0IsYUFBYSxZQUFZLGFBQWE7QUFDeEQsVUFBSTtBQUFZLDBCQUFrQixZQUFZLFdBQVc7QUFDekQsVUFBSTtBQUFhLDBCQUFrQixhQUFhO0FBQ2hELGFBQU87QUFBQTtBQUVYLGtCQUFjLFFBQVEsVUFBVSxVQUFVO0FBQ3RDLFVBQUksT0FBTyxZQUFZLGVBQWUsUUFBUSxLQUFLO0FBQy9DLGVBQU8sUUFBUTtBQUFBLGFBQ1o7QUFDSCxlQUFPLGVBQWMsU0FBUSxXQUFVLFdBQVU7QUFDN0MsY0FBSSxPQUFPLGVBQWUsU0FBUTtBQUNsQyxjQUFJLENBQUM7QUFBTTtBQUNYLGNBQUksT0FBTyxPQUFPLHlCQUF5QixNQUFNO0FBQ2pELGNBQUksS0FBSyxLQUFLO0FBQ1YsbUJBQU8sS0FBSyxJQUFJLEtBQUs7QUFBQTtBQUV6QixpQkFBTyxLQUFLO0FBQUE7QUFBQTtBQUdwQixhQUFPLEtBQUssUUFBUSxVQUFVLFlBQVk7QUFBQTtBQUU5Qyw2QkFBeUIsR0FBRztBQUN4Qix3QkFBa0IsT0FBTyxpQkFBaUIsT0FBTyxpQkFBaUIsMEJBQXlCLElBQUc7QUFDMUYsZUFBTyxHQUFFLGFBQWEsT0FBTyxlQUFlO0FBQUE7QUFFaEQsYUFBTyxnQkFBZ0I7QUFBQTtBQUUzQix1QkFBbUIsVUFBVSxZQUFZO0FBQ3JDLFVBQUksT0FBTyxlQUFlLGNBQWMsZUFBZSxNQUFNO0FBQ3pELGNBQU0sSUFBSSxVQUFVO0FBQUE7QUFFeEIsZUFBUyxZQUFZLE9BQU8sT0FBTyxjQUFjLFdBQVcsV0FBVztBQUFBLFFBQ25FLGFBQWE7QUFBQSxVQUNULE9BQU87QUFBQSxVQUNQLFVBQVU7QUFBQSxVQUNWLGNBQWM7QUFBQTtBQUFBO0FBR3RCLFVBQUk7QUFBWSx3QkFBZ0IsVUFBVTtBQUFBO0FBRTlDLG9DQUFnQyxLQUFLO0FBQ2pDLGFBQU8sT0FBTyxJQUFJLGFBQWEsTUFBTTtBQUFBLFFBQ2pDLFNBQVM7QUFBQTtBQUFBO0FBR2pCLHdDQUFvQyxNQUFNLE1BQU07QUFDNUMsVUFBSSxRQUFTLFNBQVEsVUFBVSxZQUFZLE9BQU8sU0FBUyxhQUFhO0FBQ3BFLGVBQU87QUFBQTtBQUVYLGFBQU8sdUJBQXVCO0FBQUE7QUFFbEMsNkJBQXlCLEdBQUcsR0FBRztBQUMzQix3QkFBa0IsT0FBTyxrQkFBa0IsMEJBQXlCLElBQUcsSUFBRztBQUN0RSxXQUFFLFlBQVk7QUFDZCxlQUFPO0FBQUE7QUFFWCxhQUFPLGdCQUFnQixHQUFHO0FBQUE7QUFFOUIsNEJBQXdCLFFBQVEsVUFBVTtBQUN0QyxhQUFNLENBQUMsT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLFdBQVU7QUFDMUQsaUJBQVMsZ0JBQWdCO0FBQ3pCLFlBQUksV0FBVztBQUFNO0FBQUE7QUFFekIsYUFBTztBQUFBO0FBRVgsUUFBSSxVQUFVLFNBQVMsS0FBSztBQUN4QjtBQUNBLGFBQU8sT0FBTyxPQUFPLFdBQVcsZUFBZSxJQUFJLGdCQUFnQixTQUFTLFdBQVcsT0FBTztBQUFBO0FBRWxHLHlDQUFxQztBQUNqQyxVQUFJLE9BQU8sWUFBWSxlQUFlLENBQUMsUUFBUTtBQUFXLGVBQU87QUFDakUsVUFBSSxRQUFRLFVBQVU7QUFBTSxlQUFPO0FBQ25DLFVBQUksT0FBTyxVQUFVO0FBQVksZUFBTztBQUN4QyxVQUFJO0FBQ0EsZ0JBQVEsVUFBVSxRQUFRLEtBQUssUUFBUSxVQUFVLFNBQVMsSUFBSSxXQUFXO0FBQUE7QUFDekUsZUFBTztBQUFBLGVBQ0YsR0FBUDtBQUNFLGVBQU87QUFBQTtBQUFBO0FBR2YsMEJBQXNCLFNBQVM7QUFDM0IsVUFBSSw0QkFBNEI7QUFDaEMsYUFBTyxnQ0FBZ0M7QUFDbkMsWUFBSSxRQUFRLGdCQUFnQixVQUFVO0FBQ3RDLFlBQUksMkJBQTJCO0FBQzNCLGNBQUksWUFBWSxnQkFBZ0IsTUFBTTtBQUN0QyxtQkFBUyxRQUFRLFVBQVUsT0FBTyxXQUFXO0FBQUEsZUFDMUM7QUFDSCxtQkFBUyxNQUFNLE1BQU0sTUFBTTtBQUFBO0FBRS9CLGVBQU8sMkJBQTJCLE1BQU07QUFBQTtBQUFBO0FBR2hELFFBQUksa0JBQWtCLGFBQWEsZUFBZTtBQUNsRCxRQUFJLGVBQTZCLHlCQUFTLGlCQUFpQjtBQUN2RCxnQkFBVSxlQUFjO0FBQ3hCLFVBQUksU0FBUyxhQUFhO0FBQzFCLDZCQUFzQixVQUFVO0FBQzVCLFlBQUksWUFBWSxVQUFVLFNBQVMsS0FBSyxVQUFVLE9BQU8sU0FBUyxVQUFVLEtBQUs7QUFDakYsd0JBQWdCLE1BQU07QUFDdEIsWUFBSTtBQUNKLFlBQUksT0FBTyxXQUFXO0FBQ3RCLGdCQUFRLE9BQU8sS0FBSyxNQUFNO0FBQzFCLGNBQU0sV0FBVztBQUNqQixjQUFNLFlBQVk7QUFDbEIsZUFBTztBQUFBO0FBRVgsbUJBQWEsZUFBYztBQUFBLFFBQ3ZCO0FBQUEsVUFDSSxLQUFLO0FBQUEsVUFDTCxPQUFPLHVCQUF1QjtBQUMxQixtQkFBTyxLQUFLO0FBQUE7QUFBQTtBQUFBLFFBR3BCO0FBQUEsVUFDSSxLQUFLO0FBQUEsVUFDTCxPQUFPLHVCQUF1QjtBQUMxQixtQkFBTyxLQUFLO0FBQUE7QUFBQTtBQUFBLFFBR3BCO0FBQUEsVUFDSSxLQUFLO0FBQUEsVUFDTCxPQUFPLDBCQUEwQjtBQUM3QixnQkFBSSxlQUFlO0FBQ25CLG1CQUFPO0FBQUE7QUFBQTtBQUFBLFFBR2Y7QUFBQSxVQUNJLEtBQUs7QUFBQSxVQUNMLE9BQU8sc0JBQXNCLFdBQVc7QUFDcEMsaUJBQUssWUFBWTtBQUFBO0FBQUE7QUFBQSxRQUd6QjtBQUFBLFVBQ0ksS0FBSztBQUFBLFVBQ0wsT0FBTyxrQkFBa0IsT0FBTztBQUM1QixnQkFBSSxVQUFVLE1BQU0sY0FBYyxPQUFPLFFBQVEsS0FBSyxhQUFhO0FBQ25FLG1CQUFPO0FBQUE7QUFBQTtBQUFBLFFBR2Y7QUFBQSxVQUNJLEtBQUs7QUFBQSxVQUNMLE9BQU8sZUFBZSxPQUFPLE9BQU8sVUFBVTtBQUMxQyxnQkFBSTtBQUNKLGdCQUFJLE9BQU8sS0FBSyxTQUFTO0FBQ3pCLGdCQUFJLFNBQVMsTUFBTTtBQUNmLHVCQUFTO0FBQUEsbUJBQ047QUFDSCxrQkFBSSxXQUFXLEtBQUssTUFBTSxPQUFPO0FBQ2pDLHVCQUFTLGFBQWE7QUFDdEIsa0JBQUksUUFBUTtBQUNSLHNCQUFNLEtBQUs7QUFBQTtBQUFBO0FBR25CLG1CQUFPO0FBQUE7QUFBQTtBQUFBLFFBR2Y7QUFBQSxVQUNJLEtBQUs7QUFBQSxVQUNMLE9BQU8sb0JBQW9CO0FBQ3ZCLGdCQUFJLGtCQUFrQixLQUFLLFlBQVksa0JBQWtCLFdBQVcsY0FBYyxTQUFTLEdBQUcsT0FBTyxLQUFLLFVBQVUsT0FBTztBQUMzSCxtQkFBTztBQUFBO0FBQUE7QUFBQSxRQUdmO0FBQUEsVUFDSSxLQUFLO0FBQUEsVUFDTCxPQUFPLGlCQUFpQjtBQUNwQixtQkFBTyxLQUFLLGdCQUFnQixjQUFhLFlBQVksU0FBUyxNQUFNLEtBQUssTUFBTSxlQUFjLEtBQUssVUFBVSxLQUFLO0FBQUE7QUFBQTtBQUFBO0FBSTdILGFBQU87QUFBQSxNQUNULGFBQWE7QUFDZixZQUFRLFVBQVU7QUFBQTs7O0FDMU1sQjs7Ozs7O0FBRXVCLFFBQUEsY0FBZSx1QkFBQTtBQUNiLFFBQUEsWUFBOEIsdUJBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7UUFFbEMscUJBQU4seUJBQVEsWUFBQTs7O21DQUNULFVBQVE7O0FBQ2xCLFlBQU0sdUJBQXVCLElBQUksVUFBWSxRQUFDLFdBQ3hDLFFBQVE7VUFDTjs7aUNBR0Y7OztNQVBzQyxZQUFVO3NCQUFyQzs7OztBQ0xyQjs7Ozs7O0FBRXVCLFFBQUEsY0FBa0IsdUJBQUE7QUFDaEIsUUFBQSxZQUFpQyx1QkFBQTtBQUMxQixRQUFBLG1CQUF3Qyx1QkFBQTtBQUVmLFFBQUEsYUFBaUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7UUFFckQsNkJBQU4seUJBQVEsWUFBQTs7OzZDQUF3Qjs7QUFFM0MsWUFBTSxxQkFBcUIsV0FBa0Isb0JBQ3ZDLHVCQUF1QixXQUFvQixzQkFDM0MseUJBQXlCLElBQUksVUFBWSxRQUFDLHFCQUMxQywyQkFBMkIsSUFBSSxVQUFZLFFBQUMsdUJBQzVDLHdDQUF3QyxJQUFJLGlCQUFtQixRQUFDLHlCQUNoRSxRQUFRO1VBQ047VUFDQTs7aUNBR0Y7OztNQVo4QyxZQUFVO3NCQUE3Qzs7OztBQ1JyQjs7Ozs7O0FBRXVCLFFBQUEsY0FBa0IsdUJBQUE7QUFDaEIsUUFBQSxZQUFpQyx1QkFBQTtBQUMxQixRQUFBLG1CQUF3Qyx1QkFBQTtBQUVaLFFBQUEsYUFBaUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7UUFFeEQsZ0NBQU4seUJBQVEsWUFBQTs7O2dEQUEyQjs7QUFFOUMsWUFBTSxxQkFBcUIsV0FBa0Isb0JBQ3ZDLDBCQUEwQixXQUF1Qix5QkFDakQseUJBQXlCLElBQUksVUFBWSxRQUFDLHFCQUMxQyw4QkFBOEIsSUFBSSxVQUFZLFFBQUMsMEJBQy9DLHdDQUF3QyxJQUFJLGlCQUFtQixRQUFDLHlCQUNoRSxRQUFRO1VBQ047VUFDQTs7aUNBR0Y7OztNQVppRCxZQUFVO3NCQUFoRDs7OztBQ1JyQjs7Ozs7O0FBRWlCLFFBQUEsUUFBUyx1QkFBQTtBQUNGLFFBQUEsUUFBa0IsdUJBQUE7QUFDWCxRQUFBLFlBQXdCLHVCQUFBO0FBQ2hCLFFBQUEsWUFBaUMsdUJBQUE7QUFDOUIsUUFBQSxlQUFvQyx1QkFBQTtBQUV2QixRQUFBLGFBQWM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7UUFFaEQsV0FBTix5QkFBUSxNQUFBOzs7MkJBQU07O0FBRXpCLFlBQU0sT0FBTyxXQUFZLGNBQ25CLDZCQUE2QixJQUFJLFVBQTBCLFdBQzNELGdDQUFnQyxJQUFJLGFBQTZCLFdBQ2pFLHFDQUFxQyxJQUFJLFVBQWtCLFFBQUMsV0FBd0IsMkJBQ3BGLGNBQWM7VUFDWjtVQUNBO1VBQ0E7V0FFRixPQUFPLE1BQVc7aUNBRWxCLE1BQU0sYUFBYTs7O01BYlMsTUFBSTtzQkFBckI7Ozs7QUNWckI7Ozs7OztBQUU0QixRQUFBLGVBQXdCLHVCQUFBO0FBRXZCLFFBQUEsU0FBdUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztRQUUvQixjQUFOLHlCQUFRLGlCQUFBOzs7OEJBQVM7Ozs7OztVQUM5QixLQUFBO2lCQUFBLHNCQUFhLE1BQU07QUFDakIsZ0JBQU0sT0FBTyxLQUFLLFdBQ1osY0FBYyxLQUFLLHVCQUNuQixPQUFPLGFBQWUsU0FDdEIsT0FBTyxJQUFJLEtBQUssTUFBTSxhQUFhO0FBRXpDLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxtQkFBVTtBQUNSLGdCQUFNLGFBQWEsS0FBSyxpQkFDbEIsaUJBQWMsSUFBRyxRQUFLLE1BQUMsYUFDdkIsY0FBYyxnQkFDZCxPQUFPLFlBQVk7QUFFekIsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLCtCQUFzQjtBQUNwQixnQkFBTSxhQUFhLEtBQUssaUJBQ2xCLGlCQUFjLElBQUcsUUFBSyxNQUFDLGFBQ3ZCLGtCQUFrQixnQkFDbEIsY0FBYyxnQkFBZ0I7QUFFcEMsbUJBQU87Ozs7O1VBR0YsS0FBQTtpQkFBUCxtQ0FBaUMsVUFBVSxZQUFZO0FBQUUsbUJBQU8sYUFBZSxRQUFDLDBCQUEwQixjQUFhLFVBQVU7Ozs7O01BNUIxRixhQUFlO3NCQUFuQzs7OztBQ05yQjtBQUFBO0FBQ0EsV0FBTyxlQUFlLFNBQVMsY0FBYztBQUFBLE1BQ3pDLE9BQU87QUFBQTtBQUVYLFlBQVEsVUFBVTtBQUNsQixRQUFJLFlBQVksdUJBQXVCO0FBQ3ZDLFFBQUksYUFBYSx1QkFBdUI7QUFDeEMsb0NBQWdDLE1BQU07QUFDbEMsVUFBSSxTQUFTLFFBQVE7QUFDakIsY0FBTSxJQUFJLGVBQWU7QUFBQTtBQUU3QixhQUFPO0FBQUE7QUFFWCw2QkFBeUIsVUFBVSxhQUFhO0FBQzVDLFVBQUksQ0FBRSxxQkFBb0IsY0FBYztBQUNwQyxjQUFNLElBQUksVUFBVTtBQUFBO0FBQUE7QUFHNUIsK0JBQTJCLFFBQVEsT0FBTztBQUN0QyxlQUFRLElBQUksR0FBRyxJQUFJLE1BQU0sUUFBUSxLQUFJO0FBQ2pDLFlBQUksYUFBYSxNQUFNO0FBQ3ZCLG1CQUFXLGFBQWEsV0FBVyxjQUFjO0FBQ2pELG1CQUFXLGVBQWU7QUFDMUIsWUFBSSxXQUFXO0FBQVkscUJBQVcsV0FBVztBQUNqRCxlQUFPLGVBQWUsUUFBUSxXQUFXLEtBQUs7QUFBQTtBQUFBO0FBR3RELDBCQUFzQixhQUFhLFlBQVksYUFBYTtBQUN4RCxVQUFJO0FBQVksMEJBQWtCLFlBQVksV0FBVztBQUN6RCxVQUFJO0FBQWEsMEJBQWtCLGFBQWE7QUFDaEQsYUFBTztBQUFBO0FBRVgsa0JBQWMsUUFBUSxVQUFVLFVBQVU7QUFDdEMsVUFBSSxPQUFPLFlBQVksZUFBZSxRQUFRLEtBQUs7QUFDL0MsZUFBTyxRQUFRO0FBQUEsYUFDWjtBQUNILGVBQU8sZUFBYyxTQUFRLFdBQVUsV0FBVTtBQUM3QyxjQUFJLE9BQU8sZUFBZSxTQUFRO0FBQ2xDLGNBQUksQ0FBQztBQUFNO0FBQ1gsY0FBSSxPQUFPLE9BQU8seUJBQXlCLE1BQU07QUFDakQsY0FBSSxLQUFLLEtBQUs7QUFDVixtQkFBTyxLQUFLLElBQUksS0FBSztBQUFBO0FBRXpCLGlCQUFPLEtBQUs7QUFBQTtBQUFBO0FBR3BCLGFBQU8sS0FBSyxRQUFRLFVBQVUsWUFBWTtBQUFBO0FBRTlDLDZCQUF5QixHQUFHO0FBQ3hCLHdCQUFrQixPQUFPLGlCQUFpQixPQUFPLGlCQUFpQiwwQkFBeUIsSUFBRztBQUMxRixlQUFPLEdBQUUsYUFBYSxPQUFPLGVBQWU7QUFBQTtBQUVoRCxhQUFPLGdCQUFnQjtBQUFBO0FBRTNCLHVCQUFtQixVQUFVLFlBQVk7QUFDckMsVUFBSSxPQUFPLGVBQWUsY0FBYyxlQUFlLE1BQU07QUFDekQsY0FBTSxJQUFJLFVBQVU7QUFBQTtBQUV4QixlQUFTLFlBQVksT0FBTyxPQUFPLGNBQWMsV0FBVyxXQUFXO0FBQUEsUUFDbkUsYUFBYTtBQUFBLFVBQ1QsT0FBTztBQUFBLFVBQ1AsVUFBVTtBQUFBLFVBQ1YsY0FBYztBQUFBO0FBQUE7QUFHdEIsVUFBSTtBQUFZLHdCQUFnQixVQUFVO0FBQUE7QUFFOUMsb0NBQWdDLEtBQUs7QUFDakMsYUFBTyxPQUFPLElBQUksYUFBYSxNQUFNO0FBQUEsUUFDakMsU0FBUztBQUFBO0FBQUE7QUFHakIsd0NBQW9DLE1BQU0sTUFBTTtBQUM1QyxVQUFJLFFBQVMsU0FBUSxVQUFVLFlBQVksT0FBTyxTQUFTLGFBQWE7QUFDcEUsZUFBTztBQUFBO0FBRVgsYUFBTyx1QkFBdUI7QUFBQTtBQUVsQyw2QkFBeUIsR0FBRyxHQUFHO0FBQzNCLHdCQUFrQixPQUFPLGtCQUFrQiwwQkFBeUIsSUFBRyxJQUFHO0FBQ3RFLFdBQUUsWUFBWTtBQUNkLGVBQU87QUFBQTtBQUVYLGFBQU8sZ0JBQWdCLEdBQUc7QUFBQTtBQUU5Qiw0QkFBd0IsUUFBUSxVQUFVO0FBQ3RDLGFBQU0sQ0FBQyxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsV0FBVTtBQUMxRCxpQkFBUyxnQkFBZ0I7QUFDekIsWUFBSSxXQUFXO0FBQU07QUFBQTtBQUV6QixhQUFPO0FBQUE7QUFFWCxRQUFJLFVBQVUsU0FBUyxLQUFLO0FBQ3hCO0FBQ0EsYUFBTyxPQUFPLE9BQU8sV0FBVyxlQUFlLElBQUksZ0JBQWdCLFNBQVMsV0FBVyxPQUFPO0FBQUE7QUFFbEcseUNBQXFDO0FBQ2pDLFVBQUksT0FBTyxZQUFZLGVBQWUsQ0FBQyxRQUFRO0FBQVcsZUFBTztBQUNqRSxVQUFJLFFBQVEsVUFBVTtBQUFNLGVBQU87QUFDbkMsVUFBSSxPQUFPLFVBQVU7QUFBWSxlQUFPO0FBQ3hDLFVBQUk7QUFDQSxnQkFBUSxVQUFVLFFBQVEsS0FBSyxRQUFRLFVBQVUsU0FBUyxJQUFJLFdBQVc7QUFBQTtBQUN6RSxlQUFPO0FBQUEsZUFDRixHQUFQO0FBQ0UsZUFBTztBQUFBO0FBQUE7QUFHZiwwQkFBc0IsU0FBUztBQUMzQixVQUFJLDRCQUE0QjtBQUNoQyxhQUFPLGdDQUFnQztBQUNuQyxZQUFJLFFBQVEsZ0JBQWdCLFVBQVU7QUFDdEMsWUFBSSwyQkFBMkI7QUFDM0IsY0FBSSxZQUFZLGdCQUFnQixNQUFNO0FBQ3RDLG1CQUFTLFFBQVEsVUFBVSxPQUFPLFdBQVc7QUFBQSxlQUMxQztBQUNILG1CQUFTLE1BQU0sTUFBTSxNQUFNO0FBQUE7QUFFL0IsZUFBTywyQkFBMkIsTUFBTTtBQUFBO0FBQUE7QUFHaEQsUUFBSSxxQkFBbUMseUJBQVMsY0FBYztBQUMxRCxnQkFBVSxxQkFBb0I7QUFDOUIsVUFBSSxTQUFTLGFBQWE7QUFDMUIsbUNBQTRCLFNBQVM7QUFDakMsd0JBQWdCLE1BQU07QUFDdEIsWUFBSTtBQUNKLGdCQUFRLE9BQU8sS0FBSztBQUNwQixjQUFNLFVBQVU7QUFDaEIsZUFBTztBQUFBO0FBRVgsbUJBQWEscUJBQW9CO0FBQUEsUUFDN0I7QUFBQSxVQUNJLEtBQUs7QUFBQSxVQUNMLE9BQU8sZUFBZSxPQUFPLE9BQU8sVUFBVTtBQUMxQyxnQkFBSTtBQUNKLGdCQUFJLGVBQWU7QUFDbkIsZ0JBQUksYUFBYSxNQUFNLGlCQUFpQix1QkFBdUIsTUFBTSwyQkFBMkIsbUJBQW1CO0FBQ25ILGdCQUFJLHFCQUFxQixNQUFNO0FBQzNCLGtCQUFJLFVBQVUsaUJBQWlCO0FBQy9CLGtCQUFJLFlBQVksS0FBSyxTQUFTO0FBQzFCLCtCQUFlLFdBQVcsUUFBUSxxQkFBcUI7QUFBQTtBQUFBO0FBRy9ELHFCQUFTLGlCQUFpQjtBQUMxQixnQkFBSSxRQUFRO0FBQ1Isb0JBQU0sS0FBSztBQUNYLGtCQUFJLGFBQWEsTUFBTTtBQUNuQix5QkFBUztBQUNULG9CQUFJLENBQUMsUUFBUTtBQUNULHdCQUFNO0FBQUE7QUFBQTtBQUFBO0FBSWxCLGdCQUFJLENBQUMsUUFBUTtBQUNULG9CQUFNLFVBQVU7QUFBQTtBQUVwQixtQkFBTztBQUFBO0FBQUE7QUFBQSxRQUdmO0FBQUEsVUFDSSxLQUFLO0FBQUEsVUFDTCxPQUFPLG9CQUFvQjtBQUN2QixnQkFBSSxVQUFVLEtBQUssUUFBUSxRQUFRLE1BQU0sU0FBUyxTQUFTLElBQUssT0FBTyxTQUFTO0FBQ2hGLG1CQUFPO0FBQUE7QUFBQTtBQUFBLFFBR2Y7QUFBQSxVQUNJLEtBQUs7QUFBQSxVQUNMLE9BQU8saUJBQWlCO0FBQ3BCLG1CQUFPLEtBQUssZ0JBQWdCLG9CQUFtQixZQUFZLFNBQVMsTUFBTSxLQUFLLE1BQU0scUJBQW9CLEtBQUs7QUFBQTtBQUFBO0FBQUE7QUFJMUgsYUFBTztBQUFBLE1BQ1QsVUFBVTtBQUNaLFlBQVEsVUFBVTtBQUFBOzs7QUMvS2xCOzs7Ozs7QUFFK0IsUUFBQSxlQUFjO0FBRXRCLFFBQUEsY0FBZSx1QkFBQTtBQUNiLFFBQUEsWUFBOEIsdUJBQUE7QUFDeEIsUUFBQSxrQkFBaUMsdUJBQUE7QUFFZCxRQUFBLGFBQWM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFaEUsUUFBUSxZQUEwQixhQUFjLGVBQXhDO0FBQVIsUUFBbUIsYUFBZSxhQUFjLGVBQTdCO1FBRUUsaUJBQU4seUJBQVEsWUFBQTs7O2lDQUFZOztBQUUvQixZQUFNLGlDQUFpQyxXQUNqQyxrQ0FBa0MsWUFDbEMsZUFBZSxXQUFZLGNBQzNCLHNCQUFzQixXQUFtQixxQkFDekMsbUJBQW1CLElBQUksVUFBWSxRQUFDLGVBQ3BDLDhCQUE4QixJQUFJLGdCQUFrQixRQUFDLGlDQUNyRCwwQkFBMEIsSUFBSSxVQUFZLFFBQUMsc0JBQzNDLCtCQUErQixJQUFJLGdCQUFrQixRQUFDLGtDQUN0RCxRQUFRO1VBQ047VUFDQTtVQUNBO1VBQ0E7O2lDQUdGOzs7TUFqQmtDLFlBQVU7c0JBQWpDOzs7O0FDWnJCOzs7Ozs7QUFFaUIsUUFBQSxRQUFTLHVCQUFBO0FBQ0YsUUFBQSxTQUFrQix1QkFBQTtBQUNmLFFBQUEsU0FBb0IsdUJBQUE7QUFFbEIsUUFBQSxhQUFjOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1FBRXRCLFdBQU4seUJBQVEsTUFBQTs7OzJCQUFNOztBQUV6QixZQUFNLGlCQUFpQixJQUFJLE9BQWMsV0FDbkMsT0FBTyxXQUFZLGNBQ25CLGNBQWM7VUFDWjtXQUVGLE9BQU8sT0FBVztpQ0FFbEIsTUFBTSxhQUFhOzs7TUFUUyxNQUFJO3NCQUFyQjs7OztBQ1JyQjs7Ozs7O0FBRTRCLFFBQUEsZUFBd0IsdUJBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztRQUUvQixlQUFOLHlCQUFRLGlCQUFBOzs7K0JBQVU7Ozs7OztVQUN4QixLQUFBO2lCQUFQLG1DQUFpQyxVQUFVLFlBQVk7QUFBRSxtQkFBTyxhQUFlLFFBQUMsMEJBQTBCLGVBQWMsVUFBVTs7Ozs7TUFEMUYsYUFBZTtzQkFBcEM7Ozs7QUNKckI7Ozs7OztBQUUrQixRQUFBLGVBQWM7QUFFcEIsUUFBQSxZQUFxQix1QkFBQTtBQUNyQixRQUFBLGFBQXFCLHVCQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRTlDLFFBQVEsV0FBYSxhQUFjLGVBQTNCO1FBRWEsZUFBTix5QkFBUSxjQUFBOzs7K0JBQVU7Ozs7OztVQUMvQixLQUFBO2lCQUFBLGVBQU0sT0FBTyxPQUFPLFVBQVU7QUFDNUIsZ0JBQUk7QUFFSixnQkFBSSxlQUFlO0FBRW5CLGdCQUFNLGFBQWEsTUFBTSxpQkFDckIsdUJBQXVCLE1BQU0sMkJBQ2hDLG1CQUFtQjtBQUVwQixnQkFBSSxxQkFBcUIsTUFBTTtBQUM3Qiw2QkFBZSxXQUFZLFFBQUMscUJBQXFCOztBQUduRCxxQkFBVSxpQkFBaUI7QUFFM0IsZ0JBQUksUUFBUTtBQUNWLG9CQUFNLEtBQUs7QUFFWCxrQkFBSSxhQUFhLE1BQU07QUFDckIseUJBQVM7QUFFVCxvQkFBRSxDQUFHLFFBQVE7QUFDWCx3QkFBTTs7OztBQUtaLGdCQUFFLENBQUcsUUFBUTtBQUNYLG9CQUFNLFVBQVU7O0FBR2xCLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxvQkFBVztBQUNULGdCQUFNLFNBQVM7QUFFZixtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsaUJBQVE7QUFBRSxtQkFBTSxLQUFBLGdCQXpDRyxjQUFZLFlBeUNSLFNBQU4sTUFBSyxLQUFBLE1BQU87Ozs7O01BekNXLFVBQVk7c0JBQWpDOzs7O0FDVHJCOzs7Ozs7QUFFdUIsUUFBQSxjQUFlLHVCQUFBO0FBQ2IsUUFBQSxZQUEyQix1QkFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztRQUUvQixrQkFBTix5QkFBUSxZQUFBOzs7a0NBQWE7O0FBRWhDLFlBQU0sZUFBZSxJQUFJLFVBQVksV0FDL0IsUUFBUTtVQUNOOztpQ0FHRjs7O01BUG1DLFlBQVU7c0JBQWxDOzs7O0FDTHJCOzs7Ozs7QUFFaUIsUUFBQSxRQUFTLHVCQUFBO0FBQ0QsUUFBQSxTQUFtQix1QkFBQTtBQUNoQixRQUFBLFVBQXFCLHVCQUFBO0FBRW5CLFFBQUEsYUFBYzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztRQUV2QixZQUFOLHlCQUFRLE1BQUE7Ozs0QkFBTzs7QUFFMUIsWUFBTSxrQkFBa0IsSUFBSSxRQUFlLFdBQ3JDLE9BQU8sV0FBYSxlQUNwQixjQUFjO1VBQ1o7V0FFRixPQUFPLE9BQVk7aUNBRW5CLE1BQU0sYUFBYTs7O01BVFUsTUFBSTtzQkFBdEI7Ozs7QUNSckI7Ozs7OztBQUUyQixRQUFBLGVBQXdCLHVCQUFBO0FBRXRCLFFBQUEsYUFBaUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztRQUV6QixrQkFBTix5QkFBUSxpQkFBQTs7O2tDQUFhOzs7Ozs7VUFDbEMsS0FBQTtpQkFBQSx1QkFBYyxNQUFNO0FBQ2xCLGdCQUFNLGFBQWEsS0FBSyxpQkFDbEIsYUFBWSxXQUFXLE9BQU8sU0FBQyxXQUFXLFdBQWM7QUFDdEQsa0JBQU0sMkJBQTJCLFVBQVU7QUFFM0Msa0JBQUksMEJBQTBCO0FBQzVCLG9CQUFNLGtCQUFrQixXQUNsQixXQUFXLFVBQVUsZUFDckIsdUJBQXdCLGFBQWEsV0FBWSxjQUNqRCwwQkFBMEI7QUFFaEMsb0JBQUkseUJBQXlCO0FBQzNCLHNCQUFNLFdBQVc7QUFFakIsNEJBQVUsS0FBSzs7O0FBSW5CLHFCQUFPO2VBQ04sS0FDSCxRQUFRLFdBQVUsSUFBSSxTQUFDLFVBQWE7QUFDbEMsa0JBQU0sT0FBTyxTQUFTLGFBQWE7QUFFbkMscUJBQU87O0FBR2YsbUJBQU87Ozs7O1VBR0YsS0FBQTtpQkFBUCxtQ0FBaUMsVUFBVSxZQUFZO0FBQUUsbUJBQU8sYUFBZSxRQUFDLDBCQUEwQixrQkFBaUIsVUFBVTs7Ozs7TUE5QjFGLGFBQWU7c0JBQXZDOzs7O0FDTnJCO0FBQUE7QUFDQSxXQUFPLGVBQWUsU0FBUyxjQUFjO0FBQUEsTUFDekMsT0FBTztBQUFBO0FBRVgsWUFBUSxVQUFVO0FBQ2xCLFFBQUksZUFBZSx1QkFBdUI7QUFDMUMsUUFBSSxhQUFhO0FBQ2pCLFFBQUksU0FBUztBQUNiLG9DQUFnQyxNQUFNO0FBQ2xDLFVBQUksU0FBUyxRQUFRO0FBQ2pCLGNBQU0sSUFBSSxlQUFlO0FBQUE7QUFFN0IsYUFBTztBQUFBO0FBRVgsNkJBQXlCLFVBQVUsYUFBYTtBQUM1QyxVQUFJLENBQUUscUJBQW9CLGNBQWM7QUFDcEMsY0FBTSxJQUFJLFVBQVU7QUFBQTtBQUFBO0FBRzVCLCtCQUEyQixRQUFRLE9BQU87QUFDdEMsZUFBUSxJQUFJLEdBQUcsSUFBSSxNQUFNLFFBQVEsS0FBSTtBQUNqQyxZQUFJLGFBQWEsTUFBTTtBQUN2QixtQkFBVyxhQUFhLFdBQVcsY0FBYztBQUNqRCxtQkFBVyxlQUFlO0FBQzFCLFlBQUksV0FBVztBQUFZLHFCQUFXLFdBQVc7QUFDakQsZUFBTyxlQUFlLFFBQVEsV0FBVyxLQUFLO0FBQUE7QUFBQTtBQUd0RCwwQkFBc0IsYUFBYSxZQUFZLGFBQWE7QUFDeEQsVUFBSTtBQUFZLDBCQUFrQixZQUFZLFdBQVc7QUFDekQsVUFBSTtBQUFhLDBCQUFrQixhQUFhO0FBQ2hELGFBQU87QUFBQTtBQUVYLGtCQUFjLFFBQVEsVUFBVSxVQUFVO0FBQ3RDLFVBQUksT0FBTyxZQUFZLGVBQWUsUUFBUSxLQUFLO0FBQy9DLGVBQU8sUUFBUTtBQUFBLGFBQ1o7QUFDSCxlQUFPLGVBQWMsU0FBUSxXQUFVLFdBQVU7QUFDN0MsY0FBSSxPQUFPLGVBQWUsU0FBUTtBQUNsQyxjQUFJLENBQUM7QUFBTTtBQUNYLGNBQUksT0FBTyxPQUFPLHlCQUF5QixNQUFNO0FBQ2pELGNBQUksS0FBSyxLQUFLO0FBQ1YsbUJBQU8sS0FBSyxJQUFJLEtBQUs7QUFBQTtBQUV6QixpQkFBTyxLQUFLO0FBQUE7QUFBQTtBQUdwQixhQUFPLEtBQUssUUFBUSxVQUFVLFlBQVk7QUFBQTtBQUU5Qyw2QkFBeUIsR0FBRztBQUN4Qix3QkFBa0IsT0FBTyxpQkFBaUIsT0FBTyxpQkFBaUIsMEJBQXlCLElBQUc7QUFDMUYsZUFBTyxHQUFFLGFBQWEsT0FBTyxlQUFlO0FBQUE7QUFFaEQsYUFBTyxnQkFBZ0I7QUFBQTtBQUUzQix1QkFBbUIsVUFBVSxZQUFZO0FBQ3JDLFVBQUksT0FBTyxlQUFlLGNBQWMsZUFBZSxNQUFNO0FBQ3pELGNBQU0sSUFBSSxVQUFVO0FBQUE7QUFFeEIsZUFBUyxZQUFZLE9BQU8sT0FBTyxjQUFjLFdBQVcsV0FBVztBQUFBLFFBQ25FLGFBQWE7QUFBQSxVQUNULE9BQU87QUFBQSxVQUNQLFVBQVU7QUFBQSxVQUNWLGNBQWM7QUFBQTtBQUFBO0FBR3RCLFVBQUk7QUFBWSx3QkFBZ0IsVUFBVTtBQUFBO0FBRTlDLG9DQUFnQyxLQUFLO0FBQ2pDLGFBQU8sT0FBTyxJQUFJLGFBQWEsTUFBTTtBQUFBLFFBQ2pDLFNBQVM7QUFBQTtBQUFBO0FBR2pCLHdDQUFvQyxNQUFNLE1BQU07QUFDNUMsVUFBSSxRQUFTLFNBQVEsVUFBVSxZQUFZLE9BQU8sU0FBUyxhQUFhO0FBQ3BFLGVBQU87QUFBQTtBQUVYLGFBQU8sdUJBQXVCO0FBQUE7QUFFbEMsNkJBQXlCLEdBQUcsR0FBRztBQUMzQix3QkFBa0IsT0FBTyxrQkFBa0IsMEJBQXlCLElBQUcsSUFBRztBQUN0RSxXQUFFLFlBQVk7QUFDZCxlQUFPO0FBQUE7QUFFWCxhQUFPLGdCQUFnQixHQUFHO0FBQUE7QUFFOUIsNEJBQXdCLFFBQVEsVUFBVTtBQUN0QyxhQUFNLENBQUMsT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLFdBQVU7QUFDMUQsaUJBQVMsZ0JBQWdCO0FBQ3pCLFlBQUksV0FBVztBQUFNO0FBQUE7QUFFekIsYUFBTztBQUFBO0FBRVgsUUFBSSxVQUFVLFNBQVMsS0FBSztBQUN4QjtBQUNBLGFBQU8sT0FBTyxPQUFPLFdBQVcsZUFBZSxJQUFJLGdCQUFnQixTQUFTLFdBQVcsT0FBTztBQUFBO0FBRWxHLHlDQUFxQztBQUNqQyxVQUFJLE9BQU8sWUFBWSxlQUFlLENBQUMsUUFBUTtBQUFXLGVBQU87QUFDakUsVUFBSSxRQUFRLFVBQVU7QUFBTSxlQUFPO0FBQ25DLFVBQUksT0FBTyxVQUFVO0FBQVksZUFBTztBQUN4QyxVQUFJO0FBQ0EsZ0JBQVEsVUFBVSxRQUFRLEtBQUssUUFBUSxVQUFVLFNBQVMsSUFBSSxXQUFXO0FBQUE7QUFDekUsZUFBTztBQUFBLGVBQ0YsR0FBUDtBQUNFLGVBQU87QUFBQTtBQUFBO0FBR2YsMEJBQXNCLFNBQVM7QUFDM0IsVUFBSSw0QkFBNEI7QUFDaEMsYUFBTyxnQ0FBZ0M7QUFDbkMsWUFBSSxRQUFRLGdCQUFnQixVQUFVO0FBQ3RDLFlBQUksMkJBQTJCO0FBQzNCLGNBQUksWUFBWSxnQkFBZ0IsTUFBTTtBQUN0QyxtQkFBUyxRQUFRLFVBQVUsT0FBTyxXQUFXO0FBQUEsZUFDMUM7QUFDSCxtQkFBUyxNQUFNLE1BQU0sTUFBTTtBQUFBO0FBRS9CLGVBQU8sMkJBQTJCLE1BQU07QUFBQTtBQUFBO0FBR2hELFFBQUksb0JBQWtDLHlCQUFTLGlCQUFpQjtBQUM1RCxnQkFBVSxvQkFBbUI7QUFDN0IsVUFBSSxTQUFTLGFBQWE7QUFDMUIsa0NBQTJCLE9BQU87QUFDOUIsd0JBQWdCLE1BQU07QUFDdEIsWUFBSTtBQUNKLFlBQUksT0FBTyxXQUFXO0FBQ3RCLGdCQUFRLE9BQU8sS0FBSyxNQUFNO0FBQzFCLGNBQU0sUUFBUTtBQUNkLGVBQU87QUFBQTtBQUVYLG1CQUFhLG9CQUFtQjtBQUFBLFFBQzVCO0FBQUEsVUFDSSxLQUFLO0FBQUEsVUFDTCxPQUFPLG9CQUFvQjtBQUN2QixtQkFBTyxLQUFLO0FBQUE7QUFBQTtBQUFBLFFBR3BCO0FBQUEsVUFDSSxLQUFLO0FBQUEsVUFDTCxPQUFPLGVBQWUsT0FBTyxPQUFPLFVBQVU7QUFDMUMsZ0JBQUk7QUFDSixpQkFBSyxNQUFNLEtBQUssU0FBUyxNQUFNO0FBQzNCLHVCQUFTLEtBQUssTUFBTSxPQUFPLE9BQU87QUFDbEMsa0JBQUksUUFBUTtBQUNSLHVCQUFPO0FBQUE7QUFBQTtBQUdmLG1CQUFPO0FBQUE7QUFBQTtBQUFBLFFBR2Y7QUFBQSxVQUNJLEtBQUs7QUFBQSxVQUNMLE9BQU8sb0JBQW9CO0FBQ3ZCLGdCQUFJLGVBQWUsS0FBSyxNQUFNLE9BQU8sU0FBUyxhQUFhLE1BQU07QUFDN0Qsa0JBQUksYUFBYSxLQUFLO0FBQ3RCLGtCQUFJLGdCQUFnQixNQUFNO0FBQ3RCLDhCQUFjO0FBQUEscUJBQ1g7QUFDSCw4QkFBYyxHQUFHLE9BQU8sYUFBYSxPQUFPLE9BQU87QUFBQTtBQUV2RCxxQkFBTztBQUFBLGVBQ1IsT0FBTyxTQUFTLEtBQUssT0FBTyxjQUFjO0FBQzdDLG1CQUFPO0FBQUE7QUFBQTtBQUFBLFFBR2Y7QUFBQSxVQUNJLEtBQUs7QUFBQSxVQUNMLE9BQU8saUJBQWlCO0FBQ3BCLG1CQUFPLEtBQUssZ0JBQWdCLG1CQUFrQixZQUFZLFNBQVMsTUFBTSxLQUFLLE1BQU0sb0JBQW1CLEtBQUs7QUFBQTtBQUFBO0FBQUEsU0FHckg7QUFBQSxRQUNDO0FBQUEsVUFDSSxLQUFLO0FBQUEsVUFDTCxPQUFPLG1CQUFtQixPQUFPO0FBQzdCLGdCQUFJLDBCQUEyQixJQUFHLFFBQVEsbUJBQW1CO0FBQzdELG9CQUFRO0FBQ1IsZ0JBQUksWUFBYSxJQUFHLFFBQVEsS0FBSztBQUNqQyxvQkFBUTtBQUNSLGdCQUFJLFlBQVksT0FBTyxRQUFRLE1BQU0sSUFBSSxTQUFTLE1BQU07QUFDcEQsa0JBQUksT0FBTyxLQUFLLGFBQWE7QUFDN0IscUJBQU87QUFBQSxnQkFDUCxvQkFBb0IsSUFBSSxtQkFBa0I7QUFDOUMsbUJBQU87QUFBQTtBQUFBO0FBQUE7QUFJbkIsYUFBTztBQUFBLE1BQ1QsYUFBYTtBQUNmLFlBQVEsVUFBVTtBQUFBOzs7QUMvTGxCOzs7Ozs7QUFFdUIsUUFBQSxjQUFlLHVCQUFBO0FBQ2IsUUFBQSxZQUE4Qix1QkFBQTtBQUN6QixRQUFBLGlCQUFtQyx1QkFBQTtBQUNsQyxRQUFBLGtCQUFvQyx1QkFBQTtBQUV2QixRQUFBLGFBQWM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7UUFFckMscUJBQU4seUJBQVEsWUFBQTs7O3FDQUFnQjs7QUFFbkMsWUFBTSxlQUFlLFdBQVksY0FDM0IsZ0JBQWdCLFdBQWEsZUFDN0IsbUJBQW1CLElBQUksVUFBWSxRQUFDLGVBQ3BDLG9CQUFvQixJQUFJLFVBQVksUUFBQyxnQkFDckMsb0NBQW9DO1VBQ2xDO1VBQ0E7V0FFRixnREFBZ0QsSUFBSSxlQUFpQixRQUFDLG9DQUN0RSw4REFBOEQsSUFBSSxnQkFBa0IsUUFBQyxnREFDckYsUUFBUTtVQUNOOztpQ0FHRjs7O01BaEJzQyxZQUFVO3NCQUFyQzs7OztBQ1RyQjs7Ozs7O0FBRWlCLFFBQUEsUUFBUyx1QkFBQTtBQUNFLFFBQUEsWUFBc0IsdUJBQUE7QUFDbkIsUUFBQSxhQUF3Qix1QkFBQTtBQUV0QixRQUFBLGFBQWM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7UUFFMUIsZUFBTix5QkFBUSxNQUFBOzs7K0JBQVU7O0FBRTdCLFlBQU0scUJBQXFCLElBQUksV0FBa0IsV0FDM0MsT0FBTyxXQUFnQixrQkFDdkIsY0FBYztVQUNaO1dBRUYsT0FBTyxVQUFlO2lDQUV0QixNQUFNLGFBQWE7OztNQVRhLE1BQUk7c0JBQXpCOzs7O0FDUnJCOzs7Ozs7QUFFeUIsUUFBQSxZQUFpQyx1QkFBQTtBQUM5QixRQUFBLGVBQXdCLHVCQUFBO0FBRTlCLFFBQUEsU0FBdUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztRQUV4QixrQkFBTix5QkFBUSxpQkFBQTs7O2tDQUFhOzs7Ozs7VUFDbEMsS0FBQTtpQkFBQSxzQkFBYSxXQUFXO0FBQ3RCLGdCQUFNLFdBQVcsS0FBSyxlQUNoQixlQUFlLElBQUksVUFBWSxRQUFDLFVBQVU7QUFFaEQsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLHVCQUFjO0FBQ1osZ0JBQU0sYUFBYSxLQUFLLGlCQUNsQixpQkFBYyxJQUFHLFFBQUssTUFBQyxhQUN2QixlQUFlLGdCQUNmLHNCQUFzQixhQUFhLGNBQ25DLFdBQVc7QUFFakIsbUJBQU87Ozs7O1VBR0YsS0FBQTtpQkFBUCxtQ0FBaUMsVUFBVSxZQUFZO0FBQUUsbUJBQU8sYUFBZSxRQUFDLDBCQUEwQixrQkFBaUIsVUFBVTs7Ozs7TUFsQjFGLGFBQWU7c0JBQXZDOzs7O0FDUHJCOzs7Ozs7QUFFaUIsUUFBQSxRQUFTLHVCQUFBO0FBQ0MsUUFBQSxRQUFvQix1QkFBQTtBQUNuQixRQUFBLFlBQXNCLHVCQUFBO0FBRWpCLFFBQUEsYUFBYzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztRQUUxQixlQUFOLHlCQUFRLE1BQUE7OzsrQkFBVTs7QUFFN0IsWUFBTSxpQkFBaUIsSUFBSSxNQUFjLFdBQ25DLE9BQU8sV0FBZ0Isa0JBQ3ZCLGNBQWM7VUFDWjtXQUVGLE9BQU8sVUFBZTtpQ0FFdEIsTUFBTSxhQUFhOzs7TUFUYSxNQUFJO3NCQUF6Qjs7OztBQ1JyQjs7Ozs7O0FBRXlCLFFBQUEsWUFBOEIsdUJBQUE7QUFDM0IsUUFBQSxlQUF3Qix1QkFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1FBRS9CLGtCQUFOLHlCQUFRLGlCQUFBOzs7a0NBQWE7Ozs7OztVQUNsQyxLQUFBO2lCQUFBLHNCQUFhLFdBQVc7QUFDdEIsZ0JBQU0sZUFBZSxJQUFJLFVBQVk7QUFFckMsbUJBQU87Ozs7O1VBR0YsS0FBQTtpQkFBUCxtQ0FBaUMsVUFBVSxZQUFZO0FBQUUsbUJBQU8sYUFBZSxRQUFDLDBCQUEwQixrQkFBaUIsVUFBVTs7Ozs7TUFQMUYsYUFBZTtzQkFBdkM7Ozs7QUNMckI7Ozs7OztBQUV1QixRQUFBLGNBQWUsdUJBQUE7QUFDUCxRQUFBLGtCQUFpQyx1QkFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztRQUUzQywyQkFBTix5QkFBUSxZQUFBOzs7eUNBQ1QsU0FBTzs7QUFDakIsWUFBTSxxQkFBcUIsSUFBSSxnQkFBa0IsUUFBQyxVQUM1QyxRQUFRO1VBQ047O2lDQUdGOzs7TUFQNEMsWUFBVTtzQkFBM0M7Ozs7QUNMckI7Ozs7OztBQUUrQixRQUFBLGVBQWM7QUFFNUIsUUFBQSxRQUFTLHVCQUFBO0FBQ0UsUUFBQSxZQUFzQix1QkFBQTtBQUNiLFFBQUEsa0JBQThCLHVCQUFBO0FBRWxDLFFBQUEsYUFBYzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUUvQyxRQUFRLFdBQWEsYUFBYyxlQUEzQjtRQUVhLGVBQU4seUJBQVEsTUFBQTs7OytCQUFVOztBQUU3QixZQUFNLGdDQUFnQyxVQUNoQyxtQ0FBbUMsSUFBSSxnQkFBd0IsUUFBQyxnQ0FDaEUsT0FBTyxXQUFnQixrQkFDdkIsY0FBYztVQUNaO1dBRUYsT0FBTyxVQUFlO2lDQUV0QixNQUFNLGFBQWE7OztNQVZhLE1BQUk7c0JBQXpCOzs7O0FDWnJCOzs7Ozs7QUFFK0IsUUFBQSxlQUFjO0FBRVQsUUFBQSxrQkFBa0IsdUJBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUV0RCxRQUFRLGNBQWdCLGFBQWMsZUFBOUI7UUFFYSw0QkFBTix5QkFBUSx5QkFBQTs7OzRDQUF1Qjs7Ozs7O1VBQ3JDLEtBQUE7aUJBQVAsdUJBQXFCO0FBQ25CLGdCQUFNLFNBQVMsYUFDVCxlQUFlLE9BQU8sUUFDdEIsK0JBQStCLGNBQy9CLDBCQUEwQixnQkFBdUIsUUFBQyxVQUFVLCtCQUM1RCx5QkFBeUIsd0JBQXdCLDZCQUNqRCx3QkFBd0IsZ0JBQXVCLFFBQUMsb0NBQW9DLDRCQUEyQixRQUFRO0FBRTdILGtDQUFzQixZQUFZO0FBRWxDLGdCQUFNLDRCQUE0QjtBQUVsQyxtQkFBTzs7Ozs7TUFiNEMsZ0JBQXVCO3NCQUF6RDs7OztBQ1JyQjs7Ozs7O0FBRXlCLFFBQUEsWUFBYSx1QkFBQTtBQUNBLFFBQUEsaUJBQStCLHVCQUFBO0FBRXhDLFFBQUEsYUFBaUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztRQUV6QixtQkFBTix5QkFBUSxjQUFBOzs7bUNBQWM7Ozs7OztVQUNuQyxLQUFBO2lCQUFBLHNCQUFhO0FBQ1gsZ0JBQU0sVUFBVSxXQUFZO0FBRTVCLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxxQkFBWSxRQUFRO0FBQ2xCLGdCQUFNLDRCQUE0QixlQUF5QixRQUFDLGVBQ3RELFlBQVk7QUFFbEIsbUJBQU87Ozs7O1VBR0YsS0FBQTtpQkFBUCw4QkFBNEIsa0JBQWtCO0FBQUUsbUJBQU8sVUFBWSxRQUFDLHFCQUFxQixtQkFBa0I7Ozs7O01BZC9ELFVBQVk7c0JBQXJDOzs7O0FDUHJCOzs7Ozs7QUFFK0IsUUFBQSxlQUFjO0FBRXBCLFFBQUEsWUFBcUIsdUJBQUE7QUFDakIsUUFBQSxhQUErQix1QkFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUU1RCxRQUFRLGNBQWdCLGFBQWMsZUFBOUI7UUFFYSxnQkFBTix5QkFBUSxjQUFBOzs7Z0NBQVc7Ozs7OztVQUNoQyxLQUFBO2lCQUFBLGVBQU0sT0FBTyxPQUFPLFVBQVU7QUFDNUIsZ0JBQUk7QUFFSixnQkFBSSxtQkFBbUI7QUFFdkIsZ0JBQU0sYUFBYSxNQUFNLGlCQUNyQix1QkFBdUIsTUFBTSwyQkFDM0IsbUJBQW1CO0FBRXpCLGdCQUFJLHFCQUFxQixNQUFNO0FBQzdCLGtCQUFNLGlDQUFpQyxpQkFBaUI7QUFFeEQsa0JBQUksZ0NBQWdDO0FBQ2xDLG1DQUFtQixXQUFnQixRQUFDLHFCQUFxQjs7O0FBSTdELHFCQUFVLHFCQUFxQjtBQUUvQixnQkFBSSxRQUFRO0FBQ1Ysb0JBQU0sS0FBSztBQUVYLGtCQUFJLGFBQWEsTUFBTTtBQUNyQix5QkFBUztBQUVULG9CQUFFLENBQUcsUUFBUTtBQUNYLHdCQUFNOzs7O0FBS1osZ0JBQUUsQ0FBRyxRQUFRO0FBQ1gsb0JBQU0sVUFBVTs7QUFHbEIsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLG9CQUFXO0FBQ1QsZ0JBQU0sU0FBUztBQUVmLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxpQkFBUTtBQUFFLG1CQUFNLEtBQUEsZ0JBN0NHLGVBQWEsWUE2Q1QsU0FBTixNQUFLLEtBQUEsTUFBTzs7Ozs7TUE3Q1ksVUFBWTtzQkFBbEM7Ozs7QUNUckI7Ozs7OztBQUUwQixRQUFBLGFBQStCLHVCQUFBO0FBQzdCLFFBQUEsZUFBd0IsdUJBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztRQUUvQixtQkFBTix5QkFBUSxpQkFBQTs7O21DQUFjOzs7Ozs7VUFDbkMsS0FBQTtpQkFBQSxzQkFBYSxXQUFXO0FBQ3RCLGdCQUFNLGdCQUFnQixJQUFJLFdBQWE7QUFFdkMsbUJBQU87Ozs7O1VBR0YsS0FBQTtpQkFBUCxtQ0FBaUMsVUFBVSxZQUFZO0FBQUUsbUJBQU8sYUFBZSxRQUFDLDBCQUEwQixtQkFBa0IsVUFBVTs7Ozs7TUFQMUYsYUFBZTtzQkFBeEM7Ozs7QUNMckI7Ozs7OztBQUUrQixRQUFBLGVBQWM7QUFFNUIsUUFBQSxRQUFTLHVCQUFBO0FBQ0csUUFBQSxhQUF1Qix1QkFBQTtBQUNmLFFBQUEsa0JBQThCLHVCQUFBO0FBRWpDLFFBQUEsYUFBYzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVoRCxRQUFRLGNBQWdCLGFBQWMsZUFBOUI7UUFFYSxnQkFBTix5QkFBUSxNQUFBOzs7Z0NBQVc7O0FBRTlCLFlBQU0saUNBQWlDLGFBQ2pDLG9DQUFvQyxJQUFJLGdCQUF3QixRQUFDLGlDQUNqRSxPQUFPLFdBQWlCLG1CQUN4QixjQUFjO1VBQ1o7V0FFRixPQUFPLFdBQWdCO2lDQUV2QixNQUFNLGFBQWE7OztNQVZjLE1BQUk7c0JBQTFCOzs7O0FDWnJCOzs7Ozs7QUFFaUIsUUFBQSxRQUFTLHVCQUFBO0FBQ0YsUUFBQSxRQUFrQix1QkFBQTtBQUNYLFFBQUEsWUFBd0IsdUJBQUE7QUFFbUUsUUFBQSxhQUFjOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1FBRW5ILGlCQUFOLHlCQUFRLE1BQUE7OztpQ0FBWTs7QUFFL0IsWUFBTSxPQUFPLFdBQWtCLG9CQUN6Qiw2QkFBNkIsV0FBMEIsNEJBQ3ZELDhCQUE4QixXQUEyQiw2QkFDekQsK0JBQStCLFdBQTRCLDhCQUMzRCx1Q0FBdUMsSUFBSSxVQUFrQixRQUFDLDZCQUM5RCx3Q0FBd0MsSUFBSSxVQUFrQixRQUFDLDhCQUMvRCx5Q0FBeUMsSUFBSSxVQUFrQixRQUFDLCtCQUNoRSxjQUFjO1VBQ1o7VUFDQTtVQUNBO1dBRUYsT0FBTyxNQUFXO2lDQUVsQixNQUFNLGFBQWE7OztNQWhCZSxNQUFJO3NCQUEzQjs7OztBQ1JyQjs7Ozs7O0FBRXVCLFFBQUEsY0FBa0IsdUJBQUE7QUFDYixRQUFBLGVBQXdCLHVCQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7UUFFL0Isb0JBQU4seUJBQVEsaUJBQUE7OztvQ0FBZTs7Ozs7O1VBQ3BDLEtBQUE7aUJBQUEsOEJBQXFCO0FBQ25CLGdCQUFNLGFBQWEsS0FBSyxpQkFDbEIsWUFBWSxZQUNaLFlBQVksT0FDWixRQUFRLFVBQVUsSUFBSSxTQUFDLFVBQWE7QUFDbEMsa0JBQU0sT0FBTyxTQUFTLGFBQWE7QUFFbkMscUJBQU87Z0JBRVQsYUFBYSxJQUFJLFlBQVUsUUFBQztBQUVsQyxtQkFBTzs7Ozs7VUFHRixLQUFBO2lCQUFQLG1DQUFpQyxVQUFVLFlBQVk7QUFBRSxtQkFBTyxhQUFlLFFBQUMsMEJBQTBCLG9CQUFtQixVQUFVOzs7OztNQWYxRixhQUFlO3NCQUF6Qzs7OztBQ0xyQjs7Ozs7O0FBRXVCLFFBQUEsY0FBZSx1QkFBQTtBQUNiLFFBQUEsWUFBOEIsdUJBQUE7QUFDeEIsUUFBQSxrQkFBb0MsdUJBQUE7QUFFdEMsUUFBQSxhQUFjOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1FBRXRCLHVCQUFOLHlCQUFRLFlBQUE7Ozt1Q0FBa0I7O0FBRXJDLFlBQU0sZUFBZSxXQUFZLGNBQzNCLG1CQUFtQixJQUFJLFVBQVksUUFBQyxlQUNwQyw2QkFBNkIsSUFBSSxnQkFBa0IsUUFBQyxtQkFDcEQsUUFBUTtVQUNOOztpQ0FHRjs7O01BVHdDLFlBQVU7c0JBQXZDOzs7O0FDUnJCOzs7Ozs7QUFFaUIsUUFBQSxRQUFTLHVCQUFBO0FBQ0ksUUFBQSxjQUF3Qix1QkFBQTtBQUNyQixRQUFBLGVBQTBCLHVCQUFBO0FBRXhCLFFBQUEsYUFBYzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztRQUU1QixpQkFBTix5QkFBUSxNQUFBOzs7aUNBQVk7O0FBRS9CLFlBQU0sT0FBTyxXQUFrQixvQkFDekIsdUJBQXVCLElBQUksYUFBb0IsV0FDL0MsY0FBYztVQUNaO1dBRUYsT0FBTyxZQUFpQjtpQ0FFeEIsTUFBTSxhQUFhOzs7TUFUZSxNQUFJO3NCQUEzQjs7OztBQ1JyQjs7Ozs7O0FBRTRCLFFBQUEsZUFBd0IsdUJBQUE7QUFFL0IsUUFBQSxTQUF1Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1FBRXZCLHFCQUFOLHlCQUFRLGlCQUFBOzs7cUNBQWdCOzs7Ozs7VUFDckMsS0FBQTtpQkFBQSwrQkFBc0I7QUFDcEIsZ0JBQU0sYUFBYSxLQUFLLGlCQUNsQixpQkFBYyxJQUFHLFFBQUksS0FBQyxhQUN0QixrQkFBa0IsZ0JBQ2xCLGNBQWMsZ0JBQWdCLElBQUksU0FBQyxnQkFBbUI7QUFDcEQsa0JBQU0sYUFBYSxlQUFlO0FBRWxDLHFCQUFPOztBQUdmLG1CQUFPOzs7OztVQUdGLEtBQUE7aUJBQVAsbUNBQWlDLFVBQVUsWUFBWTtBQUFFLG1CQUFPLGFBQWUsUUFBQywwQkFBMEIscUJBQW9CLFVBQVU7Ozs7O01BZDFGLGFBQWU7c0JBQTFDOzs7O0FDTnJCO0FBQUE7QUFDQSxXQUFPLGVBQWUsU0FBUyxjQUFjO0FBQUEsTUFDekMsT0FBTztBQUFBO0FBRVgsWUFBUSxVQUFVO0FBQ2xCLFFBQUksZUFBZSx1QkFBdUI7QUFDMUMsUUFBSSxTQUFTO0FBQ2IsUUFBSSxhQUFhO0FBQ2pCLFFBQUksYUFBYTtBQUNqQixvQ0FBZ0MsTUFBTTtBQUNsQyxVQUFJLFNBQVMsUUFBUTtBQUNqQixjQUFNLElBQUksZUFBZTtBQUFBO0FBRTdCLGFBQU87QUFBQTtBQUVYLDZCQUF5QixVQUFVLGFBQWE7QUFDNUMsVUFBSSxDQUFFLHFCQUFvQixjQUFjO0FBQ3BDLGNBQU0sSUFBSSxVQUFVO0FBQUE7QUFBQTtBQUc1QiwrQkFBMkIsUUFBUSxPQUFPO0FBQ3RDLGVBQVEsSUFBSSxHQUFHLElBQUksTUFBTSxRQUFRLEtBQUk7QUFDakMsWUFBSSxhQUFhLE1BQU07QUFDdkIsbUJBQVcsYUFBYSxXQUFXLGNBQWM7QUFDakQsbUJBQVcsZUFBZTtBQUMxQixZQUFJLFdBQVc7QUFBWSxxQkFBVyxXQUFXO0FBQ2pELGVBQU8sZUFBZSxRQUFRLFdBQVcsS0FBSztBQUFBO0FBQUE7QUFHdEQsMEJBQXNCLGFBQWEsWUFBWSxhQUFhO0FBQ3hELFVBQUk7QUFBWSwwQkFBa0IsWUFBWSxXQUFXO0FBQ3pELFVBQUk7QUFBYSwwQkFBa0IsYUFBYTtBQUNoRCxhQUFPO0FBQUE7QUFFWCxrQkFBYyxRQUFRLFVBQVUsVUFBVTtBQUN0QyxVQUFJLE9BQU8sWUFBWSxlQUFlLFFBQVEsS0FBSztBQUMvQyxlQUFPLFFBQVE7QUFBQSxhQUNaO0FBQ0gsZUFBTyxlQUFjLFNBQVEsV0FBVSxXQUFVO0FBQzdDLGNBQUksT0FBTyxlQUFlLFNBQVE7QUFDbEMsY0FBSSxDQUFDO0FBQU07QUFDWCxjQUFJLE9BQU8sT0FBTyx5QkFBeUIsTUFBTTtBQUNqRCxjQUFJLEtBQUssS0FBSztBQUNWLG1CQUFPLEtBQUssSUFBSSxLQUFLO0FBQUE7QUFFekIsaUJBQU8sS0FBSztBQUFBO0FBQUE7QUFHcEIsYUFBTyxLQUFLLFFBQVEsVUFBVSxZQUFZO0FBQUE7QUFFOUMsNkJBQXlCLEdBQUc7QUFDeEIsd0JBQWtCLE9BQU8saUJBQWlCLE9BQU8saUJBQWlCLDBCQUF5QixJQUFHO0FBQzFGLGVBQU8sR0FBRSxhQUFhLE9BQU8sZUFBZTtBQUFBO0FBRWhELGFBQU8sZ0JBQWdCO0FBQUE7QUFFM0IsdUJBQW1CLFVBQVUsWUFBWTtBQUNyQyxVQUFJLE9BQU8sZUFBZSxjQUFjLGVBQWUsTUFBTTtBQUN6RCxjQUFNLElBQUksVUFBVTtBQUFBO0FBRXhCLGVBQVMsWUFBWSxPQUFPLE9BQU8sY0FBYyxXQUFXLFdBQVc7QUFBQSxRQUNuRSxhQUFhO0FBQUEsVUFDVCxPQUFPO0FBQUEsVUFDUCxVQUFVO0FBQUEsVUFDVixjQUFjO0FBQUE7QUFBQTtBQUd0QixVQUFJO0FBQVksd0JBQWdCLFVBQVU7QUFBQTtBQUU5QyxvQ0FBZ0MsS0FBSztBQUNqQyxhQUFPLE9BQU8sSUFBSSxhQUFhLE1BQU07QUFBQSxRQUNqQyxTQUFTO0FBQUE7QUFBQTtBQUdqQix3Q0FBb0MsTUFBTSxNQUFNO0FBQzVDLFVBQUksUUFBUyxTQUFRLFVBQVUsWUFBWSxPQUFPLFNBQVMsYUFBYTtBQUNwRSxlQUFPO0FBQUE7QUFFWCxhQUFPLHVCQUF1QjtBQUFBO0FBRWxDLDZCQUF5QixHQUFHLEdBQUc7QUFDM0Isd0JBQWtCLE9BQU8sa0JBQWtCLDBCQUF5QixJQUFHLElBQUc7QUFDdEUsV0FBRSxZQUFZO0FBQ2QsZUFBTztBQUFBO0FBRVgsYUFBTyxnQkFBZ0IsR0FBRztBQUFBO0FBRTlCLDRCQUF3QixRQUFRLFVBQVU7QUFDdEMsYUFBTSxDQUFDLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxXQUFVO0FBQzFELGlCQUFTLGdCQUFnQjtBQUN6QixZQUFJLFdBQVc7QUFBTTtBQUFBO0FBRXpCLGFBQU87QUFBQTtBQUVYLFFBQUksVUFBVSxTQUFTLEtBQUs7QUFDeEI7QUFDQSxhQUFPLE9BQU8sT0FBTyxXQUFXLGVBQWUsSUFBSSxnQkFBZ0IsU0FBUyxXQUFXLE9BQU87QUFBQTtBQUVsRyx5Q0FBcUM7QUFDakMsVUFBSSxPQUFPLFlBQVksZUFBZSxDQUFDLFFBQVE7QUFBVyxlQUFPO0FBQ2pFLFVBQUksUUFBUSxVQUFVO0FBQU0sZUFBTztBQUNuQyxVQUFJLE9BQU8sVUFBVTtBQUFZLGVBQU87QUFDeEMsVUFBSTtBQUNBLGdCQUFRLFVBQVUsUUFBUSxLQUFLLFFBQVEsVUFBVSxTQUFTLElBQUksV0FBVztBQUFBO0FBQ3pFLGVBQU87QUFBQSxlQUNGLEdBQVA7QUFDRSxlQUFPO0FBQUE7QUFBQTtBQUdmLDBCQUFzQixTQUFTO0FBQzNCLFVBQUksNEJBQTRCO0FBQ2hDLGFBQU8sZ0NBQWdDO0FBQ25DLFlBQUksUUFBUSxnQkFBZ0IsVUFBVTtBQUN0QyxZQUFJLDJCQUEyQjtBQUMzQixjQUFJLFlBQVksZ0JBQWdCLE1BQU07QUFDdEMsbUJBQVMsUUFBUSxVQUFVLE9BQU8sV0FBVztBQUFBLGVBQzFDO0FBQ0gsbUJBQVMsTUFBTSxNQUFNLE1BQU07QUFBQTtBQUUvQixlQUFPLDJCQUEyQixNQUFNO0FBQUE7QUFBQTtBQUdoRCxRQUFJLHNCQUFvQyx5QkFBUyxpQkFBaUI7QUFDOUQsZ0JBQVUsc0JBQXFCO0FBQy9CLFVBQUksU0FBUyxhQUFhO0FBQzFCLG9DQUE2QixPQUFPO0FBQ2hDLHdCQUFnQixNQUFNO0FBQ3RCLFlBQUk7QUFDSixZQUFJLE9BQU8sV0FBVztBQUN0QixnQkFBUSxPQUFPLEtBQUssTUFBTTtBQUMxQixjQUFNLFFBQVE7QUFDZCxlQUFPO0FBQUE7QUFFWCxtQkFBYSxzQkFBcUI7QUFBQSxRQUM5QjtBQUFBLFVBQ0ksS0FBSztBQUFBLFVBQ0wsT0FBTyxvQkFBb0I7QUFDdkIsbUJBQU8sS0FBSztBQUFBO0FBQUE7QUFBQSxRQUdwQjtBQUFBLFVBQ0ksS0FBSztBQUFBLFVBQ0wsT0FBTyxlQUFlLE9BQU8sT0FBTyxVQUFVO0FBQzFDLGdCQUFJO0FBQ0osZ0JBQUksYUFBYSxNQUFNLGlCQUFpQixhQUFhLElBQUksUUFBUTtBQUNqRSxxQkFBVSxJQUFHLFlBQVksV0FBVyxLQUFLLE9BQU8sWUFBWSxPQUFPLE9BQU87QUFDMUUsZ0JBQUksUUFBUTtBQUNSLGNBQUMsSUFBRyxRQUFRLEtBQUssT0FBTztBQUFBO0FBRTVCLGdCQUFJLENBQUMsUUFBUTtBQUNULG9CQUFNLFVBQVU7QUFBQTtBQUVwQixtQkFBTztBQUFBO0FBQUE7QUFBQSxRQUdmO0FBQUEsVUFDSSxLQUFLO0FBQUEsVUFDTCxPQUFPLG9CQUFvQjtBQUN2QixnQkFBSSxlQUFlLEtBQUssTUFBTSxPQUFPLFNBQVMsYUFBYSxNQUFNO0FBQzdELGtCQUFJLGFBQWEsS0FBSztBQUN0QixrQkFBSSxnQkFBZ0IsTUFBTTtBQUN0Qiw4QkFBYztBQUFBLHFCQUNYO0FBQ0gsOEJBQWMsR0FBRyxPQUFPLGFBQWEsS0FBSyxPQUFPO0FBQUE7QUFFckQscUJBQU87QUFBQSxlQUNSLE9BQU8sU0FBUyxLQUFLLE9BQU8sY0FBYztBQUM3QyxtQkFBTztBQUFBO0FBQUE7QUFBQSxRQUdmO0FBQUEsVUFDSSxLQUFLO0FBQUEsVUFDTCxPQUFPLGlCQUFpQjtBQUNwQixtQkFBTyxLQUFLLGdCQUFnQixxQkFBb0IsWUFBWSxTQUFTLE1BQU0sS0FBSyxNQUFNLHNCQUFxQixLQUFLO0FBQUE7QUFBQTtBQUFBLFNBR3pIO0FBQUEsUUFDQztBQUFBLFVBQ0ksS0FBSztBQUFBLFVBQ0wsT0FBTyxtQkFBbUIsT0FBTztBQUM3QixnQkFBSSwwQkFBMkIsSUFBRyxRQUFRLG1CQUFtQjtBQUM3RCxvQkFBUTtBQUNSLGdCQUFJLFlBQVksT0FBTyxRQUFRLE1BQU0sSUFBSSxTQUFTLE1BQU07QUFDcEQsa0JBQUksT0FBTyxLQUFLLGFBQWE7QUFDN0IscUJBQU87QUFBQSxnQkFDUCxzQkFBc0IsSUFBSSxxQkFBb0I7QUFDbEQsbUJBQU87QUFBQTtBQUFBO0FBQUE7QUFJbkIsYUFBTztBQUFBLE1BQ1QsYUFBYTtBQUNmLFlBQVEsVUFBVTtBQUFBOzs7QUNoTWxCOzs7Ozs7QUFFK0IsUUFBQSxlQUFjO0FBRXRCLFFBQUEsY0FBZSx1QkFBQTtBQUNiLFFBQUEsWUFBOEIsdUJBQUE7QUFDeEIsUUFBQSxrQkFBaUMsdUJBQUE7QUFDaEMsUUFBQSxtQkFBcUMsdUJBQUE7QUFDckMsUUFBQSxtQkFBcUMsdUJBQUE7QUFFbEMsUUFBQSxhQUFjOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRWpELFFBQVEsY0FBZ0IsYUFBYyxlQUE5QjtRQUVhLHdCQUFOLHlCQUFRLFlBQUE7Ozt3Q0FBbUI7O0FBRXRDLFlBQU0scUJBQXFCLFdBQWtCLG9CQUN2QyxtQ0FBbUMsYUFDbkMseUJBQXlCLElBQUksVUFBWSxRQUFDLHFCQUMxQyxnQ0FBZ0MsSUFBSSxnQkFBa0IsUUFBQyxtQ0FDdkQsdURBQXVEO1VBQ3JEO1VBQ0E7V0FFRixzQkFBc0IsSUFBSSxpQkFBbUIsUUFBQyx1REFDOUMsZ0NBQWdDLElBQUksaUJBQW1CLFFBQUMsc0JBQ3hELFFBQVE7VUFDTjtVQUNBOztpQ0FHRjs7O01BakJ5QyxZQUFVO3NCQUF4Qzs7OztBQ2RyQjs7Ozs7O0FBRWlCLFFBQUEsUUFBUyx1QkFBQTtBQUNLLFFBQUEsZUFBeUIsdUJBQUE7QUFDdEIsUUFBQSxnQkFBMkIsdUJBQUE7QUFFekIsUUFBQSxhQUFjOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1FBRTdCLGtCQUFOLHlCQUFRLE1BQUE7OztrQ0FBYTs7QUFFaEMsWUFBTSx3QkFBd0IsSUFBSSxjQUFxQixXQUNqRCxPQUFPLFdBQW1CLHFCQUMxQixjQUFjO1VBQ1o7V0FFRixPQUFPLGFBQWtCO2lDQUV6QixNQUFNLGFBQWE7OztNQVRnQixNQUFJO3NCQUE1Qjs7OztBQ1JyQjs7Ozs7O0FBRTRCLFFBQUEsZUFBMkIsdUJBQUE7QUFFakMsUUFBQSxTQUEwQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1FBRTNCLHNCQUFOLHlCQUFRLGlCQUFBOzs7c0NBQWlCOzs7Ozs7VUFDdEMsS0FBQTtpQkFBQSxzQkFBYSxXQUFXO0FBQ3RCLGdCQUFNLGFBQWEsS0FBSyxpQkFDbEIsaUJBQWMsSUFBRyxRQUFLLE1BQUMsYUFDdkIsT0FBTyxnQkFDUCxPQUFPLEtBQUssYUFBYTtBQUUvQixtQkFBTzs7Ozs7VUFHRixLQUFBO2lCQUFQLG1DQUFpQyxVQUFVLFlBQVk7QUFBRSxtQkFBTyxhQUFlLFFBQUMsMEJBQTBCLHNCQUFxQixVQUFVOzs7OztNQVYxRixhQUFlO3NCQUEzQzs7OztBQ05yQjs7Ozs7O0FBRWlCLFFBQUEsUUFBUyx1QkFBQTtBQUNNLFFBQUEsWUFBMkIsdUJBQUE7QUFDNUIsUUFBQSxZQUF3Qix1QkFBQTtBQUVvRyxRQUFBLGFBQWM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7UUFFcEosbUJBQU4seUJBQVEsTUFBQTs7O21DQUFjOztBQUVqQyxZQUFNLE9BQU8sV0FBb0Isc0JBQzNCLG1CQUFtQixXQUFnQixrQkFDbkMsb0JBQW9CLFdBQWlCLG1CQUNyQyx5QkFBeUIsV0FBc0Isd0JBQy9DLDRCQUE0QixXQUF5QiwyQkFDckQsK0JBQStCLFdBQTRCLDhCQUMzRCw2QkFBNkIsSUFBSSxVQUFrQixRQUFDLG1CQUNwRCw4QkFBOEIsSUFBSSxVQUFrQixRQUFDLG9CQUNyRCxtQ0FBbUMsSUFBSSxVQUFrQixRQUFDLHlCQUMxRCxzQ0FBc0MsSUFBSSxVQUFrQixRQUFDLDRCQUM3RCx5Q0FBeUMsSUFBSSxVQUFrQixRQUFDLCtCQUNoRSxjQUFjO1VBQ1o7VUFDQTtVQUNBO1VBQ0E7VUFDQTtXQUVGLE9BQU8sVUFBbUI7aUNBRTFCLE1BQU0sYUFBYTs7O01BdEJpQixNQUFJO3NCQUE3Qjs7OztBQ1JyQjs7Ozs7O0FBRTRCLFFBQUEsZUFBd0IsdUJBQUE7QUFDdEIsUUFBQSxpQkFBc0MsdUJBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztRQUUvQyx1QkFBTix5QkFBUSxpQkFBQTs7O3VDQUFrQjs7Ozs7O1VBQ3ZDLEtBQUE7aUJBQUEsc0JBQWEsV0FBVztBQUN0QixnQkFBTSxhQUFhLEtBQUssaUJBQ2xCLFFBQVEsV0FBVyxTQUNuQixPQUFPLGVBQWlCLFFBQUMsVUFBVTtBQUV6QyxtQkFBTzs7Ozs7VUFHRixLQUFBO2lCQUFQLG1DQUFpQyxVQUFVLFlBQVk7QUFBRSxtQkFBTyxhQUFlLFFBQUMsMEJBQTBCLHVCQUFzQixVQUFVOzs7OztNQVQxRixhQUFlO3NCQUE1Qzs7OztBQ0xyQjs7Ozs7O0FBRStCLFFBQUEsZUFBYztBQUV0QixRQUFBLGNBQWUsdUJBQUE7QUFDYixRQUFBLFlBQThCLHVCQUFBO0FBQ3hCLFFBQUEsa0JBQW9DLHVCQUFBO0FBQ3BDLFFBQUEsa0JBQWlDLHVCQUFBO0FBQ2hDLFFBQUEsbUJBQXFDLHVCQUFBO0FBRXhDLFFBQUEsYUFBYzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUUzQyxRQUFRLGNBQTJDLGFBQWMsZUFBekQ7QUFBUixRQUFxQixjQUE4QixhQUFjLGVBQTVDO0FBQXJCLFFBQWtDLGVBQWlCLGFBQWMsZUFBL0I7UUFFYiwwQkFBTix5QkFBUSxZQUFBOzs7MENBQXFCOztBQUV4QyxZQUFNLGVBQWUsV0FBWSxjQUMzQixtQ0FBbUMsYUFDbkMsbUNBQW1DLGFBQ25DLG9DQUFvQyxjQUNwQyxtQkFBbUIsSUFBSSxVQUFZLFFBQUMsZUFDcEMsZ0NBQWdDLElBQUksZ0JBQWtCLFFBQUMsbUNBQ3ZELGdDQUFnQyxJQUFJLGdCQUFrQixRQUFDLG1DQUN2RCxpQ0FBaUMsSUFBSSxnQkFBa0IsUUFBQyxvQ0FDeEQsaURBQWlEO1VBQy9DO1VBQ0E7V0FFRixzQkFBc0IsSUFBSSxpQkFBbUIsUUFBQyxpREFDOUMsK0JBQStCLElBQUksZ0JBQWtCLFFBQUMsc0JBQ3RELFFBQVE7VUFDTjtVQUNBO1VBQ0E7VUFDQTs7aUNBR0Y7OztNQXZCMkMsWUFBVTtzQkFBMUM7Ozs7QUNkckI7Ozs7OztBQUVpQixRQUFBLFFBQVMsdUJBQUE7QUFDTyxRQUFBLGlCQUEyQix1QkFBQTtBQUN4QixRQUFBLGtCQUE2Qix1QkFBQTtBQUUzQixRQUFBLGFBQWM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7UUFFL0Isb0JBQU4seUJBQVEsTUFBQTs7O29DQUFlOztBQUVsQyxZQUFNLE9BQU8sV0FBcUIsdUJBQzVCLDBCQUEwQixJQUFJLGdCQUF1QixXQUNyRCxjQUFjO1VBQ1o7V0FFRixPQUFPLGVBQW9CO2lDQUUzQixNQUFNLGFBQWE7OztNQVRrQixNQUFJO3NCQUE5Qjs7OztBQ1JyQjtBQUFBO0FBQ0EsV0FBTyxlQUFlLFNBQVMsY0FBYztBQUFBLE1BQ3pDLE9BQU87QUFBQTtBQUVYLFlBQVEsVUFBVTtBQUNsQixRQUFJLGVBQWUsdUJBQXVCO0FBQzFDLFFBQUksa0JBQWtCLHVCQUF1QjtBQUM3QyxRQUFJLFNBQVM7QUFDYixvQ0FBZ0MsTUFBTTtBQUNsQyxVQUFJLFNBQVMsUUFBUTtBQUNqQixjQUFNLElBQUksZUFBZTtBQUFBO0FBRTdCLGFBQU87QUFBQTtBQUVYLDZCQUF5QixVQUFVLGFBQWE7QUFDNUMsVUFBSSxDQUFFLHFCQUFvQixjQUFjO0FBQ3BDLGNBQU0sSUFBSSxVQUFVO0FBQUE7QUFBQTtBQUc1QiwrQkFBMkIsUUFBUSxPQUFPO0FBQ3RDLGVBQVEsSUFBSSxHQUFHLElBQUksTUFBTSxRQUFRLEtBQUk7QUFDakMsWUFBSSxhQUFhLE1BQU07QUFDdkIsbUJBQVcsYUFBYSxXQUFXLGNBQWM7QUFDakQsbUJBQVcsZUFBZTtBQUMxQixZQUFJLFdBQVc7QUFBWSxxQkFBVyxXQUFXO0FBQ2pELGVBQU8sZUFBZSxRQUFRLFdBQVcsS0FBSztBQUFBO0FBQUE7QUFHdEQsMEJBQXNCLGFBQWEsWUFBWSxhQUFhO0FBQ3hELFVBQUk7QUFBWSwwQkFBa0IsWUFBWSxXQUFXO0FBQ3pELFVBQUk7QUFBYSwwQkFBa0IsYUFBYTtBQUNoRCxhQUFPO0FBQUE7QUFFWCw2QkFBeUIsS0FBSyxLQUFLLE9BQU87QUFDdEMsVUFBSSxPQUFPLEtBQUs7QUFDWixlQUFPLGVBQWUsS0FBSyxLQUFLO0FBQUEsVUFDNUI7QUFBQSxVQUNBLFlBQVk7QUFBQSxVQUNaLGNBQWM7QUFBQSxVQUNkLFVBQVU7QUFBQTtBQUFBLGFBRVg7QUFDSCxZQUFJLE9BQU87QUFBQTtBQUVmLGFBQU87QUFBQTtBQUVYLDZCQUF5QixHQUFHO0FBQ3hCLHdCQUFrQixPQUFPLGlCQUFpQixPQUFPLGlCQUFpQiwwQkFBeUIsSUFBRztBQUMxRixlQUFPLEdBQUUsYUFBYSxPQUFPLGVBQWU7QUFBQTtBQUVoRCxhQUFPLGdCQUFnQjtBQUFBO0FBRTNCLHVCQUFtQixVQUFVLFlBQVk7QUFDckMsVUFBSSxPQUFPLGVBQWUsY0FBYyxlQUFlLE1BQU07QUFDekQsY0FBTSxJQUFJLFVBQVU7QUFBQTtBQUV4QixlQUFTLFlBQVksT0FBTyxPQUFPLGNBQWMsV0FBVyxXQUFXO0FBQUEsUUFDbkUsYUFBYTtBQUFBLFVBQ1QsT0FBTztBQUFBLFVBQ1AsVUFBVTtBQUFBLFVBQ1YsY0FBYztBQUFBO0FBQUE7QUFHdEIsVUFBSTtBQUFZLHdCQUFnQixVQUFVO0FBQUE7QUFFOUMsb0NBQWdDLEtBQUs7QUFDakMsYUFBTyxPQUFPLElBQUksYUFBYSxNQUFNO0FBQUEsUUFDakMsU0FBUztBQUFBO0FBQUE7QUFHakIsd0NBQW9DLE1BQU0sTUFBTTtBQUM1QyxVQUFJLFFBQVMsU0FBUSxVQUFVLFlBQVksT0FBTyxTQUFTLGFBQWE7QUFDcEUsZUFBTztBQUFBO0FBRVgsYUFBTyx1QkFBdUI7QUFBQTtBQUVsQyw2QkFBeUIsR0FBRyxHQUFHO0FBQzNCLHdCQUFrQixPQUFPLGtCQUFrQiwwQkFBeUIsSUFBRyxJQUFHO0FBQ3RFLFdBQUUsWUFBWTtBQUNkLGVBQU87QUFBQTtBQUVYLGFBQU8sZ0JBQWdCLEdBQUc7QUFBQTtBQUU5QixRQUFJLFVBQVUsU0FBUyxLQUFLO0FBQ3hCO0FBQ0EsYUFBTyxPQUFPLE9BQU8sV0FBVyxlQUFlLElBQUksZ0JBQWdCLFNBQVMsV0FBVyxPQUFPO0FBQUE7QUFFbEcseUNBQXFDO0FBQ2pDLFVBQUksT0FBTyxZQUFZLGVBQWUsQ0FBQyxRQUFRO0FBQVcsZUFBTztBQUNqRSxVQUFJLFFBQVEsVUFBVTtBQUFNLGVBQU87QUFDbkMsVUFBSSxPQUFPLFVBQVU7QUFBWSxlQUFPO0FBQ3hDLFVBQUk7QUFDQSxnQkFBUSxVQUFVLFFBQVEsS0FBSyxRQUFRLFVBQVUsU0FBUyxJQUFJLFdBQVc7QUFBQTtBQUN6RSxlQUFPO0FBQUEsZUFDRixHQUFQO0FBQ0UsZUFBTztBQUFBO0FBQUE7QUFHZiwwQkFBc0IsU0FBUztBQUMzQixVQUFJLDRCQUE0QjtBQUNoQyxhQUFPLGdDQUFnQztBQUNuQyxZQUFJLFFBQVEsZ0JBQWdCLFVBQVU7QUFDdEMsWUFBSSwyQkFBMkI7QUFDM0IsY0FBSSxZQUFZLGdCQUFnQixNQUFNO0FBQ3RDLG1CQUFTLFFBQVEsVUFBVSxPQUFPLFdBQVc7QUFBQSxlQUMxQztBQUNILG1CQUFTLE1BQU0sTUFBTSxNQUFNO0FBQUE7QUFFL0IsZUFBTywyQkFBMkIsTUFBTTtBQUFBO0FBQUE7QUFHaEQsUUFBSSx3QkFBc0MseUJBQVMsaUJBQWlCO0FBQ2hFLGdCQUFVLHdCQUF1QjtBQUNqQyxVQUFJLFNBQVMsYUFBYTtBQUMxQix3Q0FBaUM7QUFDN0Isd0JBQWdCLE1BQU07QUFDdEIsWUFBSTtBQUNKLGdCQUFRLE9BQU8sTUFBTSxNQUFNO0FBQzNCLHdCQUFnQix1QkFBdUIsUUFBUSxxQkFBcUI7QUFDcEUsZUFBTztBQUFBO0FBRVgsbUJBQWEsd0JBQXVCO0FBQUEsUUFDaEM7QUFBQSxVQUNJLEtBQUs7QUFBQSxVQUNMLE9BQU8sc0JBQXNCLFdBQVc7QUFDcEMsZ0JBQUksVUFBVSxLQUFLLGNBQWMscUJBQXFCLElBQUksZ0JBQWdCLFFBQVE7QUFDbEYsbUJBQU87QUFBQTtBQUFBO0FBQUEsUUFHZjtBQUFBLFVBQ0ksS0FBSztBQUFBLFVBQ0wsT0FBTyxzQkFBc0I7QUFDekIsZ0JBQUksYUFBYSxLQUFLLGlCQUFpQixpQkFBa0IsSUFBRyxRQUFRLE1BQU0sYUFBYSxlQUFlLGdCQUFnQixzQkFBc0IsYUFBYSxjQUFjLFVBQVUsb0JBQW9CLE1BQU0sS0FBSyxvQkFBb0IsY0FBZSxJQUFHLFFBQVEsT0FBTyxVQUFVLFVBQVUsWUFBWSxRQUFRLFNBQVMsTUFBTSxRQUFRLFFBQVE7QUFDNVUsbUJBQU87QUFBQTtBQUFBO0FBQUEsU0FHaEI7QUFBQSxRQUNDO0FBQUEsVUFDSSxLQUFLO0FBQUEsVUFDTCxPQUFPLG1DQUFtQyxVQUFVLFlBQVk7QUFDNUQsbUJBQU8sYUFBYSxRQUFRLDBCQUEwQix3QkFBdUIsVUFBVTtBQUFBO0FBQUE7QUFBQTtBQUluRyxhQUFPO0FBQUEsTUFDVCxhQUFhO0FBQ2YsWUFBUSxVQUFVO0FBQUE7OztBQ2xKbEI7Ozs7OztBQUV1QixRQUFBLGNBQWUsdUJBQUE7QUFDRCxRQUFBLHdCQUF1Qyx1QkFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztRQUV2RCxpQ0FBTix5QkFBUSxZQUFBOzs7K0NBQ1Qsc0JBQW9COztBQUM5QixZQUFNLDJCQUEyQixJQUFJLHNCQUF3QixRQUFDLHVCQUN4RCxRQUFRO1VBQ047O2lDQUdGOzs7TUFQa0QsWUFBVTtzQkFBakQ7Ozs7QUNMckI7Ozs7OztBQUVzQixRQUFBLGVBQWM7QUFFbkIsUUFBQSxRQUFTLHVCQUFBO0FBQ1EsUUFBQSxrQkFBNEIsdUJBQUE7QUFDbkIsUUFBQSx3QkFBb0MsdUJBQUE7QUFFeEMsUUFBQSxhQUFjOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRXJELFFBQVEsb0JBQXNCLGFBQUssTUFBM0I7UUFFYSxxQkFBTix5QkFBUSxNQUFBOzs7cUNBQWdCOztBQUVuQyxZQUFNLG9DQUFvQyxtQkFDcEMsOENBQThDLElBQUksc0JBQThCLFFBQUMsb0NBQ2pGLE9BQU8sV0FBc0Isd0JBQzdCLGNBQWM7VUFDWjtXQUVGLE9BQU8sZ0JBQXFCO2lDQUU1QixNQUFNLGFBQWE7OztNQVZtQixNQUFJO3NCQUEvQjs7OztBQ1pyQjs7Ozs7O0FBRTRCLFFBQUEsZUFBMkIsdUJBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztRQUVsQyx5QkFBTix5QkFBUSxpQkFBQTs7O3lDQUFvQjs7Ozs7O1VBQ3pDLEtBQUE7aUJBQUEsc0JBQWEsV0FBVztBQUN0QixnQkFBTSxhQUFhLEtBQUssaUJBQ2xCLFFBQVEsV0FBVyxTQUNuQixPQUFPLGNBQWMsT0FBTztBQUVsQyxtQkFBTzs7Ozs7VUFHRixLQUFBO2lCQUFQLG1DQUFpQyxVQUFVLFlBQVk7QUFBRSxtQkFBTyxhQUFlLFFBQUMsMEJBQTBCLHlCQUF3QixVQUFVOzs7OztNQVQxRixhQUFlO3NCQUE5QzsyQkFZRSxPQUFPLFdBQVc7QUFDdkMsVUFBSSxPQUFPO0FBRVgsVUFBTSxjQUFjLE1BQU07QUFFMUIsVUFBSSxnQkFBZ0IsR0FBRztBQUNyQixZQUFNLE9BQU8sTUFBTTtBQUVuQixlQUFPLEtBQUssYUFBYTthQUNwQjtBQUNMLGNBQU07QUFFTixvQkFBWTtBQUVaLGVBQU8sY0FBYyxPQUFPOztBQUc5QixhQUFPOzs7OztBQ2pDVDs7Ozs7O0FBRXVCLFFBQUEsY0FBcUIsdUJBQUE7QUFDbkIsUUFBQSxZQUFvQyx1QkFBQTtBQUNoQyxRQUFBLGdCQUF3Qyx1QkFBQTtBQUVULFFBQUEsYUFBb0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7UUFFM0Qsd0NBQU4seUJBQVEsWUFBQTs7O3dEQUFtQzs7QUFFdEQsWUFBTSxtQkFBbUIsV0FBZ0Isa0JBQ25DLDRCQUE0QixXQUF5QiwyQkFDckQsdUJBQXVCLElBQUksVUFBWSxRQUFDLG1CQUN4QyxnQ0FBZ0MsSUFBSSxVQUFZLFFBQUMsNEJBQ2pELG9DQUFvQyxJQUFJLGNBQWdCLFFBQUMsZ0NBQ3pELFFBQVE7VUFDTjtVQUNBOztpQ0FHRjs7O01BWnlELFlBQVU7c0JBQXhEOzs7O0FDUnJCOzs7Ozs7QUFFaUIsUUFBQSxRQUFTLHVCQUFBO0FBQ0ssUUFBQSxZQUF3Qix1QkFBQTtBQUNwQixRQUFBLGVBQThCLHVCQUFBO0FBQ2YsUUFBQSxhQUE2Qyx1QkFBQTtBQUVQLFFBQUEsYUFBYzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztRQUVqRixzQkFBTix5QkFBUSxNQUFBOzs7c0NBQWlCOztBQUVwQyxZQUFNLE9BQU8sV0FBdUIseUJBQzlCLHdCQUF3QixXQUFxQix1QkFDN0MsMEJBQTBCLFdBQXVCLHlCQUNqRCxrQ0FBa0MsSUFBSSxVQUFrQixRQUFDLHdCQUN6RCxvQ0FBb0MsSUFBSSxVQUFrQixRQUFDLDBCQUMzRCx3Q0FBd0MsSUFBSSxXQUFxQyxXQUNqRixjQUFjO1VBQ1o7VUFDQTtVQUNBO1dBRUYsT0FBTyxhQUFzQjtpQ0FFN0IsTUFBTSxhQUFhOzs7TUFmb0IsTUFBSTtzQkFBaEM7Ozs7QUNUckI7Ozs7OztBQUU0QixRQUFBLGVBQXdCLHVCQUFBO0FBQ3BCLFFBQUEsbUJBQXdDLHVCQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7UUFFbkQseUJBQU4seUJBQVEsaUJBQUE7Ozt5Q0FBb0I7Ozs7OztVQUN6QyxLQUFBO2lCQUFBLHNCQUFhLFdBQVc7QUFDdEIsZ0JBQU0sYUFBYSxLQUFLLGlCQUNsQixRQUFRLFdBQVcsU0FDbkIsT0FBTyxpQkFBbUIsUUFBQyxVQUFVO0FBRTNDLG1CQUFPOzs7OztVQUdGLEtBQUE7aUJBQVAsbUNBQWlDLFVBQVUsWUFBWTtBQUFFLG1CQUFPLGFBQWUsUUFBQywwQkFBMEIseUJBQXdCLFVBQVU7Ozs7O01BVDFGLGFBQWU7c0JBQTlDOzs7O0FDTHJCOzs7Ozs7QUFFK0IsUUFBQSxlQUFjO0FBRXRCLFFBQUEsY0FBZSx1QkFBQTtBQUNiLFFBQUEsWUFBOEIsdUJBQUE7QUFDeEIsUUFBQSxrQkFBaUMsdUJBQUE7QUFDakMsUUFBQSxrQkFBb0MsdUJBQUE7QUFFdEMsUUFBQSxhQUFjOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRTNDLFFBQVEsY0FBOEIsYUFBYyxlQUE1QztBQUFSLFFBQXFCLGVBQWlCLGFBQWMsZUFBL0I7UUFFQSw0QkFBTix5QkFBUSxZQUFBOzs7NENBQXVCOztBQUUxQyxZQUFNLGVBQWUsV0FBWSxjQUMzQixtQ0FBbUMsYUFDbkMsb0NBQW9DLGNBQ3BDLG1CQUFtQixJQUFJLFVBQVksUUFBQyxlQUNwQyxnQ0FBZ0MsSUFBSSxnQkFBa0IsUUFBQyxtQ0FDdkQsaUNBQWlDLElBQUksZ0JBQWtCLFFBQUMsb0NBQ3hELGlDQUFpQyxJQUFJLGdCQUFrQixRQUFDLG1CQUN4RCxRQUFRO1VBQ047VUFDQTtVQUNBO1VBQ0E7O2lDQUdGOzs7TUFoQjZDLFlBQVU7c0JBQTVDOzs7O0FDYnJCOzs7Ozs7QUFFaUIsUUFBQSxRQUFTLHVCQUFBO0FBQ1MsUUFBQSxtQkFBNkIsdUJBQUE7QUFDMUIsUUFBQSxvQkFBK0IsdUJBQUE7QUFFN0IsUUFBQSxhQUFjOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1FBRWpDLHNCQUFOLHlCQUFRLE1BQUE7OztzQ0FBaUI7O0FBRXBDLFlBQU0sT0FBTyxXQUF1Qix5QkFDOUIsNEJBQTRCLElBQUksa0JBQXlCLFdBQ3pELGNBQWM7VUFDWjtXQUVGLE9BQU8saUJBQXNCO2lDQUU3QixNQUFNLGFBQWE7OztNQVRvQixNQUFJO3NCQUFoQzs7OztBQ1JyQjs7Ozs7O0FBRStCLFFBQUEsZUFBYztBQUVULFFBQUEsa0JBQWtCLHVCQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFdEQsUUFBUSxnQkFBa0IsYUFBYyxlQUFoQztRQUVhLDRCQUFOLHlCQUFRLHlCQUFBOzs7NENBQXVCOzs7Ozs7VUFDckMsS0FBQTtpQkFBUCx1QkFBcUI7QUFDbkIsZ0JBQU0sU0FBUyxlQUNULGVBQWUsT0FBTyxRQUN0QiwrQkFBK0IsY0FDL0IsMEJBQTBCLGdCQUF1QixRQUFDLFVBQVUsK0JBQzVELHlCQUF5Qix3QkFBd0IsNkJBQ2pELHdCQUF3QixnQkFBdUIsUUFBQyxvQ0FBb0MsNEJBQTJCLFFBQVE7QUFFN0gsa0NBQXNCLFlBQVk7QUFFbEMsZ0JBQU0sNEJBQTRCO0FBRWxDLG1CQUFPOzs7OztNQWI0QyxnQkFBdUI7c0JBQXpEOzs7O0FDUnJCOzs7Ozs7QUFFeUIsUUFBQSxZQUFhLHVCQUFBO0FBQ0EsUUFBQSxvQkFBa0MsdUJBQUE7QUFFM0MsUUFBQSxhQUFpQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1FBRXpCLG1CQUFOLHlCQUFRLGNBQUE7OzttQ0FBYzs7Ozs7O1VBQ25DLEtBQUE7aUJBQUEsbUJBQVU7QUFDUixnQkFBTSxPQUFPO0FBRWIsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLHNCQUFhO0FBQ1gsZ0JBQU0sVUFBVSxXQUFZO0FBRTVCLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSw4QkFBcUI7QUFDbkIsZ0JBQU0sbUJBQW1CO0FBRXpCLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxxQkFBWSxRQUFRO0FBQ2xCLGdCQUFNLDRCQUE0QixrQkFBeUIsUUFBQyxlQUN0RCxZQUFZO0FBRWxCLG1CQUFPOzs7OztVQUdGLEtBQUE7aUJBQVAsdUJBQXFCO0FBQ25CLGdCQUFNLG1CQUFtQixNQUNuQixtQkFBbUIsVUFBWSxRQUFDLHFCQUFxQixtQkFBa0I7QUFFN0UsbUJBQU87Ozs7O01BOUJtQyxVQUFZO3NCQUFyQzs7OztBQ1ByQjs7Ozs7O0FBRStCLFFBQUEsZUFBYztBQUVwQixRQUFBLFlBQXFCLHVCQUFBO0FBQ2pCLFFBQUEsZ0JBQWtDLHVCQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRS9ELFFBQVEsZ0JBQWtCLGFBQWMsZUFBaEM7UUFFYSxtQkFBTix5QkFBUSxjQUFBOzs7bUNBQWM7Ozs7OztVQUNuQyxLQUFBO2lCQUFBLDhCQUFxQjtBQUNuQixnQkFBTSxtQkFBbUI7QUFFekIsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLGVBQU0sT0FBTyxPQUFPLFVBQVU7QUFDNUIsZ0JBQUk7QUFFSixnQkFBSSxtQkFBbUI7QUFFdkIsZ0JBQU0sYUFBYSxNQUFNLGlCQUNuQiwyQkFBMkIsTUFBTTtBQUV2QyxnQkFBRSxDQUFHLDBCQUEwQjtBQUM3QixpQ0FBbUIsY0FBZ0IsUUFBQzs7QUFHdEMscUJBQVUscUJBQXFCO0FBRS9CLGdCQUFJLFFBQVE7QUFDVixvQkFBTSxLQUFLO0FBRVgsa0JBQUksYUFBYSxNQUFNO0FBQ3JCLHlCQUFTO0FBRVQsb0JBQUUsQ0FBRyxRQUFRO0FBQ1gsd0JBQU07Ozs7QUFLWixnQkFBRSxDQUFHLFFBQVE7QUFDWCxvQkFBTSxVQUFVOztBQUdsQixtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsb0JBQVc7QUFDVCxnQkFBTSxTQUFTO0FBRWYsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLGlCQUFRO0FBQUUsbUJBQU0sS0FBQSxnQkE5Q0csa0JBQWdCLFlBOENaLFNBQU4sTUFBSyxLQUFBLE1BQU87Ozs7O01BOUNlLFVBQVk7c0JBQXJDOzs7O0FDVHJCOzs7Ozs7QUFFNEIsUUFBQSxlQUF3Qix1QkFBQTtBQUN2QixRQUFBLGdCQUFrQyx1QkFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1FBRTFDLDBCQUFOLHlCQUFRLGlCQUFBOzs7MENBQXFCOzs7Ozs7VUFDMUMsS0FBQTtpQkFBQSxzQkFBYSxXQUFXO0FBQ3RCLGdCQUFNLG1CQUFtQixJQUFJLGNBQWdCO0FBRTdDLG1CQUFPOzs7OztVQUdGLEtBQUE7aUJBQVAsbUNBQWlDLFVBQVUsWUFBWTtBQUFFLG1CQUFPLGFBQWUsUUFBQywwQkFBMEIsMEJBQXlCLFVBQVU7Ozs7O01BUDFGLGFBQWU7c0JBQS9DOzs7O0FDTHJCOzs7Ozs7QUFFK0IsUUFBQSxlQUFjO0FBRXRCLFFBQUEsY0FBZSx1QkFBQTtBQUNQLFFBQUEsa0JBQWlDLHVCQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRWhFLFFBQVEsZ0JBQWtCLGFBQWMsZUFBaEM7UUFFYSw2QkFBTix5QkFBUSxZQUFBOzs7NkNBQXdCOztBQUUzQyxZQUFNLFVBQVUsZUFDVixxQkFBcUIsSUFBSSxnQkFBa0IsUUFBQyxVQUM1QyxRQUFRO1VBQ047O2lDQUdGOzs7TUFSOEMsWUFBVTtzQkFBN0M7Ozs7QUNUckI7Ozs7OztBQUVpQixRQUFBLFFBQVMsdUJBQUE7QUFDVSxRQUFBLG9CQUE4Qix1QkFBQTtBQUMzQixRQUFBLHFCQUFnQyx1QkFBQTtBQUU5QixRQUFBLGFBQWM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7UUFFbEMsdUJBQU4seUJBQVEsTUFBQTs7O3VDQUFrQjs7QUFFckMsWUFBTSw2QkFBNkIsSUFBSSxtQkFBMEIsV0FDM0QsT0FBTyxXQUF3QiwwQkFDL0IsY0FBYztVQUNaO1dBRUYsT0FBTyxrQkFBdUI7aUNBRTlCLE1BQU0sYUFBYTs7O01BVHFCLE1BQUk7c0JBQWpDOzs7O0FDUnJCOzs7Ozs7QUFFK0IsUUFBQSxlQUFjO0FBRXRCLFFBQUEsY0FBZSx1QkFBQTtBQUNULFFBQUEsZ0JBQStCLHVCQUFBO0FBQzdCLFFBQUEsa0JBQWlDLHVCQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRWhFLFFBQVEsa0JBQW9CLGFBQWMsZUFBbEM7UUFFYSxrQ0FBTix5QkFBUSxZQUFBOzs7a0RBQTZCOztBQUVoRCxZQUFNLFVBQVUsaUJBQ1YsbUJBQW1CLElBQUksY0FBZ0IsV0FDdkMscUJBQXFCLElBQUksZ0JBQWtCLFFBQUMsVUFDNUMsUUFBUTtVQUNOO1VBQ0E7O2lDQUdGOzs7TUFWbUQsWUFBVTtzQkFBbEQ7Ozs7QUNWckI7Ozs7OztBQUVpQixRQUFBLFFBQVMsdUJBQUE7QUFDSSxRQUFBLGNBQXdCLHVCQUFBO0FBQ1YsUUFBQSx5QkFBcUMsdUJBQUE7QUFFdkMsUUFBQSxhQUFjOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1FBRW5DLHdCQUFOLHlCQUFRLE1BQUE7Ozt3Q0FBbUI7O0FBRXRDLFlBQU0sT0FBTyxXQUF5QiwyQkFDaEMsa0NBQWtDLElBQUksdUJBQStCLFdBQ3JFLGNBQWM7VUFDWjtXQUVGLE9BQU8sWUFBaUI7aUNBRXhCLE1BQU0sYUFBYTs7O01BVHNCLE1BQUk7c0JBQWxDOzs7O0FDUnJCO0FBQUE7QUFDQSxXQUFPLGVBQWUsU0FBUyxjQUFjO0FBQUEsTUFDekMsT0FBTztBQUFBO0FBRVgsWUFBUSxVQUFVO0FBQ2xCLFFBQUksWUFBWSx1QkFBdUI7QUFDdkMsUUFBSSxhQUFhLHVCQUF1QjtBQUN4QyxRQUFJLFNBQVM7QUFDYixvQ0FBZ0MsTUFBTTtBQUNsQyxVQUFJLFNBQVMsUUFBUTtBQUNqQixjQUFNLElBQUksZUFBZTtBQUFBO0FBRTdCLGFBQU87QUFBQTtBQUVYLDZCQUF5QixVQUFVLGFBQWE7QUFDNUMsVUFBSSxDQUFFLHFCQUFvQixjQUFjO0FBQ3BDLGNBQU0sSUFBSSxVQUFVO0FBQUE7QUFBQTtBQUc1QiwrQkFBMkIsUUFBUSxPQUFPO0FBQ3RDLGVBQVEsSUFBSSxHQUFHLElBQUksTUFBTSxRQUFRLEtBQUk7QUFDakMsWUFBSSxhQUFhLE1BQU07QUFDdkIsbUJBQVcsYUFBYSxXQUFXLGNBQWM7QUFDakQsbUJBQVcsZUFBZTtBQUMxQixZQUFJLFdBQVc7QUFBWSxxQkFBVyxXQUFXO0FBQ2pELGVBQU8sZUFBZSxRQUFRLFdBQVcsS0FBSztBQUFBO0FBQUE7QUFHdEQsMEJBQXNCLGFBQWEsWUFBWSxhQUFhO0FBQ3hELFVBQUk7QUFBWSwwQkFBa0IsWUFBWSxXQUFXO0FBQ3pELFVBQUk7QUFBYSwwQkFBa0IsYUFBYTtBQUNoRCxhQUFPO0FBQUE7QUFFWCxrQkFBYyxRQUFRLFVBQVUsVUFBVTtBQUN0QyxVQUFJLE9BQU8sWUFBWSxlQUFlLFFBQVEsS0FBSztBQUMvQyxlQUFPLFFBQVE7QUFBQSxhQUNaO0FBQ0gsZUFBTyxlQUFjLFNBQVEsV0FBVSxXQUFVO0FBQzdDLGNBQUksT0FBTyxlQUFlLFNBQVE7QUFDbEMsY0FBSSxDQUFDO0FBQU07QUFDWCxjQUFJLE9BQU8sT0FBTyx5QkFBeUIsTUFBTTtBQUNqRCxjQUFJLEtBQUssS0FBSztBQUNWLG1CQUFPLEtBQUssSUFBSSxLQUFLO0FBQUE7QUFFekIsaUJBQU8sS0FBSztBQUFBO0FBQUE7QUFHcEIsYUFBTyxLQUFLLFFBQVEsVUFBVSxZQUFZO0FBQUE7QUFFOUMsNkJBQXlCLEdBQUc7QUFDeEIsd0JBQWtCLE9BQU8saUJBQWlCLE9BQU8saUJBQWlCLDBCQUF5QixJQUFHO0FBQzFGLGVBQU8sR0FBRSxhQUFhLE9BQU8sZUFBZTtBQUFBO0FBRWhELGFBQU8sZ0JBQWdCO0FBQUE7QUFFM0IsdUJBQW1CLFVBQVUsWUFBWTtBQUNyQyxVQUFJLE9BQU8sZUFBZSxjQUFjLGVBQWUsTUFBTTtBQUN6RCxjQUFNLElBQUksVUFBVTtBQUFBO0FBRXhCLGVBQVMsWUFBWSxPQUFPLE9BQU8sY0FBYyxXQUFXLFdBQVc7QUFBQSxRQUNuRSxhQUFhO0FBQUEsVUFDVCxPQUFPO0FBQUEsVUFDUCxVQUFVO0FBQUEsVUFDVixjQUFjO0FBQUE7QUFBQTtBQUd0QixVQUFJO0FBQVksd0JBQWdCLFVBQVU7QUFBQTtBQUU5QyxvQ0FBZ0MsS0FBSztBQUNqQyxhQUFPLE9BQU8sSUFBSSxhQUFhLE1BQU07QUFBQSxRQUNqQyxTQUFTO0FBQUE7QUFBQTtBQUdqQix3Q0FBb0MsTUFBTSxNQUFNO0FBQzVDLFVBQUksUUFBUyxTQUFRLFVBQVUsWUFBWSxPQUFPLFNBQVMsYUFBYTtBQUNwRSxlQUFPO0FBQUE7QUFFWCxhQUFPLHVCQUF1QjtBQUFBO0FBRWxDLDZCQUF5QixHQUFHLEdBQUc7QUFDM0Isd0JBQWtCLE9BQU8sa0JBQWtCLDBCQUF5QixJQUFHLElBQUc7QUFDdEUsV0FBRSxZQUFZO0FBQ2QsZUFBTztBQUFBO0FBRVgsYUFBTyxnQkFBZ0IsR0FBRztBQUFBO0FBRTlCLDRCQUF3QixRQUFRLFVBQVU7QUFDdEMsYUFBTSxDQUFDLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxXQUFVO0FBQzFELGlCQUFTLGdCQUFnQjtBQUN6QixZQUFJLFdBQVc7QUFBTTtBQUFBO0FBRXpCLGFBQU87QUFBQTtBQUVYLFFBQUksVUFBVSxTQUFTLEtBQUs7QUFDeEI7QUFDQSxhQUFPLE9BQU8sT0FBTyxXQUFXLGVBQWUsSUFBSSxnQkFBZ0IsU0FBUyxXQUFXLE9BQU87QUFBQTtBQUVsRyx5Q0FBcUM7QUFDakMsVUFBSSxPQUFPLFlBQVksZUFBZSxDQUFDLFFBQVE7QUFBVyxlQUFPO0FBQ2pFLFVBQUksUUFBUSxVQUFVO0FBQU0sZUFBTztBQUNuQyxVQUFJLE9BQU8sVUFBVTtBQUFZLGVBQU87QUFDeEMsVUFBSTtBQUNBLGdCQUFRLFVBQVUsUUFBUSxLQUFLLFFBQVEsVUFBVSxTQUFTLElBQUksV0FBVztBQUFBO0FBQ3pFLGVBQU87QUFBQSxlQUNGLEdBQVA7QUFDRSxlQUFPO0FBQUE7QUFBQTtBQUdmLDBCQUFzQixTQUFTO0FBQzNCLFVBQUksNEJBQTRCO0FBQ2hDLGFBQU8sZ0NBQWdDO0FBQ25DLFlBQUksUUFBUSxnQkFBZ0IsVUFBVTtBQUN0QyxZQUFJLDJCQUEyQjtBQUMzQixjQUFJLFlBQVksZ0JBQWdCLE1BQU07QUFDdEMsbUJBQVMsUUFBUSxVQUFVLE9BQU8sV0FBVztBQUFBLGVBQzFDO0FBQ0gsbUJBQVMsTUFBTSxNQUFNLE1BQU07QUFBQTtBQUUvQixlQUFPLDJCQUEyQixNQUFNO0FBQUE7QUFBQTtBQUdoRCxRQUFJLHdCQUFzQyx5QkFBUyxjQUFjO0FBQzdELGdCQUFVLHdCQUF1QjtBQUNqQyxVQUFJLFNBQVMsYUFBYTtBQUMxQixzQ0FBK0IsbUJBQW1CO0FBQzlDLHdCQUFnQixNQUFNO0FBQ3RCLFlBQUk7QUFDSixnQkFBUSxPQUFPLEtBQUs7QUFDcEIsY0FBTSxvQkFBb0I7QUFDMUIsZUFBTztBQUFBO0FBRVgsbUJBQWEsd0JBQXVCO0FBQUEsUUFDaEM7QUFBQSxVQUNJLEtBQUs7QUFBQSxVQUNMLE9BQU8sZUFBZSxPQUFPLE9BQU8sVUFBVTtBQUMxQyxnQkFBSTtBQUNKLGdCQUFJLGVBQWU7QUFDbkIsZ0JBQUksYUFBYSxNQUFNLGlCQUFpQix1QkFBdUIsTUFBTSwyQkFBMkIsbUJBQW1CO0FBQ25ILGdCQUFJLHFCQUFxQixNQUFNO0FBQzNCLGtCQUFJLFVBQVUsaUJBQWlCLGNBQWMsVUFBVSxRQUFRLE1BQU0sS0FBSztBQUMxRSxrQkFBSSxZQUFZLE1BQU07QUFDbEIsb0JBQUksYUFBYyxJQUFHLFFBQVEsTUFBTTtBQUNuQyxvQkFBSSxlQUFlLFNBQVM7QUFDeEIsaUNBQWUsV0FBVyxRQUFRLHFCQUFxQjtBQUFBO0FBQUE7QUFBQTtBQUluRSxxQkFBUyxpQkFBaUI7QUFDMUIsZ0JBQUksUUFBUTtBQUNSLG9CQUFNLEtBQUs7QUFDWCxrQkFBSSxhQUFhLE1BQU07QUFDbkIseUJBQVM7QUFDVCxvQkFBSSxDQUFDLFFBQVE7QUFDVCx3QkFBTTtBQUFBO0FBQUE7QUFBQTtBQUlsQixnQkFBSSxDQUFDLFFBQVE7QUFDVCxvQkFBTSxVQUFVO0FBQUE7QUFFcEIsbUJBQU87QUFBQTtBQUFBO0FBQUEsUUFHZjtBQUFBLFVBQ0ksS0FBSztBQUFBLFVBQ0wsT0FBTyxvQkFBb0I7QUFDdkIsZ0JBQUksMEJBQTBCLEtBQUssa0JBQWtCLFlBQVksU0FBUztBQUMxRSxtQkFBTztBQUFBO0FBQUE7QUFBQSxRQUdmO0FBQUEsVUFDSSxLQUFLO0FBQUEsVUFDTCxPQUFPLGlCQUFpQjtBQUNwQixtQkFBTyxLQUFLLGdCQUFnQix1QkFBc0IsWUFBWSxTQUFTLE1BQU0sS0FBSyxNQUFNLHdCQUF1QixLQUFLO0FBQUE7QUFBQTtBQUFBO0FBSWhJLGFBQU87QUFBQSxNQUNULFVBQVU7QUFDWixZQUFRLFVBQVU7QUFBQTs7O0FDbkxsQjtBQUFBO0FBQ0EsV0FBTyxlQUFlLFNBQVMsY0FBYztBQUFBLE1BQ3pDLE9BQU87QUFBQTtBQUVYLFlBQVEsVUFBVTtBQUNsQixRQUFJLGVBQWUsdUJBQXVCO0FBQzFDLFFBQUkscUJBQXFCLHVCQUF1QjtBQUNoRCxRQUFJLFNBQVM7QUFDYixvQ0FBZ0MsTUFBTTtBQUNsQyxVQUFJLFNBQVMsUUFBUTtBQUNqQixjQUFNLElBQUksZUFBZTtBQUFBO0FBRTdCLGFBQU87QUFBQTtBQUVYLDZCQUF5QixVQUFVLGFBQWE7QUFDNUMsVUFBSSxDQUFFLHFCQUFvQixjQUFjO0FBQ3BDLGNBQU0sSUFBSSxVQUFVO0FBQUE7QUFBQTtBQUc1QiwrQkFBMkIsUUFBUSxPQUFPO0FBQ3RDLGVBQVEsSUFBSSxHQUFHLElBQUksTUFBTSxRQUFRLEtBQUk7QUFDakMsWUFBSSxhQUFhLE1BQU07QUFDdkIsbUJBQVcsYUFBYSxXQUFXLGNBQWM7QUFDakQsbUJBQVcsZUFBZTtBQUMxQixZQUFJLFdBQVc7QUFBWSxxQkFBVyxXQUFXO0FBQ2pELGVBQU8sZUFBZSxRQUFRLFdBQVcsS0FBSztBQUFBO0FBQUE7QUFHdEQsMEJBQXNCLGFBQWEsWUFBWSxhQUFhO0FBQ3hELFVBQUk7QUFBWSwwQkFBa0IsWUFBWSxXQUFXO0FBQ3pELFVBQUk7QUFBYSwwQkFBa0IsYUFBYTtBQUNoRCxhQUFPO0FBQUE7QUFFWCw2QkFBeUIsS0FBSyxLQUFLLE9BQU87QUFDdEMsVUFBSSxPQUFPLEtBQUs7QUFDWixlQUFPLGVBQWUsS0FBSyxLQUFLO0FBQUEsVUFDNUI7QUFBQSxVQUNBLFlBQVk7QUFBQSxVQUNaLGNBQWM7QUFBQSxVQUNkLFVBQVU7QUFBQTtBQUFBLGFBRVg7QUFDSCxZQUFJLE9BQU87QUFBQTtBQUVmLGFBQU87QUFBQTtBQUVYLDZCQUF5QixHQUFHO0FBQ3hCLHdCQUFrQixPQUFPLGlCQUFpQixPQUFPLGlCQUFpQiwwQkFBeUIsSUFBRztBQUMxRixlQUFPLEdBQUUsYUFBYSxPQUFPLGVBQWU7QUFBQTtBQUVoRCxhQUFPLGdCQUFnQjtBQUFBO0FBRTNCLHVCQUFtQixVQUFVLFlBQVk7QUFDckMsVUFBSSxPQUFPLGVBQWUsY0FBYyxlQUFlLE1BQU07QUFDekQsY0FBTSxJQUFJLFVBQVU7QUFBQTtBQUV4QixlQUFTLFlBQVksT0FBTyxPQUFPLGNBQWMsV0FBVyxXQUFXO0FBQUEsUUFDbkUsYUFBYTtBQUFBLFVBQ1QsT0FBTztBQUFBLFVBQ1AsVUFBVTtBQUFBLFVBQ1YsY0FBYztBQUFBO0FBQUE7QUFHdEIsVUFBSTtBQUFZLHdCQUFnQixVQUFVO0FBQUE7QUFFOUMsb0NBQWdDLEtBQUs7QUFDakMsYUFBTyxPQUFPLElBQUksYUFBYSxNQUFNO0FBQUEsUUFDakMsU0FBUztBQUFBO0FBQUE7QUFHakIsd0NBQW9DLE1BQU0sTUFBTTtBQUM1QyxVQUFJLFFBQVMsU0FBUSxVQUFVLFlBQVksT0FBTyxTQUFTLGFBQWE7QUFDcEUsZUFBTztBQUFBO0FBRVgsYUFBTyx1QkFBdUI7QUFBQTtBQUVsQyw2QkFBeUIsR0FBRyxHQUFHO0FBQzNCLHdCQUFrQixPQUFPLGtCQUFrQiwwQkFBeUIsSUFBRyxJQUFHO0FBQ3RFLFdBQUUsWUFBWTtBQUNkLGVBQU87QUFBQTtBQUVYLGFBQU8sZ0JBQWdCLEdBQUc7QUFBQTtBQUU5QixRQUFJLFVBQVUsU0FBUyxLQUFLO0FBQ3hCO0FBQ0EsYUFBTyxPQUFPLE9BQU8sV0FBVyxlQUFlLElBQUksZ0JBQWdCLFNBQVMsV0FBVyxPQUFPO0FBQUE7QUFFbEcseUNBQXFDO0FBQ2pDLFVBQUksT0FBTyxZQUFZLGVBQWUsQ0FBQyxRQUFRO0FBQVcsZUFBTztBQUNqRSxVQUFJLFFBQVEsVUFBVTtBQUFNLGVBQU87QUFDbkMsVUFBSSxPQUFPLFVBQVU7QUFBWSxlQUFPO0FBQ3hDLFVBQUk7QUFDQSxnQkFBUSxVQUFVLFFBQVEsS0FBSyxRQUFRLFVBQVUsU0FBUyxJQUFJLFdBQVc7QUFBQTtBQUN6RSxlQUFPO0FBQUEsZUFDRixHQUFQO0FBQ0UsZUFBTztBQUFBO0FBQUE7QUFHZiwwQkFBc0IsU0FBUztBQUMzQixVQUFJLDRCQUE0QjtBQUNoQyxhQUFPLGdDQUFnQztBQUNuQyxZQUFJLFFBQVEsZ0JBQWdCLFVBQVU7QUFDdEMsWUFBSSwyQkFBMkI7QUFDM0IsY0FBSSxZQUFZLGdCQUFnQixNQUFNO0FBQ3RDLG1CQUFTLFFBQVEsVUFBVSxPQUFPLFdBQVc7QUFBQSxlQUMxQztBQUNILG1CQUFTLE1BQU0sTUFBTSxNQUFNO0FBQUE7QUFFL0IsZUFBTywyQkFBMkIsTUFBTTtBQUFBO0FBQUE7QUFHaEQsUUFBSSwyQkFBeUMseUJBQVMsaUJBQWlCO0FBQ25FLGdCQUFVLDJCQUEwQjtBQUNwQyxVQUFJLFNBQVMsYUFBYTtBQUMxQiwyQ0FBb0M7QUFDaEMsd0JBQWdCLE1BQU07QUFDdEIsWUFBSTtBQUNKLGdCQUFRLE9BQU8sTUFBTSxNQUFNO0FBQzNCLHdCQUFnQix1QkFBdUIsUUFBUSxxQkFBcUI7QUFDcEUsZUFBTztBQUFBO0FBRVgsbUJBQWEsMkJBQTBCO0FBQUEsUUFDbkM7QUFBQSxVQUNJLEtBQUs7QUFBQSxVQUNMLE9BQU8sc0JBQXNCLFdBQVc7QUFDcEMsZ0JBQUksb0JBQW9CLEtBQUssd0JBQXdCLHdCQUF3QixJQUFJLG1CQUFtQixRQUFRO0FBQzVHLG1CQUFPO0FBQUE7QUFBQTtBQUFBLFFBR2Y7QUFBQSxVQUNJLEtBQUs7QUFBQSxVQUNMLE9BQU8sZ0NBQWdDO0FBQ25DLGdCQUFJLGFBQWEsS0FBSyxpQkFBaUIsaUJBQWtCLElBQUcsUUFBUSxNQUFNLGFBQWEsZUFBZSxnQkFBZ0Isc0JBQXNCLGFBQWEsY0FBYyxVQUFVLG9CQUFvQixNQUFNLEtBQUssb0JBQW9CLGNBQWUsSUFBRyxRQUFRLE9BQU8sVUFBVSxVQUFVLGFBQWEsb0JBQW9CLElBQUksT0FBTztBQUNyVSxtQkFBTztBQUFBO0FBQUE7QUFBQSxTQUdoQjtBQUFBLFFBQ0M7QUFBQSxVQUNJLEtBQUs7QUFBQSxVQUNMLE9BQU8sbUNBQW1DLFVBQVUsWUFBWTtBQUM1RCxtQkFBTyxhQUFhLFFBQVEsMEJBQTBCLDJCQUEwQixVQUFVO0FBQUE7QUFBQTtBQUFBO0FBSXRHLGFBQU87QUFBQSxNQUNULGFBQWE7QUFDZixZQUFRLFVBQVU7QUFBQTs7O0FDbEpsQjs7Ozs7O0FBRXNCLFFBQUEsZUFBYztBQUVuQixRQUFBLFFBQVMsdUJBQUE7QUFDVyxRQUFBLHFCQUErQix1QkFBQTtBQUN6QixRQUFBLHdCQUFvQyx1QkFBQTtBQUVyQyxRQUFBLGFBQWM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFeEQsUUFBUSx3QkFBMEIsYUFBSyxNQUEvQjtRQUVhLHdCQUFOLHlCQUFRLE1BQUE7Ozt3Q0FBbUI7O0FBRXRDLFlBQU0sd0NBQXdDLHVCQUN4QyxrREFBa0QsSUFBSSxzQkFBOEIsUUFBQyx3Q0FDckYsT0FBTyxXQUF5QiwyQkFDaEMsY0FBYztVQUNaO1dBRUYsT0FBTyxtQkFBd0I7aUNBRS9CLE1BQU0sYUFBYTs7O01BVnNCLE1BQUk7c0JBQWxDOzs7O0FDWnJCOzs7Ozs7QUFFdUIsUUFBQSxjQUFlLHVCQUFBO0FBQ1QsUUFBQSxnQkFBK0IsdUJBQUE7QUFDN0IsUUFBQSxrQkFBaUMsdUJBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7UUFFM0MsMkJBQU4seUJBQVEsWUFBQTs7O3lDQUNULHVCQUFxQjs7QUFDL0IsWUFBTSxVQUFVLHVCQUNWLG1CQUFtQixJQUFJLGNBQWdCLFdBQ3ZDLHFCQUFxQixJQUFJLGdCQUFrQixRQUFDLFVBQzVDLFFBQVE7VUFDTjtVQUNBOztpQ0FHRjs7O01BVjRDLFlBQVU7c0JBQTNDOzs7O0FDTnJCOzs7Ozs7QUFFK0IsUUFBQSxlQUFjO0FBRTVCLFFBQUEsUUFBUyx1QkFBQTtBQUNJLFFBQUEsY0FBd0IsdUJBQUE7QUFDakIsUUFBQSxrQkFBOEIsdUJBQUE7QUFFeEIsUUFBQSxhQUFjOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRXpELFFBQVEsZUFBaUIsYUFBYyxlQUEvQjtRQUVhLHlCQUFOLHlCQUFRLE1BQUE7Ozt5Q0FBb0I7O0FBRXZDLFlBQU0sT0FBTyxXQUEwQiw0QkFDakMsMENBQTBDLGNBQzFDLG1DQUFtQyxJQUFJLGdCQUF3QixRQUFDLDBDQUNoRSxjQUFjO1VBQ1o7V0FFRixPQUFPLFlBQWlCO2lDQUV4QixNQUFNLGFBQWE7OztNQVZ1QixNQUFJO3NCQUFuQzs7OztBQ1pyQjs7Ozs7O0FBRStCLFFBQUEsZUFBYztBQUU1QixRQUFBLFFBQVMsdUJBQUE7QUFDSSxRQUFBLGNBQXdCLHVCQUFBO0FBQ2pCLFFBQUEsa0JBQThCLHVCQUFBO0FBRXZCLFFBQUEsYUFBYzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUUxRCxRQUFRLE9BQVMsYUFBYyxlQUF2QjtRQUVhLDBCQUFOLHlCQUFRLE1BQUE7OzswQ0FBcUI7O0FBRXhDLFlBQU0sT0FBTyxXQUEyQiw2QkFDbEMsMkNBQTJDLE1BQzNDLG9DQUFvQyxJQUFJLGdCQUF3QixRQUFDLDJDQUNqRSxjQUFjO1VBQ1o7V0FFRixPQUFPLFlBQWlCO2lDQUV4QixNQUFNLGFBQWE7OztNQVZ3QixNQUFJO3NCQUFwQzs7OztBQ1pyQjs7Ozs7O0FBRStCLFFBQUEsZUFBYztBQUU1QixRQUFBLFFBQVMsdUJBQUE7QUFDSSxRQUFBLGNBQXdCLHVCQUFBO0FBQ2pCLFFBQUEsa0JBQThCLHVCQUFBO0FBRXRCLFFBQUEsYUFBYzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUUzRCxRQUFRLFdBQWEsYUFBYyxlQUEzQjtRQUVhLDJCQUFOLHlCQUFRLE1BQUE7OzsyQ0FBc0I7O0FBRXpDLFlBQU0sT0FBTyxXQUE0Qiw4QkFDbkMsNENBQTRDLFVBQzVDLHFDQUFxQyxJQUFJLGdCQUF3QixRQUFDLDRDQUNsRSxjQUFjO1VBQ1o7V0FFRixPQUFPLFlBQWlCO2lDQUV4QixNQUFNLGFBQWE7OztNQVZ5QixNQUFJO3NCQUFyQzs7OztBQ1pyQjtBQUFBO0FBQ0EsV0FBTyxlQUFlLFNBQVMsY0FBYztBQUFBLE1BQ3pDLE9BQU87QUFBQTtBQUVYLFlBQVEsVUFBVTtBQUNsQixRQUFJLGVBQWUsdUJBQXVCO0FBQzFDLFFBQUksd0JBQXdCLHVCQUF1QjtBQUNuRCxRQUFJLFNBQVM7QUFDYixvQ0FBZ0MsTUFBTTtBQUNsQyxVQUFJLFNBQVMsUUFBUTtBQUNqQixjQUFNLElBQUksZUFBZTtBQUFBO0FBRTdCLGFBQU87QUFBQTtBQUVYLDZCQUF5QixVQUFVLGFBQWE7QUFDNUMsVUFBSSxDQUFFLHFCQUFvQixjQUFjO0FBQ3BDLGNBQU0sSUFBSSxVQUFVO0FBQUE7QUFBQTtBQUc1QiwrQkFBMkIsUUFBUSxPQUFPO0FBQ3RDLGVBQVEsSUFBSSxHQUFHLElBQUksTUFBTSxRQUFRLEtBQUk7QUFDakMsWUFBSSxhQUFhLE1BQU07QUFDdkIsbUJBQVcsYUFBYSxXQUFXLGNBQWM7QUFDakQsbUJBQVcsZUFBZTtBQUMxQixZQUFJLFdBQVc7QUFBWSxxQkFBVyxXQUFXO0FBQ2pELGVBQU8sZUFBZSxRQUFRLFdBQVcsS0FBSztBQUFBO0FBQUE7QUFHdEQsMEJBQXNCLGFBQWEsWUFBWSxhQUFhO0FBQ3hELFVBQUk7QUFBWSwwQkFBa0IsWUFBWSxXQUFXO0FBQ3pELFVBQUk7QUFBYSwwQkFBa0IsYUFBYTtBQUNoRCxhQUFPO0FBQUE7QUFFWCw2QkFBeUIsS0FBSyxLQUFLLE9BQU87QUFDdEMsVUFBSSxPQUFPLEtBQUs7QUFDWixlQUFPLGVBQWUsS0FBSyxLQUFLO0FBQUEsVUFDNUI7QUFBQSxVQUNBLFlBQVk7QUFBQSxVQUNaLGNBQWM7QUFBQSxVQUNkLFVBQVU7QUFBQTtBQUFBLGFBRVg7QUFDSCxZQUFJLE9BQU87QUFBQTtBQUVmLGFBQU87QUFBQTtBQUVYLDZCQUF5QixHQUFHO0FBQ3hCLHdCQUFrQixPQUFPLGlCQUFpQixPQUFPLGlCQUFpQiwwQkFBeUIsSUFBRztBQUMxRixlQUFPLEdBQUUsYUFBYSxPQUFPLGVBQWU7QUFBQTtBQUVoRCxhQUFPLGdCQUFnQjtBQUFBO0FBRTNCLHVCQUFtQixVQUFVLFlBQVk7QUFDckMsVUFBSSxPQUFPLGVBQWUsY0FBYyxlQUFlLE1BQU07QUFDekQsY0FBTSxJQUFJLFVBQVU7QUFBQTtBQUV4QixlQUFTLFlBQVksT0FBTyxPQUFPLGNBQWMsV0FBVyxXQUFXO0FBQUEsUUFDbkUsYUFBYTtBQUFBLFVBQ1QsT0FBTztBQUFBLFVBQ1AsVUFBVTtBQUFBLFVBQ1YsY0FBYztBQUFBO0FBQUE7QUFHdEIsVUFBSTtBQUFZLHdCQUFnQixVQUFVO0FBQUE7QUFFOUMsb0NBQWdDLEtBQUs7QUFDakMsYUFBTyxPQUFPLElBQUksYUFBYSxNQUFNO0FBQUEsUUFDakMsU0FBUztBQUFBO0FBQUE7QUFHakIsd0NBQW9DLE1BQU0sTUFBTTtBQUM1QyxVQUFJLFFBQVMsU0FBUSxVQUFVLFlBQVksT0FBTyxTQUFTLGFBQWE7QUFDcEUsZUFBTztBQUFBO0FBRVgsYUFBTyx1QkFBdUI7QUFBQTtBQUVsQyw2QkFBeUIsR0FBRyxHQUFHO0FBQzNCLHdCQUFrQixPQUFPLGtCQUFrQiwwQkFBeUIsSUFBRyxJQUFHO0FBQ3RFLFdBQUUsWUFBWTtBQUNkLGVBQU87QUFBQTtBQUVYLGFBQU8sZ0JBQWdCLEdBQUc7QUFBQTtBQUU5QixRQUFJLFVBQVUsU0FBUyxLQUFLO0FBQ3hCO0FBQ0EsYUFBTyxPQUFPLE9BQU8sV0FBVyxlQUFlLElBQUksZ0JBQWdCLFNBQVMsV0FBVyxPQUFPO0FBQUE7QUFFbEcseUNBQXFDO0FBQ2pDLFVBQUksT0FBTyxZQUFZLGVBQWUsQ0FBQyxRQUFRO0FBQVcsZUFBTztBQUNqRSxVQUFJLFFBQVEsVUFBVTtBQUFNLGVBQU87QUFDbkMsVUFBSSxPQUFPLFVBQVU7QUFBWSxlQUFPO0FBQ3hDLFVBQUk7QUFDQSxnQkFBUSxVQUFVLFFBQVEsS0FBSyxRQUFRLFVBQVUsU0FBUyxJQUFJLFdBQVc7QUFBQTtBQUN6RSxlQUFPO0FBQUEsZUFDRixHQUFQO0FBQ0UsZUFBTztBQUFBO0FBQUE7QUFHZiwwQkFBc0IsU0FBUztBQUMzQixVQUFJLDRCQUE0QjtBQUNoQyxhQUFPLGdDQUFnQztBQUNuQyxZQUFJLFFBQVEsZ0JBQWdCLFVBQVU7QUFDdEMsWUFBSSwyQkFBMkI7QUFDM0IsY0FBSSxZQUFZLGdCQUFnQixNQUFNO0FBQ3RDLG1CQUFTLFFBQVEsVUFBVSxPQUFPLFdBQVc7QUFBQSxlQUMxQztBQUNILG1CQUFTLE1BQU0sTUFBTSxNQUFNO0FBQUE7QUFFL0IsZUFBTywyQkFBMkIsTUFBTTtBQUFBO0FBQUE7QUFHaEQsUUFBSSw4QkFBNEMseUJBQVMsaUJBQWlCO0FBQ3RFLGdCQUFVLDhCQUE2QjtBQUN2QyxVQUFJLFNBQVMsYUFBYTtBQUMxQiw4Q0FBdUM7QUFDbkMsd0JBQWdCLE1BQU07QUFDdEIsWUFBSTtBQUNKLGdCQUFRLE9BQU8sTUFBTSxNQUFNO0FBQzNCLHdCQUFnQix1QkFBdUIsUUFBUSxxQkFBcUI7QUFDcEUsZUFBTztBQUFBO0FBRVgsbUJBQWEsOEJBQTZCO0FBQUEsUUFDdEM7QUFBQSxVQUNJLEtBQUs7QUFBQSxVQUNMLE9BQU8sc0JBQXNCLFdBQVc7QUFDcEMsZ0JBQUksdUJBQXVCLEtBQUssMkJBQTJCLDJCQUEyQixJQUFJLHNCQUFzQixRQUFRO0FBQ3hILG1CQUFPO0FBQUE7QUFBQTtBQUFBLFFBR2Y7QUFBQSxVQUNJLEtBQUs7QUFBQSxVQUNMLE9BQU8sbUNBQW1DO0FBQ3RDLGdCQUFJLGFBQWEsS0FBSyxpQkFBaUIsaUJBQWtCLElBQUcsUUFBUSxNQUFNLGFBQWEsZUFBZSxnQkFBZ0Isc0JBQXNCLGFBQWEsY0FBYyxVQUFVLG9CQUFvQixNQUFNLEtBQUssb0JBQW9CLGNBQWUsSUFBRyxRQUFRLE9BQU8sVUFBVSx1QkFBdUI7QUFDdFMsbUJBQU87QUFBQTtBQUFBO0FBQUEsU0FHaEI7QUFBQSxRQUNDO0FBQUEsVUFDSSxLQUFLO0FBQUEsVUFDTCxPQUFPLG1DQUFtQyxVQUFVLFlBQVk7QUFDNUQsbUJBQU8sYUFBYSxRQUFRLDBCQUEwQiw4QkFBNkIsVUFBVTtBQUFBO0FBQUE7QUFBQTtBQUl6RyxhQUFPO0FBQUEsTUFDVCxhQUFhO0FBQ2YsWUFBUSxVQUFVO0FBQ2xCLFdBQU8sVUFBVTtBQUFBOzs7QUNuSmpCOzs7Ozs7QUFFc0IsUUFBQSxlQUFjO0FBRW5CLFFBQUEsUUFBUyx1QkFBQTtBQUNjLFFBQUEsd0JBQWtDLHVCQUFBO0FBQy9CLFFBQUEseUJBQW9DLHVCQUFBO0FBRWxDLFFBQUEsYUFBYzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUUzRCxRQUFRLFdBQWEsYUFBSyxNQUFsQjtRQUVhLDJCQUFOLHlCQUFRLE1BQUE7OzsyQ0FBc0I7O0FBRXpDLFlBQU0sMkJBQTJCLFVBQzNCLHFDQUFxQyxJQUFJLHVCQUE4QixRQUFDLDJCQUN4RSxPQUFPLFdBQTRCLDhCQUNuQyxjQUFjO1VBQ1o7V0FFRixPQUFPLHNCQUEyQjtpQ0FFbEMsTUFBTSxhQUFhOzs7TUFWeUIsTUFBSTtzQkFBckM7Ozs7QUNackI7Ozs7O1lBSWdCLG1CQUFBO1lBWUEscUJBQUE7QUFkTSxRQUFBLFNBQW9COzhCQUVULE9BQU87QUFDdEMsVUFBTSxVQUFVO0FBRWhCLFlBQU0sUUFBUSxTQUFDLE1BQVM7QUFDdEIsWUFBTSxXQUFXLEtBQUs7QUFFdEIsZ0JBQVEsWUFBWTs7QUFHdEIsYUFBTzs7Z0NBRzBCLE9BQU87QUFDeEMsVUFBTSxZQUFTLElBQUcsUUFBSyxNQUFDLFFBQ3BCLFlBQVk7QUFFaEIsYUFBTzs7Ozs7QUNwQlQ7Ozs7OztBQUVnQixRQUFBLE9BQU8sdUJBQUE7QUFDTixRQUFBLFFBQVMsdUJBQUE7QUFDUixRQUFBLFNBQVUsdUJBQUE7QUFDUCxRQUFBLFFBQWMsdUJBQUE7QUFDZCxRQUFBLFFBQWMsdUJBQUE7QUFDZCxRQUFBLFNBQWMsdUJBQUE7QUFDYixRQUFBLFNBQWUsdUJBQUE7QUFDWixRQUFBLFlBQWtCLHVCQUFBO0FBQ2xCLFFBQUEsWUFBa0IsdUJBQUE7QUFDbEIsUUFBQSxZQUFrQix1QkFBQTtBQUNqQixRQUFBLGFBQW1CLHVCQUFBO0FBQ2xCLFFBQUEsY0FBb0IsdUJBQUE7QUFDcEIsUUFBQSxjQUFvQix1QkFBQTtBQUNuQixRQUFBLGVBQXFCLHVCQUFBO0FBQ3BCLFFBQUEsZ0JBQXNCLHVCQUFBO0FBQ3JCLFFBQUEsaUJBQXVCLHVCQUFBO0FBQ3RCLFFBQUEsa0JBQXdCLHVCQUFBO0FBQ3ZCLFFBQUEsbUJBQXlCLHVCQUFBO0FBQ3pCLFFBQUEsbUJBQXlCLHVCQUFBO0FBQ3hCLFFBQUEsb0JBQTBCLHVCQUFBO0FBQ3pCLFFBQUEscUJBQTJCLHVCQUFBO0FBQzNCLFFBQUEscUJBQTJCLHVCQUFBO0FBQzFCLFFBQUEsc0JBQTRCLHVCQUFBO0FBQzNCLFFBQUEsdUJBQTZCLHVCQUFBO0FBQzVCLFFBQUEsd0JBQThCLHVCQUFBO0FBQzlCLFFBQUEsd0JBQThCLHVCQUFBO0FBRWQsUUFBQSxTQUFvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7UUFFcEQsWUFBTiwyQkFBUTswQkFDVCxXQUFXLFNBQU87O0FBQzVCLGFBQUssWUFBWTtBQUNqQixhQUFLLFVBQVU7Ozs7VUFHakIsS0FBQTtpQkFBQSx3QkFBZTtBQUNiLG1CQUFPLEtBQUs7Ozs7VUFHZCxLQUFBO2lCQUFBLHNCQUFhO0FBQ1gsbUJBQU8sS0FBSzs7OztVQUdkLEtBQUE7aUJBQUEsZUFBTSxRQUErQjtnQkFBdkIsT0FBSSxVQUFBLFNBQUEsS0FBQSxVQUFBLE9BQUEsU0FBQSxVQUFBLEtBQUcsS0FBSztBQUN4QixnQkFBTSxRQUFRLE9BQUssUUFBQyxxQkFBcUIsUUFBUSxLQUFLLFVBQ2hELFdBQVcsTUFDWCxXQUFXLEtBQUssTUFBTSxPQUFPLFdBQzdCLE9BQU87QUFFYixtQkFBTzs7OztVQUdWLEtBQUE7aUJBQUEseUJBQWdCLFFBQVE7QUFDdEIsZ0JBQUk7QUFFSCxnQkFBTSxPQUFPLEtBQUssTUFBTTtBQUV4QixnQkFBSSxTQUFTLE1BQU07QUFDakIsb0JBQU0sSUFBSSxNQUFPOztBQUduQixvQkFBUSxLQUFLLGNBQWMsTUFBSTtBQUUvQixnQkFBTSxjQUFjLE1BQU07QUFFMUIsZ0JBQUksZ0JBQWdCLEdBQUc7QUFDckIsb0JBQU0sSUFBSSxNQUFPOztBQUduQixtQkFBTzs7Ozs7VUFLRixLQUFBO2lCQUFQLHVCQUFxQjtBQUNuQixnQkFBTSxXQUFXLElBQUksTUFBUSxXQUN2QixXQUFXLElBQUksTUFBUSxXQUN2QixXQUFXLElBQUksT0FBUSxXQUN2QixZQUFZLElBQUksT0FBUyxXQUN6QixlQUFlLElBQUksVUFBWSxXQUMvQixlQUFlLElBQUksVUFBWSxXQUMvQixlQUFlLElBQUksVUFBWSxXQUMvQixnQkFBZ0IsSUFBSSxXQUFhLFdBQ2pDLGlCQUFpQixJQUFJLFlBQWMsV0FDbkMsaUJBQWlCLElBQUksWUFBYyxXQUNuQyxrQkFBa0IsSUFBSSxhQUFlLFdBQ3JDLG1CQUFtQixJQUFJLGNBQWdCLFdBQ3ZDLG9CQUFvQixJQUFJLGVBQWlCLFdBQ3pDLHFCQUFxQixJQUFJLGdCQUFrQixXQUMzQyxzQkFBc0IsSUFBSSxpQkFBbUIsV0FDN0Msc0JBQXNCLElBQUksaUJBQW1CLFdBQzdDLHVCQUF1QixJQUFJLGtCQUFvQixXQUMvQyx3QkFBd0IsSUFBSSxtQkFBcUIsV0FDakQsd0JBQXdCLElBQUksbUJBQXFCLFdBQ2pELHlCQUF5QixJQUFJLG9CQUFzQixXQUNuRCwwQkFBMEIsSUFBSSxxQkFBdUIsV0FDckQsMkJBQTJCLElBQUksc0JBQXdCLFdBQ3ZELDJCQUEyQixJQUFJLHNCQUF3QjtBQUU3RCxnQkFBSSxRQUFRO2NBQ1Y7Y0FDQTtjQUNBO2NBQ0E7Y0FDQTtjQUNBO2NBQ0E7Y0FDQTtjQUNBO2NBQ0E7Y0FDQTtjQUNBO2NBQ0E7Y0FDQTtjQUNBO2NBQ0E7Y0FDQTtjQUNBO2NBQ0E7Y0FDQTtjQUNBO2NBQ0E7Y0FDQTs7QUFHRixnQkFBTSxZQUFTLElBQUcsUUFBa0IsbUJBQUMsUUFDL0IsVUFBTyxJQUFHLFFBQWdCLGlCQUFDLFFBQzNCLFlBQVksSUFBSSxXQUFVLFdBQVc7QUFFM0MsbUJBQU87Ozs7OztzQkFwR1U7b0JBQUEsV0EyQ1osT0FBTSxLQUFHOzs7O0FDMUVsQjs7Ozs7O0FBRUEsUUFBTSxNQUFPO21CQThCRTs7Ozs7QUNoQ2Y7Ozs7O1lBV2dCLGVBQUE7WUFPQSxrQkFBQTtBQWhCUyxRQUFBLGVBQWM7QUFFakIsUUFBQSxVQUFlLHVCQUFBO0FBRWdCLFFBQUEsU0FBb0I7Ozs7OztBQUV6RSxRQUFNLFdBQVcsYUFBUSxTQUFDO0FBQTFCLFFBQ00sWUFBWSxRQUFTLFFBQUM7MEJBRUMsS0FBSztBQUNoQyxVQUFNLFNBQVMsU0FBUyxjQUFjLE1BQ2hDLFFBQVEsVUFBVSxnQkFBZ0I7QUFFeEMsYUFBTzs7NkJBR3VCLE9BQU8sT0FBTztBQUM1QyxVQUFNLFlBQVMsSUFBRyxRQUFrQixtQkFBQyxRQUMvQixVQUFPLElBQUcsUUFBZ0IsaUJBQUMsUUFDM0IsU0FBUyxJQUFJLE1BQU0sV0FBVztBQUVwQyxhQUFPOzs7OztBQ3ZCVDs7Ozs7O0FBRWtCLFFBQUEsU0FBVSx1QkFBQTtBQUVrQixRQUFBLFVBQXFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1FBRTlDLGVBQU4sMkJBQVE7NkJBQ1QsV0FBVyxTQUFPOztBQUM1QixhQUFLLFlBQVk7QUFDakIsYUFBSyxVQUFVOzs7O1VBR2pCLEtBQUE7aUJBQUEsd0JBQWU7QUFDYixtQkFBTyxLQUFLOzs7O1VBR2QsS0FBQTtpQkFBQSxzQkFBYTtBQUNYLG1CQUFPLEtBQUs7Ozs7VUFHZCxLQUFBO2lCQUFBLGVBQU0sUUFBK0I7Z0JBQXZCLE9BQUksVUFBQSxTQUFBLEtBQUEsVUFBQSxPQUFBLFNBQUEsVUFBQSxLQUFHLEtBQUs7QUFDeEIsZ0JBQU0sUUFBUSxPQUFLLFFBQUMscUJBQXFCLFFBQVEsS0FBSyxVQUNoRCxXQUFXLE1BQ1gsV0FBVyxLQUFLLE1BQU0sT0FBTyxXQUM3QixPQUFPO0FBRWIsbUJBQU87Ozs7O1VBR0YsS0FBQTtpQkFBUCxxQkFBbUIsT0FBTztBQUN4QixnQkFBUSxNQUFRLE1BQVIsS0FDRixRQUFLLElBQUcsU0FBWSxhQUFDLE1BQ3JCLFNBQU0sSUFBRyxTQUFlLGdCQUFDLE9BQU87QUFFdEMsbUJBQU87Ozs7VUFHRixLQUFBO2lCQUFQLGlCQUFlLE9BQU8sS0FBSztBQUN6QixnQkFBTSxRQUFLLElBQUcsU0FBWSxhQUFDLE1BQ3JCLFNBQU0sSUFBRyxTQUFlLGdCQUFDLE9BQU87QUFFdEMsbUJBQU87Ozs7VUFHRixLQUFBO2lCQUFQLG1CQUFpQixPQUFPLE9BQU87QUFDN0IsZ0JBQU0sU0FBTSxJQUFHLFNBQWUsZ0JBQUMsT0FBTztBQUV0QyxtQkFBTzs7Ozs7O3NCQXpDVTs7OztBQ05yQjs7Ozs7O0FBRWdCLFFBQUEsT0FBTyx1QkFBQTtBQUNFLFFBQUEsVUFBa0IsdUJBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7UUFFdEIsY0FBTix5QkFBUSxjQUFBOzs7OEJBQVM7Ozs7OztVQUd2QixLQUFBO2lCQUFQLHVCQUFxQjtBQUFFLG1CQUFPLFFBQVksUUFBQyxZQUFZOzs7O1VBRWhELEtBQUE7aUJBQVAsaUJBQWUsS0FBSztBQUFFLG1CQUFPLFFBQVksUUFBQyxRQUFRLGNBQWE7Ozs7VUFFeEQsS0FBQTtpQkFBUCxtQkFBaUIsT0FBTztBQUFFLG1CQUFPLFFBQVksUUFBQyxVQUFVLGNBQWE7Ozs7O01BUDlCLFFBQVk7c0JBQWhDO29CQUFBLGFBQ1osT0FBTSxLQUFHOzs7O0FDTmxCOzs7Ozs7QUFFeUIsUUFBQSxZQUEwQix1QkFBQTtBQUN6QixRQUFBLGFBQTJCLHVCQUFBO0FBQ3RCLFFBQUEsa0JBQWdDLHVCQUFBO0FBQzdCLFFBQUEscUJBQW1DLHVCQUFBO0FBQ2hDLFFBQUEsd0JBQXNDLHVCQUFBO0FBQ2xELFFBQUEsWUFBNkIsdUJBQUE7QUFDekIsUUFBQSxnQkFBaUMsdUJBQUE7QUFDOUIsUUFBQSxtQkFBb0MsdUJBQUE7QUFDckMsUUFBQSxrQkFBbUMsdUJBQUE7QUFDbEMsUUFBQSxtQkFBb0MsdUJBQUE7QUFDdEMsUUFBQSxpQkFBa0MsdUJBQUE7Ozs7OzttQkFFakQ7TUFDYixjQUFBLFVBQVk7TUFDWixlQUFBLFdBQWE7TUFDYixvQkFBQSxnQkFBa0I7TUFDbEIsdUJBQUEsbUJBQXFCO01BQ3JCLDBCQUFBLHNCQUF3QjtNQUN4QixjQUFBLFVBQVk7TUFDWixrQkFBQSxjQUFnQjtNQUNoQixxQkFBQSxpQkFBbUI7TUFDbkIsb0JBQUEsZ0JBQWtCO01BQ2xCLHFCQUFBLGlCQUFtQjtNQUNuQixtQkFBQSxlQUFpQjs7Ozs7O0FDekJuQjs7Ozs7bUNBRW9CLGFBQVM7Ozt1QkFBcEI7OzttQ0FDVyxlQUFXOzs7d0JBQXRCOzs7bUNBQ1csZ0JBQVk7Ozt3QkFBdkI7OzttQ0FFVyxRQUFJOzs7cUJBQWY7OzttQ0FDVyxTQUFLOzs7c0JBQWhCOzs7bUNBQ1csYUFBUzs7OzBCQUFwQjs7O21DQUNXLGNBQVU7OzsyQkFBckI7OzttQ0FDVyxnQkFBWTs7O3lCQUF2Qjs7O21DQUNXLG1CQUFlOzs7NEJBQTFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ1hUOzs7Ozs7QUFFQSxRQUFNLE1BQU87bUJBa0lFOzs7OztBQ3BJZjs7Ozs7O0FBRTZCLFFBQUEsZ0JBQWU7QUFFNUIsUUFBQSxPQUFPLHVCQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1FBRUYsWUFBTix5QkFBUSxjQUFBOzs7NEJBQU87Ozs7OztVQUdyQixLQUFBO2lCQUFQLHVCQUFxQjtBQUFFLG1CQUFPLGNBQVksYUFBQyxZQUFZOzs7O1VBRWhELEtBQUE7aUJBQVAsaUJBQWUsS0FBSztBQUFFLG1CQUFPLGNBQVksYUFBQyxRQUFRLFlBQVc7Ozs7VUFFdEQsS0FBQTtpQkFBUCxtQkFBaUIsT0FBTztBQUFFLG1CQUFPLGNBQVksYUFBQyxVQUFVLFlBQVc7Ozs7O01BUDlCLGNBQVk7b0JBQTlCLFdBQ1osT0FBTSxLQUFHO3NCQURHOzs7O0FDTnJCOzs7OztZQU1nQixPQUFBO1lBZ0JBLFdBQUE7O0FBcEJlLFFBQUEsYUFBVztBQUVuQyxRQUFRLFFBQThDLFdBQWMsZUFBNUQ7QUFBUixRQUFlLE9BQXVDLFdBQWMsZUFBckQ7QUFBZixRQUFxQixTQUFpQyxXQUFjLGVBQS9DO0FBQXJCLFFBQTZCLFFBQXlCLFdBQWMsZUFBdkM7QUFBN0IsUUFBb0MsU0FBa0IsV0FBYyxlQUFoQztBQUFwQyxRQUE0QyxRQUFVLFdBQWMsZUFBeEI7WUFBcEMsUUFBQTtZQUFPLE9BQUE7WUFBTSxTQUFBO1lBQVEsUUFBQTtZQUFPLFNBQUE7WUFBUSxRQUFBO2tCQUU5QixPQUFPLFlBQVksVUFBVTtBQUNoRCxVQUFJLE9BQ0E7QUFFSixVQUFJLGFBQWEsVUFBVTtBQUN6QixnQkFBUSxXQUFXO0FBRW5CLGNBQU0sT0FBTzs7QUFHZixjQUFRO0FBQ1Isb0JBQWM7QUFFZCxZQUFNLE9BQU8sT0FBTzs7c0JBR0csT0FBb0I7QUFBYixlQUFBLE9BQUEsVUFBQSxRQUFHLFdBQUgsSUFBVyxNQUFYLE9BQUEsSUFBQSxPQUFBLElBQVcsSUFBWCxPQUFBLEdBQUEsT0FBQSxNQUFBLFFBQUE7QUFBRyxpQkFBSCxPQUFBLEtBQUEsVUFBQTs7QUFDOUIsYUFBTyxTQUFTLEtBQUssU0FBQyxTQUFPO0FBQUssZUFBQSxNQUFNLFNBQVM7Ozs7OztBQ3ZCbkQ7Ozs7OztBQUUyQixRQUFBLGFBQVc7QUFFYSxRQUFBLFNBQW1COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUV0RSxRQUFRLDZCQUErQixXQUFVLFdBQXpDO1FBRWEsU0FBTiwyQkFBUTt1QkFDVCxZQUFZLFVBQVUsUUFBTTs7QUFDdEMsYUFBSyxhQUFhO0FBQ2xCLGFBQUssV0FBVztBQUNoQixhQUFLLFNBQVM7Ozs7VUFHaEIsS0FBQTtpQkFBQSxxQkFBWSxPQUFPO0FBQ2pCLGdCQUFJLEtBQUssUUFBUTtBQUNmLGtCQUFNLGNBQWMsTUFBTTtBQUUxQixrQkFBSSxjQUFjLEdBQUc7b0JBQ25CLFFBQUssTUFBQzs7bUJBRUg7a0JBQ0wsUUFBSSxLQUFDLE9BQU8sS0FBSyxZQUFZLEtBQUs7Ozs7OztVQUkvQixLQUFBO2lCQUFQLDhCQUE0QixrQkFBa0I7QUFDNUMsZ0JBQUksYUFBYSxHQUNiLFdBQVcsVUFDWCxTQUFTO0FBRWIsZ0JBQUkscUJBQXFCLE1BQU07QUFDN0Isa0JBQUkscUJBQXFCLDRCQUE0QjtBQUNuRCx5QkFBUztxQkFDSjtBQUNMLG9CQUFNLFNBQU0sNEJBQ04sVUFBVSxpQkFBaUIsTUFBTSxTQUNqQyxjQUFXLElBQUcsUUFBTSxPQUFDLFVBQ3JCLGFBQVUsSUFBRyxRQUFLLE1BQUMsVUFDbkIsY0FBVyxJQUFHLFFBQU0sT0FBQztBQUUzQixvQkFBSSxnQkFBZ0IsUUFBVztBQUM3QiwrQkFBYSxTQUFTO0FBRXRCLHNCQUFJLGVBQWUsUUFBVztBQUM1QiwrQkFBVzs7O0FBSWYsb0JBQUksZ0JBQWdCLFFBQVc7QUFDN0IsNkJBQVcsU0FBUztBQUVwQixzQkFBSSxlQUFlLFFBQVc7QUFDNUIsaUNBQWE7Ozs7O0FBTXJCLGdCQUFNLFNBQVMsSUFBSSxRQUFPLFlBQVksVUFBVTtBQUVoRCxtQkFBTzs7Ozs7O3NCQXREVTs7OztBQ1JyQjs7Ozs7O0FBRTJCLFFBQUEsYUFBVztBQUVuQixRQUFBLFVBQVUsdUJBQUE7QUFFdUMsUUFBQSxTQUFtQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUV2RixRQUFRLHFCQUF1QixXQUFVLFdBQWpDO1FBRWEsUUFBTiwyQkFBUTtzQkFDVCxXQUFXLE9BQU8sUUFBUSxVQUFXLGNBQWMsaUJBQWlCLG1CQUFpQjs7QUFDL0YsYUFBSyxZQUFZO0FBQ2pCLGFBQUssUUFBUTtBQUNiLGFBQUssU0FBUztBQUNkLGFBQUssV0FBVztBQUNoQixhQUFLLGVBQWU7QUFDcEIsYUFBSyxrQkFBa0I7QUFDdkIsYUFBSyxvQkFBb0I7Ozs7VUFHM0IsS0FBQTtpQkFBQSxpQkFBUSxNQUFtRDtnQkFBN0MsUUFBSyxVQUFBLFNBQUEsS0FBQSxVQUFBLE9BQUEsU0FBQSxVQUFBLEtBQUcsR0FBRyxlQUFZLFVBQUEsU0FBQSxLQUFBLFVBQUEsT0FBQSxTQUFBLFVBQUEsS0FBRyxLQUFLO0FBQzNDLGdCQUFNLFFBQVE7QUFFZCxpQkFBSztBQUVMLGlCQUFLLEtBQUssTUFBTSxPQUFPO0FBRXZCLGlCQUFLLE1BQU0sT0FBTyxPQUFPO0FBRXpCLG1CQUFPOzs7O1VBR1QsS0FBQTtpQkFBQSxpQkFBUTtnQkFDTixRQUFLLE1BQUMsS0FBSzs7OztVQUdiLEtBQUE7aUJBQUEsY0FBSyxNQUFNLE9BQU8sY0FBYztBQUM5QixnQkFBSSxRQUFRLGNBQWM7QUFDeEI7O0FBR0YsZ0JBQU0sbUJBQW1CLEtBQUssa0JBQ3hCLHNCQUFtQixDQUFJO0FBRTdCLGdCQUFJO0FBRUosZ0JBQUksa0JBQWtCO0FBQ3BCLGtCQUFNLGVBQWUsTUFDZixPQUFPLGFBQWE7QUFFMUIsc0JBQUssSUFBRyxRQUFRLFNBQUMsS0FBSyxPQUFPLE1BQU07O0FBR3JDLGdCQUFJLHFCQUFxQjtBQUN2QixrQkFBTSxrQkFBa0IsTUFDbEIsV0FBVyxnQkFBZ0I7QUFFakMsc0JBQUssSUFBRyxRQUFRLFNBQUMsS0FBSyxXQUFXLFVBQVU7O0FBRzdDLGdCQUFJLE9BQU87QUFDVCxrQkFBTSxtQkFBbUI7QUFFekIsbUJBQUssa0JBQWtCLEtBQUs7O0FBRzlCLGdCQUFJLEtBQUssaUJBQWlCO0FBQ3hCLGtCQUFJLHFCQUFxQjs7QUFDdkI7QUFFQSxvQkFBTSxtQkFBa0IsTUFDbEIsYUFBYSxpQkFBZ0I7QUFFbkMsMkJBQVcsUUFBUSxTQUFDLFdBQVM7QUFBSyx5QkFBTSxNQUFELEtBQUssV0FBVyxPQUFPOzs7Ozs7O1VBS3BFLEtBQUE7aUJBQUEsZUFBTSxPQUFPLE9BQU8sY0FBYztBQUNoQyxpQkFBSyxPQUFPLFlBQVksS0FBSztBQUU3QixnQkFBSSxLQUFLLGFBQWEsTUFBTTtrQkFDMUIsUUFBSSxLQUFDLE9BQU8sS0FBSzttQkFDWjs7QUFDTCxtQkFBSyxrQkFBa0IsUUFBUSxTQUFDLGtCQUFxQjtBQUNuRCxvQkFBTSxrQ0FBa0MsaUJBQWlCO0FBRXpELG9CQUFJLGlDQUFpQzs7QUFDbkM7QUFFQSxzQkFBTSxrQkFBa0Isa0JBQ2xCLGFBQWEsZ0JBQWdCO3dCQUU5QixTQUFTO0FBRWQsNkJBQVcsUUFBUSxTQUFDLFdBQVM7QUFBSywyQkFBTSxPQUFELFNBQVMsS0FBSyxXQUFXLE9BQU87O3dCQUVsRSxTQUFTLE1BQU0sT0FBTyxPQUFPOzs7Ozs7OztVQU1uQyxLQUFBO2lCQUFQLG1DQUFpQyxjQUFjLE9BQU87QUFDcEQsZ0JBQUksUUFBUTtBQUVaLGdCQUFJLGlCQUFpQixNQUFNO0FBQ3pCLGtCQUFNLGNBQWMsTUFBTTtBQUUxQixrQkFBSSxnQkFBZ0IsR0FBRztBQUNyQixvQkFBTSxhQUFhO0FBRW5CLHdCQUFRLE9BQU0sZUFBZTs7O0FBSWpDLG1CQUFPOzs7O1VBR0YsS0FBQTtpQkFBUCx3QkFBc0IsWUFBcUM7Z0JBQXpCLGVBQVksVUFBQSxTQUFBLEtBQUEsVUFBQSxPQUFBLFNBQUEsVUFBQSxLQUFHO0FBQy9DLGdCQUFNLFNBQU0sNENBQ04sVUFBVSxXQUFXLE1BQU0sU0FDM0IsY0FBVyxJQUFHLFFBQU0sT0FBQyxVQUNyQixhQUFVLElBQUcsUUFBSyxNQUFDLFVBQ25CLGNBQVcsSUFBRyxRQUFNLE9BQUMsVUFDckIsYUFBVSxJQUFHLFFBQUssTUFBQyxVQUNuQixZQUFZLFdBQVcsTUFBTSxNQUM3QixnQkFBZ0IsY0FBYyxNQUM5QixtQkFBbUIsZUFBZSxNQUNsQyxRQUFRLG1CQUFtQixZQUMzQixZQUFZLCtCQUErQixXQUFXLFFBQ3RELFNBQVMsUUFBTSxRQUFDLHFCQUFxQixtQkFDckMsV0FBVyxPQUFNLDBCQUEwQixlQUFlLFFBQzFELGtCQUFtQixnQkFBZ0IsS0FDbkMsb0JBQW9CLElBQ3BCLFFBQVEsSUFBSSxPQUFNLFdBQVcsT0FBTyxRQUFRLFVBQVUsY0FBYyxpQkFBaUI7QUFFM0YsbUJBQU87Ozs7OztzQkFoSVU7Z0NBb0lPLFdBQVc7QUFDckMsVUFBTSxRQUFRO0FBRWQsZ0JBQVUsUUFBUSxTQUFDLFVBQWE7QUFDOUIsWUFBTSx1QkFBdUIsdUJBQXVCO0FBRXBELFlBQUksc0JBQXNCO0FBQ3hCLGNBQU0sT0FBTyxTQUFTLFVBQVU7QUFFaEMsZ0JBQU0sS0FBSzs7O0FBSWYsYUFBTzs7b0NBR3VCLFVBQVU7QUFBRSxhQUFNLEtBQU0sS0FBSzs7b0NBRTdCLFdBQVc7QUFBRSxhQUFPLFVBQVUsT0FBTzs7d0NBRWpDLFVBQVU7QUFBRSxhQUFNLFFBQVMsS0FBSzs7NENBRTVCLFdBQVcsT0FBTztBQUN4RCxVQUFJLFlBQVk7QUFFaEIsVUFBTSxjQUFjLE1BQU07QUFFMUIsVUFBSSxnQkFBZ0IsR0FBRztBQUNyQixvQkFBWSx1QkFBdUI7O0FBR3JDLGFBQU87Ozs7O0FDN0tUOzs7OztZQUlnQixlQUFBO1lBZ0JBLGlCQUFBO1lBb0JBLG9CQUFBOztBQXRDRSxRQUFBLFNBQVUsdUJBQUE7Ozs7Ozs7Ozs7Ozs7MEJBRUMsTUFBTSxPQUFtQjtVQUFaLFFBQUssVUFBQSxTQUFBLEtBQUEsVUFBQSxPQUFBLFNBQUEsVUFBQSxLQUFHO0FBQ2hELFVBQUksWUFBQSxNQUFnQixRQUFPO0FBQ3pCLGNBQU0sS0FBSzs7QUFHYixVQUFNLHNCQUFzQixLQUFLO0FBRWpDLFVBQUkscUJBQXFCO0FBQ3ZCLFlBQU0sYUFBYSxLQUFLO0FBRXhCLG1CQUFXLFFBQVEsU0FBQyxXQUFTO0FBQUssaUJBQUEsYUFBYSxXQUFXLE9BQU87OztBQUduRSxhQUFPOzs0QkFHc0IsTUFBTSxTQUFxQjtVQUFaLFFBQUssVUFBQSxTQUFBLEtBQUEsVUFBQSxPQUFBLFNBQUEsVUFBQSxLQUFHO0FBQ3BELGNBQVEsS0FBSyxTQUFDLE9BQVU7QUFDdEIsWUFBSSxZQUFBLE1BQWdCLFFBQU87QUFDekIsZ0JBQU0sS0FBSztBQUVYLGlCQUFPOzs7QUFJWCxVQUFNLHNCQUFzQixLQUFLO0FBRWpDLFVBQUkscUJBQXFCO0FBQ3ZCLFlBQU0sYUFBYSxLQUFLO0FBRXhCLG1CQUFXLFFBQVEsU0FBQyxXQUFTO0FBQUssaUJBQUEsZUFBZSxXQUFXLFNBQVM7OztBQUd2RSxhQUFPOzsrQkFHeUIsTUFBTSxZQUFZLGNBQWM7QUFDaEUsVUFBTSxRQUFRLE9BQUssUUFBQyxlQUFlLFlBQVksZUFDekMsUUFBUSxNQUFNLFFBQVE7QUFFNUIsYUFBTzs7bUJBR007TUFDYjtNQUNBO01BQ0E7Ozs7OztBQ2xERjs7Ozs7bUNBRW9CLFNBQUs7OztzQkFBaEI7OzttQ0FDVyxrQkFBYzs7O3VCQUF6Qjs7Ozs7Ozs7Ozs7OztBQ0hUOzs7Ozs7QUFFTyxRQUFNLE9BQU87WUFBUCxPQUFBO0FBQ04sUUFBTSxRQUFRO1lBQVIsUUFBQTtBQUNOLFFBQU0sYUFBYTtZQUFiLGFBQUE7QUFDTixRQUFNLGFBQWE7WUFBYixhQUFBO0FBQ04sUUFBTSxjQUFjO1lBQWQsY0FBQTtBQUNOLFFBQU0sZUFBZTtZQUFmLGVBQUE7QUFDTixRQUFNLG9CQUFvQjtZQUFwQixvQkFBQTs7OztBQ1JiOzs7OztZQVFnQixnQ0FBQTtBQU5lLFFBQUEsYUFBVztBQUViLFFBQUEsYUFBYztBQUUzQyxRQUFRLFFBQVUsV0FBYyxlQUF4QjsyQ0FFc0MsT0FBTyxNQUFNLFFBQVE7QUFDakUsVUFBTSxRQUFRLE1BQU0sUUFBUSxPQUN0QixZQUFZLE1BQU07QUFFeEIsYUFBTztBQUVQLFVBQU0sVUFBVSx5QkFBeUIsTUFBTTtBQUUvQyxhQUFPOztzQ0FHeUIsTUFBTSxRQUFRO0FBQzlDLFVBQU0sd0JBQXdCLEtBQUssNEJBQzdCLHVCQUF1QixLQUFLLDJCQUM1QixhQUFhLHVCQUNiLFlBQVksc0JBQ1osa0JBQWtCLE9BQU8sUUFBUSxhQUNqQyxpQkFBaUIsT0FBTyxRQUFRO0FBRXRDLFVBQUksVUFBVSxXQUFZO0FBRTFCLGVBQVMsUUFBUSxpQkFBaUIsU0FBUyxnQkFBZ0IsU0FBUztBQUNsRSxZQUFNLFFBQVEsT0FBTyxRQUNmLGVBQWUsTUFBTTtBQUUzQixtQkFBVzs7QUFHYixhQUFPOzs7OztBQ3BDVDs7Ozs7O0FBRXNCLFFBQUEsWUFBVztBQUVhLFFBQUEsV0FBc0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRXBFLFFBQU0sZ0JBQWdCLFVBQUssTUFBQyxlQUFlO0FBQTNDLFFBQ00sa0JBQWtCLFVBQUssTUFBQyxlQUFlO1FBRXhCLGNBQU4sMkJBQVE7NEJBQ1QsVUFBVSxZQUFVOztBQUM5QixhQUFLLFdBQVc7QUFDaEIsYUFBSyxhQUFhOzs7O1VBR3BCLEtBQUE7aUJBQUEsdUJBQWM7QUFDWixtQkFBTyxLQUFLOzs7O1VBR2QsS0FBQTtpQkFBQSx5QkFBZ0I7QUFDZCxtQkFBTyxLQUFLOzs7O1VBR2QsS0FBQTtpQkFBQSxzQkFBYSxjQUFjOztBQUN6QixnQkFBTSxVQUFVLGFBQWEsS0FBSyxTQUFDLGFBQWdCO0FBQ2pELGtCQUFNLFdBQVcsWUFBWSxlQUN2QixrQkFBbUIsYUFBUSxNQUFVO0FBRTNDLGtCQUFJLGlCQUFpQjtBQUNuQix1QkFBTzs7O0FBSVgsbUJBQU87Ozs7VUFHVCxLQUFBO2lCQUFBLGVBQU0sUUFBUSxNQUFNO0FBQ2xCLGdCQUFNLE1BQU0sT0FDQyxHQUFXLE9BQVQsUUFBMkIsT0FBbEIsS0FBSyxVQUFTLE1BQW9CLE9BQWhCLEtBQUssWUFBVyxPQUMzQyxHQUFXLE9BQVQsUUFBMkIsT0FBbEIsS0FBSyxVQUFTLE1BQW9CLE9BQWhCLEtBQUssWUFBVztBQUU1RCxtQkFBTzs7Ozs7VUFHRixLQUFBO2lCQUFQLDJCQUF5QixNQUFNLFFBQVE7QUFDckMsZ0JBQU0sa0JBQWUsSUFBRyxVQUE2Qiw4QkFBQyxlQUFlLE1BQU0sU0FDckUsb0JBQWlCLElBQUcsVUFBNkIsOEJBQUMsaUJBQWlCLE1BQU0sU0FDekUsV0FBVyxpQkFDWCxhQUFhLG1CQUNiLGNBQWMsSUFBSSxhQUFZLFVBQVU7QUFFOUMsbUJBQU87Ozs7OztzQkExQ1U7Ozs7QUNUckI7Ozs7OztBQUVzQixRQUFBLFlBQVc7QUFFVCxRQUFBLGVBQWUsdUJBQUE7QUFFVixRQUFBLGFBQWM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFM0MsUUFBTSxtQkFBbUIsVUFBSyxNQUFDLGVBQWU7UUFFekIsZUFBTiwyQkFBUTs2QkFDVCxPQUFLOztBQUNmLGFBQUssUUFBUTs7OztVQUdmLEtBQUE7aUJBQUEseUJBQWdCLFVBQVU7QUFDeEIsZ0JBQU0sU0FBUyxLQUFLLE1BQU0sUUFDcEIsYUFBYSxHQUNiLFlBQVksU0FBUztBQUUzQixxQkFBUyxRQUFRLFlBQVksU0FBUyxXQUFXLFNBQVM7QUFDeEQsa0JBQU0sY0FBYyxLQUFLLE1BQU07QUFFL0IsdUJBQVMsYUFBYTs7Ozs7VUFJMUIsS0FBQTtpQkFBQSwwQkFBaUIsVUFBVTtBQUN6QixnQkFBTSxTQUFTLEtBQUssTUFBTSxRQUNwQixhQUFhLEdBQ2IsWUFBWSxTQUFTO0FBRTNCLHFCQUFTLFFBQVEsV0FBVyxTQUFTLFlBQVksU0FBUztBQUN4RCxrQkFBTSxjQUFjLEtBQUssTUFBTTtBQUUvQix1QkFBUyxhQUFhOzs7OztVQUkxQixLQUFBO2lCQUFBLGlCQUFRLGNBQWM7O0FBQ3BCLHlCQUFhLGlCQUFpQixTQUFDLGFBQWdCO0FBQzdDLGtCQUFNLFVBQVUsWUFBWSxhQUFZLE1BQU07QUFFOUMsa0JBQUUsQ0FBRyxTQUFTO3NCQUNQLE1BQU0sUUFBUTs7Ozs7O1VBS3pCLEtBQUE7aUJBQUEsZUFBTSxXQUFXLFFBQVE7QUFDdkIsZ0JBQUksV0FBVyxRQUFXO0FBQ3hCLHVCQUFTO0FBRVQsMEJBQVk7O0FBR2QsZ0JBQUksTUFBTSxXQUFZO0FBRXRCLGdCQUFNLFNBQVMsS0FBSyxNQUFNO0FBRTFCLGdCQUFJLFNBQVMsR0FBRztBQUNkLGtCQUFNLFlBQVksU0FBUyxHQUNyQixtQkFBa0IsS0FBSyxNQUFNLE9BQU8sU0FBQyxpQkFBaUIsYUFBYSxPQUFVO0FBQzNFLG9CQUFNLE9BQVEsVUFBVSxXQUNsQixpQkFBaUIsWUFBWSxNQUFNLFFBQVE7QUFFakQsbUNBQW1CO0FBRW5CLHVCQUFPO2lCQUNOLFdBQVk7QUFFckIsa0JBQUksY0FBYyxNQUFNO0FBQ3RCLHNCQUFNO3FCQUNEO0FBQ0wsc0JBQU8sSUFDYixPQURnQixXQUFVLFFBQ1YsT0FBaEIsa0JBQWdCOzs7QUFPZCxtQkFBTzs7Ozs7VUFHRixLQUFBO2lCQUFQLDJCQUF5QixPQUFNLFFBQVE7QUFDckMsZ0JBQU0sbUJBQW1CLGlCQUFpQixRQUFRLFFBQzVDLFFBQVEsaUJBQWlCLElBQUksU0FBQyxpQkFBb0I7QUFDaEQsa0JBQU0sT0FBTyxpQkFDUCxjQUFjLGFBQVcsUUFBQyxrQkFBa0IsTUFBTTtBQUV4RCxxQkFBTztnQkFFVCxlQUFlLElBQUksY0FBYTtBQUV0QyxtQkFBTzs7Ozs7O3NCQXJGVTs7OztBQ1ZyQjs7Ozs7O0FBRXNCLFFBQUEsWUFBVztBQUVSLFFBQUEsZ0JBQWdCLHVCQUFBO0FBRVosUUFBQSxhQUFjO0FBQ0csUUFBQSxXQUFzQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVwRSxRQUFNLGlCQUFpQixVQUFLLE1BQUMsZUFBZTtRQUV2QixVQUFOLDJCQUFRO3dCQUNULFdBQVcsY0FBWTs7QUFDakMsYUFBSyxZQUFZO0FBQ2pCLGFBQUssZUFBZTs7OztVQUd0QixLQUFBO2lCQUFBLHdCQUFlO0FBQ2IsbUJBQU8sS0FBSzs7OztVQUdkLEtBQUE7aUJBQUEsMkJBQWtCO0FBQ2hCLG1CQUFPLEtBQUs7Ozs7VUFHZCxLQUFBO2lCQUFBLGlCQUFRLFNBQVM7QUFDZixnQkFBTSxlQUFlLFFBQVE7QUFFN0IsaUJBQUssYUFBYSxRQUFROzs7O1VBRzVCLEtBQUE7aUJBQUEsNkJBQW9CLFVBQVU7O0FBQzVCLGdCQUFNLGtCQUFrQixTQUFTLEtBQUssU0FBQyxTQUFZO0FBQ2pELGtCQUFNLFlBQVksUUFBUSxnQkFDcEIsaUJBQWtCLGNBQVMsTUFBVSxXQUNyQyxnQkFBZ0I7QUFFdEIsa0JBQUksZUFBZTtBQUNqQix1QkFBTzs7a0JBRUw7QUFFTixtQkFBTzs7OztVQUdULEtBQUE7aUJBQUEsZUFBTSxXQUFXLFFBQVE7QUFDdkIsZ0JBQUksTUFBTSxXQUFZO0FBRXRCLGdCQUFNLGtCQUFrQixLQUFLLGFBQWEsTUFBTyxLQUFXLE9BQVA7QUFFckQsZ0JBQUksb0JBQW9CLFdBQVksY0FBRTtBQUNuQyxvQkFBTyxHQUFZLE9BQVYsUUFBTyxLQUFlLE9BQVosV0FDeEIsT0FEb0MsS0FBSyxXQUFVLFFBRW5ELE9BREEsaUJBQWdCLE1BQ1QsT0FBUCxRQUFPOztBQUtMLG1CQUFPOzs7OztVQUdGLEtBQUE7aUJBQVAsMkJBQXlCLE1BQU0sUUFBUTtBQUNyQyxnQkFBTSxZQUFZLDJCQUEyQixNQUFNLFNBQzdDLGVBQWUsY0FBWSxRQUFDLGtCQUFrQixNQUFNLFNBQ3BELFFBQVEsSUFBSSxTQUFRLFdBQVc7QUFFckMsbUJBQU87Ozs7OztzQkF2RFU7d0NBMkRlLE1BQU0sUUFBUTtBQUNoRCxVQUFNLHVCQUFvQixJQUFHLFVBQTZCLDhCQUFDLGdCQUFnQixNQUFNLFNBQzNFLFlBQWEsR0FBdUIsT0FBckI7QUFFckIsYUFBTzs7Ozs7QUMxRVQ7Ozs7OztBQUVzQixRQUFBLFlBQVc7QUFFYixRQUFBLFdBQVcsdUJBQUE7QUFFRixRQUFBLGFBQWM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFM0MsUUFBTSxlQUFlLFVBQUssTUFBQyxlQUFlO1FBRXJCLFdBQU4sMkJBQVE7eUJBQ1QsT0FBSzs7QUFDZixhQUFLLFFBQVE7Ozs7VUFHZixLQUFBO2lCQUFBLGlCQUFRLFVBQVU7O0FBQ2hCLHFCQUFTLFFBQVEsU0FBQyxTQUFZO0FBQzVCLGtCQUFNLGtCQUFrQixRQUFRLG9CQUFtQixNQUFNO0FBRXhELGtDQUFvQixPQUFJLE1BQ2xCLE1BQU0sUUFBUSxXQUNqQixnQkFBZ0IsUUFBUTs7Ozs7VUFJaEMsS0FBQTtpQkFBQSxpQkFBUSxVQUFVO0FBQ2hCLGlCQUFLLE1BQU0sUUFBUTs7OztVQUdyQixLQUFBO2lCQUFBLGVBQU0sV0FBVyxRQUFRO0FBQ3ZCLGdCQUFNLE9BQU0sS0FBSyxNQUFNLE9BQU8sU0FBQyxLQUFLLFNBQVk7QUFDOUMsa0JBQU0sYUFBYSxRQUFRLE1BQU0sV0FBVztBQUU1QyxxQkFBTztBQUVQLHFCQUFPO2VBQ04sV0FBWTtBQUVmLG1CQUFPOzs7OztVQUdGLEtBQUE7aUJBQVAsMkJBQXlCLE9BQU0sUUFBUTtBQUNyQyxnQkFBTSxlQUFlLGFBQWEsUUFBUSxRQUNwQyxRQUFRLGFBQWEsSUFBSSxTQUFDLGFBQWdCO0FBQ3hDLGtCQUFNLE9BQU8sYUFDUCxVQUFVLFNBQU8sUUFBQyxrQkFBa0IsTUFBTTtBQUVoRCxxQkFBTztnQkFFVCxXQUFXLElBQUksVUFBUztBQUU5QixtQkFBTzs7Ozs7O3NCQXpDVTs7OztBQ1ZyQjs7Ozs7O0FBRXNCLFFBQUEsWUFBVztBQUVaLFFBQUEsWUFBWSx1QkFBQTtBQUNSLFFBQUEsZ0JBQWdCLHVCQUFBO0FBRUQsUUFBQSxhQUFjO0FBQ1IsUUFBQSxXQUFzQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVwRSxRQUFNLG9CQUFvQixVQUFLLE1BQUMsZUFBZTtRQUUxQixRQUFOLDJCQUFRO3NCQUNULGNBQWMsY0FBYyxVQUFROztBQUM5QyxhQUFLLGVBQWU7QUFDcEIsYUFBSyxlQUFlO0FBQ3BCLGFBQUssV0FBVzs7OztVQUdsQixLQUFBO2lCQUFBLDJCQUFrQjtBQUNoQixtQkFBTyxLQUFLOzs7O1VBR2QsS0FBQTtpQkFBQSwyQkFBa0I7QUFDaEIsbUJBQU8sS0FBSzs7OztVQUdkLEtBQUE7aUJBQUEsdUJBQWM7QUFDWixtQkFBTyxLQUFLOzs7O1VBR2QsS0FBQTtpQkFBQSxlQUFNLFdBQVc7QUFDZixnQkFBSSxNQUFNO0FBRVYsZ0JBQU0sY0FBYyxLQUFLLFNBQVMsTUFBTSxXQUFXLFdBQVUsYUFDdkQsa0JBQWtCLEtBQUssYUFBYSxNQUFNLFdBQVcsV0FBVztBQUV0RSxnQkFBSyxnQkFBZ0IsUUFBVSxvQkFBb0IsTUFBTztBQUN4RCxvQkFBTyxVQUNYLE9BRG9CLEtBQUssY0FBYSxRQUNwQixPQUFsQixpQkFBOEIsT0FBWixhQUFZOztBQU01QixtQkFBTzs7Ozs7VUFHRixLQUFBO2lCQUFQLDJCQUF5QixNQUFNLFFBQVE7QUFDckMsZ0JBQU0sZUFBZSw4QkFBOEIsTUFBTSxTQUNuRCxlQUFlLGNBQVksUUFBQyxrQkFBa0IsTUFBTSxTQUNwRCxXQUFXLFVBQVEsUUFBQyxrQkFBa0IsTUFBTSxTQUM1QyxRQUFRLElBQUksT0FBTSxjQUFjLGNBQWM7QUFFcEQsbUJBQU87Ozs7OztzQkExQ1U7MkNBOENrQixNQUFNLFFBQVE7QUFDbkQsVUFBTSwwQkFBdUIsSUFBRyxVQUE2Qiw4QkFBQyxtQkFBbUIsTUFBTSxTQUNqRixlQUFnQixHQUEwQixPQUF4QjtBQUV4QixhQUFPOzs7OztBQzlEVDs7Ozs7O0FBRXNCLFFBQUEsWUFBVztBQUVmLFFBQUEsU0FBUyx1QkFBQTtBQUVFLFFBQUEsYUFBYzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUUzQyxRQUFNLGFBQWEsVUFBSyxNQUFDLGVBQWU7UUFFbkIsU0FBTiwyQkFBUTt1QkFDVCxPQUFLOztBQUNmLGFBQUssUUFBUTs7OztVQUdmLEtBQUE7aUJBQUEsaUJBQVEsUUFBUTs7QUFDZCxtQkFBTyxRQUFRLFNBQUMsT0FBVTtvQkFDbkIsTUFBTSxRQUFROzs7OztVQUl2QixLQUFBO2lCQUFBLGlCQUFRLFVBQVU7QUFDaEIsaUJBQUssTUFBTSxRQUFROzs7O1VBR3JCLEtBQUE7aUJBQUEsZUFBTSxXQUFXO0FBQ2YsZ0JBQU0sT0FBTSxLQUFLLE1BQU0sT0FBTyxTQUFDLEtBQUssT0FBVTtBQUM1QyxrQkFBTSxXQUFXLE1BQU0sTUFBTTtBQUU3QixxQkFBTztBQUVQLHFCQUFPO2VBQ04sV0FBWTtBQUVmLG1CQUFPOzs7OztVQUdGLEtBQUE7aUJBQVAsMkJBQXlCLE9BQU0sUUFBUTtBQUNyQyxnQkFBTSxhQUFhLFdBQVcsUUFBUSxRQUNoQyxRQUFRLFdBQVcsSUFBSSxTQUFDLFdBQWM7QUFDcEMsa0JBQU0sT0FBTyxXQUNQLFFBQVEsT0FBSyxRQUFDLGtCQUFrQixNQUFNO0FBRTVDLHFCQUFPO2dCQUVULFNBQVMsSUFBSSxRQUFPO0FBRTFCLG1CQUFPOzs7Ozs7c0JBckNVOzs7O0FDVnJCOzs7Ozs7QUFFbUIsUUFBQSxVQUFnQix1QkFBQTtBQUNkLFFBQUEsWUFBa0IsdUJBQUE7QUFDZCxRQUFBLGdCQUFzQix1QkFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztRQUUxQixRQUFOLDJCQUFRO3NCQUNULGNBQWMsVUFBVSxRQUFNOztBQUN4QyxhQUFLLGVBQWU7QUFDcEIsYUFBSyxXQUFXO0FBQ2hCLGFBQUssU0FBUzs7OztVQUdoQixLQUFBO2lCQUFBLDJCQUFrQjtBQUNoQixtQkFBTyxLQUFLOzs7O1VBR2QsS0FBQTtpQkFBQSx1QkFBYztBQUNaLG1CQUFPLEtBQUs7Ozs7VUFHZCxLQUFBO2lCQUFBLHFCQUFZO0FBQ1YsbUJBQU8sS0FBSzs7OztVQUdkLEtBQUE7aUJBQUEsa0JBQVEsYUFBWTtBQUNsQixnQkFBTSxlQUFlLFlBQVcsbUJBQzFCLFdBQVcsWUFBVyxlQUN0QixTQUFTLFlBQVc7QUFFMUIsaUJBQUssUUFBUSxjQUFjLFVBQVU7Ozs7VUFHdkMsS0FBQTtpQkFBQSxpQkFBUSxjQUFjLFVBQVUsUUFBUTtBQUN0QyxpQkFBSyxhQUFhLFFBQVE7QUFDMUIsaUJBQUssU0FBUyxRQUFRO0FBQ3RCLGlCQUFLLE9BQU8sUUFBUTs7OztVQUd0QixLQUFBO2lCQUFBLGVBQU0sV0FBVztBQUNmLGdCQUFNLGtCQUFrQixLQUFLLGFBQWEsTUFBTSxXQUFXLE9BQ3JELGNBQWMsS0FBSyxTQUFTLE1BQU0sV0FBVyxLQUM3QyxZQUFZLEtBQUssT0FBTyxNQUFNLFlBQzlCLE1BQU8sR0FBb0IsT0FBbEIsaUJBQWdDLE9BQWQsYUFBd0IsT0FBVjtBQUUvQyxtQkFBTzs7Ozs7VUFHRixLQUFBO2lCQUFQLDJCQUF5QixNQUFNLFFBQVE7QUFDckMsZ0JBQU0sZUFBZSxjQUFZLFFBQUMsa0JBQWtCLE1BQU0sU0FDcEQsV0FBVyxVQUFRLFFBQUMsa0JBQWtCLE1BQU0sU0FDNUMsU0FBUyxRQUFNLFFBQUMsa0JBQWtCLE1BQU0sU0FDeEMsUUFBUSxJQUFJLE9BQU0sY0FBYyxVQUFVO0FBRWhELG1CQUFPOzs7Ozs7c0JBaERVOzs7O0FDTnJCOzs7Ozs7QUFFa0IsUUFBQSxTQUFVLHVCQUFBO0FBQ1AsUUFBQSxTQUFjLHVCQUFBO0FBQ2IsUUFBQSxVQUFlLHVCQUFBO0FBRUssUUFBQSxhQUFjOzs7Ozs7QUFFeEQsUUFBTSxXQUFXLE9BQVEsUUFBQztBQUExQixRQUNNLFlBQVksUUFBUyxRQUFDO0FBRTVCLFFBQUUsQ0FBRyxXQUFXLFVBQVU7QUFDeEIsaUJBQVcsV0FBVzs7QUFHeEIsUUFBUSxXQUFhLFdBQWI7eUJBRWEsT0FBTztBQUMxQixVQUFNLGlCQUFpQixTQUFTLGNBQWMsV0FBSSxPQUM1QyxrQkFBa0IsU0FBUyxjQUFjLFdBQUssUUFDOUMsWUFBYSxlQUViLE9BQU47QUFFQSxhQUFPLE9BQU8saUJBQWlCO1FBQzdCOztBQUdGLHFCQUFlLFlBQVk7OzZCQUdMO0FBQ3RCLFVBQU0sWUFBWSxxQkFDWixRQUFRO0FBRWQsa0JBQVk7OzRCQUdTLE1BQU0sV0FBOEI7VUFBbkIsY0FBVSxVQUFBLFNBQUEsS0FBQSxVQUFBLE9BQUEsU0FBQSxVQUFBLEtBQUc7QUFDbkQsVUFBTSxVQUFVLEtBQUssU0FDZixXQUFVLFFBQVEsT0FBTyxTQUFDLFNBQVMsUUFBUSxPQUFVO0FBQ25ELFlBQU0sTUFBTSxLQUFLO0FBRWpCLGtCQUFXLFFBQVEsU0FDTixHQUFZLE9BQVYsU0FBbUIsT0FBVCxRQUFhLE9BQUosT0FDbkIsR0FBWSxPQUFWLFNBQWlCLE9BQVA7QUFFM0IsZUFBTztTQUNOLFdBQVksZUFDZixTQUFTLFNBQVMsU0FBUyxXQUMzQixPQUFPLFVBQVUsTUFBTSxTQUN2QixRQUFRLE9BQUssUUFBQyxrQkFBa0IsTUFBTTtBQUV0QyxVQUFJLGdCQUFlLE1BQU07QUFDdkIsY0FBTSxRQUFROztBQUdoQixlQUFTLGFBQWE7OzRCQUdQLFdBQVc7QUFDaEMsVUFBTSxRQUFRLFNBQVMsY0FBYztBQUVyQyxhQUFPOzttQkFHTTtNQUNiO01BQ0EsY0FBQTtNQUNBLGVBQUE7TUFDQSxlQUFBOzs7aUNBRzJCO0FBQzNCLFVBQU0sYUFBYSxPQUFPLEtBQUssV0FDekIsYUFBWSxXQUFXLE9BQU8sU0FBQyxXQUFXLFdBQWM7QUFDdEQsWUFBTSxRQUFRLGVBQWMsWUFDdEIsV0FBVyxNQUFNLE1BQU07QUFFN0IscUJBQWE7QUFFYixlQUFPO1NBQ04sV0FBWTtBQUVyQixhQUFPOzs7OztBQ3BGVDs7Ozs7WUFVZ0Isb0JBQUE7WUFxQkEsb0JBQUE7O0FBN0I0QyxRQUFBLGFBQWM7QUFFMUUsUUFBTSxTQUFTLFdBQWlCO0FBQWhDLFFBQ00sYUFBYSxXQUFVO0FBRDdCLFFBRU0sbUJBQW1CLFdBQVc7QUFFcEMsUUFBTSxhQUFhO2lDQUVpQjtBQUNsQyxVQUFJLFlBQVksV0FBWTtBQUU1QixlQUFTLFFBQVEsR0FBRyxRQUFRLFFBQVEsU0FBUztBQUMzQyxZQUFNLFFBQVEsS0FBSyxNQUFNLEtBQUssV0FBVyxtQkFDbkMsWUFBWSxXQUFXO0FBRTdCLHFCQUFhOztBQUdmLFVBQU0sOEJBQThCLFdBQVcsU0FBUztBQUV4RCxVQUFFLENBQUcsNkJBQTZCO0FBQ2hDLG1CQUFXLEtBQUs7YUFDWDtBQUNMLG9CQUFZOztBQUdkLGFBQU87OytCQUd5QixTQUFTO0FBQ3pDLFVBQVEsWUFBYyxTQUFRLGlCQUFpQixRQUFRLGVBQWUsYUFBOUQ7QUFFUixhQUFPOzttQkFHTTtNQUNiO01BQ0E7Ozs7OztBQ3ZDRjs7Ozs7bUNBRW9CLFlBQVE7Ozt5QkFBbkI7OzttQ0FDVyxZQUFROzs7c0JBQW5COzs7bUNBQ1csYUFBUzs7O3VCQUFwQjs7O21DQUNXLG1CQUFlOzs7dUJBQTFCOzs7bUNBQ1csc0JBQWtCOzs7MEJBQTdCOzs7Ozs7Ozs7Ozs7Ozs7O0FDTlQ7QUFFZ0MsTUFBQSxTQUFTO0FBRXpDLE1BQVEsZ0JBQStDLE9BQWUsZ0JBQTlEO0FBQVIsTUFBdUIsZ0JBQWdDLE9BQWUsZ0JBQS9DO0FBQXZCLE1BQXNDLGVBQWlCLE9BQWUsZ0JBQWhDO0FBRXRDLE1BQU0sb0JBQXFCO0FBVTNCLE1BQU0scUJBQXNCO0FBUTVCLGdCQUFjO0lBQUM7TUFBRTs7S0FRWjtBQUVMLE1BQU0sYUFBYSxjQUFjO0FBRWpDLGdCQUFjO0lBQUM7TUFBRSw4V0F1QlgsT0FKRixvQkFBbUIsOEJBSUMsT0FBbEIsbUJBQWtCOztLQUluQixPQUFPO0FBRVo7IiwKICAibmFtZXMiOiBbXQp9Cg==
21759
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL3RhZ05hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2xldmVscy5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9tZXRob2RzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2hlYWRlcnMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMva2V5Q29kZXMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvZW5jb2RpbmdzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2NoYXJhY3RlcnMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvc3RhdHVzQ29kZXMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvY29udGVudFR5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL3N0YXR1c01lc3NhZ2VzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL3V0aWxpdGllcy9hcnJheS5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL2h0dHAuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL2FqYXguanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL3BhdGguanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL2FzeW5jaHJvbm91cy5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9icm93c2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3V0aWxpdGllcy9jb250ZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3R5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL3Rva2VuLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvbGliL3Rva2VuL3NpZ25pZmljYW50LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9ydWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3NwZWNpYWxTeW1ib2xzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL2JuZi9lbnRyaWVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3V0aWxpdGllcy90b2tlbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9jb21tb24vbGV4ZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvd2hpdGVzcGFjZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9zaWduaWZpY2FudC9yZWd1bGFyRXhwcmVzc2lvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9lbmRPZkxpbmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsL2RvdWJseVF1b3RlZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9ibmYvbGV4ZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvYmFzaWMvZW50cmllcy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsL3NpbmdseVF1b3RlZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lL3B5dGhvblN0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mL3B5dGhvblN0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2YuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZi9weXRob25TdHlsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZi9weXRob25TdHlsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9iYXNpYy9sZXhlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9zaWduaWZpY2FudC9lbmRPZkxpbmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQvY29tbWVudC9lbmRPZkxpbmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lL2NTdHlsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZi9jU3R5bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZi9jU3R5bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvbWlkZGxlT2YvY1N0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL2luZGV4LmpzIiwgInNyYy9jc3MvZW50cmllcy5qcyIsICJzcmMvY3NzL2xleGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ibmYvYm5mLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3V0aWxpdGllcy9zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmF1bHRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvdXRpbGl0aWVzL2FycmF5LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJzZVRyZWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3BhcnNlVHJlZS92ZXJ0aWNhbEJyYW5jaC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFyc2VUcmVlL3J1bGVOYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJzZVRyZWUvaG9yaXpvbnRhbEJyYW5jaC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFyc2VUcmVlL2NoaWxkTm9kZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnNlVHJlZS9ub25UZXJtaW5hbE5vZGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvbm9uVGVybWluYWwuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL25hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3V0aWxpdGllcy9wYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy91dGlsaXRpZXMvbG9va0FoZWFkLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0L3Rlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJzZVRyZWUvdGVybWluYWxOb2RlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL3Rlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0L3Rlcm1pbmFsL3NpZ25pZmljYW50VG9rZW5UeXBlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL25hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGVOYW1lcy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0L25vblRlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0VHlwZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3BhcnQvbm9uVGVybWluYWwvb3B0aW9uYWxQYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0L25vblRlcm1pbmFsL2NvbGxlY3Rpb25PZlBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L25vblRlcm1pbmFsL29uZU9yTW9yZVBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L25vblRlcm1pbmFsL3plcm9Pck1vcmVQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvdXRpbGl0aWVzL2JuZi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvcGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9ydWxlTmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9wYXJ0UnVsZS90ZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9wYXJ0UnVsZS9ub25UZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9wYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9ydWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3J1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvcnVsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvZXJyb3IuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvdGVybWluYWwvd2lsZGNhcmQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vZXJyb3IuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvZXJyb3IuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL2RvY3VtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL2xpYi9wYXJ0L25vblRlcm1pbmFsL2Nob2ljZU9mUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vZG9jdW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvZG9jdW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL3J1bGVOYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL3J1bGVOYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi93aWxkY2FyZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi90ZXJtaW5hbFN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS93aWxkY2FyZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFyc2VUcmVlL2VuZE9mTGluZU5vZGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvdGVybWluYWwvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L3Rlcm1pbmFsL2VuZE9mTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2VuZE9mTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9xdWFudGlmaWVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9kZWZpbml0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL2RlZmluaXRpb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvZGVmaW5pdGlvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvZGVmaW5pdGlvbnMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL3BhcnQvbm9uVGVybWluYWwvc2VxdWVuY2VPZlBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL2RlZmluaXRpb25zLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2RlZmluaXRpb25zLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9wYXJ0L3Rlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL3Rlcm1pbmFsUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvY2hvaWNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9jaG9pY2VPZlBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2Nob2ljZU9mUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL25vZGUvYm5mL3Rlcm1pbmFsU3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3NpZ25pZmljYW50VG9rZW5UeXBlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL3Rlcm1pbmFsU3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9wYXJ0L25vblRlcm1pbmFsLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3BhcnRSdWxlL25vblRlcm1pbmFsL3J1bGVOYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL25vblRlcm1pbmFsUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvc2VxdWVuY2VPZlBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3NlcXVlbmNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9zZXF1ZW5jZU9mUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnNlVHJlZS9ub1doaXRlc3BhY2VOb2RlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL3Rlcm1pbmFsL25vV2hpdGVzcGFjZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC90ZXJtaW5hbC9ub1doaXRlc3BhY2UuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL25vV2hpdGVzcGFjZVBhcnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vbm9XaGl0ZXNwYWNlUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9ub1doaXRlc3BhY2VQYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL2xvb2tBaGVhZE1vZGlmaWVyUnVsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9sb29rQWhlYWRNb2RpZmllci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvcGFydC90ZXJtaW5hbC9yZWd1bGFyRXhwcmVzc2lvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9saWIvbm9kZS9ibmYvcmVndWxhckV4cHJlc3Npb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvcmVndWxhckV4cHJlc3Npb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vcXVhbnRpZmllclJ1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvb3B0aW9uYWxRdWFudGlmaWVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL29uZU9yTW9yZVF1YW50aWZpZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvemVyb09yTW9yZVF1YW50aWZpZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvbGliL25vZGUvYm5mL3NpZ25pZmljYW50VG9rZW5UeXBlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL3NpZ25pZmljYW50VG9rZW5UeXBlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy91dGlsaXRpZXMvcnVsZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9wYXJzZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2Jhc2ljL2JuZi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvdXRpbGl0aWVzL3BhcnNlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvY29tbW9uL3BhcnNlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYmFzaWMvcGFyc2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvaW5kZXguanMiLCAic3JjL2Nzcy9ibmYuanMiLCAic3JjL2Nzcy9wYXJzZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWRvbS9zcmMvdXRpbGl0aWVzL2FycmF5LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1kb20vc3JjL3NwcmVhZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZG9tL3NyYy9xdWVyeS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZG9tL3NyYy91dGlsaXRpZXMvcXVlcnkuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWRvbS9zcmMvaW5kZXguanMiLCAic3JjL2NvbnN0YW50cy5qcyIsICJzcmMvdXRpbGl0aWVzL2NvbnRlbnQuanMiLCAic3JjL3N0eWxlL2RlY2xhcmF0aW9uLmpzIiwgInNyYy9zdHlsZS9kZWNsYXJhdGlvbnMuanMiLCAic3JjL3N0eWxlL3J1bGVTZXQuanMiLCAic3JjL3N0eWxlL3J1bGVTZXRzLmpzIiwgInNyYy9zdHlsZS9tZWRpYS5qcyIsICJzcmMvc3R5bGUvbWVkaWFzLmpzIiwgInNyYy9zdHlsZS5qcyIsICJzcmMvdXRpbGl0aWVzL3N0eWxlcy5qcyIsICJzcmMvdXRpbGl0aWVzL2NsYXNzTmFtZS5qcyIsICJzcmMvaW5kZXguanMiLCAic3JjL2V4YW1wbGUuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCB0YWdOYW1lcyA9IFtcbiAgXCJhXCIsIFwiYWJiclwiLCBcImFkZHJlc3NcIiwgXCJhc2lkZVwiLCBcImF1ZGlvXCIsXG4gIFwiYlwiLCBcImJhc2VcIiwgXCJiZGlcIiwgXCJiZG9cIiwgXCJibG9ja3F1b3RlXCIsIFwiYm9keVwiLCBcImJyXCIsIFwiYnV0dG9uXCIsXG4gIFwiY2FudmFzXCIsIFwiY2FwdGlvblwiLCBcImNpdGVcIiwgXCJjb2RlXCIsIFwiY29sXCIsIFwiY29sZ3JvdXBcIixcbiAgXCJkYXRhXCIsIFwiZGF0YWxpc3RcIiwgXCJkZFwiLCBcImRlbFwiLCBcImRldGFpbHNcIiwgXCJkZm5cIiwgXCJkaWFsb2dcIiwgXCJkaXZcIiwgXCJkbFwiLCBcImR0XCIsIFwiZW1cIiwgXCJlbWJlZFwiLCBcImZpZWxkc2V0XCIsIFwiZmlnY2FwdGlvblwiLCBcImZpZ3VyZVwiLCBcImZvb3RlclwiLCBcImZvcm1cIixcbiAgXCJoMVwiLCBcImgyXCIsIFwiaDNcIiwgXCJoNFwiLCBcImg1XCIsIFwiaDZcIiwgXCJoZWFkXCIsIFwiaGVhZGVyXCIsIFwiaHJcIiwgXCJodG1sXCIsXG4gIFwiaVwiLCBcImlmcmFtZVwiLCBcImltZ1wiLCBcImlucHV0XCIsIFwiaW5zXCIsIFwia2JkXCIsIFwibGFiZWxcIiwgXCJsZWdlbmRcIiwgXCJsaVwiLCBcImxpbmtcIixcbiAgXCJtYWluXCIsIFwibWFwXCIsIFwibWFya1wiLCBcIm1ldGFcIiwgXCJtZXRlclwiLCBcIm5hdlwiLCBcIm5vc2NyaXB0XCIsXG4gIFwib2JqZWN0XCIsIFwib2xcIiwgXCJvcHRncm91cFwiLCBcIm9wdGlvblwiLCBcIm91dHB1dFwiLFxuICBcInBcIiwgXCJwYXJhbVwiLCBcInBpY3R1cmVcIiwgXCJwcmVcIiwgXCJwcm9ncmVzc1wiLFxuICBcInFcIiwgXCJycFwiLCBcInJ0XCIsIFwicnVieVwiLFxuICBcInNcIiwgXCJzYW1wXCIsIFwic2NyaXB0XCIsIFwic2VjdGlvblwiLCBcInNlbGVjdFwiLCBcInNtYWxsXCIsIFwic291cmNlXCIsIFwic3BhblwiLCBcInN0cm9uZ1wiLCBcInN0eWxlXCIsIFwic3ViXCIsIFwic3VtbWFyeVwiLCBcInN1cFwiLCBcInN2Z1wiLFxuICBcInRhYmxlXCIsIFwidGJvZHlcIiwgXCJ0ZFwiLCBcInRlbXBsYXRlXCIsIFwidGV4dGFyZWFcIiwgXCJ0Zm9vdFwiLCBcInRoXCIsIFwidGhlYWRcIiwgXCJ0aW1lXCIsIFwidGl0bGVcIiwgXCJ0clwiLCBcInRyYWNrXCIsXG4gIFwidVwiLCBcInVsXCIsXG4gIFwidmFyXCIsIFwidmlkZW9cIixcbiAgXCJ3YnJcIlxuXTtcblxuZXhwb3J0IGRlZmF1bHQgdGFnTmFtZXM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBUUkFDRV9MRVZFTCA9IFwidHJhY2VcIjtcbmV4cG9ydCBjb25zdCBERUJVR19MRVZFTCA9IFwiZGVidWdcIjtcbmV4cG9ydCBjb25zdCBJTkZPX0xFVkVMID0gXCJpbmZvXCI7XG5leHBvcnQgY29uc3QgV0FSTklOR19MRVZFTCA9IFwid2FybmluZ1wiO1xuZXhwb3J0IGNvbnN0IEVSUk9SX0xFVkVMID0gXCJlcnJvclwiO1xuZXhwb3J0IGNvbnN0IEZBVEFMX0xFVkVMID0gXCJmYXRhbFwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFRSQUNFX0xFVkVMLFxuICBERUJVR19MRVZFTCxcbiAgSU5GT19MRVZFTCxcbiAgV0FSTklOR19MRVZFTCxcbiAgRVJST1JfTEVWRUwsXG4gIEZBVEFMX0xFVkVMXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgR0VUX01FVEhPRCA9IFwiR0VUXCI7XG5leHBvcnQgY29uc3QgUE9TVF9NRVRIT0QgPSBcIlBPU1RcIjtcbmV4cG9ydCBjb25zdCBERUxFVEVfTUVUSE9EID0gXCJERUxFVEVcIjtcbmV4cG9ydCBjb25zdCBPUFRJT05TX01FVEhPRCA9IFwiT1BUSU9OU1wiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIEdFVF9NRVRIT0QsXG4gIFBPU1RfTUVUSE9ELFxuICBERUxFVEVfTUVUSE9ELFxuICBPUFRJT05TX01FVEhPRFxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFBSQUdNQV9IRUFERVIgPSBcInByYWdtYVwiO1xuZXhwb3J0IGNvbnN0IEFDQ0VQVF9IRUFERVIgPSBcImFjY2VwdFwiO1xuZXhwb3J0IGNvbnN0IExPQ0FUSU9OX0hFQURFUiA9IFwibG9jYXRpb25cIjtcbmV4cG9ydCBjb25zdCBVU0VSX0FHRU5UX0hFQURFUiA9IFwidXNlci1hZ2VudFwiO1xuZXhwb3J0IGNvbnN0IENPTlRFTlRfVFlQRV9IRUFERVIgPSBcImNvbnRlbnQtdHlwZVwiO1xuZXhwb3J0IGNvbnN0IEFVVEhPUklaQVRJT05fSEVBREVSID0gXCJhdXRob3JpemF0aW9uXCI7XG5leHBvcnQgY29uc3QgQ0FDSEVfQ09OVFJPTF9IRUFERVIgPSBcImNhY2hlLWNvbnRyb2xcIjtcbmV4cG9ydCBjb25zdCBDT05URU5UX0xFTkdUSF9IRUFERVIgPSBcImNvbnRlbnQtbGVuZ3RoXCI7XG5leHBvcnQgY29uc3QgVFJBTlNGRVJfRU5DT0RJTkdfSEVBREVSID0gXCJ0cmFuc2Zlci1lbmNvZGluZ1wiO1xuZXhwb3J0IGNvbnN0IENPTlRFTlRfRElTUE9TSVRJT05fSEVBREVSID0gXCJjb250ZW50LWRpc3Bvc2l0aW9uXCI7XG5leHBvcnQgY29uc3QgQUNDRVNTX0NPTlRST0xfQUxMT1dfT1JJR0lOX0hFQURFUiA9IFwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctb3JpZ2luXCI7XG5leHBvcnQgY29uc3QgQUNDRVNTX0NPTlRST0xfQUxMT1dfTUVUSE9EU19IRUFERVIgPSBcImFjY2Vzcy1jb250cm9sLWFsbG93LW1ldGhvZHNcIjtcbmV4cG9ydCBjb25zdCBBQ0NFU1NfQ09OVFJPTF9BTExPV19IRUFERVJTX0hFQURFUiA9IFwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctaGVhZGVyc1wiO1xuZXhwb3J0IGNvbnN0IEFDQ0VTU19DT05UUk9MX1JFUVVFU1RfTUVUSE9EX0hFQURFUiA9IFwiYWNjZXNzLWNvbnRyb2wtcmVxdWVzdC1tZXRob2RcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBQUkFHTUFfSEVBREVSLFxuICBBQ0NFUFRfSEVBREVSLFxuICBMT0NBVElPTl9IRUFERVIsXG4gIFVTRVJfQUdFTlRfSEVBREVSLFxuICBDT05URU5UX1RZUEVfSEVBREVSLFxuICBBVVRIT1JJWkFUSU9OX0hFQURFUixcbiAgQ0FDSEVfQ09OVFJPTF9IRUFERVIsXG4gIENPTlRFTlRfTEVOR1RIX0hFQURFUixcbiAgVFJBTlNGRVJfRU5DT0RJTkdfSEVBREVSLFxuICBDT05URU5UX0RJU1BPU0lUSU9OX0hFQURFUixcbiAgQUNDRVNTX0NPTlRST0xfQUxMT1dfT1JJR0lOX0hFQURFUixcbiAgQUNDRVNTX0NPTlRST0xfQUxMT1dfTUVUSE9EU19IRUFERVIsXG4gIEFDQ0VTU19DT05UUk9MX0FMTE9XX0hFQURFUlNfSEVBREVSLFxuICBBQ0NFU1NfQ09OVFJPTF9SRVFVRVNUX01FVEhPRF9IRUFERVJcbn07IiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgU0hJRlRfS0VZX0NPREUgPSAxNjtcbmV4cG9ydCBjb25zdCBFU0NBUEVfS0VZQ09ERSA9IDI3O1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFNISUZUX0tFWV9DT0RFLFxuICBFU0NBUEVfS0VZQ09ERVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFVURjhfRU5DT0RJTkcgPSBcInV0ZjhcIjtcbmV4cG9ydCBjb25zdCBVVEZfOF9FTkNPRElORyA9IFwidXRmLThcIjtcbmV4cG9ydCBjb25zdCBCQVNFNjRfRU5DT0RJTkcgPSBcImJhc2U2NFwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFVURjhfRU5DT0RJTkcsXG4gIFVURl84X0VOQ09ESU5HLFxuICBCQVNFNjRfRU5DT0RJTkdcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBFVFhfQ0hBUkFDVEVSID0gXCJcXHUwMDAzXCI7XG5leHBvcnQgY29uc3QgQkFSX0NIQVJBQ1RFUiA9IFwifFwiO1xuZXhwb3J0IGNvbnN0IERBU0hfQ0hBUkFDVEVSID0gXCItXCI7XG5leHBvcnQgY29uc3QgU1BBQ0VfQ0hBUkFDVEVSID0gXCIgXCI7XG5leHBvcnQgY29uc3QgQ09NTUFfQ0hBUkFDVEVSID0gXCIsXCI7XG5leHBvcnQgY29uc3QgQ09MT05fQ0hBUkFDVEVSID0gXCI6XCI7XG5leHBvcnQgY29uc3QgUEVSSU9EX0NIQVJBQ1RFUiA9IFwiLlwiO1xuZXhwb3J0IGNvbnN0IENUUkxfQ19DSEFSQUNURVIgPSBcIl5DXCI7XG5leHBvcnQgY29uc3QgV0lMRENBUkRfQ0hBUkFDVEVSID0gXCIqXCI7XG5leHBvcnQgY29uc3QgQkFDS1RJQ0tfREVMSU1JVEVSID0gXCJgXCI7XG5leHBvcnQgY29uc3QgTkVXX0xJTkVfQ0hBUkFDVEVSID0gXCJcXG5cIjtcbmV4cG9ydCBjb25zdCBCQUNLU1BBQ0VfQ0hBUkFDVEVSID0gU3RyaW5nLmZyb21DaGFyQ29kZSgxMjcpO1xuZXhwb3J0IGNvbnN0IEFNUEVSU0FORF9DSEFSQUNURVIgPSBcIiZcIjtcbmV4cG9ydCBjb25zdCBMRVNTX1RIQU5fQ0hBUkFDVEVSID0gXCImbHQ7XCI7XG5leHBvcnQgY29uc3QgR1JFQVRFUl9USEFOX0NIQVJBQ1RFUiA9IFwiJmd0O1wiO1xuZXhwb3J0IGNvbnN0IEZPUldBUkRfU0xBU0hfQ0hBUkFDVEVSID0gXCIvXCI7XG5leHBvcnQgY29uc3QgQ0FSUklBR0VfUkVUVVJOX0NIQVJBQ1RFUiA9IFwiXFxyXCI7XG5leHBvcnQgY29uc3QgRVhDTEFNQVRJT05fTUFSS19DSEFSQUNURVIgPSBcIiFcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBFVFhfQ0hBUkFDVEVSLFxuICBCQVJfQ0hBUkFDVEVSLFxuICBEQVNIX0NIQVJBQ1RFUixcbiAgU1BBQ0VfQ0hBUkFDVEVSLFxuICBDT01NQV9DSEFSQUNURVIsXG4gIENPTE9OX0NIQVJBQ1RFUixcbiAgUEVSSU9EX0NIQVJBQ1RFUixcbiAgQ1RSTF9DX0NIQVJBQ1RFUixcbiAgV0lMRENBUkRfQ0hBUkFDVEVSLFxuICBCQUNLVElDS19ERUxJTUlURVIsXG4gIE5FV19MSU5FX0NIQVJBQ1RFUixcbiAgQU1QRVJTQU5EX0NIQVJBQ1RFUixcbiAgQkFDS1NQQUNFX0NIQVJBQ1RFUixcbiAgTEVTU19USEFOX0NIQVJBQ1RFUixcbiAgR1JFQVRFUl9USEFOX0NIQVJBQ1RFUixcbiAgRk9SV0FSRF9TTEFTSF9DSEFSQUNURVIsXG4gIENBUlJJQUdFX1JFVFVSTl9DSEFSQUNURVIsXG4gIEVYQ0xBTUFUSU9OX01BUktfQ0hBUkFDVEVSXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgWkVST18wX1NUQVRVU19DT0RFID0gMDtcbmV4cG9ydCBjb25zdCBPS18yMDBfU1RBVFVTX0NPREUgPSAyMDA7XG5leHBvcnQgY29uc3QgRk9VTkRfMzAyX1NUQVRVU19DT0RFID0gMzAyO1xuZXhwb3J0IGNvbnN0IENSRUFURURfMjAxX1NUQVRVU19DT0RFID0gMjAxO1xuZXhwb3J0IGNvbnN0IFNFRV9PVEhFUl8zMDNfU1RBVFVTX0NPREUgPSAzMDM7XG5leHBvcnQgY29uc3QgRk9SQklEREVOXzQwM19TVEFUVVNfQ09ERSA9IDQwMztcbmV4cG9ydCBjb25zdCBOT1RfRk9VTkRfNDA0X1NUQVRVU19DT0RFID0gNDA0O1xuZXhwb3J0IGNvbnN0IE5PX0NPTlRFTlRfMjA0X1NUQVRVU19DT0RFID0gMjA0O1xuZXhwb3J0IGNvbnN0IEJBRF9HQVRFV0FZXzUwMl9TVEFUVVNfQ09ERSA9IDUwMjtcbmV4cG9ydCBjb25zdCBCQURfUkVRVUVTVF80MDBfU1RBVFVTX0NPREUgPSA0MDA7XG5leHBvcnQgY29uc3QgVU5BVVRIT1JJU0VEXzQwMV9TVEFUVVNfQ09ERSA9IDQwMTtcbmV4cG9ydCBjb25zdCBUT09fTUFOWV9SRVFVRVNUU180MjlfU1RBVFVTX0NPREUgPSA0Mjk7XG5leHBvcnQgY29uc3QgSU5URVJOQUxfU0VSVkVSX0VSUk9SXzUwMF9TVEFUVVNfQ09ERSA9IDUwMDtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBaRVJPXzBfU1RBVFVTX0NPREUsXG4gIE9LXzIwMF9TVEFUVVNfQ09ERSxcbiAgRk9VTkRfMzAyX1NUQVRVU19DT0RFLFxuICBDUkVBVEVEXzIwMV9TVEFUVVNfQ09ERSxcbiAgU0VFX09USEVSXzMwM19TVEFUVVNfQ09ERSxcbiAgRk9SQklEREVOXzQwM19TVEFUVVNfQ09ERSxcbiAgTk9UX0ZPVU5EXzQwNF9TVEFUVVNfQ09ERSxcbiAgTk9fQ09OVEVOVF8yMDRfU1RBVFVTX0NPREUsXG4gIEJBRF9HQVRFV0FZXzUwMl9TVEFUVVNfQ09ERSxcbiAgQkFEX1JFUVVFU1RfNDAwX1NUQVRVU19DT0RFLFxuICBVTkFVVEhPUklTRURfNDAxX1NUQVRVU19DT0RFLFxuICBUT09fTUFOWV9SRVFVRVNUU180MjlfU1RBVFVTX0NPREUsXG4gIElOVEVSTkFMX1NFUlZFUl9FUlJPUl81MDBfU1RBVFVTX0NPREVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBURVhUX0hUTUxfQ09OVEVOVF9UWVBFID0gXCJ0ZXh0L2h0bWxcIjtcbmV4cG9ydCBjb25zdCBURVhUX1BMQUlOX0NPTlRFTlRfVFlQRSA9IFwidGV4dC9wbGFpblwiO1xuZXhwb3J0IGNvbnN0IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XG5leHBvcnQgY29uc3QgQVBQTElDQVRJT05fWF9XV1dfRk9STV9FTkNPREVEX0NPTlRFTlRfVFlQRSA9IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCI7XG5leHBvcnQgY29uc3QgVEVYVF9IVE1MX0NIQVJTRVRfVVRGXzhfQ09OVEVOVF9UWVBFID0gXCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLThcIjtcbmV4cG9ydCBjb25zdCBURVhUX1BMQUlOX0NIQVJTRVRfVVRGXzhfQ09OVEVOVF9UWVBFID0gXCJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04XCI7XG5leHBvcnQgY29uc3QgQVBQTElDQVRJT05fSlNPTl9DSEFSU0VUX1VURl84X0NPTlRFTlRfVFlQRSA9IFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiO1xuZXhwb3J0IGNvbnN0IEFQUExJQ0FUSU9OX1hfV1dXX0ZPUk1fRU5DT0RFRF9DSEFSU0VUX1VURl84X0NPTlRFTlRfVFlQRSA9IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PXV0Zi04XCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgVEVYVF9IVE1MX0NPTlRFTlRfVFlQRSxcbiAgVEVYVF9QTEFJTl9DT05URU5UX1RZUEUsXG4gIEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFLFxuICBBUFBMSUNBVElPTl9KU09OX0NIQVJTRVRfVVRGXzhfQ09OVEVOVF9UWVBFLFxuICBURVhUX0hUTUxfQ0hBUlNFVF9VVEZfOF9DT05URU5UX1RZUEUsXG4gIFRFWFRfUExBSU5fQ0hBUlNFVF9VVEZfOF9DT05URU5UX1RZUEUsXG4gIEFQUExJQ0FUSU9OX1hfV1dXX0ZPUk1fRU5DT0RFRF9DT05URU5UX1RZUEUsXG4gIEFQUExJQ0FUSU9OX1hfV1dXX0ZPUk1fRU5DT0RFRF9DSEFSU0VUX1VURl84X0NPTlRFTlRfVFlQRVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IE9LXzIwMF9TVEFUVVNfTUVTU0FHRSA9IFwiT0tcIjtcbmV4cG9ydCBjb25zdCBGT1VORF8zMDJfU1RBVFVTX01FU1NBR0UgPSBcIkZvdW5kXCI7XG5leHBvcnQgY29uc3QgQ1JFQVRFRF8yMDFfU1RBVFVTX01FU1NBR0UgPSBcIkNyZWF0ZWRcIjtcbmV4cG9ydCBjb25zdCBTRUVfT1RIRVJfMzAzX1NUQVRVU19NRVNTQUdFID0gXCJTZWUgb3RoZXJcIjtcbmV4cG9ydCBjb25zdCBGT1JCSURERU5fNDAzX1NUQVRVU19NRVNTQUdFID0gXCJGb3JiaWRkZW5cIjtcbmV4cG9ydCBjb25zdCBOT1RfRk9VTkRfNDA0X1NUQVRVU19NRVNTQUdFID0gXCJOb3QgZm91bmRcIjtcbmV4cG9ydCBjb25zdCBOT19DT05URU5UXzIwNF9TVEFUVVNfTUVTU0FHRSA9IFwiTm8gY29udGVudFwiO1xuZXhwb3J0IGNvbnN0IEJBRF9HQVRFV0FZXzUwMl9TVEFUVVNfTUVTU0FHRSA9IFwiQmFkIGdhdGV3YXlcIjtcbmV4cG9ydCBjb25zdCBCQURfUkVRVUVTVF80MDBfU1RBVFVTX01FU1NBR0UgPSBcIkJhZCByZXF1ZXN0XCI7XG5leHBvcnQgY29uc3QgVU5BVVRIT1JJU0VEXzQwMV9TVEFUVVNfTUVTU0FHRSA9IFwiVW5hdXRob3Jpc2VkXCI7XG5leHBvcnQgY29uc3QgVE9PX01BTllfUkVRVUVTVFNfNDI5X1NUQVRVU19NRVNTQUdFID0gXCJUb28gbWFueSByZXF1ZXN0c1wiO1xuZXhwb3J0IGNvbnN0IElOVEVSTkFMX1NFUlZFUl9FUlJPUl81MDBfU1RBVFVTX01FU1NBR0UgPSBcIkludGVybmFsIHNlcnZlciBlcnJvclwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIE9LXzIwMF9TVEFUVVNfTUVTU0FHRSxcbiAgRk9VTkRfMzAyX1NUQVRVU19NRVNTQUdFLFxuICBDUkVBVEVEXzIwMV9TVEFUVVNfTUVTU0FHRSxcbiAgU0VFX09USEVSXzMwM19TVEFUVVNfTUVTU0FHRSxcbiAgRk9SQklEREVOXzQwM19TVEFUVVNfTUVTU0FHRSxcbiAgTk9UX0ZPVU5EXzQwNF9TVEFUVVNfTUVTU0FHRSxcbiAgTk9fQ09OVEVOVF8yMDRfU1RBVFVTX01FU1NBR0UsXG4gIEJBRF9HQVRFV0FZXzUwMl9TVEFUVVNfTUVTU0FHRSxcbiAgQkFEX1JFUVVFU1RfNDAwX1NUQVRVU19NRVNTQUdFLFxuICBVTkFVVEhPUklTRURfNDAxX1NUQVRVU19NRVNTQUdFLFxuICBUT09fTUFOWV9SRVFVRVNUU180MjlfU1RBVFVTX01FU1NBR0UsXG4gIElOVEVSTkFMX1NFUlZFUl9FUlJPUl81MDBfU1RBVFVTX01FU1NBR0Vcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaXJzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbMF07fVxuXG5leHBvcnQgZnVuY3Rpb24gc2Vjb25kKGFycmF5KSB7IHJldHVybiBhcnJheVsxXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gdGhpcmQoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzJdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3VydGgoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzNdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWZ0aChhcnJheSkgeyByZXR1cm4gYXJyYXlbNF07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpZnRoTGFzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gNV07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvdXJ0aExhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDRdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiB0aGlyZExhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDNdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWNvbmRMYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAyXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gZmlyc3RMYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAxXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gbGFzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGhlYWQoYXJyYXkpIHsgcmV0dXJuIGFycmF5LnNsaWNlKDAsIDEpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiB0YWlsKGFycmF5KSB7IHJldHVybiBhcnJheS5zbGljZSgxKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gYmFjayhhcnJheSkgeyByZXR1cm4gYXJyYXkuc2xpY2UoYXJyYXkubGVuZ3RoIC0gMSk7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb250KGFycmF5KSB7IHJldHVybiBhcnJheS5zbGljZSgwLCBhcnJheS5sZW5ndGggLSAxKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gcHVzaChhcnJheTEsIGFycmF5MikgeyBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShhcnJheTEsIGFycmF5Mik7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc2hpZnQoYXJyYXkxLCBhcnJheTIpIHsgQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkoYXJyYXkxLCBhcnJheTIpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jYXQoYXJyYXkxLCBlbGVtZW50T3JBcnJheTIpIHtcbiAgY29uc3QgYXJyYXkyID0gKGVsZW1lbnRPckFycmF5MiBpbnN0YW5jZW9mIEFycmF5KSA/XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRPckFycmF5MiA6XG4gICAgICAgICAgICAgICAgICAgICBbZWxlbWVudE9yQXJyYXkyXTtcbiAgXG4gIHB1c2goYXJyYXkxLCBhcnJheTIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXIoYXJyYXkpIHtcbiAgY29uc3Qgc3RhcnQgPSAwO1xuICBcbiAgcmV0dXJuIGFycmF5LnNwbGljZShzdGFydCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KGFycmF5MSwgYXJyYXkyKSB7XG4gIGNvbnN0IHN0YXJ0ID0gMCxcbiAgICAgICAgZGVsZXRlQ291bnQgPSBhcnJheTIubGVuZ3RoOyAgLy8vXG4gIFxuICBzcGxpY2UoYXJyYXkxLCBzdGFydCwgZGVsZXRlQ291bnQsIGFycmF5Mik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZShhcnJheTEsIGFycmF5MikgeyBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShhcnJheTEsIGFycmF5Mik7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHNwbGljZShhcnJheTEsIHN0YXJ0LCBkZWxldGVDb3VudCA9IEluZmluaXR5LCBhcnJheTIgPSBbXSkge1xuICBjb25zdCBhcmdzID0gW3N0YXJ0LCBkZWxldGVDb3VudCwgLi4uYXJyYXkyXSxcbiAgICAgICAgZGVsZXRlZEl0ZW1zQXJyYXkgPSBBcnJheS5wcm90b3R5cGUuc3BsaWNlLmFwcGx5KGFycmF5MSwgYXJncyk7XG5cbiAgcmV0dXJuIGRlbGV0ZWRJdGVtc0FycmF5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZShhcnJheSwgZWxlbWVudCwgdGVzdCkge1xuICBsZXQgc3RhcnQ7XG4gIFxuICBjb25zdCBmb3VuZCA9IGFycmF5LnNvbWUoKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gdGVzdChlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICBzdGFydCA9IGluZGV4OyAgLy8vXG4gICAgICBcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG4gIFxuICBpZiAoZm91bmQpIHtcbiAgICBjb25zdCBkZWxldGVDb3VudCA9IDE7XG5cbiAgICBhcnJheS5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50LCBlbGVtZW50KTtcbiAgfVxuXG4gIHJldHVybiBmb3VuZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlcihhcnJheSwgdGVzdCkge1xuICBjb25zdCBmaWx0ZXJlZEVsZW1lbnRzID0gW107XG4gIFxuICBiYWNrd2FyZHNGb3JFYWNoKGFycmF5LCAoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSB0ZXN0KGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmICghcGFzc2VkKSB7XG4gICAgICBjb25zdCBzdGFydCA9IGluZGV4LCAgLy8vXG4gICAgICAgICAgICBkZWxldGVDb3VudCA9IDEsXG4gICAgICAgICAgICBkZWxldGVkRWxlbWVudHMgPSBhcnJheS5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50KSxcbiAgICAgICAgICAgIGZpcnN0RGVsZXRlZEVsZW1lbnQgPSBmaXJzdChkZWxldGVkRWxlbWVudHMpO1xuICAgICAgXG4gICAgICBmaWx0ZXJlZEVsZW1lbnRzLnVuc2hpZnQoZmlyc3REZWxldGVkRWxlbWVudCk7ICAvLy9cbiAgICB9XG4gIH0pO1xuICBcbiAgcmV0dXJuIGZpbHRlcmVkRWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kKGFycmF5LCB0ZXN0KSB7XG4gIGNvbnN0IGVsZW1lbnRzID0gW107XG5cbiAgZm9yd2FyZHNGb3JFYWNoKGFycmF5LCAoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSB0ZXN0KGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmIChwYXNzZWQpIHtcbiAgICAgIGVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcnVuZShhcnJheSwgdGVzdCkge1xuICBsZXQgcHJ1bmVkRWxlbWVudCA9IHVuZGVmaW5lZDtcbiAgXG4gIGFycmF5LnNvbWUoKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gdGVzdChlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgY29uc3Qgc3RhcnQgPSBpbmRleCwgIC8vL1xuICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxLFxuICAgICAgICAgICAgZGVsZXRlZEVsZW1lbnRzID0gYXJyYXkuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCksXG4gICAgICAgICAgICBmaXJzdERlbGV0ZWRFbGVtZW50ID0gZmlyc3QoZGVsZXRlZEVsZW1lbnRzKTtcbiAgICAgIFxuICAgICAgcHJ1bmVkRWxlbWVudCA9IGZpcnN0RGVsZXRlZEVsZW1lbnQ7ICAvLy9cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcbiAgXG4gIHJldHVybiBwcnVuZWRFbGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0Y2goYXJyYXksIGVsZW1lbnQsIHRlc3QpIHtcbiAgY29uc3QgZm91bmQgPSBhcnJheS5zb21lKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IHRlc3QoZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuXG4gIGlmIChmb3VuZCkge1xuICAgIGFycmF5LnB1c2goZWxlbWVudCk7XG4gIH1cblxuICByZXR1cm4gZm91bmQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdWdtZW50KGFycmF5MSwgYXJyYXkyLCB0ZXN0KSB7XG4gIGFycmF5Mi5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IHRlc3QoZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgYXJyYXkxLnB1c2goZWxlbWVudCk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlcGFyYXRlKGFycmF5LCBhcnJheTEsIGFycmF5MiwgdGVzdCkge1xuICBhcnJheS5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IHRlc3QoZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgcGFzc2VkID9cbiAgICAgIGFycmF5MS5wdXNoKGVsZW1lbnQpIDpcbiAgICAgICAgYXJyYXkyLnB1c2goZWxlbWVudCk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNTb21lKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICAgIHJlc3VsdCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcbiAgICBcbiAgICBpZiAocmVzdWx0KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNTb21lKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgcmVzdWx0ID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNFdmVyeShhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5TGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICByZXN1bHQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzRXZlcnkoYXJyYXksIGNhbGxiYWNrKSB7XG4gIGNvbnN0IGFycmF5TGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZvciAobGV0IGluZGV4ID0gYXJyYXlMZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleC0tKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICByZXN1bHQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNSZWR1Y2UoYXJyYXksIGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpIHtcbiAgbGV0IHZhbHVlID0gaW5pdGlhbFZhbHVlO1xuXG4gIGZvcndhcmRzRm9yRWFjaChhcnJheSwgKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgdmFsdWUgPSBjYWxsYmFjayh2YWx1ZSwgZWxlbWVudCwgaW5kZXgpO1xuICB9KTtcblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNSZWR1Y2UoYXJyYXksIGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpIHtcbiAgbGV0IHZhbHVlID0gaW5pdGlhbFZhbHVlO1xuXG4gIGJhY2t3YXJkc0ZvckVhY2goYXJyYXksIChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIHZhbHVlID0gY2FsbGJhY2sodmFsdWUsIGVsZW1lbnQsIGluZGV4KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBmaXJzdCxcbiAgc2Vjb25kLFxuICB0aGlyZCxcbiAgZm91cnRoLFxuICBmaWZ0aCxcbiAgZmlmdGhMYXN0LFxuICBmb3VydGhMYXN0LFxuICB0aGlyZExhc3QsXG4gIHNlY29uZExhc3QsXG4gIGZpcnN0TGFzdCxcbiAgbGFzdCxcbiAgaGVhZCxcbiAgdGFpbCxcbiAgYmFjayxcbiAgZnJvbnQsXG4gIHB1c2gsXG4gIHVuc2hpZnQsXG4gIGNvbmNhdCxcbiAgY2xlYXIsXG4gIGNvcHksXG4gIG1lcmdlLFxuICBzcGxpY2UsXG4gIHJlcGxhY2UsXG4gIGZpbHRlcixcbiAgZmluZCxcbiAgcHJ1bmUsXG4gIHBhdGNoLFxuICBhdWdtZW50LFxuICBzZXBhcmF0ZSxcbiAgZm9yd2FyZHNTb21lLFxuICBiYWNrd2FyZHNTb21lLFxuICBmb3J3YXJkc0V2ZXJ5LFxuICBiYWNrd2FyZHNFdmVyeSxcbiAgZm9yd2FyZHNSZWR1Y2UsXG4gIGJhY2t3YXJkc1JlZHVjZSxcbiAgZm9yd2FyZHNGb3JFYWNoLFxuICBiYWNrd2FyZHNGb3JFYWNoXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgREFUQSA9IFwiZGF0YVwiO1xuZXhwb3J0IGNvbnN0IEVSUk9SID0gXCJlcnJvclwiO1xuZXhwb3J0IGNvbnN0IFNUUklORyA9IFwic3RyaW5nXCI7XG5leHBvcnQgY29uc3QgTlVNQkVSID0gXCJudW1iZXJcIjtcbmV4cG9ydCBjb25zdCBCT09MRUFOID0gXCJib29sZWFuXCI7XG5leHBvcnQgY29uc3QgREVGQVVMVCA9IFwiZGVmYXVsdFwiO1xuZXhwb3J0IGNvbnN0IEVOVklST05NRU5UID0gXCJFTlZJUk9OTUVOVFwiO1xuZXhwb3J0IGNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNlY29uZCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IENPTE9OX0NIQVJBQ1RFUiwgQU1QRVJTQU5EX0NIQVJBQ1RFUiB9IGZyb20gXCIuLi9jaGFyYWN0ZXJzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBvdmVyd3JpdGUoaGVhZGVycywgbmFtZSwgdmFsdWUpIHtcbiAgY29uc3QgbG93ZXJDYXNlTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgZXhpc3RpbmdOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlYWRlcnMpLCAgLy8vXG4gICAgICAgIGV4aXN0aW5nTmFtZSA9IGV4aXN0aW5nTmFtZXMuZmluZCgoZXhpc3RpbmdOYW1lKSA9PiB7XG4gICAgICAgICAgY29uc3QgZXhpc3RpbmdMb3dlckNhc2VOYW1lID0gZXhpc3RpbmdOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgICBpZiAoZXhpc3RpbmdMb3dlckNhc2VOYW1lID09PSBsb3dlckNhc2VOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pIHx8IG51bGw7XG5cbiAgaWYgKGV4aXN0aW5nTmFtZSAhPT0gbnVsbCkge1xuICAgIGhlYWRlcnNbZXhpc3RpbmdOYW1lXSA9IHZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bmRlcndyaXRlKGhlYWRlcnMsIG5hbWUsIHZhbHVlKSB7XG4gIGNvbnN0IGxvd2VyQ2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIGV4aXN0aW5nTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhoZWFkZXJzKSwgIC8vL1xuICAgICAgICBleGlzdGluZ05hbWUgPSBleGlzdGluZ05hbWVzLmZpbmQoKGV4aXN0aW5nTmFtZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nTG93ZXJDYXNlTmFtZSA9IGV4aXN0aW5nTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgICAgaWYgKGV4aXN0aW5nTG93ZXJDYXNlTmFtZSA9PT0gbG93ZXJDYXNlTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KSB8fCBudWxsO1xuXG4gIGlmIChleGlzdGluZ05hbWUgPT09IG51bGwpIHtcbiAgICBoZWFkZXJzW25hbWVdID0gdmFsdWU7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvcnRGcm9tSG9zdChob3N0KSB7XG4gIGxldCBwb3J0O1xuXG4gIGNvbnN0IG1hdGNoZXMgPSBob3N0Lm1hdGNoKC9eaHR0cHM/OlxcL1xcLyhbXlxcL10rKS8pLFxuICAgICAgICBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKSxcbiAgICAgICAgaW5kZXggPSBzZWNvbmRNYXRjaC5pbmRleE9mKENPTE9OX0NIQVJBQ1RFUik7XG5cbiAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgIGNvbnN0IHNlY3VyZSA9IHNlY3VyZUZyb21Ib3N0KGhvc3QpO1xuXG4gICAgcG9ydCA9IHNlY3VyZSA/IDQ0MyA6IDgwOyAvLy9cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBzdGFydCA9IGluZGV4ICsgMSxcbiAgICAgICAgICBwb3J0U3RyaW5nID0gc2Vjb25kTWF0Y2guc3Vic3RyaW5nKHN0YXJ0KTtcblxuICAgIHBvcnQgPSBOdW1iZXIocG9ydFN0cmluZyk7XG4gIH1cblxuICByZXR1cm4gcG9ydDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlY3VyZUZyb21Ib3N0KGhvc3QpIHtcbiAgY29uc3Qgc2VjdXJlID0gL15odHRwczpcXC9cXC8vLnRlc3QoaG9zdCk7XG5cbiAgcmV0dXJuIHNlY3VyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhvc3RuYW1lRnJvbUhvc3QoaG9zdCkge1xuICBjb25zdCBtYXRjaGVzID0gaG9zdC5tYXRjaCgvXmh0dHBzPzpcXC9cXC8oW146XFwvXSspLyksXG4gICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICBob3N0bmFtZSA9IHNlY29uZE1hdGNoOyAvLy9cblxuICByZXR1cm4gaG9zdG5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeVN0cmluZ0Zyb21RdWVyeShxdWVyeSkge1xuICBjb25zdCBuYW1lcyA9IE9iamVjdC5rZXlzKHF1ZXJ5KSxcbiAgICAgICAgbmFtZXNMZW5ndGggPSBuYW1lcy5sZW5ndGgsXG4gICAgICAgIGxhc3RJbmRleCA9IG5hbWVzTGVuZ3RoIC0gMSxcbiAgICAgICAgcXVlcnlTdHJpbmcgPSBuYW1lcy5yZWR1Y2UoKHF1ZXJ5U3RyaW5nLCBuYW1lLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gcXVlcnlbbmFtZV0sXG4gICAgICAgICAgICAgICAgZW5jb2RlZE5hbWUgPSBlbmNvZGVVUklDb21wb25lbnQobmFtZSksXG4gICAgICAgICAgICAgICAgZW5jb2RlZFZhbHVlID0gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKSxcbiAgICAgICAgICAgICAgICBhbXBlcnNhbmRPck5vdGhpbmcgPSAoaW5kZXggIT09IGxhc3RJbmRleCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU1QRVJTQU5EX0NIQVJBQ1RFUiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVNUFRZX1NUUklORztcbiAgXG4gICAgICAgICAgcXVlcnlTdHJpbmcgKz0gYCR7ZW5jb2RlZE5hbWV9PSR7ZW5jb2RlZFZhbHVlfSR7YW1wZXJzYW5kT3JOb3RoaW5nfWA7XG4gIFxuICAgICAgICAgIHJldHVybiBxdWVyeVN0cmluZztcbiAgICAgICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICByZXR1cm4gcXVlcnlTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cmxGcm9tSG9zdFVSSUFuZFF1ZXJ5KGhvc3QsIHVyaSwgcXVlcnkpIHtcbiAgY29uc3QgcXVlcnlTdHJpbmcgPSBxdWVyeVN0cmluZ0Zyb21RdWVyeShxdWVyeSksXG4gICAgICAgIHVybCA9IChxdWVyeVN0cmluZyA9PT0gRU1QVFlfU1RSSU5HKSA/XG4gICAgICAgICAgICAgICAgYCR7aG9zdH0ke3VyaX1gIDpcbiAgICAgICAgICAgICAgICAgIGAke2hvc3R9JHt1cml9PyR7cXVlcnlTdHJpbmd9YDtcblxuICByZXR1cm4gdXJsO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG92ZXJ3cml0ZSxcbiAgdW5kZXJ3cml0ZSxcbiAgcG9ydEZyb21Ib3N0LFxuICBzZWN1cmVGcm9tSG9zdCxcbiAgaG9zdG5hbWVGcm9tSG9zdCxcbiAgcXVlcnlTdHJpbmdGcm9tUXVlcnksXG4gIHVybEZyb21Ib3N0VVJJQW5kUXVlcnlcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEdFVF9NRVRIT0QsIFBPU1RfTUVUSE9EIH0gZnJvbSBcIi4uL21ldGhvZHNcIjtcbmltcG9ydCB7IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFIH0gZnJvbSBcIi4uL2NvbnRlbnRUeXBlc1wiO1xuaW1wb3J0IHsgQUNDRVBUX0hFQURFUiwgQ09OVEVOVF9UWVBFX0hFQURFUiB9IGZyb20gXCIuLi9oZWFkZXJzXCI7XG5pbXBvcnQgeyB1bmRlcndyaXRlLCB1cmxGcm9tSG9zdFVSSUFuZFF1ZXJ5IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9odHRwXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXQoaG9zdCwgdXJpLCBxdWVyeSwgaGVhZGVycywgY2FsbGJhY2spIHtcbiAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICBjYWxsYmFjayA9IGhlYWRlcnM7IC8vL1xuICAgIGhlYWRlcnMgPSB7fTtcbiAgfVxuXG4gIGNvbnN0IG1ldGhvZCA9IEdFVF9NRVRIT0QsXG4gICAgICAgIGFjY2VwdCA9IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFLFxuICAgICAgICBjb250ZW50ID0gbnVsbDtcblxuICB1bmRlcndyaXRlQWNjZXB0SGVhZGVyKGhlYWRlcnMsIGFjY2VwdCk7XG5cbiAgcmVxdWVzdChob3N0LCB1cmksIHF1ZXJ5LCBtZXRob2QsIGhlYWRlcnMsIGNvbnRlbnQsIGNhbGxiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvc3QoaG9zdCwgdXJpLCBxdWVyeSwgaGVhZGVycywgY29udGVudCwgY2FsbGJhY2spIHtcbiAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICBjYWxsYmFjayA9IGNvbnRlbnQ7XG4gICAgY29udGVudCA9IGhlYWRlcnM7XG4gICAgaGVhZGVycyA9IHt9O1xuICB9XG5cbiAgY29uc3QgbWV0aG9kID0gUE9TVF9NRVRIT0QsXG4gICAgICAgIGFjY2VwdCA9IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFLFxuICAgICAgICBjb250ZW50VHlwZSA9IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFO1xuXG4gIHVuZGVyd3JpdGVBY2NlcHRIZWFkZXIoaGVhZGVycywgYWNjZXB0KTtcblxuICB1bmRlcndyaXRlQ29udGVudFR5cGVIZWFkZXIoaGVhZGVycywgY29udGVudFR5cGUpO1xuXG4gIHJlcXVlc3QoaG9zdCwgdXJpLCBxdWVyeSwgbWV0aG9kLCBoZWFkZXJzLCBjb250ZW50LCBjYWxsYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXF1ZXN0KGhvc3QsIHVyaSwgcXVlcnksIG1ldGhvZCwgaGVhZGVycywgY29udGVudCwgY2FsbGJhY2spIHtcbiAgY29uc3QgdXJsID0gdXJsRnJvbUhvc3RVUklBbmRRdWVyeShob3N0LCB1cmksIHF1ZXJ5KSxcbiAgICAgICAgYWNjZXB0ID0gaGVhZGVyc1tBQ0NFUFRfSEVBREVSXSB8fCBudWxsLFxuICAgICAgICBjb250ZW50VHlwZSA9IGhlYWRlcnNbQ09OVEVOVF9UWVBFX0hFQURFUl0gfHwgbnVsbCxcbiAgICAgICAgeG1sSHR0cFJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICBpZiAoY29udGVudFR5cGUgPT09IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFKSB7XG4gICAgY29uc3QganNvbiA9IGNvbnRlbnQsICAvLy9cbiAgICAgICAgICBqc29uU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoanNvbik7XG5cbiAgICBjb250ZW50ID0ganNvblN0cmluZzsgIC8vL1xuICB9XG5cbiAgeG1sSHR0cFJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgcmVhZHlTdGF0ZSwgc3RhdHVzLCByZXNwb25zZSB9ID0geG1sSHR0cFJlcXVlc3QsXG4gICAgICAgICAgc3RhdHVzQ29kZSA9IHN0YXR1cztcblxuICAgIGlmIChyZWFkeVN0YXRlID09IDQpIHtcbiAgICAgIGxldCBjb250ZW50ID0gcmVzcG9uc2U7XG5cbiAgICAgIGlmIChhY2NlcHQgPT09IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QganNvblN0cmluZyA9IGNvbnRlbnQsICAvLy9cbiAgICAgICAgICAgICAgICBqc29uID0gSlNPTi5wYXJzZShqc29uU3RyaW5nKTtcblxuICAgICAgICAgIGNvbnRlbnQgPSBqc29uOyAgLy8vXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29udGVudCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY2FsbGJhY2soY29udGVudCwgc3RhdHVzQ29kZSk7XG4gICAgfVxuICB9O1xuXG4gIHhtbEh0dHBSZXF1ZXN0Lm9wZW4obWV0aG9kLCB1cmwpO1xuXG4gIGlmIChhY2NlcHQgIT09IG51bGwpIHtcbiAgICB4bWxIdHRwUmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKEFDQ0VQVF9IRUFERVIsIGFjY2VwdCk7XG4gIH1cblxuICBpZiAoY29udGVudFR5cGUgIT09IG51bGwpIHtcbiAgICB4bWxIdHRwUmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKENPTlRFTlRfVFlQRV9IRUFERVIsIGNvbnRlbnRUeXBlKTtcbiAgfVxuXG4gIChjb250ZW50ICE9PSBudWxsKSA/XG4gICAgeG1sSHR0cFJlcXVlc3Quc2VuZChjb250ZW50KSA6XG4gICAgICB4bWxIdHRwUmVxdWVzdC5zZW5kKCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZ2V0LFxuICBwb3N0LFxuICByZXF1ZXN0XG59XG5cbmZ1bmN0aW9uIHVuZGVyd3JpdGVBY2NlcHRIZWFkZXIoaGVhZGVycywgYWNjZXB0KSB7XG4gIGNvbnN0IG5hbWUgPSBBQ0NFUFRfSEVBREVSLCAgLy8vXG4gICAgICAgIHZhbHVlID0gYWNjZXB0OyAvLy9cblxuICB1bmRlcndyaXRlKGhlYWRlcnMsIG5hbWUsIHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gdW5kZXJ3cml0ZUNvbnRlbnRUeXBlSGVhZGVyKGhlYWRlcnMsIGNvbnRlbnRUWXBlKSB7XG4gIGNvbnN0IG5hbWUgPSBDT05URU5UX1RZUEVfSEVBREVSLCAgLy8vXG4gICAgICAgIHZhbHVlID0gY29udGVudFRZcGU7IC8vL1xuXG4gIHVuZGVyd3JpdGUoaGVhZGVycywgbmFtZSwgdmFsdWUpO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBmaXJzdCwgc2Vjb25kLCBsYXN0IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNQYXRoTmFtZShwYXRoKSB7XG4gIHBhdGggPSBwYXRoLnJlcGxhY2UoL15cXC8vLCBFTVBUWV9TVFJJTkcpLnJlcGxhY2UoL1xcLyQvLCBFTVBUWV9TVFJJTkcpOyAvLy9cblxuICBjb25zdCBwYXRoTmFtZSA9ICgvXFwvLy50ZXN0KHBhdGgpID09PSBmYWxzZSk7XG5cbiAgcmV0dXJuIHBhdGhOYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQYXRoVG9wbW9zdE5hbWUocGF0aCkge1xuICBjb25zdCBwYXRoTmFtZSA9IGlzUGF0aE5hbWUocGF0aCksXG4gICAgICAgIHBhdGhBYnNvbHV0ZVBhdGggPSBpc1BhdGhBYnNvbHV0ZVBhdGgocGF0aCksXG4gICAgICAgIHBhdGhUb3Btb3N0TmFtZSA9IChwYXRoTmFtZSAmJiBwYXRoQWJzb2x1dGVQYXRoKTtcblxuICByZXR1cm4gcGF0aFRvcG1vc3ROYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQYXRoUmVsYXRpdmVQYXRoKHBhdGgpIHtcbiAgY29uc3QgcGF0aFJlbGF0aXZlUGF0aCA9ICEvXlxcLy8udGVzdChwYXRoKTtcblxuICByZXR1cm4gcGF0aFJlbGF0aXZlUGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aEFic29sdXRlUGF0aChwYXRoKSB7XG4gIGNvbnN0IHBhdGhBYnNvbHV0ZVBhdGggPSAvXlxcLy8udGVzdChwYXRoKTtcblxuICByZXR1cm4gcGF0aEFic29sdXRlUGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVG9wbW9zdE5hbWVJbkFic29sdXRlUGF0aCh0b3Btb3N0TmFtZSwgYWJzb2x1dGVQYXRoKSB7XG4gIGNvbnN0IHJlZ0V4cCA9IG5ldyBSZWdFeHAoYF4ke3RvcG1vc3ROYW1lfSg/OlxcXFwvLispPyRgKSxcbiAgICAgICAgdG9wbW9zdE5hbWVJbkFic29sdXRlUGF0aCA9IHJlZ0V4cC50ZXN0KGFic29sdXRlUGF0aCk7XG5cbiAgcmV0dXJuIHRvcG1vc3ROYW1lSW5BYnNvbHV0ZVBhdGhcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmVQYXRocyhwYXRoLCByZWxhdGl2ZVBhdGgpIHtcbiAgbGV0IGNvbWJpbmVkUGF0aCA9IG51bGw7XG5cbiAgY29uc3QgcGF0aE5hbWVzID0gcGF0aC5zcGxpdCgvXFwvLyksXG4gICAgICAgIHJlbGF0aXZlUGF0aE5hbWVzID0gcmVsYXRpdmVQYXRoLnNwbGl0KC9cXC8vKTtcblxuICBsZXQgbGFzdFBhdGhOYW1lLFxuICAgICAgZmlyc3RSZWxhdGl2ZVBhdGhOYW1lID0gZmlyc3QocmVsYXRpdmVQYXRoTmFtZXMpO1xuXG4gIGlmIChmaXJzdFJlbGF0aXZlUGF0aE5hbWUgPT09IFwiLlwiKSB7XG4gICAgcmVsYXRpdmVQYXRoTmFtZXMuc2hpZnQoKTtcbiAgfVxuXG4gIGZpcnN0UmVsYXRpdmVQYXRoTmFtZSA9IGZpcnN0KHJlbGF0aXZlUGF0aE5hbWVzKTtcbiAgbGFzdFBhdGhOYW1lID0gbGFzdChwYXRoTmFtZXMpO1xuXG4gIHdoaWxlICgoZmlyc3RSZWxhdGl2ZVBhdGhOYW1lID09PSBcIi4uXCIpICYmIChsYXN0UGF0aE5hbWUgIT09IHVuZGVmaW5lZCkpIHtcbiAgICByZWxhdGl2ZVBhdGhOYW1lcy5zaGlmdCgpO1xuICAgIHBhdGhOYW1lcy5wb3AoKTtcblxuICAgIGZpcnN0UmVsYXRpdmVQYXRoTmFtZSA9IGZpcnN0KHJlbGF0aXZlUGF0aE5hbWVzKTtcbiAgICBsYXN0UGF0aE5hbWUgPSBsYXN0KHBhdGhOYW1lcyk7XG4gIH1cblxuICBpZiAobGFzdFBhdGhOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBjb21iaW5lZFBhdGhOYW1lcyA9IFtdLmNvbmNhdChwYXRoTmFtZXMpLmNvbmNhdChyZWxhdGl2ZVBhdGhOYW1lcyk7XG5cbiAgICBjb21iaW5lZFBhdGggPSBjb21iaW5lZFBhdGhOYW1lcy5qb2luKFwiL1wiKTtcbiAgfVxuXG4gIHJldHVybiBjb21iaW5lZFBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jYXRlbmF0ZVBhdGhzKHBhdGgsIHJlbGF0aXZlUGF0aCkge1xuICBwYXRoID0gcGF0aC5yZXBsYWNlKC9cXC8kLywgRU1QVFlfU1RSSU5HKTsgIC8vL1xuXG4gIGNvbnN0IGNvbmNhdGVuYXRlZFBhdGggPSBgJHtwYXRofS8ke3JlbGF0aXZlUGF0aH1gO1xuXG4gIHJldHVybiBjb25jYXRlbmF0ZWRQYXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYm90dG9tbW9zdE5hbWVGcm9tUGF0aChwYXRoKSB7XG4gIGxldCBib3R0b21tb3N0TmFtZSA9IG51bGw7XG5cbiAgY29uc3QgbWF0Y2hlcyA9IHBhdGgubWF0Y2goL14uKlxcLyhbXlxcL10rXFwvPykkLyk7XG5cbiAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICBjb25zdCBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKTtcblxuICAgIGJvdHRvbW1vc3ROYW1lID0gc2Vjb25kTWF0Y2g7ICAvLy9cbiAgfVxuXG4gIHJldHVybiBib3R0b21tb3N0TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvcG1vc3REaXJlY3RvcnlQYXRoRnJvbVBhdGgocGF0aCkge1xuICBjb25zdCBtYXRjaGVzID0gcGF0aC5tYXRjaCgvXiguKylcXC9bXlxcL10rXFwvPyQvKSxcbiAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyksXG4gICAgICAgIHRvcG1vc3REaXJlY3RvcnlQYXRoID0gc2Vjb25kTWF0Y2g7IC8vL1xuXG4gIHJldHVybiB0b3Btb3N0RGlyZWN0b3J5UGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvcG1vc3REaXJlY3RvcnlOYW1lRnJvbVBhdGgocGF0aCkge1xuICBsZXQgdG9wbW9zdERpcmVjdG9yeU5hbWUgPSBudWxsO1xuXG4gIGNvbnN0IG1hdGNoZXMgPSBwYXRoLm1hdGNoKC9eKFteXFwvXSspXFwvLiskLyk7XG5cbiAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICBjb25zdCBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKTtcblxuICAgIHRvcG1vc3REaXJlY3RvcnlOYW1lID0gc2Vjb25kTWF0Y2g7ICAvLy9cbiAgfVxuXG4gIHJldHVybiB0b3Btb3N0RGlyZWN0b3J5TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhXaXRob3V0Qm90dG9tbW9zdE5hbWVGcm9tUGF0aChwYXRoKSB7XG4gIGxldCBwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lID0gbnVsbDtcblxuICBjb25zdCBtYXRjaGVzID0gcGF0aC5tYXRjaCgvXiguKilcXC9bXlxcL10rXFwvPyQvKTtcblxuICBpZiAobWF0Y2hlcyAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpO1xuXG4gICAgcGF0aFdpdGhvdXRCb3R0b21tb3N0TmFtZSA9IHNlY29uZE1hdGNoOyAvLy9cbiAgfVxuXG4gIHJldHVybiBwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aFdpdGhvdXRUb3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoKHBhdGgpIHtcbiAgbGV0IHBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWUgPSBudWxsO1xuXG4gIGNvbnN0IG1hdGNoZXMgPSBwYXRoLm1hdGNoKC9eW15cXC9dK1xcLyguKykkLyk7XG5cbiAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICBjb25zdCBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKTtcblxuICAgIHBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWUgPSBzZWNvbmRNYXRjaDtcbiAgfVxuXG4gIHJldHVybiBwYXRoV2l0aG91dFRvcG1vc3REaXJlY3RvcnlOYW1lO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGlzUGF0aE5hbWUsXG4gIGlzUGF0aFRvcG1vc3ROYW1lLFxuICBpc1BhdGhSZWxhdGl2ZVBhdGgsXG4gIGlzUGF0aEFic29sdXRlUGF0aCxcbiAgaXNUb3Btb3N0TmFtZUluQWJzb2x1dGVQYXRoLFxuICBjb21iaW5lUGF0aHMsXG4gIGNvbmNhdGVuYXRlUGF0aHMsXG4gIGJvdHRvbW1vc3ROYW1lRnJvbVBhdGgsXG4gIHRvcG1vc3REaXJlY3RvcnlQYXRoRnJvbVBhdGgsXG4gIHRvcG1vc3REaXJlY3RvcnlOYW1lRnJvbVBhdGgsXG4gIHBhdGhXaXRob3V0Qm90dG9tbW9zdE5hbWVGcm9tUGF0aCxcbiAgcGF0aFdpdGhvdXRUb3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHdoaWxzdChvcGVyYXRpb24sIGRvbmUsIGNvbnRleHQpIHtcclxuICBsZXQgY291bnQgPSAtMTtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgaW5kZXggPSBjb3VudCwgIC8vL1xyXG4gICAgICAgICAgdGVybWluYXRlID0gb3BlcmF0aW9uKG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5leHQoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZvckVhY2goYXJyYXksIG9wZXJhdGlvbiwgZG9uZSwgY29udGV4dCkge1xyXG4gIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsgIC8vL1xyXG5cclxuICBsZXQgY291bnQgPSAtMTtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSBsZW5ndGgpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaW5kZXggPSBjb3VudCwgIC8vL1xyXG4gICAgICAgICAgICBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xyXG5cclxuICAgICAgb3BlcmF0aW9uKGVsZW1lbnQsIG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5leHQoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNlcXVlbmNlKG9wZXJhdGlvbnMsIGRvbmUsIGNvbnRleHQpIHtcclxuICBjb25zdCBsZW5ndGggPSBvcGVyYXRpb25zLmxlbmd0aDsgIC8vL1xyXG5cclxuICBsZXQgY291bnQgPSAtMTtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSBsZW5ndGgpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaW5kZXggPSBjb3VudCwgIC8vL1xyXG4gICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25zW2luZGV4XTtcclxuXHJcbiAgICAgIG9wZXJhdGlvbihuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZXh0KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBldmVudHVhbGx5KG9wZXJhdGlvbnMsIGRvbmUsIGNvbnRleHQpIHtcclxuICBjb25zdCBsZW5ndGggPSBvcGVyYXRpb25zLmxlbmd0aDsgIC8vL1xyXG5cclxuICBsZXQgY291bnQgPSAwO1xyXG5cclxuICBmdW5jdGlvbiBuZXh0KCkge1xyXG4gICAgY291bnQrKztcclxuXHJcbiAgICBjb25zdCB0ZXJtaW5hdGUgPSAoY291bnQgPT09IGxlbmd0aCk7XHJcblxyXG4gICAgaWYgKHRlcm1pbmF0ZSkge1xyXG4gICAgICBkb25lKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvcGVyYXRpb25zLmZvckVhY2goKG9wZXJhdGlvbiwgaW5kZXgpID0+IHtcclxuICAgIG9wZXJhdGlvbihuZXh0LCBkb25lLCBjb250ZXh0LCBpbmRleCk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZXBlYXRlZGx5KG9wZXJhdGlvbiwgbGVuZ3RoLCBkb25lLCBjb250ZXh0KSB7XHJcbiAgbGV0IGNvdW50ID0gMDtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSBsZW5ndGgpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgb3BlcmF0aW9uKG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkc0ZvckVhY2goYXJyYXksIG9wZXJhdGlvbiwgZG9uZSwgY29udGV4dCkge1xyXG4gIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsgIC8vL1xyXG5cclxuICBsZXQgY291bnQgPSAtMTtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50Kys7XHJcblxyXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSBsZW5ndGgpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaW5kZXggPSBjb3VudCwgIC8vL1xyXG4gICAgICAgICAgICBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xyXG5cclxuICAgICAgb3BlcmF0aW9uKGVsZW1lbnQsIG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5leHQoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGJhY2t3YXJkc0ZvckVhY2goYXJyYXksIG9wZXJhdGlvbiwgZG9uZSwgY29udGV4dCkge1xyXG4gIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsgIC8vL1xyXG5cclxuICBsZXQgY291bnQgPSBsZW5ndGg7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudC0tO1xyXG5cclxuICAgIGNvbnN0IHRlcm1pbmF0ZSA9IChjb3VudCA9PT0gLTEpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaW5kZXggPSBjb3VudCwgIC8vL1xyXG4gICAgICAgICAgICBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xyXG5cclxuICAgICAgb3BlcmF0aW9uKGVsZW1lbnQsIG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5leHQoKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIHdoaWxzdCxcclxuICBmb3JFYWNoLFxyXG4gIHNlcXVlbmNlLFxyXG4gIGV2ZW50dWFsbHksXHJcbiAgcmVwZWF0ZWRseSxcclxuICBmb3J3YXJkc0ZvckVhY2gsXHJcbiAgYmFja3dhcmRzRm9yRWFjaFxyXG59O1xyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgbGV2ZWxzIH0gZnJvbSBcIi4vbGV2ZWxzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG1ldGhvZHMgfSBmcm9tIFwiLi9tZXRob2RzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGhlYWRlcnMgfSBmcm9tIFwiLi9oZWFkZXJzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGtleUNvZGVzIH0gZnJvbSBcIi4va2V5Q29kZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZW5jb2RpbmdzIH0gZnJvbSBcIi4vZW5jb2RpbmdzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNoYXJhY3RlcnMgfSBmcm9tIFwiLi9jaGFyYWN0ZXJzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHN0YXR1c0NvZGVzIH0gZnJvbSBcIi4vc3RhdHVzQ29kZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY29udGVudFR5cGVzIH0gZnJvbSBcIi4vY29udGVudFR5cGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHN0YXR1c01lc3NhZ2VzIH0gZnJvbSBcIi4vc3RhdHVzTWVzc2FnZXNcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBhamF4VXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FqYXhcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBwYXRoVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3BhdGhcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaHR0cFV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9odHRwXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FycmF5XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGFzeW5jaHJvbm91c1V0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9hc3luY2hyb25vdXNcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7IGNoYXJhY3RlcnMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XHJcblxyXG5jb25zdCB7IExFU1NfVEhBTl9DSEFSQUNURVIsIEFNUEVSU0FORF9DSEFSQUNURVIsIEdSRUFURVJfVEhBTl9DSEFSQUNURVIgfSA9IGNoYXJhY3RlcnM7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2FuaXRpc2VDb250ZW50KGNvbnRlbnQpIHtcclxuICBjb25zdCBzYW5pdGlzZWRDb250ZW50ID0gY29udGVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLyYvLCBBTVBFUlNBTkRfQ0hBUkFDVEVSKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLzwvLCBMRVNTX1RIQU5fQ0hBUkFDVEVSKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLz4vLCBHUkVBVEVSX1RIQU5fQ0hBUkFDVEVSKTtcclxuXHJcbiAgcmV0dXJuIHNhbml0aXNlZENvbnRlbnQ7XHJcbn1cclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgdHlwZVR5cGUgPSBcInR5cGVcIjtcbmV4cG9ydCBjb25zdCBuYW1lVHlwZSA9IFwibmFtZVwiO1xuZXhwb3J0IGNvbnN0IGNvbW1lbnRUeXBlID0gXCJjb21tZW50XCI7XG5leHBvcnQgY29uc3QgZW5kT2ZMaW5lVHlwZSA9IFwiZW5kLW9mLWxpbmVcIjtcbmV4cG9ydCBjb25zdCB3aGl0ZXNwYWNlVHlwZSA9IFwid2hpdGVzcGFjZVwiO1xuZXhwb3J0IGNvbnN0IHN0cmluZ0xpdGVyYWxUeXBlID0gXCJzdHJpbmctbGl0ZXJhbFwiO1xuZXhwb3J0IGNvbnN0IGVuZE9mTGluZUNvbW1lbnRUeXBlID0gYCR7ZW5kT2ZMaW5lVHlwZX0gJHtjb21tZW50VHlwZX1gO1xuZXhwb3J0IGNvbnN0IHNpbmdsZUxpbmVDb21tZW50VHlwZSA9IGBzaW5nbGUtbGluZSAke2NvbW1lbnRUeXBlfWA7XG5leHBvcnQgY29uc3QgcmVndWxhckV4cHJlc3Npb25UeXBlID0gXCJyZWd1bGFyLWV4cHJlc3Npb25cIjtcbmV4cG9ydCBjb25zdCBlbmRPZk11bHRpTGluZUNvbW1lbnRUeXBlID0gYGVuZC1vZi1tdWx0aS1saW5lICR7Y29tbWVudFR5cGV9YDtcbmV4cG9ydCBjb25zdCBzdGFydE9mTXVsdGlMaW5lQ29tbWVudFR5cGUgPSBgc3RhcnQtb2YtbXVsdGktbGluZSAke2NvbW1lbnRUeXBlfWA7XG5leHBvcnQgY29uc3QgbWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VHlwZSA9IGBtaWRkbGUtb2YtbXVsdGktbGluZSAke2NvbW1lbnRUeXBlfWA7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgdHlwZVR5cGUsXG4gIG5hbWVUeXBlLFxuICBjb21tZW50VHlwZSxcbiAgZW5kT2ZMaW5lVHlwZSxcbiAgd2hpdGVzcGFjZVR5cGUsXG4gIHN0cmluZ0xpdGVyYWxUeXBlLFxuICBlbmRPZkxpbmVDb21tZW50VHlwZSxcbiAgc2luZ2xlTGluZUNvbW1lbnRUeXBlLFxuICByZWd1bGFyRXhwcmVzc2lvblR5cGUsXG4gIGVuZE9mTXVsdGlMaW5lQ29tbWVudFR5cGUsXG4gIHN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VHlwZSxcbiAgbWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VHlwZVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfbmVjZXNzYXJ5ID0gcmVxdWlyZShcIm5lY2Vzc2FyeVwiKTtcbnZhciBfY29udGVudCA9IHJlcXVpcmUoXCIuL3V0aWxpdGllcy9jb250ZW50XCIpO1xudmFyIF90eXBlcyA9IHJlcXVpcmUoXCIuL3R5cGVzXCIpO1xuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcbiAgICBmb3IodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKylhcnIyW2ldID0gYXJyW2ldO1xuICAgIHJldHVybiBhcnIyO1xufVxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShhcnIpO1xufVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkge1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7XG4gICAgdHJ5IHtcbiAgICAgICAgRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChEYXRlLCBbXSwgZnVuY3Rpb24oKSB7fSkpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5mdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgICBpZiAoaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkpIHtcbiAgICAgICAgX2NvbnN0cnVjdCA9IFJlZmxlY3QuY29uc3RydWN0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIF9jb25zdHJ1Y3QgPSBmdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgICAgICAgICAgIHZhciBhID0gW1xuICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBhLnB1c2guYXBwbHkoYSwgYXJncyk7XG4gICAgICAgICAgICB2YXIgQ29uc3RydWN0b3IgPSBGdW5jdGlvbi5iaW5kLmFwcGx5KFBhcmVudCwgYSk7XG4gICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQ29uc3RydWN0b3IoKTtcbiAgICAgICAgICAgIGlmIChDbGFzcykgX3NldFByb3RvdHlwZU9mKGluc3RhbmNlLCBDbGFzcy5wcm90b3R5cGUpO1xuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gX2NvbnN0cnVjdC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xufVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG59XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBpdGVyW1N5bWJvbC5pdGVyYXRvcl0gIT0gbnVsbCB8fCBpdGVyW1wiQEBpdGVyYXRvclwiXSAhPSBudWxsKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTtcbn1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICAgICAgby5fX3Byb3RvX18gPSBwO1xuICAgICAgICByZXR1cm4gbztcbiAgICB9O1xuICAgIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59XG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7XG4gICAgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTtcbn1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHtcbiAgICBpZiAoIW8pIHJldHVybjtcbiAgICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICAgIHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTtcbiAgICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG4pO1xuICAgIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbn1cbnZhciBmaXJzdCA9IF9uZWNlc3NhcnkuYXJyYXlVdGlsaXRpZXMuZmlyc3Q7XG52YXIgVG9rZW4gPSAvKiNfX1BVUkVfXyovIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIFRva2VuKHR5cGUsIGNvbnRlbnQsIGlubmVySFRNTCwgc2lnbmlmaWNhbnQpIHtcbiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFRva2VuKTtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICAgICAgdGhpcy5jb250ZW50ID0gY29udGVudDtcbiAgICAgICAgdGhpcy5pbm5lckhUTUwgPSBpbm5lckhUTUw7XG4gICAgICAgIHRoaXMuc2lnbmlmaWNhbnQgPSBzaWduaWZpY2FudDtcbiAgICB9XG4gICAgX2NyZWF0ZUNsYXNzKFRva2VuLCBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJnZXRUeXBlXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VHlwZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50eXBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiZ2V0Q29udGVudFwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldENvbnRlbnQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImdldElubmVySFRNTFwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldElubmVySFRNTCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbm5lckhUTUw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJnZXRDb250ZW50TGVuZ3RoXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Q29udGVudExlbmd0aCgpIHtcbiAgICAgICAgICAgICAgICB2YXIgY29udGVudExlbmd0aCA9IHRoaXMuY29udGVudC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnRMZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJpc1NpZ25pZmljYW50XCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gaXNTaWduaWZpY2FudCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaWduaWZpY2FudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImlzQ29tbWVudFRva2VuXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gaXNDb21tZW50VG9rZW4oKSB7XG4gICAgICAgICAgICAgICAgdmFyIHR5cGVJbmNsdWRlc0NvbW1lbnRUeXBlID0gdGhpcy50eXBlLmluY2x1ZGVzKF90eXBlcy5jb21tZW50VHlwZSksIGNvbW1lbnRUb2tlbiA9IHR5cGVJbmNsdWRlc0NvbW1lbnRUeXBlOyAvLy9cbiAgICAgICAgICAgICAgICByZXR1cm4gY29tbWVudFRva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiaXNFbmRPZkxpbmVUb2tlblwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGlzRW5kT2ZMaW5lVG9rZW4oKSB7XG4gICAgICAgICAgICAgICAgdmFyIHR5cGVFbmRPZkxpbmVUeXBlID0gdGhpcy50eXBlLmluY2x1ZGVzKF90eXBlcy5lbmRPZkxpbmVUeXBlKSwgZW5kT2ZMaW5lVG9rZW4gPSB0eXBlRW5kT2ZMaW5lVHlwZTsgLy8vXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuZE9mTGluZVRva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiaXNXaGl0ZXNwYWNlVG9rZW5cIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBpc1doaXRlc3BhY2VUb2tlbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgdHlwZVdoaXRlc3BhY2VUeXBlID0gdGhpcy50eXBlID09PSBfdHlwZXMud2hpdGVzcGFjZVR5cGUsIHdoaXRlc3BhY2VUb2tlbiA9IHR5cGVXaGl0ZXNwYWNlVHlwZTsgLy8vXG4gICAgICAgICAgICAgICAgcmV0dXJuIHdoaXRlc3BhY2VUb2tlbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImlzRXF1YWxUb1wiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGlzRXF1YWxUbyh0b2tlbikge1xuICAgICAgICAgICAgICAgIHZhciBlcXVhbFRvVG9rZW4gPSB0aGlzID09PSB0b2tlbjtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXF1YWxUb1Rva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwibWF0Y2hcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBtYXRjaCh0b2tlbikge1xuICAgICAgICAgICAgICAgIHZhciB0eXBlID0gdG9rZW4uZ2V0VHlwZSgpLCBjb250ZW50ID0gdG9rZW4uZ2V0Q29udGVudCgpLCBzaWduaWZpY2FudCA9IHRva2VuLmlzU2lnbmlmaWNhbnQoKSwgbWF0Y2hlcyA9IHRoaXMudHlwZSA9PT0gdHlwZSAmJiB0aGlzLmNvbnRlbnQgPT09IGNvbnRlbnQgJiYgdGhpcy5zaWduaWZpY2FudCA9PT0gc2lnbmlmaWNhbnQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJhc0hUTUxcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBhc0hUTUwoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNsYXNzTmFtZSA9IHRoaXMudHlwZSwgaHRtbCA9IFwiPHNwYW4gY2xhc3M9XFxcIlwiLmNvbmNhdChjbGFzc05hbWUsIFwiXFxcIj5cIikuY29uY2F0KHRoaXMuaW5uZXJIVE1MLCBcIjwvc3Bhbj5cIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGh0bWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJjbG9uZVwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbiwgc2lnbmlmaWNhbnQpIHtcbiAgICAgICAgICAgICAgICBmb3IodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByZW1haW5pbmdBcmd1bWVudHMgPSBuZXcgQXJyYXkoX2xlbiA+IDQgPyBfbGVuIC0gNCA6IDApLCBfa2V5ID0gNDsgX2tleSA8IF9sZW47IF9rZXkrKyl7XG4gICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZ0FyZ3VtZW50c1tfa2V5IC0gNF0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciB0b2tlbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXJ0UG9zaXRpb24gIT09IGVuZFBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBjb250ZW50LnN1YnN0cmluZyhzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IC8vL1xuICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHRoaXMuZ2V0VHlwZSgpLCBzYW5pdGlzZWRDb250ZW50ID0gKDAsIF9jb250ZW50KS5zYW5pdGlzZUNvbnRlbnQoY29udGVudCksIGlubmVySFRNTCA9IHNhbml0aXNlZENvbnRlbnQ7IC8vL1xuICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IF9jb25zdHJ1Y3QoQ2xhc3MsIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXJIVE1MLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmlmaWNhbnRcbiAgICAgICAgICAgICAgICAgICAgXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHJlbWFpbmluZ0FyZ3VtZW50cykpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgXSwgW1xuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwibWF0Y2hcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBtYXRjaChDbGFzcywgY29udGVudCwgc2lnbmlmaWNhbnQpIHtcbiAgICAgICAgICAgICAgICBmb3IodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByZW1haW5pbmdBcmd1bWVudHMgPSBuZXcgQXJyYXkoX2xlbiA+IDMgPyBfbGVuIC0gMyA6IDApLCBfa2V5ID0gMzsgX2tleSA8IF9sZW47IF9rZXkrKyl7XG4gICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZ0FyZ3VtZW50c1tfa2V5IC0gM10gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciB0b2tlbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgdmFyIHJlZ3VsYXJFeHByZXNzaW9uID0gQ2xhc3MucmVndWxhckV4cHJlc3Npb24sIG1hdGNoZXMgPSBjb250ZW50Lm1hdGNoKHJlZ3VsYXJFeHByZXNzaW9uKTtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBtYXRjaGVzLmluZGV4O1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaXJzdE1hdGNoID0gZmlyc3QobWF0Y2hlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50ID0gZmlyc3RNYXRjaDsgLy8vXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udGVudExlbmd0aCA9IGNvbnRlbnQubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRMZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGUgPSBDbGFzcy50eXBlLCBzYW5pdGlzZWRDb250ZW50ID0gKDAsIF9jb250ZW50KS5zYW5pdGlzZUNvbnRlbnQoY29udGVudCksIGlubmVySFRNTCA9IHNhbml0aXNlZENvbnRlbnQ7IC8vL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gX2NvbnN0cnVjdChDbGFzcywgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lckhUTUwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25pZmljYW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHJlbWFpbmluZ0FyZ3VtZW50cykpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJmcm9tQ29udGVudFwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50LCBzaWduaWZpY2FudCkge1xuICAgICAgICAgICAgICAgIGZvcih2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlbWFpbmluZ0FyZ3VtZW50cyA9IG5ldyBBcnJheShfbGVuID4gMyA/IF9sZW4gLSAzIDogMCksIF9rZXkgPSAzOyBfa2V5IDwgX2xlbjsgX2tleSsrKXtcbiAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nQXJndW1lbnRzW19rZXkgLSAzXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIHR5cGUgPSBDbGFzcy50eXBlLCBzYW5pdGlzZWRDb250ZW50ID0gKDAsIF9jb250ZW50KS5zYW5pdGlzZUNvbnRlbnQoY29udGVudCksIGlubmVySFRNTCA9IHNhbml0aXNlZENvbnRlbnQsIHRva2VuID0gX2NvbnN0cnVjdChDbGFzcywgW1xuICAgICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgICAgICAgICBpbm5lckhUTUwsXG4gICAgICAgICAgICAgICAgICAgIHNpZ25pZmljYW50XG4gICAgICAgICAgICAgICAgXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHJlbWFpbmluZ0FyZ3VtZW50cykpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJmcm9tQ29udGVudEFuZFR5cGVcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBmcm9tQ29udGVudEFuZFR5cGUoQ2xhc3MsIGNvbnRlbnQsIHR5cGUsIHNpZ25pZmljYW50KSB7XG4gICAgICAgICAgICAgICAgZm9yKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVtYWluaW5nQXJndW1lbnRzID0gbmV3IEFycmF5KF9sZW4gPiA0ID8gX2xlbiAtIDQgOiAwKSwgX2tleSA9IDQ7IF9rZXkgPCBfbGVuOyBfa2V5Kyspe1xuICAgICAgICAgICAgICAgICAgICByZW1haW5pbmdBcmd1bWVudHNbX2tleSAtIDRdID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgc2FuaXRpc2VkQ29udGVudCA9ICgwLCBfY29udGVudCkuc2FuaXRpc2VDb250ZW50KGNvbnRlbnQpLCBpbm5lckhUTUwgPSBzYW5pdGlzZWRDb250ZW50LCB0b2tlbiA9IF9jb25zdHJ1Y3QoQ2xhc3MsIFtcbiAgICAgICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJIVE1MLFxuICAgICAgICAgICAgICAgICAgICBzaWduaWZpY2FudFxuICAgICAgICAgICAgICAgIF0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShyZW1haW5pbmdBcmd1bWVudHMpKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgXSk7XG4gICAgcmV0dXJuIFRva2VuO1xufSgpO1xuZXhwb3J0cy5kZWZhdWx0ID0gVG9rZW47XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMM055WXk5MGIydGxiaTVxY3lKZExDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SmNJblZ6WlNCemRISnBZM1JjSWp0Y2JseHVhVzF3YjNKMElIc2dZWEp5WVhsVmRHbHNhWFJwWlhNZ2ZTQm1jbTl0SUZ3aWJtVmpaWE56WVhKNVhDSTdYRzVjYm1sdGNHOXlkQ0I3SUhOaGJtbDBhWE5sUTI5dWRHVnVkQ0I5SUdaeWIyMGdYQ0l1TDNWMGFXeHBkR2xsY3k5amIyNTBaVzUwWENJN1hHNXBiWEJ2Y25RZ2V5QmpiMjF0Wlc1MFZIbHdaU3dnWlc1a1QyWk1hVzVsVkhsd1pTd2dkMmhwZEdWemNHRmpaVlI1Y0dVZ2ZTQm1jbTl0SUZ3aUxpOTBlWEJsYzF3aU8xeHVYRzVqYjI1emRDQjdJR1pwY25OMElIMGdQU0JoY25KaGVWVjBhV3hwZEdsbGN6dGNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdZMnhoYzNNZ1ZHOXJaVzRnZTF4dUlDQmpiMjV6ZEhKMVkzUnZjaWgwZVhCbExDQmpiMjUwWlc1MExDQnBibTVsY2toVVRVd3NJSE5wWjI1cFptbGpZVzUwS1NCN1hHNGdJQ0FnZEdocGN5NTBlWEJsSUQwZ2RIbHdaVHRjYmlBZ0lDQjBhR2x6TG1OdmJuUmxiblFnUFNCamIyNTBaVzUwTzF4dUlDQWdJSFJvYVhNdWFXNXVaWEpJVkUxTUlEMGdhVzV1WlhKSVZFMU1PMXh1SUNBZ0lIUm9hWE11YzJsbmJtbG1hV05oYm5RZ1BTQnphV2R1YVdacFkyRnVkRHRjYmlBZ2ZWeHVYRzRnSUdkbGRGUjVjR1VvS1NCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdWRIbHdaVHRjYmlBZ2ZWeHVYRzRnSUdkbGRFTnZiblJsYm5Rb0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVZMjl1ZEdWdWREdGNiaUFnZlZ4dUlDQmNiaUFnWjJWMFNXNXVaWEpJVkUxTUtDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbWx1Ym1WeVNGUk5URHRjYmlBZ2ZWeHVYRzRnSUdkbGRFTnZiblJsYm5STVpXNW5kR2dvS1NCN1hHNGdJQ0FnWTI5dWMzUWdZMjl1ZEdWdWRFeGxibWQwYUNBOUlIUm9hWE11WTI5dWRHVnVkQzVzWlc1bmRHZzdYRzVjYmlBZ0lDQnlaWFIxY200Z1kyOXVkR1Z1ZEV4bGJtZDBhRHRjYmlBZ2ZWeHVYRzRnSUdselUybG5ibWxtYVdOaGJuUW9LU0I3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11YzJsbmJtbG1hV05oYm5RN1hHNGdJSDFjYmlBZ1hHNGdJR2x6UTI5dGJXVnVkRlJ2YTJWdUtDa2dlMXh1SUNBZ0lHTnZibk4wSUhSNWNHVkpibU5zZFdSbGMwTnZiVzFsYm5SVWVYQmxJRDBnZEdocGN5NTBlWEJsTG1sdVkyeDFaR1Z6S0dOdmJXMWxiblJVZVhCbEtTeGNiaUFnSUNBZ0lDQWdJQ0JqYjIxdFpXNTBWRzlyWlc0Z1BTQjBlWEJsU1c1amJIVmtaWE5EYjIxdFpXNTBWSGx3WlRzZ0x5OHZYRzVjYmlBZ0lDQnlaWFIxY200Z1kyOXRiV1Z1ZEZSdmEyVnVPMXh1SUNCOVhHNWNiaUFnYVhORmJtUlBaa3hwYm1WVWIydGxiaWdwSUh0Y2JpQWdJQ0JqYjI1emRDQjBlWEJsUlc1a1QyWk1hVzVsVkhsd1pTQTlJQ2gwYUdsekxuUjVjR1V1YVc1amJIVmtaWE1vWlc1a1QyWk1hVzVsVkhsd1pTa3BMRnh1SUNBZ0lDQWdJQ0FnSUdWdVpFOW1UR2x1WlZSdmEyVnVJRDBnZEhsd1pVVnVaRTltVEdsdVpWUjVjR1U3SUM4dkwxeHVYRzRnSUNBZ2NtVjBkWEp1SUdWdVpFOW1UR2x1WlZSdmEyVnVPMXh1SUNCOVhHNWNiaUFnYVhOWGFHbDBaWE53WVdObFZHOXJaVzRvS1NCN1hHNGdJQ0FnWTI5dWMzUWdkSGx3WlZkb2FYUmxjM0JoWTJWVWVYQmxJRDBnS0hSb2FYTXVkSGx3WlNBOVBUMGdkMmhwZEdWemNHRmpaVlI1Y0dVcExGeHVJQ0FnSUNBZ0lDQWdJSGRvYVhSbGMzQmhZMlZVYjJ0bGJpQTlJSFI1Y0dWWGFHbDBaWE53WVdObFZIbHdaVHNnTHk4dlhHNWNiaUFnSUNCeVpYUjFjbTRnZDJocGRHVnpjR0ZqWlZSdmEyVnVPMXh1SUNCOVhHNWNiaUFnYVhORmNYVmhiRlJ2S0hSdmEyVnVLU0I3WEc0Z0lDQWdZMjl1YzNRZ1pYRjFZV3hVYjFSdmEyVnVJRDBnS0hSb2FYTWdQVDA5SUhSdmEyVnVLVHRjYmx4dUlDQWdJSEpsZEhWeWJpQmxjWFZoYkZSdlZHOXJaVzQ3WEc0Z0lIMWNibHh1SUNCdFlYUmphQ2gwYjJ0bGJpa2dlMXh1SUNBZ0lHTnZibk4wSUhSNWNHVWdQU0IwYjJ0bGJpNW5aWFJVZVhCbEtDa3NYRzRnSUNBZ0lDQWdJQ0FnWTI5dWRHVnVkQ0E5SUhSdmEyVnVMbWRsZEVOdmJuUmxiblFvS1N4Y2JpQWdJQ0FnSUNBZ0lDQnphV2R1YVdacFkyRnVkQ0E5SUhSdmEyVnVMbWx6VTJsbmJtbG1hV05oYm5Rb0tTeGNiaUFnSUNBZ0lDQWdJQ0J0WVhSamFHVnpJRDBnS0NoMGFHbHpMblI1Y0dVZ1BUMDlJSFI1Y0dVcElDWW1JQ2gwYUdsekxtTnZiblJsYm5RZ1BUMDlJR052Ym5SbGJuUXBJQ1ltSUNoMGFHbHpMbk5wWjI1cFptbGpZVzUwSUQwOVBTQnphV2R1YVdacFkyRnVkQ2twTzF4dVhHNGdJQ0FnY21WMGRYSnVJRzFoZEdOb1pYTTdYRzRnSUgxY2JseHVJQ0JoYzBoVVRVd29LU0I3WEc0Z0lDQWdZMjl1YzNRZ1kyeGhjM05PWVcxbElEMGdkR2hwY3k1MGVYQmxMQ0FnTHk4dlhHNGdJQ0FnSUNBZ0lDQWdhSFJ0YkNBOUlHQThjM0JoYmlCamJHRnpjejFjSWlSN1kyeGhjM05PWVcxbGZWd2lQaVI3ZEdocGN5NXBibTVsY2toVVRVeDlQQzl6Y0dGdVBtQTdYRzVjYmlBZ0lDQnlaWFIxY200Z2FIUnRiRHRjYmlBZ2ZWeHVYRzRnSUdOc2IyNWxLRU5zWVhOekxDQnpkR0Z5ZEZCdmMybDBhVzl1TENCbGJtUlFiM05wZEdsdmJpd2djMmxuYm1sbWFXTmhiblFzSUM0dUxuSmxiV0ZwYm1sdVowRnlaM1Z0Wlc1MGN5a2dlMXh1SUNBZ0lHeGxkQ0IwYjJ0bGJpQTlJRzUxYkd3N1hHNWNiaUFnSUNCcFppQW9jM1JoY25SUWIzTnBkR2x2YmlBaFBUMGdaVzVrVUc5emFYUnBiMjRwSUh0Y2JpQWdJQ0FnSUd4bGRDQmpiMjUwWlc1MElEMGdkR2hwY3k1blpYUkRiMjUwWlc1MEtDazdYRzVjYmlBZ0lDQWdJR052Ym5SbGJuUWdQU0JqYjI1MFpXNTBMbk4xWW5OMGNtbHVaeWh6ZEdGeWRGQnZjMmwwYVc5dUxDQmxibVJRYjNOcGRHbHZiaWs3SUNBdkx5OWNibHh1SUNBZ0lDQWdZMjl1YzNRZ2RIbHdaU0E5SUhSb2FYTXVaMlYwVkhsd1pTZ3BMRnh1SUNBZ0lDQWdJQ0FnSUNBZ2MyRnVhWFJwYzJWa1EyOXVkR1Z1ZENBOUlITmhibWwwYVhObFEyOXVkR1Z1ZENoamIyNTBaVzUwS1N4Y2JpQWdJQ0FnSUNBZ0lDQWdJR2x1Ym1WeVNGUk5UQ0E5SUhOaGJtbDBhWE5sWkVOdmJuUmxiblE3SUM4dkwxeHVYRzRnSUNBZ0lDQjBiMnRsYmlBOUlHNWxkeUJEYkdGemN5aDBlWEJsTENCamIyNTBaVzUwTENCcGJtNWxja2hVVFV3c0lITnBaMjVwWm1sallXNTBMQ0F1TGk1eVpXMWhhVzVwYm1kQmNtZDFiV1Z1ZEhNcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhKbGRIVnliaUIwYjJ0bGJqdGNiaUFnZlZ4dVhHNGdJSE4wWVhScFl5QnRZWFJqYUNoRGJHRnpjeXdnWTI5dWRHVnVkQ3dnYzJsbmJtbG1hV05oYm5Rc0lDNHVMbkpsYldGcGJtbHVaMEZ5WjNWdFpXNTBjeWtnZTF4dUlDQWdJR3hsZENCMGIydGxiaUE5SUc1MWJHdzdYRzVjYmlBZ0lDQmpiMjV6ZENCN0lISmxaM1ZzWVhKRmVIQnlaWE56YVc5dUlIMGdQU0JEYkdGemN5eGNiaUFnSUNBZ0lDQWdJQ0J0WVhSamFHVnpJRDBnWTI5dWRHVnVkQzV0WVhSamFDaHlaV2QxYkdGeVJYaHdjbVZ6YzJsdmJpazdYRzVjYmlBZ0lDQnBaaUFvYldGMFkyaGxjeUFoUFQwZ2JuVnNiQ2tnZTF4dUlDQWdJQ0FnWTI5dWMzUWdleUJwYm1SbGVDQjlJRDBnYldGMFkyaGxjenRjYmx4dUlDQWdJQ0FnYVdZZ0tHbHVaR1Y0SUQwOVBTQXdLU0I3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR1pwY25OMFRXRjBZMmdnUFNCbWFYSnpkQ2h0WVhSamFHVnpLVHRjYmx4dUlDQWdJQ0FnSUNCamIyNTBaVzUwSUQwZ1ptbHljM1JOWVhSamFEc2dMeTh2WEc1Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnWTI5dWRHVnVkRXhsYm1kMGFDQTlJR052Ym5SbGJuUXViR1Z1WjNSb08xeHVYRzRnSUNBZ0lDQWdJR2xtSUNoamIyNTBaVzUwVEdWdVozUm9JRDRnTUNrZ2UxeHVJQ0FnSUNBZ0lDQWdJR052Ym5OMElIc2dkSGx3WlNCOUlEMGdRMnhoYzNNc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2MyRnVhWFJwYzJWa1EyOXVkR1Z1ZENBOUlITmhibWwwYVhObFEyOXVkR1Z1ZENoamIyNTBaVzUwS1N4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcGJtNWxja2hVVFV3Z1BTQnpZVzVwZEdselpXUkRiMjUwWlc1ME95QXZMeTljYmx4dUlDQWdJQ0FnSUNBZ0lIUnZhMlZ1SUQwZ2JtVjNJRU5zWVhOektIUjVjR1VzSUdOdmJuUmxiblFzSUdsdWJtVnlTRlJOVEN3Z2MybG5ibWxtYVdOaGJuUXNJQzR1TG5KbGJXRnBibWx1WjBGeVozVnRaVzUwY3lrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNCeVpYUjFjbTRnZEc5clpXNDdYRzRnSUgxY2JseHVJQ0J6ZEdGMGFXTWdabkp2YlVOdmJuUmxiblFvUTJ4aGMzTXNJR052Ym5SbGJuUXNJSE5wWjI1cFptbGpZVzUwTENBdUxpNXlaVzFoYVc1cGJtZEJjbWQxYldWdWRITXBJSHRjYmlBZ0lDQmpiMjV6ZENCN0lIUjVjR1VnZlNBOUlFTnNZWE56TEZ4dUlDQWdJQ0FnSUNBZ0lITmhibWwwYVhObFpFTnZiblJsYm5RZ1BTQnpZVzVwZEdselpVTnZiblJsYm5Rb1kyOXVkR1Z1ZENrc1hHNGdJQ0FnSUNBZ0lDQWdhVzV1WlhKSVZFMU1JRDBnYzJGdWFYUnBjMlZrUTI5dWRHVnVkQ3dnTHk4dlhHNGdJQ0FnSUNBZ0lDQWdkRzlyWlc0Z1BTQnVaWGNnUTJ4aGMzTW9kSGx3WlN3Z1kyOXVkR1Z1ZEN3Z2FXNXVaWEpJVkUxTUxDQnphV2R1YVdacFkyRnVkQ3dnTGk0dWNtVnRZV2x1YVc1blFYSm5kVzFsYm5SektUdGNibHh1SUNBZ0lISmxkSFZ5YmlCMGIydGxianRjYmlBZ2ZWeHVYRzRnSUhOMFlYUnBZeUJtY205dFEyOXVkR1Z1ZEVGdVpGUjVjR1VvUTJ4aGMzTXNJR052Ym5SbGJuUXNJSFI1Y0dVc0lITnBaMjVwWm1sallXNTBMQ0F1TGk1eVpXMWhhVzVwYm1kQmNtZDFiV1Z1ZEhNcElIdGNiaUFnSUNCamIyNXpkQ0J6WVc1cGRHbHpaV1JEYjI1MFpXNTBJRDBnYzJGdWFYUnBjMlZEYjI1MFpXNTBLR052Ym5SbGJuUXBMRnh1SUNBZ0lDQWdJQ0FnSUdsdWJtVnlTRlJOVENBOUlITmhibWwwYVhObFpFTnZiblJsYm5Rc0lDOHZMMXh1SUNBZ0lDQWdJQ0FnSUhSdmEyVnVJRDBnYm1WM0lFTnNZWE56S0hSNWNHVXNJR052Ym5SbGJuUXNJR2x1Ym1WeVNGUk5UQ3dnYzJsbmJtbG1hV05oYm5Rc0lDNHVMbkpsYldGcGJtbHVaMEZ5WjNWdFpXNTBjeWs3WEc1Y2JpQWdJQ0J5WlhSMWNtNGdkRzlyWlc0N1hHNGdJSDFjYm4xY2JpSmRMQ0p1WVcxbGN5STZXeUptYVhKemRDSXNJbUZ5Y21GNVZYUnBiR2wwYVdWeklpd2lWRzlyWlc0aUxDSjBlWEJsSWl3aVkyOXVkR1Z1ZENJc0ltbHVibVZ5U0ZSTlRDSXNJbk5wWjI1cFptbGpZVzUwSWl3aVoyVjBWSGx3WlNJc0ltZGxkRU52Ym5SbGJuUWlMQ0puWlhSSmJtNWxja2hVVFV3aUxDSm5aWFJEYjI1MFpXNTBUR1Z1WjNSb0lpd2lZMjl1ZEdWdWRFeGxibWQwYUNJc0lteGxibWQwYUNJc0ltbHpVMmxuYm1sbWFXTmhiblFpTENKcGMwTnZiVzFsYm5SVWIydGxiaUlzSW5SNWNHVkpibU5zZFdSbGMwTnZiVzFsYm5SVWVYQmxJaXdpYVc1amJIVmtaWE1pTENKamIyMXRaVzUwVkhsd1pTSXNJbU52YlcxbGJuUlViMnRsYmlJc0ltbHpSVzVrVDJaTWFXNWxWRzlyWlc0aUxDSjBlWEJsUlc1a1QyWk1hVzVsVkhsd1pTSXNJbVZ1WkU5bVRHbHVaVlI1Y0dVaUxDSmxibVJQWmt4cGJtVlViMnRsYmlJc0ltbHpWMmhwZEdWemNHRmpaVlJ2YTJWdUlpd2lkSGx3WlZkb2FYUmxjM0JoWTJWVWVYQmxJaXdpZDJocGRHVnpjR0ZqWlZSNWNHVWlMQ0ozYUdsMFpYTndZV05sVkc5clpXNGlMQ0pwYzBWeGRXRnNWRzhpTENKMGIydGxiaUlzSW1WeGRXRnNWRzlVYjJ0bGJpSXNJbTFoZEdOb0lpd2liV0YwWTJobGN5SXNJbUZ6U0ZSTlRDSXNJbU5zWVhOelRtRnRaU0lzSW1oMGJXd2lMQ0pqYkc5dVpTSXNJa05zWVhOeklpd2ljM1JoY25SUWIzTnBkR2x2YmlJc0ltVnVaRkJ2YzJsMGFXOXVJaXdpY21WdFlXbHVhVzVuUVhKbmRXMWxiblJ6SWl3aWMzVmljM1J5YVc1bklpd2ljMkZ1YVhScGMyVmtRMjl1ZEdWdWRDSXNJbk5oYm1sMGFYTmxRMjl1ZEdWdWRDSXNJbkpsWjNWc1lYSkZlSEJ5WlhOemFXOXVJaXdpYVc1a1pYZ2lMQ0ptYVhKemRFMWhkR05vSWl3aVpuSnZiVU52Ym5SbGJuUWlMQ0ptY205dFEyOXVkR1Z1ZEVGdVpGUjVjR1VpWFN3aWJXRndjR2x1WjNNaU9pSkJRVUZCTEVOQlFWa3NWMEZCUVN4RFFVRkRPenM3UlR0M1FqdEJRVVZyUWl4SFFVRlhMRU5CUVZnc1ZVRkJWenRCUVVWV0xFZEJRWEZDTEVOQlFYSkNMRkZCUVhGQ08wRkJRMDBzUjBGQlV5eERRVUZVTEUxQlFWTTdPM2xFTzNWRk96czdPenM3T3pzN096czdPenM3TzJkR096czdPenM3T3p0elF6czdPenM3TzJsRE96czdhVVU3TzFNN096czdPenM3T0VRN2MwTTdOa1E3YVVVN096czdkMFU3WjBVN096czdPenM3T3pzN08zVkNPenRMT3pzN096czdPenM3T3l0RU96czdPMEZCUlhCRkxFZEJRVXNzUTBGQlIwRXNTMEZCU3l4SFFVRkxReXhWUVVGakxHZENRVUY0UWtRc1MwRkJTenRKUVVWUlJTeExRVUZMTEdsQ1FVRllMRkZCUVZFN1lVRkJSa0VzUzBGQlN5eERRVU5hUXl4SlFVRkpMRVZCUVVWRExFOUJRVThzUlVGQlJVTXNVMEZCVXl4RlFVRkZReXhYUVVGWE8yOURPMUZCUXk5RExFbEJRVWtzUTBGQlEwZ3NTVUZCU1N4SFFVRkhRU3hKUVVGSkxFTkJRVU03VVVGRGFrSXNTVUZCU1N4RFFVRkRReXhQUVVGUExFZEJRVWRCTEU5QlFVOHNRMEZCUXp0UlFVTjJRaXhKUVVGSkxFTkJRVU5ETEZOQlFWTXNSMEZCUjBFc1UwRkJVeXhEUVVGRE8xRkJRek5DTEVsQlFVa3NRMEZCUTBNc1YwRkJWeXhIUVVGSFFTeFhRVUZYTEVOQlFVTTdPenM3V1VGSGFrTkRMRWRCUVU4c1JVRkJVRUVzUTBGQlR6dHRRa0ZCVUVFc1VVRkJVU3hEUVVGU1FTeFBRVUZQTEVkQlFVY3NRMEZCUXp0blFrRkRWQ3hOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZEU2l4SlFVRkpPMWxCUTJ4Q0xFTkJRVU03T3p0WlFVVkVTeXhIUVVGVkxFVkJRVlpCTEVOQlFWVTdiVUpCUVZaQkxGRkJRVkVzUTBGQlVrRXNWVUZCVlN4SFFVRkhMRU5CUVVNN1owSkJRMW9zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUTBvc1QwRkJUenRaUVVOeVFpeERRVUZET3pzN1dVRkZSRXNzUjBGQldTeEZRVUZhUVN4RFFVRlpPMjFDUVVGYVFTeFJRVUZSTEVOQlFWSkJMRmxCUVZrc1IwRkJSeXhEUVVGRE8yZENRVU5rTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVOS0xGTkJRVk03V1VGRGRrSXNRMEZCUXpzN08xbEJSVVJMTEVkQlFXZENMRVZCUVdoQ1FTeERRVUZuUWp0dFFrRkJhRUpCTEZGQlFWRXNRMEZCVWtFc1owSkJRV2RDTEVkQlFVY3NRMEZCUXp0blFrRkRiRUlzUjBGQlN5eERRVUZEUXl4aFFVRmhMRWRCUVVjc1NVRkJTU3hEUVVGRFVDeFBRVUZQTEVOQlFVTlJMRTFCUVUwN1owSkJSWHBETEUxQlFVMHNRMEZCUTBRc1lVRkJZVHRaUVVOMFFpeERRVUZET3pzN1dVRkZSRVVzUjBGQllTeEZRVUZpUVN4RFFVRmhPMjFDUVVGaVFTeFJRVUZSTEVOQlFWSkJMR0ZCUVdFc1IwRkJSeXhEUVVGRE8yZENRVU5tTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVOUUxGZEJRVmM3V1VGRGVrSXNRMEZCUXpzN08xbEJSVVJSTEVkQlFXTXNSVUZCWkVFc1EwRkJZenR0UWtGQlpFRXNVVUZCVVN4RFFVRlNRU3hqUVVGakxFZEJRVWNzUTBGQlF6dG5Ra0ZEYUVJc1IwRkJTeXhEUVVGRFF5eDFRa0ZCZFVJc1IwRkJSeXhKUVVGSkxFTkJRVU5hTEVsQlFVa3NRMEZCUTJFc1VVRkJVU3hEUVVGRFF5eE5RVUZYTEdWQlEzaEVReXhaUVVGWkxFZEJRVWRJTEhWQ1FVRjFRaXhGUVVGRkxFVkJRVWNzUVVGQlNDeERRVUZITzJkQ1FVVnFSQ3hOUVVGTkxFTkJRVU5ITEZsQlFWazdXVUZEY2tJc1EwRkJRenM3TzFsQlJVUkRMRWRCUVdkQ0xFVkJRV2hDUVN4RFFVRm5RanR0UWtGQmFFSkJMRkZCUVZFc1EwRkJVa0VzWjBKQlFXZENMRWRCUVVjc1EwRkJRenRuUWtGRGJFSXNSMEZCU3l4RFFVRkRReXhwUWtGQmFVSXNSMEZCU1N4SlFVRkpMRU5CUVVOcVFpeEpRVUZKTEVOQlFVTmhMRkZCUVZFc1EwRkJRMHNzVFVGQllTeHBRa0ZEY2tSRExHTkJRV01zUjBGQlIwWXNhVUpCUVdsQ0xFVkJRVVVzUlVGQlJ5eEJRVUZJTEVOQlFVYzdaMEpCUlRkRExFMUJRVTBzUTBGQlEwVXNZMEZCWXp0WlFVTjJRaXhEUVVGRE96czdXVUZGUkVNc1IwRkJhVUlzUlVGQmFrSkJMRU5CUVdsQ08yMUNRVUZxUWtFc1VVRkJVU3hEUVVGU1FTeHBRa0ZCYVVJc1IwRkJSeXhEUVVGRE8yZENRVU51UWl4SFFVRkxMRU5CUVVORExHdENRVUZyUWl4SFFVRkpMRWxCUVVrc1EwRkJRM0pDTEVsQlFVa3NTMEZCUzNOQ0xFMUJRV01zYVVKQlEyeEVReXhsUVVGbExFZEJRVWRHTEd0Q1FVRnJRaXhGUVVGRkxFVkJRVWNzUVVGQlNDeERRVUZITzJkQ1FVVXZReXhOUVVGTkxFTkJRVU5GTEdWQlFXVTdXVUZEZUVJc1EwRkJRenM3TzFsQlJVUkRMRWRCUVZNc1JVRkJWRUVzUTBGQlV6dHRRa0ZCVkVFc1VVRkJVU3hEUVVGU1FTeFRRVUZUTEVOQlFVTkRMRXRCUVVzc1JVRkJSU3hEUVVGRE8yZENRVU5vUWl4SFFVRkxMRU5CUVVORExGbEJRVmtzUjBGQlNTeEpRVUZKTEV0QlFVdEVMRXRCUVVzN1owSkJSWEJETEUxQlFVMHNRMEZCUTBNc1dVRkJXVHRaUVVOeVFpeERRVUZET3pzN1dVRkZSRU1zUjBGQlN5eEZRVUZNUVN4RFFVRkxPMjFDUVVGTVFTeFJRVUZSTEVOQlFWSkJMRXRCUVVzc1EwRkJRMFlzUzBGQlN5eEZRVUZGTEVOQlFVTTdaMEpCUTFvc1IwRkJTeXhEUVVGRGVrSXNTVUZCU1N4SFFVRkhlVUlzUzBGQlN5eERRVUZEY2tJc1QwRkJUeXhKUVVOd1FrZ3NUMEZCVHl4SFFVRkhkMElzUzBGQlN5eERRVUZEY0VJc1ZVRkJWU3hKUVVNeFFrWXNWMEZCVnl4SFFVRkhjMElzUzBGQlN5eERRVUZEWml4aFFVRmhMRWxCUTJwRGEwSXNUMEZCVHl4SFFVRkxMRWxCUVVrc1EwRkJRelZDTEVsQlFVa3NTMEZCUzBFc1NVRkJTU3hKUVVGTkxFbEJRVWtzUTBGQlEwTXNUMEZCVHl4TFFVRkxRU3hQUVVGUExFbEJRVTBzU1VGQlNTeERRVUZEUlN4WFFVRlhMRXRCUVV0QkxGZEJRVmM3WjBKQlJYaEhMRTFCUVUwc1EwRkJRM2xDTEU5QlFVODdXVUZEYUVJc1EwRkJRenM3TzFsQlJVUkRMRWRCUVUwc1JVRkJUa0VzUTBGQlRUdHRRa0ZCVGtFc1VVRkJVU3hEUVVGU1FTeE5RVUZOTEVkQlFVY3NRMEZCUXp0blFrRkRVaXhIUVVGTExFTkJRVU5ETEZOQlFWTXNSMEZCUnl4SlFVRkpMRU5CUVVNNVFpeEpRVUZKTEVWQlEzSkNLMElzU1VGQlNTeEhRVUZKTEVOQlFXRXNaMEpCUVdkQ0xFMUJRV01zUTBGQk5VSkVMRk5CUVZNc1JVRkJReXhEUVVGRkxFMUJRV2xDTEUxQlFVOHNRMEZCZEVJc1NVRkJTU3hEUVVGRE5VSXNVMEZCVXl4RlFVRkRMRU5CUVU4N1owSkJSV3BGTEUxQlFVMHNRMEZCUXpaQ0xFbEJRVWs3V1VGRFlpeERRVUZET3pzN1dVRkZSRU1zUjBGQlN5eEZRVUZNUVN4RFFVRkxPMjFDUVVGTVFTeFJRVUZSTEVOQlFWSkJMRXRCUVVzc1EwRkJRME1zUzBGQlN5eEZRVUZGUXl4aFFVRmhMRVZCUVVWRExGZEJRVmNzUlVGQlJXaERMRmRCUVZjc1JVRkJlVUlzUTBGQlF6dG5Ra0ZCZUVJc1IwRkJSMmxETEVOQlFVZ3NSMEZCY1VJc1EwRkJja0lzU1VGQmNVSXNSMEZCY2tJc1UwRkJjVUlzUTBGQmNrSXNUVUZCY1VJc1JVRkJiRUpCTEd0Q1FVRnJRaXhIUVVGeVFpeEhRVUZ4UWl4UFFVRnlRaXhKUVVGeFFpeEhRVUZ5UWl4RFFVRnhRaXhIUVVGeVFpeEpRVUZ4UWl4SFFVRnlRaXhEUVVGeFFpeFBRVUZ5UWl4SlFVRnhRaXhIUVVGeVFpeERRVUZ4UWl4RlFVRnlRaXhKUVVGeFFpeEhRVUZ5UWl4SlFVRnhRaXhGUVVGeVFpeEpRVUZ4UWl4SFFVRnlRaXhEUVVGRE8yOUNRVUZGUVN4clFrRkJhMElzUTBGQmNrSXNTVUZCY1VJc1IwRkJja0lzUTBGQmNVSXNTVUZCY2tJc1UwRkJjVUlzUTBGQmNrSXNTVUZCY1VJc1EwTnNSamRGTEVORWEwWTJSVHRuUWtGQlJDeERRVUZETzJkQ1FVTjZSU3hIUVVGSExFTkJRVU5ZTEV0QlFVc3NSMEZCUnl4SlFVRkpPMmRDUVVWb1FpeEZRVUZGTEVWQlFVVlRMR0ZCUVdFc1MwRkJTME1zVjBGQlZ5eEZRVUZGTEVOQlFVTTdiMEpCUTJ4RExFZEJRVWNzUTBGQlEyeERMRTlCUVU4c1IwRkJSeXhKUVVGSkxFTkJRVU5KTEZWQlFWVTdiMEpCUlRkQ1NpeFBRVUZQTEVkQlFVZEJMRTlCUVU4c1EwRkJRMjlETEZOQlFWTXNRMEZCUTBnc1lVRkJZU3hGUVVGRlF5eFhRVUZYTEVOQlFVTXNRMEZCUXl4RFFVRkZMRVZCUVVjc1FVRkJTQ3hEUVVGSE8yOUNRVVUzUkN4SFFVRkxMRU5CUVVOdVF5eEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRTU3hQUVVGUExFbEJRMjVDYTBNc1owSkJRV2RDTEU5QlFVZERMRkZCUVdVc2EwSkJRVU4wUXl4UFFVRlBMRWRCUXpGRFF5eFRRVUZUTEVkQlFVZHZReXhuUWtGQlowSXNSVUZCUlN4RlFVRkhMRUZCUVVnc1EwRkJSenR2UWtGRmRrTmlMRXRCUVVzc1kwRkJUMUVzUzBGQlN5eEZRVUZVTEVOQlFVTTdkMEpCUVZOcVF5eEpRVUZKTzNkQ1FVRkZReXhQUVVGUE8zZENRVUZGUXl4VFFVRlRPM2RDUVVGRlF5eFhRVUZYTzI5Q1FVRjFRaXhEUVVGRExFTkJRWFpGTEUxQlFYVkZMRzlDUVVGdVFtbERMR3RDUVVGclFpeEhRVUZETEVOQlFVTTdaMEpCUTJ4R0xFTkJRVU03WjBKQlJVUXNUVUZCVFN4RFFVRkRXQ3hMUVVGTE8xbEJRMlFzUTBGQlF6czdPenRaUVVWTlJTeEhRVUZMTEVWQlFVeEJMRU5CUVVzN2JVSkJRVm9zVVVGQlVTeERRVUZFUVN4TFFVRkxMRU5CUVVOTkxFdEJRVXNzUlVGQlJXaERMRTlCUVU4c1JVRkJSVVVzVjBGQlZ5eEZRVUY1UWl4RFFVRkRPMmRDUVVGNFFpeEhRVUZIYVVNc1EwRkJTQ3hIUVVGeFFpeERRVUZ5UWl4SlFVRnhRaXhIUVVGeVFpeFRRVUZ4UWl4RFFVRnlRaXhOUVVGeFFpeEZRVUZzUWtFc2EwSkJRV3RDTEVkQlFYSkNMRWRCUVhGQ0xFOUJRWEpDTEVsQlFYRkNMRWRCUVhKQ0xFTkJRWEZDTEVkQlFYSkNMRWxCUVhGQ0xFZEJRWEpDTEVOQlFYRkNMRTlCUVhKQ0xFbEJRWEZDTEVkQlFYSkNMRU5CUVhGQ0xFVkJRWEpDTEVsQlFYRkNMRWRCUVhKQ0xFbEJRWEZDTEVWQlFYSkNMRWxCUVhGQ0xFZEJRWEpDTEVOQlFVTTdiMEpCUVVWQkxHdENRVUZyUWl4RFFVRnlRaXhKUVVGeFFpeEhRVUZ5UWl4RFFVRnhRaXhKUVVGeVFpeFRRVUZ4UWl4RFFVRnlRaXhKUVVGeFFpeERRM0JIYWtVc1EwUnZSMmxGTzJkQ1FVRkVMRU5CUVVNN1owSkJRemRFTEVkQlFVY3NRMEZCUTFnc1MwRkJTeXhIUVVGSExFbEJRVWs3WjBKQlJXaENMRWRCUVVzc1EwRkJSMlVzYVVKQlFXbENMRWRCUVV0UUxFdEJRVXNzUTBGQk0wSlBMR2xDUVVGcFFpeEZRVU51UWxvc1QwRkJUeXhIUVVGSE0wSXNUMEZCVHl4RFFVRkRNRUlzUzBGQlN5eERRVUZEWVN4cFFrRkJhVUk3WjBKQlJTOURMRVZCUVVVc1JVRkJSVm9zVDBGQlR5eExRVUZMTEVsQlFVa3NSVUZCUlN4RFFVRkRPMjlDUVVOeVFpeEhRVUZMTEVOQlFVZGhMRXRCUVVzc1IwRkJTMklzVDBGQlR5eERRVUZxUW1Fc1MwRkJTenR2UWtGRllpeEZRVUZGTEVWQlFVVkJMRXRCUVVzc1MwRkJTeXhEUVVGRExFVkJRVVVzUTBGQlF6dDNRa0ZEYUVJc1IwRkJTeXhEUVVGRFF5eFZRVUZWTEVkQlFVYzNReXhMUVVGTExFTkJRVU1yUWl4UFFVRlBPM2RDUVVWb1F6TkNMRTlCUVU4c1IwRkJSM2xETEZWQlFWVXNRMEZCUXl4RFFVRkRMRVZCUVVjc1FVRkJTQ3hEUVVGSE8zZENRVVY2UWl4SFFVRkxMRU5CUVVOc1F5eGhRVUZoTEVkQlFVZFFMRTlCUVU4c1EwRkJRMUVzVFVGQlRUdDNRa0ZGY0VNc1JVRkJSU3hGUVVGRlJDeGhRVUZoTEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNN05FSkJRM1JDTEVkQlFVc3NRMEZCUjFJc1NVRkJTU3hIUVVGTGFVTXNTMEZCU3l4RFFVRmtha01zU1VGQlNTeEZRVU5PYzBNc1owSkJRV2RDTEU5QlFVZERMRkZCUVdVc2EwSkJRVU4wUXl4UFFVRlBMRWRCUXpGRFF5eFRRVUZUTEVkQlFVZHZReXhuUWtGQlowSXNSVUZCUlN4RlFVRkhMRUZCUVVnc1EwRkJSenMwUWtGRmRrTmlMRXRCUVVzc1kwRkJUMUVzUzBGQlN5eEZRVUZVTEVOQlFVTTdaME5CUVZOcVF5eEpRVUZKTzJkRFFVRkZReXhQUVVGUE8yZERRVUZGUXl4VFFVRlRPMmREUVVGRlF5eFhRVUZYT3pSQ1FVRjFRaXhEUVVGRExFTkJRWFpGTEUxQlFYVkZMRzlDUVVGdVFtbERMR3RDUVVGclFpeEhRVUZETEVOQlFVTTdkMEpCUTJ4R0xFTkJRVU03YjBKQlEwZ3NRMEZCUXp0blFrRkRTQ3hEUVVGRE8yZENRVVZFTEUxQlFVMHNRMEZCUTFnc1MwRkJTenRaUVVOa0xFTkJRVU03T3p0WlFVVk5hMElzUjBGQlZ5eEZRVUZZUVN4RFFVRlhPMjFDUVVGc1FpeFJRVUZSTEVOQlFVUkJMRmRCUVZjc1EwRkJRMVlzUzBGQlN5eEZRVUZGYUVNc1QwRkJUeXhGUVVGRlJTeFhRVUZYTEVWQlFYbENMRU5CUVVNN1owSkJRWGhDTEVkQlFVZHBReXhEUVVGSUxFZEJRWEZDTEVOQlFYSkNMRWxCUVhGQ0xFZEJRWEpDTEZOQlFYRkNMRU5CUVhKQ0xFMUJRWEZDTEVWQlFXeENRU3hyUWtGQmEwSXNSMEZCY2tJc1IwRkJjVUlzVDBGQmNrSXNTVUZCY1VJc1IwRkJja0lzUTBGQmNVSXNSMEZCY2tJc1NVRkJjVUlzUjBGQmNrSXNRMEZCY1VJc1QwRkJja0lzU1VGQmNVSXNSMEZCY2tJc1EwRkJjVUlzUlVGQmNrSXNTVUZCY1VJc1IwRkJja0lzU1VGQmNVSXNSVUZCY2tJc1NVRkJjVUlzUjBGQmNrSXNRMEZCUXp0dlFrRkJSVUVzYTBKQlFXdENMRU5CUVhKQ0xFbEJRWEZDTEVkQlFYSkNMRU5CUVhGQ0xFbEJRWEpDTEZOQlFYRkNMRU5CUVhKQ0xFbEJRWEZDTEVORGFrbDJSU3hEUkdsSmRVVTdaMEpCUVVRc1EwRkJRenRuUWtGRGJrVXNSMEZCU3l4RFFVRkhjRU1zU1VGQlNTeEhRVUZMYVVNc1MwRkJTeXhEUVVGa2FrTXNTVUZCU1N4RlFVTk9jME1zWjBKQlFXZENMRTlCUVVkRExGRkJRV1VzYTBKQlFVTjBReXhQUVVGUExFZEJRekZEUXl4VFFVRlRMRWRCUVVkdlF5eG5Ra0ZCWjBJc1JVRkROVUppTEV0QlFVc3NZMEZCVDFFc1MwRkJTeXhGUVVGVUxFTkJRVU03YjBKQlFWTnFReXhKUVVGSk8yOUNRVUZGUXl4UFFVRlBPMjlDUVVGRlF5eFRRVUZUTzI5Q1FVRkZReXhYUVVGWE8yZENRVUYxUWl4RFFVRkRMRU5CUVhaRkxFMUJRWFZGTEc5Q1FVRnVRbWxETEd0Q1FVRnJRanRuUWtGRmNFWXNUVUZCVFN4RFFVRkRXQ3hMUVVGTE8xbEJRMlFzUTBGQlF6czdPMWxCUlUxdFFpeEhRVUZyUWl4RlFVRnNRa0VzUTBGQmEwSTdiVUpCUVhwQ0xGRkJRVkVzUTBGQlJFRXNhMEpCUVd0Q0xFTkJRVU5ZTEV0QlFVc3NSVUZCUldoRExFOUJRVThzUlVGQlJVUXNTVUZCU1N4RlFVRkZSeXhYUVVGWExFVkJRWGxDTEVOQlFVTTdaMEpCUVhoQ0xFZEJRVWRwUXl4RFFVRklMRWRCUVhGQ0xFTkJRWEpDTEVsQlFYRkNMRWRCUVhKQ0xGTkJRWEZDTEVOQlFYSkNMRTFCUVhGQ0xFVkJRV3hDUVN4clFrRkJhMElzUjBGQmNrSXNSMEZCY1VJc1QwRkJja0lzU1VGQmNVSXNSMEZCY2tJc1EwRkJjVUlzUjBGQmNrSXNTVUZCY1VJc1IwRkJja0lzUTBGQmNVSXNUMEZCY2tJc1NVRkJjVUlzUjBGQmNrSXNRMEZCY1VJc1JVRkJja0lzU1VGQmNVSXNSMEZCY2tJc1NVRkJjVUlzUlVGQmNrSXNTVUZCY1VJc1IwRkJja0lzUTBGQlF6dHZRa0ZCUlVFc2EwSkJRV3RDTEVOQlFYSkNMRWxCUVhGQ0xFZEJRWEpDTEVOQlFYRkNMRWxCUVhKQ0xGTkJRWEZDTEVOQlFYSkNMRWxCUVhGQ0xFTkRNVWx3Uml4RFJEQkpiMFk3WjBKQlFVUXNRMEZCUXp0blFrRkRhRVlzUjBGQlN5eERRVUZEUlN4blFrRkJaMElzVDBGQlIwTXNVVUZCWlN4clFrRkJRM1JETEU5QlFVOHNSMEZETVVORExGTkJRVk1zUjBGQlIyOURMR2RDUVVGblFpeEZRVU0xUW1Jc1MwRkJTeXhqUVVGUFVTeExRVUZMTEVWQlFWUXNRMEZCUXp0dlFrRkJVMnBETEVsQlFVazdiMEpCUVVWRExFOUJRVTg3YjBKQlFVVkRMRk5CUVZNN2IwSkJRVVZETEZkQlFWYzdaMEpCUVhWQ0xFTkJRVU1zUTBGQmRrVXNUVUZCZFVVc2IwSkJRVzVDYVVNc2EwSkJRV3RDTzJkQ1FVVndSaXhOUVVGTkxFTkJRVU5ZTEV0QlFVczdXVUZEWkN4RFFVRkRPenROT3pzN2EwSkJka2xyUWpGQ0xFdEJRVXNzUVNKOSIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfdG9rZW4gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi90b2tlblwiKSk7XG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikge1xuICAgIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuICAgIGZvcih2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKWFycjJbaV0gPSBhcnJbaV07XG4gICAgcmV0dXJuIGFycjI7XG59XG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KGFycik7XG59XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHNlbGY7XG59XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gICAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgICB9XG59XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cbmZ1bmN0aW9uIF9nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgIT09IFwidW5kZWZpbmVkXCIgJiYgUmVmbGVjdC5nZXQpIHtcbiAgICAgICAgX2dldCA9IFJlZmxlY3QuZ2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIF9nZXQgPSBmdW5jdGlvbiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSB7XG4gICAgICAgICAgICB2YXIgYmFzZSA9IF9zdXBlclByb3BCYXNlKHRhcmdldCwgcHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKCFiYXNlKSByZXR1cm47XG4gICAgICAgICAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYmFzZSwgcHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKGRlc2MuZ2V0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlc2MuZ2V0LmNhbGwocmVjZWl2ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRlc2MudmFsdWU7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyIHx8IHRhcmdldCk7XG59XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7XG4gICAgfTtcbiAgICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufVxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gICAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gICAgfVxuICAgIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDoge1xuICAgICAgICBkZWZhdWx0OiBvYmpcbiAgICB9O1xufVxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7XG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7XG59XG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgICAgICByZXR1cm4gY2FsbDtcbiAgICB9XG4gICAgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgICAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgICAgIHJldHVybiBvO1xuICAgIH07XG4gICAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cbmZ1bmN0aW9uIF9zdXBlclByb3BCYXNlKG9iamVjdCwgcHJvcGVydHkpIHtcbiAgICB3aGlsZSghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpKXtcbiAgICAgICAgb2JqZWN0ID0gX2dldFByb3RvdHlwZU9mKG9iamVjdCk7XG4gICAgICAgIGlmIChvYmplY3QgPT09IG51bGwpIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xufVxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikge1xuICAgIHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5KGFycikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7XG59XG52YXIgX3R5cGVvZiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIFwiQHN3Yy9oZWxwZXJzIC0gdHlwZW9mXCI7XG4gICAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG59O1xuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikge1xuICAgIGlmICghbykgcmV0dXJuO1xuICAgIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gICAgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpO1xuICAgIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obik7XG4gICAgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xufVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTtcbiAgICBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlO1xuICAgIHRyeSB7XG4gICAgICAgIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24oKSB7fSkpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkge1xuICAgIHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpO1xuICAgIHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHtcbiAgICAgICAgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7XG4gICAgICAgIGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7XG4gICAgICAgICAgICB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yO1xuICAgICAgICAgICAgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7XG4gICAgfTtcbn1cbnZhciBzaWduaWZpY2FudCA9IHRydWU7XG52YXIgU2lnbmlmaWNhbnRUb2tlbiA9IC8qI19fUFVSRV9fKi8gZnVuY3Rpb24oVG9rZW4pIHtcbiAgICBfaW5oZXJpdHMoU2lnbmlmaWNhbnRUb2tlbiwgVG9rZW4pO1xuICAgIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU2lnbmlmaWNhbnRUb2tlbik7XG4gICAgZnVuY3Rpb24gU2lnbmlmaWNhbnRUb2tlbigpIHtcbiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFNpZ25pZmljYW50VG9rZW4pO1xuICAgICAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICAgIF9jcmVhdGVDbGFzcyhTaWduaWZpY2FudFRva2VuLCBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJjbG9uZVwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikge1xuICAgICAgICAgICAgICAgIGZvcih2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlbWFpbmluZ0FyZ3VtZW50cyA9IG5ldyBBcnJheShfbGVuID4gMyA/IF9sZW4gLSAzIDogMCksIF9rZXkgPSAzOyBfa2V5IDwgX2xlbjsgX2tleSsrKXtcbiAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nQXJndW1lbnRzW19rZXkgLSAzXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIF9pbnN0YW5jZTtcbiAgICAgICAgICAgICAgICBpZiAoZW5kUG9zaXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb247IC8vL1xuICAgICAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gQ2xhc3M7IC8vL1xuICAgICAgICAgICAgICAgICAgICBDbGFzcyA9IFNpZ25pZmljYW50VG9rZW47IC8vL1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgc2lnbmlmaWNhbnRUb2tlbiA9IChfaW5zdGFuY2UgPSBfZ2V0KF9nZXRQcm90b3R5cGVPZihTaWduaWZpY2FudFRva2VuLnByb3RvdHlwZSksIFwiY2xvbmVcIiwgdGhpcykpLmNhbGwuYXBwbHkoX2luc3RhbmNlLCBbXG4gICAgICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgICAgIENsYXNzLFxuICAgICAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uLFxuICAgICAgICAgICAgICAgICAgICBlbmRQb3NpdGlvbixcbiAgICAgICAgICAgICAgICAgICAgc2lnbmlmaWNhbnRcbiAgICAgICAgICAgICAgICBdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkocmVtYWluaW5nQXJndW1lbnRzKSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzaWduaWZpY2FudFRva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgXSwgW1xuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwibWF0Y2hcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBtYXRjaChDbGFzcywgY29udGVudCkge1xuICAgICAgICAgICAgICAgIGZvcih2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlbWFpbmluZ0FyZ3VtZW50cyA9IG5ldyBBcnJheShfbGVuID4gMiA/IF9sZW4gLSAyIDogMCksIF9rZXkgPSAyOyBfa2V5IDwgX2xlbjsgX2tleSsrKXtcbiAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nQXJndW1lbnRzW19rZXkgLSAyXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIF9Ub2tlbjtcbiAgICAgICAgICAgICAgICBpZiAoY29udGVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBDbGFzczsgLy8vXG4gICAgICAgICAgICAgICAgICAgIENsYXNzID0gU2lnbmlmaWNhbnRUb2tlbjsgLy8vXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBzaWduaWZpY2FudFRva2VuID0gKF9Ub2tlbiA9IF90b2tlbi5kZWZhdWx0KS5tYXRjaC5hcHBseShfVG9rZW4sIFtcbiAgICAgICAgICAgICAgICAgICAgQ2xhc3MsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgIHNpZ25pZmljYW50XG4gICAgICAgICAgICAgICAgXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHJlbWFpbmluZ0FyZ3VtZW50cykpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2lnbmlmaWNhbnRUb2tlbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImZyb21Db250ZW50XCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICBmb3IodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByZW1haW5pbmdBcmd1bWVudHMgPSBuZXcgQXJyYXkoX2xlbiA+IDIgPyBfbGVuIC0gMiA6IDApLCBfa2V5ID0gMjsgX2tleSA8IF9sZW47IF9rZXkrKyl7XG4gICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZ0FyZ3VtZW50c1tfa2V5IC0gMl0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBfVG9rZW47XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50ID0gQ2xhc3M7IC8vL1xuICAgICAgICAgICAgICAgICAgICBDbGFzcyA9IFNpZ25pZmljYW50VG9rZW47IC8vL1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgc2lnbmlmaWNhbnRUb2tlbiA9IChfVG9rZW4gPSBfdG9rZW4uZGVmYXVsdCkuZnJvbUNvbnRlbnQuYXBwbHkoX1Rva2VuLCBbXG4gICAgICAgICAgICAgICAgICAgIENsYXNzLFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgICAgICAgICBzaWduaWZpY2FudFxuICAgICAgICAgICAgICAgIF0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShyZW1haW5pbmdBcmd1bWVudHMpKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJmcm9tQ29udGVudEFuZFR5cGVcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBmcm9tQ29udGVudEFuZFR5cGUoQ2xhc3MsIGNvbnRlbnQsIHR5cGUpIHtcbiAgICAgICAgICAgICAgICBmb3IodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByZW1haW5pbmdBcmd1bWVudHMgPSBuZXcgQXJyYXkoX2xlbiA+IDMgPyBfbGVuIC0gMyA6IDApLCBfa2V5ID0gMzsgX2tleSA8IF9sZW47IF9rZXkrKyl7XG4gICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZ0FyZ3VtZW50c1tfa2V5IC0gM10gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBfVG9rZW47XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB0eXBlID0gY29udGVudDsgLy8vXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBDbGFzczsgLy8vXG4gICAgICAgICAgICAgICAgICAgIENsYXNzID0gU2lnbmlmaWNhbnRUb2tlbjsgLy8vXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBzaWduaWZpY2FudFRva2VuID0gKF9Ub2tlbiA9IF90b2tlbi5kZWZhdWx0KS5mcm9tQ29udGVudEFuZFR5cGUuYXBwbHkoX1Rva2VuLCBbXG4gICAgICAgICAgICAgICAgICAgIENsYXNzLFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgICBzaWduaWZpY2FudFxuICAgICAgICAgICAgICAgIF0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShyZW1haW5pbmdBcmd1bWVudHMpKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICBdKTtcbiAgICByZXR1cm4gU2lnbmlmaWNhbnRUb2tlbjtcbn0oX3Rva2VuLmRlZmF1bHQpO1xuZXhwb3J0cy5kZWZhdWx0ID0gU2lnbmlmaWNhbnRUb2tlbjtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5MGIydGxiaTl6YVdkdWFXWnBZMkZ1ZEM1cWN5SmRMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpjSW5WelpTQnpkSEpwWTNSY0lqdGNibHh1YVcxd2IzSjBJRlJ2YTJWdUlHWnliMjBnWENJdUxpOTBiMnRsYmx3aU8xeHVYRzVqYjI1emRDQnphV2R1YVdacFkyRnVkQ0E5SUhSeWRXVTdYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJR05zWVhOeklGTnBaMjVwWm1sallXNTBWRzlyWlc0Z1pYaDBaVzVrY3lCVWIydGxiaUI3WEc0Z0lHTnNiMjVsS0VOc1lYTnpMQ0J6ZEdGeWRGQnZjMmwwYVc5dUxDQmxibVJRYjNOcGRHbHZiaXdnTGk0dWNtVnRZV2x1YVc1blFYSm5kVzFsYm5SektTQjdYRzRnSUNBZ2FXWWdLR1Z1WkZCdmMybDBhVzl1SUQwOVBTQjFibVJsWm1sdVpXUXBJSHRjYmlBZ0lDQWdJR1Z1WkZCdmMybDBhVzl1SUQwZ2MzUmhjblJRYjNOcGRHbHZianNnSUM4dkwxeHVJQ0FnSUNBZ2MzUmhjblJRYjNOcGRHbHZiaUE5SUVOc1lYTnpPeUFnTHk4dlhHNGdJQ0FnSUNCRGJHRnpjeUE5SUZOcFoyNXBabWxqWVc1MFZHOXJaVzQ3SUM4dkwxeHVJQ0FnSUgxY2JseHVJQ0FnSUdOdmJuTjBJSE5wWjI1cFptbGpZVzUwVkc5clpXNGdQU0J6ZFhCbGNpNWpiRzl1WlNoRGJHRnpjeXdnYzNSaGNuUlFiM05wZEdsdmJpd2daVzVrVUc5emFYUnBiMjRzSUhOcFoyNXBabWxqWVc1MExDQXVMaTV5WlcxaGFXNXBibWRCY21kMWJXVnVkSE1wTzF4dVhHNGdJQ0FnY21WMGRYSnVJSE5wWjI1cFptbGpZVzUwVkc5clpXNDdYRzRnSUgxY2JseHVJQ0J6ZEdGMGFXTWdiV0YwWTJnb1EyeGhjM01zSUdOdmJuUmxiblFzSUM0dUxuSmxiV0ZwYm1sdVowRnlaM1Z0Wlc1MGN5a2dlMXh1SUNBZ0lHbG1JQ2hqYjI1MFpXNTBJRDA5UFNCMWJtUmxabWx1WldRcElIdGNiaUFnSUNBZ0lHTnZiblJsYm5RZ1BTQkRiR0Z6Y3pzZ0lDOHZMMXh1SUNBZ0lDQWdRMnhoYzNNZ1BTQlRhV2R1YVdacFkyRnVkRlJ2YTJWdU95QXZMeTljYmlBZ0lDQjlYRzVjYmlBZ0lDQmpiMjV6ZENCemFXZHVhV1pwWTJGdWRGUnZhMlZ1SUQwZ1ZHOXJaVzR1YldGMFkyZ29RMnhoYzNNc0lHTnZiblJsYm5Rc0lITnBaMjVwWm1sallXNTBMQ0F1TGk1eVpXMWhhVzVwYm1kQmNtZDFiV1Z1ZEhNcE8xeHVYRzRnSUNBZ2NtVjBkWEp1SUhOcFoyNXBabWxqWVc1MFZHOXJaVzQ3WEc0Z0lIMWNibHh1SUNCemRHRjBhV01nWm5KdmJVTnZiblJsYm5Rb1EyeGhjM01zSUdOdmJuUmxiblFzSUM0dUxuSmxiV0ZwYm1sdVowRnlaM1Z0Wlc1MGN5a2dlMXh1SUNBZ0lHbG1JQ2hqYjI1MFpXNTBJRDA5UFNCMWJtUmxabWx1WldRcElIdGNiaUFnSUNBZ0lHTnZiblJsYm5RZ1BTQkRiR0Z6Y3pzZ0lDOHZMMXh1SUNBZ0lDQWdRMnhoYzNNZ1BTQlRhV2R1YVdacFkyRnVkRlJ2YTJWdU95QXZMeTljYmlBZ0lDQjlYRzVjYmlBZ0lDQmpiMjV6ZENCemFXZHVhV1pwWTJGdWRGUnZhMlZ1SUQwZ1ZHOXJaVzR1Wm5KdmJVTnZiblJsYm5Rb1EyeGhjM01zSUdOdmJuUmxiblFzSUhOcFoyNXBabWxqWVc1MExDQXVMaTV5WlcxaGFXNXBibWRCY21kMWJXVnVkSE1wTzF4dVhHNGdJQ0FnY21WMGRYSnVJSE5wWjI1cFptbGpZVzUwVkc5clpXNDdYRzRnSUgxY2JseHVJQ0J6ZEdGMGFXTWdabkp2YlVOdmJuUmxiblJCYm1SVWVYQmxLRU5zWVhOekxDQmpiMjUwWlc1MExDQjBlWEJsTENBdUxpNXlaVzFoYVc1cGJtZEJjbWQxYldWdWRITXBJSHRjYmlBZ0lDQnBaaUFvZEhsd1pTQTlQVDBnZFc1a1pXWnBibVZrS1NCN1hHNGdJQ0FnSUNCMGVYQmxJRDBnWTI5dWRHVnVkRHNnTHk4dlhHNGdJQ0FnSUNCamIyNTBaVzUwSUQwZ1EyeGhjM003SUNBdkx5OWNiaUFnSUNBZ0lFTnNZWE56SUQwZ1UybG5ibWxtYVdOaGJuUlViMnRsYmpzZ0x5OHZYRzRnSUNBZ2ZWeHVYRzRnSUNBZ1kyOXVjM1FnYzJsbmJtbG1hV05oYm5SVWIydGxiaUE5SUZSdmEyVnVMbVp5YjIxRGIyNTBaVzUwUVc1a1ZIbHdaU2hEYkdGemN5d2dZMjl1ZEdWdWRDd2dkSGx3WlN3Z2MybG5ibWxtYVdOaGJuUXNJQzR1TG5KbGJXRnBibWx1WjBGeVozVnRaVzUwY3lrN1hHNWNiaUFnSUNCeVpYUjFjbTRnYzJsbmJtbG1hV05oYm5SVWIydGxianRjYmlBZ2ZWeHVmVnh1SWwwc0ltNWhiV1Z6SWpwYkluTnBaMjVwWm1sallXNTBJaXdpVTJsbmJtbG1hV05oYm5SVWIydGxiaUlzSW1Oc2IyNWxJaXdpUTJ4aGMzTWlMQ0p6ZEdGeWRGQnZjMmwwYVc5dUlpd2laVzVrVUc5emFYUnBiMjRpTENKeVpXMWhhVzVwYm1kQmNtZDFiV1Z1ZEhNaUxDSjFibVJsWm1sdVpXUWlMQ0p6YVdkdWFXWnBZMkZ1ZEZSdmEyVnVJaXdpYldGMFkyZ2lMQ0pqYjI1MFpXNTBJaXdpVkc5clpXNGlMQ0ptY205dFEyOXVkR1Z1ZENJc0ltWnliMjFEYjI1MFpXNTBRVzVrVkhsd1pTSXNJblI1Y0dVaVhTd2liV0Z3Y0dsdVozTWlPaUpCUVVGQkxFTkJRVmtzVjBGQlFTeERRVUZET3pzN1JUdDNRanRCUVVWTExFZEJRVlVzUTBGQlZpeE5RVUZWT3p0NVJEdDFSVHM3T3pzN096czdPenM3T3pzN096czdPenM3T0VRN2MwTTdOa1E3YVVVN096czdkMFU3WjBVN096czdPekJDT3pzN096czdPenM3TzFNN096czdPenM3U3pzN096czdPenM3T3pzN096dE5PM2xFT3pzN096czdPenM3T3pzN096czdPenM3T3pzN2RVSTdPMHM3T3pzN08zZERPenM3T3pzN096czdNa0k3T3pzN096czdLMFE3T3pzN096czdPenR4UmpzN096czdPenM3T3pzN08yMUZPenRwUkRzN096czdRVUZGTlVJc1IwRkJTeXhEUVVGRFFTeFhRVUZYTEVkQlFVY3NTVUZCU1R0SlFVVklReXhuUWtGQlowSXNhVUpCUVhSQ0xGRkJRVkU3YzBNN08yRkJRVVpCTEdkQ1FVRm5RanNyUXpzN096czdXVUZEYmtORExFZEJRVXNzUlVGQlRFRXNRMEZCU3p0dFFrRkJURUVzVVVGQlVTeERRVUZTUVN4TFFVRkxMRU5CUVVORExFdEJRVXNzUlVGQlJVTXNZVUZCWVN4RlFVRkZReXhYUVVGWExFVkJRWGxDTEVOQlFVTTdaMEpCUVhoQ0xFZEJRVWRETEVOQlFVZ3NSMEZCY1VJc1EwRkJja0lzU1VGQmNVSXNSMEZCY2tJc1UwRkJjVUlzUTBGQmNrSXNUVUZCY1VJc1JVRkJiRUpCTEd0Q1FVRnJRaXhIUVVGeVFpeEhRVUZ4UWl4UFFVRnlRaXhKUVVGeFFpeEhRVUZ5UWl4RFFVRnhRaXhIUVVGeVFpeEpRVUZ4UWl4SFFVRnlRaXhEUVVGeFFpeFBRVUZ5UWl4SlFVRnhRaXhIUVVGeVFpeERRVUZ4UWl4RlFVRnlRaXhKUVVGeFFpeEhRVUZ5UWl4SlFVRnhRaXhGUVVGeVFpeEpRVUZ4UWl4SFFVRnlRaXhEUVVGRE8yOUNRVUZGUVN4clFrRkJhMElzUTBGQmNrSXNTVUZCY1VJc1IwRkJja0lzUTBGQmNVSXNTVUZCY2tJc1UwRkJjVUlzUTBGQmNrSXNTVUZCY1VJc1EwTlFhRVVzUTBSUFowVTdaMEpCUVVRc1EwRkJRenR2UWtGUGJrTXNVMEZCU3p0blFrRk9PVUlzUlVGQlJTeEZRVUZGUkN4WFFVRlhMRXRCUVV0RkxGTkJRVk1zUlVGQlJTeERRVUZETzI5Q1FVTTVRa1lzVjBGQlZ5eEhRVUZIUkN4aFFVRmhMRU5CUVVNc1EwRkJSU3hGUVVGSExFRkJRVWdzUTBGQlJ6dHZRa0ZEYWtOQkxHRkJRV0VzUjBGQlIwUXNTMEZCU3l4RFFVRkRMRU5CUVVVc1JVRkJSeXhCUVVGSUxFTkJRVWM3YjBKQlF6TkNRU3hMUVVGTExFZEJRVWRHTEdkQ1FVRm5RaXhEUVVGRExFTkJRVU1zUlVGQlJ5eEJRVUZJTEVOQlFVYzdaMEpCUXk5Q0xFTkJRVU03WjBKQlJVUXNSMEZCU3l4RFFVRkRUeXhuUWtGQlowSXNTVUZCUnl4VFFVRkxMSGRDUVZKaVVDeG5Ra0ZCWjBJc1lVRlJSa01zUTBGQlN5eFJRVUZZTEVsQlFVc3NZMEZCVEN4VFFVRkxPenR2UWtGQlQwTXNTMEZCU3p0dlFrRkJSVU1zWVVGQllUdHZRa0ZCUlVNc1YwRkJWenR2UWtGQlJVd3NWMEZCVnpzMFEwRkJTMDBzYTBKQlFXdENPMmRDUVVVeFJ5eE5RVUZOTEVOQlFVTkZMR2RDUVVGblFqdFpRVU42UWl4RFFVRkRPenM3TzFsQlJVMURMRWRCUVVzc1JVRkJURUVzUTBGQlN6dHRRa0ZCV2l4UlFVRlJMRU5CUVVSQkxFdEJRVXNzUTBGQlEwNHNTMEZCU3l4RlFVRkZUeXhQUVVGUExFVkJRWGxDTEVOQlFVTTdaMEpCUVhoQ0xFZEJRVWRLTEVOQlFVZ3NSMEZCY1VJc1EwRkJja0lzU1VGQmNVSXNSMEZCY2tJc1UwRkJjVUlzUTBGQmNrSXNUVUZCY1VJc1JVRkJiRUpCTEd0Q1FVRnJRaXhIUVVGeVFpeEhRVUZ4UWl4UFFVRnlRaXhKUVVGeFFpeEhRVUZ5UWl4RFFVRnhRaXhIUVVGeVFpeEpRVUZ4UWl4SFFVRnlRaXhEUVVGeFFpeFBRVUZ5UWl4SlFVRnhRaXhIUVVGeVFpeERRVUZ4UWl4RlFVRnlRaXhKUVVGeFFpeEhRVUZ5UWl4SlFVRnhRaXhGUVVGeVFpeEpRVUZ4UWl4SFFVRnlRaXhEUVVGRE8yOUNRVUZGUVN4clFrRkJhMElzUTBGQmNrSXNTVUZCY1VJc1IwRkJja0lzUTBGQmNVSXNTVUZCY2tJc1UwRkJjVUlzUTBGQmNrSXNTVUZCY1VJc1EwTnVRbkJFTEVORWJVSnZSRHRuUWtGQlJDeERRVUZETzI5Q1FVMTJRa3NzVFVGQlN6dG5Ra0ZNT1VJc1JVRkJSU3hGUVVGRlJDeFBRVUZQTEV0QlFVdElMRk5CUVZNc1JVRkJSU3hEUVVGRE8yOUNRVU14UWtjc1QwRkJUeXhIUVVGSFVDeExRVUZMTEVOQlFVTXNRMEZCUlN4RlFVRkhMRUZCUVVnc1EwRkJSenR2UWtGRGNrSkJMRXRCUVVzc1IwRkJSMFlzWjBKQlFXZENMRU5CUVVNc1EwRkJReXhGUVVGSExFRkJRVWdzUTBGQlJ6dG5Ra0ZETDBJc1EwRkJRenRuUWtGRlJDeEhRVUZMTEVOQlFVTlBMR2RDUVVGblFpeEpRVUZIUnl4TlFVRkxMRWRCUVV4QkxFMUJRVXNzVlVGQlEwWXNTMEZCU3l4RFFVRllSU3hMUVVFclJDeERRVUV2UkVFc1RVRkJTeXhGUVVGTVFTeERRVUZETzI5Q1FVRlhVaXhMUVVGTE8yOUNRVUZGVHl4UFFVRlBPMjlDUVVGRlZpeFhRVUZYTzJkQ1FVRjFRaXhEUVVGRExFTkJRUzlFVnl4TlFVRXJSQ3h2UWtGQmJrSk1MR3RDUVVGclFqdG5Ra0ZGZGtZc1RVRkJUU3hEUVVGRFJTeG5Ra0ZCWjBJN1dVRkRla0lzUTBGQlF6czdPMWxCUlUxSkxFZEJRVmNzUlVGQldFRXNRMEZCVnp0dFFrRkJiRUlzVVVGQlVTeERRVUZFUVN4WFFVRlhMRU5CUVVOVUxFdEJRVXNzUlVGQlJVOHNUMEZCVHl4RlFVRjVRaXhEUVVGRE8yZENRVUY0UWl4SFFVRkhTaXhEUVVGSUxFZEJRWEZDTEVOQlFYSkNMRWxCUVhGQ0xFZEJRWEpDTEZOQlFYRkNMRU5CUVhKQ0xFMUJRWEZDTEVWQlFXeENRU3hyUWtGQmEwSXNSMEZCY2tJc1IwRkJjVUlzVDBGQmNrSXNTVUZCY1VJc1IwRkJja0lzUTBGQmNVSXNSMEZCY2tJc1NVRkJjVUlzUjBGQmNrSXNRMEZCY1VJc1QwRkJja0lzU1VGQmNVSXNSMEZCY2tJc1EwRkJjVUlzUlVGQmNrSXNTVUZCY1VJc1IwRkJja0lzU1VGQmNVSXNSVUZCY2tJc1NVRkJjVUlzUjBGQmNrSXNRMEZCUXp0dlFrRkJSVUVzYTBKQlFXdENMRU5CUVhKQ0xFbEJRWEZDTEVkQlFYSkNMRU5CUVhGQ0xFbEJRWEpDTEZOQlFYRkNMRU5CUVhKQ0xFbEJRWEZDTEVORE9VSXhSQ3hEUkRoQ01FUTdaMEpCUVVRc1EwRkJRenR2UWtGTk4wSkxMRTFCUVVzN1owSkJURGxDTEVWQlFVVXNSVUZCUlVRc1QwRkJUeXhMUVVGTFNDeFRRVUZUTEVWQlFVVXNRMEZCUXp0dlFrRkRNVUpITEU5QlFVOHNSMEZCUjFBc1MwRkJTeXhEUVVGRExFTkJRVVVzUlVGQlJ5eEJRVUZJTEVOQlFVYzdiMEpCUTNKQ1FTeExRVUZMTEVkQlFVZEdMR2RDUVVGblFpeERRVUZETEVOQlFVTXNSVUZCUnl4QlFVRklMRU5CUVVjN1owSkJReTlDTEVOQlFVTTdaMEpCUlVRc1IwRkJTeXhEUVVGRFR5eG5Ra0ZCWjBJc1NVRkJSMGNzVFVGQlN5eEhRVUZNUVN4TlFVRkxMRlZCUVVORExGZEJRVmNzUTBGQmFrSkVMRXRCUVhGRkxFTkJRWEpGUVN4TlFVRkxMRVZCUVV4QkxFTkJRVU03YjBKQlFXbENVaXhMUVVGTE8yOUNRVUZGVHl4UFFVRlBPMjlDUVVGRlZpeFhRVUZYTzJkQ1FVRjFRaXhEUVVGRExFTkJRWEpGVnl4TlFVRnhSU3h2UWtGQmJrSk1MR3RDUVVGclFqdG5Ra0ZGTjBZc1RVRkJUU3hEUVVGRFJTeG5Ra0ZCWjBJN1dVRkRla0lzUTBGQlF6czdPMWxCUlUxTExFZEJRV3RDTEVWQlFXeENRU3hEUVVGclFqdHRRa0ZCZWtJc1VVRkJVU3hEUVVGRVFTeHJRa0ZCYTBJc1EwRkJRMVlzUzBGQlN5eEZRVUZGVHl4UFFVRlBMRVZCUVVWSkxFbEJRVWtzUlVGQmVVSXNRMEZCUXp0blFrRkJlRUlzUjBGQlIxSXNRMEZCU0N4SFFVRnhRaXhEUVVGeVFpeEpRVUZ4UWl4SFFVRnlRaXhUUVVGeFFpeERRVUZ5UWl4TlFVRnhRaXhGUVVGc1FrRXNhMEpCUVd0Q0xFZEJRWEpDTEVkQlFYRkNMRTlCUVhKQ0xFbEJRWEZDTEVkQlFYSkNMRU5CUVhGQ0xFZEJRWEpDTEVsQlFYRkNMRWRCUVhKQ0xFTkJRWEZDTEU5QlFYSkNMRWxCUVhGQ0xFZEJRWEpDTEVOQlFYRkNMRVZCUVhKQ0xFbEJRWEZDTEVkQlFYSkNMRWxCUVhGQ0xFVkJRWEpDTEVsQlFYRkNMRWRCUVhKQ0xFTkJRVU03YjBKQlFVVkJMR3RDUVVGclFpeERRVUZ5UWl4SlFVRnhRaXhIUVVGeVFpeERRVUZ4UWl4SlFVRnlRaXhUUVVGeFFpeERRVUZ5UWl4SlFVRnhRaXhEUTNwRGRrVXNRMFI1UTNWRk8yZENRVUZFTEVOQlFVTTdiMEpCVHpGRFN5eE5RVUZMTzJkQ1FVNDVRaXhGUVVGRkxFVkJRVVZITEVsQlFVa3NTMEZCUzFBc1UwRkJVeXhGUVVGRkxFTkJRVU03YjBKQlEzWkNUeXhKUVVGSkxFZEJRVWRLTEU5QlFVOHNRMEZCUXl4RFFVRkRMRVZCUVVjc1FVRkJTQ3hEUVVGSE8yOUNRVU51UWtFc1QwRkJUeXhIUVVGSFVDeExRVUZMTEVOQlFVTXNRMEZCUlN4RlFVRkhMRUZCUVVnc1EwRkJSenR2UWtGRGNrSkJMRXRCUVVzc1IwRkJSMFlzWjBKQlFXZENMRU5CUVVNc1EwRkJReXhGUVVGSExFRkJRVWdzUTBGQlJ6dG5Ra0ZETDBJc1EwRkJRenRuUWtGRlJDeEhRVUZMTEVOQlFVTlBMR2RDUVVGblFpeEpRVUZIUnl4TlFVRkxMRWRCUVV4QkxFMUJRVXNzVlVGQlEwVXNhMEpCUVd0Q0xFTkJRWGhDUml4TFFVRnJSaXhEUVVGc1JrRXNUVUZCU3l4RlFVRk1RU3hEUVVGRE8yOUNRVUYzUWxJc1MwRkJTenR2UWtGQlJVOHNUMEZCVHp0dlFrRkJSVWtzU1VGQlNUdHZRa0ZCUldRc1YwRkJWenRuUWtGQmRVSXNRMEZCUXl4RFFVRnNSbGNzVFVGQmEwWXNiMEpCUVc1Q1RDeHJRa0ZCYTBJN1owSkJSVEZITEUxQlFVMHNRMEZCUTBVc1owSkJRV2RDTzFsQlEzcENMRU5CUVVNN08wMDdPMFZCTjBNeVEwY3NUVUZCU3p0clFrRkJPVUpXTEdkQ1FVRm5RaXhCSW4wPSIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFUgPSBcInVcIjtcbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IFNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgVSwgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHsgZmlyc3QgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlIHtcbiAgY29uc3RydWN0b3IodHlwZSwgcmVndWxhckV4cHJlc3Npb24pIHtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMucmVndWxhckV4cHJlc3Npb24gPSByZWd1bGFyRXhwcmVzc2lvbjtcbiAgfVxuICBcbiAgZ2V0VHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlO1xuICB9XG4gIFxuICBnZXRSZWd1bGFyRXhwcmVzc2lvbigpIHtcbiAgICByZXR1cm4gdGhpcy5yZWd1bGFyRXhwcmVzc2lvbjtcbiAgfVxuXG4gIG1hdGNoKGNvbnRlbnQpIHtcbiAgICBsZXQgc2lnbmlmaWNhbnRUb2tlbiA9IG51bGw7XG5cbiAgICBjb25zdCBtYXRjaGVzID0gY29udGVudC5tYXRjaCh0aGlzLnJlZ3VsYXJFeHByZXNzaW9uKTtcblxuICAgIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB7IGluZGV4IH0gPSBtYXRjaGVzO1xuXG4gICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgY29uc3QgZmlyc3RNYXRjaCA9IGZpcnN0KG1hdGNoZXMpO1xuXG4gICAgICAgIGNvbnRlbnQgPSBmaXJzdE1hdGNoOyAvLy9cblxuICAgICAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gY29udGVudC5sZW5ndGg7XG5cbiAgICAgICAgaWYgKGNvbnRlbnRMZW5ndGggPiAwKSB7XG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlbiA9IFNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnRBbmRUeXBlKGNvbnRlbnQsIHRoaXMudHlwZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuICBcbiAgYXNFbnRyeSgpIHtcbiAgICBjb25zdCBlbnRyeSA9IHt9LFxuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybiA9IGAke3RoaXMucmVndWxhckV4cHJlc3Npb259YDtcblxuICAgIGVudHJ5W3RoaXMudHlwZV0gPSByZWd1bGFyRXhwcmVzc2lvblBhdHRlcm47XG5cbiAgICByZXR1cm4gZW50cnk7XG4gIH1cblxuICBzdGF0aWMgZnJvbVRva2VuKFRva2VuKSB7XG4gICAgY29uc3QgeyB0eXBlLCByZWd1bGFyRXhwcmVzc2lvbiB9ID0gVG9rZW4sXG4gICAgICAgICAgcnVsZSA9IG5ldyBSdWxlKHR5cGUsIHJlZ3VsYXJFeHByZXNzaW9uKTtcblxuICAgIHJldHVybiBydWxlO1xuICB9XG5cbiAgc3RhdGljIGZyb21FbnRyeShlbnRyeSkge1xuICAgIGNvbnN0IGVudHJ5S2V5cyA9IE9iamVjdC5rZXlzKGVudHJ5KSxcbiAgICAgICAgICBmaXJzdEVudHJ5S2V5ID0gZmlyc3QoZW50cnlLZXlzKSxcbiAgICAgICAgICB0eXBlID0gZmlyc3RFbnRyeUtleSwgLy8vXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb25QYXR0ZXJuID0gZW50cnlbdHlwZV0sXG4gICAgICAgICAgcnVsZSA9IFJ1bGUuZnJvbVR5cGVBbmRSZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4odHlwZSwgcmVndWxhckV4cHJlc3Npb25QYXR0ZXJuKTtcbiAgICAgICAgXG4gICAgcmV0dXJuIHJ1bGU7IFxuICB9XG5cbiAgc3RhdGljIGZyb21UeXBlQW5kUmVndWxhckV4cHJlc3Npb25QYXR0ZXJuKHR5cGUsIHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybikge1xuICAgIGNvbnN0IHVuaWNvZGUgPSBpc1VuaWNvZGUocmVndWxhckV4cHJlc3Npb25QYXR0ZXJuKSxcbiAgICAgICAgICBmbGFncyA9IHVuaWNvZGUgP1xuICAgICAgICAgICAgICAgICAgICBVIDpcbiAgICAgICAgICAgICAgICAgICAgICBFTVBUWV9TVFJJTkcsXG4gICAgICAgICAgcmVnRXhwID0gbmV3IFJlZ0V4cChyZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4sIGZsYWdzKSxcbiAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvbiA9IHJlZ0V4cCwgLy8vXG4gICAgICAgICAgcnVsZSA9IG5ldyBSdWxlKHR5cGUsIHJlZ3VsYXJFeHByZXNzaW9uKTtcblxuICAgIHJldHVybiBydWxlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzVW5pY29kZShyZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4pIHtcbiAgY29uc3QgdW5pY29kZVJlZ3VsYXJFeHByZXNzaW9uID0gL3V7LywgLy8vXG4gICAgICAgIGluZGV4ID0gcmVndWxhckV4cHJlc3Npb25QYXR0ZXJuLnNlYXJjaCh1bmljb2RlUmVndWxhckV4cHJlc3Npb24pLFxuICAgICAgICB1bmljb2RlID0gKGluZGV4ICE9PSAtMSk7XG5cbiAgcmV0dXJuIHVuaWNvZGU7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5leHBvcnQgY29uc3QgcGx1cyA9IFwiK1wiO1xyXG5leHBvcnQgY29uc3QgZXBzaWxvbiA9IFwiXHUwM0I1XCI7XHJcbmV4cG9ydCBjb25zdCB3aWxkY2FyZCA9IFwiLlwiO1xyXG5leHBvcnQgY29uc3QgYXN0ZXJpc2sgPSBcIipcIjtcclxuZXhwb3J0IGNvbnN0IHNlcGFyYXRvciA9IFwiOjo9XCI7XHJcbmV4cG9ydCBjb25zdCB0ZXJtaW5hdG9yID0gXCI7XCI7XHJcbmV4cG9ydCBjb25zdCB2ZXJ0aWNhbEJhciA9IFwifFwiO1xyXG5leHBvcnQgY29uc3Qgb3BlbkJyYWNrZXQgPSBcIihcIjtcclxuZXhwb3J0IGNvbnN0IGNsb3NlQnJhY2tldCA9IFwiKVwiO1xyXG5leHBvcnQgY29uc3QgcXVlc3Rpb25NYXJrID0gXCI/XCI7XHJcbmV4cG9ydCBjb25zdCBleGNsYW1hdGlvbk1hcmsgPSBcIiFcIjtcclxuZXhwb3J0IGNvbnN0IE5PX1dISVRFU1BBQ0UgPSBcIjxOT19XSElURVNQQUNFPlwiO1xyXG5leHBvcnQgY29uc3QgRU5EX09GX0xJTkUgPSBcIjxFTkRfT0ZfTElORT5cIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBwbHVzLFxyXG4gIGVwc2lsb24sXHJcbiAgd2lsZGNhcmQsXHJcbiAgYXN0ZXJpc2ssXHJcbiAgc2VwYXJhdG9yLFxyXG4gIHRlcm1pbmF0b3IsXHJcbiAgdmVydGljYWxCYXIsXHJcbiAgb3BlbkJyYWNrZXQsXHJcbiAgY2xvc2VCcmFja2V0LFxyXG4gIHF1ZXN0aW9uTWFyayxcclxuICBleGNsYW1hdGlvbk1hcmssXHJcbiAgTk9fV0hJVEVTUEFDRSxcclxuICBFTkRfT0ZfTElORVxyXG59O1xyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5jb25zdCBlbnRyaWVzID0gW1xyXG4gIHtcclxuICAgIFwic3BlY2lhbFwiOiBcIl4oPzo6Oj18XFxcXHx8XFxcXCh8XFxcXCl8XFxcXD98XFxcXCF8XFxcXCp8XFxcXCt8XFxcXC58XHUwM0I1fDt8PE5PX1dISVRFU1BBQ0U+fDxFTkRfT0ZfTElORT4pXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwidHlwZVwiOiBcIl5cXFxcW1teXFxcXF1dK1xcXFxdXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwibmFtZVwiOiBcIl5bXFxcXHd+XStcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJ1bmFzc2lnbmVkXCI6IFwiXlteXFxcXHNdK1wiXHJcbiAgfVxyXG5dO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZW50cmllcztcclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5Db21tZW50RnJvbVRva2VuQW5kSW5Db21tZW50KHRva2VuLCBpbkNvbW1lbnQpIHtcbiAgY29uc3QgdG9rZW5Db21tZW50VG9rZW4gPSB0b2tlbi5pc0NvbW1lbnRUb2tlbigpO1xuXG4gIGlmICh0b2tlbkNvbW1lbnRUb2tlbikge1xuICAgIGNvbnN0IGNvbW1lbnRUb2tlbiA9IHRva2VuLCAvLy9cbiAgICAgICAgICBjb21tZW50VG9rZW5JbkNvbW1lbnRQcmVzZXJ2aW5nID0gY29tbWVudFRva2VuLmlzSW5Db21tZW50UHJlc2VydmluZygpO1xuXG4gICAgaW5Db21tZW50ID0gY29tbWVudFRva2VuSW5Db21tZW50UHJlc2VydmluZzsgIC8vL1xuICB9XG5cbiAgcmV0dXJuIGluQ29tbWVudDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XHJcblxyXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IGluQ29tbWVudEZyb21Ub2tlbkFuZEluQ29tbWVudCB9IGZyb20gXCIuLi91dGlsaXRpZXMvdG9rZW5cIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbW1vbkxleGVyIHtcclxuICBjb25zdHJ1Y3RvcihydWxlcywgSW5Db21tZW50Q2xhc3NlcywgTm90SW5Db21tZW50Q2xhc3Nlcykge1xyXG4gICAgdGhpcy5ydWxlcyA9IHJ1bGVzO1xyXG4gICAgdGhpcy5JbkNvbW1lbnRDbGFzc2VzID0gSW5Db21tZW50Q2xhc3NlcztcclxuICAgIHRoaXMuTm90SW5Db21tZW50Q2xhc3NlcyA9IE5vdEluQ29tbWVudENsYXNzZXM7XHJcbiAgfVxyXG4gIFxyXG4gIGdldFJ1bGVzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucnVsZXM7XHJcbiAgfVxyXG5cclxuICBnZXRJbkNvbW1lbnRDbGFzc2VzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuSW5Db21tZW50Q2xhc3NlcztcclxuICB9XHJcblxyXG4gIGdldE5vdEluQ29tbWVudENsYXNzZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5Ob3RJbkNvbW1lbnRDbGFzc2VzO1xyXG4gIH1cclxuXHJcbiAgdG9rZW5pc2UoY29udGVudCwgaW5Db21tZW50ID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IHRva2VucyA9IFtdO1xyXG5cclxuICAgIHdoaWxlIChjb250ZW50ICE9PSBFTVBUWV9TVFJJTkcpIHtcclxuICAgICAgbGV0IHRva2VuID0gbnVsbDtcclxuXHJcbiAgICAgIGNvbnN0IENsYXNzZXMgPSBpbkNvbW1lbnQgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLkluQ29tbWVudENsYXNzZXMgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuTm90SW5Db21tZW50Q2xhc3NlcztcclxuXHJcbiAgICAgIENsYXNzZXMuc29tZSgoQ2xhc3MpID0+IHtcclxuICAgICAgICBpZiAoQ2xhc3MgIT09IG51bGwpIHtcclxuICAgICAgICAgIHRva2VuID0gQ2xhc3MubWF0Y2goY29udGVudCk7XHJcblxyXG4gICAgICAgICAgaWYgKHRva2VuICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAodG9rZW4gPT09IG51bGwpIHtcclxuICAgICAgICBsZXQgc2lnbmlmaWNhbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMucnVsZXMuc29tZSgocnVsZSkgPT4ge1xyXG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlbiA9IHJ1bGUubWF0Y2goY29udGVudCk7XHJcblxyXG4gICAgICAgICAgaWYgKHNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgdG9rZW4gPSBzaWduaWZpY2FudFRva2VuOyAvLy9cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodG9rZW4gPT09IG51bGwpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBjb250ZW50ICcke2NvbnRlbnR9JyBjYW5ub3QgYmUgdG9rZW5pc2VkLmApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0b2tlbnMucHVzaCh0b2tlbik7XHJcblxyXG4gICAgICBpbkNvbW1lbnQgPSBpbkNvbW1lbnRGcm9tVG9rZW5BbmRJbkNvbW1lbnQodG9rZW4sIGluQ29tbWVudCk7XHJcblxyXG4gICAgICBjb25zdCB0b2tlbkNvbnRlbnRMZW5ndGggPSB0b2tlbi5nZXRDb250ZW50TGVuZ3RoKCksXHJcbiAgICAgICAgICAgIHN0YXJ0ID0gdG9rZW5Db250ZW50TGVuZ3RoOyAvLy9cclxuXHJcbiAgICAgIGNvbnRlbnQgPSBjb250ZW50LnN1YnN0cmluZyhzdGFydCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRva2VucztcclxuICB9XHJcblxyXG4gIHN0YXRpYyBmcm9tTm90aGluZyhDbGFzcykge1xyXG4gICAgY29uc3QgeyBlbnRyaWVzIH0gPSBDbGFzcyxcclxuICAgICAgICAgIEluQ29tbWVudENsYXNzZXMgPSBJbkNvbW1lbnRDbGFzc2VzRnJvbUNsYXNzKENsYXNzKSxcclxuICAgICAgICAgIE5vdEluQ29tbWVudENsYXNzZXMgPSBOb3RJbkNvbW1lbnRDbGFzc2VzRnJvbUNsYXNzKENsYXNzKSxcclxuICAgICAgICAgIHJ1bGVzID0gZW50cmllcy5tYXAoKGVudHJ5KSA9PiBSdWxlLmZyb21FbnRyeShlbnRyeSkpLFxyXG4gICAgICAgICAgbGV4ZXIgPSBuZXcgQ2xhc3MocnVsZXMsIEluQ29tbWVudENsYXNzZXMsIE5vdEluQ29tbWVudENsYXNzZXMpO1xyXG5cclxuICAgIHJldHVybiBsZXhlcjtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBmcm9tUnVsZXMoQ2xhc3MsIHJ1bGVzKSB7XHJcbiAgICBjb25zdCBJbkNvbW1lbnRDbGFzc2VzID0gSW5Db21tZW50Q2xhc3Nlc0Zyb21DbGFzcyhDbGFzcyksXHJcbiAgICAgICAgICBOb3RJbkNvbW1lbnRDbGFzc2VzID0gTm90SW5Db21tZW50Q2xhc3Nlc0Zyb21DbGFzcyhDbGFzcyksXHJcbiAgICAgICAgICBsZXhlciA9IG5ldyBDbGFzcyhydWxlcywgSW5Db21tZW50Q2xhc3NlcywgTm90SW5Db21tZW50Q2xhc3Nlcyk7XHJcblxyXG4gICAgcmV0dXJuIGxleGVyO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGZyb21FbnRyaWVzKENsYXNzLCBlbnRyaWVzKSB7XHJcbiAgICBjb25zdCBydWxlcyA9IGVudHJpZXMubWFwKChlbnRyeSkgPT4gUnVsZS5mcm9tRW50cnkoZW50cnkpKSxcclxuICAgICAgICAgIEluQ29tbWVudENsYXNzZXMgPSBJbkNvbW1lbnRDbGFzc2VzRnJvbUNsYXNzKENsYXNzKSxcclxuICAgICAgICAgIE5vdEluQ29tbWVudENsYXNzZXMgPSBOb3RJbkNvbW1lbnRDbGFzc2VzRnJvbUNsYXNzKENsYXNzKSxcclxuICAgICAgICAgIGxleGVyID0gbmV3IENsYXNzKHJ1bGVzLCBJbkNvbW1lbnRDbGFzc2VzLCBOb3RJbkNvbW1lbnRDbGFzc2VzKTtcclxuXHJcbiAgICByZXR1cm4gbGV4ZXI7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBJbkNvbW1lbnRDbGFzc2VzRnJvbUNsYXNzKENsYXNzKSB7XHJcbiAgY29uc3QgeyBFbmRPZkxpbmVDb21tZW50VG9rZW4sIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9ID0gQ2xhc3MsXHJcbiAgICAgICAgSW5Db21tZW50Q2xhc3NlcyA9IFtcclxuICAgICAgICAgIEVuZE9mTGluZUNvbW1lbnRUb2tlbixcclxuICAgICAgICAgIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLFxyXG4gICAgICAgICAgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW5cclxuICAgICAgICBdO1xyXG5cclxuICByZXR1cm4gSW5Db21tZW50Q2xhc3NlcztcclxufVxyXG5cclxuZnVuY3Rpb24gTm90SW5Db21tZW50Q2xhc3Nlc0Zyb21DbGFzcyhDbGFzcykge1xyXG4gIGNvbnN0IHsgRW5kT2ZMaW5lVG9rZW4sXHJcbiAgICAgICAgICBXaGl0ZXNwYWNlVG9rZW4sXHJcbiAgICAgICAgICBTaW5nbGVMaW5lQ29tbWVudFRva2VuLFxyXG4gICAgICAgICAgUmVndWxhckV4cHJlc3Npb25Ub2tlbixcclxuICAgICAgICAgIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sXHJcbiAgICAgICAgICBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4sXHJcbiAgICAgICAgICBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gfSA9IENsYXNzLFxyXG4gICAgICBOb3RJbkNvbW1lbnRDbGFzc2VzID0gW1xyXG4gICAgICAgIEVuZE9mTGluZVRva2VuLFxyXG4gICAgICAgIFdoaXRlc3BhY2VUb2tlbixcclxuICAgICAgICBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLFxyXG4gICAgICAgIFNpbmdsZUxpbmVDb21tZW50VG9rZW4sXHJcbiAgICAgICAgUmVndWxhckV4cHJlc3Npb25Ub2tlbixcclxuICAgICAgICBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4sXHJcbiAgICAgICAgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuXHJcbiAgICAgIF07XHJcblxyXG4gIHJldHVybiBOb3RJbkNvbW1lbnRDbGFzc2VzO1xyXG59IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVG9rZW4gZnJvbSBcIi4uL3Rva2VuXCI7XG5cbmNvbnN0IHNpZ25pZmljYW50ID0gZmFsc2U7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vblNpZ25pZmljYW50VG9rZW4gZXh0ZW5kcyBUb2tlbiB7XG4gIGNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLCBzaWduaWZpY2FudCk7IH1cblxuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIFRva2VuLm1hdGNoKENsYXNzLCBjb250ZW50LCBzaWduaWZpY2FudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIFRva2VuLmZyb21Db250ZW50KENsYXNzLCBjb250ZW50LCBzaWduaWZpY2FudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnRBbmRUeXBlKENsYXNzLCBjb250ZW50LCB0eXBlKSB7IHJldHVybiBUb2tlbi5mcm9tQ29udGVudEFuZFR5cGUoQ2xhc3MsIGNvbnRlbnQsIHR5cGUsIHNpZ25pZmljYW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgd2hpdGVzcGFjZVR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2hpdGVzcGFjZVRva2VuIGV4dGVuZHMgTm9uU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGFzSFRNTCgpIHtcbiAgICBjb25zdCBodG1sID0gdGhpcy5pbm5lckhUTUw7ICAvLy9cblxuICAgIHJldHVybiBodG1sO1xuICB9XG5cbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKFdoaXRlc3BhY2VUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgc3RhdGljIHR5cGUgPSB3aGl0ZXNwYWNlVHlwZTtcblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXltcXHQgXSsvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLm1hdGNoKFdoaXRlc3BhY2VUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudChXaGl0ZXNwYWNlVG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi90b2tlbi9zaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyByZWd1bGFyRXhwcmVzc2lvblR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVndWxhckV4cHJlc3Npb25Ub2tlbiBleHRlbmRzIFNpZ25pZmljYW50VG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoUmVndWxhckV4cHJlc3Npb25Ub2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgc3RhdGljIHR5cGUgPSByZWd1bGFyRXhwcmVzc2lvblR5cGU7XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL15cXC8oPzpcXFxcW15cXHNdfFteXFwvXFxyXFxuXSkqXFwvLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChSZWd1bGFyRXhwcmVzc2lvblRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi90b2tlbi9ub25TaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBlbmRPZkxpbmVUeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4gZXh0ZW5kcyBOb25TaWduaWZpY2FudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIGFzSFRNTCgpIHtcbiAgICBjb25zdCBodG1sID0gdGhpcy5pbm5lckhUTUw7ICAvLy9cblxuICAgIHJldHVybiBodG1sO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBlbmRPZkxpbmVUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eKD86XFxyXFxufFxccnxcXG4pLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi90b2tlbi9zaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBzdHJpbmdMaXRlcmFsVHlwZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJpbmdMaXRlcmFsVG9rZW4gZXh0ZW5kcyBTaWduaWZpY2FudFRva2VuIHtcbiAgY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShDbGFzcywgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgZ2V0U3RyaW5nKCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSxcbiAgICAgICAgICBjb250ZW50TGVuZ3RoID0gY29udGVudC5sZW5ndGgsXG4gICAgICAgICAgc3RhcnQgPSAxLFxuICAgICAgICAgIGVuZCA9IGNvbnRlbnRMZW5ndGggLSAxLFxuICAgICAgICAgIHN0cmluZyA9IGNvbnRlbnQuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIHN0YXRpYyB0eXBlID0gc3RyaW5nTGl0ZXJhbFR5cGU7XG5cbiAgc3RhdGljIG1hdGNoKENsYXNzLCBjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLm1hdGNoKENsYXNzLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChDbGFzcywgY29udGVudCkgeyByZXR1cm4gU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudChDbGFzcywgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFN0cmluZ0xpdGVyYWxUb2tlbiBmcm9tIFwiLi4vLi4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gZXh0ZW5kcyBTdHJpbmdMaXRlcmFsVG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXlwiKD86XFxcXFteXFxzXXxbXlwiXFxcXFxcclxcbl0pKlwiLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gU3RyaW5nTGl0ZXJhbFRva2VuLm1hdGNoKERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gU3RyaW5nTGl0ZXJhbFRva2VuLmZyb21Db250ZW50KERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCBlbnRyaWVzIGZyb20gXCIuL2VudHJpZXNcIjtcclxuaW1wb3J0IENvbW1vbkxleGVyIGZyb20gXCIuLi9jb21tb24vbGV4ZXJcIjtcclxuaW1wb3J0IFdoaXRlc3BhY2VUb2tlbiBmcm9tIFwiLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvd2hpdGVzcGFjZVwiO1xyXG5pbXBvcnQgUmVndWxhckV4cHJlc3Npb25Ub2tlbiBmcm9tIFwiLi4vdG9rZW4vc2lnbmlmaWNhbnQvcmVndWxhckV4cHJlc3Npb25cIjtcclxuaW1wb3J0IEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uL3Rva2VuL25vblNpZ25pZmljYW50L2VuZE9mTGluZVwiO1xyXG5pbXBvcnQgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIGZyb20gXCIuLi90b2tlbi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsL2RvdWJseVF1b3RlZFwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQk5GTGV4ZXIgZXh0ZW5kcyBDb21tb25MZXhlciB7XHJcbiAgdG9rZW5zRnJvbUJORihibmYpIHtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSBibmYsICAvLy9cclxuICAgICAgICAgIHRva2VucyA9IHN1cGVyLnRva2VuaXNlKGNvbnRlbnQpO1xyXG5cclxuICAgIHJldHVybiB0b2tlbnM7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZW50cmllcyA9IGVudHJpZXM7XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVUb2tlbiA9IEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW47IC8vL1xyXG5cclxuICBzdGF0aWMgV2hpdGVzcGFjZVRva2VuID0gV2hpdGVzcGFjZVRva2VuO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4gPSBSZWd1bGFyRXhwcmVzc2lvblRva2VuO1xyXG5cclxuICBzdGF0aWMgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IG51bGw7XHJcblxyXG4gIHN0YXRpYyBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gPSBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW47XHJcblxyXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21Ob3RoaW5nKEJORkxleGVyKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tUnVsZXMoQk5GTGV4ZXIsIHJ1bGVzKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbUVudHJpZXMoZW50cmllcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbUVudHJpZXMoQk5GTGV4ZXIsIGVudHJpZXMpOyB9XHJcbn1cclxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuY29uc3QgZW50cmllcyA9IFtcclxuICB7XHJcbiAgICBcImRpZ2l0XCI6IFwiXlxcXFxkK1wiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcImJyYWNrZXRcIjogXCJeKD86XFxcXCh8XFxcXCkpXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwib3BlcmF0b3JcIjogXCJeKD86XFxcXCt8XFxcXC18XFxcXCp8XFxcXC8pXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwidW5hc3NpZ25lZFwiOiBcIl5bXlxcXFxzXStcIlxyXG4gIH1cclxuXTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGVudHJpZXM7XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFN0cmluZ0xpdGVyYWxUb2tlbiBmcm9tIFwiLi4vLi4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gZXh0ZW5kcyBTdHJpbmdMaXRlcmFsVG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXicoPzpcXFxcW15cXHNdfFteJ1xcXFxcXHJcXG5dKSonLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gU3RyaW5nTGl0ZXJhbFRva2VuLm1hdGNoKFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gU3RyaW5nTGl0ZXJhbFRva2VuLmZyb21Db250ZW50KFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IHNpbmdsZUxpbmVDb21tZW50VHlwZSB9IGZyb20gXCIuLi8uLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaW5nbGVMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgTm9uU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIGlzSW5Db21tZW50UHJlc2VydmluZygpIHtcbiAgICBjb25zdCBpbkNvbW1lbnRQcmVzZXJ2aW5nID0gZmFsc2U7XG5cbiAgICByZXR1cm4gaW5Db21tZW50UHJlc2VydmluZztcbiAgfVxuXG4gIHN0YXRpYyB0eXBlID0gc2luZ2xlTGluZUNvbW1lbnRUeXBlO1xuXG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChDbGFzcywgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTaW5nbGVMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHl0aG9uU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShQeXRob25TdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eI1teXFxyXFxuXSovO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTaW5nbGVMaW5lQ29tbWVudFRva2VuLm1hdGNoKFB5dGhvblN0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gU2luZ2xlTGluZUNvbW1lbnRUb2tlbi5mcm9tQ29udGVudChQeXRob25TdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBlbmRPZkxpbmVDb21tZW50VHlwZSB9IGZyb20gXCIuLi8uLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRPZkxpbmVDb21tZW50Tm9uU2lnbmlmaWNhbnRUb2tlbiBleHRlbmRzIE5vblNpZ25pZmljYW50VG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoRW5kT2ZMaW5lQ29tbWVudE5vblNpZ25pZmljYW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIGFzSFRNTCgpIHtcbiAgICBjb25zdCBodG1sID0gdGhpcy5pbm5lckhUTUw7ICAvLy9cblxuICAgIHJldHVybiBodG1sO1xuICB9XG5cbiAgaXNJbkNvbW1lbnRQcmVzZXJ2aW5nKCkge1xuICAgIGNvbnN0IGluQ29tbWVudFByZXNlcnZpbmcgPSB0cnVlO1xuXG4gICAgcmV0dXJuIGluQ29tbWVudFByZXNlcnZpbmc7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IGVuZE9mTGluZUNvbW1lbnRUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eKD86XFxyXFxufFxccnxcXG4pLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChFbmRPZkxpbmVDb21tZW50Tm9uU2lnbmlmaWNhbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudChFbmRPZkxpbmVDb21tZW50Tm9uU2lnbmlmaWNhbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IGVuZE9mTXVsdGlMaW5lQ29tbWVudFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBOb25TaWduaWZpY2FudFRva2VuIHtcbiAgY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShDbGFzcywgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgaXNJbkNvbW1lbnRQcmVzZXJ2aW5nKCkge1xuICAgIGNvbnN0IGluQ29tbWVudFByZXNlcnZpbmcgPSBmYWxzZTtcblxuICAgIHJldHVybiBpbkNvbW1lbnRQcmVzZXJ2aW5nO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBlbmRPZk11bHRpTGluZUNvbW1lbnRUeXBlO1xuXG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChDbGFzcywgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvZW5kT2ZcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHl0aG9uU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKFB5dGhvblN0eWxlRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eIyMjLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ubWF0Y2goUHl0aG9uU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoUHl0aG9uU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IHN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgTm9uU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoQ2xhc3MsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIGlzSW5Db21tZW50UHJlc2VydmluZygpIHtcbiAgICBjb25zdCBpbkNvbW1lbnRQcmVzZXJ2aW5nID0gdHJ1ZTtcblxuICAgIHJldHVybiBpbkNvbW1lbnRQcmVzZXJ2aW5nO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBzdGFydE9mTXVsdGlMaW5lQ29tbWVudFR5cGU7XG5cbiAgc3RhdGljIG1hdGNoKENsYXNzLCBjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLm1hdGNoKENsYXNzLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChDbGFzcywgY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudChDbGFzcywgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2ZcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHl0aG9uU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShQeXRob25TdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eIyMjLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5tYXRjaChQeXRob25TdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoUHl0aG9uU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgbWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIE5vblNpZ25pZmljYW50VG9rZW4ge1xuICBjbG9uZShDbGFzcywgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKENsYXNzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBpc0luQ29tbWVudFByZXNlcnZpbmcoKSB7XG4gICAgY29uc3QgaW5Db21tZW50UHJlc2VydmluZyA9IHRydWU7XG5cbiAgICByZXR1cm4gaW5Db21tZW50UHJlc2VydmluZztcbiAgfVxuXG4gIHN0YXRpYyB0eXBlID0gbWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VHlwZTtcblxuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4ubWF0Y2goQ2xhc3MsIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KENsYXNzLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFB5dGhvblN0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShQeXRob25TdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXig/OlteXFxyXFxuXSs/KD89IyMjKXxbXlxcclxcbl0rKS87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuLm1hdGNoKFB5dGhvblN0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuLmZyb21Db250ZW50KFB5dGhvblN0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgZW50cmllcyBmcm9tIFwiLi9lbnRyaWVzXCI7XHJcbmltcG9ydCBDb21tb25MZXhlciBmcm9tIFwiLi4vY29tbW9uL2xleGVyXCI7XHJcbmltcG9ydCBXaGl0ZXNwYWNlVG9rZW4gZnJvbSBcIi4uL3Rva2VuL25vblNpZ25pZmljYW50L3doaXRlc3BhY2VcIjtcclxuaW1wb3J0IFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4gZnJvbSBcIi4uL3Rva2VuL3NpZ25pZmljYW50L3JlZ3VsYXJFeHByZXNzaW9uXCI7XHJcbmltcG9ydCBFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi90b2tlbi9ub25TaWduaWZpY2FudC9lbmRPZkxpbmVcIjtcclxuaW1wb3J0IFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiBmcm9tIFwiLi4vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9zaW5nbHlRdW90ZWRcIjtcclxuaW1wb3J0IERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiBmcm9tIFwiLi4vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9kb3VibHlRdW90ZWRcIjtcclxuaW1wb3J0IFB5dGhvblN0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lL3B5dGhvblN0eWxlXCI7XHJcbmltcG9ydCBFbmRPZkxpbmVDb21tZW50Tm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9lbmRPZkxpbmVcIjtcclxuaW1wb3J0IFB5dGhvblN0eWxlRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mL3B5dGhvblN0eWxlXCI7XHJcbmltcG9ydCBQeXRob25TdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2YvcHl0aG9uU3R5bGVcIjtcclxuaW1wb3J0IFB5dGhvblN0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mL3B5dGhvblN0eWxlXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCYXNpY0xleGVyIGV4dGVuZHMgQ29tbW9uTGV4ZXIge1xyXG4gIHN0YXRpYyBlbnRyaWVzID0gZW50cmllcztcclxuXHJcbiAgc3RhdGljIEVuZE9mTGluZVRva2VuID0gRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBXaGl0ZXNwYWNlVG9rZW4gPSBXaGl0ZXNwYWNlVG9rZW47XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVDb21tZW50VG9rZW4gPSBFbmRPZkxpbmVDb21tZW50Tm9uU2lnbmlmaWNhbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBSZWd1bGFyRXhwcmVzc2lvblRva2VuID0gUmVndWxhckV4cHJlc3Npb25Ub2tlbjtcclxuXHJcbiAgc3RhdGljIFNpbmdsZUxpbmVDb21tZW50VG9rZW4gPSBQeXRob25TdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW47IC8vL1xyXG5cclxuICBzdGF0aWMgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBQeXRob25TdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBQeXRob25TdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW47IC8vL1xyXG5cclxuICBzdGF0aWMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBQeXRob25TdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IFNpbmdseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbjtcclxuXHJcbiAgc3RhdGljIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbjtcclxuXHJcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbU5vdGhpbmcoQmFzaWNMZXhlcik7IH1cclxuXHJcbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbVJ1bGVzKEJhc2ljTGV4ZXIsIHJ1bGVzKTsgfVxyXG5cclxuICBzdGF0aWMgZnJvbUVudHJpZXMoZW50cmllcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbUVudHJpZXMoQmFzaWNMZXhlciwgZW50cmllcyk7IH1cclxufVxyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi90b2tlbi9zaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBlbmRPZkxpbmVUeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZVNpZ25pZmljYW50VG9rZW4gZXh0ZW5kcyBTaWduaWZpY2FudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKEVuZE9mTGluZVNpZ25pZmljYW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIGFzSFRNTCgpIHtcbiAgICBjb25zdCBodG1sID0gdGhpcy5pbm5lckhUTUw7ICAvLy9cblxuICAgIHJldHVybiBodG1sO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBlbmRPZkxpbmVUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eKD86XFxyXFxufFxccnxcXG4pLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChFbmRPZkxpbmVTaWduaWZpY2FudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KEVuZE9mTGluZVNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi8uLi90b2tlbi9zaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBlbmRPZkxpbmVDb21tZW50VHlwZSB9IGZyb20gXCIuLi8uLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRPZkxpbmVDb21tZW50U2lnbmlmaWNhbnRUb2tlbiBleHRlbmRzIFNpZ25pZmljYW50VG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoRW5kT2ZMaW5lQ29tbWVudFNpZ25pZmljYW50VG9rZW4sIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsgfVxuXG4gIGFzSFRNTCgpIHtcbiAgICBjb25zdCBodG1sID0gdGhpcy5pbm5lckhUTUw7ICAvLy9cblxuICAgIHJldHVybiBodG1sO1xuICB9XG5cbiAgaXNJbkNvbW1lbnRQcmVzZXJ2aW5nKCkge1xuICAgIGNvbnN0IGluQ29tbWVudFByZXNlcnZpbmcgPSB0cnVlO1xuXG4gICAgcmV0dXJuIGluQ29tbWVudFByZXNlcnZpbmc7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IGVuZE9mTGluZUNvbW1lbnRUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eKD86XFxyXFxufFxccnxcXG4pLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChFbmRPZkxpbmVDb21tZW50U2lnbmlmaWNhbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudChFbmRPZkxpbmVDb21tZW50U2lnbmlmaWNhbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNpbmdsZUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvc2luZ2xlTGluZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiB7XG4gIGNsb25lKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSB7IHJldHVybiBzdXBlci5jbG9uZShDU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXlxcL1xcL1teXFxyXFxuXSovO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTaW5nbGVMaW5lQ29tbWVudFRva2VuLm1hdGNoKENTdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFNpbmdsZUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoQ1N0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKENTdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXlxcKlxcLy87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLm1hdGNoKENTdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5mcm9tQ29udGVudChDU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2ZcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ1N0eWxlU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4ge1xuICBjbG9uZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgeyByZXR1cm4gc3VwZXIuY2xvbmUoQ1N0eWxlU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOyB9XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL15cXC9cXCovO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLm1hdGNoKENTdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoQ1N0eWxlU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIHtcbiAgY2xvbmUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pIHsgcmV0dXJuIHN1cGVyLmNsb25lKENTdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7IH1cblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXig/OlteXFxyXFxuXSs/KD89XFwqXFwvKXxbXlxcclxcbl0rKS87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuLm1hdGNoKENTdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5mcm9tQ29udGVudChDU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBSdWxlIH0gZnJvbSBcIi4vcnVsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0eXBlcyB9IGZyb20gXCIuL3R5cGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIi4vc3BlY2lhbFN5bWJvbHNcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBCTkZMZXhlciB9IGZyb20gXCIuL2JuZi9sZXhlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBCYXNpY0xleGVyIH0gZnJvbSBcIi4vYmFzaWMvbGV4ZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29tbW9uTGV4ZXIgfSBmcm9tIFwiLi9jb21tb24vbGV4ZXJcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBTaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTm9uU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEVuZE9mTGluZVNpZ25pZmljYW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9zaWduaWZpY2FudC9lbmRPZkxpbmVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2VuZE9mTGluZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFbmRPZkxpbmVDb21tZW50U2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL3NpZ25pZmljYW50L2NvbW1lbnQvZW5kT2ZMaW5lXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEVuZE9mTGluZUNvbW1lbnROb25TaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9lbmRPZkxpbmVcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBXaGl0ZXNwYWNlVG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC93aGl0ZXNwYWNlXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgU3RyaW5nTGl0ZXJhbFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBSZWd1bGFyRXhwcmVzc2lvblRva2VuIH0gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnQvcmVndWxhckV4cHJlc3Npb25cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9zaW5nbHlRdW90ZWRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9kb3VibHlRdW90ZWRcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBTaW5nbGVMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvZW5kT2ZcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2ZcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZlwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lL2NTdHlsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mL2NTdHlsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZi9jU3R5bGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ1N0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZi9jU3R5bGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUHl0aG9uU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lL3B5dGhvblN0eWxlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFB5dGhvblN0eWxlRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZi9weXRob25TdHlsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQeXRob25TdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mL3B5dGhvblN0eWxlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFB5dGhvblN0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZi9weXRob25TdHlsZVwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuY29uc3QgZW50cmllcyA9IFtcclxuXHJcbiAgeyBcImNvbG91clwiOiBcIl4jKD86WzAtOWEtZkEtRl17Nn18WzAtOWEtZkEtRl17M30pXCIgfSxcclxuXHJcbiAgeyBcImtleXdvcmRcIjogXCJeKD86IWltcG9ydGFudHxAbWVkaWEpXCIgfSxcclxuXHJcbiAgeyBcInBlcmNlbnRhZ2VcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKVxcXFwlXCIgfSxcclxuXHJcbiAgeyBcImZyZXF1ZW5jeVwiOiBcIl4oPzpbMC05XSt8WzAtOV0qXFxcXC5bMC05XSspKD86aHp8a2h6KVwiIH0sXHJcblxyXG4gIHsgXCJmcmFjdGlvblwiOiBcIl5bMS05XVswLTldKj9mclwiIH0sXHJcblxyXG4gIHsgXCJsZW5ndGhcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKSg/OnB4fGNtfG1tfGlufHB0fHBjKVwiIH0sXHJcblxyXG4gIHsgXCJhbmdsZVwiOiBcIl4oPzpbMC05XSt8WzAtOV0qXFxcXC5bMC05XSspKD86ZGVnfHJhZHxncmFkKVwiIH0sXHJcblxyXG4gIHsgXCJ0aW1lXCI6IFwiXig/OlswLTldK3xbMC05XSpcXFxcLlswLTldKykoPzpzfG1zKVwiIH0sXHJcblxyXG4gIHsgXCJyZW1zXCI6IFwiXig/OlswLTldK3xbMC05XSpcXFxcLlswLTldKylyZW1cIiB9LFxyXG5cclxuICB7IFwiZW1zXCI6IFwiXig/OlswLTldK3xbMC05XSpcXFxcLlswLTldKyllbVwiIH0sXHJcblxyXG4gIHsgXCJudW1iZXJcIjogXCJeWzAtOV0rfFswLTldKlxcXFwuWzAtOV0rXCIgfSxcclxuXHJcbiAgeyBcInNwZWNpYWxcIjogXCJeO3w6Onw6fFxcXFwufCx8L3xcXFxcfD18fj18PXw+fFxcXFx7fFxcXFx9fFxcXFwofFxcXFwpfFxcXFxbfFxcXFxdXCIgfSxcclxuXHJcbiAgeyBcIm9wZXJhdG9yXCI6IFwiXl4oPzphbmR8bm90fG9ubHkpJFwiIH0sXHJcblxyXG4gIHsgXCJpZGVudGlmaWVyXCI6IFwiXltfYS16QS1aMC05LV0rXCIgfSxcclxuXHJcbiAgeyBcInVuYXJ5LW9wZXJhdG9yXCI6IFwiXlxcXFwrfFxcXFwtXCIgfSxcclxuXHJcbiAgeyBcInVuYXNzaWduZWRcIjogXCJeW15cXFxcc10rXCIgfVxyXG5cclxuXTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGVudHJpZXM7XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7IENvbW1vbkxleGVyLCBXaGl0ZXNwYWNlVG9rZW4sIEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4sIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcclxuXHJcbmltcG9ydCBlbnRyaWVzIGZyb20gXCIuL2VudHJpZXNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENTU0xleGVyIGV4dGVuZHMgQ29tbW9uTGV4ZXIge1xyXG4gIHN0YXRpYyBlbnRyaWVzID0gZW50cmllcztcclxuXHJcbiAgc3RhdGljIEVuZE9mTGluZVRva2VuID0gRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBXaGl0ZXNwYWNlVG9rZW4gPSBXaGl0ZXNwYWNlVG9rZW47XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVDb21tZW50VG9rZW4gPSBudWxsOyAvLy9cclxuXHJcbiAgc3RhdGljIFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7IC8vL1xyXG5cclxuICBzdGF0aWMgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsOyAvLy9cclxuXHJcbiAgc3RhdGljIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsOyAvLy9cclxuXHJcbiAgc3RhdGljIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDsgLy8vXHJcblxyXG4gIHN0YXRpYyBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuO1xyXG5cclxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tTm90aGluZyhDU1NMZXhlcik7IH1cclxuXHJcbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbVJ1bGVzKENTU0xleGVyLCBydWxlcyk7IH1cclxuXHJcbiAgc3RhdGljIGZyb21FbnRyaWVzKGVudHJpZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21FbnRyaWVzKENTU0xleGVyLCBlbnRyaWVzKTsgfVxyXG59XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgYm5mID0gYFxuXG4gICAgICBkb2N1bWVudCAgICAgICAgICAgICAgOjo9ICAoIHJ1bGUgfCBlcnJvciApKyA7XG5cbiAgICAgIHJ1bGUgICAgICAgICAgICAgICAgICA6Oj0gIG5hbWUgXCI6Oj1cIiBkZWZpbml0aW9ucyBcIjtcIiA7XG5cbiAgICAgIG5hbWUgICAgICAgICAgICAgICAgICA6Oj0gIFtuYW1lXSA7XG5cbiAgICAgIGRlZmluaXRpb25zICAgICAgICAgICA6Oj0gIGRlZmluaXRpb24gKCBcInxcIiBkZWZpbml0aW9uICkqIDtcblxuICAgICAgZGVmaW5pdGlvbiAgICAgICAgICAgIDo6PSAgcGFydCsgO1xuXG4gICAgICBwYXJ0ICAgICAgICAgICAgICAgICAgOjo9ICBub25UZXJtaW5hbFBhcnQgcXVhbnRpZmllcipcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgdGVybWluYWxQYXJ0IHF1YW50aWZpZXIqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG5vV2hpdGVzcGFjZVBhcnRcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuXG4gICAgICBub25UZXJtaW5hbFBhcnQgICAgICAgOjo9ICBjaG9pY2VPZlBhcnRzXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHNlcXVlbmNlT2ZQYXJ0c1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBydWxlTmFtZSBsb29rQWhlYWRNb2RpZmllcj9cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuXG4gICAgICB0ZXJtaW5hbFBhcnQgICAgICAgICAgOjo9ICBzaWduaWZpY2FudFRva2VuVHlwZVxuIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgcmVndWxhckV4cHJlc3Npb25cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgdGVybWluYWxTeW1ib2xcbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIGVuZE9mTGluZVxuIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgd2lsZGNhcmRcbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgbm9XaGl0ZXNwYWNlUGFydCAgICAgIDo6PSAgXCI8Tk9fV0hJVEVTUEFDRT5cIiA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cbiAgICAgIGNob2ljZU9mUGFydHMgICAgICAgICA6Oj0gIFwiKFwiIHBhcnQgKCBcInxcIiBwYXJ0ICkrIFwiKVwiIDtcblxuICAgICAgc2VxdWVuY2VPZlBhcnRzICAgICAgIDo6PSAgXCIoXCIgcGFydCBwYXJ0KyBcIilcIiA7XG5cbiAgICAgIHJ1bGVOYW1lICAgICAgICAgICAgICA6Oj0gIFtuYW1lXSA7XG5cbiAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlICA6Oj0gIFt0eXBlXSA7XG5cbiAgICAgIHJlZ3VsYXJFeHByZXNzaW9uICAgICA6Oj0gIFtyZWd1bGFyLWV4cHJlc3Npb25dIDtcblxuICAgICAgdGVybWluYWxTeW1ib2wgICAgICAgIDo6PSAgW3N0cmluZy1saXRlcmFsXSA7XG5cbiAgICAgIGVuZE9mTGluZSAgICAgICAgICAgICA6Oj0gIFwiPEVORF9PRl9MSU5FPlwiIDtcblxuICAgICAgd2lsZGNhcmQgICAgICAgICAgICAgIDo6PSAgXCIuXCIgO1xuXG4gICAgICBxdWFudGlmaWVyICAgICAgICAgICAgOjo9ICBvcHRpb25hbFF1YW50aWZpZXJcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgb25lT3JNb3JlUXVhbnRpZmllclxuIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgemVyb09yTW9yZVF1YW50aWZpZXJcbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcblxuICAgICAgbG9va0FoZWFkTW9kaWZpZXIgICAgIDo6PSAgPE5PX1dISVRFU1BBQ0U+XCIhXCIgO1xuXG4gICAgICBvcHRpb25hbFF1YW50aWZpZXIgICAgOjo9ICA8Tk9fV0hJVEVTUEFDRT5cIj9cIiA7XG5cbiAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXIgICA6Oj0gIDxOT19XSElURVNQQUNFPlwiK1wiIDtcblxuICAgICAgemVyb09yTW9yZVF1YW50aWZpZXIgIDo6PSAgPE5PX1dISVRFU1BBQ0U+XCIqXCIgO1xuXG4gICAgICBlcnJvciAgICAgICAgICAgICAgICAgOjo9ICAuIDtcblxuYDtcblxuZXhwb3J0IGRlZmF1bHQgYm5mO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgRU1QVFlfU1RSSU5HID0gXCJcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY2hhcmFjdGVycyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCB7IFNQQUNFX0NIQVJBQ1RFUiB9ID0gY2hhcmFjdGVycztcblxuZXhwb3J0IGZ1bmN0aW9uIHBhZGRpbmdGcm9tUGFkZGluZ0xlbmd0aChwYWRkaW5nTGVuZ3RoKSB7XG4gIGxldCBwYWRkaW5nID0gRU1QVFlfU1RSSU5HO1xuXG4gIGZvciAobGV0IHBvc2l0aW9uID0gMDsgcG9zaXRpb24gPCBwYWRkaW5nTGVuZ3RoOyBwb3NpdGlvbisrKSB7XG4gICAgcGFkZGluZyArPSBTUEFDRV9DSEFSQUNURVI7XG4gIH1cblxuICByZXR1cm4gcGFkZGluZztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBwYWRkaW5nRnJvbVBhZGRpbmdMZW5ndGggfSBmcm9tIFwiLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcihuYW1lLCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLmRlZmluaXRpb25zID0gZGVmaW5pdGlvbnM7XG4gICAgdGhpcy5Ob25UZXJtaW5hbE5vZGUgPSBOb25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBnZXROYW1lKCkge1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cblxuICBnZXREZWZpbml0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5kZWZpbml0aW9ucztcbiAgfVxuXG4gIGdldE5vblRlcm1pbmFsTm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5Ob25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBzZXROYW1lKG5hbWUpIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICB9XG5cbiAgc2V0RGVmaW5pdGlvbnMoZGVmaW5pdGlvbnMpIHtcbiAgICB0aGlzLmRlZmluaXRpb25zID0gZGVmaW5pdGlvbnM7XG4gIH1cblxuICBzZXROb25UZXJtaW5hbE5vZGUoTm9uVGVybWluYWxOb2RlKSB7XG4gICAgdGhpcy5Ob25UZXJtaW5hbE5vZGUgPSBOb25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBhZGREZWZpbml0aW9uKGRlZmluaXRpb24sIHBvc2l0aW9uKSB7XG4gICAgY29uc3QgZGVmaW5pdGlvbnNJbmNsdWRlc0RlZmluaXRpb24gPSB0aGlzLmRlZmluaXRpb25zLmluY2x1ZGVzKGRlZmluaXRpb24pO1xuXG4gICAgaWYgKCFkZWZpbml0aW9uc0luY2x1ZGVzRGVmaW5pdGlvbikge1xuICAgICAgaWYgKHBvc2l0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgZGVmaW5pdGlvbnNMZW5ndGggPSB0aGlzLmRlZmluaXRpb25zLmxlbmd0aDtcblxuICAgICAgICBwb3NpdGlvbiA9IGRlZmluaXRpb25zTGVuZ3RoOyAvLy9cbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RhcnQgPSBwb3NpdGlvbiwgLy8vXG4gICAgICAgICAgICBkZWxldGVDb3VudCA9IDA7XG5cbiAgICAgIHRoaXMuZGVmaW5pdGlvbnMuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCwgZGVmaW5pdGlvbik7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlRGVmaW5pdGlvbihkZWZpbml0aW9uKSB7XG4gICAgY29uc3QgZGVmaW5pdGlvbnNJbmNsdWRlc0RlZmluaXRpb24gPSB0aGlzLmRlZmluaXRpb25zLmluY2x1ZGVzKGRlZmluaXRpb24pO1xuXG4gICAgaWYgKGRlZmluaXRpb25zSW5jbHVkZXNEZWZpbml0aW9uKSB7XG4gICAgICBjb25zdCBkZWZpbml0aW9uSW5kZXggPSB0aGlzLmRlZmluaXRpb25zLmluZGV4T2YoZGVmaW5pdGlvbiksXG4gICAgICAgICAgICBzdGFydCA9IGRlZmluaXRpb25JbmRleCwgIC8vL1xuICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxO1xuXG4gICAgICB0aGlzLmRlZmluaXRpb25zLnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpO1xuICAgIH1cbiAgfVxuXG4gIHJlcGxhY2VEZWZpbml0aW9uKG9sZERlZmluaXRpb24sIG5ld0RlZmluaXRpb24pIHtcbiAgICBjb25zdCBvbGREZWZpbml0aW9uSW5kZXggPSB0aGlzLmRlZmluaXRpb25zLmluZGV4T2Yob2xkRGVmaW5pdGlvbik7XG5cbiAgICBpZiAob2xkRGVmaW5pdGlvbkluZGV4ID4gLTEpIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gb2xkRGVmaW5pdGlvbkluZGV4LCAvLy9cbiAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMTtcblxuICAgICAgdGhpcy5kZWZpbml0aW9ucy5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50LCBuZXdEZWZpbml0aW9uKVxuICAgIH1cbiAgfVxuXG4gIHBhcnNlKHN0YXRlLCBjYWxsYmFjaykge1xuICAgIGxldCBydWxlTm9kZSA9IG51bGw7XG5cbiAgICBzdGF0ZS5pbmNyZWFzZURlcHRoKCk7XG5cbiAgICBjb25zdCB0b29EZWVwID0gc3RhdGUuaXNUb29EZWVwKCk7XG5cbiAgICBpZiAodG9vRGVlcCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgcGFyc2UgdHJlZSBpcyB0b28gZGVlcCBhdCBydWxlIFwiJHt0aGlzLm5hbWV9XCIuYCk7XG4gICAgfVxuXG4gICAgbGV0IHBhcnNlZCxcbiAgICAgICAgZGVmaW5pdGlvbk5vZGVzO1xuXG4gICAgdGhpcy5kZWZpbml0aW9ucy5zb21lKChkZWZpbml0aW9uKSA9PiB7XG4gICAgICBkZWZpbml0aW9uTm9kZXMgPSBbXTtcblxuICAgICAgcGFyc2VkID0gdGhpcy5wYXJzZURlZmluaXRpb24oZGVmaW5pdGlvbiwgZGVmaW5pdGlvbk5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spO1xuXG4gICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgY29uc3QgcnVsZU5hbWUgPSB0aGlzLm5hbWUsIC8vL1xuICAgICAgICAgICAgY2hpbGROb2RlcyA9IGRlZmluaXRpb25Ob2RlcywgIC8vL1xuICAgICAgICAgICAgbm9uVGVybWluYWxOb2RlID0gdGhpcy5Ob25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2Rlcyk7XG5cbiAgICAgIHJ1bGVOb2RlID0gbm9uVGVybWluYWxOb2RlOyAvLy9cbiAgICB9XG5cbiAgICBzdGF0ZS5kZWNyZWFzZURlcHRoKCk7XG5cbiAgICByZXR1cm4gcnVsZU5vZGU7XG4gIH1cblxuICBwYXJzZURlZmluaXRpb24oZGVmaW5pdGlvbiwgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBjb25zdCBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpO1xuXG4gICAgcGFyc2VkID0gZGVmaW5pdGlvbi5wYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKG1heGltdW1SdWxlTmFtZUxlbmd0aCwgbXVsdGlMaW5lID0gdHJ1ZSkge1xuICAgIGNvbnN0IGRlZmluaXRpb25zTGVuZ3RoID0gdGhpcy5kZWZpbml0aW9ucy5sZW5ndGg7XG5cbiAgICBtdWx0aUxpbmUgPSBtdWx0aUxpbmUgJiYgKGRlZmluaXRpb25zTGVuZ3RoID4gMSk7ICAvLy9cblxuICAgIGNvbnN0IG1heGltdW1QYWRkaW5nID0gcGFkZGluZ0Zyb21QYWRkaW5nTGVuZ3RoKG1heGltdW1SdWxlTmFtZUxlbmd0aCksXG4gICAgICAgICAgZGVmaW5pdGlvbnNTdHJpbmcgPSB0aGlzLmRlZmluaXRpb25zLnJlZHVjZSgoZGVmaW5pdGlvbnNTdHJpbmcsIGRlZmluaXRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb25TdHJpbmcgPSBkZWZpbml0aW9uLmFzU3RyaW5nKCk7XG5cbiAgICAgICAgICAgIGlmIChkZWZpbml0aW9uc1N0cmluZyA9PT0gRU1QVFlfU1RSSU5HKSB7XG4gICAgICAgICAgICAgIGRlZmluaXRpb25zU3RyaW5nID0gZGVmaW5pdGlvblN0cmluZzsgLy8vXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBkZWZpbml0aW9uc1N0cmluZyA9IG11bHRpTGluZSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2RlZmluaXRpb25zU3RyaW5nfVxuXG4ke21heGltdW1QYWRkaW5nfSAgIHwgJHtkZWZpbml0aW9uU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2RlZmluaXRpb25zU3RyaW5nfSB8ICR7ZGVmaW5pdGlvblN0cmluZ31gO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZGVmaW5pdGlvbnNTdHJpbmc7XG4gICAgICAgICAgfSwgRU1QVFlfU1RSSU5HKSxcbiAgICAgICAgICBydWxlTmFtZSA9IHRoaXMubmFtZSwgLy8vXG4gICAgICAgICAgcnVsZU5hbWVMZW5ndGggPSBydWxlTmFtZS5sZW5ndGgsXG4gICAgICAgICAgcGFkZGluZ0xlbmd0aCA9IG1heGltdW1SdWxlTmFtZUxlbmd0aCAtIHJ1bGVOYW1lTGVuZ3RoLFxuICAgICAgICAgIHBhZGRpbmcgPSBwYWRkaW5nRnJvbVBhZGRpbmdMZW5ndGgocGFkZGluZ0xlbmd0aCk7XG5cbiAgICBjb25zdCBzZW1pY29sb25TdHJpbmcgPSBtdWx0aUxpbmUgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgXG5cbiR7bWF4aW11bVBhZGRpbmd9ICAgO2AgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIDtcIixcbiAgICAgICAgICBzdHJpbmcgPSBgXG5cbiR7dGhpcy5uYW1lfSR7cGFkZGluZ30gOjo9ICR7ZGVmaW5pdGlvbnNTdHJpbmd9JHtzZW1pY29sb25TdHJpbmd9YDtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGUoQ2xhc3MsIHJ1bGUpIHtcbiAgICBpZiAocnVsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBydWxlID0gQ2xhc3M7XG4gICAgICBDbGFzcyA9IFJ1bGU7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IG5hbWUgPSBydWxlLmdldE5hbWUoKSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IHJ1bGUuZ2V0RGVmaW5pdGlvbnMoKSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBydWxlLmdldE5vblRlcm1pbmFsTm9kZSgpO1xuXG4gICAgcnVsZSA9IG5ldyBDbGFzcyhuYW1lLCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKTtcblxuICAgIHJldHVybiBydWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX01BWElNVU1fREVQVEggPSA5OTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgREVGQVVMVF9NQVhJTVVNX0RFUFRIIH0gZnJvbSBcIi4vZGVmYXVsdHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhdGUge1xuICBjb25zdHJ1Y3RvcihydWxlTWFwLCB0b2tlbnMsIGluZGV4LCBkZXB0aCwgbWF4aW11bURlcHRoKSB7XG4gICAgdGhpcy5ydWxlTWFwID0gcnVsZU1hcDtcbiAgICB0aGlzLnRva2VucyA9IHRva2Vucztcblx0XHR0aGlzLmluZGV4ID0gaW5kZXg7XG5cdFx0dGhpcy5kZXB0aCA9IGRlcHRoO1xuICAgIHRoaXMubWF4aW11bURlcHRoID0gbWF4aW11bURlcHRoO1xuICB9XG5cbiAgZ2V0UnVsZU1hcCgpIHtcbiAgICByZXR1cm4gdGhpcy5ydWxlTWFwO1xuICB9XG5cbiAgZ2V0VG9rZW5zKCkge1xuICAgIHJldHVybiB0aGlzLnRva2VucztcbiAgfVxuXG5cdGdldEluZGV4KCkge1xuXHRcdHJldHVybiB0aGlzLmluZGV4O1xuXHR9XG5cbiAgZ2V0RGVwdGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVwdGg7XG4gIH1cblxuXHRnZXRNYXhpbXVtRGVwdGgoKSB7XG5cdFx0cmV0dXJuIHRoaXMubWF4aW11bURlcHRoO1xuXHR9XG5cblx0Z2V0U2F2ZWRJbmRleCgpIHtcbiAgICBjb25zdCBzYXZlZEluZGV4ID0gdGhpcy5pbmRleDsgLy8vXG4gIFxuICAgIHJldHVybiBzYXZlZEluZGV4O1xuICB9XG5cbiAgZ2V0TmV4dFRva2VuKCkge1xuICAgIGxldCBuZXh0VG9rZW4gPSBudWxsO1xuXG4gICAgY29uc3QgdG9rZW5zTGVuZ3RoID0gdGhpcy50b2tlbnMubGVuZ3RoO1xuXG4gICAgaWYgKHRoaXMuaW5kZXggPCB0b2tlbnNMZW5ndGgpIHtcbiAgICAgIG5leHRUb2tlbiA9IHRoaXMudG9rZW5zW3RoaXMuaW5kZXgrK107XG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHRUb2tlbjtcbiAgfVxuXG4gIGdldE5leHRTaWduaWZpY2FudFRva2VuKCkge1xuXHRcdGxldCBuZXh0U2lnbmlmaWNhbnRUb2tlbiA9IG51bGw7XG5cbiAgXHRjb25zdCB0b2tlbnNMZW5ndGggPSB0aGlzLnRva2Vucy5sZW5ndGg7XG5cbiAgXHR3aGlsZSAodGhpcy5pbmRleCA8IHRva2Vuc0xlbmd0aCkge1xuICBcdFx0Y29uc3QgdG9rZW4gPSB0aGlzLnRva2Vuc1t0aGlzLmluZGV4KytdLFxuXHRcdFx0XHRcdFx0dG9rZW5TaWduaWZpY2FudCA9IHRva2VuLmlzU2lnbmlmaWNhbnQoKTtcblxuICBcdFx0aWYgKHRva2VuU2lnbmlmaWNhbnQpIHtcbiAgXHRcdCAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlbiA9IHRva2VuOyAvLy9cblxuXHRcdFx0XHRuZXh0U2lnbmlmaWNhbnRUb2tlbiA9IHNpZ25pZmljYW50VG9rZW47XHQvLy9cblxuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cbiAgXHR9XG5cblx0XHRyZXR1cm4gbmV4dFNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBpc05leHRUb2tlbldoaXRlc3BhY2VUb2tlbigpIHtcbiAgICBsZXQgbmV4dFRva2VuV2hpdGVzcGFjZVRva2VuID0gZmFsc2U7XG5cbiAgICBjb25zdCB0b2tlbnNMZW5ndGggPSB0aGlzLnRva2Vucy5sZW5ndGg7XG5cbiAgICBpZiAodGhpcy5pbmRleCA8IHRva2Vuc0xlbmd0aCkge1xuICAgICAgY29uc3QgbmV4dFRva2VuID0gdGhpcy50b2tlbnNbdGhpcy5pbmRleF07XG5cbiAgICAgIG5leHRUb2tlbldoaXRlc3BhY2VUb2tlbiA9IG5leHRUb2tlbi5pc1doaXRlc3BhY2VUb2tlbigpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXh0VG9rZW5XaGl0ZXNwYWNlVG9rZW47XG4gIH1cblxuICBpc1Rvb0RlZXAoKSB7XG4gICAgY29uc3QgdG9vRGVlcCA9ICh0aGlzLmRlcHRoID4gdGhpcy5tYXhpbXVtRGVwdGgpO1xuXG4gICAgcmV0dXJuIHRvb0RlZXA7XG4gIH1cblxuXHRiYWNrdHJhY2soc2F2ZWRJbmRleCkge1xuXHRcdHRoaXMuaW5kZXggPSBzYXZlZEluZGV4OyAgLy8vXG5cdH1cblxuICBzZXRJbmRleChpbmRleCkge1xuICAgIHRoaXMuaW5kZXggPSBpbmRleDtcbiAgfVxuXG4gIGluY3JlYXNlRGVwdGgoKSB7XG4gICAgdGhpcy5kZXB0aCsrO1xuICB9XG5cbiAgZGVjcmVhc2VEZXB0aCgpIHtcbiAgICB0aGlzLmRlcHRoLS07XG4gIH1cblxuICBzdGF0aWMgZnJvbVRva2Vuc0FuZFJ1bGVNYXAodG9rZW5zLCBydWxlTWFwKSB7XG4gICAgY29uc3QgaW5kZXggPSAwLFxuXHRcdFx0XHRcdGRlcHRoID0gMCxcblx0XHRcdFx0XHRtYXhpbXVtRGVwdGggPSBERUZBVUxUX01BWElNVU1fREVQVEgsXG5cdFx0XHRcdFx0c3RhdGUgPSBuZXcgU3RhdGUocnVsZU1hcCwgdG9rZW5zLCBpbmRleCwgZGVwdGgsIG1heGltdW1EZXB0aCk7XG5cbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmV4cG9ydCBjb25zdCB7IGZpcnN0LCBzZWNvbmQsIHRoaXJkLCBsYXN0LCBwdXNoLCBmaWx0ZXIsIGZvcndhcmRzU29tZSwgYmFja3dhcmRzU29tZSB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVuKGFycmF5KSB7IHJldHVybiBhcnJheS5maWx0ZXIoKGVudHJ5LCBpbmRleCkgPT4gaXNFdmVuKGluZGV4KSk7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsbEJ1dEZpcnN0KGFycmF5KSB7XG4gIGFycmF5ID0gYXJyYXkuc2xpY2UoKTsgIC8vL1xuXG4gIGFycmF5LnNoaWZ0KCk7XG5cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWxsQnV0Rmlyc3RBbmRMYXN0KGFycmF5KSB7XG4gIGFycmF5ID0gYXJyYXkuc2xpY2UoKTsgIC8vL1xuXG4gIGFycmF5LnNoaWZ0KCk7XG5cbiAgYXJyYXkucG9wKCk7XG5cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5mdW5jdGlvbiBpc0V2ZW4oaW5kZXgpIHtcbiAgY29uc3QgZXZlbiA9IChNYXRoLmZsb29yKGluZGV4LzIpID09PSBpbmRleC8yKTtcblxuICByZXR1cm4gZXZlbjtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY2hhcmFjdGVycyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IHsgbGFzdCB9IGZyb20gXCIuL3V0aWxpdGllcy9hcnJheVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuY29uc3QgeyBORVdfTElORV9DSEFSQUNURVIsIFNQQUNFX0NIQVJBQ1RFUiB9ID0gY2hhcmFjdGVycztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFyc2VUcmVlIHtcbiAgY29uc3RydWN0b3IobGluZXMpIHtcbiAgICB0aGlzLmxpbmVzID0gbGluZXM7XG4gIH1cblxuICBjbG9uZSgpIHtcbiAgICBjb25zdCBsaW5lcyA9IHRoaXMubGluZXMuc2xpY2UoKSwgIC8vL1xuICAgICAgICAgIHBhcnNlVHJlZSA9IG5ldyBQYXJzZVRyZWUobGluZXMpO1xuXG4gICAgcmV0dXJuIHBhcnNlVHJlZTtcbiAgfVxuXG4gIGdldFdpZHRoKCkge1xuICAgIGxldCB3aWR0aDtcblxuICAgIGxldCBsaW5lc0xlbmd0aCA9IHRoaXMubGluZXMubGVuZ3RoO1xuXG4gICAgaWYgKGxpbmVzTGVuZ3RoID09PSAwKSB7XG4gICAgICB3aWR0aCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGxhc3RMaW5lID0gbGFzdCh0aGlzLmxpbmVzKSxcbiAgICAgICAgICAgIGxhc3RMaW5lTGVuZ3RoID0gbGFzdExpbmUubGVuZ3RoO1xuXG4gICAgICB3aWR0aCA9IGxhc3RMaW5lTGVuZ3RoOyAvLy9cbiAgICB9XG5cbiAgICByZXR1cm4gd2lkdGg7XG4gIH1cblxuICBnZXREZXB0aCgpIHtcbiAgICBjb25zdCBsaW5lc0xlbmd0aCA9IHRoaXMubGluZXMubGVuZ3RoLFxuICAgICAgICAgIGRlcHRoID0gbGluZXNMZW5ndGg7ICAvLy9cblxuICAgIHJldHVybiBkZXB0aDtcbiAgfVxuXG4gIGZvckVhY2hMaW5lKGNhbGxiYWNrKSB7XG4gICAgdGhpcy5saW5lcy5mb3JFYWNoKGNhbGxiYWNrKTtcbiAgfVxuXG4gIGFwcGVuZFRvVG9wKHBhcnNlVHJlZSkge1xuICAgIHBhcnNlVHJlZS5mb3JFYWNoTGluZSgobGluZSkgPT4ge1xuICAgICAgdGhpcy5saW5lcy51bnNoaWZ0KGxpbmUpO1xuICAgIH0pO1xuICB9XG5cbiAgYXBwZW5kVG9MZWZ0KHBhcnNlVHJlZSkge1xuICAgIHBhcnNlVHJlZS5mb3JFYWNoTGluZSgobGluZSwgaW5kZXgpID0+IHtcbiAgICAgIHRoaXMubGluZXNbaW5kZXhdID0gbGluZSArIHRoaXMubGluZXNbaW5kZXhdO1xuICAgIH0pO1xuICB9XG5cbiAgYXBwZW5kVG9SaWdodChwYXJzZVRyZWUpIHtcbiAgICBwYXJzZVRyZWUuZm9yRWFjaExpbmUoKGxpbmUsIGluZGV4KSA9PiB7XG4gICAgICB0aGlzLmxpbmVzW2luZGV4XSA9IHRoaXMubGluZXNbaW5kZXhdICsgbGluZTtcbiAgICB9KTtcbiAgfVxuXG4gIGFwcGVuZFRvQm90dG9tKHBhcnNlVHJlZSkge1xuICAgIHBhcnNlVHJlZS5mb3JFYWNoTGluZSgobGluZSkgPT4ge1xuICAgICAgdGhpcy5saW5lcy5wdXNoKGxpbmUpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkVG9wTWFyZ2luKHRvcE1hcmdpbkRlcHRoKSB7XG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLmdldFdpZHRoKCksXG4gICAgICAgICAgdG9wTWFyZ2luV2lkdGggPSB3aWR0aCwgIC8vL1xuICAgICAgICAgIHRvcE1hcmdpblN0cmluZyA9IG1hcmdpblN0cmluZ0Zyb21NYXJnaW5XaWR0aCh0b3BNYXJnaW5XaWR0aCk7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdG9wTWFyZ2luRGVwdGg7IGluZGV4KyspIHtcbiAgICAgIHRoaXMubGluZXMudW5zaGlmdCh0b3BNYXJnaW5TdHJpbmcpO1xuICAgIH1cbiAgfVxuXG4gIGFkZExlZnRNYXJnaW4obGVmdE1hcmdpbldpZHRoKSB7XG4gICAgY29uc3QgbGVmdE1hcmdpblN0cmluZyA9IG1hcmdpblN0cmluZ0Zyb21NYXJnaW5XaWR0aChsZWZ0TWFyZ2luV2lkdGgpLFxuICAgICAgICAgIGxpbmVzTGVuZ3RoID0gdGhpcy5saW5lcy5sZW5ndGg7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGluZXNMZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHRoaXMubGluZXNbaW5kZXhdID0gbGVmdE1hcmdpblN0cmluZyArIHRoaXMubGluZXNbaW5kZXhdO1xuICAgIH1cbiAgfVxuXG4gIGFkZFJpZ2h0TWFyZ2luKHJpZ2h0TWFyZ2luV2lkdGgpIHtcbiAgICBjb25zdCByaWdodE1hcmdpblN0cmluZyA9IG1hcmdpblN0cmluZ0Zyb21NYXJnaW5XaWR0aChyaWdodE1hcmdpbldpZHRoKSxcbiAgICAgICAgICBsaW5lc0xlbmd0aCA9IHRoaXMubGluZXMubGVuZ3RoO1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxpbmVzTGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB0aGlzLmxpbmVzW2luZGV4XSA9IHRoaXMubGluZXNbaW5kZXhdICsgcmlnaHRNYXJnaW5TdHJpbmc7XG4gICAgfVxuICB9XG5cbiAgYWRkQm90dG9tTWFyZ2luKGJvdHRvbU1hcmdpbkRlcHRoKSB7XG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLmdldFdpZHRoKCksXG4gICAgICAgICAgYm90dG9tTWFyZ2luV2lkdGggPSB3aWR0aCwgIC8vL1xuICAgICAgICAgIGJvdHRvbU1hcmdpblN0cmluZyA9IG1hcmdpblN0cmluZ0Zyb21NYXJnaW5XaWR0aChib3R0b21NYXJnaW5XaWR0aCk7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYm90dG9tTWFyZ2luRGVwdGg7IGluZGV4KyspIHtcbiAgICAgIHRoaXMubGluZXMucHVzaChib3R0b21NYXJnaW5TdHJpbmcpO1xuICAgIH1cbiAgfVxuICBcbiAgcG9wTGluZSgpIHsgcmV0dXJuIHRoaXMubGluZXMucG9wKCk7IH1cbiAgXG4gIHNoaWZ0TGluZSgpIHsgcmV0dXJuIHRoaXMubGluZXMuc2hpZnQoKTsgfVxuICBcbiAgcHVzaExpbmUobGluZSkgeyB0aGlzLmxpbmVzLnB1c2gobGluZSk7IH1cbiAgXG4gIHVuc2hpZnRMaW5lKGxpbmUpIHsgdGhpcy5saW5lcy51bnNoaWZ0KGxpbmUpOyB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gdGhpcy5saW5lcy5yZWR1Y2UoKHN0cmluZywgbGluZSkgPT4ge1xuICAgICAgc3RyaW5nICs9IGxpbmUgKyBORVdfTElORV9DSEFSQUNURVI7XG5cbiAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFyZ2luU3RyaW5nRnJvbU1hcmdpbldpZHRoKG1hcmdpbldpZHRoLCBzcGFjZUNoYXJhY3Rlcikge1xuICBzcGFjZUNoYXJhY3RlciA9IHNwYWNlQ2hhcmFjdGVyIHx8IFNQQUNFX0NIQVJBQ1RFUjtcblxuICBsZXQgbWFyZ2luU3RyaW5nID0gRU1QVFlfU1RSSU5HO1xuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBtYXJnaW5XaWR0aDsgaW5kZXgrKykge1xuICAgIG1hcmdpblN0cmluZyArPSBzcGFjZUNoYXJhY3RlcjtcbiAgfVxuXG4gIHJldHVybiBtYXJnaW5TdHJpbmc7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX25lY2Vzc2FyeSA9IHJlcXVpcmUoXCJuZWNlc3NhcnlcIik7XG52YXIgX3BhcnNlVHJlZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uL3BhcnNlVHJlZVwiKSk7XG52YXIgX2NvbnN0YW50cyA9IHJlcXVpcmUoXCIuLi9jb25zdGFudHNcIik7XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHNlbGY7XG59XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gICAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgICB9XG59XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cbmZ1bmN0aW9uIF9nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgIT09IFwidW5kZWZpbmVkXCIgJiYgUmVmbGVjdC5nZXQpIHtcbiAgICAgICAgX2dldCA9IFJlZmxlY3QuZ2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIF9nZXQgPSBmdW5jdGlvbiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSB7XG4gICAgICAgICAgICB2YXIgYmFzZSA9IF9zdXBlclByb3BCYXNlKHRhcmdldCwgcHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKCFiYXNlKSByZXR1cm47XG4gICAgICAgICAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYmFzZSwgcHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKGRlc2MuZ2V0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlc2MuZ2V0LmNhbGwocmVjZWl2ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRlc2MudmFsdWU7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyIHx8IHRhcmdldCk7XG59XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7XG4gICAgfTtcbiAgICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufVxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gICAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gICAgfVxuICAgIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDoge1xuICAgICAgICBkZWZhdWx0OiBvYmpcbiAgICB9O1xufVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICAgIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgICAgIHJldHVybiBjYWxsO1xuICAgIH1cbiAgICByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTtcbn1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgICAgIG8uX19wcm90b19fID0gcDtcbiAgICAgICAgcmV0dXJuIG87XG4gICAgfTtcbiAgICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufVxuZnVuY3Rpb24gX3N1cGVyUHJvcEJhc2Uob2JqZWN0LCBwcm9wZXJ0eSkge1xuICAgIHdoaWxlKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSkpe1xuICAgICAgICBvYmplY3QgPSBfZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTtcbiAgICAgICAgaWYgKG9iamVjdCA9PT0gbnVsbCkgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG59XG52YXIgX3R5cGVvZiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIFwiQHN3Yy9oZWxwZXJzIC0gdHlwZW9mXCI7XG4gICAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG59O1xuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTtcbiAgICBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlO1xuICAgIHRyeSB7XG4gICAgICAgIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24oKSB7fSkpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkge1xuICAgIHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpO1xuICAgIHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHtcbiAgICAgICAgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7XG4gICAgICAgIGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7XG4gICAgICAgICAgICB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yO1xuICAgICAgICAgICAgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7XG4gICAgfTtcbn1cbnZhciBCQVJfQ0hBUkFDVEVSID0gX25lY2Vzc2FyeS5jaGFyYWN0ZXJzLkJBUl9DSEFSQUNURVI7XG52YXIgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUgPSAvKiNfX1BVUkVfXyovIGZ1bmN0aW9uKFBhcnNlVHJlZSkge1xuICAgIF9pbmhlcml0cyhWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSwgUGFyc2VUcmVlKTtcbiAgICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlKTtcbiAgICBmdW5jdGlvbiBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZShsaW5lcywgdmVydGljYWxCcmFuY2hQb3NpdGlvbikge1xuICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUpO1xuICAgICAgICB2YXIgX3RoaXM7XG4gICAgICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbGluZXMpO1xuICAgICAgICBfdGhpcy52ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gdmVydGljYWxCcmFuY2hQb3NpdGlvbjtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBfY3JlYXRlQ2xhc3MoVmVydGljYWxCcmFuY2hQYXJzZVRyZWUsIFtcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb25cIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZlcnRpY2FsQnJhbmNoUG9zaXRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJhZGRMZWZ0TWFyZ2luXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpIHtcbiAgICAgICAgICAgICAgICBfZ2V0KF9nZXRQcm90b3R5cGVPZihWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5wcm90b3R5cGUpLCBcImFkZExlZnRNYXJnaW5cIiwgdGhpcykuY2FsbCh0aGlzLCBsZWZ0TWFyZ2luV2lkdGgpO1xuICAgICAgICAgICAgICAgIHRoaXMudmVydGljYWxCcmFuY2hQb3NpdGlvbiArPSBsZWZ0TWFyZ2luV2lkdGg7IC8vL1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgXSwgW1xuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiZnJvbVdpZHRoXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZnJvbVdpZHRoKHdpZHRoKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN0cmluZyA9IEJBUl9DSEFSQUNURVIsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSAwLCB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21TdHJpbmdBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLCBzdHJpbmcsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pLCBsZWZ0TWFyZ2luV2lkdGggPSBNYXRoLmZsb29yKHdpZHRoIC8gMiksIHJpZ2h0TWFyZ2luV2lkdGggPSB3aWR0aCAtIGxlZnRNYXJnaW5XaWR0aCAtIDE7XG4gICAgICAgICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuICAgICAgICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmFkZFJpZ2h0TWFyZ2luKHJpZ2h0TWFyZ2luV2lkdGgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImZyb21EZXB0aEFuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb25cIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBmcm9tRGVwdGhBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKENsYXNzLCBkZXB0aCwgdmVydGljYWxCcmFuY2hQb3NpdGlvbikge1xuICAgICAgICAgICAgICAgIHZhciBsaW5lcyA9IGxpbmVzRnJvbURlcHRoKGRlcHRoKSwgYXJncyA9IFtcbiAgICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbGluZXMsXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb25cbiAgICAgICAgICAgICAgICBdLCB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoQ2xhc3MsIGFyZ3MpKTsgLy8vXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiZnJvbVN0cmluZ0FuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb25cIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBmcm9tU3RyaW5nQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvbihDbGFzcywgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gc3RyaW5nOyAvLy9cbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nID0gQ2xhc3M7IC8vL1xuICAgICAgICAgICAgICAgICAgICBDbGFzcyA9IF9wYXJzZVRyZWUuZGVmYXVsdDsgLy8vXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBsaW5lID0gc3RyaW5nLCBsaW5lcyA9IFtcbiAgICAgICAgICAgICAgICAgICAgbGluZVxuICAgICAgICAgICAgICAgIF0sIGFyZ3MgPSBbXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGxpbmVzLFxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uXG4gICAgICAgICAgICAgICAgXSwgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUgPSBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KENsYXNzLCBhcmdzKSk7IC8vL1xuICAgICAgICAgICAgICAgIHJldHVybiB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIF0pO1xuICAgIHJldHVybiBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZTtcbn0oX3BhcnNlVHJlZS5kZWZhdWx0KTtcbmV4cG9ydHMuZGVmYXVsdCA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlO1xuZnVuY3Rpb24gbGluZXNGcm9tRGVwdGgoZGVwdGgpIHtcbiAgICB2YXIgbGluZXMgPSBbXTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHdoaWxlKGluZGV4IDwgZGVwdGgpe1xuICAgICAgICBsaW5lc1tpbmRleCsrXSA9IF9jb25zdGFudHMuRU1QVFlfU1RSSU5HO1xuICAgIH1cbiAgICByZXR1cm4gbGluZXM7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OXdZWEp6WlZSeVpXVXZkbVZ5ZEdsallXeENjbUZ1WTJndWFuTWlYU3dpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpWENKMWMyVWdjM1J5YVdOMFhDSTdYRzVjYm1sdGNHOXlkQ0I3SUdOb1lYSmhZM1JsY25NZ2ZTQm1jbTl0SUZ3aWJtVmpaWE56WVhKNVhDSTdYRzVjYm1sdGNHOXlkQ0JRWVhKelpWUnlaV1VnWm5KdmJTQmNJaTR1TDNCaGNuTmxWSEpsWlZ3aU8xeHVYRzVwYlhCdmNuUWdleUJGVFZCVVdWOVRWRkpKVGtjZ2ZTQm1jbTl0SUZ3aUxpNHZZMjl1YzNSaGJuUnpYQ0k3WEc1Y2JtTnZibk4wSUhzZ1FrRlNYME5JUVZKQlExUkZVaUI5SUQwZ1kyaGhjbUZqZEdWeWN6dGNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdZMnhoYzNNZ1ZtVnlkR2xqWVd4Q2NtRnVZMmhRWVhKelpWUnlaV1VnWlhoMFpXNWtjeUJRWVhKelpWUnlaV1VnZTF4dUlDQmpiMjV6ZEhKMVkzUnZjaWhzYVc1bGN5d2dkbVZ5ZEdsallXeENjbUZ1WTJoUWIzTnBkR2x2YmlrZ2UxeHVJQ0FnSUhOMWNHVnlLR3hwYm1WektUdGNiaUFnSUNCY2JpQWdJQ0IwYUdsekxuWmxjblJwWTJGc1FuSmhibU5vVUc5emFYUnBiMjRnUFNCMlpYSjBhV05oYkVKeVlXNWphRkJ2YzJsMGFXOXVPMXh1SUNCOVhHNGdJRnh1SUNCblpYUldaWEowYVdOaGJFSnlZVzVqYUZCdmMybDBhVzl1S0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxuWmxjblJwWTJGc1FuSmhibU5vVUc5emFYUnBiMjQ3WEc0Z0lIMWNibHh1SUNCaFpHUk1aV1owVFdGeVoybHVLR3hsWm5STllYSm5hVzVYYVdSMGFDa2dlMXh1SUNBZ0lITjFjR1Z5TG1Ga1pFeGxablJOWVhKbmFXNG9iR1ZtZEUxaGNtZHBibGRwWkhSb0tUdGNibHh1SUNBZ0lIUm9hWE11ZG1WeWRHbGpZV3hDY21GdVkyaFFiM05wZEdsdmJpQXJQU0JzWldaMFRXRnlaMmx1VjJsa2RHZzdJQzh2TDF4dUlDQjlYRzVjYmlBZ2MzUmhkR2xqSUdaeWIyMVhhV1IwYUNoM2FXUjBhQ2tnZTF4dUlDQWdJR052Ym5OMElITjBjbWx1WnlBOUlFSkJVbDlEU0VGU1FVTlVSVklzWEc0Z0lDQWdJQ0FnSUNBZ2RtVnlkR2xqWVd4Q2NtRnVZMmhRYjNOcGRHbHZiaUE5SURBc1hHNGdJQ0FnSUNBZ0lDQWdkbVZ5ZEdsallXeENjbUZ1WTJoUVlYSnpaVlJ5WldVZ1BTQldaWEowYVdOaGJFSnlZVzVqYUZCaGNuTmxWSEpsWlM1bWNtOXRVM1J5YVc1blFXNWtWbVZ5ZEdsallXeENjbUZ1WTJoUWIzTnBkR2x2YmloV1pYSjBhV05oYkVKeVlXNWphRkJoY25ObFZISmxaU3dnYzNSeWFXNW5MQ0IyWlhKMGFXTmhiRUp5WVc1amFGQnZjMmwwYVc5dUtTeGNiaUFnSUNBZ0lDQWdJQ0JzWldaMFRXRnlaMmx1VjJsa2RHZ2dQU0JOWVhSb0xtWnNiMjl5S0hkcFpIUm9MeklwTEZ4dUlDQWdJQ0FnSUNBZ0lISnBaMmgwVFdGeVoybHVWMmxrZEdnZ1BTQjNhV1IwYUNBdElHeGxablJOWVhKbmFXNVhhV1IwYUNBdElERTdYRzVjYmlBZ0lDQjJaWEowYVdOaGJFSnlZVzVqYUZCaGNuTmxWSEpsWlM1aFpHUk1aV1owVFdGeVoybHVLR3hsWm5STllYSm5hVzVYYVdSMGFDazdYRzRnSUNBZ2RtVnlkR2xqWVd4Q2NtRnVZMmhRWVhKelpWUnlaV1V1WVdSa1VtbG5hSFJOWVhKbmFXNG9jbWxuYUhSTllYSm5hVzVYYVdSMGFDazdYRzVjYmlBZ0lDQnlaWFIxY200Z2RtVnlkR2xqWVd4Q2NtRnVZMmhRWVhKelpWUnlaV1U3WEc0Z0lIMWNibHh1SUNCemRHRjBhV01nWm5KdmJVUmxjSFJvUVc1a1ZtVnlkR2xqWVd4Q2NtRnVZMmhRYjNOcGRHbHZiaWhEYkdGemN5d2daR1Z3ZEdnc0lIWmxjblJwWTJGc1FuSmhibU5vVUc5emFYUnBiMjRwSUh0Y2JpQWdJQ0JqYjI1emRDQnNhVzVsY3lBOUlHeHBibVZ6Um5KdmJVUmxjSFJvS0dSbGNIUm9LU3hjYmlBZ0lDQWdJQ0FnSUNCaGNtZHpJRDBnVzI1MWJHd3NJR3hwYm1WekxDQjJaWEowYVdOaGJFSnlZVzVqYUZCdmMybDBhVzl1WFN4Y2JpQWdJQ0FnSUNBZ0lDQjJaWEowYVdOaGJFSnlZVzVqYUZCaGNuTmxWSEpsWlNBOUlHNWxkeUFvUm5WdVkzUnBiMjR1Y0hKdmRHOTBlWEJsTG1KcGJtUXVZWEJ3Ykhrb1EyeGhjM01zSUdGeVozTXBLVHNnSUM4dkwxeHVYRzRnSUNBZ2NtVjBkWEp1SUhabGNuUnBZMkZzUW5KaGJtTm9VR0Z5YzJWVWNtVmxPMXh1SUNCOVhHNWNiaUFnYzNSaGRHbGpJR1p5YjIxVGRISnBibWRCYm1SV1pYSjBhV05oYkVKeVlXNWphRkJ2YzJsMGFXOXVLRU5zWVhOekxDQnpkSEpwYm1jc0lIWmxjblJwWTJGc1FuSmhibU5vVUc5emFYUnBiMjRwSUh0Y2JpQWdJQ0JwWmlBb2RtVnlkR2xqWVd4Q2NtRnVZMmhRYjNOcGRHbHZiaUE5UFQwZ2RXNWtaV1pwYm1Wa0tTQjdYRzRnSUNBZ0lDQjJaWEowYVdOaGJFSnlZVzVqYUZCdmMybDBhVzl1SUQwZ2MzUnlhVzVuT3lBZ0x5OHZYRzRnSUNBZ0lDQnpkSEpwYm1jZ1BTQkRiR0Z6Y3pzZ0x5OHZYRzRnSUNBZ0lDQkRiR0Z6Y3lBOUlGQmhjbk5sVkhKbFpUc2dJQzh2TDF4dUlDQWdJSDFjYmlBZ0lDQmNiaUFnSUNCamIyNXpkQ0JzYVc1bElEMGdjM1J5YVc1bkxDQXZMeTljYmlBZ0lDQWdJQ0FnSUNCc2FXNWxjeUE5SUZ0c2FXNWxYU3hjYmlBZ0lDQWdJQ0FnSUNCaGNtZHpJRDBnVzI1MWJHd3NJR3hwYm1WekxDQjJaWEowYVdOaGJFSnlZVzVqYUZCdmMybDBhVzl1WFN4Y2JpQWdJQ0FnSUNBZ0lDQjJaWEowYVdOaGJFSnlZVzVqYUZCaGNuTmxWSEpsWlNBOUlHNWxkeUFvUm5WdVkzUnBiMjR1Y0hKdmRHOTBlWEJsTG1KcGJtUXVZWEJ3Ykhrb1EyeGhjM01zSUdGeVozTXBLVHNnSUM4dkwxeHVYRzRnSUNBZ2NtVjBkWEp1SUhabGNuUnBZMkZzUW5KaGJtTm9VR0Z5YzJWVWNtVmxPMXh1SUNCOVhHNTlYRzVjYm1aMWJtTjBhVzl1SUd4cGJtVnpSbkp2YlVSbGNIUm9LR1JsY0hSb0tTQjdYRzRnSUdOdmJuTjBJR3hwYm1WeklEMGdXMTA3WEc1Y2JpQWdiR1YwSUdsdVpHVjRJRDBnTUR0Y2JseHVJQ0IzYUdsc1pTQW9hVzVrWlhnZ1BDQmtaWEIwYUNrZ2UxeHVJQ0FnSUd4cGJtVnpXMmx1WkdWNEt5dGRJRDBnUlUxUVZGbGZVMVJTU1U1SE8xeHVJQ0I5WEc1Y2JpQWdjbVYwZFhKdUlHeHBibVZ6TzF4dWZWeHVJbDBzSW01aGJXVnpJanBiSWtKQlVsOURTRUZTUVVOVVJWSWlMQ0pqYUdGeVlXTjBaWEp6SWl3aVZtVnlkR2xqWVd4Q2NtRnVZMmhRWVhKelpWUnlaV1VpTENKc2FXNWxjeUlzSW5abGNuUnBZMkZzUW5KaGJtTm9VRzl6YVhScGIyNGlMQ0puWlhSV1pYSjBhV05oYkVKeVlXNWphRkJ2YzJsMGFXOXVJaXdpWVdSa1RHVm1kRTFoY21kcGJpSXNJbXhsWm5STllYSm5hVzVYYVdSMGFDSXNJbVp5YjIxWGFXUjBhQ0lzSW5kcFpIUm9JaXdpYzNSeWFXNW5JaXdpZG1WeWRHbGpZV3hDY21GdVkyaFFZWEp6WlZSeVpXVWlMQ0ptY205dFUzUnlhVzVuUVc1a1ZtVnlkR2xqWVd4Q2NtRnVZMmhRYjNOcGRHbHZiaUlzSWsxaGRHZ2lMQ0ptYkc5dmNpSXNJbkpwWjJoMFRXRnlaMmx1VjJsa2RHZ2lMQ0poWkdSU2FXZG9kRTFoY21kcGJpSXNJbVp5YjIxRVpYQjBhRUZ1WkZabGNuUnBZMkZzUW5KaGJtTm9VRzl6YVhScGIyNGlMQ0pEYkdGemN5SXNJbVJsY0hSb0lpd2liR2x1WlhOR2NtOXRSR1Z3ZEdnaUxDSmhjbWR6SWl3aVJuVnVZM1JwYjI0aUxDSndjbTkwYjNSNWNHVWlMQ0ppYVc1a0lpd2lZWEJ3YkhraUxDSjFibVJsWm1sdVpXUWlMQ0pRWVhKelpWUnlaV1VpTENKc2FXNWxJaXdpYVc1a1pYZ2lMQ0pGVFZCVVdWOVRWRkpKVGtjaVhTd2liV0Z3Y0dsdVozTWlPaUpCUVVGQkxFTkJRVmtzVjBGQlFTeERRVUZET3pzN1JUdDNRanRCUVVWakxFZEJRVmNzUTBGQldDeFZRVUZYTzBGQlJXaENMRWRCUVdNc1EwRkJaQ3hWUVVGak8wRkJSVkFzUjBGQll5eERRVUZrTEZWQlFXTTdPenM3T3pzN096czdPenM3T3pzNFJEdHpRenMyUkR0cFJUczdPenQzUlR0blJUczdPenM3TUVJN096czdPenM3T3pzN1V6czdPenM3T3p0TE96czdPenM3T3pzN096czdPMDA3ZVVRN096czdPenM3T3pzN096czdPenQxUWpzN1N6czdPenM3ZDBNN096czdPenN5UWpzN096czdPenM3Y1VZN096czdPenM3T3pzN096dHRSVHM3YVVRN096czdPMEZCUlRORExFZEJRVXNzUTBGQlIwRXNZVUZCWVN4SFFVRkxReXhWUVVGVkxGbEJRVFZDUkN4aFFVRmhPMGxCUlVGRkxIVkNRVUYxUWl4cFFrRkJOMElzVVVGQlVUdHBSRHM3WVVGQlJrRXNkVUpCUVhWQ0xFTkJRemxDUXl4TFFVRkxMRVZCUVVWRExITkNRVUZ6UWp0elJEczdhME5CUTJwRFJDeExRVUZMTEVORFdtWXNRMFJaYVVJN1kwRkZVa01zYzBKQlFYTkNMRWRCUVVkQkxITkNRVUZ6UWl4RFFVRkRPenM3T3p0WlFVZDJSRU1zUjBGQmVVSXNSVUZCZWtKQkxFTkJRWGxDTzIxQ1FVRjZRa0VzVVVGQlVTeERRVUZTUVN4NVFrRkJlVUlzUjBGQlJ5eERRVUZETzJkQ1FVTXpRaXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZEUkN4elFrRkJjMEk3V1VGRGNFTXNRMEZCUXpzN08xbEJSVVJGTEVkQlFXRXNSVUZCWWtFc1EwRkJZVHR0UWtGQllrRXNVVUZCVVN4RFFVRlNRU3hoUVVGaExFTkJRVU5ETEdWQlFXVXNSVUZCUlN4RFFVRkRPM0ZEUVZoaVRDeDFRa0ZCZFVJc1lVRlpiRU5KTEVOQlFXRXNaMEpCUVc1Q0xFbEJRVXNzWVVGQlpVTXNaVUZCWlN4RFEzUkNka01zUTBSelFubERPMmRDUVVWeVF5eEpRVUZKTEVOQlFVTklMSE5DUVVGelFpeEpRVUZKUnl4bFFVRmxMRU5CUVVNc1EwRkJReXhGUVVGSExFRkJRVWdzUTBGQlJ6dFpRVU55UkN4RFFVRkRPenM3TzFsQlJVMURMRWRCUVZNc1JVRkJWRUVzUTBGQlV6dHRRa0ZCYUVJc1VVRkJVU3hEUVVGRVFTeFRRVUZUTEVOQlFVTkRMRXRCUVVzc1JVRkJSU3hEUVVGRE8yZENRVU4yUWl4SFFVRkxMRU5CUVVORExFMUJRVTBzUjBGQlIxWXNZVUZCWVN4RlFVTjBRa2tzYzBKQlFYTkNMRWRCUVVjc1EwRkJReXhGUVVNeFFrOHNkVUpCUVhWQ0xFZEJRVWRVTEhWQ1FVRjFRaXhEUVVGRFZTeHRRMEZCYlVNc1EwRkJRMVlzZFVKQlFYVkNMRVZCUVVWUkxFMUJRVTBzUlVGQlJVNHNjMEpCUVhOQ0xFZEJRemRKUnl4bFFVRmxMRWRCUVVkTkxFbEJRVWtzUTBGQlEwTXNTMEZCU3l4RFFVRkRUQ3hMUVVGTExFZEJRVU1zUTBGQlF5eEhRVU53UTAwc1owSkJRV2RDTEVkQlFVZE9MRXRCUVVzc1IwRkJSMFlzWlVGQlpTeEhRVUZITEVOQlFVTTdaMEpCUlhCRVNTeDFRa0ZCZFVJc1EwRkJRMHdzWVVGQllTeERRVUZEUXl4bFFVRmxMRU5CUVVNc1EwRkJRenRuUWtGRGRrUkpMSFZDUVVGMVFpeERRVUZEU3l4alFVRmpMRU5CUVVORUxHZENRVUZuUWl4RFFVRkRMRU5CUVVNN1owSkJSWHBFTEUxQlFVMHNRMEZCUTBvc2RVSkJRWFZDTzFsQlEyaERMRU5CUVVNN096dFpRVVZOVFN4SFFVRnJReXhGUVVGc1EwRXNRMEZCYTBNN2JVSkJRWHBETEZGQlFWRXNRMEZCUkVFc2EwTkJRV3RETEVOQlFVTkRMRXRCUVVzc1JVRkJSVU1zUzBGQlN5eEZRVUZGWml4elFrRkJjMElzUlVGQlJTeERRVUZETzJkQ1FVTXZSU3hIUVVGTExFTkJRVU5FTEV0QlFVc3NSMEZCUjJsQ0xHTkJRV01zUTBGQlEwUXNTMEZCU3l4SFFVTTFRa1VzU1VGQlNTeEhRVUZITEVOQlFVTTdiMEpCUVVFc1NVRkJTVHR2UWtGQlJXeENMRXRCUVVzN2IwSkJRVVZETEhOQ1FVRnpRanRuUWtGQlFTeERRVUZETEVWQlF6VkRUeXgxUWtGQmRVSXNSMEZCUnl4SFFVRkhMRVZCUVVWWExGRkJRVkVzUTBGQlEwTXNVMEZCVXl4RFFVRkRReXhKUVVGSkxFTkJRVU5ETEV0QlFVc3NRMEZCUTFBc1MwRkJTeXhGUVVGRlJ5eEpRVUZKTEVsQlFVc3NSVUZCUnl4QlFVRklMRU5CUVVjN1owSkJSWFJHTEUxQlFVMHNRMEZCUTFZc2RVSkJRWFZDTzFsQlEyaERMRU5CUVVNN096dFpRVVZOUXl4SFFVRnRReXhGUVVGdVEwRXNRMEZCYlVNN2JVSkJRVEZETEZGQlFWRXNRMEZCUkVFc2JVTkJRVzFETEVOQlFVTk5MRXRCUVVzc1JVRkJSVklzVFVGQlRTeEZRVUZGVGl4elFrRkJjMElzUlVGQlJTeERRVUZETzJkQ1FVTnFSaXhGUVVGRkxFVkJRVVZCTEhOQ1FVRnpRaXhMUVVGTGMwSXNVMEZCVXl4RlFVRkZMRU5CUVVNN2IwSkJRM3BEZEVJc2MwSkJRWE5DTEVkQlFVZE5MRTFCUVUwc1EwRkJReXhEUVVGRkxFVkJRVWNzUVVGQlNDeERRVUZITzI5Q1FVTnlRMEVzVFVGQlRTeEhRVUZIVVN4TFFVRkxMRU5CUVVNc1EwRkJReXhGUVVGSExFRkJRVWdzUTBGQlJ6dHZRa0ZEYmtKQkxFdEJRVXNzUjBGQlIxTXNWVUZCVXl4UlFVRkJMRU5CUVVNc1EwRkJSU3hGUVVGSExFRkJRVWdzUTBGQlJ6dG5Ra0ZEZWtJc1EwRkJRenRuUWtGRlJDeEhRVUZMTEVOQlFVTkRMRWxCUVVrc1IwRkJSMnhDTEUxQlFVMHNSVUZEWWxBc1MwRkJTeXhIUVVGSExFTkJRVU41UWp0dlFrRkJRVUVzU1VGQlNUdG5Ra0ZCUVN4RFFVRkRMRVZCUTJSUUxFbEJRVWtzUjBGQlJ5eERRVUZETzI5Q1FVRkJMRWxCUVVrN2IwSkJRVVZzUWl4TFFVRkxPMjlDUVVGRlF5eHpRa0ZCYzBJN1owSkJRVUVzUTBGQlF5eEZRVU0xUTA4c2RVSkJRWFZDTEVkQlFVY3NSMEZCUnl4RlFVRkZWeXhSUVVGUkxFTkJRVU5ETEZOQlFWTXNRMEZCUTBNc1NVRkJTU3hEUVVGRFF5eExRVUZMTEVOQlFVTlFMRXRCUVVzc1JVRkJSVWNzU1VGQlNTeEpRVUZMTEVWQlFVY3NRVUZCU0N4RFFVRkhPMmRDUVVWMFJpeE5RVUZOTEVOQlFVTldMSFZDUVVGMVFqdFpRVU5vUXl4RFFVRkRPenROT3p0RlFXNUVhMFJuUWl4VlFVRlRPMnRDUVVGNlEzcENMSFZDUVVGMVFpeEJPMU5CYzBSdVEydENMR05CUVdNc1EwRkJRMFFzUzBGQlN5eEZRVUZGTEVOQlFVTTdTVUZET1VJc1IwRkJTeXhEUVVGRGFFSXNTMEZCU3l4SFFVRkhMRU5CUVVNc1EwRkJRenRKUVVWb1FpeEhRVUZITEVOQlFVTXdRaXhMUVVGTExFZEJRVWNzUTBGQlF6dFZRVVZPUVN4TFFVRkxMRWRCUVVkV0xFdEJRVXNzUTBGQlJTeERRVUZETzFGQlEzSkNhRUlzUzBGQlN5eERRVUZETUVJc1MwRkJTeXhOUVVGTlF5eFZRVUZaTEdGQlFVRXNRMEZCUXp0SlFVTm9ReXhEUVVGRE8wbEJSVVFzVFVGQlRTeERRVUZETTBJc1MwRkJTenRCUVVOa0xFTkJRVU1pZlE9PSIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuL3ZlcnRpY2FsQnJhbmNoXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVOYW1lUGFyc2VUcmVlIGV4dGVuZHMgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUge1xuICBzdGF0aWMgZnJvbU5vblRlcm1pbmFsTm9kZUFuZFRva2Vucyhub25UZXJtaW5hbE5vZGUsIHRva2Vucykge1xuICAgIGNvbnN0IHJ1bGVOYW1lID0gbm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgdG9rZW5JbmRleGVzID0gdG9rZW5JbmRleGVzRnJvbU5vblRlcm1pbmFsTm9kZUFuZFRva2Vucyhub25UZXJtaW5hbE5vZGUsIHRva2VucyksXG4gICAgICAgICAgc3RyaW5nID0gYCR7cnVsZU5hbWV9JHt0b2tlbkluZGV4ZXN9YCxcbiAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGggPSBzdHJpbmdMZW5ndGgsIC8vL1xuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGgpLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCksXG4gICAgICAgICAgcnVsZU5hbWVQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tU3RyaW5nQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvbihSdWxlTmFtZVBhcnNlVHJlZSwgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgIHJ1bGVOYW1lUGFyc2VUcmVlLmFwcGVuZFRvVG9wKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlKTtcblxuICAgIHJldHVybiBydWxlTmFtZVBhcnNlVHJlZTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0b2tlbkluZGV4ZXNGcm9tTm9uVGVybWluYWxOb2RlQW5kVG9rZW5zKG5vblRlcm1pbmFsTm9kZSwgdG9rZW5zKSB7XG4gIGNvbnN0IGZpcnN0U2lnbmlmaWNhbnRUb2tlbiA9IG5vblRlcm1pbmFsTm9kZS5nZXRGaXJzdFNpZ25pZmljYW50VG9rZW4oKSxcbiAgICAgICAgbGFzdFNpZ25pZmljYW50VG9rZW4gPSBub25UZXJtaW5hbE5vZGUuZ2V0TGFzdFNpZ25pZmljYW50VG9rZW4oKSxcbiAgICAgICAgZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXggPSB0b2tlbnMuaW5kZXhPZihmaXJzdFNpZ25pZmljYW50VG9rZW4pLFxuICAgICAgICBsYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4ID0gdG9rZW5zLmluZGV4T2YobGFzdFNpZ25pZmljYW50VG9rZW4pLFxuICAgICAgICB0b2tlbkluZGV4ZXMgPSAoZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXggIT09IGxhc3RTaWduaWZpY2FudFRva2VuSW5kZXgpID9cbiAgICAgICAgICAgICAgICAgICAgICAgIGAoJHtmaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleH0tJHtsYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4fSlgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYCgke2ZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4fSlgO1xuXG4gIHJldHVybiB0b2tlbkluZGV4ZXM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGNoYXJhY3RlcnMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBQYXJzZVRyZWUgZnJvbSBcIi4uL3BhcnNlVHJlZVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHsgREFTSF9DSEFSQUNURVIgfSA9IGNoYXJhY3RlcnM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUgZXh0ZW5kcyBQYXJzZVRyZWUge1xuICBzdGF0aWMgZnJvbVdpZHRoKHdpZHRoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gc3RyaW5nRnJvbUNoYXJhY3RlcnNXaWR0aCh3aWR0aCwgREFTSF9DSEFSQUNURVIpLFxuICAgICAgICAgIGxpbmUgPSBzdHJpbmcsIC8vL1xuICAgICAgICAgIGxpbmVzID0gW2xpbmVdLFxuICAgICAgICAgIGhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUgPSBuZXcgSG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZShsaW5lcyk7XG5cbiAgICByZXR1cm4gaG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzdHJpbmdGcm9tQ2hhcmFjdGVyc1dpZHRoKGNoYXJhY3RlcnNXaWR0aCwgY2hhcmFjdGVyKSB7XG4gIGxldCBzdHJpbmcgPSBFTVBUWV9TVFJJTkc7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNoYXJhY3RlcnNXaWR0aDsgaW5kZXgrKykge1xuICAgIHN0cmluZyArPSBjaGFyYWN0ZXI7XG4gIH1cblxuICByZXR1cm4gc3RyaW5nO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUgZnJvbSBcIi4vdmVydGljYWxCcmFuY2hcIjtcbmltcG9ydCBIb3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuL2hvcml6b250YWxCcmFuY2hcIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENoaWxkTm9kZXNQYXJzZVRyZWUgZXh0ZW5kcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tQ2hpbGROb2Rlc0FuZFRva2VucyhjaGlsZE5vZGVzLCB0b2tlbnMpIHtcbiAgICBsZXQgY2hpbGROb2Rlc1BhcnNlVHJlZTtcblxuICAgIGNvbnN0IGNoaWxkTm9kZVBhcnNlVHJlZXMgPSBjaGlsZE5vZGVzLnJlZHVjZSgoY2hpbGROb2RlUGFyc2VUcmVlcywgY2hpbGROb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZE5vZGVQYXJzZVRyZWUgPSBjaGlsZE5vZGUuYXNQYXJzZVRyZWUodG9rZW5zKTtcblxuICAgICAgICAgICAgY2hpbGROb2RlUGFyc2VUcmVlcy5wdXNoKGNoaWxkTm9kZVBhcnNlVHJlZSk7XG5cbiAgICAgICAgICAgIHJldHVybiBjaGlsZE5vZGVQYXJzZVRyZWVzO1xuICAgICAgICAgIH0sIFtdKSxcbiAgICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzTGVuZ3RoID0gY2hpbGROb2RlUGFyc2VUcmVlcy5sZW5ndGg7XG5cbiAgICBpZiAoY2hpbGROb2RlUGFyc2VUcmVlc0xlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWUgPSBmaXJzdChjaGlsZE5vZGVQYXJzZVRyZWVzKTtcblxuICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZSA9IGZpcnN0Q2hpbGROb2RlUGFyc2VUcmVlOyAgLy8vXG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBmaXJzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB1bmRlZmluZWQsXG4gICAgICAgICAgbGFzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSAwLFxuICAgICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXNXaWR0aCA9IDAsXG4gICAgICAgICAgY2hpbGROb2RlUGFyc2VUcmVlc0RlcHRoID0gMDtcblxuICAgICAgY2hpbGROb2RlUGFyc2VUcmVlcy5mb3JFYWNoKChjaGlsZE5vZGVQYXJzZVRyZWUsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZVBhcnNlVHJlZVdpZHRoID0gY2hpbGROb2RlUGFyc2VUcmVlLmdldFdpZHRoKCksXG4gICAgICAgICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZURlcHRoID0gY2hpbGROb2RlUGFyc2VUcmVlLmdldERlcHRoKCk7XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgICAgY29uc3QgZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWUgPSBjaGlsZE5vZGVQYXJzZVRyZWUsXG4gICAgICAgICAgICAgICAgZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpO1xuXG4gICAgICAgICAgZmlyc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSBjaGlsZE5vZGVQYXJzZVRyZWVzTGVuZ3RoIC0gMSkge1xuICAgICAgICAgIGNvbnN0IGxhc3RDaGlsZE5vZGVQYXJzZVRyZWUgPSBjaGlsZE5vZGVQYXJzZVRyZWUsXG4gICAgICAgICAgICAgICAgbGFzdENoaWxkTm9kZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBsYXN0Q2hpbGROb2RlUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKTtcblxuICAgICAgICAgIGxhc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uICs9IGxhc3RDaGlsZE5vZGVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluZGV4IDwgY2hpbGROb2RlUGFyc2VUcmVlc0xlbmd0aCAtIDEpIHtcbiAgICAgICAgICBsYXN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiArPSBjaGlsZE5vZGVQYXJzZVRyZWVXaWR0aDtcbiAgICAgICAgICBsYXN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiArPSAxO1xuXG4gICAgICAgICAgY2hpbGROb2RlUGFyc2VUcmVlc1dpZHRoICs9IDE7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzV2lkdGggKz0gY2hpbGROb2RlUGFyc2VUcmVlV2lkdGg7XG4gICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXNEZXB0aCA9IE1hdGgubWF4KGNoaWxkTm9kZVBhcnNlVHJlZXNEZXB0aCwgY2hpbGROb2RlUGFyc2VUcmVlRGVwdGgpO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHdpZHRoID0gbGFzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24gLSBmaXJzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24gKyAxLFxuICAgICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tV2lkdGgod2lkdGgpLFxuICAgICAgICAgICAgaG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZSA9IEhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHdpZHRoKSxcbiAgICAgICAgICAgIGxlZnRNYXJnaW5XaWR0aCA9IGZpcnN0VmVydGljYWxCcmFuY2hQb3NpdGlvbixcbiAgICAgICAgICAgIHJpZ2h0TWFyZ2luV2lkdGggPSBjaGlsZE5vZGVQYXJzZVRyZWVzV2lkdGggLSB3aWR0aCAtIGxlZnRNYXJnaW5XaWR0aDtcblxuICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuYWRkUmlnaHRNYXJnaW4ocmlnaHRNYXJnaW5XaWR0aCk7XG4gICAgICBob3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlLmFkZExlZnRNYXJnaW4obGVmdE1hcmdpbldpZHRoKTtcbiAgICAgIGhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUuYWRkUmlnaHRNYXJnaW4ocmlnaHRNYXJnaW5XaWR0aCk7XG5cbiAgICAgIGNvbnN0IHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCk7XG5cbiAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tRGVwdGhBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKENoaWxkTm9kZXNQYXJzZVRyZWUsIGNoaWxkTm9kZVBhcnNlVHJlZXNEZXB0aCwgdmVydGljYWxCcmFuY2hQb3NpdGlvbik7XG5cbiAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXMuZm9yRWFjaCgoY2hpbGROb2RlUGFyc2VUcmVlLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBjaGlsZE5vZGVQYXJzZVRyZWVEZXB0aCA9IGNoaWxkTm9kZVBhcnNlVHJlZS5nZXREZXB0aCgpLFxuICAgICAgICAgICAgICBjbG9uZWRDaGlsZE5vZGVQYXJzZVRyZWUgPSBjaGlsZE5vZGVQYXJzZVRyZWUuY2xvbmUoKTtcblxuICAgICAgICBpZiAoaW5kZXggPCBjaGlsZE5vZGVQYXJzZVRyZWVzTGVuZ3RoIC0gMSkge1xuICAgICAgICAgIGNvbnN0IHJpZ2h0TWFyZ2luV2lkdGggPSAxO1xuXG4gICAgICAgICAgY2xvbmVkQ2hpbGROb2RlUGFyc2VUcmVlLmFkZFJpZ2h0TWFyZ2luKHJpZ2h0TWFyZ2luV2lkdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoaWxkTm9kZVBhcnNlVHJlZURlcHRoIDwgY2hpbGROb2RlUGFyc2VUcmVlc0RlcHRoKSB7XG4gICAgICAgICAgY29uc3QgYm90dG9tTWFyZ2luRGVwdGggPSBjaGlsZE5vZGVQYXJzZVRyZWVzRGVwdGggLSBjaGlsZE5vZGVQYXJzZVRyZWVEZXB0aDtcblxuICAgICAgICAgIGNsb25lZENoaWxkTm9kZVBhcnNlVHJlZS5hZGRCb3R0b21NYXJnaW4oYm90dG9tTWFyZ2luRGVwdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZS5hcHBlbmRUb1JpZ2h0KGNsb25lZENoaWxkTm9kZVBhcnNlVHJlZSk7XG4gICAgICB9KTtcblxuICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZS5hcHBlbmRUb1RvcChob3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlKTtcbiAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUuYXBwZW5kVG9Ub3AodmVydGljYWxCcmFuY2hQYXJzZVRyZWUpO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gY2hpbGROb2Rlc1BhcnNlVHJlZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZU5hbWVQYXJzZVRyZWUgZnJvbSBcIi4vcnVsZU5hbWVcIjtcbmltcG9ydCBDaGlsZE5vZGVzUGFyc2VUcmVlIGZyb20gXCIuL2NoaWxkTm9kZXNcIjtcbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb25UZXJtaW5hbE5vZGVQYXJzZVRyZWUgZXh0ZW5kcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tTm9uVGVybWluYWxOb2RlQW5kVG9rZW5zKG5vblRlcm1pbmFsTm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgcnVsZU5hbWVQYXJzZVRyZWUgPSBSdWxlTmFtZVBhcnNlVHJlZS5mcm9tTm9uVGVybWluYWxOb2RlQW5kVG9rZW5zKG5vblRlcm1pbmFsTm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBjaGlsZE5vZGVzUGFyc2VUcmVlID0gQ2hpbGROb2Rlc1BhcnNlVHJlZS5mcm9tQ2hpbGROb2Rlc0FuZFRva2VucyhjaGlsZE5vZGVzLCB0b2tlbnMpO1xuICAgIFxuICAgIGxldCBydWxlTmFtZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBydWxlTmFtZVBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCk7XG4gICAgXG4gICAgY29uc3QgY2hpbGROb2Rlc1BhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBjaGlsZE5vZGVzUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uc0RpZmZlcmVuY2UgPSBydWxlTmFtZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24gLSBjaGlsZE5vZGVzUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbjtcbiAgICBcbiAgICBsZXQgbGVmdE1hcmdpbldpZHRoID0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGZhbHNlKSB7XG4gICAgICAvLy9cbiAgICB9IGVsc2UgaWYgKHZlcnRpY2FsQnJhbmNoUG9zaXRpb25zRGlmZmVyZW5jZSA8IDApIHtcbiAgICAgIGxlZnRNYXJnaW5XaWR0aCA9IC12ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uc0RpZmZlcmVuY2U7XG5cbiAgICAgIHJ1bGVOYW1lUGFyc2VUcmVlLmFkZExlZnRNYXJnaW4obGVmdE1hcmdpbldpZHRoKTtcbiAgICB9IGVsc2UgaWYgKHZlcnRpY2FsQnJhbmNoUG9zaXRpb25zRGlmZmVyZW5jZSA+IDApIHtcbiAgICAgIGxlZnRNYXJnaW5XaWR0aCA9ICt2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uc0RpZmZlcmVuY2U7XG5cbiAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuICAgIH1cblxuICAgIGNvbnN0IHJ1bGVOYW1lUGFyc2VUcmVlV2lkdGggPSBydWxlTmFtZVBhcnNlVHJlZS5nZXRXaWR0aCgpLFxuICAgICAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWVXaWR0aCA9IGNoaWxkTm9kZXNQYXJzZVRyZWUuZ2V0V2lkdGgoKSxcbiAgICAgICAgICB3aWR0aHNEaWZmZXJlbmNlID0gcnVsZU5hbWVQYXJzZVRyZWVXaWR0aCAtIGNoaWxkTm9kZXNQYXJzZVRyZWVXaWR0aDtcbiAgICBcbiAgICBsZXQgcmlnaHRNYXJnaW5XaWR0aCA9IHVuZGVmaW5lZDtcblxuICAgIGlmIChmYWxzZSkge1xuICAgICAgLy8vXG4gICAgfSBlbHNlIGlmICh3aWR0aHNEaWZmZXJlbmNlIDwgMCkge1xuICAgICAgcmlnaHRNYXJnaW5XaWR0aCA9IC13aWR0aHNEaWZmZXJlbmNlO1xuICAgICAgXG4gICAgICBydWxlTmFtZVBhcnNlVHJlZS5hZGRSaWdodE1hcmdpbihyaWdodE1hcmdpbldpZHRoKTtcbiAgICB9IGVsc2UgaWYgKHdpZHRoc0RpZmZlcmVuY2UgPiAwKSB7XG4gICAgICByaWdodE1hcmdpbldpZHRoID0gK3dpZHRoc0RpZmZlcmVuY2U7XG5cbiAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUuYWRkUmlnaHRNYXJnaW4ocmlnaHRNYXJnaW5XaWR0aCk7XG4gICAgfVxuXG4gICAgcnVsZU5hbWVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gcnVsZU5hbWVQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpO1xuXG4gICAgY29uc3QgcnVsZU5hbWVQYXJzZVRyZWVEZXB0aCA9IHJ1bGVOYW1lUGFyc2VUcmVlLmdldERlcHRoKCksXG4gICAgICAgICAgbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlRGVwdGggPSBydWxlTmFtZVBhcnNlVHJlZURlcHRoLCAvLy9cbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gcnVsZU5hbWVQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uLCAvLy9cbiAgICAgICAgICBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tRGVwdGhBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKE5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZSwgbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlRGVwdGgsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pO1xuXG4gICAgbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlLmFwcGVuZFRvUmlnaHQocnVsZU5hbWVQYXJzZVRyZWUpO1xuICAgIG5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZS5hcHBlbmRUb0JvdHRvbShjaGlsZE5vZGVzUGFyc2VUcmVlKTtcblxuICAgIHJldHVybiBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZSBmcm9tIFwiLi4vcGFyc2VUcmVlL25vblRlcm1pbmFsTm9kZVwiO1xuXG5pbXBvcnQgeyBmb3J3YXJkc1NvbWUsIGJhY2t3YXJkc1NvbWUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGNvbnN0cnVjdG9yKHJ1bGVOYW1lLCBwYXJlbnROb2RlLCBjaGlsZE5vZGVzKSB7XG4gICAgdGhpcy5ydWxlTmFtZSA9IHJ1bGVOYW1lO1xuICAgIHRoaXMucGFyZW50Tm9kZSA9IHBhcmVudE5vZGU7XG4gICAgdGhpcy5jaGlsZE5vZGVzID0gY2hpbGROb2RlcztcbiAgfVxuXG4gIGlzVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIHRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIGlzTm9uVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IHRydWU7XG5cbiAgICByZXR1cm4gbm9uVGVybWluYWxOb2RlO1xuICB9XG5cbiAgZ2V0UnVsZU5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZU5hbWU7XG4gIH1cblxuICBnZXRQYXJlbnROb2RlKCkge1xuICAgIHJldHVybiB0aGlzLnBhcmVudE5vZGU7XG4gIH1cblxuICBnZXRDaGlsZE5vZGVzKCkge1xuICAgIHJldHVybiB0aGlzLmNoaWxkTm9kZXM7XG4gIH1cblxuICBnZXRGaXJzdFNpZ25pZmljYW50VG9rZW4oKSB7XG4gICAgbGV0IGZpcnN0U2lnbmlmaWNhbnRUb2tlbiA9IG51bGw7XG5cbiAgICBmb3J3YXJkc1NvbWUodGhpcy5jaGlsZE5vZGVzLCAoY2hpbGROb2RlKSA9PiB7XG4gICAgICBmaXJzdFNpZ25pZmljYW50VG9rZW4gPSBjaGlsZE5vZGUuZ2V0Rmlyc3RTaWduaWZpY2FudFRva2VuKCk7XG5cbiAgICAgIGlmIChmaXJzdFNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmlyc3RTaWduaWZpY2FudFRva2VuO1xuICB9XG5cbiAgZ2V0TGFzdFNpZ25pZmljYW50VG9rZW4oKSB7XG4gICAgbGV0IGxhc3RTaWduaWZpY2FudFRva2VuID0gbnVsbDtcblxuICAgIGJhY2t3YXJkc1NvbWUodGhpcy5jaGlsZE5vZGVzLCAoY2hpbGROb2RlKSA9PiB7XG4gICAgICBsYXN0U2lnbmlmaWNhbnRUb2tlbiA9IGNoaWxkTm9kZS5nZXRMYXN0U2lnbmlmaWNhbnRUb2tlbigpO1xuXG4gICAgICBpZiAobGFzdFNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbGFzdFNpZ25pZmljYW50VG9rZW47XG4gIH1cbiAgXG4gIHNldFJ1bGVOYW1lKHJ1bGVOYW1lKSB7XG4gICAgdGhpcy5ydWxlTmFtZSA9IHJ1bGVOYW1lO1xuICB9XG5cbiAgc2V0UGFyZW50Tm9kZShwYXJlbnROb2RlKSB7XG4gICAgdGhpcy5wYXJlbnROb2RlID0gcGFyZW50Tm9kZTtcbiAgfVxuXG4gIHNldENoaWxkTm9kZXMoY2hpbGROb2Rlcykge1xuICAgIHRoaXMuY2hpbGROb2RlcyA9IGNoaWxkTm9kZXM7XG4gIH1cbiAgXG4gIGFzUGFyc2VUcmVlKHRva2Vucykge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IHRoaXMsICAvLy9cbiAgICAgICAgICBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWUgPSBOb25UZXJtaW5hbE5vZGVQYXJzZVRyZWUuZnJvbU5vblRlcm1pbmFsTm9kZUFuZFRva2Vucyhub25UZXJtaW5hbE5vZGUsIHRva2VucyksXG4gICAgICAgICAgcGFyc2VUcmVlID0gbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlOyAgLy8vXG5cbiAgICByZXR1cm4gcGFyc2VUcmVlO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoQ2xhc3MsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7XG4gICAgaWYgKGNoaWxkTm9kZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY2hpbGROb2RlcyA9IHJ1bGVOYW1lOyAgLy8vXG4gICAgICBydWxlTmFtZSA9IENsYXNzOyAvLy9cbiAgICAgIENsYXNzID0gTm9uVGVybWluYWxOb2RlOyAgLy8vXG4gICAgfVxuXG4gICAgY29uc3QgY2hpbGROb2Rlc0xlbmd0aCA9IGNoaWxkTm9kZXMubGVuZ3RoO1xuXG4gICAgaWYgKGNoaWxkTm9kZXNMZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlcmUgYXJlIG5vIGNoaWxkIG5vZGVzIGF0IHJ1bGUgJyR7cnVsZU5hbWV9Jy5gKTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgcGFyZW50Tm9kZSA9IHVuZGVmaW5lZCwgLy8vXG4gICAgICAgICAgbm9uVGVybWluYWxOb2RlID0gbmV3IENsYXNzKHJ1bGVOYW1lLCBwYXJlbnROb2RlLCBjaGlsZE5vZGVzKTtcblxuICAgIHJldHVybiBub25UZXJtaW5hbE5vZGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmFtZUJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZXROYW1lKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxOb2RlQ29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCksXG4gICAgICAgICAgbmFtZSA9IHRlcm1pbmFsTm9kZUNvbnRlbnQ7IC8vL1xuICAgIFxuICAgIHJldHVybiBuYW1lO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKE5hbWVCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQocGFydCkge1xuICBsZXQgcGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQgPSBmYWxzZTtcblxuICBjb25zdCBwYXJ0UnVsZU5hbWVQYXJ0ID0gaXNQYXJ0UnVsZU5hbWVQYXJ0KHBhcnQpO1xuXG4gIGlmIChwYXJ0UnVsZU5hbWVQYXJ0KSB7XG4gICAgY29uc3QgcnVsZU5hbWVQYXJ0ID0gcGFydCwgIC8vL1xuICAgICAgICAgIGxvb2tBaGVhZCA9IHJ1bGVOYW1lUGFydC5pc0xvb2tBaGVhZCgpO1xuXG4gICAgaWYgKGxvb2tBaGVhZCkge1xuICAgICAgcGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0UnVsZU5hbWVQYXJ0V2l0aExvb2tBaGVhZDtcbn1cblxuZnVuY3Rpb24gaXNQYXJ0UnVsZU5hbWVQYXJ0KHBhcnQpIHtcbiAgbGV0IHBhcnRSdWxlTmFtZVBhcnQgPSBmYWxzZTtcblxuICBjb25zdCBwYXJ0VGVybWluYWxQYXJ0ID0gcGFydC5pc1Rlcm1pbmFsUGFydCgpLFxuICAgICAgICBwYXJ0Tm9uVGVybWluYWxQYXJ0ID0gIXBhcnRUZXJtaW5hbFBhcnQ7XG5cbiAgaWYgKHBhcnROb25UZXJtaW5hbFBhcnQpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbFBhcnQgPSBwYXJ0LFxuICAgICAgICAgIG5vblRlcm1pbmFsUGFydFJ1bGVOYW1lUGFydCA9IG5vblRlcm1pbmFsUGFydC5pc1J1bGVOYW1lUGFydCgpO1xuXG4gICAgcGFydFJ1bGVOYW1lUGFydCA9IG5vblRlcm1pbmFsUGFydFJ1bGVOYW1lUGFydDsgLy8vXG4gIH1cblxuICByZXR1cm4gcGFydFJ1bGVOYW1lUGFydDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgcHVzaCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IGlzUGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQgfSBmcm9tIFwiLi9wYXJ0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBhcnRzKHBhcnRzLCBub2RlcywgaW5kZXgsIHN0YXRlLCBjYWxsYmFjaykge1xuICBsZXQgcGFyc2VkO1xuXG4gIGNvbnN0IHBhcnRzTGVuZ3RoID0gcGFydHMubGVuZ3RoO1xuXG4gIGlmIChpbmRleCA9PT0gcGFydHNMZW5ndGgpIHtcbiAgICBwYXJzZWQgPSAoY2FsbGJhY2sgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpIDpcbiAgICAgICAgICAgICAgICAgIHRydWU7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgcGFydCA9IHBhcnRzW2luZGV4XTtcblxuICAgIHBhcnNlZCA9IHBhcnNlUGFydE9mUGFydHMocGFydCwgcGFydHMsIG5vZGVzLCBpbmRleCwgc3RhdGUsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIHJldHVybiBwYXJzZWQ7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUGFydE9mUGFydHMocGFydCwgcGFydHMsIG5vZGVzLCBpbmRleCwgc3RhdGUsIGNhbGxiYWNrKSB7XG4gIGxldCBwYXJzZWQ7XG5cbiAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgY29uc3QgcGFydHNOb2RlcyA9IFtdO1xuXG4gICAgaW5kZXgrKztcblxuICAgIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIHN0YXRlLCAoKSA9PiBwYXJzZVBhcnRzKHBhcnRzLCBwYXJ0c05vZGVzLCBpbmRleCwgc3RhdGUsIGNhbGxiYWNrKSk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBwdXNoKG5vZGVzLCBwYXJ0c05vZGVzKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgcGFydFJ1bGVOYW1lUGFydFdpdGhMb29rQWhlYWQgPSBpc1BhcnRSdWxlTmFtZVBhcnRXaXRoTG9va0FoZWFkKHBhcnQpO1xuXG4gICAgaWYgKHBhcnRSdWxlTmFtZVBhcnRXaXRoTG9va0FoZWFkKSB7XG4gICAgICBjb25zdCBydWxlTmFtZVBhcnQgPSBwYXJ0LCAvLy9cbiAgICAgICAgICAgIHBhcnRzTm9kZXMgPSBbXTtcblxuICAgICAgaW5kZXgrKztcblxuICAgICAgcGFyc2VkID0gcnVsZU5hbWVQYXJ0LnBhcnNlKG5vZGVzLCBzdGF0ZSwgKCkgPT4gcGFyc2VQYXJ0cyhwYXJ0cywgcGFydHNOb2RlcywgaW5kZXgsIHN0YXRlLCBjYWxsYmFjaykpO1xuXG4gICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgIHB1c2gobm9kZXMsIHBhcnRzTm9kZXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXJzZWQgPSBwYXJ0LnBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spO1xuXG4gICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgIGluZGV4Kys7XG5cbiAgICAgICAgcGFyc2VkID0gcGFyc2VQYXJ0cyhwYXJ0cywgbm9kZXMsIGluZGV4LCBzdGF0ZSwgY2FsbGJhY2spO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJzZWQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHBhcnNlUGFydHMgfSBmcm9tIFwiLi91dGlsaXRpZXMvbG9va0FoZWFkXCI7XG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGZpcnN0LCBhbGxCdXRGaXJzdCB9IGZyb20gXCIuL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IocGFydHMpIHtcbiAgICB0aGlzLnBhcnRzID0gcGFydHM7XG4gIH1cblxuICBnZXRQYXJ0cygpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJ0cztcbiAgfVxuXG4gIGdldEZpcnN0UGFydCgpIHtcbiAgICBjb25zdCBmaXJzdFBhcnQgPSBmaXJzdCh0aGlzLnBhcnRzKTtcblxuICAgIHJldHVybiBmaXJzdFBhcnQ7XG4gIH1cblxuICBnZXRQYXJ0c0xlbmd0aCgpIHtcbiAgICBjb25zdCBwYXJ0c0xlbmd0aCA9IHRoaXMucGFydHMubGVuZ3RoO1xuXG4gICAgcmV0dXJuIHBhcnRzTGVuZ3RoO1xuICB9XG5cbiAgZ2V0QWxsQnV0Rmlyc3RQYXJ0cygpIHtcbiAgICBjb25zdCBhbGxCdXRGaXJzdFBhcnRzID0gYWxsQnV0Rmlyc3QodGhpcy5wYXJ0cyk7XG5cbiAgICByZXR1cm4gYWxsQnV0Rmlyc3RQYXJ0cztcbiAgfVxuXG4gIGFkZFBhcnQocGFydCkge1xuICAgIHRoaXMucGFydHMucHVzaChwYXJ0KTtcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgY29uc3QgaW5kZXggPSAwO1xuXG4gICAgcGFyc2VkID0gcGFyc2VQYXJ0cyh0aGlzLnBhcnRzLCBub2RlcywgaW5kZXgsIHN0YXRlLCBjYWxsYmFjayk7XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3QgcGFydHNTdHJpbmcgPSB0aGlzLnBhcnRzLnJlZHVjZSgocGFydHNTdHJpbmcsIHBhcnQpID0+IHtcbiAgICAgICAgICBjb25zdCBwYXJ0U3RyaW5nID0gcGFydC5hc1N0cmluZygpO1xuXG4gICAgICAgICAgaWYgKHBhcnRzU3RyaW5nID09PSBFTVBUWV9TVFJJTkcpIHtcbiAgICAgICAgICAgIHBhcnRzU3RyaW5nID0gcGFydFN0cmluZzsgLy8vXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcnRzU3RyaW5nID0gYCR7cGFydHNTdHJpbmd9ICR7cGFydFN0cmluZ31gO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBwYXJ0c1N0cmluZztcbiAgICAgICAgfSwgRU1QVFlfU1RSSU5HKSxcbiAgICAgICAgc3RyaW5nID0gcGFydHNTdHJpbmc7IC8vL1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcbiAgICBmb3IodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKylhcnIyW2ldID0gYXJyW2ldO1xuICAgIHJldHVybiBhcnIyO1xufVxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShhcnIpO1xufVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkge1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7XG4gICAgdHJ5IHtcbiAgICAgICAgRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChEYXRlLCBbXSwgZnVuY3Rpb24oKSB7fSkpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5mdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgICBpZiAoaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkpIHtcbiAgICAgICAgX2NvbnN0cnVjdCA9IFJlZmxlY3QuY29uc3RydWN0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIF9jb25zdHJ1Y3QgPSBmdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgICAgICAgICAgIHZhciBhID0gW1xuICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBhLnB1c2guYXBwbHkoYSwgYXJncyk7XG4gICAgICAgICAgICB2YXIgQ29uc3RydWN0b3IgPSBGdW5jdGlvbi5iaW5kLmFwcGx5KFBhcmVudCwgYSk7XG4gICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQ29uc3RydWN0b3IoKTtcbiAgICAgICAgICAgIGlmIChDbGFzcykgX3NldFByb3RvdHlwZU9mKGluc3RhbmNlLCBDbGFzcy5wcm90b3R5cGUpO1xuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gX2NvbnN0cnVjdC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xufVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG59XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBpdGVyW1N5bWJvbC5pdGVyYXRvcl0gIT0gbnVsbCB8fCBpdGVyW1wiQEBpdGVyYXRvclwiXSAhPSBudWxsKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTtcbn1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICAgICAgby5fX3Byb3RvX18gPSBwO1xuICAgICAgICByZXR1cm4gbztcbiAgICB9O1xuICAgIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59XG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7XG4gICAgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTtcbn1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHtcbiAgICBpZiAoIW8pIHJldHVybjtcbiAgICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICAgIHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTtcbiAgICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG4pO1xuICAgIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbn1cbnZhciBUZXJtaW5hbFBhcnQgPSAvKiNfX1BVUkVfXyovIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIFRlcm1pbmFsUGFydCgpIHtcbiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFRlcm1pbmFsUGFydCk7XG4gICAgfVxuICAgIF9jcmVhdGVDbGFzcyhUZXJtaW5hbFBhcnQsIFtcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImlzTm9uVGVybWluYWxQYXJ0XCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gaXNOb25UZXJtaW5hbFBhcnQoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5vblRlcm1pbmFsUGFydCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybiBub25UZXJtaW5hbFBhcnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJpc1Rlcm1pbmFsUGFydFwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGlzVGVybWluYWxQYXJ0KCkge1xuICAgICAgICAgICAgICAgIHZhciB0ZXJtaW5hbFBhcnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybiB0ZXJtaW5hbFBhcnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJpc05vV2hpdGVzcGFjZVBhcnRcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBpc05vV2hpdGVzcGFjZVBhcnQoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5vV2hpdGVzcGFjZVBhcnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9XaGl0ZXNwYWNlUGFydDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImNsb25lXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xvbmUoUGFydCkge1xuICAgICAgICAgICAgICAgIGZvcih2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlbWFpbmluZ0FyZ3VtZW50cyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKXtcbiAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nQXJndW1lbnRzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9jb25zdHJ1Y3QoUGFydCwgX3RvQ29uc3VtYWJsZUFycmF5KHJlbWFpbmluZ0FyZ3VtZW50cykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgXSk7XG4gICAgcmV0dXJuIFRlcm1pbmFsUGFydDtcbn0oKTtcbmV4cG9ydHMuZGVmYXVsdCA9IFRlcm1pbmFsUGFydDtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5d1lYSjBMM1JsY20xcGJtRnNMbXB6SWwwc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklsd2lkWE5sSUhOMGNtbGpkRndpTzF4dVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCamJHRnpjeUJVWlhKdGFXNWhiRkJoY25RZ2UxeHVJQ0JwYzA1dmJsUmxjbTFwYm1Gc1VHRnlkQ2dwSUh0Y2JpQWdJQ0JqYjI1emRDQnViMjVVWlhKdGFXNWhiRkJoY25RZ1BTQm1ZV3h6WlR0Y2JseHVJQ0FnSUhKbGRIVnliaUJ1YjI1VVpYSnRhVzVoYkZCaGNuUTdYRzRnSUgxY2JseHVJQ0JwYzFSbGNtMXBibUZzVUdGeWRDZ3BJSHRjYmlBZ0lDQmpiMjV6ZENCMFpYSnRhVzVoYkZCaGNuUWdQU0IwY25WbE8xeHVJQ0FnSUZ4dUlDQWdJSEpsZEhWeWJpQjBaWEp0YVc1aGJGQmhjblE3WEc0Z0lIMWNibHh1SUNCcGMwNXZWMmhwZEdWemNHRmpaVkJoY25Rb0tTQjdYRzRnSUNBZ1kyOXVjM1FnYm05WGFHbDBaWE53WVdObFVHRnlkQ0E5SUdaaGJITmxPMXh1WEc0Z0lDQWdjbVYwZFhKdUlHNXZWMmhwZEdWemNHRmpaVkJoY25RN1hHNGdJSDFjYmx4dUlDQmpiRzl1WlNoUVlYSjBMQ0F1TGk1eVpXMWhhVzVwYm1kQmNtZDFiV1Z1ZEhNcElIc2djbVYwZFhKdUlHNWxkeUJRWVhKMEtDNHVMbkpsYldGcGJtbHVaMEZ5WjNWdFpXNTBjeWs3SUgxY2JuMWNiaUpkTENKdVlXMWxjeUk2V3lKVVpYSnRhVzVoYkZCaGNuUWlMQ0pwYzA1dmJsUmxjbTFwYm1Gc1VHRnlkQ0lzSW01dmJsUmxjbTFwYm1Gc1VHRnlkQ0lzSW1selZHVnliV2x1WVd4UVlYSjBJaXdpZEdWeWJXbHVZV3hRWVhKMElpd2lhWE5PYjFkb2FYUmxjM0JoWTJWUVlYSjBJaXdpYm05WGFHbDBaWE53WVdObFVHRnlkQ0lzSW1Oc2IyNWxJaXdpVUdGeWRDSXNJbkpsYldGcGJtbHVaMEZ5WjNWdFpXNTBjeUpkTENKdFlYQndhVzVuY3lJNklrRkJRVUVzUTBGQldTeFhRVUZCTEVOQlFVTTdPenRGTzNkQ096dDVSRHQxUlRzN096czdPenM3T3pzN096czdPenRuUmpzN096czdPenM3YzBNN096czdPenRwUXpzN08ybEZPenRUT3pzN096czdPemhFTzNORE96WkVPMmxGT3pzN08zZEZPMmRGT3pzN096czdPenM3T3p0MVFqczdTenM3T3pzN096czdPenNyUkRzN096dEpRVVZSUVN4WlFVRlpMR2xDUVVGc1FpeFJRVUZSTzJGQlFVWkJMRmxCUVZrN01rTTdPenM3V1VGREwwSkRMRWRCUVdsQ0xFVkJRV3BDUVN4RFFVRnBRanR0UWtGQmFrSkJMRkZCUVZFc1EwRkJVa0VzYVVKQlFXbENMRWRCUVVjc1EwRkJRenRuUWtGRGJrSXNSMEZCU3l4RFFVRkRReXhsUVVGbExFZEJRVWNzUzBGQlN6dG5Ra0ZGTjBJc1RVRkJUU3hEUVVGRFFTeGxRVUZsTzFsQlEzaENMRU5CUVVNN096dFpRVVZFUXl4SFFVRmpMRVZCUVdSQkxFTkJRV003YlVKQlFXUkJMRkZCUVZFc1EwRkJVa0VzWTBGQll5eEhRVUZITEVOQlFVTTdaMEpCUTJoQ0xFZEJRVXNzUTBGQlEwTXNXVUZCV1N4SFFVRkhMRWxCUVVrN1owSkJSWHBDTEUxQlFVMHNRMEZCUTBFc1dVRkJXVHRaUVVOeVFpeERRVUZET3pzN1dVRkZSRU1zUjBGQmEwSXNSVUZCYkVKQkxFTkJRV3RDTzIxQ1FVRnNRa0VzVVVGQlVTeERRVUZTUVN4clFrRkJhMElzUjBGQlJ5eERRVUZETzJkQ1FVTndRaXhIUVVGTExFTkJRVU5ETEdkQ1FVRm5RaXhIUVVGSExFdEJRVXM3WjBKQlJUbENMRTFCUVUwc1EwRkJRMEVzWjBKQlFXZENPMWxCUTNwQ0xFTkJRVU03T3p0WlFVVkVReXhIUVVGTExFVkJRVXhCTEVOQlFVczdiVUpCUVV4QkxGRkJRVkVzUTBGQlVrRXNTMEZCU3l4RFFVRkRReXhKUVVGSkxFVkJRWGxDTEVOQlFVTTdaMEpCUVhoQ0xFZEJRVWRETEVOQlFVZ3NSMEZCY1VJc1EwRkJja0lzU1VGQmNVSXNSMEZCY2tJc1UwRkJjVUlzUTBGQmNrSXNUVUZCY1VJc1JVRkJiRUpCTEd0Q1FVRnJRaXhIUVVGeVFpeEhRVUZ4UWl4UFFVRnlRaXhKUVVGeFFpeEhRVUZ5UWl4RFFVRnhRaXhIUVVGeVFpeEpRVUZ4UWl4SFFVRnlRaXhEUVVGeFFpeFBRVUZ5UWl4SlFVRnhRaXhIUVVGeVFpeERRVUZ4UWl4RlFVRnlRaXhKUVVGeFFpeEhRVUZ5UWl4SlFVRnhRaXhGUVVGeVFpeEpRVUZ4UWl4SFFVRnlRaXhEUVVGRE8yOUNRVUZGUVN4clFrRkJhMElzUTBGQmNrSXNTVUZCY1VJc1IwRkJja0lzUTBGQmNVSXNTVUZCY2tJc1UwRkJjVUlzUTBGQmNrSXNTVUZCY1VJc1EwTnlRbTVETEVORWNVSnRRenRuUWtGQlJDeERRVUZETzJkQ1FVRkpMRTFCUVUwc1dVRkJTMFFzU1VGQlNTeHhRa0ZCU1VNc2EwSkJRV3RDTzFsQlFVY3NRMEZCUXpzN1RUczdPMnRDUVc1Q00wUlVMRmxCUVZrc1FTSjkiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbE5vZGVQYXJzZVRyZWUgZXh0ZW5kcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tVGVybWluYWxOb2RlQW5kVG9rZW5zKHRlcm1pbmFsTm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlbiA9IHRlcm1pbmFsTm9kZS5nZXRTaWduaWZpY2FudFRva2VuKCksXG4gICAgICAgICAgY29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCksXG4gICAgICAgICAgdHlwZSA9IHNpZ25pZmljYW50VG9rZW4uZ2V0VHlwZSgpLFxuICAgICAgICAgIHRva2VuSW5kZXggPSB0b2tlbnMuaW5kZXhPZihzaWduaWZpY2FudFRva2VuKSxcbiAgICAgICAgICBzdHJpbmcgPSBgJHtjb250ZW50fVske3R5cGV9XSgke3Rva2VuSW5kZXh9KWAsXG4gICAgICAgICAgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoID0gc3RyaW5nTGVuZ3RoLCAvLy9cbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21XaWR0aCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21TdHJpbmdBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKFRlcm1pbmFsTm9kZVBhcnNlVHJlZSwgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZS5hcHBlbmRUb1RvcCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSk7XG5cbiAgICByZXR1cm4gdGVybWluYWxOb2RlUGFyc2VUcmVlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXJtaW5hbE5vZGVQYXJzZVRyZWUgZnJvbSBcIi4uL3BhcnNlVHJlZS90ZXJtaW5hbE5vZGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxOb2RlIHtcbiAgY29uc3RydWN0b3Ioc2lnbmlmaWNhbnRUb2tlbiwgcGFyZW50Tm9kZSkge1xuICAgIHRoaXMuc2lnbmlmaWNhbnRUb2tlbiA9IHNpZ25pZmljYW50VG9rZW47XG4gICAgdGhpcy5wYXJlbnROb2RlID0gcGFyZW50Tm9kZTtcbiAgfVxuXG4gIGdldFNpZ25pZmljYW50VG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuc2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIGdldFBhcmVudE5vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50Tm9kZTtcbiAgfVxuXG4gIGdldEZpcnN0U2lnbmlmaWNhbnRUb2tlbigpIHtcbiAgICBjb25zdCBmaXJzdFNpZ25pZmljYW50VG9rZW4gPSB0aGlzLnNpZ25pZmljYW50VG9rZW47ICAvLy9cblxuICAgIHJldHVybiBmaXJzdFNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBnZXRMYXN0U2lnbmlmaWNhbnRUb2tlbigpIHtcbiAgICBjb25zdCBsYXN0U2lnbmlmaWNhbnRUb2tlbiA9IHRoaXMuc2lnbmlmaWNhbnRUb2tlbjsgIC8vL1xuXG4gICAgcmV0dXJuIGxhc3RTaWduaWZpY2FudFRva2VuO1xuICB9XG5cbiAgaXNOb1doaXRlc3BhY2VOb2RlKCkge1xuICAgIGNvbnN0IG5vV2hpdGVzcGFjZU5vZGUgPSBmYWxzZTtcblxuICAgIHJldHVybiBub1doaXRlc3BhY2VOb2RlO1xuICB9XG5cbiAgaXNUZXJtaW5hbE5vZGUoKSB7XG4gICAgY29uc3QgdGVybWluYWxOb2RlID0gdHJ1ZTtcbiAgICBcbiAgICByZXR1cm4gdGVybWluYWxOb2RlO1xuICB9XG5cbiAgaXNOb25UZXJtaW5hbE5vZGUoKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gZmFsc2U7XG5cbiAgICByZXR1cm4gbm9uVGVybWluYWxOb2RlO1xuICB9XG5cbiAgZ2V0VHlwZSgpIHsgcmV0dXJuIHRoaXMuc2lnbmlmaWNhbnRUb2tlbi5nZXRUeXBlKCk7IH1cblxuICBnZXRDb250ZW50KCkgeyByZXR1cm4gdGhpcy5zaWduaWZpY2FudFRva2VuLmdldENvbnRlbnQoKTsgfVxuXG4gIHNldFNpZ25pZmljYW50VG9rZW4oc2lnbmlmaWNhbnRUb2tlbikge1xuICAgIHRoaXMuc2lnbmlmaWNhbnRUb2tlbiA9IHNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBzZXRQYXJlbnROb2RlKHBhcmVudE5vZGUpIHtcbiAgICB0aGlzLnBhcmVudE5vZGUgPSBwYXJlbnROb2RlO1xuICB9XG5cbiAgYXNQYXJzZVRyZWUodG9rZW5zKSB7XG4gICAgY29uc3QgdGVybWluYWxOb2RlID0gdGhpcywgIC8vL1xuICAgICAgICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IFRlcm1pbmFsTm9kZVBhcnNlVHJlZS5mcm9tVGVybWluYWxOb2RlQW5kVG9rZW5zKHRlcm1pbmFsTm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBwYXJzZVRyZWUgPSB0ZXJtaW5hbE5vZGVQYXJzZVRyZWU7ICAvLy9cblxuICAgIHJldHVybiBwYXJzZVRyZWU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVNpZ25pZmljYW50VG9rZW4oQ2xhc3MsIHNpZ25pZmljYW50VG9rZW4pIHtcbiAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBzaWduaWZpY2FudFRva2VuID0gQ2xhc3M7IC8vL1xuICAgICAgQ2xhc3MgPSBUZXJtaW5hbE5vZGU7IC8vL1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudE5vZGUgPSB1bmRlZmluZWQsIC8vL1xuICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IG5ldyBDbGFzcyhzaWduaWZpY2FudFRva2VuLCBwYXJlbnROb2RlKTtcbiAgICBcbiAgICByZXR1cm4gdGVybWluYWxOb2RlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX3Rlcm1pbmFsID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vcGFydC90ZXJtaW5hbFwiKSk7XG52YXIgX3Rlcm1pbmFsMSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uLy4uL25vZGUvdGVybWluYWxcIikpO1xuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gICAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gICAgfVxuICAgIHJldHVybiBzZWxmO1xufVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG59XG5mdW5jdGlvbiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ICE9PSBcInVuZGVmaW5lZFwiICYmIFJlZmxlY3QuZ2V0KSB7XG4gICAgICAgIF9nZXQgPSBSZWZsZWN0LmdldDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBfZ2V0ID0gZnVuY3Rpb24gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlcikge1xuICAgICAgICAgICAgdmFyIGJhc2UgPSBfc3VwZXJQcm9wQmFzZSh0YXJnZXQsIHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmICghYmFzZSkgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGJhc2UsIHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmIChkZXNjLmdldCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZXNjLmdldC5jYWxsKHJlY2VpdmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkZXNjLnZhbHVlO1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlciB8fCB0YXJnZXQpO1xufVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgICAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICAgIH07XG4gICAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn1cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICAgIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICAgIH1cbiAgICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHtcbiAgICAgICAgZGVmYXVsdDogb2JqXG4gICAgfTtcbn1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgICAgICByZXR1cm4gY2FsbDtcbiAgICB9XG4gICAgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgICAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgICAgIHJldHVybiBvO1xuICAgIH07XG4gICAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cbmZ1bmN0aW9uIF9zdXBlclByb3BCYXNlKG9iamVjdCwgcHJvcGVydHkpIHtcbiAgICB3aGlsZSghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpKXtcbiAgICAgICAgb2JqZWN0ID0gX2dldFByb3RvdHlwZU9mKG9iamVjdCk7XG4gICAgICAgIGlmIChvYmplY3QgPT09IG51bGwpIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xufVxudmFyIF90eXBlb2YgPSBmdW5jdGlvbihvYmopIHtcbiAgICBcIkBzd2MvaGVscGVycyAtIHR5cGVvZlwiO1xuICAgIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xufTtcbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgICBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uKCkge30pKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHtcbiAgICB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7XG4gICAgICAgIHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0O1xuICAgICAgICBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkge1xuICAgICAgICAgICAgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgIHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpO1xuICAgIH07XG59XG52YXIgU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0ID0gLyojX19QVVJFX18qLyBmdW5jdGlvbihUZXJtaW5hbFBhcnQpIHtcbiAgICBfaW5oZXJpdHMoU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0LCBUZXJtaW5hbFBhcnQpO1xuICAgIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0KTtcbiAgICBmdW5jdGlvbiBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQoc2lnbmlmaWNhbnRUb2tlblR5cGUpIHtcbiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFNpZ25pZmljYW50VG9rZW5UeXBlUGFydCk7XG4gICAgICAgIHZhciBfdGhpcztcbiAgICAgICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKTtcbiAgICAgICAgX3RoaXMuc2lnbmlmaWNhbnRUb2tlblR5cGUgPSBzaWduaWZpY2FudFRva2VuVHlwZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBfY3JlYXRlQ2xhc3MoU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0LCBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJwYXJzZVwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB2YXIgcGFyc2VkO1xuICAgICAgICAgICAgICAgIHZhciB0ZXJtaW5hbE5vZGUgPSBudWxsO1xuICAgICAgICAgICAgICAgIHZhciBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpLCBuZXh0U2lnbmlmaWNhbnRUb2tlbiA9IHN0YXRlLmdldE5leHRTaWduaWZpY2FudFRva2VuKCksIHNpZ25pZmljYW50VG9rZW4gPSBuZXh0U2lnbmlmaWNhbnRUb2tlbjsgLy8vXG4gICAgICAgICAgICAgICAgaWYgKHNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNpZ25pZmljYW50VG9rZW5UeXBlID0gc2lnbmlmaWNhbnRUb2tlbi5nZXRUeXBlKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaWduaWZpY2FudFRva2VuVHlwZSA9PT0gdGhpcy5zaWduaWZpY2FudFRva2VuVHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGVybWluYWxOb2RlID0gX3Rlcm1pbmFsMS5kZWZhdWx0LmZyb21TaWduaWZpY2FudFRva2VuKHNpZ25pZmljYW50VG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBhcnNlZCA9IHRlcm1pbmFsTm9kZSAhPT0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGVzLnB1c2godGVybWluYWxOb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWQgPSBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rlcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJhc1N0cmluZ1wiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFzU3RyaW5nKCkge1xuICAgICAgICAgICAgICAgIHZhciBzdHJpbmcgPSBcIltcIi5jb25jYXQodGhpcy5zaWduaWZpY2FudFRva2VuVHlwZSwgXCJdXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJjbG9uZVwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsb25lKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfZ2V0KF9nZXRQcm90b3R5cGVPZihTaWduaWZpY2FudFRva2VuVHlwZVBhcnQucHJvdG90eXBlKSwgXCJjbG9uZVwiLCB0aGlzKS5jYWxsKHRoaXMsIFNpZ25pZmljYW50VG9rZW5UeXBlUGFydCwgdGhpcy5zaWduaWZpY2FudFRva2VuVHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICBdKTtcbiAgICByZXR1cm4gU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0O1xufShfdGVybWluYWwuZGVmYXVsdCk7XG5leHBvcnRzLmRlZmF1bHQgPSBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQ7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUwzTnlZeTl3WVhKMEwzUmxjbTFwYm1Gc0wzTnBaMjVwWm1sallXNTBWRzlyWlc1VWVYQmxMbXB6SWwwc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklsd2lkWE5sSUhOMGNtbGpkRndpTzF4dVhHNXBiWEJ2Y25RZ1ZHVnliV2x1WVd4UVlYSjBJR1p5YjIwZ1hDSXVMaTh1TGk5d1lYSjBMM1JsY20xcGJtRnNYQ0k3WEc1cGJYQnZjblFnVkdWeWJXbHVZV3hPYjJSbElHWnliMjBnWENJdUxpOHVMaTl1YjJSbEwzUmxjbTFwYm1Gc1hDSTdYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJR05zWVhOeklGTnBaMjVwWm1sallXNTBWRzlyWlc1VWVYQmxVR0Z5ZENCbGVIUmxibVJ6SUZSbGNtMXBibUZzVUdGeWRDQjdYRzRnSUdOdmJuTjBjblZqZEc5eUtITnBaMjVwWm1sallXNTBWRzlyWlc1VWVYQmxLU0I3WEc0Z0lDQWdjM1Z3WlhJb0tUdGNiaUFnSUNCY2JpQWdJQ0IwYUdsekxuTnBaMjVwWm1sallXNTBWRzlyWlc1VWVYQmxJRDBnYzJsbmJtbG1hV05oYm5SVWIydGxibFI1Y0dVN1hHNGdJSDFjYmx4dUlDQndZWEp6WlNodWIyUmxjeXdnYzNSaGRHVXNJR05oYkd4aVlXTnJLU0I3WEc0Z0lDQWdiR1YwSUhCaGNuTmxaRHRjYmx4dUlDQWdJR3hsZENCMFpYSnRhVzVoYkU1dlpHVWdQU0J1ZFd4c08xeHVJQ0FnSUZ4dUlDQWdJR052Ym5OMElITmhkbVZrU1c1a1pYZ2dQU0J6ZEdGMFpTNW5aWFJUWVhabFpFbHVaR1Y0S0Nrc1hHNWNkRngwSUNBZ0lDQWdibVY0ZEZOcFoyNXBabWxqWVc1MFZHOXJaVzRnUFNCemRHRjBaUzVuWlhST1pYaDBVMmxuYm1sbWFXTmhiblJVYjJ0bGJpZ3BMRnh1WEhSY2RGeDBYSFJjZEhOcFoyNXBabWxqWVc1MFZHOXJaVzRnUFNCdVpYaDBVMmxuYm1sbWFXTmhiblJVYjJ0bGJqc2dMeTh2WEc1Y2JpQWdJQ0JwWmlBb2MybG5ibWxtYVdOaGJuUlViMnRsYmlBaFBUMGdiblZzYkNrZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnYzJsbmJtbG1hV05oYm5SVWIydGxibFI1Y0dVZ1BTQnphV2R1YVdacFkyRnVkRlJ2YTJWdUxtZGxkRlI1Y0dVb0tUdGNibHh1SUNBZ0lDQWdhV1lnS0hOcFoyNXBabWxqWVc1MFZHOXJaVzVVZVhCbElEMDlQU0IwYUdsekxuTnBaMjVwWm1sallXNTBWRzlyWlc1VWVYQmxLU0I3WEc0Z0lDQWdJQ0FnSUhSbGNtMXBibUZzVG05a1pTQTlJRlJsY20xcGJtRnNUbTlrWlM1bWNtOXRVMmxuYm1sbWFXTmhiblJVYjJ0bGJpaHphV2R1YVdacFkyRnVkRlJ2YTJWdUtUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNCd1lYSnpaV1FnUFNBb2RHVnliV2x1WVd4T2IyUmxJQ0U5UFNCdWRXeHNLVHRjYmx4dUlDQWdJR2xtSUNod1lYSnpaV1FwSUh0Y2JpQWdJQ0FnSUc1dlpHVnpMbkIxYzJnb2RHVnliV2x1WVd4T2IyUmxLVHRjYmx4dUlDQWdJQ0FnYVdZZ0tHTmhiR3hpWVdOcklDRTlQU0J1ZFd4c0tTQjdYRzRnSUNBZ0lDQWdJSEJoY25ObFpDQTlJR05oYkd4aVlXTnJLQ2s3WEc1Y2JpQWdJQ0FnSUNBZ2FXWWdLQ0Z3WVhKelpXUXBJSHRjYmlBZ0lDQWdJQ0FnSUNCdWIyUmxjeTV3YjNBb0tUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNibHh1SUNBZ0lHbG1JQ2doY0dGeWMyVmtLU0I3WEc0Z0lDQWdJQ0J6ZEdGMFpTNWlZV05yZEhKaFkyc29jMkYyWldSSmJtUmxlQ2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdjbVYwZFhKdUlIQmhjbk5sWkR0Y2JpQWdmVnh1WEc0Z0lHRnpVM1J5YVc1bktDa2dlMXh1SUNBZ0lHTnZibk4wSUhOMGNtbHVaeUE5SUdCYkpIdDBhR2x6TG5OcFoyNXBabWxqWVc1MFZHOXJaVzVVZVhCbGZWMWdPMXh1SUNBZ0lGeHVJQ0FnSUhKbGRIVnliaUJ6ZEhKcGJtYzdYRzRnSUgxY2JseHVJQ0JqYkc5dVpTZ3BJSHNnY21WMGRYSnVJSE4xY0dWeUxtTnNiMjVsS0ZOcFoyNXBabWxqWVc1MFZHOXJaVzVVZVhCbFVHRnlkQ3dnZEdocGN5NXphV2R1YVdacFkyRnVkRlJ2YTJWdVZIbHdaU2s3SUgxY2JuMWNiaUpkTENKdVlXMWxjeUk2V3lKVGFXZHVhV1pwWTJGdWRGUnZhMlZ1Vkhsd1pWQmhjblFpTENKemFXZHVhV1pwWTJGdWRGUnZhMlZ1Vkhsd1pTSXNJbkJoY25ObElpd2libTlrWlhNaUxDSnpkR0YwWlNJc0ltTmhiR3hpWVdOcklpd2ljR0Z5YzJWa0lpd2lkR1Z5YldsdVlXeE9iMlJsSWl3aWMyRjJaV1JKYm1SbGVDSXNJbWRsZEZOaGRtVmtTVzVrWlhnaUxDSnVaWGgwVTJsbmJtbG1hV05oYm5SVWIydGxiaUlzSW1kbGRFNWxlSFJUYVdkdWFXWnBZMkZ1ZEZSdmEyVnVJaXdpYzJsbmJtbG1hV05oYm5SVWIydGxiaUlzSW1kbGRGUjVjR1VpTENKVVpYSnRhVzVoYkU1dlpHVWlMQ0ptY205dFUybG5ibWxtYVdOaGJuUlViMnRsYmlJc0luQjFjMmdpTENKd2IzQWlMQ0ppWVdOcmRISmhZMnNpTENKaGMxTjBjbWx1WnlJc0luTjBjbWx1WnlJc0ltTnNiMjVsSWl3aVZHVnliV2x1WVd4UVlYSjBJbDBzSW0xaGNIQnBibWR6SWpvaVFVRkJRU3hEUVVGWkxGZEJRVUVzUTBGQlF6czdPMFU3ZDBJN1FVRkZXU3hIUVVGeFFpeERRVUZ5UWl4VFFVRnhRanRCUVVOeVFpeEhRVUZ4UWl4RFFVRnlRaXhWUVVGeFFqczdPenM3T3pzN096czdPenM3T3poRU8zTkRPelpFTzJsRk96czdPM2RGTzJkRk96czdPenN3UWpzN096czdPenM3T3p0VE96czdPenM3TzBzN096czdPenM3T3pzN096czdUVHQ1UkRzN096czdPenM3T3pzN096czdPM1ZDT3p0TE96czdPenQzUXpzN096czdPekpDT3pzN096czdPenR4UmpzN096czdPenM3T3pzN08yMUZPenRwUkRzN096czdTVUZGZWtKQkxIZENRVUYzUWl4cFFrRkJPVUlzVVVGQlVUdHhSRHM3WVVGQlJrRXNkMEpCUVhkQ0xFTkJReTlDUXl4dlFrRkJiMEk3ZFVRN08ybERRMDVzUXl4RFJFOVpPMk5CUlVoQkxHOUNRVUZ2UWl4SFFVRkhRU3h2UWtGQmIwSXNRMEZCUXpzN096czdXVUZIYmtSRExFZEJRVXNzUlVGQlRFRXNRMEZCU3p0dFFrRkJURUVzVVVGQlVTeERRVUZTUVN4TFFVRkxMRU5CUVVORExFdEJRVXNzUlVGQlJVTXNTMEZCU3l4RlFVRkZReXhSUVVGUkxFVkJRVVVzUTBGQlF6dG5Ra0ZETjBJc1IwRkJSeXhEUVVGRFF5eE5RVUZOTzJkQ1FVVldMRWRCUVVjc1EwRkJRME1zV1VGQldTeEhRVUZITEVsQlFVazdaMEpCUlhaQ0xFZEJRVXNzUTBGQlEwTXNWVUZCVlN4SFFVRkhTaXhMUVVGTExFTkJRVU5MTEdGQlFXRXNTVUZEYkVORExHOUNRVUZ2UWl4SFFVRkhUaXhMUVVGTExFTkJRVU5QTEhWQ1FVRjFRaXhKUVVOMlJFTXNaMEpCUVdkQ0xFZEJRVWRHTEc5Q1FVRnZRaXhGUVVGRkxFVkJRVWNzUVVGQlNDeERRVUZITzJkQ1FVVTNReXhGUVVGRkxFVkJRVVZGTEdkQ1FVRm5RaXhMUVVGTExFbEJRVWtzUlVGQlJTeERRVUZETzI5Q1FVTTVRaXhIUVVGTExFTkJRVU5ZTEc5Q1FVRnZRaXhIUVVGSFZ5eG5Ra0ZCWjBJc1EwRkJRME1zVDBGQlR6dHZRa0ZGY2tRc1JVRkJSU3hGUVVGRldpeHZRa0ZCYjBJc1MwRkJTeXhKUVVGSkxFTkJRVU5CTEc5Q1FVRnZRaXhGUVVGRkxFTkJRVU03ZDBKQlEzWkVUU3haUVVGWkxFZEJRVWRQTEZWQlFWa3NVMEZCUTBNc2IwSkJRVzlDTEVOQlFVTklMR2RDUVVGblFpeERRVUZETEVOQlFVTTdiMEpCUTNKRkxFTkJRVU03WjBKQlEwZ3NRMEZCUXp0blFrRkZSRTRzVFVGQlRTeEhRVUZKUXl4WlFVRlpMRXRCUVVzc1NVRkJTU3hCUVVGRExFTkJRVU03WjBKQlJXcERMRVZCUVVVc1JVRkJSVVFzVFVGQlRTeEZRVUZGTEVOQlFVTTdiMEpCUTFoSUxFdEJRVXNzUTBGQlEyRXNTVUZCU1N4RFFVRkRWQ3haUVVGWkxFTkJRVU1zUTBGQlF6dHZRa0ZGZWtJc1JVRkJSU3hGUVVGRlJpeFJRVUZSTEV0QlFVc3NTVUZCU1N4RlFVRkZMRU5CUVVNN2QwSkJRM1JDUXl4TlFVRk5MRWRCUVVkRUxGRkJRVkVzUlVGQlJTeERRVUZETzNkQ1FVVndRaXhGUVVGRkxFZEJRVWRETEUxQlFVMHNSVUZCUlN4RFFVRkRPelJDUVVOYVNDeExRVUZMTEVOQlFVTmpMRWRCUVVjc1JVRkJSU3hEUVVGRE8zZENRVU5rTEVOQlFVTTdiMEpCUTBnc1EwRkJRenRuUWtGRFNDeERRVUZETzJkQ1FVVkVMRVZCUVVVc1IwRkJSMWdzVFVGQlRTeEZRVUZGTEVOQlFVTTdiMEpCUTFwR0xFdEJRVXNzUTBGQlEyTXNVMEZCVXl4RFFVRkRWaXhWUVVGVkxFTkJRVU1zUTBGQlF6dG5Ra0ZET1VJc1EwRkJRenRuUWtGRlJDeE5RVUZOTEVOQlFVTkdMRTFCUVUwN1dVRkRaaXhEUVVGRE96czdXVUZGUkdFc1IwRkJVU3hGUVVGU1FTeERRVUZSTzIxQ1FVRlNRU3hSUVVGUkxFTkJRVkpCTEZGQlFWRXNSMEZCUnl4RFFVRkRPMmRDUVVOV0xFZEJRVXNzUTBGQlEwTXNUVUZCVFN4SFFVRkpMRU5CUVVNc1IwRkJORUlzVFVGQlF5eERRVUV6UWl4SlFVRkpMRU5CUVVOdVFpeHZRa0ZCYjBJc1JVRkJReXhEUVVGRE8yZENRVVU1UXl4TlFVRk5MRU5CUVVOdFFpeE5RVUZOTzFsQlEyWXNRMEZCUXpzN08xbEJSVVJETEVkQlFVc3NSVUZCVEVFc1EwRkJTenR0UWtGQlRFRXNVVUZCVVN4RFFVRlNRU3hMUVVGTExFZEJRVWNzUTBGQlF6dG5Ra0ZCUXl4TlFVRk5MSE5DUVc1RVIzSkNMSGRDUVVGM1FpeGhRVzFFY0VKeFFpeERRVUZMTEZGQlFWZ3NTVUZCU3l4aFFVRlBja0lzZDBKQlFYZENMRVZCUVVVc1NVRkJTU3hEUVVGRFF5eHZRa0ZCYjBJN1dVRkJSeXhEUVVGRE96dE5PenRGUVc1RWFFTnhRaXhUUVVGWk8ydENRVUUzUTNSQ0xIZENRVUYzUWl4QkluMD0iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHR5cGVzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFNpZ25pZmljYW50VG9rZW5UeXBlUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC9zaWduaWZpY2FudFRva2VuVHlwZVwiO1xuXG5jb25zdCB7IG5hbWVUeXBlIH0gPSB0eXBlcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmFtZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZVNpZ25pZmljYW50VG9rZW5UeXBlID0gbmFtZVR5cGUsICAvLy9cbiAgICAgICAgICBuYW1lU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0ID0gbmV3IFNpZ25pZmljYW50VG9rZW5UeXBlUGFydChuYW1lU2lnbmlmaWNhbnRUb2tlblR5cGUpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgbmFtZVNpZ25pZmljYW50VG9rZW5UeXBlUGFydFxuICAgICAgICAgIF07XG5cbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgTmFtZVJ1bGVOYW1lID0gXCJuYW1lXCI7XG5leHBvcnQgY29uc3QgUGFydFJ1bGVOYW1lID0gXCJwYXJ0XCI7XG5leHBvcnQgY29uc3QgUnVsZVJ1bGVOYW1lID0gXCJydWxlXCI7XG5leHBvcnQgY29uc3QgRXJyb3JSdWxlTmFtZSA9IFwiZXJyb3JcIjtcbmV4cG9ydCBjb25zdCBSdWxlTmFtZVJ1bGVOYW1lID0gXCJydWxlTmFtZVwiO1xuZXhwb3J0IGNvbnN0IERvY3VtZW50UnVsZU5hbWUgPSBcImRvY3VtZW50XCI7XG5leHBvcnQgY29uc3QgV2lsZGNhcmRSdWxlTmFtZSA9IFwid2lsZGNhcmRcIjtcbmV4cG9ydCBjb25zdCBFbmRPZkxpbmVSdWxlTmFtZSA9IFwiZW5kT2ZMaW5lXCI7XG5leHBvcnQgY29uc3QgRGVmaW5pdGlvblJ1bGVOYW1lID0gXCJkZWZpbml0aW9uXCI7XG5leHBvcnQgY29uc3QgUXVhbnRpZmllclJ1bGVOYW1lID0gXCJxdWFudGlmaWVyXCI7XG5leHBvcnQgY29uc3QgRGVmaW5pdGlvbnNSdWxlTmFtZSA9IFwiZGVmaW5pdGlvbnNcIjtcbmV4cG9ydCBjb25zdCBUZXJtaW5hbFBhcnRSdWxlTmFtZSA9IFwidGVybWluYWxQYXJ0XCI7XG5leHBvcnQgY29uc3QgQ2hvaWNlT2ZQYXJ0c1J1bGVOYW1lID0gXCJjaG9pY2VPZlBhcnRzXCI7XG5leHBvcnQgY29uc3QgVGVybWluYWxTeW1ib2xSdWxlTmFtZSA9IFwidGVybWluYWxTeW1ib2xcIjtcbmV4cG9ydCBjb25zdCBOb25UZXJtaW5hbFBhcnRSdWxlTmFtZSA9IFwibm9uVGVybWluYWxQYXJ0XCI7XG5leHBvcnQgY29uc3QgU2VxdWVuY2VPZlBhcnRzUnVsZU5hbWUgPSBcInNlcXVlbmNlT2ZQYXJ0c1wiO1xuZXhwb3J0IGNvbnN0IE5vV2hpdGVzcGFjZVBhcnRSdWxlTmFtZSA9IFwibm9XaGl0ZXNwYWNlUGFydFwiO1xuZXhwb3J0IGNvbnN0IExvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUgPSBcImxvb2tBaGVhZE1vZGlmaWVyXCI7XG5leHBvcnQgY29uc3QgUmVndWxhckV4cHJlc3Npb25SdWxlTmFtZSA9IFwicmVndWxhckV4cHJlc3Npb25cIjtcbmV4cG9ydCBjb25zdCBPcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSA9IFwib3B0aW9uYWxRdWFudGlmaWVyXCI7XG5leHBvcnQgY29uc3QgT25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lID0gXCJvbmVPck1vcmVRdWFudGlmaWVyXCI7XG5leHBvcnQgY29uc3QgWmVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSA9IFwiemVyb09yTW9yZVF1YW50aWZpZXJcIjtcbmV4cG9ydCBjb25zdCBTaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lID0gXCJzaWduaWZpY2FudFRva2VuVHlwZVwiO1xuXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgTmFtZUJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL25hbWVcIjtcbmltcG9ydCBOYW1lRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9uYW1lXCI7XG5cbmltcG9ydCB7IE5hbWVSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmFtZVJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZURlZmluaXRpb24gPSBuZXcgTmFtZURlZmluaXRpb24oKSxcbiAgICAgICAgICBuYW1lID0gTmFtZVJ1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgbmFtZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBOYW1lQk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcbiAgICBmb3IodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKylhcnIyW2ldID0gYXJyW2ldO1xuICAgIHJldHVybiBhcnIyO1xufVxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShhcnIpO1xufVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkge1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7XG4gICAgdHJ5IHtcbiAgICAgICAgRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChEYXRlLCBbXSwgZnVuY3Rpb24oKSB7fSkpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5mdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgICBpZiAoaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkpIHtcbiAgICAgICAgX2NvbnN0cnVjdCA9IFJlZmxlY3QuY29uc3RydWN0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIF9jb25zdHJ1Y3QgPSBmdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgICAgICAgICAgIHZhciBhID0gW1xuICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBhLnB1c2guYXBwbHkoYSwgYXJncyk7XG4gICAgICAgICAgICB2YXIgQ29uc3RydWN0b3IgPSBGdW5jdGlvbi5iaW5kLmFwcGx5KFBhcmVudCwgYSk7XG4gICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQ29uc3RydWN0b3IoKTtcbiAgICAgICAgICAgIGlmIChDbGFzcykgX3NldFByb3RvdHlwZU9mKGluc3RhbmNlLCBDbGFzcy5wcm90b3R5cGUpO1xuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gX2NvbnN0cnVjdC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xufVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG59XG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBpdGVyW1N5bWJvbC5pdGVyYXRvcl0gIT0gbnVsbCB8fCBpdGVyW1wiQEBpdGVyYXRvclwiXSAhPSBudWxsKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTtcbn1cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICAgICAgby5fX3Byb3RvX18gPSBwO1xuICAgICAgICByZXR1cm4gbztcbiAgICB9O1xuICAgIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59XG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7XG4gICAgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTtcbn1cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHtcbiAgICBpZiAoIW8pIHJldHVybjtcbiAgICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICAgIHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTtcbiAgICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG4pO1xuICAgIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbn1cbnZhciBOb25UZXJtaW5hbFBhcnQgPSAvKiNfX1BVUkVfXyovIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIE5vblRlcm1pbmFsUGFydCh0eXBlKSB7XG4gICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBOb25UZXJtaW5hbFBhcnQpO1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIH1cbiAgICBfY3JlYXRlQ2xhc3MoTm9uVGVybWluYWxQYXJ0LCBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJnZXRUeXBlXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VHlwZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50eXBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiaXNOb25UZXJtaW5hbFBhcnRcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBpc05vblRlcm1pbmFsUGFydCgpIHtcbiAgICAgICAgICAgICAgICB2YXIgbm9uVGVybWluYWxQYXJ0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9uVGVybWluYWxQYXJ0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiaXNUZXJtaW5hbFBhcnRcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBpc1Rlcm1pbmFsUGFydCgpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGVybWluYWxQYXJ0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRlcm1pbmFsUGFydDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImlzUnVsZU5hbWVQYXJ0XCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gaXNSdWxlTmFtZVBhcnQoKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJ1bGVOYW1lUGFydCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybiBydWxlTmFtZVBhcnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJjbG9uZVwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsb25lKFBhcnQpIHtcbiAgICAgICAgICAgICAgICBmb3IodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByZW1haW5pbmdBcmd1bWVudHMgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKyl7XG4gICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZ0FyZ3VtZW50c1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBfY29uc3RydWN0KFBhcnQsIF90b0NvbnN1bWFibGVBcnJheShyZW1haW5pbmdBcmd1bWVudHMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIF0pO1xuICAgIHJldHVybiBOb25UZXJtaW5hbFBhcnQ7XG59KCk7XG5leHBvcnRzLmRlZmF1bHQgPSBOb25UZXJtaW5hbFBhcnQ7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OXdZWEowTDI1dmJsUmxjbTFwYm1Gc0xtcHpJbDBzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWx3aWRYTmxJSE4wY21samRGd2lPMXh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0JqYkdGemN5Qk9iMjVVWlhKdGFXNWhiRkJoY25RZ2UxeHVJQ0JqYjI1emRISjFZM1J2Y2loMGVYQmxLU0I3WEc0Z0lDQWdkR2hwY3k1MGVYQmxJRDBnZEhsd1pUc2dJRnh1SUNCOVhHNGdJRnh1SUNCblpYUlVlWEJsS0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxuUjVjR1U3WEc0Z0lIMWNibHh1SUNCcGMwNXZibFJsY20xcGJtRnNVR0Z5ZENncElIdGNiaUFnSUNCamIyNXpkQ0J1YjI1VVpYSnRhVzVoYkZCaGNuUWdQU0IwY25WbE8xeHVYRzRnSUNBZ2NtVjBkWEp1SUc1dmJsUmxjbTFwYm1Gc1VHRnlkRHRjYmlBZ2ZWeHVYRzRnSUdselZHVnliV2x1WVd4UVlYSjBLQ2tnZTF4dUlDQWdJR052Ym5OMElIUmxjbTFwYm1Gc1VHRnlkQ0E5SUdaaGJITmxPMXh1SUNBZ0lGeHVJQ0FnSUhKbGRIVnliaUIwWlhKdGFXNWhiRkJoY25RN1hHNGdJSDFjYmx4dUlDQnBjMUoxYkdWT1lXMWxVR0Z5ZENncElIdGNiaUFnSUNCamIyNXpkQ0J5ZFd4bFRtRnRaVkJoY25RZ1BTQm1ZV3h6WlR0Y2JseHVJQ0FnSUhKbGRIVnliaUJ5ZFd4bFRtRnRaVkJoY25RN1hHNGdJSDFjYmx4dUlDQmpiRzl1WlNoUVlYSjBMQ0F1TGk1eVpXMWhhVzVwYm1kQmNtZDFiV1Z1ZEhNcElIc2djbVYwZFhKdUlHNWxkeUJRWVhKMEtDNHVMbkpsYldGcGJtbHVaMEZ5WjNWdFpXNTBjeWs3SUgxY2JuMWNiaUpkTENKdVlXMWxjeUk2V3lKT2IyNVVaWEp0YVc1aGJGQmhjblFpTENKMGVYQmxJaXdpWjJWMFZIbHdaU0lzSW1selRtOXVWR1Z5YldsdVlXeFFZWEowSWl3aWJtOXVWR1Z5YldsdVlXeFFZWEowSWl3aWFYTlVaWEp0YVc1aGJGQmhjblFpTENKMFpYSnRhVzVoYkZCaGNuUWlMQ0pwYzFKMWJHVk9ZVzFsVUdGeWRDSXNJbkoxYkdWT1lXMWxVR0Z5ZENJc0ltTnNiMjVsSWl3aVVHRnlkQ0lzSW5KbGJXRnBibWx1WjBGeVozVnRaVzUwY3lKZExDSnRZWEJ3YVc1bmN5STZJa0ZCUVVFc1EwRkJXU3hYUVVGQkxFTkJRVU03T3p0Rk8zZENPenQ1UkR0MVJUczdPenM3T3pzN096czdPenM3T3p0blJqczdPenM3T3pzN2MwTTdPenM3T3p0cFF6czdPMmxGT3p0VE96czdPenM3T3poRU8zTkRPelpFTzJsRk96czdPM2RGTzJkRk96czdPenM3T3pzN096dDFRanM3U3pzN096czdPenM3T3pzclJEczdPenRKUVVWUlFTeGxRVUZsTEdsQ1FVRnlRaXhSUVVGUk8yRkJRVVpCTEdWQlFXVXNRMEZEZEVKRExFbEJRVWs3T0VNN1VVRkRaQ3hKUVVGSkxFTkJRVU5CTEVsQlFVa3NSMEZCUjBFc1NVRkJTU3hEUVVGRE96czdPMWxCUjI1Q1F5eEhRVUZQTEVWQlFWQkJMRU5CUVU4N2JVSkJRVkJCTEZGQlFWRXNRMEZCVWtFc1QwRkJUeXhIUVVGSExFTkJRVU03WjBKQlExUXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJRMFFzU1VGQlNUdFpRVU5zUWl4RFFVRkRPenM3V1VGRlJFVXNSMEZCYVVJc1JVRkJha0pCTEVOQlFXbENPMjFDUVVGcVFrRXNVVUZCVVN4RFFVRlNRU3hwUWtGQmFVSXNSMEZCUnl4RFFVRkRPMmRDUVVOdVFpeEhRVUZMTEVOQlFVTkRMR1ZCUVdVc1IwRkJSeXhKUVVGSk8yZENRVVUxUWl4TlFVRk5MRU5CUVVOQkxHVkJRV1U3V1VGRGVFSXNRMEZCUXpzN08xbEJSVVJETEVkQlFXTXNSVUZCWkVFc1EwRkJZenR0UWtGQlpFRXNVVUZCVVN4RFFVRlNRU3hqUVVGakxFZEJRVWNzUTBGQlF6dG5Ra0ZEYUVJc1IwRkJTeXhEUVVGRFF5eFpRVUZaTEVkQlFVY3NTMEZCU3p0blFrRkZNVUlzVFVGQlRTeERRVUZEUVN4WlFVRlpPMWxCUTNKQ0xFTkJRVU03T3p0WlFVVkVReXhIUVVGakxFVkJRV1JCTEVOQlFXTTdiVUpCUVdSQkxGRkJRVkVzUTBGQlVrRXNZMEZCWXl4SFFVRkhMRU5CUVVNN1owSkJRMmhDTEVkQlFVc3NRMEZCUTBNc1dVRkJXU3hIUVVGSExFdEJRVXM3WjBKQlJURkNMRTFCUVUwc1EwRkJRMEVzV1VGQldUdFpRVU55UWl4RFFVRkRPenM3V1VGRlJFTXNSMEZCU3l4RlFVRk1RU3hEUVVGTE8yMUNRVUZNUVN4UlFVRlJMRU5CUVZKQkxFdEJRVXNzUTBGQlEwTXNTVUZCU1N4RlFVRjVRaXhEUVVGRE8yZENRVUY0UWl4SFFVRkhReXhEUVVGSUxFZEJRWEZDTEVOQlFYSkNMRWxCUVhGQ0xFZEJRWEpDTEZOQlFYRkNMRU5CUVhKQ0xFMUJRWEZDTEVWQlFXeENRU3hyUWtGQmEwSXNSMEZCY2tJc1IwRkJjVUlzVDBGQmNrSXNTVUZCY1VJc1IwRkJja0lzUTBGQmNVSXNSMEZCY2tJc1NVRkJjVUlzUjBGQmNrSXNRMEZCY1VJc1QwRkJja0lzU1VGQmNVSXNSMEZCY2tJc1EwRkJjVUlzUlVGQmNrSXNTVUZCY1VJc1IwRkJja0lzU1VGQmNVSXNSVUZCY2tJc1NVRkJjVUlzUjBGQmNrSXNRMEZCUXp0dlFrRkJSVUVzYTBKQlFXdENMRU5CUVhKQ0xFbEJRWEZDTEVkQlFYSkNMRU5CUVhGQ0xFbEJRWEpDTEZOQlFYRkNMRU5CUVhKQ0xFbEJRWEZDTEVORE4wSnVReXhEUkRaQ2JVTTdaMEpCUVVRc1EwRkJRenRuUWtGQlNTeE5RVUZOTEZsQlFVdEVMRWxCUVVrc2NVSkJRVWxETEd0Q1FVRnJRanRaUVVGSExFTkJRVU03TzAwN096dHJRa0V6UWpORVdDeGxRVUZsTEVFaWZRPT0iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBSdWxlTmFtZVBhcnRUeXBlID0gXCJydWxlTmFtZVBhcnRcIjtcbmV4cG9ydCBjb25zdCBPcHRpb25hbFBhcnRQYXJ0VHlwZSA9IFwib3B0aW9uYWxQYXJ0XCI7XG5leHBvcnQgY29uc3QgQ2hvaWNlT2ZQYXJ0c1BhcnRUeXBlID0gXCJjaG9pY2VPZlBhcnRzXCI7XG5leHBvcnQgY29uc3QgT25lT3JNb3JlUGFydHNQYXJ0VHlwZSA9IFwib25lT3JNb3JlUGFydHNcIjtcbmV4cG9ydCBjb25zdCBaZXJvT3JNb3JlUGFydHNQYXJ0VHlwZSA9IFwiemVyb09yTW9yZVBhcnRzXCI7XG5leHBvcnQgY29uc3QgU2VxdWVuY2VPZlBhcnRzUGFydFR5cGUgPSBcInNlcXVlbmNlT2ZQYXJ0c1wiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFJ1bGVOYW1lUGFydFR5cGUsXG4gIE9wdGlvbmFsUGFydFBhcnRUeXBlLFxuICBDaG9pY2VPZlBhcnRzUGFydFR5cGUsXG4gIE9uZU9yTW9yZVBhcnRzUGFydFR5cGUsXG4gIFplcm9Pck1vcmVQYXJ0c1BhcnRUeXBlLFxuICBTZXF1ZW5jZU9mUGFydHNQYXJ0VHlwZVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfb2NjYW1MZXhlcnMgPSByZXF1aXJlKFwib2NjYW0tbGV4ZXJzXCIpO1xudmFyIF9ub25UZXJtaW5hbCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uLy4uL3BhcnQvbm9uVGVybWluYWxcIikpO1xudmFyIF9wYXJ0VHlwZXMgPSByZXF1aXJlKFwiLi4vLi4vcGFydFR5cGVzXCIpO1xuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gICAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gICAgfVxuICAgIHJldHVybiBzZWxmO1xufVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG59XG5mdW5jdGlvbiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ICE9PSBcInVuZGVmaW5lZFwiICYmIFJlZmxlY3QuZ2V0KSB7XG4gICAgICAgIF9nZXQgPSBSZWZsZWN0LmdldDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBfZ2V0ID0gZnVuY3Rpb24gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlcikge1xuICAgICAgICAgICAgdmFyIGJhc2UgPSBfc3VwZXJQcm9wQmFzZSh0YXJnZXQsIHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmICghYmFzZSkgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGJhc2UsIHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmIChkZXNjLmdldCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZXNjLmdldC5jYWxsKHJlY2VpdmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkZXNjLnZhbHVlO1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlciB8fCB0YXJnZXQpO1xufVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgICAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICAgIH07XG4gICAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn1cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICAgIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICAgIH1cbiAgICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHtcbiAgICAgICAgZGVmYXVsdDogb2JqXG4gICAgfTtcbn1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgICAgICByZXR1cm4gY2FsbDtcbiAgICB9XG4gICAgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgICAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgICAgIHJldHVybiBvO1xuICAgIH07XG4gICAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cbmZ1bmN0aW9uIF9zdXBlclByb3BCYXNlKG9iamVjdCwgcHJvcGVydHkpIHtcbiAgICB3aGlsZSghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpKXtcbiAgICAgICAgb2JqZWN0ID0gX2dldFByb3RvdHlwZU9mKG9iamVjdCk7XG4gICAgICAgIGlmIChvYmplY3QgPT09IG51bGwpIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xufVxudmFyIF90eXBlb2YgPSBmdW5jdGlvbihvYmopIHtcbiAgICBcIkBzd2MvaGVscGVycyAtIHR5cGVvZlwiO1xuICAgIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xufTtcbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgICBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uKCkge30pKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHtcbiAgICB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7XG4gICAgICAgIHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0O1xuICAgICAgICBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkge1xuICAgICAgICAgICAgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgIHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpO1xuICAgIH07XG59XG52YXIgcXVlc3Rpb25NYXJrID0gX29jY2FtTGV4ZXJzLnNwZWNpYWxTeW1ib2xzLnF1ZXN0aW9uTWFyaztcbnZhciBPcHRpb25hbFBhcnRQYXJ0ID0gLyojX19QVVJFX18qLyBmdW5jdGlvbihOb25UZXJtaW5hbFBhcnQpIHtcbiAgICBfaW5oZXJpdHMoT3B0aW9uYWxQYXJ0UGFydCwgTm9uVGVybWluYWxQYXJ0KTtcbiAgICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKE9wdGlvbmFsUGFydFBhcnQpO1xuICAgIGZ1bmN0aW9uIE9wdGlvbmFsUGFydFBhcnQocGFydCkge1xuICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgT3B0aW9uYWxQYXJ0UGFydCk7XG4gICAgICAgIHZhciBfdGhpcztcbiAgICAgICAgdmFyIHR5cGUgPSBfcGFydFR5cGVzLk9wdGlvbmFsUGFydFBhcnRUeXBlOyAvLy9cbiAgICAgICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCB0eXBlKTtcbiAgICAgICAgX3RoaXMucGFydCA9IHBhcnQ7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgX2NyZWF0ZUNsYXNzKE9wdGlvbmFsUGFydFBhcnQsIFtcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImdldFBhcnRcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRQYXJ0KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJwYXJzZVwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB2YXIgcGFyc2VkO1xuICAgICAgICAgICAgICAgIHZhciBwYXJ0ID0gdGhpcy5nZXRQYXJ0KCk7XG4gICAgICAgICAgICAgICAgcGFyc2VkID0gcGFyc2VQYXJ0KHBhcnQsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJhc1N0cmluZ1wiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFzU3RyaW5nKCkge1xuICAgICAgICAgICAgICAgIHZhciBvcGVyYXRvclN0cmluZyA9IHF1ZXN0aW9uTWFyaywgcGFydFN0cmluZyA9IHRoaXMucGFydC5hc1N0cmluZygpLCBzdHJpbmcgPSBcIlwiLmNvbmNhdChwYXJ0U3RyaW5nKS5jb25jYXQob3BlcmF0b3JTdHJpbmcpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJjbG9uZVwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsb25lKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfZ2V0KF9nZXRQcm90b3R5cGVPZihPcHRpb25hbFBhcnRQYXJ0LnByb3RvdHlwZSksIFwiY2xvbmVcIiwgdGhpcykuY2FsbCh0aGlzLCBPcHRpb25hbFBhcnRQYXJ0LCB0aGlzLnBhcnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgXSk7XG4gICAgcmV0dXJuIE9wdGlvbmFsUGFydFBhcnQ7XG59KF9ub25UZXJtaW5hbC5kZWZhdWx0KTtcbmV4cG9ydHMuZGVmYXVsdCA9IE9wdGlvbmFsUGFydFBhcnQ7XG5mdW5jdGlvbiBwYXJzZVBhcnQocGFydCwgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICAgIHZhciBwYXJzZWQ7XG4gICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgIHBhcnNlZCA9IGNhbGxiYWNrKCk7XG4gICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgICBwYXJzZWQgPSBwYXJ0LnBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcGFydC5wYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcbiAgICAgICAgcGFyc2VkID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1TDNOeVl5OXdZWEowTDI1dmJsUmxjbTFwYm1Gc0wyOXdkR2x2Ym1Gc1VHRnlkQzVxY3lKZExDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SmNJblZ6WlNCemRISnBZM1JjSWp0Y2JseHVhVzF3YjNKMElIc2djM0JsWTJsaGJGTjViV0p2YkhNZ2ZTQm1jbTl0SUZ3aWIyTmpZVzB0YkdWNFpYSnpYQ0k3WEc1Y2JtbHRjRzl5ZENCT2IyNVVaWEp0YVc1aGJGQmhjblFnWm5KdmJTQmNJaTR1THk0dUwzQmhjblF2Ym05dVZHVnliV2x1WVd4Y0lqdGNibHh1YVcxd2IzSjBJSHNnVDNCMGFXOXVZV3hRWVhKMFVHRnlkRlI1Y0dVZ2ZTQm1jbTl0SUZ3aUxpNHZMaTR2Y0dGeWRGUjVjR1Z6WENJN1hHNWNibU52Ym5OMElIc2djWFZsYzNScGIyNU5ZWEpySUgwZ1BTQnpjR1ZqYVdGc1UzbHRZbTlzY3p0Y2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ1kyeGhjM01nVDNCMGFXOXVZV3hRWVhKMFVHRnlkQ0JsZUhSbGJtUnpJRTV2YmxSbGNtMXBibUZzVUdGeWRDQjdYRzRnSUdOdmJuTjBjblZqZEc5eUtIQmhjblFwSUh0Y2JpQWdJQ0JqYjI1emRDQjBlWEJsSUQwZ1QzQjBhVzl1WVd4UVlYSjBVR0Z5ZEZSNWNHVTdJQzh2TDF4dVhHNGdJQ0FnYzNWd1pYSW9kSGx3WlNrN1hHNWNiaUFnSUNCMGFHbHpMbkJoY25RZ1BTQndZWEowTzF4dUlDQjlYRzVjYmlBZ1oyVjBVR0Z5ZENncElIdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NXdZWEowTzF4dUlDQjlYRzVjYmlBZ2NHRnljMlVvYm05a1pYTXNJSE4wWVhSbExDQmpZV3hzWW1GamF5a2dlMXh1SUNBZ0lHeGxkQ0J3WVhKelpXUTdYRzVjYmlBZ0lDQmpiMjV6ZENCd1lYSjBJRDBnZEdocGN5NW5aWFJRWVhKMEtDazdYRzVjYmlBZ0lDQndZWEp6WldRZ1BTQndZWEp6WlZCaGNuUW9jR0Z5ZEN3Z2JtOWtaWE1zSUhOMFlYUmxMQ0JqWVd4c1ltRmpheWs3WEc1Y2JpQWdJQ0J5WlhSMWNtNGdjR0Z5YzJWa08xeHVJQ0I5WEc1Y2JpQWdZWE5UZEhKcGJtY29LU0I3WEc0Z0lDQWdZMjl1YzNRZ2IzQmxjbUYwYjNKVGRISnBibWNnUFNCeGRXVnpkR2x2YmsxaGNtc3NJQ0F2THk5Y2JpQWdJQ0FnSUNBZ0lDQndZWEowVTNSeWFXNW5JRDBnZEdocGN5NXdZWEowTG1GelUzUnlhVzVuS0Nrc1hHNGdJQ0FnSUNBZ0lDQWdjM1J5YVc1bklEMGdZQ1I3Y0dGeWRGTjBjbWx1WjMwa2UyOXdaWEpoZEc5eVUzUnlhVzVuZldBN1hHNWNiaUFnSUNCeVpYUjFjbTRnYzNSeWFXNW5PMXh1SUNCOVhHNWNiaUFnWTJ4dmJtVW9LU0I3SUhKbGRIVnliaUJ6ZFhCbGNpNWpiRzl1WlNoUGNIUnBiMjVoYkZCaGNuUlFZWEowTENCMGFHbHpMbkJoY25RcE95QjlYRzU5WEc1Y2JtWjFibU4wYVc5dUlIQmhjbk5sVUdGeWRDaHdZWEowTENCdWIyUmxjeXdnYzNSaGRHVXNJR05oYkd4aVlXTnJLU0I3WEc0Z0lHeGxkQ0J3WVhKelpXUTdYRzVjYmlBZ2FXWWdLR05oYkd4aVlXTnJJQ0U5UFNCdWRXeHNLU0I3WEc0Z0lDQWdjR0Z5YzJWa0lEMGdZMkZzYkdKaFkyc29LVHRjYmx4dUlDQWdJR2xtSUNnaGNHRnljMlZrS1NCN1hHNGdJQ0FnSUNCd1lYSnpaV1FnUFNCd1lYSjBMbkJoY25ObEtHNXZaR1Z6TENCemRHRjBaU3dnWTJGc2JHSmhZMnNwTzF4dUlDQWdJSDFjYmlBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0J3WVhKMExuQmhjbk5sS0c1dlpHVnpMQ0J6ZEdGMFpTd2dZMkZzYkdKaFkyc3BPMXh1WEc0Z0lDQWdjR0Z5YzJWa0lEMGdkSEoxWlR0Y2JpQWdmVnh1WEc0Z0lISmxkSFZ5YmlCd1lYSnpaV1E3WEc1OVhHNGlYU3dpYm1GdFpYTWlPbHNpY1hWbGMzUnBiMjVOWVhKcklpd2ljM0JsWTJsaGJGTjViV0p2YkhNaUxDSlBjSFJwYjI1aGJGQmhjblJRWVhKMElpd2ljR0Z5ZENJc0luUjVjR1VpTENKUGNIUnBiMjVoYkZCaGNuUlFZWEowVkhsd1pTSXNJbWRsZEZCaGNuUWlMQ0p3WVhKelpTSXNJbTV2WkdWeklpd2ljM1JoZEdVaUxDSmpZV3hzWW1GamF5SXNJbkJoY25ObFpDSXNJbkJoY25ObFVHRnlkQ0lzSW1GelUzUnlhVzVuSWl3aWIzQmxjbUYwYjNKVGRISnBibWNpTENKd1lYSjBVM1J5YVc1bklpd2ljM1J5YVc1bklpd2lZMnh2Ym1VaUxDSk9iMjVVWlhKdGFXNWhiRkJoY25RaVhTd2liV0Z3Y0dsdVozTWlPaUpCUVVGQkxFTkJRVmtzVjBGQlFTeERRVUZET3pzN1JUdDNRanRCUVVWclFpeEhRVUZqTEVOQlFXUXNXVUZCWXp0QlFVVnFRaXhIUVVGM1FpeERRVUY0UWl4WlFVRjNRanRCUVVWbUxFZEJRV2xDTEVOQlFXcENMRlZCUVdsQ096czdPenM3T3pzN096czdPenM3T0VRN2MwTTdOa1E3YVVVN096czdkMFU3WjBVN096czdPekJDT3pzN096czdPenM3TzFNN096czdPenM3U3pzN096czdPenM3T3pzN096dE5PM2xFT3pzN096czdPenM3T3pzN096czdkVUk3TzBzN096czdPM2RET3pzN096czdNa0k3T3pzN096czdPM0ZHT3pzN096czdPenM3T3pzN2JVVTdPMmxFT3pzN096dEJRVVYwUkN4SFFVRkxMRU5CUVVkQkxGbEJRVmtzUjBGQlMwTXNXVUZCWXl4blFrRkJMMEpFTEZsQlFWazdTVUZGUTBVc1owSkJRV2RDTEdsQ1FVRjBRaXhSUVVGUk8yZEVPenRoUVVGR1FTeG5Ra0ZCWjBJc1EwRkRka0pETEVsQlFVazdLME03TzFGQlEyUXNSMEZCU3l4RFFVRkRReXhKUVVGSkxFZEJRVWRETEZWQlFXOUNMSFZDUVVGRkxFVkJRVWNzUVVGQlNDeERRVUZITzJ0RFFVVm9RMFFzU1VGQlNTeERRMlJrTEVORVkyZENPMk5CUlZCRUxFbEJRVWtzUjBGQlIwRXNTVUZCU1N4RFFVRkRPenM3T3p0WlFVZHVRa2NzUjBGQlR5eEZRVUZRUVN4RFFVRlBPMjFDUVVGUVFTeFJRVUZSTEVOQlFWSkJMRTlCUVU4c1IwRkJSeXhEUVVGRE8yZENRVU5VTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVOSUxFbEJRVWs3V1VGRGJFSXNRMEZCUXpzN08xbEJSVVJKTEVkQlFVc3NSVUZCVEVFc1EwRkJTenR0UWtGQlRFRXNVVUZCVVN4RFFVRlNRU3hMUVVGTExFTkJRVU5ETEV0QlFVc3NSVUZCUlVNc1MwRkJTeXhGUVVGRlF5eFJRVUZSTEVWQlFVVXNRMEZCUXp0blFrRkROMElzUjBGQlJ5eERRVUZEUXl4TlFVRk5PMmRDUVVWV0xFZEJRVXNzUTBGQlExSXNTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJRMGNzVDBGQlR6dG5Ra0ZGZWtKTExFMUJRVTBzUjBGQlIwTXNVMEZCVXl4RFFVRkRWQ3hKUVVGSkxFVkJRVVZMTEV0QlFVc3NSVUZCUlVNc1MwRkJTeXhGUVVGRlF5eFJRVUZSTEVOQlFVTXNRMEZCUXp0blFrRkZha1FzVFVGQlRTeERRVUZEUXl4TlFVRk5PMWxCUTJZc1EwRkJRenM3TzFsQlJVUkZMRWRCUVZFc1JVRkJVa0VzUTBGQlVUdHRRa0ZCVWtFc1VVRkJVU3hEUVVGU1FTeFJRVUZSTEVkQlFVY3NRMEZCUXp0blFrRkRWaXhIUVVGTExFTkJRVU5ETEdOQlFXTXNSMEZCUjJRc1dVRkJXU3hGUVVNM1FtVXNWVUZCVlN4SFFVRkhMRWxCUVVrc1EwRkJRMW9zU1VGQlNTeERRVUZEVlN4UlFVRlJMRWxCUXk5Q1J5eE5RVUZOTEVkQlFVa3NRMEZCUVN4RlFVRmxSaXhOUVVGakxFTkJRVE5DUXl4VlFVRlZMRVZCUVd0Q0xFMUJRVUVzUTBGQlprUXNZMEZCWXp0blFrRkZOME1zVFVGQlRTeERRVUZEUlN4TlFVRk5PMWxCUTJZc1EwRkJRenM3TzFsQlJVUkRMRWRCUVVzc1JVRkJURUVzUTBGQlN6dHRRa0ZCVEVFc1VVRkJVU3hEUVVGU1FTeExRVUZMTEVkQlFVY3NRMEZCUXp0blFrRkJReXhOUVVGTkxITkNRUzlDUjJZc1owSkJRV2RDTEdGQkswSmFaU3hEUVVGTExGRkJRVmdzU1VGQlN5eGhRVUZQWml4blFrRkJaMElzUlVGQlJTeEpRVUZKTEVOQlFVTkRMRWxCUVVrN1dVRkJSeXhEUVVGRE96dE5PenRGUVM5Q2FFSmxMRmxCUVdVN2EwSkJRWGhEYUVJc1owSkJRV2RDTEVFN1UwRnJRelZDVlN4VFFVRlRMRU5CUVVOVUxFbEJRVWtzUlVGQlJVc3NTMEZCU3l4RlFVRkZReXhMUVVGTExFVkJRVVZETEZGQlFWRXNSVUZCUlN4RFFVRkRPMGxCUTJoRUxFZEJRVWNzUTBGQlEwTXNUVUZCVFR0SlFVVldMRVZCUVVVc1JVRkJSVVFzVVVGQlVTeExRVUZMTEVsQlFVa3NSVUZCUlN4RFFVRkRPMUZCUTNSQ1F5eE5RVUZOTEVkQlFVZEVMRkZCUVZFc1JVRkJSU3hEUVVGRE8xRkJSWEJDTEVWQlFVVXNSMEZCUjBNc1RVRkJUU3hGUVVGRkxFTkJRVU03V1VGRFdrRXNUVUZCVFN4SFFVRkhVaXhKUVVGSkxFTkJRVU5KTEV0QlFVc3NRMEZCUTBNc1MwRkJTeXhGUVVGRlF5eExRVUZMTEVWQlFVVkRMRkZCUVZFc1EwRkJReXhEUVVGRE8xRkJRemxETEVOQlFVTTdTVUZEU0N4RFFVRkRMRTFCUVUwc1EwRkJRenRSUVVOT1VDeEpRVUZKTEVOQlFVTkpMRXRCUVVzc1EwRkJRME1zUzBGQlN5eEZRVUZGUXl4TFFVRkxMRVZCUVVWRExGRkJRVkVzUTBGQlF5eERRVUZETzFGQlJXNURReXhOUVVGTkxFZEJRVWNzU1VGQlNTeERRVUZETzBsQlEyaENMRU5CUVVNN1NVRkZSQ3hOUVVGTkxFTkJRVU5CTEUxQlFVMDdRVUZEWml4RFFVRkRJbjA9IiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF9ub25UZXJtaW5hbCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uLy4uL3BhcnQvbm9uVGVybWluYWxcIikpO1xuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gICAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gICAgfVxuICAgIHJldHVybiBzZWxmO1xufVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG59XG5mdW5jdGlvbiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ICE9PSBcInVuZGVmaW5lZFwiICYmIFJlZmxlY3QuZ2V0KSB7XG4gICAgICAgIF9nZXQgPSBSZWZsZWN0LmdldDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBfZ2V0ID0gZnVuY3Rpb24gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlcikge1xuICAgICAgICAgICAgdmFyIGJhc2UgPSBfc3VwZXJQcm9wQmFzZSh0YXJnZXQsIHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmICghYmFzZSkgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGJhc2UsIHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmIChkZXNjLmdldCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZXNjLmdldC5jYWxsKHJlY2VpdmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkZXNjLnZhbHVlO1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlciB8fCB0YXJnZXQpO1xufVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgICAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICAgIH07XG4gICAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn1cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICAgIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICAgIH1cbiAgICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHtcbiAgICAgICAgZGVmYXVsdDogb2JqXG4gICAgfTtcbn1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgICAgICByZXR1cm4gY2FsbDtcbiAgICB9XG4gICAgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgICAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgICAgIHJldHVybiBvO1xuICAgIH07XG4gICAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cbmZ1bmN0aW9uIF9zdXBlclByb3BCYXNlKG9iamVjdCwgcHJvcGVydHkpIHtcbiAgICB3aGlsZSghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpKXtcbiAgICAgICAgb2JqZWN0ID0gX2dldFByb3RvdHlwZU9mKG9iamVjdCk7XG4gICAgICAgIGlmIChvYmplY3QgPT09IG51bGwpIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xufVxudmFyIF90eXBlb2YgPSBmdW5jdGlvbihvYmopIHtcbiAgICBcIkBzd2MvaGVscGVycyAtIHR5cGVvZlwiO1xuICAgIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xufTtcbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgICBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uKCkge30pKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHtcbiAgICB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7XG4gICAgICAgIHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0O1xuICAgICAgICBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkge1xuICAgICAgICAgICAgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgIHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpO1xuICAgIH07XG59XG52YXIgQ29sbGVjdGlvbk9mUGFydHNQYXJ0ID0gLyojX19QVVJFX18qLyBmdW5jdGlvbihOb25UZXJtaW5hbFBhcnQpIHtcbiAgICBfaW5oZXJpdHMoQ29sbGVjdGlvbk9mUGFydHNQYXJ0LCBOb25UZXJtaW5hbFBhcnQpO1xuICAgIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoQ29sbGVjdGlvbk9mUGFydHNQYXJ0KTtcbiAgICBmdW5jdGlvbiBDb2xsZWN0aW9uT2ZQYXJ0c1BhcnQodHlwZSwgcGFydCkge1xuICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ29sbGVjdGlvbk9mUGFydHNQYXJ0KTtcbiAgICAgICAgdmFyIF90aGlzO1xuICAgICAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHR5cGUpO1xuICAgICAgICBfdGhpcy5wYXJ0ID0gcGFydDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBfY3JlYXRlQ2xhc3MoQ29sbGVjdGlvbk9mUGFydHNQYXJ0LCBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJnZXRQYXJ0XCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UGFydCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJ0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiYXNTdHJpbmdcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBhc1N0cmluZyhvcGVyYXRvclN0cmluZykge1xuICAgICAgICAgICAgICAgIHZhciBwYXJ0U3RyaW5nID0gdGhpcy5wYXJ0LmFzU3RyaW5nKCksIHN0cmluZyA9IFwiXCIuY29uY2F0KHBhcnRTdHJpbmcpLmNvbmNhdChvcGVyYXRvclN0cmluZyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImNsb25lXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xvbmUoUGFydCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfZ2V0KF9nZXRQcm90b3R5cGVPZihDb2xsZWN0aW9uT2ZQYXJ0c1BhcnQucHJvdG90eXBlKSwgXCJjbG9uZVwiLCB0aGlzKS5jYWxsKHRoaXMsIFBhcnQsIHRoaXMucGFydCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICBdKTtcbiAgICByZXR1cm4gQ29sbGVjdGlvbk9mUGFydHNQYXJ0O1xufShfbm9uVGVybWluYWwuZGVmYXVsdCk7XG5leHBvcnRzLmRlZmF1bHQgPSBDb2xsZWN0aW9uT2ZQYXJ0c1BhcnQ7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUwzTnlZeTl3WVhKMEwyNXZibFJsY20xcGJtRnNMMk52Ykd4bFkzUnBiMjVQWmxCaGNuUnpMbXB6SWwwc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklsd2lkWE5sSUhOMGNtbGpkRndpTzF4dVhHNXBiWEJ2Y25RZ1RtOXVWR1Z5YldsdVlXeFFZWEowSUdaeWIyMGdYQ0l1TGk4dUxpOXdZWEowTDI1dmJsUmxjbTFwYm1Gc1hDSTdYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJR05zWVhOeklFTnZiR3hsWTNScGIyNVBabEJoY25SelVHRnlkQ0JsZUhSbGJtUnpJRTV2YmxSbGNtMXBibUZzVUdGeWRDQjdYRzRnSUdOdmJuTjBjblZqZEc5eUtIUjVjR1VzSUhCaGNuUXBJSHRjYmlBZ0lDQnpkWEJsY2loMGVYQmxLVHRjYmx4dUlDQWdJSFJvYVhNdWNHRnlkQ0E5SUhCaGNuUTdYRzRnSUgxY2JseHVJQ0JuWlhSUVlYSjBLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG5CaGNuUTdYRzRnSUgxY2JpQWdYRzRnSUdGelUzUnlhVzVuS0c5d1pYSmhkRzl5VTNSeWFXNW5LU0I3WEc0Z0lDQWdZMjl1YzNRZ2NHRnlkRk4wY21sdVp5QTlJSFJvYVhNdWNHRnlkQzVoYzFOMGNtbHVaeWdwTEZ4dUlDQWdJQ0FnSUNBZ0lITjBjbWx1WnlBOUlHQWtlM0JoY25SVGRISnBibWQ5Skh0dmNHVnlZWFJ2Y2xOMGNtbHVaMzFnTzF4dVhHNGdJQ0FnY21WMGRYSnVJSE4wY21sdVp6dGNiaUFnZlZ4dVhHNGdJR05zYjI1bEtGQmhjblFwSUhzZ2NtVjBkWEp1SUhOMWNHVnlMbU5zYjI1bEtGQmhjblFzSUhSb2FYTXVjR0Z5ZENrN0lIMWNibjFjYmlKZExDSnVZVzFsY3lJNld5SkRiMnhzWldOMGFXOXVUMlpRWVhKMGMxQmhjblFpTENKMGVYQmxJaXdpY0dGeWRDSXNJbWRsZEZCaGNuUWlMQ0poYzFOMGNtbHVaeUlzSW05d1pYSmhkRzl5VTNSeWFXNW5JaXdpY0dGeWRGTjBjbWx1WnlJc0luTjBjbWx1WnlJc0ltTnNiMjVsSWl3aVVHRnlkQ0lzSWs1dmJsUmxjbTFwYm1Gc1VHRnlkQ0pkTENKdFlYQndhVzVuY3lJNklrRkJRVUVzUTBGQldTeFhRVUZCTEVOQlFVTTdPenRGTzNkQ08wRkJSV1VzUjBGQmQwSXNRMEZCZUVJc1dVRkJkMEk3T3pzN096czdPenM3T3pzN096czRSRHR6UXpzMlJEdHBSVHM3T3p0M1JUdG5SVHM3T3pzN01FSTdPenM3T3pzN096czdVenM3T3pzN096dExPenM3T3pzN096czdPenM3TzAwN2VVUTdPenM3T3pzN096czdPenM3T3p0MVFqczdTenM3T3pzN2QwTTdPenM3T3pzeVFqczdPenM3T3pzN2NVWTdPenM3T3pzN096czdPenR0UlRzN2FVUTdPenM3TzBsQlJTOUNRU3h4UWtGQmNVSXNhVUpCUVROQ0xGRkJRVkU3Y1VRN08yRkJRVVpCTEhGQ1FVRnhRaXhEUVVNMVFrTXNTVUZCU1N4RlFVRkZReXhKUVVGSk8yOUVPenRyUTBGRFpFUXNTVUZCU1N4RFEwNWtMRU5FVFdkQ08yTkJSVkJETEVsQlFVa3NSMEZCUjBFc1NVRkJTU3hEUVVGRE96czdPenRaUVVkdVFrTXNSMEZCVHl4RlFVRlFRU3hEUVVGUE8yMUNRVUZRUVN4UlFVRlJMRU5CUVZKQkxFOUJRVThzUjBGQlJ5eERRVUZETzJkQ1FVTlVMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU5FTEVsQlFVazdXVUZEYkVJc1EwRkJRenM3TzFsQlJVUkZMRWRCUVZFc1JVRkJVa0VzUTBGQlVUdHRRa0ZCVWtFc1VVRkJVU3hEUVVGU1FTeFJRVUZSTEVOQlFVTkRMR05CUVdNc1JVRkJSU3hEUVVGRE8yZENRVU40UWl4SFFVRkxMRU5CUVVORExGVkJRVlVzUjBGQlJ5eEpRVUZKTEVOQlFVTktMRWxCUVVrc1EwRkJRMFVzVVVGQlVTeEpRVU12UWtjc1RVRkJUU3hIUVVGSkxFTkJRVUVzUlVGQlpVWXNUVUZCWXl4RFFVRXpRa01zVlVGQlZTeEZRVUZyUWl4TlFVRkJMRU5CUVdaRUxHTkJRV003WjBKQlJUZERMRTFCUVUwc1EwRkJRMFVzVFVGQlRUdFpRVU5tTEVOQlFVTTdPenRaUVVWRVF5eEhRVUZMTEVWQlFVeEJMRU5CUVVzN2JVSkJRVXhCTEZGQlFWRXNRMEZCVWtFc1MwRkJTeXhEUVVGRFF5eEpRVUZKTEVWQlFVVXNRMEZCUXp0blFrRkJReXhOUVVGTkxITkNRV3hDUkZRc2NVSkJRWEZDTEdGQmEwSmlVU3hEUVVGTExGRkJRVmdzU1VGQlN5eGhRVUZQUXl4SlFVRkpMRVZCUVVVc1NVRkJTU3hEUVVGRFVDeEpRVUZKTzFsQlFVY3NRMEZCUXpzN1RUczdSVUZzUWtoUkxGbEJRV1U3YTBKQlFUZERWaXh4UWtGQmNVSXNRU0o5IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IENvbGxlY3Rpb25PZlBhcnRzUGFydCBmcm9tIFwiLi9jb2xsZWN0aW9uT2ZQYXJ0c1wiO1xuXG5pbXBvcnQgeyBwdXNoIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgT25lT3JNb3JlUGFydHNQYXJ0VHlwZSB9IGZyb20gXCIuLi8uLi9wYXJ0VHlwZXNcIjtcblxuY29uc3QgeyBwbHVzIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT25lT3JNb3JlUGFydHNQYXJ0IGV4dGVuZHMgQ29sbGVjdGlvbk9mUGFydHNQYXJ0IHtcbiAgY29uc3RydWN0b3IocGFydCkge1xuICAgIGNvbnN0IHR5cGUgPSBPbmVPck1vcmVQYXJ0c1BhcnRUeXBlOyAvLy9cblxuICAgIHN1cGVyKHR5cGUsIHBhcnQpO1xuICB9XG5cbiAgcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBjb25zdCBwYXJ0ID0gdGhpcy5nZXRQYXJ0KCksXG4gICAgICAgICAgcGFydE5vZGVzID0gW10sXG4gICAgICAgICAgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKTtcblxuICAgIHBhcnNlZCA9IHBhcnNlUGFydChwYXJ0LCBwYXJ0Tm9kZXMsIHN0YXRlLCBjYWxsYmFjayk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBwdXNoKG5vZGVzLCBwYXJ0Tm9kZXMpO1xuICAgIH1cblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IG9wZXJhdG9yU3RyaW5nID0gcGx1cywgIC8vL1xuICAgICAgICAgIHN0cmluZyA9IHN1cGVyLmFzU3RyaW5nKG9wZXJhdG9yU3RyaW5nKTtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBjbG9uZSgpIHsgcmV0dXJuIHN1cGVyLmNsb25lKE9uZU9yTW9yZVBhcnRzUGFydCk7IH1cbn1cblxuZnVuY3Rpb24gcGFyc2VQYXJ0KHBhcnQsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgbGV0IHBhcnNlZDtcblxuICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICBwYXJzZWQgPSBwYXJ0LnBhcnNlKG5vZGVzLCBzdGF0ZSwgKCkgPT4ge1xuICAgICAgbGV0IHBhcnNlZCA9IGNhbGxiYWNrKCk7XG5cbiAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgIHBhcnNlZCA9IHBhcnNlUGFydChwYXJ0LCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICB9KVxuICB9IGVsc2Uge1xuICAgIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjayk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBwYXJzZVBhcnQocGFydCwgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFyc2VkO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IENvbGxlY3Rpb25PZlBhcnRzUGFydCBmcm9tIFwiLi9jb2xsZWN0aW9uT2ZQYXJ0c1wiO1xuXG5pbXBvcnQgeyBaZXJvT3JNb3JlUGFydHNQYXJ0VHlwZSB9IGZyb20gXCIuLi8uLi9wYXJ0VHlwZXNcIjtcblxuY29uc3QgeyBhc3RlcmlzayB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFplcm9Pck1vcmVQYXJ0c1BhcnQgZXh0ZW5kcyBDb2xsZWN0aW9uT2ZQYXJ0c1BhcnQge1xuICBjb25zdHJ1Y3RvcihwYXJ0KSB7XG4gICAgY29uc3QgdHlwZSA9IFplcm9Pck1vcmVQYXJ0c1BhcnRUeXBlOyAvLy9cblxuICAgIHN1cGVyKHR5cGUsIHBhcnQpO1xuICB9XG5cbiAgcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBjb25zdCBwYXJ0ID0gdGhpcy5nZXRQYXJ0KCk7XG5cbiAgICBwYXJzZWQgPSBwYXJzZVBhcnQocGFydCwgbm9kZXMsIHN0YXRlLCBjYWxsYmFjayk7XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgb3BlcmF0b3JTdHJpbmcgPSBhc3RlcmlzaywgIC8vL1xuICAgICAgICAgIHN0cmluZyA9IHN1cGVyLmFzU3RyaW5nKG9wZXJhdG9yU3RyaW5nKTtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBjbG9uZSgpIHsgcmV0dXJuIHN1cGVyLmNsb25lKFplcm9Pck1vcmVQYXJ0c1BhcnQpOyB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlUGFydChwYXJ0LCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gIGxldCBwYXJzZWQ7XG5cbiAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgcGFyc2VkID0gY2FsbGJhY2soKTtcblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBwYXJzZWQgPSBwYXJ0LnBhcnNlKG5vZGVzLCBzdGF0ZSwgKCkgPT4gcGFyc2VQYXJ0KHBhcnQsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcGFyc2VkID0gcGFydC5wYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIHBhcnNlUGFydChwYXJ0LCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBwYXJzZWQgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBMb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lLCBRdWFudGlmaWVyUnVsZU5hbWUsIFJ1bGVOYW1lUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vZGVDaG9pY2VOb2RlKG5vZGUpIHtcbiAgbGV0IG5vZGVOb0Nob2ljZU5vZGUgPSBmYWxzZTtcblxuICBjb25zdCBub2RlVGVybWluYWxOb2RlID0gbm9kZS5pc1Rlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3QgdGVybWluYWxOb2RlID0gbm9kZSwgIC8vL1xuICAgICAgICAgIHRlcm1pbmFsTm9kZUNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpO1xuXG4gICAgbm9kZU5vQ2hvaWNlTm9kZSA9ICh0ZXJtaW5hbE5vZGVDb250ZW50ID09PSBcInxcIik7XG4gIH1cblxuICByZXR1cm4gbm9kZU5vQ2hvaWNlTm9kZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTm9kZVJ1bGVOYW1lTm9kZShub2RlKSB7XG4gIGxldCBub2RlUnVsZU5hbWVOb2RlID0gZmFsc2U7XG5cbiAgY29uc3Qgbm9kZVRlcm1pbmFsTm9kZSA9IG5vZGUuaXNUZXJtaW5hbE5vZGUoKSxcbiAgICAgICAgbm9kZU5vblRlcm1pbmFsTm9kZSA9ICFub2RlVGVybWluYWxOb2RlO1xuXG4gIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgbm9uVGVybWluYWxOb2RlUnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKTtcblxuICAgIG5vZGVSdWxlTmFtZU5vZGUgPSAobm9uVGVybWluYWxOb2RlUnVsZU5hbWUgPT09IFJ1bGVOYW1lUnVsZU5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGVSdWxlTmFtZU5vZGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vZGVRdWFudGlmaWVyTm9kZShub2RlKSB7XG4gIGxldCBub2RlUXVhbnRpZmllck5vZGUgPSBmYWxzZTtcblxuICBjb25zdCBub2RlTm9uVGVybWluYWxOb2RlID0gbm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICBydWxlTmFtZVF1YW50aWZpZXJSdWxlTmFtZSA9IChydWxlTmFtZSA9PT0gUXVhbnRpZmllclJ1bGVOYW1lKTtcblxuICAgIG5vZGVRdWFudGlmaWVyTm9kZSA9IHJ1bGVOYW1lUXVhbnRpZmllclJ1bGVOYW1lOyAgLy8vXG4gIH1cblxuICByZXR1cm4gbm9kZVF1YW50aWZpZXJOb2RlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOb2RlTG9va0FoZWFkTW9kaWZpZXJOb2RlKG5vZGUpIHtcbiAgbGV0IG5vZGVMb29rQWhlYWRNb2RpZmllck5vZGUgPSBmYWxzZTtcblxuICBjb25zdCBub2RlTm9uVGVybWluYWxOb2RlID0gbm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICBydWxlTmFtZUxvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUgPSAocnVsZU5hbWUgPT09IExvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUpO1xuXG4gICAgbm9kZUxvb2tBaGVhZE1vZGlmaWVyTm9kZSA9IHJ1bGVOYW1lTG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZTsgIC8vL1xuICB9XG5cbiAgcmV0dXJuIG5vZGVMb29rQWhlYWRNb2RpZmllck5vZGU7XG5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVOYW1lRnJvbVF1YW50aWZpZXJOb2RlKHF1YW50aWZpZXJOb2RlKSB7XG4gIGxldCBub25UZXJtaW5hbE5vZGU7XG5cbiAgbm9uVGVybWluYWxOb2RlID0gcXVhbnRpZmllck5vZGU7IC8vL1xuXG4gIGNvbnN0IGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpO1xuXG4gIG5vblRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlOyAgLy8vXG5cbiAgY29uc3QgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKTtcblxuICByZXR1cm4gcnVsZU5hbWU7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcbmltcG9ydCBPcHRpb25hbFBhcnRQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsL29wdGlvbmFsUGFydFwiO1xuaW1wb3J0IE9uZU9yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC9vbmVPck1vcmVQYXJ0c1wiO1xuaW1wb3J0IFplcm9Pck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWwvemVyb09yTW9yZVBhcnRzXCI7XG5cbmltcG9ydCB7IGxhc3QgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBpc05vZGVRdWFudGlmaWVyTm9kZSwgcnVsZU5hbWVGcm9tUXVhbnRpZmllck5vZGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2JuZlwiO1xuaW1wb3J0IHsgT3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUsIE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSwgWmVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFydEJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIG5vZGVzID0gY2hpbGROb2Rlcy5zbGljZSgpLFxuICAgICAgICAgIHBhcnQgPSBwYXJ0RnJvbU5vZGVzKG5vZGVzKTtcblxuICAgIHJldHVybiBwYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKFBhcnRCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cblxuZnVuY3Rpb24gcGFydEZyb21Ob2Rlcyhub2Rlcykge1xuICBsZXQgcGFydCA9IG51bGw7XG5cbiAgY29uc3Qgbm9kZXNMZW5ndGggPSBub2Rlcy5sZW5ndGg7XG5cbiAgaWYgKG5vZGVzTGVuZ3RoID09PSAxKSB7XG4gICAgY29uc3Qgbm9kZSA9IG5vZGVzLnBvcCgpLFxuICAgICAgICAgIGxvb2tBaGVhZCA9IGZhbHNlO1xuXG4gICAgcGFydCA9IG5vZGUuZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgbGFzdE5vZGVRdWFudGlmaWVyTm9kZSA9IGlzTGFzdE5vZGVRdWFudGlmaWVyTm9kZShub2Rlcyk7XG5cbiAgICBpZiAobGFzdE5vZGVRdWFudGlmaWVyTm9kZSkge1xuICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzLnBvcCgpLFxuICAgICAgICAgICAgcXVhbnRpZmllck5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICAgIHBhcnQgPSBwYXJ0RnJvbU5vZGVzKG5vZGVzKTtcblxuICAgICAgY29uc3QgcnVsZU5hbWUgPSBydWxlTmFtZUZyb21RdWFudGlmaWVyTm9kZShxdWFudGlmaWVyTm9kZSksXG4gICAgICAgICAgICBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnQgPSBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnRGcm9tUGFydEFuZFJ1bGVOYW1lKHBhcnQsIHJ1bGVOYW1lKTtcblxuICAgICAgcGFydCA9IGNvbGxlY3Rpb25PZlBhcnRzUGFydDsgLy8vXG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGVzLnNoaWZ0KCk7XG5cbiAgICAgIHBhcnQgPSBwYXJ0RnJvbU5vZGVzKG5vZGVzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFydDtcbn1cblxuZnVuY3Rpb24gaXNMYXN0Tm9kZVF1YW50aWZpZXJOb2RlKG5vZGVzKSB7XG4gIGNvbnN0IGxhc3ROb2RlID0gbGFzdChub2RlcyksXG4gICAgICAgIGxhc3ROb2RlUXVhbnRpZmllck5vZGUgPSBpc05vZGVRdWFudGlmaWVyTm9kZShsYXN0Tm9kZSk7XG5cbiAgcmV0dXJuIGxhc3ROb2RlUXVhbnRpZmllck5vZGU7XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3Rpb25PZlBhcnRzUGFydEZyb21QYXJ0QW5kUnVsZU5hbWUocGFydCwgcnVsZU5hbWUpIHtcbiAgbGV0IGNvbGxlY3Rpb25PZlBhcnRzUGFydDtcblxuICBzd2l0Y2ggKHJ1bGVOYW1lKSB7XG4gICAgY2FzZSBPcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSA6XG4gICAgICBjb25zdCBvcHRpb25hbFBhcnRQYXJ0ID0gbmV3IE9wdGlvbmFsUGFydFBhcnQocGFydCk7XG5cbiAgICAgIGNvbGxlY3Rpb25PZlBhcnRzUGFydCA9IG9wdGlvbmFsUGFydFBhcnQ7IC8vL1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSA6XG4gICAgICBjb25zdCBvbmVPck1vcmVQYXJ0c1BhcnQgPSBuZXcgT25lT3JNb3JlUGFydHNQYXJ0KHBhcnQpO1xuXG4gICAgICBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnQgPSBvbmVPck1vcmVQYXJ0c1BhcnQ7IC8vL1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWUgOlxuICAgICAgY29uc3QgemVyb09yTW9yZVBhcnRzUGFydCA9IG5ldyBaZXJvT3JNb3JlUGFydHNQYXJ0KHBhcnQpO1xuXG4gICAgICBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnQgPSB6ZXJvT3JNb3JlUGFydHNQYXJ0OyAgLy8vXG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX29jY2FtTGV4ZXJzID0gcmVxdWlyZShcIm9jY2FtLWxleGVyc1wiKTtcbnZhciBfbm9uVGVybWluYWwgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsXCIpKTtcbnZhciBfY29uc3RhbnRzID0gcmVxdWlyZShcIi4uLy4uL2NvbnN0YW50c1wiKTtcbnZhciBfcGFydFR5cGVzID0gcmVxdWlyZShcIi4uLy4uL3BhcnRUeXBlc1wiKTtcbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICAgIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICAgIH1cbiAgICByZXR1cm4gc2VsZjtcbn1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspe1xuICAgICAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxuZnVuY3Rpb24gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlcikge1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBSZWZsZWN0LmdldCkge1xuICAgICAgICBfZ2V0ID0gUmVmbGVjdC5nZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgX2dldCA9IGZ1bmN0aW9uIF9nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHtcbiAgICAgICAgICAgIHZhciBiYXNlID0gX3N1cGVyUHJvcEJhc2UodGFyZ2V0LCBwcm9wZXJ0eSk7XG4gICAgICAgICAgICBpZiAoIWJhc2UpIHJldHVybjtcbiAgICAgICAgICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihiYXNlLCBwcm9wZXJ0eSk7XG4gICAgICAgICAgICBpZiAoZGVzYy5nZXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVzYy5nZXQuY2FsbChyZWNlaXZlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZGVzYy52YWx1ZTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIF9nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIgfHwgdGFyZ2V0KTtcbn1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICAgICAgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtcbiAgICB9O1xuICAgIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7XG59XG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgICB9XG4gICAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7XG59XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikge1xuICAgIHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7XG4gICAgICAgIGRlZmF1bHQ6IG9ialxuICAgIH07XG59XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gICAgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICAgICAgcmV0dXJuIGNhbGw7XG4gICAgfVxuICAgIHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICAgICAgby5fX3Byb3RvX18gPSBwO1xuICAgICAgICByZXR1cm4gbztcbiAgICB9O1xuICAgIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59XG5mdW5jdGlvbiBfc3VwZXJQcm9wQmFzZShvYmplY3QsIHByb3BlcnR5KSB7XG4gICAgd2hpbGUoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KSl7XG4gICAgICAgIG9iamVjdCA9IF9nZXRQcm90b3R5cGVPZihvYmplY3QpO1xuICAgICAgICBpZiAob2JqZWN0ID09PSBudWxsKSBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdDtcbn1cbnZhciBfdHlwZW9mID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgXCJAc3djL2hlbHBlcnMgLSB0eXBlb2ZcIjtcbiAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbn07XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkge1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7XG4gICAgdHJ5IHtcbiAgICAgICAgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbigpIHt9KSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7XG4gICAgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkge1xuICAgICAgICB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDtcbiAgICAgICAgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHtcbiAgICAgICAgICAgIHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7XG4gICAgICAgICAgICByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTtcbiAgICB9O1xufVxudmFyIGV4Y2xhbWF0aW9uTWFyayA9IF9vY2NhbUxleGVycy5zcGVjaWFsU3ltYm9scy5leGNsYW1hdGlvbk1hcms7XG52YXIgUnVsZU5hbWVQYXJ0ID0gLyojX19QVVJFX18qLyBmdW5jdGlvbihOb25UZXJtaW5hbFBhcnQpIHtcbiAgICBfaW5oZXJpdHMoUnVsZU5hbWVQYXJ0LCBOb25UZXJtaW5hbFBhcnQpO1xuICAgIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoUnVsZU5hbWVQYXJ0KTtcbiAgICBmdW5jdGlvbiBSdWxlTmFtZVBhcnQocnVsZU5hbWUpIHtcbiAgICAgICAgdmFyIGxvb2tBaGVhZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG4gICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBSdWxlTmFtZVBhcnQpO1xuICAgICAgICB2YXIgX3RoaXM7XG4gICAgICAgIHZhciB0eXBlID0gX3BhcnRUeXBlcy5SdWxlTmFtZVBhcnRUeXBlOyAvLy9cbiAgICAgICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCB0eXBlKTtcbiAgICAgICAgX3RoaXMucnVsZU5hbWUgPSBydWxlTmFtZTtcbiAgICAgICAgX3RoaXMubG9va0FoZWFkID0gbG9va0FoZWFkO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIF9jcmVhdGVDbGFzcyhSdWxlTmFtZVBhcnQsIFtcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImdldFJ1bGVOYW1lXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UnVsZU5hbWUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucnVsZU5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJpc0xvb2tBaGVhZFwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGlzTG9va0FoZWFkKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvb2tBaGVhZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImlzUnVsZU5hbWVQYXJ0XCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gaXNSdWxlTmFtZVBhcnQoKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJ1bGVOYW1lUGFydCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJ1bGVOYW1lUGFydDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcInNldExvb2tBaGVhZFwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNldExvb2tBaGVhZChsb29rQWhlYWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvb2tBaGVhZCA9IGxvb2tBaGVhZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImZpbmRSdWxlXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZmluZFJ1bGUoc3RhdGUpIHtcbiAgICAgICAgICAgICAgICB2YXIgcnVsZU1hcCA9IHN0YXRlLmdldFJ1bGVNYXAoKSwgcnVsZSA9IHJ1bGVNYXBbdGhpcy5ydWxlTmFtZV0gfHwgbnVsbDsgLy8vXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJ1bGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJwYXJzZVwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICB2YXIgcGFyc2VkO1xuICAgICAgICAgICAgICAgIHZhciBydWxlID0gdGhpcy5maW5kUnVsZShzdGF0ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHJ1bGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJ1bGVOb2RlID0gcnVsZS5wYXJzZShzdGF0ZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICBwYXJzZWQgPSBydWxlTm9kZSAhPT0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXMucHVzaChydWxlTm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImFzU3RyaW5nXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gYXNTdHJpbmcoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGxvb2tBaGVhZFN0cmluZyA9IHRoaXMubG9va0FoZWFkID8gZXhjbGFtYXRpb25NYXJrIDogX2NvbnN0YW50cy5FTVBUWV9TVFJJTkcsIHN0cmluZyA9IFwiXCIuY29uY2F0KHRoaXMucnVsZU5hbWUpLmNvbmNhdChsb29rQWhlYWRTdHJpbmcpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJjbG9uZVwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsb25lKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfZ2V0KF9nZXRQcm90b3R5cGVPZihSdWxlTmFtZVBhcnQucHJvdG90eXBlKSwgXCJjbG9uZVwiLCB0aGlzKS5jYWxsKHRoaXMsIFJ1bGVOYW1lUGFydCwgdGhpcy5ydWxlTmFtZSwgdGhpcy5sb29rQWhlYWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgXSk7XG4gICAgcmV0dXJuIFJ1bGVOYW1lUGFydDtcbn0oX25vblRlcm1pbmFsLmRlZmF1bHQpO1xuZXhwb3J0cy5kZWZhdWx0ID0gUnVsZU5hbWVQYXJ0O1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUx5NHVMM055WXk5d1lYSjBMMjV2YmxSbGNtMXBibUZzTDNKMWJHVk9ZVzFsTG1weklsMHNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbHdpZFhObElITjBjbWxqZEZ3aU8xeHVYRzVwYlhCdmNuUWdleUJ6Y0dWamFXRnNVM2x0WW05c2N5QjlJR1p5YjIwZ1hDSnZZMk5oYlMxc1pYaGxjbk5jSWp0Y2JseHVhVzF3YjNKMElFNXZibFJsY20xcGJtRnNVR0Z5ZENCbWNtOXRJRndpTGk0dkxpNHZjR0Z5ZEM5dWIyNVVaWEp0YVc1aGJGd2lPMXh1WEc1cGJYQnZjblFnZXlCRlRWQlVXVjlUVkZKSlRrY2dmU0JtY205dElGd2lMaTR2TGk0dlkyOXVjM1JoYm5SelhDSTdYRzVwYlhCdmNuUWdleUJTZFd4bFRtRnRaVkJoY25SVWVYQmxJSDBnWm5KdmJTQmNJaTR1THk0dUwzQmhjblJVZVhCbGMxd2lPMXh1WEc1amIyNXpkQ0I3SUdWNFkyeGhiV0YwYVc5dVRXRnlheUI5SUQwZ2MzQmxZMmxoYkZONWJXSnZiSE03WEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUdOc1lYTnpJRkoxYkdWT1lXMWxVR0Z5ZENCbGVIUmxibVJ6SUU1dmJsUmxjbTFwYm1Gc1VHRnlkQ0I3WEc0Z0lHTnZibk4wY25WamRHOXlLSEoxYkdWT1lXMWxMQ0JzYjI5clFXaGxZV1FnUFNCbVlXeHpaU2tnZTF4dUlDQWdJR052Ym5OMElIUjVjR1VnUFNCU2RXeGxUbUZ0WlZCaGNuUlVlWEJsT3lBdkx5OWNibHh1SUNBZ0lITjFjR1Z5S0hSNWNHVXBPMXh1WEc0Z0lDQWdkR2hwY3k1eWRXeGxUbUZ0WlNBOUlISjFiR1ZPWVcxbE8xeHVYRzRnSUNBZ2RHaHBjeTVzYjI5clFXaGxZV1FnUFNCc2IyOXJRV2hsWVdRN1hHNGdJSDFjYmlBZ1hHNGdJR2RsZEZKMWJHVk9ZVzFsS0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxuSjFiR1ZPWVcxbE8xeHVJQ0I5WEc1Y2JpQWdhWE5NYjI5clFXaGxZV1FvS1NCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdWJHOXZhMEZvWldGa08xeHVJQ0I5WEc1Y2JpQWdhWE5TZFd4bFRtRnRaVkJoY25Rb0tTQjdYRzRnSUNBZ1kyOXVjM1FnY25Wc1pVNWhiV1ZRWVhKMElEMGdkSEoxWlR0Y2JseHVJQ0FnSUhKbGRIVnliaUJ5ZFd4bFRtRnRaVkJoY25RN1hHNGdJSDFjYmx4dUlDQnpaWFJNYjI5clFXaGxZV1FvYkc5dmEwRm9aV0ZrS1NCN1hHNGdJQ0FnZEdocGN5NXNiMjlyUVdobFlXUWdQU0JzYjI5clFXaGxZV1E3WEc0Z0lIMWNibHh1SUNCbWFXNWtVblZzWlNoemRHRjBaU2tnZTF4dUlDQWdJR052Ym5OMElISjFiR1ZOWVhBZ1BTQnpkR0YwWlM1blpYUlNkV3hsVFdGd0tDa3NYRzRnSUNBZ0lDQWdJQ0FnY25Wc1pTQTlJSEoxYkdWTllYQmJkR2hwY3k1eWRXeGxUbUZ0WlYwZ2ZId2diblZzYkRzZ0lDOHZMMXh1WEc0Z0lDQWdjbVYwZFhKdUlISjFiR1U3WEc0Z0lIMWNibHh1SUNCd1lYSnpaU2h1YjJSbGN5d2djM1JoZEdVc0lHTmhiR3hpWVdOcktTQjdYRzRnSUNBZ2JHVjBJSEJoY25ObFpEdGNibHh1SUNBZ0lHTnZibk4wSUhKMWJHVWdQU0IwYUdsekxtWnBibVJTZFd4bEtITjBZWFJsS1R0Y2JseHVJQ0FnSUdsbUlDaHlkV3hsSUQwOVBTQnVkV3hzS1NCN1hHNGdJQ0FnSUNCd1lYSnpaV1FnUFNCbVlXeHpaVHRjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnY25Wc1pVNXZaR1VnUFNCeWRXeGxMbkJoY25ObEtITjBZWFJsTENCallXeHNZbUZqYXlrN1hHNWNiaUFnSUNBZ0lIQmhjbk5sWkNBOUlDaHlkV3hsVG05a1pTQWhQVDBnYm5Wc2JDazdYRzVjYmlBZ0lDQWdJR2xtSUNod1lYSnpaV1FwSUh0Y2JpQWdJQ0FnSUNBZ2JtOWtaWE11Y0hWemFDaHlkV3hsVG05a1pTazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2NtVjBkWEp1SUhCaGNuTmxaRHRjYmlBZ2ZWeHVYRzRnSUdGelUzUnlhVzVuS0NrZ2UxeHVJQ0FnSUdOdmJuTjBJR3h2YjJ0QmFHVmhaRk4wY21sdVp5QTlJSFJvYVhNdWJHOXZhMEZvWldGa0lEOWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdWNFkyeGhiV0YwYVc5dVRXRnlheUE2WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRVZOVUZSWlgxTlVVa2xPUnl4Y2JpQWdJQ0FnSUNBZ0lDQnpkSEpwYm1jZ1BTQmdKSHQwYUdsekxuSjFiR1ZPWVcxbGZTUjdiRzl2YTBGb1pXRmtVM1J5YVc1bmZXQTdYRzVjYmlBZ0lDQnlaWFIxY200Z2MzUnlhVzVuTzF4dUlDQjlYRzVjYmlBZ1kyeHZibVVvS1NCN0lISmxkSFZ5YmlCemRYQmxjaTVqYkc5dVpTaFNkV3hsVG1GdFpWQmhjblFzSUhSb2FYTXVjblZzWlU1aGJXVXNJSFJvYVhNdWJHOXZhMEZvWldGa0tUc2dmVnh1ZlZ4dUlsMHNJbTVoYldWeklqcGJJbVY0WTJ4aGJXRjBhVzl1VFdGeWF5SXNJbk53WldOcFlXeFRlVzFpYjJ4eklpd2lVblZzWlU1aGJXVlFZWEowSWl3aWNuVnNaVTVoYldVaUxDSnNiMjlyUVdobFlXUWlMQ0owZVhCbElpd2lVblZzWlU1aGJXVlFZWEowVkhsd1pTSXNJbWRsZEZKMWJHVk9ZVzFsSWl3aWFYTk1iMjlyUVdobFlXUWlMQ0pwYzFKMWJHVk9ZVzFsVUdGeWRDSXNJbkoxYkdWT1lXMWxVR0Z5ZENJc0luTmxkRXh2YjJ0QmFHVmhaQ0lzSW1acGJtUlNkV3hsSWl3aWMzUmhkR1VpTENKeWRXeGxUV0Z3SWl3aVoyVjBVblZzWlUxaGNDSXNJbkoxYkdVaUxDSndZWEp6WlNJc0ltNXZaR1Z6SWl3aVkyRnNiR0poWTJzaUxDSndZWEp6WldRaUxDSnlkV3hsVG05a1pTSXNJbkIxYzJnaUxDSmhjMU4wY21sdVp5SXNJbXh2YjJ0QmFHVmhaRk4wY21sdVp5SXNJa1ZOVUZSWlgxTlVVa2xPUnlJc0luTjBjbWx1WnlJc0ltTnNiMjVsSWl3aVRtOXVWR1Z5YldsdVlXeFFZWEowSWwwc0ltMWhjSEJwYm1keklqb2lRVUZCUVN4RFFVRlpMRmRCUVVFc1EwRkJRenM3TzBVN2QwSTdRVUZGYTBJc1IwRkJZeXhEUVVGa0xGbEJRV003UVVGRmFrSXNSMEZCZDBJc1EwRkJlRUlzV1VGQmQwSTdRVUZGZGtJc1IwRkJhVUlzUTBGQmFrSXNWVUZCYVVJN1FVRkRZaXhIUVVGcFFpeERRVUZxUWl4VlFVRnBRanM3T3pzN096czdPenM3T3pzN096aEVPM05ET3paRU8ybEZPenM3TzNkRk8yZEZPenM3T3pzd1FqczdPenM3T3pzN096dFRPenM3T3pzN08wczdPenM3T3pzN096czdPenM3VFR0NVJEczdPenM3T3pzN096czdPenM3TzNWQ096dExPenM3T3p0M1F6czdPenM3T3pKQ096czdPenM3T3p0eFJqczdPenM3T3pzN096czdPMjFGT3p0cFJEczdPenM3UVVGRmJFUXNSMEZCU3l4RFFVRkhRU3hsUVVGbExFZEJRVXRETEZsQlFXTXNaMEpCUVd4RFJDeGxRVUZsTzBsQlJVWkZMRmxCUVZrc2FVSkJRV3hDTEZGQlFWRTdORU03TzJGQlFVWkJMRmxCUVZrc1EwRkRia0pETEZGQlFWRTdXVUZCUlVNc1UwRkJVeXh2UlVGQlJ5eExRVUZMT3pKRE96dFJRVU55UXl4SFFVRkxMRU5CUVVORExFbEJRVWtzUjBGQlIwTXNWVUZCWjBJc2JVSkJRVVVzUlVGQlJ5eEJRVUZJTEVOQlFVYzdhME5CUlRWQ1JDeEpRVUZKTEVORFptUXNRMFJsWjBJN1kwRkZVRVlzVVVGQlVTeEhRVUZIUVN4UlFVRlJMRU5CUVVNN1kwRkZjRUpETEZOQlFWTXNSMEZCUjBFc1UwRkJVeXhEUVVGRE96czdPenRaUVVjM1FrY3NSMEZCVnl4RlFVRllRU3hEUVVGWE8yMUNRVUZZUVN4UlFVRlJMRU5CUVZKQkxGZEJRVmNzUjBGQlJ5eERRVUZETzJkQ1FVTmlMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU5LTEZGQlFWRTdXVUZEZEVJc1EwRkJRenM3TzFsQlJVUkxMRWRCUVZjc1JVRkJXRUVzUTBGQlZ6dHRRa0ZCV0VFc1VVRkJVU3hEUVVGU1FTeFhRVUZYTEVkQlFVY3NRMEZCUXp0blFrRkRZaXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZEU2l4VFFVRlRPMWxCUTNaQ0xFTkJRVU03T3p0WlFVVkVTeXhIUVVGakxFVkJRV1JCTEVOQlFXTTdiVUpCUVdSQkxGRkJRVkVzUTBGQlVrRXNZMEZCWXl4SFFVRkhMRU5CUVVNN1owSkJRMmhDTEVkQlFVc3NRMEZCUTBNc1dVRkJXU3hIUVVGSExFbEJRVWs3WjBKQlJYcENMRTFCUVUwc1EwRkJRMEVzV1VGQldUdFpRVU55UWl4RFFVRkRPenM3V1VGRlJFTXNSMEZCV1N4RlFVRmFRU3hEUVVGWk8yMUNRVUZhUVN4UlFVRlJMRU5CUVZKQkxGbEJRVmtzUTBGQlExQXNVMEZCVXl4RlFVRkZMRU5CUVVNN1owSkJRM1pDTEVsQlFVa3NRMEZCUTBFc1UwRkJVeXhIUVVGSFFTeFRRVUZUTEVOQlFVTTdXVUZETjBJc1EwRkJRenM3TzFsQlJVUlJMRWRCUVZFc1JVRkJVa0VzUTBGQlVUdHRRa0ZCVWtFc1VVRkJVU3hEUVVGU1FTeFJRVUZSTEVOQlFVTkRMRXRCUVVzc1JVRkJSU3hEUVVGRE8yZENRVU5tTEVkQlFVc3NRMEZCUTBNc1QwRkJUeXhIUVVGSFJDeExRVUZMTEVOQlFVTkZMRlZCUVZVc1NVRkRNVUpETEVsQlFVa3NSMEZCUjBZc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlExZ3NVVUZCVVN4TFFVRkxMRWxCUVVrc1JVRkJSeXhGUVVGSExFRkJRVWdzUTBGQlJ6dG5Ra0ZGYWtRc1RVRkJUU3hEUVVGRFlTeEpRVUZKTzFsQlEySXNRMEZCUXpzN08xbEJSVVJETEVkQlFVc3NSVUZCVEVFc1EwRkJTenR0UWtGQlRFRXNVVUZCVVN4RFFVRlNRU3hMUVVGTExFTkJRVU5ETEV0QlFVc3NSVUZCUlV3c1MwRkJTeXhGUVVGRlRTeFJRVUZSTEVWQlFVVXNRMEZCUXp0blFrRkROMElzUjBGQlJ5eERRVUZEUXl4TlFVRk5PMmRDUVVWV0xFZEJRVXNzUTBGQlEwb3NTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJRMG9zVVVGQlVTeERRVUZEUXl4TFFVRkxPMmRDUVVWb1F5eEZRVUZGTEVWQlFVVkhMRWxCUVVrc1MwRkJTeXhKUVVGSkxFVkJRVVVzUTBGQlF6dHZRa0ZEYkVKSkxFMUJRVTBzUjBGQlJ5eExRVUZMTEVOQlFVTTdaMEpCUTJwQ0xFTkJRVU1zVFVGQlRTeERRVUZETzI5Q1FVTk9MRWRCUVVzc1EwRkJRME1zVVVGQlVTeEhRVUZIVEN4SlFVRkpMRU5CUVVORExFdEJRVXNzUTBGQlEwb3NTMEZCU3l4RlFVRkZUU3hSUVVGUk8yOUNRVVV6UTBNc1RVRkJUU3hIUVVGSlF5eFJRVUZSTEV0QlFVc3NTVUZCU1N4QlFVRkRMRU5CUVVNN2IwSkJSVGRDTEVWQlFVVXNSVUZCUlVRc1RVRkJUU3hGUVVGRkxFTkJRVU03ZDBKQlExaEdMRXRCUVVzc1EwRkJRMGtzU1VGQlNTeERRVUZEUkN4UlFVRlJMRU5CUVVNc1EwRkJRenR2UWtGRGRrSXNRMEZCUXp0blFrRkRTQ3hEUVVGRE8yZENRVVZFTEUxQlFVMHNRMEZCUTBRc1RVRkJUVHRaUVVObUxFTkJRVU03T3p0WlFVVkVSeXhIUVVGUkxFVkJRVkpCTEVOQlFWRTdiVUpCUVZKQkxGRkJRVkVzUTBGQlVrRXNVVUZCVVN4SFFVRkhMRU5CUVVNN1owSkJRMVlzUjBGQlN5eERRVUZEUXl4bFFVRmxMRWRCUVVjc1NVRkJTU3hEUVVGRGNFSXNVMEZCVXl4SFFVTmFTaXhsUVVGbExFZEJRMko1UWl4VlFVRlpMR1ZCUTJ4RFF5eE5RVUZOTEVkQlFVa3NRMEZCUVN4RlFVRnJRa1lzVFVGQlpTeERRVUV2UWl4SlFVRkpMRU5CUVVOeVFpeFJRVUZSTEVWQlFXMUNMRTFCUVVFc1EwRkJhRUp4UWl4bFFVRmxPMmRDUVVWcVJDeE5RVUZOTEVOQlFVTkZMRTFCUVUwN1dVRkRaaXhEUVVGRE96czdXVUZGUkVNc1IwRkJTeXhGUVVGTVFTeERRVUZMTzIxQ1FVRk1RU3hSUVVGUkxFTkJRVkpCTEV0QlFVc3NSMEZCUnl4RFFVRkRPMmRDUVVGRExFMUJRVTBzYzBKQmFrVkhla0lzV1VGQldTeGhRV2xGVW5sQ0xFTkJRVXNzVVVGQldDeEpRVUZMTEdGQlFVOTZRaXhaUVVGWkxFVkJRVVVzU1VGQlNTeERRVUZEUXl4UlFVRlJMRVZCUVVVc1NVRkJTU3hEUVVGRFF5eFRRVUZUTzFsQlFVY3NRMEZCUXpzN1RUczdSVUZxUlhCRGQwSXNXVUZCWlR0clFrRkJjRU14UWl4WlFVRlpMRUVpZlE9PSIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZU5hbWVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHJ1bGVOYW1lKSB7XG4gICAgY29uc3QgcnVsZU5hbWVSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHJ1bGVOYW1lKSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIHJ1bGVOYW1lUnVsZU5hbWVQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IFplcm9Pck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWwvemVyb09yTW9yZVBhcnRzXCI7XG5cbmltcG9ydCB7IFF1YW50aWZpZXJSdWxlTmFtZSwgVGVybWluYWxQYXJ0UnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHF1YW50aWZpZXJSdWxlTmFtZSA9IFF1YW50aWZpZXJSdWxlTmFtZSxcbiAgICAgICAgICB0ZXJtaW5hbFBhcnRSdWxlTmFtZSA9IFRlcm1pbmFsUGFydFJ1bGVOYW1lLFxuICAgICAgICAgIHF1YW50aWZpZXJSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHF1YW50aWZpZXJSdWxlTmFtZSksXG4gICAgICAgICAgdGVybWluYWxQYXJ0UnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydCh0ZXJtaW5hbFBhcnRSdWxlTmFtZSksXG4gICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZVBhcnRzUGFydCA9IG5ldyBaZXJvT3JNb3JlUGFydHNQYXJ0KHF1YW50aWZpZXJSdWxlTmFtZVBhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgdGVybWluYWxQYXJ0UnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZVBhcnRzUGFydFxuICAgICAgICAgIF07XG4gICAgXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uLy4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBaZXJvT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsL3plcm9Pck1vcmVQYXJ0c1wiO1xuXG5pbXBvcnQgeyBRdWFudGlmaWVyUnVsZU5hbWUsIE5vblRlcm1pbmFsUGFydFJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBxdWFudGlmaWVyUnVsZU5hbWUgPSBRdWFudGlmaWVyUnVsZU5hbWUsXG4gICAgICAgICAgbm9uVGVybWluYWxQYXJ0UnVsZU5hbWUgPSBOb25UZXJtaW5hbFBhcnRSdWxlTmFtZSxcbiAgICAgICAgICBxdWFudGlmaWVyUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChxdWFudGlmaWVyUnVsZU5hbWUpLFxuICAgICAgICAgIG5vblRlcm1pbmFsUGFydFJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQobm9uVGVybWluYWxQYXJ0UnVsZU5hbWUpLFxuICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWVQYXJ0c1BhcnQgPSBuZXcgWmVyb09yTW9yZVBhcnRzUGFydChxdWFudGlmaWVyUnVsZU5hbWVQYXJ0KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIG5vblRlcm1pbmFsUGFydFJ1bGVOYW1lUGFydCxcbiAgICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWVQYXJ0c1BhcnRcbiAgICAgICAgICBdO1xuICAgIFxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgUGFydEJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3BhcnRcIjtcbmltcG9ydCBSdWxlTmFtZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcnVsZU5hbWVcIjtcbmltcG9ydCBUZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9wYXJ0UnVsZS90ZXJtaW5hbFwiO1xuaW1wb3J0IE5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3BhcnRSdWxlL25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IFBhcnRSdWxlTmFtZSwgTm9XaGl0ZXNwYWNlUGFydFJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYXJ0UnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gUGFydFJ1bGVOYW1lLFxuICAgICAgICAgIHRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uID0gbmV3IFRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uKCksXG4gICAgICAgICAgbm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gPSBuZXcgTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24oKSxcbiAgICAgICAgICBub1doaXRlc3BhY2VQYXJ0UnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbihOb1doaXRlc3BhY2VQYXJ0UnVsZU5hbWUpLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgbm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24sXG4gICAgICAgICAgICB0ZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbixcbiAgICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnRSdWxlTmFtZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBQYXJ0Qk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IGZpcnN0LCB0aGlyZCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZUJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVJ1bGUoUnVsZSkge1xuICAgIGNvbnN0IG5hbWUgPSB0aGlzLmdldE5hbWUoKSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IHRoaXMuZ2VuZXJhdGVEZWZpbml0aW9ucygpLFxuICAgICAgICAgIE5vZGUgPSBOb25UZXJtaW5hbE5vZGUsXG4gICAgICAgICAgcnVsZSA9IG5ldyBSdWxlKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKTtcblxuICAgIHJldHVybiBydWxlO1xuICB9XG5cbiAgZ2V0TmFtZSgpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgZmlyc3RDaGlsZE5vZGUgPSBmaXJzdChjaGlsZE5vZGVzKSxcbiAgICAgICAgICBuYW1lQk5GTm9kZSA9IGZpcnN0Q2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgbmFtZSA9IG5hbWVCTkZOb2RlLmdldE5hbWUoKTtcbiAgICBcbiAgICByZXR1cm4gbmFtZTtcbiAgfVxuICBcbiAgZ2VuZXJhdGVEZWZpbml0aW9ucygpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgdGhpcmRDaGlsZE5vZGUgPSB0aGlyZChjaGlsZE5vZGVzKSxcbiAgICAgICAgICBkZWZpbml0aW9uc05vZGUgPSB0aGlyZENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgIGRlZmluaXRpb25zID0gZGVmaW5pdGlvbnNOb2RlLmdlbmVyYXRlRGVmaW5pdGlvbnMoKTtcbiAgICBcbiAgICByZXR1cm4gZGVmaW5pdGlvbnM7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoUnVsZUJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF90ZXJtaW5hbCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uLy4uL3BhcnQvdGVybWluYWxcIikpO1xudmFyIF90ZXJtaW5hbDEgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi8uLi9ub2RlL3Rlcm1pbmFsXCIpKTtcbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICAgIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICAgIH1cbiAgICByZXR1cm4gc2VsZjtcbn1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspe1xuICAgICAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxuZnVuY3Rpb24gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlcikge1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBSZWZsZWN0LmdldCkge1xuICAgICAgICBfZ2V0ID0gUmVmbGVjdC5nZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgX2dldCA9IGZ1bmN0aW9uIF9nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHtcbiAgICAgICAgICAgIHZhciBiYXNlID0gX3N1cGVyUHJvcEJhc2UodGFyZ2V0LCBwcm9wZXJ0eSk7XG4gICAgICAgICAgICBpZiAoIWJhc2UpIHJldHVybjtcbiAgICAgICAgICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihiYXNlLCBwcm9wZXJ0eSk7XG4gICAgICAgICAgICBpZiAoZGVzYy5nZXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVzYy5nZXQuY2FsbChyZWNlaXZlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZGVzYy52YWx1ZTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIF9nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIgfHwgdGFyZ2V0KTtcbn1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICAgICAgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtcbiAgICB9O1xuICAgIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7XG59XG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgICB9XG4gICAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7XG59XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikge1xuICAgIHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7XG4gICAgICAgIGRlZmF1bHQ6IG9ialxuICAgIH07XG59XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gICAgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICAgICAgcmV0dXJuIGNhbGw7XG4gICAgfVxuICAgIHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICAgICAgby5fX3Byb3RvX18gPSBwO1xuICAgICAgICByZXR1cm4gbztcbiAgICB9O1xuICAgIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59XG5mdW5jdGlvbiBfc3VwZXJQcm9wQmFzZShvYmplY3QsIHByb3BlcnR5KSB7XG4gICAgd2hpbGUoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KSl7XG4gICAgICAgIG9iamVjdCA9IF9nZXRQcm90b3R5cGVPZihvYmplY3QpO1xuICAgICAgICBpZiAob2JqZWN0ID09PSBudWxsKSBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdDtcbn1cbnZhciBfdHlwZW9mID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgXCJAc3djL2hlbHBlcnMgLSB0eXBlb2ZcIjtcbiAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbn07XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkge1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7XG4gICAgdHJ5IHtcbiAgICAgICAgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbigpIHt9KSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7XG4gICAgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkge1xuICAgICAgICB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDtcbiAgICAgICAgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHtcbiAgICAgICAgICAgIHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7XG4gICAgICAgICAgICByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTtcbiAgICB9O1xufVxudmFyIFRlcm1pbmFsU3ltYm9sUGFydCA9IC8qI19fUFVSRV9fKi8gZnVuY3Rpb24oVGVybWluYWxQYXJ0KSB7XG4gICAgX2luaGVyaXRzKFRlcm1pbmFsU3ltYm9sUGFydCwgVGVybWluYWxQYXJ0KTtcbiAgICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFRlcm1pbmFsU3ltYm9sUGFydCk7XG4gICAgZnVuY3Rpb24gVGVybWluYWxTeW1ib2xQYXJ0KGNvbnRlbnQpIHtcbiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFRlcm1pbmFsU3ltYm9sUGFydCk7XG4gICAgICAgIHZhciBfdGhpcztcbiAgICAgICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKTtcbiAgICAgICAgX3RoaXMuY29udGVudCA9IGNvbnRlbnQ7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgX2NyZWF0ZUNsYXNzKFRlcm1pbmFsU3ltYm9sUGFydCwgW1xuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwicGFyc2VcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHBhcnNlZDtcbiAgICAgICAgICAgICAgICB2YXIgdGVybWluYWxOb2RlID0gbnVsbDtcbiAgICAgICAgICAgICAgICB2YXIgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKSwgbmV4dFNpZ25pZmljYW50VG9rZW4gPSBzdGF0ZS5nZXROZXh0U2lnbmlmaWNhbnRUb2tlbigpLCBzaWduaWZpY2FudFRva2VuID0gbmV4dFNpZ25pZmljYW50VG9rZW47IC8vL1xuICAgICAgICAgICAgICAgIGlmIChzaWduaWZpY2FudFRva2VuICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb250ZW50ID0gc2lnbmlmaWNhbnRUb2tlbi5nZXRDb250ZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50ID09PSB0aGlzLmNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IF90ZXJtaW5hbDEuZGVmYXVsdC5mcm9tU2lnbmlmaWNhbnRUb2tlbihzaWduaWZpY2FudFRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwYXJzZWQgPSB0ZXJtaW5hbE5vZGUgIT09IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICAgICAgICAgICAgICBub2Rlcy5wdXNoKHRlcm1pbmFsTm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkID0gY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiYXNTdHJpbmdcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBhc1N0cmluZygpIHtcbiAgICAgICAgICAgICAgICB2YXIgY29udGVudCA9IHRoaXMuY29udGVudC5yZXBsYWNlKC9cXFxcLywgXCJcXFxcXFxcXFwiKSwgc3RyaW5nID0gXCJcXFwiXCIuY29uY2F0KGNvbnRlbnQsIFwiXFxcIlwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiY2xvbmVcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjbG9uZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX2dldChfZ2V0UHJvdG90eXBlT2YoVGVybWluYWxTeW1ib2xQYXJ0LnByb3RvdHlwZSksIFwiY2xvbmVcIiwgdGhpcykuY2FsbCh0aGlzLCBUZXJtaW5hbFN5bWJvbFBhcnQsIHRoaXMuY29udGVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICBdKTtcbiAgICByZXR1cm4gVGVybWluYWxTeW1ib2xQYXJ0O1xufShfdGVybWluYWwuZGVmYXVsdCk7XG5leHBvcnRzLmRlZmF1bHQgPSBUZXJtaW5hbFN5bWJvbFBhcnQ7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUwzTnlZeTl3WVhKMEwzUmxjbTFwYm1Gc0wzUmxjbTFwYm1Gc1UzbHRZbTlzTG1weklsMHNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbHdpZFhObElITjBjbWxqZEZ3aU8xeHVYRzVwYlhCdmNuUWdWR1Z5YldsdVlXeFFZWEowSUdaeWIyMGdYQ0l1TGk4dUxpOXdZWEowTDNSbGNtMXBibUZzWENJN1hHNXBiWEJ2Y25RZ1ZHVnliV2x1WVd4T2IyUmxJR1p5YjIwZ1hDSXVMaTh1TGk5dWIyUmxMM1JsY20xcGJtRnNYQ0k3WEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUdOc1lYTnpJRlJsY20xcGJtRnNVM2x0WW05c1VHRnlkQ0JsZUhSbGJtUnpJRlJsY20xcGJtRnNVR0Z5ZENCN1hHNGdJR052Ym5OMGNuVmpkRzl5S0dOdmJuUmxiblFwSUh0Y2JpQWdJQ0J6ZFhCbGNpZ3BPMXh1SUNBZ0lGeHVJQ0FnSUhSb2FYTXVZMjl1ZEdWdWRDQTlJR052Ym5SbGJuUTdYRzRnSUgxY2JseHVJQ0J3WVhKelpTaHViMlJsY3l3Z2MzUmhkR1VzSUdOaGJHeGlZV05yS1NCN1hHNGdJQ0FnYkdWMElIQmhjbk5sWkR0Y2JseHVJQ0FnSUd4bGRDQjBaWEp0YVc1aGJFNXZaR1VnUFNCdWRXeHNPMXh1SUNBZ0lGeHVJQ0FnSUdOdmJuTjBJSE5oZG1Wa1NXNWtaWGdnUFNCemRHRjBaUzVuWlhSVFlYWmxaRWx1WkdWNEtDa3NYRzVjZEZ4MElDQWdJQ0FnYm1WNGRGTnBaMjVwWm1sallXNTBWRzlyWlc0Z1BTQnpkR0YwWlM1blpYUk9aWGgwVTJsbmJtbG1hV05oYm5SVWIydGxiaWdwTEZ4dVhIUmNkRngwWEhSY2RITnBaMjVwWm1sallXNTBWRzlyWlc0Z1BTQnVaWGgwVTJsbmJtbG1hV05oYm5SVWIydGxianNnTHk4dlhHNWNiaUFnSUNCcFppQW9jMmxuYm1sbWFXTmhiblJVYjJ0bGJpQWhQVDBnYm5Wc2JDa2dlMXh1SUNBZ0lDQWdZMjl1YzNRZ1kyOXVkR1Z1ZENBOUlITnBaMjVwWm1sallXNTBWRzlyWlc0dVoyVjBRMjl1ZEdWdWRDZ3BPMXh1WEc0Z0lDQWdJQ0JwWmlBb1kyOXVkR1Z1ZENBOVBUMGdkR2hwY3k1amIyNTBaVzUwS1NCN1hHNGdJQ0FnSUNBZ0lIUmxjbTFwYm1Gc1RtOWtaU0E5SUZSbGNtMXBibUZzVG05a1pTNW1jbTl0VTJsbmJtbG1hV05oYm5SVWIydGxiaWh6YVdkdWFXWnBZMkZ1ZEZSdmEyVnVLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzVjYmlBZ0lDQndZWEp6WldRZ1BTQW9kR1Z5YldsdVlXeE9iMlJsSUNFOVBTQnVkV3hzS1R0Y2JseHVJQ0FnSUdsbUlDaHdZWEp6WldRcElIdGNiaUFnSUNBZ0lHNXZaR1Z6TG5CMWMyZ29kR1Z5YldsdVlXeE9iMlJsS1R0Y2JseHVJQ0FnSUNBZ2FXWWdLR05oYkd4aVlXTnJJQ0U5UFNCdWRXeHNLU0I3WEc0Z0lDQWdJQ0FnSUhCaGNuTmxaQ0E5SUdOaGJHeGlZV05yS0NrN1hHNWNiaUFnSUNBZ0lDQWdhV1lnS0NGd1lYSnpaV1FwSUh0Y2JpQWdJQ0FnSUNBZ0lDQnViMlJsY3k1d2IzQW9LVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmx4dUlDQWdJR2xtSUNnaGNHRnljMlZrS1NCN1hHNGdJQ0FnSUNCemRHRjBaUzVpWVdOcmRISmhZMnNvYzJGMlpXUkpibVJsZUNrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnY21WMGRYSnVJSEJoY25ObFpEdGNiaUFnZlZ4dUlDQmNiaUFnWVhOVGRISnBibWNvS1NCN1hHNGdJQ0FnWTI5dWMzUWdZMjl1ZEdWdWRDQTlJSFJvYVhNdVkyOXVkR1Z1ZEM1eVpYQnNZV05sS0M5Y1hGeGNMeXdnWENKY1hGeGNYRnhjWEZ3aUtTeGNiaUFnSUNBZ0lDQWdJQ0J6ZEhKcGJtY2dQU0JnWENJa2UyTnZiblJsYm5SOVhDSmdPMXh1SUNBZ0lGeHVJQ0FnSUhKbGRIVnliaUJ6ZEhKcGJtYzdYRzRnSUgxY2JseHVJQ0JqYkc5dVpTZ3BJSHNnY21WMGRYSnVJSE4xY0dWeUxtTnNiMjVsS0ZSbGNtMXBibUZzVTNsdFltOXNVR0Z5ZEN3Z2RHaHBjeTVqYjI1MFpXNTBLVHNnZlZ4dWZWeHVJbDBzSW01aGJXVnpJanBiSWxSbGNtMXBibUZzVTNsdFltOXNVR0Z5ZENJc0ltTnZiblJsYm5RaUxDSndZWEp6WlNJc0ltNXZaR1Z6SWl3aWMzUmhkR1VpTENKallXeHNZbUZqYXlJc0luQmhjbk5sWkNJc0luUmxjbTFwYm1Gc1RtOWtaU0lzSW5OaGRtVmtTVzVrWlhnaUxDSm5aWFJUWVhabFpFbHVaR1Y0SWl3aWJtVjRkRk5wWjI1cFptbGpZVzUwVkc5clpXNGlMQ0puWlhST1pYaDBVMmxuYm1sbWFXTmhiblJVYjJ0bGJpSXNJbk5wWjI1cFptbGpZVzUwVkc5clpXNGlMQ0puWlhSRGIyNTBaVzUwSWl3aVZHVnliV2x1WVd4T2IyUmxJaXdpWm5KdmJWTnBaMjVwWm1sallXNTBWRzlyWlc0aUxDSndkWE5vSWl3aWNHOXdJaXdpWW1GamEzUnlZV05ySWl3aVlYTlRkSEpwYm1jaUxDSnlaWEJzWVdObElpd2ljM1J5YVc1bklpd2lZMnh2Ym1VaUxDSlVaWEp0YVc1aGJGQmhjblFpWFN3aWJXRndjR2x1WjNNaU9pSkJRVUZCTEVOQlFWa3NWMEZCUVN4RFFVRkRPenM3UlR0M1FqdEJRVVZaTEVkQlFYRkNMRU5CUVhKQ0xGTkJRWEZDTzBGQlEzSkNMRWRCUVhGQ0xFTkJRWEpDTEZWQlFYRkNPenM3T3pzN096czdPenM3T3pzN09FUTdjME03TmtRN2FVVTdPenM3ZDBVN1owVTdPenM3T3pCQ096czdPenM3T3pzN08xTTdPenM3T3pzN1N6czdPenM3T3pzN096czdPenROTzNsRU96czdPenM3T3pzN096czdPenM3ZFVJN08wczdPenM3TzNkRE96czdPenM3TWtJN096czdPenM3TzNGR096czdPenM3T3pzN096czdiVVU3TzJsRU96czdPenRKUVVWNlFrRXNhMEpCUVd0Q0xHbENRVUY0UWl4UlFVRlJPeXRET3p0aFFVRkdRU3hyUWtGQmEwSXNRMEZEZWtKRExFOUJRVTg3YVVRN08ybERRMDV5UWl4RFJFOVpPMk5CUlVoQkxFOUJRVThzUjBGQlIwRXNUMEZCVHl4RFFVRkRPenM3T3p0WlFVZDZRa01zUjBGQlN5eEZRVUZNUVN4RFFVRkxPMjFDUVVGTVFTeFJRVUZSTEVOQlFWSkJMRXRCUVVzc1EwRkJRME1zUzBGQlN5eEZRVUZGUXl4TFFVRkxMRVZCUVVWRExGRkJRVkVzUlVGQlJTeERRVUZETzJkQ1FVTTNRaXhIUVVGSExFTkJRVU5ETEUxQlFVMDdaMEpCUlZZc1IwRkJSeXhEUVVGRFF5eFpRVUZaTEVkQlFVY3NTVUZCU1R0blFrRkZka0lzUjBGQlN5eERRVUZEUXl4VlFVRlZMRWRCUVVkS0xFdEJRVXNzUTBGQlEwc3NZVUZCWVN4SlFVTnNRME1zYjBKQlFXOUNMRWRCUVVkT0xFdEJRVXNzUTBGQlEwOHNkVUpCUVhWQ0xFbEJRM1pFUXl4blFrRkJaMElzUjBGQlIwWXNiMEpCUVc5Q0xFVkJRVVVzUlVGQlJ5eEJRVUZJTEVOQlFVYzdaMEpCUlRkRExFVkJRVVVzUlVGQlJVVXNaMEpCUVdkQ0xFdEJRVXNzU1VGQlNTeEZRVUZGTEVOQlFVTTdiMEpCUXpsQ0xFZEJRVXNzUTBGQlExZ3NUMEZCVHl4SFFVRkhWeXhuUWtGQlowSXNRMEZCUTBNc1ZVRkJWVHR2UWtGRk0wTXNSVUZCUlN4RlFVRkZXaXhQUVVGUExFdEJRVXNzU1VGQlNTeERRVUZEUVN4UFFVRlBMRVZCUVVVc1EwRkJRenQzUWtGRE4wSk5MRmxCUVZrc1IwRkJSMDhzVlVGQldTeFRRVUZEUXl4dlFrRkJiMElzUTBGQlEwZ3NaMEpCUVdkQ0xFTkJRVU1zUTBGQlF6dHZRa0ZEY2tVc1EwRkJRenRuUWtGRFNDeERRVUZETzJkQ1FVVkVUaXhOUVVGTkxFZEJRVWxETEZsQlFWa3NTMEZCU3l4SlFVRkpMRUZCUVVNc1EwRkJRenRuUWtGRmFrTXNSVUZCUlN4RlFVRkZSQ3hOUVVGTkxFVkJRVVVzUTBGQlF6dHZRa0ZEV0Vnc1MwRkJTeXhEUVVGRFlTeEpRVUZKTEVOQlFVTlVMRmxCUVZrc1EwRkJReXhEUVVGRE8yOUNRVVY2UWl4RlFVRkZMRVZCUVVWR0xGRkJRVkVzUzBGQlN5eEpRVUZKTEVWQlFVVXNRMEZCUXp0M1FrRkRkRUpETEUxQlFVMHNSMEZCUjBRc1VVRkJVU3hGUVVGRkxFTkJRVU03ZDBKQlJYQkNMRVZCUVVVc1IwRkJSME1zVFVGQlRTeEZRVUZGTEVOQlFVTTdORUpCUTFwSUxFdEJRVXNzUTBGQlEyTXNSMEZCUnl4RlFVRkZMRU5CUVVNN2QwSkJRMlFzUTBGQlF6dHZRa0ZEU0N4RFFVRkRPMmRDUVVOSUxFTkJRVU03WjBKQlJVUXNSVUZCUlN4SFFVRkhXQ3hOUVVGTkxFVkJRVVVzUTBGQlF6dHZRa0ZEV2tZc1MwRkJTeXhEUVVGRFl5eFRRVUZUTEVOQlFVTldMRlZCUVZVc1EwRkJReXhEUVVGRE8yZENRVU01UWl4RFFVRkRPMmRDUVVWRUxFMUJRVTBzUTBGQlEwWXNUVUZCVFR0WlFVTm1MRU5CUVVNN096dFpRVVZFWVN4SFFVRlJMRVZCUVZKQkxFTkJRVkU3YlVKQlFWSkJMRkZCUVZFc1EwRkJVa0VzVVVGQlVTeEhRVUZITEVOQlFVTTdaMEpCUTFZc1IwRkJTeXhEUVVGRGJFSXNUMEZCVHl4SFFVRkhMRWxCUVVrc1EwRkJRMEVzVDBGQlR5eERRVUZEYlVJc1QwRkJUeXhQUVVGUExFTkJRVTBzVVVGRE0wTkRMRTFCUVUwc1IwRkJTU3hEUVVGRExFbEJRVlVzVFVGQlF5eERRVUZVY0VJc1QwRkJUeXhGUVVGRExFTkJRVU03WjBKQlJUVkNMRTFCUVUwc1EwRkJRMjlDTEUxQlFVMDdXVUZEWml4RFFVRkRPenM3V1VGRlJFTXNSMEZCU3l4RlFVRk1RU3hEUVVGTE8yMUNRVUZNUVN4UlFVRlJMRU5CUVZKQkxFdEJRVXNzUjBGQlJ5eERRVUZETzJkQ1FVRkRMRTFCUVUwc2MwSkJjRVJIZEVJc2EwSkJRV3RDTEdGQmIwUmtjMElzUTBGQlN5eFJRVUZZTEVsQlFVc3NZVUZCVDNSQ0xHdENRVUZyUWl4RlFVRkZMRWxCUVVrc1EwRkJRME1zVDBGQlR6dFpRVUZITEVOQlFVTTdPMDA3TzBWQmNFUnVRbk5DTEZOQlFWazdhMEpCUVhaRGRrSXNhMEpCUVd0Q0xFRWlmUT09IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcblxuaW1wb3J0IHsgTmFtZVJ1bGVOYW1lLCBEZWZpbml0aW9uc1J1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IHNlcGFyYXRvciwgdGVybWluYXRvciB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHNlcGFyYXRvclRlcm1pbmFsU3ltYm9sQ29udGVudCA9IHNlcGFyYXRvcixcbiAgICAgICAgICB0ZXJtaW5hdG9yVGVybWluYWxTeW1ib2xDb250ZW50ID0gdGVybWluYXRvcixcbiAgICAgICAgICBuYW1lUnVsZU5hbWUgPSBOYW1lUnVsZU5hbWUsXG4gICAgICAgICAgZGVmaW5pdGlvbnNSdWxlTmFtZSA9IERlZmluaXRpb25zUnVsZU5hbWUsXG4gICAgICAgICAgbmFtZVJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQobmFtZVJ1bGVOYW1lKSxcbiAgICAgICAgICBzZXBhcmF0b3JUZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KHNlcGFyYXRvclRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgZGVmaW5pdGlvbnNSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KGRlZmluaXRpb25zUnVsZU5hbWUpLFxuICAgICAgICAgIHRlcm1pbmF0b3JUZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KHRlcm1pbmF0b3JUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgbmFtZVJ1bGVOYW1lUGFydCxcbiAgICAgICAgICAgIHNlcGFyYXRvclRlcm1pbmFsU3ltYm9sUGFydCxcbiAgICAgICAgICAgIGRlZmluaXRpb25zUnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgdGVybWluYXRvclRlcm1pbmFsU3ltYm9sUGFydFxuICAgICAgICAgIF07XG4gICAgXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBSdWxlQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvcnVsZVwiO1xuaW1wb3J0IFJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3J1bGVcIjtcblxuaW1wb3J0IHsgUnVsZVJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBydWxlRGVmaW5pdGlvbiA9IG5ldyBSdWxlRGVmaW5pdGlvbigpLFxuICAgICAgICAgIG5hbWUgPSBSdWxlUnVsZU5hbWUsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBydWxlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFJ1bGVCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVycm9yQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhFcnJvckJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbFwiO1xuaW1wb3J0IFRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS90ZXJtaW5hbFwiO1xuXG5jb25zdCB7IHdpbGRjYXJkIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2lsZGNhcmRQYXJ0IGV4dGVuZHMgVGVybWluYWxQYXJ0IHtcbiAgcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBsZXQgdGVybWluYWxOb2RlID0gbnVsbDtcbiAgICBcbiAgICBjb25zdCBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpLFxuXHRcdCAgICAgIG5leHRTaWduaWZpY2FudFRva2VuID0gc3RhdGUuZ2V0TmV4dFNpZ25pZmljYW50VG9rZW4oKSxcblx0XHRcdFx0XHRzaWduaWZpY2FudFRva2VuID0gbmV4dFNpZ25pZmljYW50VG9rZW47IC8vL1xuXG4gICAgaWYgKHNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgIHRlcm1pbmFsTm9kZSA9IFRlcm1pbmFsTm9kZS5mcm9tU2lnbmlmaWNhbnRUb2tlbihzaWduaWZpY2FudFRva2VuKTtcbiAgICB9XG5cbiAgICBwYXJzZWQgPSAodGVybWluYWxOb2RlICE9PSBudWxsKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIG5vZGVzLnB1c2godGVybWluYWxOb2RlKTtcblxuICAgICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgIHBhcnNlZCA9IGNhbGxiYWNrKCk7XG5cbiAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICBub2Rlcy5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IHdpbGRjYXJkOyAgLy8vXG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgY2xvbmUoKSB7IHJldHVybiBzdXBlci5jbG9uZShXaWxkY2FyZFBhcnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgV2lsZGNhcmRQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3dpbGRjYXJkXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVycm9yRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCB3aWxkY2FyZFBhcnQgPSBuZXcgV2lsZGNhcmRQYXJ0KCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICB3aWxkY2FyZFBhcnRcbiAgICAgICAgICBdO1xuXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBFcnJvckJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL2Vycm9yXCI7XG5pbXBvcnQgRXJyb3JEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL2Vycm9yXCI7XG5cbmltcG9ydCB7IEVycm9yUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVycm9yUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBlcnJvckRlZmluaXRpb24gPSBuZXcgRXJyb3JEZWZpbml0aW9uKCksXG4gICAgICAgICAgbmFtZSA9IEVycm9yUnVsZU5hbWUsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBlcnJvckRlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBFcnJvckJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbVwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBSdWxlUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvY3VtZW50Qk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUnVsZXMoUnVsZSkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBydWxlTm9kZXMgPSBjaGlsZE5vZGVzLnJlZHVjZSgocnVsZU5vZGVzLCBjaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZU5vblRlcm1pbmFsTm9kZSA9IGNoaWxkTm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gICAgICAgICAgICBpZiAoY2hpbGROb2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IGNoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgICAgICAgICAgICBydWxlTmFtZSA9IGNoaWxkTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgICAgICAgICAgICBydWxlTmFtZVJ1bGVSdWxlTmFtZSA9IChydWxlTmFtZSA9PT0gUnVsZVJ1bGVOYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgbm9uVGVybWluYWxOb2RlUnVsZU5vZGUgPSBydWxlTmFtZVJ1bGVSdWxlTmFtZTsgIC8vL1xuXG4gICAgICAgICAgICAgIGlmIChub25UZXJtaW5hbE5vZGVSdWxlTm9kZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJ1bGVOb2RlID0gbm9uVGVybWluYWxOb2RlOyAvLy9cblxuICAgICAgICAgICAgICAgIHJ1bGVOb2Rlcy5wdXNoKHJ1bGVOb2RlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcnVsZU5vZGVzO1xuICAgICAgICAgIH0sIFtdKSxcbiAgICAgICAgICBydWxlcyA9IHJ1bGVOb2Rlcy5tYXAoKHJ1bGVOb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBydWxlID0gcnVsZU5vZGUuZ2VuZXJhdGVSdWxlKFJ1bGUpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gcnVsZTtcbiAgICAgICAgICB9KTtcbiAgICBcbiAgICByZXR1cm4gcnVsZXM7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoRG9jdW1lbnRCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfbm9uVGVybWluYWwgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsXCIpKTtcbnZhciBfcGFydFR5cGVzID0gcmVxdWlyZShcIi4uLy4uL3BhcnRUeXBlc1wiKTtcbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCIpO1xuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gICAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gICAgfVxuICAgIHJldHVybiBzZWxmO1xufVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG59XG5mdW5jdGlvbiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ICE9PSBcInVuZGVmaW5lZFwiICYmIFJlZmxlY3QuZ2V0KSB7XG4gICAgICAgIF9nZXQgPSBSZWZsZWN0LmdldDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBfZ2V0ID0gZnVuY3Rpb24gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlcikge1xuICAgICAgICAgICAgdmFyIGJhc2UgPSBfc3VwZXJQcm9wQmFzZSh0YXJnZXQsIHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmICghYmFzZSkgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGJhc2UsIHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmIChkZXNjLmdldCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZXNjLmdldC5jYWxsKHJlY2VpdmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkZXNjLnZhbHVlO1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlciB8fCB0YXJnZXQpO1xufVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgICAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICAgIH07XG4gICAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn1cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICAgIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICAgIH1cbiAgICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHtcbiAgICAgICAgZGVmYXVsdDogb2JqXG4gICAgfTtcbn1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgICAgICByZXR1cm4gY2FsbDtcbiAgICB9XG4gICAgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgICAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgICAgIHJldHVybiBvO1xuICAgIH07XG4gICAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cbmZ1bmN0aW9uIF9zdXBlclByb3BCYXNlKG9iamVjdCwgcHJvcGVydHkpIHtcbiAgICB3aGlsZSghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpKXtcbiAgICAgICAgb2JqZWN0ID0gX2dldFByb3RvdHlwZU9mKG9iamVjdCk7XG4gICAgICAgIGlmIChvYmplY3QgPT09IG51bGwpIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xufVxudmFyIF90eXBlb2YgPSBmdW5jdGlvbihvYmopIHtcbiAgICBcIkBzd2MvaGVscGVycyAtIHR5cGVvZlwiO1xuICAgIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xufTtcbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgICBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uKCkge30pKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHtcbiAgICB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7XG4gICAgICAgIHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0O1xuICAgICAgICBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkge1xuICAgICAgICAgICAgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgIHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpO1xuICAgIH07XG59XG52YXIgQ2hvaWNlT2ZQYXJ0c1BhcnQgPSAvKiNfX1BVUkVfXyovIGZ1bmN0aW9uKE5vblRlcm1pbmFsUGFydCkge1xuICAgIF9pbmhlcml0cyhDaG9pY2VPZlBhcnRzUGFydCwgTm9uVGVybWluYWxQYXJ0KTtcbiAgICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKENob2ljZU9mUGFydHNQYXJ0KTtcbiAgICBmdW5jdGlvbiBDaG9pY2VPZlBhcnRzUGFydChwYXJ0cykge1xuICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ2hvaWNlT2ZQYXJ0c1BhcnQpO1xuICAgICAgICB2YXIgX3RoaXM7XG4gICAgICAgIHZhciB0eXBlID0gX3BhcnRUeXBlcy5DaG9pY2VPZlBhcnRzUGFydFR5cGU7IC8vL1xuICAgICAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHR5cGUpO1xuICAgICAgICBfdGhpcy5wYXJ0cyA9IHBhcnRzO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIF9jcmVhdGVDbGFzcyhDaG9pY2VPZlBhcnRzUGFydCwgW1xuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiZ2V0UGFydHNcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRQYXJ0cygpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJ0cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcInBhcnNlXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHZhciBwYXJzZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXJ0cy5zb21lKGZ1bmN0aW9uKHBhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkID0gcGFydC5wYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiYXNTdHJpbmdcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBhc1N0cmluZygpIHtcbiAgICAgICAgICAgICAgICB2YXIgcGFydHNTdHJpbmcxID0gdGhpcy5wYXJ0cy5yZWR1Y2UoZnVuY3Rpb24ocGFydHNTdHJpbmcsIHBhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnRTdHJpbmcgPSBwYXJ0LmFzU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJ0c1N0cmluZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFydHNTdHJpbmcgPSBwYXJ0U3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFydHNTdHJpbmcgPSBcIlwiLmNvbmNhdChwYXJ0c1N0cmluZywgXCIgfCBcIikuY29uY2F0KHBhcnRTdHJpbmcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJ0c1N0cmluZztcbiAgICAgICAgICAgICAgICB9LCBudWxsKSwgc3RyaW5nID0gXCIoIFwiLmNvbmNhdChwYXJ0c1N0cmluZzEsIFwiIClcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImNsb25lXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xvbmUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9nZXQoX2dldFByb3RvdHlwZU9mKENob2ljZU9mUGFydHNQYXJ0LnByb3RvdHlwZSksIFwiY2xvbmVcIiwgdGhpcykuY2FsbCh0aGlzLCBDaG9pY2VPZlBhcnRzUGFydCwgdGhpcy5wYXJ0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICBdLCBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJmcm9tTm9kZXNcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBmcm9tTm9kZXMobm9kZXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgYWxsQnV0Rmlyc3RBbmRMYXN0Tm9kZXMgPSAoMCwgX2FycmF5KS5hbGxCdXRGaXJzdEFuZExhc3Qobm9kZXMpO1xuICAgICAgICAgICAgICAgIG5vZGVzID0gYWxsQnV0Rmlyc3RBbmRMYXN0Tm9kZXM7IC8vL1xuICAgICAgICAgICAgICAgIHZhciBldmVuTm9kZXMgPSAoMCwgX2FycmF5KS5ldmVuKG5vZGVzKTtcbiAgICAgICAgICAgICAgICBub2RlcyA9IGV2ZW5Ob2RlczsgLy8vXG4gICAgICAgICAgICAgICAgdmFyIGxvb2tBaGVhZCA9IGZhbHNlLCBwYXJ0cyA9IG5vZGVzLm1hcChmdW5jdGlvbihub2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwYXJ0ID0gbm9kZS5nZW5lcmF0ZVBhcnQobG9va0FoZWFkKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnQ7XG4gICAgICAgICAgICAgICAgfSksIGNob2ljZU9mUGFydHNQYXJ0ID0gbmV3IENob2ljZU9mUGFydHNQYXJ0KHBhcnRzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2hvaWNlT2ZQYXJ0c1BhcnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICBdKTtcbiAgICByZXR1cm4gQ2hvaWNlT2ZQYXJ0c1BhcnQ7XG59KF9ub25UZXJtaW5hbC5kZWZhdWx0KTtcbmV4cG9ydHMuZGVmYXVsdCA9IENob2ljZU9mUGFydHNQYXJ0O1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUx5NHVMM055WXk5d1lYSjBMMjV2YmxSbGNtMXBibUZzTDJOb2IybGpaVTltVUdGeWRITXVhbk1pWFN3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaVhDSjFjMlVnYzNSeWFXTjBYQ0k3WEc1Y2JtbHRjRzl5ZENCT2IyNVVaWEp0YVc1aGJGQmhjblFnWm5KdmJTQmNJaTR1THk0dUwzQmhjblF2Ym05dVZHVnliV2x1WVd4Y0lqdGNibHh1YVcxd2IzSjBJSHNnUTJodmFXTmxUMlpRWVhKMGMxQmhjblJVZVhCbElIMGdabkp2YlNCY0lpNHVMeTR1TDNCaGNuUlVlWEJsYzF3aU8xeHVhVzF3YjNKMElIc2daWFpsYml3Z1lXeHNRblYwUm1seWMzUkJibVJNWVhOMElIMGdabkp2YlNCY0lpNHVMeTR1TDNWMGFXeHBkR2xsY3k5aGNuSmhlVndpTzF4dVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCamJHRnpjeUJEYUc5cFkyVlBabEJoY25SelVHRnlkQ0JsZUhSbGJtUnpJRTV2YmxSbGNtMXBibUZzVUdGeWRDQjdYRzRnSUdOdmJuTjBjblZqZEc5eUtIQmhjblJ6S1NCN1hHNGdJQ0FnWTI5dWMzUWdkSGx3WlNBOUlFTm9iMmxqWlU5bVVHRnlkSE5RWVhKMFZIbHdaVHNnTHk4dlhHNWNiaUFnSUNCemRYQmxjaWgwZVhCbEtUdGNiaUFnSUNCY2JpQWdJQ0IwYUdsekxuQmhjblJ6SUQwZ2NHRnlkSE03WEc0Z0lIMWNiaUFnWEc0Z0lHZGxkRkJoY25SektDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbkJoY25Sek8xeHVJQ0I5WEc1Y2JpQWdjR0Z5YzJVb2JtOWtaWE1zSUhOMFlYUmxMQ0JqWVd4c1ltRmpheWtnZTF4dUlDQWdJR3hsZENCd1lYSnpaV1E3WEc1Y2JpQWdJQ0IwYUdsekxuQmhjblJ6TG5OdmJXVW9LSEJoY25RcElEMCtJSHRjYmlBZ0lDQWdJSEJoY25ObFpDQTlJSEJoY25RdWNHRnljMlVvYm05a1pYTXNJSE4wWVhSbExDQmpZV3hzWW1GamF5azdYRzVjYmlBZ0lDQWdJR2xtSUNod1lYSnpaV1FwSUh0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhSeWRXVTdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZTazdYRzVjYmlBZ0lDQnlaWFIxY200Z2NHRnljMlZrTzF4dUlDQjlYRzVjYmlBZ1lYTlRkSEpwYm1jb0tTQjdYRzRnSUNBZ1kyOXVjM1FnY0dGeWRITlRkSEpwYm1jZ1BTQjBhR2x6TG5CaGNuUnpMbkpsWkhWalpTZ29jR0Z5ZEhOVGRISnBibWNzSUhCaGNuUXBJRDArSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR052Ym5OMElIQmhjblJUZEhKcGJtY2dQU0J3WVhKMExtRnpVM1J5YVc1bktDazdYRzRnSUNBZ1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2NHRnlkSE5UZEhKcGJtY2dQVDA5SUc1MWJHd3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdjR0Z5ZEhOVGRISnBibWNnUFNCd1lYSjBVM1J5YVc1bk8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdjR0Z5ZEhOVGRISnBibWNnUFNCZ0pIdHdZWEowYzFOMGNtbHVaMzBnZkNBa2UzQmhjblJUZEhKcGJtZDlZRHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNCY2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQndZWEowYzFOMGNtbHVaenRjYmlBZ0lDQWdJQ0FnSUNCOUxDQnVkV3hzS1N4Y2JpQWdJQ0FnSUNBZ0lDQnpkSEpwYm1jZ1BTQmdLQ0FrZTNCaGNuUnpVM1J5YVc1bmZTQXBZRHRjYmlBZ0lDQmNiaUFnSUNCeVpYUjFjbTRnYzNSeWFXNW5PMXh1SUNCOVhHNWNiaUFnWTJ4dmJtVW9LU0I3SUhKbGRIVnliaUJ6ZFhCbGNpNWpiRzl1WlNoRGFHOXBZMlZQWmxCaGNuUnpVR0Z5ZEN3Z2RHaHBjeTV3WVhKMGN5azdJSDFjYmx4dUlDQnpkR0YwYVdNZ1puSnZiVTV2WkdWektHNXZaR1Z6S1NCN1hHNGdJQ0FnWTI5dWMzUWdZV3hzUW5WMFJtbHljM1JCYm1STVlYTjBUbTlrWlhNZ1BTQmhiR3hDZFhSR2FYSnpkRUZ1WkV4aGMzUW9ibTlrWlhNcE8xeHVYRzRnSUNBZ2JtOWtaWE1nUFNCaGJHeENkWFJHYVhKemRFRnVaRXhoYzNST2IyUmxjenNnSUM4dkwxeHVJQ0FnSUZ4dUlDQWdJR052Ym5OMElHVjJaVzVPYjJSbGN5QTlJR1YyWlc0b2JtOWtaWE1wTzF4dVhHNGdJQ0FnYm05a1pYTWdQU0JsZG1WdVRtOWtaWE03SUNBdkx5OWNibHh1SUNBZ0lHTnZibk4wSUd4dmIydEJhR1ZoWkNBOUlHWmhiSE5sTEZ4dUlDQWdJQ0FnSUNBZ0lIQmhjblJ6SUQwZ2JtOWtaWE11YldGd0tDaHViMlJsS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0J3WVhKMElEMGdibTlrWlM1blpXNWxjbUYwWlZCaGNuUW9iRzl2YTBGb1pXRmtLVHRjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlIQmhjblE3WEc0Z0lDQWdJQ0FnSUNBZ2ZTa3NYRzRnSUNBZ0lDQWdJQ0FnWTJodmFXTmxUMlpRWVhKMGMxQmhjblFnUFNCdVpYY2dRMmh2YVdObFQyWlFZWEowYzFCaGNuUW9jR0Z5ZEhNcE8xeHVYRzRnSUNBZ2NtVjBkWEp1SUdOb2IybGpaVTltVUdGeWRITlFZWEowTzF4dUlDQjlYRzU5WEc0aVhTd2libUZ0WlhNaU9sc2lRMmh2YVdObFQyWlFZWEowYzFCaGNuUWlMQ0p3WVhKMGN5SXNJblI1Y0dVaUxDSkRhRzlwWTJWUFpsQmhjblJ6VUdGeWRGUjVjR1VpTENKblpYUlFZWEowY3lJc0luQmhjbk5sSWl3aWJtOWtaWE1pTENKemRHRjBaU0lzSW1OaGJHeGlZV05ySWl3aWNHRnljMlZrSWl3aWMyOXRaU0lzSW5CaGNuUWlMQ0poYzFOMGNtbHVaeUlzSW5CaGNuUnpVM1J5YVc1bklpd2ljbVZrZFdObElpd2ljR0Z5ZEZOMGNtbHVaeUlzSW5OMGNtbHVaeUlzSW1Oc2IyNWxJaXdpWm5KdmJVNXZaR1Z6SWl3aVlXeHNRblYwUm1seWMzUkJibVJNWVhOMFRtOWtaWE1pTENKaGJHeENkWFJHYVhKemRFRnVaRXhoYzNRaUxDSmxkbVZ1VG05a1pYTWlMQ0psZG1WdUlpd2liRzl2YTBGb1pXRmtJaXdpYldGd0lpd2libTlrWlNJc0ltZGxibVZ5WVhSbFVHRnlkQ0lzSW1Ob2IybGpaVTltVUdGeWRITlFZWEowSWl3aVRtOXVWR1Z5YldsdVlXeFFZWEowSWwwc0ltMWhjSEJwYm1keklqb2lRVUZCUVN4RFFVRlpMRmRCUVVFc1EwRkJRenM3TzBVN2QwSTdRVUZGWlN4SFFVRjNRaXhEUVVGNFFpeFpRVUYzUWp0QlFVVmtMRWRCUVdsQ0xFTkJRV3BDTEZWQlFXbENPMEZCUTJRc1IwRkJkVUlzUTBGQmRrSXNUVUZCZFVJN096czdPenM3T3pzN096czdPenM0UkR0elF6czJSRHRwUlRzN096dDNSVHRuUlRzN096czdNRUk3T3pzN096czdPenM3VXpzN096czdPenRMT3pzN096czdPenM3T3pzN08wMDdlVVE3T3pzN096czdPenM3T3pzN096dDFRanM3U3pzN096czdkME03T3pzN096c3lRanM3T3pzN096czdjVVk3T3pzN096czdPenM3T3p0dFJUczdhVVE3T3pzN08wbEJSVE5EUVN4cFFrRkJhVUlzYVVKQlFYWkNMRkZCUVZFN2FVUTdPMkZCUVVaQkxHbENRVUZwUWl4RFFVTjRRa01zUzBGQlN6dG5SRHM3VVVGRFppeEhRVUZMTEVOQlFVTkRMRWxCUVVrc1IwRkJSME1zVlVGQmNVSXNkMEpCUVVVc1JVRkJSeXhCUVVGSUxFTkJRVWM3YTBOQlJXcERSQ3hKUVVGSkxFTkRXR1FzUTBSWFowSTdZMEZGVUVRc1MwRkJTeXhIUVVGSFFTeExRVUZMTEVOQlFVTTdPenM3TzFsQlIzSkNSeXhIUVVGUkxFVkJRVkpCTEVOQlFWRTdiVUpCUVZKQkxGRkJRVkVzUTBGQlVrRXNVVUZCVVN4SFFVRkhMRU5CUVVNN1owSkJRMVlzVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUTBnc1MwRkJTenRaUVVOdVFpeERRVUZET3pzN1dVRkZSRWtzUjBGQlN5eEZRVUZNUVN4RFFVRkxPMjFDUVVGTVFTeFJRVUZSTEVOQlFWSkJMRXRCUVVzc1EwRkJRME1zUzBGQlN5eEZRVUZGUXl4TFFVRkxMRVZCUVVWRExGRkJRVkVzUlVGQlJTeERRVUZETzJkQ1FVTTNRaXhIUVVGSExFTkJRVU5ETEUxQlFVMDdaMEpCUlZZc1NVRkJTU3hEUVVGRFVpeExRVUZMTEVOQlFVTlRMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVkJETEVsQlFVa3NSVUZCU3l4RFFVRkRPMjlDUVVONlFrWXNUVUZCVFN4SFFVRkhSU3hKUVVGSkxFTkJRVU5PTEV0QlFVc3NRMEZCUTBNc1MwRkJTeXhGUVVGRlF5eExRVUZMTEVWQlFVVkRMRkZCUVZFc1EwRkJReXhEUVVGRE8yOUNRVVUxUXl4RlFVRkZMRVZCUVVWRExFMUJRVTBzUlVGQlJTeERRVUZETzNkQ1FVTllMRTFCUVUwc1EwRkJReXhKUVVGSk8yOUNRVU5pTEVOQlFVTTdaMEpCUTBnc1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlJVZ3NUVUZCVFN4RFFVRkRRU3hOUVVGTk8xbEJRMllzUTBGQlF6czdPMWxCUlVSSExFZEJRVkVzUlVGQlVrRXNRMEZCVVR0dFFrRkJVa0VzVVVGQlVTeERRVUZTUVN4UlFVRlJMRWRCUVVjc1EwRkJRenRuUWtGRFZpeEhRVUZMTEVOQlFVTkRMRmxCUVZjc1IwRkJSeXhKUVVGSkxFTkJRVU5hTEV0QlFVc3NRMEZCUTJFc1RVRkJUU3hEUVVGRExGRkJRVkVzUTBGQlVFUXNWMEZCVnl4RlFVRkZSaXhKUVVGSkxFVkJRVXNzUTBGQlF6dHZRa0ZEZEVRc1IwRkJTeXhEUVVGRFNTeFZRVUZWTEVkQlFVZEtMRWxCUVVrc1EwRkJRME1zVVVGQlVUdHZRa0ZGYUVNc1JVRkJSU3hGUVVGRlF5eFhRVUZYTEV0QlFVc3NTVUZCU1N4RlFVRkZMRU5CUVVNN2QwSkJRM3BDUVN4WFFVRlhMRWRCUVVkRkxGVkJRVlVzUTBGQlF6dHZRa0ZETTBJc1EwRkJReXhOUVVGTkxFTkJRVU03ZDBKQlEwNUdMRmRCUVZjc1IwRkJTU3hEUVVGQkxFVkJRVzFDUlN4TlFVRlZMRU5CUVROQ1JpeFhRVUZYTEVWQlFVTXNRMEZCUnl4TlFVRmhMRTFCUVVFc1EwRkJXRVVzVlVGQlZTeERRVUZGTEVOQlFVTTdiMEpCUTJwRUxFTkJRVU03YjBKQlJVUXNUVUZCVFN4RFFVRkRSaXhYUVVGWE8yZENRVU53UWl4RFFVRkRMRVZCUVVVc1NVRkJTU3hIUVVOUVJ5eE5RVUZOTEVkQlFVa3NRMEZCUlN4SlFVRmpMRTFCUVVVc1EwRkJaRWdzV1VGQlZ5eEZRVUZETEVOQlFVVTdaMEpCUld4RExFMUJRVTBzUTBGQlEwY3NUVUZCVFR0WlFVTm1MRU5CUVVNN096dFpRVVZFUXl4SFFVRkxMRVZCUVV4QkxFTkJRVXM3YlVKQlFVeEJMRkZCUVZFc1EwRkJVa0VzUzBGQlN5eEhRVUZITEVOQlFVTTdaMEpCUVVNc1RVRkJUU3h6UWtFMVEwZHFRaXhwUWtGQmFVSXNZVUUwUTJKcFFpeERRVUZMTEZGQlFWZ3NTVUZCU3l4aFFVRlBha0lzYVVKQlFXbENMRVZCUVVVc1NVRkJTU3hEUVVGRFF5eExRVUZMTzFsQlFVY3NRMEZCUXpzN096dFpRVVYyUkdsQ0xFZEJRVk1zUlVGQlZFRXNRMEZCVXp0dFFrRkJhRUlzVVVGQlVTeERRVUZFUVN4VFFVRlRMRU5CUVVOYUxFdEJRVXNzUlVGQlJTeERRVUZETzJkQ1FVTjJRaXhIUVVGTExFTkJRVU5oTEhWQ1FVRjFRaXhQUVVGSFF5eE5RVUZyUWl4eFFrRkJRMlFzUzBGQlN6dG5Ra0ZGZUVSQkxFdEJRVXNzUjBGQlIyRXNkVUpCUVhWQ0xFTkJRVU1zUTBGQlJTeEZRVUZITEVGQlFVZ3NRMEZCUnp0blFrRkZja01zUjBGQlN5eERRVUZEUlN4VFFVRlRMRTlCUVVkRExFMUJRVWtzVDBGQlEyaENMRXRCUVVzN1owSkJSVFZDUVN4TFFVRkxMRWRCUVVkbExGTkJRVk1zUTBGQlF5eERRVUZGTEVWQlFVY3NRVUZCU0N4RFFVRkhPMmRDUVVWMlFpeEhRVUZMTEVOQlFVTkZMRk5CUVZNc1IwRkJSeXhMUVVGTExFVkJRMnBDZEVJc1MwRkJTeXhIUVVGSFN5eExRVUZMTEVOQlFVTnJRaXhIUVVGSExFTkJRVU1zVVVGQlVTeERRVUZRUXl4SlFVRkpMRVZCUVVzc1EwRkJRenR2UWtGRE0wSXNSMEZCU3l4RFFVRkRaQ3hKUVVGSkxFZEJRVWRqTEVsQlFVa3NRMEZCUTBNc1dVRkJXU3hEUVVGRFNDeFRRVUZUTzI5Q1FVVjRReXhOUVVGTkxFTkJRVU5hTEVsQlFVazdaMEpCUTJJc1EwRkJReXhIUVVORVowSXNhVUpCUVdsQ0xFZEJRVWNzUjBGQlJ5eERRVUZETTBJc2FVSkJRV2xDTEVOQlFVTkRMRXRCUVVzN1owSkJSWEpFTEUxQlFVMHNRMEZCUXpCQ0xHbENRVUZwUWp0WlFVTXhRaXhEUVVGRE96dE5PenRGUVdoRk5FTkRMRmxCUVdVN2EwSkJRWHBETlVJc2FVSkJRV2xDTEVFaWZRPT0iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgQ2hvaWNlT2ZQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvY2hvaWNlT2ZQYXJ0c1wiO1xuaW1wb3J0IE9uZU9yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9vbmVPck1vcmVQYXJ0c1wiO1xuXG5pbXBvcnQgeyBSdWxlUnVsZU5hbWUsIEVycm9yUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvY3VtZW50RGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBydWxlUnVsZU5hbWUgPSBSdWxlUnVsZU5hbWUsXG4gICAgICAgICAgZXJyb3JSdWxlTmFtZSA9IEVycm9yUnVsZU5hbWUsXG4gICAgICAgICAgcnVsZVJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocnVsZVJ1bGVOYW1lKSxcbiAgICAgICAgICBlcnJvclJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQoZXJyb3JSdWxlTmFtZSksXG4gICAgICAgICAgcnVsZVJ1bGVOYW1lQW5kRXJyb3JSdWxlTmFtZVBhcnRzID0gW1xuICAgICAgICAgICAgcnVsZVJ1bGVOYW1lUGFydCxcbiAgICAgICAgICAgIGVycm9yUnVsZU5hbWVQYXJ0XG4gICAgICAgICAgXSxcbiAgICAgICAgICBjaG9pY2VPZlJ1bGVSdWxlTmFtZUFuZEVycm9yUnVsZU5hbWVQYXJ0c1BhcnQgPSBuZXcgQ2hvaWNlT2ZQYXJ0c1BhcnQocnVsZVJ1bGVOYW1lQW5kRXJyb3JSdWxlTmFtZVBhcnRzKSxcbiAgICAgICAgICBvbmVPck1vcmVDaG9pY2VPZlJ1bGVSdWxlTmFtZUFuZEVycm9yUnVsZU5hbWVQYXJ0c1BhcnRzUGFydCA9IG5ldyBPbmVPck1vcmVQYXJ0c1BhcnQoY2hvaWNlT2ZSdWxlUnVsZU5hbWVBbmRFcnJvclJ1bGVOYW1lUGFydHNQYXJ0KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIG9uZU9yTW9yZUNob2ljZU9mUnVsZVJ1bGVOYW1lQW5kRXJyb3JSdWxlTmFtZVBhcnRzUGFydHNQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IERvY3VtZW50Qk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvZG9jdW1lbnRcIjtcbmltcG9ydCBEb2N1bWVudERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vZG9jdW1lbnRcIjtcblxuaW1wb3J0IHsgRG9jdW1lbnRSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG9jdW1lbnRSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IGRvY3VtZW50RGVmaW5pdGlvbiA9IG5ldyBEb2N1bWVudERlZmluaXRpb24oKSxcbiAgICAgICAgICBuYW1lID0gRG9jdW1lbnRSdWxlTmFtZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGRvY3VtZW50RGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IERvY3VtZW50Qk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IGZpcnN0IH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlTmFtZUJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgcnVsZU5hbWUgPSB0aGlzLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgcnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChydWxlTmFtZSwgbG9va0FoZWFkKTtcblxuICAgIHJldHVybiBydWxlTmFtZVBhcnQ7XG4gIH1cblxuICBnZXRSdWxlTmFtZSgpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgZmlyc3RDaGlsZE5vZGUgPSBmaXJzdChjaGlsZE5vZGVzKSxcbiAgICAgICAgICB0ZXJtaW5hbE5vZGUgPSBmaXJzdENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgIHRlcm1pbmFsTm9kZUNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpLFxuICAgICAgICAgIHJ1bGVOYW1lID0gdGVybWluYWxOb2RlQ29udGVudDsgLy8vXG4gICAgXG4gICAgcmV0dXJuIHJ1bGVOYW1lO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKFJ1bGVOYW1lQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgTmFtZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vbmFtZVwiO1xuaW1wb3J0IFJ1bGVOYW1lQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvcnVsZU5hbWVcIjtcblxuaW1wb3J0IHsgUnVsZU5hbWVSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZU5hbWVSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWVEZWZpbml0aW9uID0gbmV3IE5hbWVEZWZpbml0aW9uKCksXG4gICAgICAgICAgbmFtZSA9IFJ1bGVOYW1lUnVsZU5hbWUsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBuYW1lRGVmaW5pdGlvbiAgLy8vXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gUnVsZU5hbWVCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBXaWxkY2FyZFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWwvd2lsZGNhcmRcIjtcbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2lsZGNhcmRCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IHdpbGRjYXJkUGFydCA9IG5ldyBXaWxkY2FyZFBhcnQoKTtcblxuICAgIHJldHVybiB3aWxkY2FyZFBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoV2lsZGNhcmRCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxTeW1ib2xEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKGNvbnRlbnQpIHtcbiAgICBjb25zdCB0ZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KGNvbnRlbnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBXaWxkY2FyZEJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3dpbGRjYXJkXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3Rlcm1pbmFsU3ltYm9sXCI7XG5cbmltcG9ydCB7IFdpbGRjYXJkUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgd2lsZGNhcmQgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXaWxkY2FyZFJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3Qgd2lsZGNhcmRUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSB3aWxkY2FyZCxcbiAgICAgICAgICB3aWxkY2FyZFRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbiA9IG5ldyBUZXJtaW5hbFN5bWJvbERlZmluaXRpb24od2lsZGNhcmRUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIG5hbWUgPSBXaWxkY2FyZFJ1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgd2lsZGNhcmRUZXJtaW5hbFN5bWJvbERlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBXaWxkY2FyZEJORk5vZGU7XG5cbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuL3ZlcnRpY2FsQnJhbmNoXCI7XG5cbmNvbnN0IHsgRU5EX09GX0xJTkUgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRPZkxpbmVCTkZOb2RlUGFyc2VUcmVlIGV4dGVuZHMgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gRU5EX09GX0xJTkUsIC8vL1xuICAgICAgICAgIHN0cmluZ0xlbmd0aCA9IHN0cmluZy5sZW5ndGgsXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWVXaWR0aCA9IHN0cmluZ0xlbmd0aCwgLy8vXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tV2lkdGgodmVydGljYWxCcmFuY2hQYXJzZVRyZWVXaWR0aCksXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKSxcbiAgICAgICAgICB0ZXJtaW5hbE5vZGVQYXJzZVRyZWUgPSBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5mcm9tU3RyaW5nQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvbihFbmRPZkxpbmVCTkZOb2RlUGFyc2VUcmVlLCBzdHJpbmcsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pO1xuXG4gICAgdGVybWluYWxOb2RlUGFyc2VUcmVlLmFwcGVuZFRvVG9wKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlKTtcblxuICAgIGNvbnN0IGVuZE9mTGluZUJORk5vZGVQYXJzZVRyZWUgPSB0ZXJtaW5hbE5vZGVQYXJzZVRyZWU7IC8vL1xuXG4gICAgcmV0dXJuIGVuZE9mTGluZUJORk5vZGVQYXJzZVRyZWU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vdGVybWluYWxcIjtcbmltcG9ydCBFbmRPZkxpbmVCTkZOb2RlUGFyc2VUcmVlIGZyb20gXCIuLi8uLi9wYXJzZVRyZWUvZW5kT2ZMaW5lTm9kZVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZUJORk5vZGUgZXh0ZW5kcyBUZXJtaW5hbE5vZGUge1xuICBnZXRDb250ZW50KCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBFTVBUWV9TVFJJTkc7XG5cbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIGFzUGFyc2VUcmVlKHRva2Vucykge1xuICAgIGNvbnN0IGVuZE9mTGluZUJORk5vZGVQYXJzZVRyZWUgPSBFbmRPZkxpbmVCTkZOb2RlUGFyc2VUcmVlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgcGFyc2VUcmVlID0gZW5kT2ZMaW5lQk5GTm9kZVBhcnNlVHJlZTsgIC8vL1xuXG4gICAgcmV0dXJuIHBhcnNlVHJlZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tU2lnbmlmaWNhbnRUb2tlbihzaWduaWZpY2FudFRva2VuKSB7IHJldHVybiBUZXJtaW5hbE5vZGUuZnJvbVNpZ25pZmljYW50VG9rZW4oRW5kT2ZMaW5lQk5GTm9kZSwgc2lnbmlmaWNhbnRUb2tlbik7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBUZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWxcIjtcbmltcG9ydCBFbmRPZkxpbmVCTkZOb2RlIGZyb20gXCIuLi8uLi9ub2RlL3Rlcm1pbmFsL2VuZE9mTGluZVwiO1xuXG5jb25zdCB7IEVORF9PRl9MSU5FIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lUGFydCBleHRlbmRzIFRlcm1pbmFsUGFydCB7XG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2spIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgbGV0IGVuZE9mTGluZUJORk5vZGUgPSBudWxsO1xuICAgIFxuICAgIGNvbnN0IHNhdmVkSW5kZXggPSBzdGF0ZS5nZXRTYXZlZEluZGV4KCksXG5cdFx0ICAgICAgbmV4dFNpZ25pZmljYW50VG9rZW4gPSBzdGF0ZS5nZXROZXh0U2lnbmlmaWNhbnRUb2tlbigpLFxuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW4gPSBuZXh0U2lnbmlmaWNhbnRUb2tlbjsgLy8vXG5cbiAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlbkVuZE9mTGluZVRva2VuID0gc2lnbmlmaWNhbnRUb2tlbi5pc0VuZE9mTGluZVRva2VuKCk7XG5cbiAgICAgIGlmIChzaWduaWZpY2FudFRva2VuRW5kT2ZMaW5lVG9rZW4pIHtcbiAgICAgICAgZW5kT2ZMaW5lQk5GTm9kZSA9IEVuZE9mTGluZUJORk5vZGUuZnJvbVNpZ25pZmljYW50VG9rZW4oc2lnbmlmaWNhbnRUb2tlbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGFyc2VkID0gKGVuZE9mTGluZUJORk5vZGUgIT09IG51bGwpO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgbm9kZXMucHVzaChlbmRPZkxpbmVCTkZOb2RlKTtcblxuICAgICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgIHBhcnNlZCA9IGNhbGxiYWNrKCk7XG5cbiAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICBub2Rlcy5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IEVORF9PRl9MSU5FOyAvLy9cblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBjbG9uZSgpIHsgcmV0dXJuIHN1cGVyLmNsb25lKEVuZE9mTGluZVBhcnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFbmRPZkxpbmVQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsL2VuZE9mTGluZVwiO1xuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRPZkxpbmVCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IGVuZE9mTGluZVBhcnQgPSBuZXcgRW5kT2ZMaW5lUGFydCgpO1xuXG4gICAgcmV0dXJuIGVuZE9mTGluZVBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoRW5kT2ZMaW5lQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IEVuZE9mTGluZUJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL2VuZE9mTGluZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi90ZXJtaW5hbFN5bWJvbFwiO1xuXG5pbXBvcnQgeyBFbmRPZkxpbmVSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyBFTkRfT0ZfTElORSB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZVJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgZW5kT2ZMaW5lVGVybWluYWxTeW1ib2xDb250ZW50ID0gRU5EX09GX0xJTkUsXG4gICAgICAgICAgZW5kT2ZMaW5lVGVybWluYWxTeW1ib2xEZWZpbml0aW9uID0gbmV3IFRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbihlbmRPZkxpbmVUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIG5hbWUgPSBFbmRPZkxpbmVSdWxlTmFtZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGVuZE9mTGluZVRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IEVuZE9mTGluZUJORk5vZGU7XG5cbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFBhcnRCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9wYXJ0XCI7XG5pbXBvcnQgUnVsZU5hbWVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3J1bGVOYW1lXCI7XG5cbmltcG9ydCB7IFF1YW50aWZpZXJSdWxlTmFtZSwgT3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUsIE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSwgWmVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUXVhbnRpZmllclJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IFF1YW50aWZpZXJSdWxlTmFtZSxcbiAgICAgICAgICBvcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSA9IE9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lLFxuICAgICAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSA9IE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSxcbiAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lID0gWmVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSxcbiAgICAgICAgICBvcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKG9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lKSxcbiAgICAgICAgICBvbmVPck1vcmVRdWFudGlmaWVyUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbihvbmVPck1vcmVRdWFudGlmaWVyUnVsZU5hbWUpLFxuICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbih6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lKSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIG9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFBhcnRCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi8uLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlZmluaXRpb25CTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVEZWZpbml0aW9uKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBwYXJ0Tm9kZXMgPSBjaGlsZE5vZGVzLCAvLy9cbiAgICAgICAgICBsb29rQWhlYWQgPSBmYWxzZSwgIC8vL1xuICAgICAgICAgIHBhcnRzID0gcGFydE5vZGVzLm1hcCgocGFydE5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnQgPSBwYXJ0Tm9kZS5nZW5lcmF0ZVBhcnQobG9va0FoZWFkKTtcbiAgXG4gICAgICAgICAgICByZXR1cm4gcGFydDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBkZWZpbml0aW9uID0gbmV3IERlZmluaXRpb24ocGFydHMpO1xuXG4gICAgcmV0dXJuIGRlZmluaXRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoRGVmaW5pdGlvbkJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IE9uZU9yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9vbmVPck1vcmVQYXJ0c1wiO1xuXG5pbXBvcnQgeyBQYXJ0UnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlZmluaXRpb25EZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHBhcnRSdWxlTmFtZSA9IFBhcnRSdWxlTmFtZSxcbiAgICAgICAgICBwYXJ0UnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChwYXJ0UnVsZU5hbWUpLFxuICAgICAgICAgIG9uZU9yTW9yZVJ1bGVOYW1lUGFydHNQYXJ0ID0gbmV3IE9uZU9yTW9yZVBhcnRzUGFydChwYXJ0UnVsZU5hbWVQYXJ0KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIG9uZU9yTW9yZVJ1bGVOYW1lUGFydHNQYXJ0XG4gICAgICAgICAgXTtcblxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgRGVmaW5pdGlvbkJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL2RlZmluaXRpb25cIjtcbmltcG9ydCBEZWZpbml0aW9uRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9kZWZpbml0aW9uXCI7XG5cbmltcG9ydCB7IERlZmluaXRpb25SdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmaW5pdGlvblJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IERlZmluaXRpb25SdWxlTmFtZSxcbiAgICAgICAgICBkZWZpbml0aW9uRGVmaW5pdGlvbiA9IG5ldyBEZWZpbml0aW9uRGVmaW5pdGlvbigpLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgZGVmaW5pdGlvbkRlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBEZWZpbml0aW9uQk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IGV2ZW4gfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlZmluaXRpb25zQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlRGVmaW5pdGlvbnMoKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIGV2ZW5DaGlsZE5vZGVzID0gZXZlbihjaGlsZE5vZGVzKSwgIC8vL1xuICAgICAgICAgIGRlZmluaXRpb25Ob2RlcyA9IGV2ZW5DaGlsZE5vZGVzLCAvLy9cbiAgICAgICAgICBkZWZpbml0aW9ucyA9IGRlZmluaXRpb25Ob2Rlcy5tYXAoKGRlZmluaXRpb25Ob2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkZWZpbml0aW9uID0gZGVmaW5pdGlvbk5vZGUuZ2VuZXJhdGVEZWZpbml0aW9uKCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiBkZWZpbml0aW9uO1xuICAgICAgICAgIH0pO1xuICAgIFxuICAgIHJldHVybiBkZWZpbml0aW9ucztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhEZWZpbml0aW9uc0JORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF9ub25UZXJtaW5hbCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uLy4uL3BhcnQvbm9uVGVybWluYWxcIikpO1xudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIik7XG52YXIgX2xvb2tBaGVhZCA9IHJlcXVpcmUoXCIuLi8uLi91dGlsaXRpZXMvbG9va0FoZWFkXCIpO1xudmFyIF9wYXJ0VHlwZXMgPSByZXF1aXJlKFwiLi4vLi4vcGFydFR5cGVzXCIpO1xuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gICAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gICAgfVxuICAgIHJldHVybiBzZWxmO1xufVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG59XG5mdW5jdGlvbiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ICE9PSBcInVuZGVmaW5lZFwiICYmIFJlZmxlY3QuZ2V0KSB7XG4gICAgICAgIF9nZXQgPSBSZWZsZWN0LmdldDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBfZ2V0ID0gZnVuY3Rpb24gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlcikge1xuICAgICAgICAgICAgdmFyIGJhc2UgPSBfc3VwZXJQcm9wQmFzZSh0YXJnZXQsIHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmICghYmFzZSkgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGJhc2UsIHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmIChkZXNjLmdldCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZXNjLmdldC5jYWxsKHJlY2VpdmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkZXNjLnZhbHVlO1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlciB8fCB0YXJnZXQpO1xufVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgICAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICAgIH07XG4gICAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn1cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICAgIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICAgIH1cbiAgICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHtcbiAgICAgICAgZGVmYXVsdDogb2JqXG4gICAgfTtcbn1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgICAgICByZXR1cm4gY2FsbDtcbiAgICB9XG4gICAgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgICAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgICAgIHJldHVybiBvO1xuICAgIH07XG4gICAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cbmZ1bmN0aW9uIF9zdXBlclByb3BCYXNlKG9iamVjdCwgcHJvcGVydHkpIHtcbiAgICB3aGlsZSghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpKXtcbiAgICAgICAgb2JqZWN0ID0gX2dldFByb3RvdHlwZU9mKG9iamVjdCk7XG4gICAgICAgIGlmIChvYmplY3QgPT09IG51bGwpIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xufVxudmFyIF90eXBlb2YgPSBmdW5jdGlvbihvYmopIHtcbiAgICBcIkBzd2MvaGVscGVycyAtIHR5cGVvZlwiO1xuICAgIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xufTtcbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgICBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uKCkge30pKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHtcbiAgICB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7XG4gICAgICAgIHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0O1xuICAgICAgICBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkge1xuICAgICAgICAgICAgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgIHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpO1xuICAgIH07XG59XG52YXIgU2VxdWVuY2VPZlBhcnRzUGFydCA9IC8qI19fUFVSRV9fKi8gZnVuY3Rpb24oTm9uVGVybWluYWxQYXJ0KSB7XG4gICAgX2luaGVyaXRzKFNlcXVlbmNlT2ZQYXJ0c1BhcnQsIE5vblRlcm1pbmFsUGFydCk7XG4gICAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihTZXF1ZW5jZU9mUGFydHNQYXJ0KTtcbiAgICBmdW5jdGlvbiBTZXF1ZW5jZU9mUGFydHNQYXJ0KHBhcnRzKSB7XG4gICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTZXF1ZW5jZU9mUGFydHNQYXJ0KTtcbiAgICAgICAgdmFyIF90aGlzO1xuICAgICAgICB2YXIgdHlwZSA9IF9wYXJ0VHlwZXMuU2VxdWVuY2VPZlBhcnRzUGFydFR5cGU7IC8vL1xuICAgICAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHR5cGUpO1xuICAgICAgICBfdGhpcy5wYXJ0cyA9IHBhcnRzO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIF9jcmVhdGVDbGFzcyhTZXF1ZW5jZU9mUGFydHNQYXJ0LCBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJnZXRQYXJ0c1wiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFBhcnRzKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnRzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwicGFyc2VcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHBhcnNlZDtcbiAgICAgICAgICAgICAgICB2YXIgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKSwgcGFydHNOb2RlcyA9IFtdLCBpbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgcGFyc2VkID0gKDAsIF9sb29rQWhlYWQpLnBhcnNlUGFydHModGhpcy5wYXJ0cywgcGFydHNOb2RlcywgaW5kZXgsIHN0YXRlLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICAgICAgICAgICAgICAoMCwgX2FycmF5KS5wdXNoKG5vZGVzLCBwYXJ0c05vZGVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiYXNTdHJpbmdcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBhc1N0cmluZygpIHtcbiAgICAgICAgICAgICAgICB2YXIgcGFydHNTdHJpbmcxID0gdGhpcy5wYXJ0cy5yZWR1Y2UoZnVuY3Rpb24ocGFydHNTdHJpbmcsIHBhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnRTdHJpbmcgPSBwYXJ0LmFzU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJ0c1N0cmluZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFydHNTdHJpbmcgPSBwYXJ0U3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFydHNTdHJpbmcgPSBcIlwiLmNvbmNhdChwYXJ0c1N0cmluZywgXCIgXCIpLmNvbmNhdChwYXJ0U3RyaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFydHNTdHJpbmc7XG4gICAgICAgICAgICAgICAgfSwgbnVsbCksIHN0cmluZyA9IFwiKCBcIi5jb25jYXQocGFydHNTdHJpbmcxLCBcIiApXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJjbG9uZVwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsb25lKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfZ2V0KF9nZXRQcm90b3R5cGVPZihTZXF1ZW5jZU9mUGFydHNQYXJ0LnByb3RvdHlwZSksIFwiY2xvbmVcIiwgdGhpcykuY2FsbCh0aGlzLCBTZXF1ZW5jZU9mUGFydHNQYXJ0LCB0aGlzLnBhcnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIF0sIFtcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImZyb21Ob2Rlc1wiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGZyb21Ob2Rlcyhub2Rlcykge1xuICAgICAgICAgICAgICAgIHZhciBhbGxCdXRGaXJzdEFuZExhc3ROb2RlcyA9ICgwLCBfYXJyYXkpLmFsbEJ1dEZpcnN0QW5kTGFzdChub2Rlcyk7XG4gICAgICAgICAgICAgICAgbm9kZXMgPSBhbGxCdXRGaXJzdEFuZExhc3ROb2RlczsgLy8vXG4gICAgICAgICAgICAgICAgdmFyIGxvb2tBaGVhZCA9IGZhbHNlLCBwYXJ0cyA9IG5vZGVzLm1hcChmdW5jdGlvbihub2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwYXJ0ID0gbm9kZS5nZW5lcmF0ZVBhcnQobG9va0FoZWFkKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnQ7XG4gICAgICAgICAgICAgICAgfSksIHNlcXVlbmNlT2ZQYXJ0c1BhcnQgPSBuZXcgU2VxdWVuY2VPZlBhcnRzUGFydChwYXJ0cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlcXVlbmNlT2ZQYXJ0c1BhcnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICBdKTtcbiAgICByZXR1cm4gU2VxdWVuY2VPZlBhcnRzUGFydDtcbn0oX25vblRlcm1pbmFsLmRlZmF1bHQpO1xuZXhwb3J0cy5kZWZhdWx0ID0gU2VxdWVuY2VPZlBhcnRzUGFydDtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1TDNOeVl5OXdZWEowTDI1dmJsUmxjbTFwYm1Gc0wzTmxjWFZsYm1ObFQyWlFZWEowY3k1cWN5SmRMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpjSW5WelpTQnpkSEpwWTNSY0lqdGNibHh1YVcxd2IzSjBJRTV2YmxSbGNtMXBibUZzVUdGeWRDQm1jbTl0SUZ3aUxpNHZMaTR2Y0dGeWRDOXViMjVVWlhKdGFXNWhiRndpTzF4dVhHNXBiWEJ2Y25RZ2V5QndkWE5vSUgwZ1puSnZiU0JjSWk0dUx5NHVMM1YwYVd4cGRHbGxjeTloY25KaGVWd2lPMXh1YVcxd2IzSjBJSHNnY0dGeWMyVlFZWEowY3lCOUlHWnliMjBnWENJdUxpOHVMaTkxZEdsc2FYUnBaWE12Ykc5dmEwRm9aV0ZrWENJN1hHNXBiWEJ2Y25RZ2V5QmhiR3hDZFhSR2FYSnpkRUZ1WkV4aGMzUWdmU0JtY205dElGd2lMaTR2TGk0dmRYUnBiR2wwYVdWekwyRnljbUY1WENJN1hHNXBiWEJ2Y25RZ2V5QlRaWEYxWlc1alpVOW1VR0Z5ZEhOUVlYSjBWSGx3WlNCOUlHWnliMjBnWENJdUxpOHVMaTl3WVhKMFZIbHdaWE5jSWp0Y2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ1kyeGhjM01nVTJWeGRXVnVZMlZQWmxCaGNuUnpVR0Z5ZENCbGVIUmxibVJ6SUU1dmJsUmxjbTFwYm1Gc1VHRnlkQ0I3WEc0Z0lHTnZibk4wY25WamRHOXlLSEJoY25SektTQjdYRzRnSUNBZ1kyOXVjM1FnZEhsd1pTQTlJRk5sY1hWbGJtTmxUMlpRWVhKMGMxQmhjblJVZVhCbE95QXZMeTljYmx4dUlDQWdJSE4xY0dWeUtIUjVjR1VwTzF4dVhHNGdJQ0FnZEdocGN5NXdZWEowY3lBOUlIQmhjblJ6TzF4dUlDQjlYRzVjYmlBZ1oyVjBVR0Z5ZEhNb0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVjR0Z5ZEhNN1hHNGdJSDFjYmx4dUlDQndZWEp6WlNodWIyUmxjeXdnYzNSaGRHVXNJR05oYkd4aVlXTnJLU0I3WEc0Z0lDQWdiR1YwSUhCaGNuTmxaRHRjYmx4dUlDQWdJR052Ym5OMElITmhkbVZrU1c1a1pYZ2dQU0J6ZEdGMFpTNW5aWFJUWVhabFpFbHVaR1Y0S0Nrc1hHNGdJQ0FnSUNBZ0lDQWdjR0Z5ZEhOT2IyUmxjeUE5SUZ0ZExGeHVJQ0FnSUNBZ0lDQWdJR2x1WkdWNElEMGdNRHRjYmx4dUlDQWdJSEJoY25ObFpDQTlJSEJoY25ObFVHRnlkSE1vZEdocGN5NXdZWEowY3l3Z2NHRnlkSE5PYjJSbGN5d2dhVzVrWlhnc0lITjBZWFJsTENCallXeHNZbUZqYXlrN1hHNWNiaUFnSUNCcFppQW9jR0Z5YzJWa0tTQjdYRzRnSUNBZ0lDQndkWE5vS0c1dlpHVnpMQ0J3WVhKMGMwNXZaR1Z6S1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JwWmlBb0lYQmhjbk5sWkNrZ2UxeHVJQ0FnSUNBZ2MzUmhkR1V1WW1GamEzUnlZV05yS0hOaGRtVmtTVzVrWlhncE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhKbGRIVnliaUJ3WVhKelpXUTdYRzRnSUgxY2JseHVJQ0JoYzFOMGNtbHVaeWdwSUh0Y2JpQWdJQ0JqYjI1emRDQndZWEowYzFOMGNtbHVaeUE5SUhSb2FYTXVjR0Z5ZEhNdWNtVmtkV05sS0Nod1lYSjBjMU4wY21sdVp5d2djR0Z5ZENrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjM1FnY0dGeWRGTjBjbWx1WnlBOUlIQmhjblF1WVhOVGRISnBibWNvS1R0Y2JseHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tIQmhjblJ6VTNSeWFXNW5JRDA5UFNCdWRXeHNLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSEJoY25SelUzUnlhVzVuSUQwZ2NHRnlkRk4wY21sdVp6dGNiaUFnSUNBZ0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSEJoY25SelUzUnlhVzVuSUQwZ1lDUjdjR0Z5ZEhOVGRISnBibWQ5SUNSN2NHRnlkRk4wY21sdVozMWdPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnY0dGeWRITlRkSEpwYm1jN1hHNGdJQ0FnSUNBZ0lDQWdmU3dnYm5Wc2JDa3NYRzRnSUNBZ0lDQWdJQ0FnYzNSeWFXNW5JRDBnWUNnZ0pIdHdZWEowYzFOMGNtbHVaMzBnS1dBN1hHNWNiaUFnSUNCeVpYUjFjbTRnYzNSeWFXNW5PMXh1SUNCOVhHNWNiaUFnWTJ4dmJtVW9LU0I3SUhKbGRIVnliaUJ6ZFhCbGNpNWpiRzl1WlNoVFpYRjFaVzVqWlU5bVVHRnlkSE5RWVhKMExDQjBhR2x6TG5CaGNuUnpLVHNnZlZ4dVhHNGdJSE4wWVhScFl5Qm1jbTl0VG05a1pYTW9ibTlrWlhNcElIdGNiaUFnSUNCamIyNXpkQ0JoYkd4Q2RYUkdhWEp6ZEVGdVpFeGhjM1JPYjJSbGN5QTlJR0ZzYkVKMWRFWnBjbk4wUVc1a1RHRnpkQ2h1YjJSbGN5azdYRzVjYmlBZ0lDQnViMlJsY3lBOUlHRnNiRUoxZEVacGNuTjBRVzVrVEdGemRFNXZaR1Z6T3lBZ0x5OHZYRzVjYmlBZ0lDQmpiMjV6ZENCc2IyOXJRV2hsWVdRZ1BTQm1ZV3h6WlN4Y2JpQWdJQ0FnSUNBZ0lDQndZWEowY3lBOUlHNXZaR1Z6TG0xaGNDZ29ibTlrWlNrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjM1FnY0dGeWRDQTlJRzV2WkdVdVoyVnVaWEpoZEdWUVlYSjBLR3h2YjJ0QmFHVmhaQ2s3WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQndZWEowTzF4dUlDQWdJQ0FnSUNBZ0lIMHBMRnh1SUNBZ0lDQWdJQ0FnSUhObGNYVmxibU5sVDJaUVlYSjBjMUJoY25RZ1BTQnVaWGNnVTJWeGRXVnVZMlZQWmxCaGNuUnpVR0Z5ZENod1lYSjBjeWs3WEc1Y2JpQWdJQ0J5WlhSMWNtNGdjMlZ4ZFdWdVkyVlBabEJoY25SelVHRnlkRHRjYmlBZ2ZWeHVmVnh1SWwwc0ltNWhiV1Z6SWpwYklsTmxjWFZsYm1ObFQyWlFZWEowYzFCaGNuUWlMQ0p3WVhKMGN5SXNJblI1Y0dVaUxDSlRaWEYxWlc1alpVOW1VR0Z5ZEhOUVlYSjBWSGx3WlNJc0ltZGxkRkJoY25Seklpd2ljR0Z5YzJVaUxDSnViMlJsY3lJc0luTjBZWFJsSWl3aVkyRnNiR0poWTJzaUxDSndZWEp6WldRaUxDSnpZWFpsWkVsdVpHVjRJaXdpWjJWMFUyRjJaV1JKYm1SbGVDSXNJbkJoY25SelRtOWtaWE1pTENKcGJtUmxlQ0lzSW5CaGNuTmxVR0Z5ZEhNaUxDSndkWE5vSWl3aVltRmphM1J5WVdOcklpd2lZWE5UZEhKcGJtY2lMQ0p3WVhKMGMxTjBjbWx1WnlJc0luSmxaSFZqWlNJc0luQmhjblFpTENKd1lYSjBVM1J5YVc1bklpd2ljM1J5YVc1bklpd2lZMnh2Ym1VaUxDSm1jbTl0VG05a1pYTWlMQ0poYkd4Q2RYUkdhWEp6ZEVGdVpFeGhjM1JPYjJSbGN5SXNJbUZzYkVKMWRFWnBjbk4wUVc1a1RHRnpkQ0lzSW14dmIydEJhR1ZoWkNJc0ltMWhjQ0lzSW01dlpHVWlMQ0puWlc1bGNtRjBaVkJoY25RaUxDSnpaWEYxWlc1alpVOW1VR0Z5ZEhOUVlYSjBJaXdpVG05dVZHVnliV2x1WVd4UVlYSjBJbDBzSW0xaGNIQnBibWR6SWpvaVFVRkJRU3hEUVVGWkxGZEJRVUVzUTBGQlF6czdPMFU3ZDBJN1FVRkZaU3hIUVVGM1FpeERRVUY0UWl4WlFVRjNRanRCUVVVdlFpeEhRVUYxUWl4RFFVRjJRaXhOUVVGMVFqdEJRVU5xUWl4SFFVRXlRaXhEUVVFelFpeFZRVUV5UWp0QlFVVmtMRWRCUVdsQ0xFTkJRV3BDTEZWQlFXbENPenM3T3pzN096czdPenM3T3pzN09FUTdjME03TmtRN2FVVTdPenM3ZDBVN1owVTdPenM3T3pCQ096czdPenM3T3pzN08xTTdPenM3T3pzN1N6czdPenM3T3pzN096czdPenROTzNsRU96czdPenM3T3pzN096czdPenM3ZFVJN08wczdPenM3TzNkRE96czdPenM3TWtJN096czdPenM3TzNGR096czdPenM3T3pzN096czdiVVU3TzJsRU96czdPenRKUVVWd1EwRXNiVUpCUVcxQ0xHbENRVUY2UWl4UlFVRlJPMjFFT3p0aFFVRkdRU3h0UWtGQmJVSXNRMEZETVVKRExFdEJRVXM3YTBRN08xRkJRMllzUjBGQlN5eERRVUZEUXl4SlFVRkpMRWRCUVVkRExGVkJRWFZDTERCQ1FVRkZMRVZCUVVjc1FVRkJTQ3hEUVVGSE8ydERRVVZ1UTBRc1NVRkJTU3hEUTJKa0xFTkVZV2RDTzJOQlJWQkVMRXRCUVVzc1IwRkJSMEVzUzBGQlN5eERRVUZET3pzN096dFpRVWR5UWtjc1IwRkJVU3hGUVVGU1FTeERRVUZSTzIxQ1FVRlNRU3hSUVVGUkxFTkJRVkpCTEZGQlFWRXNSMEZCUnl4RFFVRkRPMmRDUVVOV0xFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTklMRXRCUVVzN1dVRkRia0lzUTBGQlF6czdPMWxCUlVSSkxFZEJRVXNzUlVGQlRFRXNRMEZCU3p0dFFrRkJURUVzVVVGQlVTeERRVUZTUVN4TFFVRkxMRU5CUVVORExFdEJRVXNzUlVGQlJVTXNTMEZCU3l4RlFVRkZReXhSUVVGUkxFVkJRVVVzUTBGQlF6dG5Ra0ZETjBJc1IwRkJSeXhEUVVGRFF5eE5RVUZOTzJkQ1FVVldMRWRCUVVzc1EwRkJRME1zVlVGQlZTeEhRVUZIU0N4TFFVRkxMRU5CUVVOSkxHRkJRV0VzU1VGRGFFTkRMRlZCUVZVc1IwRkJSeXhEUVVGRExFTkJRVU1zUlVGRFprTXNTMEZCU3l4SFFVRkhMRU5CUVVNN1owSkJSV1pLTEUxQlFVMHNUMEZCUjBzc1ZVRkJWU3hoUVVGRExFbEJRVWtzUTBGQlEySXNTMEZCU3l4RlFVRkZWeXhWUVVGVkxFVkJRVVZETEV0QlFVc3NSVUZCUlU0c1MwRkJTeXhGUVVGRlF5eFJRVUZSTEVOQlFVTXNRMEZCUXp0blFrRkZjRVVzUlVGQlJTeEZRVUZGUXl4TlFVRk5MRVZCUVVVc1EwRkJRenQzUWtGRFdFMHNUVUZCU1N4UFFVRkRWQ3hMUVVGTExFVkJRVVZOTEZWQlFWVXNRMEZCUXl4RFFVRkRPMmRDUVVNeFFpeERRVUZETzJkQ1FVVkVMRVZCUVVVc1IwRkJSMGdzVFVGQlRTeEZRVUZGTEVOQlFVTTdiMEpCUTFwR0xFdEJRVXNzUTBGQlExTXNVMEZCVXl4RFFVRkRUaXhWUVVGVkxFTkJRVU1zUTBGQlF6dG5Ra0ZET1VJc1EwRkJRenRuUWtGRlJDeE5RVUZOTEVOQlFVTkVMRTFCUVUwN1dVRkRaaXhEUVVGRE96czdXVUZGUkZFc1IwRkJVU3hGUVVGU1FTeERRVUZSTzIxQ1FVRlNRU3hSUVVGUkxFTkJRVkpCTEZGQlFWRXNSMEZCUnl4RFFVRkRPMmRDUVVOV0xFZEJRVXNzUTBGQlEwTXNXVUZCVnl4SFFVRkhMRWxCUVVrc1EwRkJRMnBDTEV0QlFVc3NRMEZCUTJ0Q0xFMUJRVTBzUTBGQlF5eFJRVUZSTEVOQlFWQkVMRmRCUVZjc1JVRkJSVVVzU1VGQlNTeEZRVUZMTEVOQlFVTTdiMEpCUTNSRUxFZEJRVXNzUTBGQlEwTXNWVUZCVlN4SFFVRkhSQ3hKUVVGSkxFTkJRVU5JTEZGQlFWRTdiMEpCUldoRExFVkJRVVVzUlVGQlJVTXNWMEZCVnl4TFFVRkxMRWxCUVVrc1JVRkJSU3hEUVVGRE8zZENRVU42UWtFc1YwRkJWeXhIUVVGSFJ5eFZRVUZWTEVOQlFVTTdiMEpCUXpOQ0xFTkJRVU1zVFVGQlRTeERRVUZETzNkQ1FVTk9TQ3hYUVVGWExFZEJRVWtzUTBGQlFTeEZRVUZwUWtjc1RVRkJWU3hEUVVGNlFrZ3NWMEZCVnl4RlFVRkRMRU5CUVVNc1NVRkJZU3hOUVVGQkxFTkJRVmhITEZWQlFWVXNRMEZCUlN4RFFVRkRPMjlDUVVNdlF5eERRVUZETzI5Q1FVVkVMRTFCUVUwc1EwRkJRMGdzVjBGQlZ6dG5Ra0ZEY0VJc1EwRkJReXhGUVVGRkxFbEJRVWtzUjBGRFVFa3NUVUZCVFN4SFFVRkpMRU5CUVVVc1NVRkJZeXhOUVVGRkxFTkJRV1JLTEZsQlFWY3NSVUZCUXl4RFFVRkZPMmRDUVVWc1F5eE5RVUZOTEVOQlFVTkpMRTFCUVUwN1dVRkRaaXhEUVVGRE96czdXVUZGUkVNc1IwRkJTeXhGUVVGTVFTeERRVUZMTzIxQ1FVRk1RU3hSUVVGUkxFTkJRVkpCTEV0QlFVc3NSMEZCUnl4RFFVRkRPMmRDUVVGRExFMUJRVTBzYzBKQmJFUkhka0lzYlVKQlFXMUNMR0ZCYTBSbWRVSXNRMEZCU3l4UlFVRllMRWxCUVVzc1lVRkJUM1pDTEcxQ1FVRnRRaXhGUVVGRkxFbEJRVWtzUTBGQlEwTXNTMEZCU3p0WlFVRkhMRU5CUVVNN096czdXVUZGZWtSMVFpeEhRVUZUTEVWQlFWUkJMRU5CUVZNN2JVSkJRV2hDTEZGQlFWRXNRMEZCUkVFc1UwRkJVeXhEUVVGRGJFSXNTMEZCU3l4RlFVRkZMRU5CUVVNN1owSkJRM1pDTEVkQlFVc3NRMEZCUTIxQ0xIVkNRVUYxUWl4UFFVRkhReXhOUVVGclFpeHhRa0ZCUTNCQ0xFdEJRVXM3WjBKQlJYaEVRU3hMUVVGTExFZEJRVWR0UWl4MVFrRkJkVUlzUTBGQlF5eERRVUZGTEVWQlFVY3NRVUZCU0N4RFFVRkhPMmRDUVVWeVF5eEhRVUZMTEVOQlFVTkZMRk5CUVZNc1IwRkJSeXhMUVVGTExFVkJRMnBDTVVJc1MwRkJTeXhIUVVGSFN5eExRVUZMTEVOQlFVTnpRaXhIUVVGSExFTkJRVU1zVVVGQlVTeERRVUZRUXl4SlFVRkpMRVZCUVVzc1EwRkJRenR2UWtGRE0wSXNSMEZCU3l4RFFVRkRWQ3hKUVVGSkxFZEJRVWRUTEVsQlFVa3NRMEZCUTBNc1dVRkJXU3hEUVVGRFNDeFRRVUZUTzI5Q1FVVjRReXhOUVVGTkxFTkJRVU5RTEVsQlFVazdaMEpCUTJJc1EwRkJReXhIUVVORVZ5eHRRa0ZCYlVJc1IwRkJSeXhIUVVGSExFTkJRVU12UWl4dFFrRkJiVUlzUTBGQlEwTXNTMEZCU3p0blFrRkZla1FzVFVGQlRTeERRVUZET0VJc2JVSkJRVzFDTzFsQlF6VkNMRU5CUVVNN08wMDdPMFZCYkVVNFEwTXNXVUZCWlR0clFrRkJNME5vUXl4dFFrRkJiVUlzUVNKOSIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5pbXBvcnQgWmVyb09yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC96ZXJvT3JNb3JlUGFydHNcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuXG5pbXBvcnQgeyBEZWZpbml0aW9uUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgdmVydGljYWxCYXIgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZpbml0aW9uc0RlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgZGVmaW5pdGlvblJ1bGVOYW1lID0gRGVmaW5pdGlvblJ1bGVOYW1lLFxuICAgICAgICAgIHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xDb250ZW50ID0gdmVydGljYWxCYXIsXG4gICAgICAgICAgZGVmaW5pdGlvblJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQoZGVmaW5pdGlvblJ1bGVOYW1lKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQodmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xUaGVuRGVmaW5pdGlvblJ1bGVOYW1lUGFydHMgPSBbXG4gICAgICAgICAgICB2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sUGFydCxcbiAgICAgICAgICAgIGRlZmluaXRpb25SdWxlTmFtZVBhcnRcbiAgICAgICAgICBdLFxuICAgICAgICAgIHNlcXVlbmNlT2ZQYXJ0c1BhcnQgPSBuZXcgU2VxdWVuY2VPZlBhcnRzUGFydCh2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sVGhlbkRlZmluaXRpb25SdWxlTmFtZVBhcnRzKSxcbiAgICAgICAgICB6ZXJvT3JNb3JlU2VxdWVuY2VPZlBhcnRzUGFydCA9IG5ldyBaZXJvT3JNb3JlUGFydHNQYXJ0KHNlcXVlbmNlT2ZQYXJ0c1BhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgZGVmaW5pdGlvblJ1bGVOYW1lUGFydCxcbiAgICAgICAgICAgIHplcm9Pck1vcmVTZXF1ZW5jZU9mUGFydHNQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IERlZmluaXRpb25zQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvZGVmaW5pdGlvbnNcIjtcbmltcG9ydCBEZWZpbml0aW9uc0RlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vZGVmaW5pdGlvbnNcIjtcblxuaW1wb3J0IHsgRGVmaW5pdGlvbnNSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmaW5pdGlvbnNSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IGRlZmluaXRpb25zRGVmaW5pdGlvbiA9IG5ldyBEZWZpbml0aW9uc0RlZmluaXRpb24oKSxcbiAgICAgICAgICBuYW1lID0gRGVmaW5pdGlvbnNSdWxlTmFtZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGRlZmluaXRpb25zRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IERlZmluaXRpb25zQk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IGZpcnN0IH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFBhcnRCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICAgIG5vZGUgPSBmaXJzdENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgIHBhcnQgPSBub2RlLmdlbmVyYXRlUGFydChsb29rQWhlYWQpO1xuXG4gICAgcmV0dXJuIHBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoVGVybWluYWxQYXJ0Qk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgVGVybWluYWxQYXJ0Qk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvcGFydC90ZXJtaW5hbFwiO1xuaW1wb3J0IFJ1bGVOYW1lRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9ydWxlTmFtZVwiO1xuXG5pbXBvcnQgeyBUZXJtaW5hbFBhcnRSdWxlTmFtZSwgUmVndWxhckV4cHJlc3Npb25SdWxlTmFtZSwgU2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlTmFtZSwgVGVybWluYWxTeW1ib2xSdWxlTmFtZSwgRW5kT2ZMaW5lUnVsZU5hbWUsIFdpbGRjYXJkUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1pbmFsUGFydFJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IFRlcm1pbmFsUGFydFJ1bGVOYW1lLFxuICAgICAgICAgIHdpbGRjYXJkUnVsZU5hbWUgPSBXaWxkY2FyZFJ1bGVOYW1lLFxuICAgICAgICAgIGVuZE9mTGluZVJ1bGVOYW1lID0gRW5kT2ZMaW5lUnVsZU5hbWUsXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xSdWxlTmFtZSA9IFRlcm1pbmFsU3ltYm9sUnVsZU5hbWUsXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb25SdWxlTmFtZSA9IFJlZ3VsYXJFeHByZXNzaW9uUnVsZU5hbWUsXG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlTmFtZSA9IFNpZ25pZmljYW50VG9rZW5UeXBlUnVsZU5hbWUsXG4gICAgICAgICAgd2lsZGNhcmRSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKHdpbGRjYXJkUnVsZU5hbWUpLFxuICAgICAgICAgIGVuZE9mTGluZVJ1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24oZW5kT2ZMaW5lUnVsZU5hbWUpLFxuICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUnVsZU5hbWVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lRGVmaW5pdGlvbih0ZXJtaW5hbFN5bWJvbFJ1bGVOYW1lKSxcbiAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24ocmVndWxhckV4cHJlc3Npb25SdWxlTmFtZSksXG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKHNpZ25pZmljYW50VG9rZW5UeXBlUnVsZU5hbWUpLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgZW5kT2ZMaW5lUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgd2lsZGNhcmRSdWxlTmFtZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBUZXJtaW5hbFBhcnRCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcbmltcG9ydCBDaG9pY2VPZlBhcnRzUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC9jaG9pY2VPZlBhcnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENob2ljZU9mUGFydHNCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBub2RlcyA9IGNoaWxkTm9kZXMuc2xpY2UoKSxcbiAgICAgICAgICBwYXJ0ID0gQ2hvaWNlT2ZQYXJ0c1BhcnQuZnJvbU5vZGVzKG5vZGVzKTtcblxuICAgIHJldHVybiBwYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKENob2ljZU9mUGFydHNCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgT25lT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL29uZU9yTW9yZVBhcnRzXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5pbXBvcnQgU2VxdWVuY2VPZlBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9zZXF1ZW5jZU9mUGFydHNcIjtcblxuaW1wb3J0IHsgUGFydFJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IHZlcnRpY2FsQmFyLCBvcGVuQnJhY2tldCwgY2xvc2VCcmFja2V0IH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hvaWNlT2ZQYXJ0c0RlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcGFydFJ1bGVOYW1lID0gUGFydFJ1bGVOYW1lLFxuICAgICAgICAgIHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xDb250ZW50ID0gdmVydGljYWxCYXIsIC8vL1xuICAgICAgICAgIG9wZW5CcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50ID0gb3BlbkJyYWNrZXQsIC8vL1xuICAgICAgICAgIGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCA9IGNsb3NlQnJhY2tldCwgLy8vXG4gICAgICAgICAgcGFydFJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQocGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQodmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIG9wZW5CcmFja2V0VGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydChvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydChjbG9zZUJyYWNrZXRUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xUaGVuUGFydFJ1bGVOYW1lUGFydHMgPSBbXG4gICAgICAgICAgICB2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sUGFydCxcbiAgICAgICAgICAgIHBhcnRSdWxlTmFtZVBhcnRcbiAgICAgICAgICBdLFxuICAgICAgICAgIHNlcXVlbmNlT2ZQYXJ0c1BhcnQgPSBuZXcgU2VxdWVuY2VPZlBhcnRzUGFydCh2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sVGhlblBhcnRSdWxlTmFtZVBhcnRzKSxcbiAgICAgICAgICBvbmVPck1vcmVTZXF1ZW5jZU9mUGFydHNQYXJ0ID0gbmV3IE9uZU9yTW9yZVBhcnRzUGFydChzZXF1ZW5jZU9mUGFydHNQYXJ0KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIG9wZW5CcmFja2V0VGVybWluYWxTeW1ib2xQYXJ0LFxuICAgICAgICAgICAgcGFydFJ1bGVOYW1lUGFydCxcbiAgICAgICAgICAgIG9uZU9yTW9yZVNlcXVlbmNlT2ZQYXJ0c1BhcnQsXG4gICAgICAgICAgICBjbG9zZUJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnRcbiAgICAgICAgICBdO1xuXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBDaG9pY2VPZlBhcnRzQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvY2hvaWNlT2ZQYXJ0c1wiO1xuaW1wb3J0IENob2ljZU9mUGFydHNEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL2Nob2ljZU9mUGFydHNcIjtcblxuaW1wb3J0IHsgQ2hvaWNlT2ZQYXJ0c1J1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaG9pY2VPZlBhcnRzUnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gQ2hvaWNlT2ZQYXJ0c1J1bGVOYW1lLFxuICAgICAgICAgIGNob2ljZU9mUGFydHNEZWZpbml0aW9uID0gbmV3IENob2ljZU9mUGFydHNEZWZpbml0aW9uKCksXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBjaG9pY2VPZlBhcnRzRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IENob2ljZU9mUGFydHNCTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX25vblRlcm1pbmFsID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiKSk7XG52YXIgX3Rlcm1pbmFsU3ltYm9sID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiKSk7XG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiKTtcbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICAgIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICAgIH1cbiAgICByZXR1cm4gc2VsZjtcbn1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspe1xuICAgICAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICAgIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIG9ialtrZXldID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG59XG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7XG4gICAgfTtcbiAgICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufVxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gICAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gICAgfVxuICAgIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDoge1xuICAgICAgICBkZWZhdWx0OiBvYmpcbiAgICB9O1xufVxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICAgIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgICAgIHJldHVybiBjYWxsO1xuICAgIH1cbiAgICByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTtcbn1cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgICAgIG8uX19wcm90b19fID0gcDtcbiAgICAgICAgcmV0dXJuIG87XG4gICAgfTtcbiAgICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufVxudmFyIF90eXBlb2YgPSBmdW5jdGlvbihvYmopIHtcbiAgICBcIkBzd2MvaGVscGVycyAtIHR5cGVvZlwiO1xuICAgIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xufTtcbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgICBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uKCkge30pKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHtcbiAgICB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7XG4gICAgICAgIHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0O1xuICAgICAgICBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkge1xuICAgICAgICAgICAgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgIHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpO1xuICAgIH07XG59XG52YXIgVGVybWluYWxTeW1ib2xCTkZOb2RlID0gLyojX19QVVJFX18qLyBmdW5jdGlvbihOb25UZXJtaW5hbE5vZGUpIHtcbiAgICBfaW5oZXJpdHMoVGVybWluYWxTeW1ib2xCTkZOb2RlLCBOb25UZXJtaW5hbE5vZGUpO1xuICAgIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoVGVybWluYWxTeW1ib2xCTkZOb2RlKTtcbiAgICBmdW5jdGlvbiBUZXJtaW5hbFN5bWJvbEJORk5vZGUoKSB7XG4gICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUZXJtaW5hbFN5bWJvbEJORk5vZGUpO1xuICAgICAgICB2YXIgX3RoaXM7XG4gICAgICAgIF90aGlzID0gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyZWd1bGFyRXhwcmVzc2lvblwiLCAvXlwiKCg/OlxcXFwufFteXCJcXFxcXSkqKVwiJC8pO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIF9jcmVhdGVDbGFzcyhUZXJtaW5hbFN5bWJvbEJORk5vZGUsIFtcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImdlbmVyYXRlUGFydFwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICAgICAgICAgICAgICB2YXIgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLCB0ZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgX3Rlcm1pbmFsU3ltYm9sLmRlZmF1bHQoY29udGVudCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRlcm1pbmFsU3ltYm9sUGFydDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImdldENvbnRlbnRcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRDb250ZW50KCkge1xuICAgICAgICAgICAgICAgIHZhciBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksIGZpcnN0Q2hpbGROb2RlID0gKDAsIF9hcnJheSkuZmlyc3QoY2hpbGROb2RlcyksIHRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlLCB0ZXJtaW5hbE5vZGVDb250ZW50ID0gdGVybWluYWxOb2RlLmdldENvbnRlbnQoKSwgbWF0Y2hlcyA9IHRlcm1pbmFsTm9kZUNvbnRlbnQubWF0Y2godGhpcy5yZWd1bGFyRXhwcmVzc2lvbiksIHNlY29uZE1hdGNoID0gKDAsIF9hcnJheSkuc2Vjb25kKG1hdGNoZXMpLCBjb250ZW50ID0gc2Vjb25kTWF0Y2gucmVwbGFjZSgvXFxcXFxcXFwvZywgXCJcXFxcXCIpLnJlcGxhY2UoL1xcXFxcIi9nLCBcIlxcXCJcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICBdLCBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2Rlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiBfbm9uVGVybWluYWwuZGVmYXVsdC5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKFRlcm1pbmFsU3ltYm9sQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgXSk7XG4gICAgcmV0dXJuIFRlcm1pbmFsU3ltYm9sQk5GTm9kZTtcbn0oX25vblRlcm1pbmFsLmRlZmF1bHQpO1xuZXhwb3J0cy5kZWZhdWx0ID0gVGVybWluYWxTeW1ib2xCTkZOb2RlO1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUx5NHVMM055WXk5dWIyUmxMMkp1Wmk5MFpYSnRhVzVoYkZONWJXSnZiQzVxY3lKZExDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SmNJblZ6WlNCemRISnBZM1JjSWp0Y2JseHVhVzF3YjNKMElFNXZibFJsY20xcGJtRnNUbTlrWlNCbWNtOXRJRndpTGk0dkxpNHZibTlrWlM5dWIyNVVaWEp0YVc1aGJGd2lPMXh1YVcxd2IzSjBJRlJsY20xcGJtRnNVM2x0WW05c1VHRnlkQ0JtY205dElGd2lMaTR2TGk0dmNHRnlkQzkwWlhKdGFXNWhiQzkwWlhKdGFXNWhiRk41YldKdmJGd2lPMXh1WEc1cGJYQnZjblFnZXlCbWFYSnpkQ3dnYzJWamIyNWtJSDBnWm5KdmJTQmNJaTR1THk0dUwzVjBhV3hwZEdsbGN5OWhjbkpoZVZ3aU8xeHVYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQmpiR0Z6Y3lCVVpYSnRhVzVoYkZONWJXSnZiRUpPUms1dlpHVWdaWGgwWlc1a2N5Qk9iMjVVWlhKdGFXNWhiRTV2WkdVZ2UxeHVJQ0J5WldkMWJHRnlSWGh3Y21WemMybHZiaUE5SUM5ZVhDSW9LRDg2WEZ4Y1hDNThXMTVjSWx4Y1hGeGRLU29wWENJa0x6dGNibHh1SUNCblpXNWxjbUYwWlZCaGNuUW9iRzl2YTBGb1pXRmtLU0I3WEc0Z0lDQWdZMjl1YzNRZ1kyOXVkR1Z1ZENBOUlIUm9hWE11WjJWMFEyOXVkR1Z1ZENncExGeHVJQ0FnSUNBZ0lDQWdJSFJsY20xcGJtRnNVM2x0WW05c1VHRnlkQ0E5SUc1bGR5QlVaWEp0YVc1aGJGTjViV0p2YkZCaGNuUW9ZMjl1ZEdWdWRDazdYRzVjYmlBZ0lDQnlaWFIxY200Z2RHVnliV2x1WVd4VGVXMWliMnhRWVhKME8xeHVJQ0I5WEc1Y2JpQWdaMlYwUTI5dWRHVnVkQ2dwSUh0Y2JpQWdJQ0JqYjI1emRDQmphR2xzWkU1dlpHVnpJRDBnZEdocGN5NW5aWFJEYUdsc1pFNXZaR1Z6S0Nrc1hHNGdJQ0FnSUNBZ0lDQWdabWx5YzNSRGFHbHNaRTV2WkdVZ1BTQm1hWEp6ZENoamFHbHNaRTV2WkdWektTeGNiaUFnSUNBZ0lDQWdJQ0IwWlhKdGFXNWhiRTV2WkdVZ1BTQm1hWEp6ZEVOb2FXeGtUbTlrWlN3Z0lDOHZMMXh1SUNBZ0lDQWdJQ0FnSUhSbGNtMXBibUZzVG05a1pVTnZiblJsYm5RZ1BTQjBaWEp0YVc1aGJFNXZaR1V1WjJWMFEyOXVkR1Z1ZENncExGeHVJQ0FnSUNBZ0lDQWdJRzFoZEdOb1pYTWdQU0IwWlhKdGFXNWhiRTV2WkdWRGIyNTBaVzUwTG0xaGRHTm9LSFJvYVhNdWNtVm5kV3hoY2tWNGNISmxjM05wYjI0cExGeHVJQ0FnSUNBZ0lDQWdJSE5sWTI5dVpFMWhkR05vSUQwZ2MyVmpiMjVrS0cxaGRHTm9aWE1wTEZ4dUlDQWdJQ0FnSUNBZ0lHTnZiblJsYm5RZ1BTQnpaV052Ym1STllYUmphQzV5WlhCc1lXTmxLQzljWEZ4Y1hGeGNYQzluTENCY0lseGNYRnhjSWlrdWNtVndiR0ZqWlNndlhGeGNYRndpTDJjc0lGd2lYRnhjSWx3aUtUdGNibHh1SUNBZ0lISmxkSFZ5YmlCamIyNTBaVzUwTzF4dUlDQjlYRzVjYmlBZ2MzUmhkR2xqSUdaeWIyMVNkV3hsVG1GdFpVRnVaRU5vYVd4a1RtOWtaWE1vY25Wc1pVNWhiV1VzSUdOb2FXeGtUbTlrWlhNcElIc2djbVYwZFhKdUlFNXZibFJsY20xcGJtRnNUbTlrWlM1bWNtOXRVblZzWlU1aGJXVkJibVJEYUdsc1pFNXZaR1Z6S0ZSbGNtMXBibUZzVTNsdFltOXNRazVHVG05a1pTd2djblZzWlU1aGJXVXNJR05vYVd4a1RtOWtaWE1wT3lCOVhHNTlYRzVjYmlKZExDSnVZVzFsY3lJNld5SlVaWEp0YVc1aGJGTjViV0p2YkVKT1JrNXZaR1VpTENKeVpXZDFiR0Z5Ulhod2NtVnpjMmx2YmlJc0ltZGxibVZ5WVhSbFVHRnlkQ0lzSW14dmIydEJhR1ZoWkNJc0ltTnZiblJsYm5RaUxDSm5aWFJEYjI1MFpXNTBJaXdpZEdWeWJXbHVZV3hUZVcxaWIyeFFZWEowSWl3aVZHVnliV2x1WVd4VGVXMWliMnhRWVhKMElpd2lZMmhwYkdST2IyUmxjeUlzSW1kbGRFTm9hV3hrVG05a1pYTWlMQ0ptYVhKemRFTm9hV3hrVG05a1pTSXNJbVpwY25OMElpd2lkR1Z5YldsdVlXeE9iMlJsSWl3aWRHVnliV2x1WVd4T2IyUmxRMjl1ZEdWdWRDSXNJbTFoZEdOb1pYTWlMQ0p0WVhSamFDSXNJbk5sWTI5dVpFMWhkR05vSWl3aWMyVmpiMjVrSWl3aWNtVndiR0ZqWlNJc0ltWnliMjFTZFd4bFRtRnRaVUZ1WkVOb2FXeGtUbTlrWlhNaUxDSnlkV3hsVG1GdFpTSXNJazV2YmxSbGNtMXBibUZzVG05a1pTSmRMQ0p0WVhCd2FXNW5jeUk2SWtGQlFVRXNRMEZCV1N4WFFVRkJMRU5CUVVNN096dEZPM2RDTzBGQlJXVXNSMEZCZDBJc1EwRkJlRUlzV1VGQmQwSTdRVUZEY2tJc1IwRkJiME1zUTBGQmNFTXNaVUZCYjBNN1FVRkZja01zUjBGQmRVSXNRMEZCZGtJc1RVRkJkVUk3T3pzN096czdPenM3T3pzN096czRSRHR6UXpzMlJEdHBSVHM3T3p0M1JUdG5SVHM3T3pzN096czdPenRWT3p0M1FqczdPenM3T3p0TE96czdPenM3T3pzN096czdPMDA3ZVVRN096czdPenM3T3pzN096czdPenQxUWpzN1N6czdPenN5UWpzN096czdPenM3Y1VZN096czdPenM3T3pzN096dHRSVHM3YVVRN096czdPMGxCUldoRFFTeHhRa0ZCY1VJc2FVSkJRVE5DTEZGQlFWRTdjVVE3TzJGQlFVWkJMSEZDUVVGeFFqdHZSRHM3TmtNN2RVUkJRM2hEUXl4RFFVRnBRaXcwUTBOU2JrSXNRMFJST0VNN096czdPMWxCUlRWRFF5eEhRVUZaTEVWQlFWcEJMRU5CUVZrN2JVSkJRVnBCTEZGQlFWRXNRMEZCVWtFc1dVRkJXU3hEUVVGRFF5eFRRVUZUTEVWQlFVVXNRMEZCUXp0blFrRkRka0lzUjBGQlN5eERRVUZEUXl4UFFVRlBMRWRCUVVjc1NVRkJTU3hEUVVGRFF5eFZRVUZWTEVsQlEzcENReXhyUWtGQmEwSXNSMEZCUnl4SFFVRkhMRU5CUVVORExHVkJRV3RDTEZOQlFVTklMRTlCUVU4N1owSkJSWHBFTEUxQlFVMHNRMEZCUTBVc2EwSkJRV3RDTzFsQlF6TkNMRU5CUVVNN096dFpRVVZFUkN4SFFVRlZMRVZCUVZaQkxFTkJRVlU3YlVKQlFWWkJMRkZCUVZFc1EwRkJVa0VzVlVGQlZTeEhRVUZITEVOQlFVTTdaMEpCUTFvc1IwRkJTeXhEUVVGRFJ5eFZRVUZWTEVkQlFVY3NTVUZCU1N4RFFVRkRReXhoUVVGaExFbEJReTlDUXl4alFVRmpMRTlCUVVkRExFMUJRVXNzVVVGQlEwZ3NWVUZCVlN4SFFVTnFRMGtzV1VGQldTeEhRVUZIUml4alFVRmpMRVZCUXpkQ1J5eHRRa0ZCYlVJc1IwRkJSMFFzV1VGQldTeERRVUZEVUN4VlFVRlZMRWxCUXpkRFV5eFBRVUZQTEVkQlFVZEVMRzFDUVVGdFFpeERRVUZEUlN4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRFpDeHBRa0ZCYVVJc1IwRkRNVVJsTEZkQlFWY3NUMEZCUjBNc1RVRkJUU3hUUVVGRFNDeFBRVUZQTEVkQlF6VkNWaXhQUVVGUExFZEJRVWRaTEZkQlFWY3NRMEZCUTBVc1QwRkJUeXhWUVVGVkxFTkJRVWtzUzBGQlJVRXNUMEZCVHl4VFFVRlRMRU5CUVVrN1owSkJSWFpGTEUxQlFVMHNRMEZCUTJRc1QwRkJUenRaUVVOb1FpeERRVUZET3pzN08xbEJSVTFsTEVkQlFYbENMRVZCUVhwQ1FTeERRVUY1UWp0dFFrRkJhRU1zVVVGQlVTeERRVUZFUVN4NVFrRkJlVUlzUTBGQlEwTXNVVUZCVVN4RlFVRkZXaXhWUVVGVkxFVkJRVVVzUTBGQlF6dG5Ra0ZCUXl4TlFVRk5MRU5CUVVOaExGbEJRV1VzVTBGQlEwWXNlVUpCUVhsQ0xFTkJRVU51UWl4eFFrRkJjVUlzUlVGQlJXOUNMRkZCUVZFc1JVRkJSVm9zVlVGQlZUdFpRVUZITEVOQlFVTTdPMDA3TzBWQmRFSjRSMkVzV1VGQlpUdHJRa0ZCTjBOeVFpeHhRa0ZCY1VJc1FTSjkiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBjb25zdHJ1Y3RvcihzaWduaWZpY2FudFRva2VuVHlwZSkge1xuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW5UeXBlUGFydCA9IG5ldyBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQoc2lnbmlmaWNhbnRUb2tlblR5cGUpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0XG4gICAgICAgICAgXTtcbiAgICBcbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyB0eXBlcyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbEJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3Rlcm1pbmFsU3ltYm9sXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5cbmltcG9ydCB7IFRlcm1pbmFsU3ltYm9sUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgc3RyaW5nTGl0ZXJhbFR5cGUgfSA9IHR5cGVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFN5bWJvbFJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3Qgc3RyaW5nTGl0ZXJhbFNpZ25pZmljYW50VG9rZW5UeXBlID0gc3RyaW5nTGl0ZXJhbFR5cGUsICAvLy9cbiAgICAgICAgICBzdHJpbmdMaXRlcmFsU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uID0gbmV3IFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbihzdHJpbmdMaXRlcmFsU2lnbmlmaWNhbnRUb2tlblR5cGUpLFxuICAgICAgICAgIG5hbWUgPSBUZXJtaW5hbFN5bWJvbFJ1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgc3RyaW5nTGl0ZXJhbFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFRlcm1pbmFsU3ltYm9sQk5GTm9kZTtcblxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9uVGVybWluYWxQYXJ0Qk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgbm9kZXMgPSBjaGlsZE5vZGVzLnNsaWNlKCksXG4gICAgICAgICAgcGFydCA9IHBhcnRGcm9tTm9kZXMobm9kZXMsIGxvb2tBaGVhZCk7XG5cbiAgICByZXR1cm4gcGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhOb25UZXJtaW5hbFBhcnRCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7IH1cbn1cblxuZnVuY3Rpb24gcGFydEZyb21Ob2Rlcyhub2RlcywgbG9va0FoZWFkKSB7XG4gIGxldCBwYXJ0ID0gbnVsbDtcblxuICBjb25zdCBub2Rlc0xlbmd0aCA9IG5vZGVzLmxlbmd0aDtcblxuICBpZiAobm9kZXNMZW5ndGggPT09IDEpIHtcbiAgICBjb25zdCBub2RlID0gbm9kZXMucG9wKCk7XG5cbiAgICBwYXJ0ID0gbm9kZS5nZW5lcmF0ZVBhcnQobG9va0FoZWFkKTtcbiAgfSBlbHNlIHtcbiAgICBub2Rlcy5wb3AoKTtcblxuICAgIGxvb2tBaGVhZCA9IHRydWU7XG5cbiAgICBwYXJ0ID0gcGFydEZyb21Ob2Rlcyhub2RlcywgbG9va0FoZWFkKTtcbiAgfVxuXG4gIHJldHVybiBwYXJ0O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vLi4vLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IE9wdGlvbmFsUGFydFBhcnQgZnJvbSBcIi4uLy4uLy4uL3BhcnQvbm9uVGVybWluYWwvb3B0aW9uYWxQYXJ0XCI7XG5cbmltcG9ydCB7IFJ1bGVOYW1lUnVsZU5hbWUsIExvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVOYW1lTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcnVsZU5hbWVSdWxlTmFtZSA9IFJ1bGVOYW1lUnVsZU5hbWUsXG4gICAgICAgICAgbG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSA9IExvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUsXG4gICAgICAgICAgcnVsZU5hbWVSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHJ1bGVOYW1lUnVsZU5hbWUpLFxuICAgICAgICAgIGxvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWVQYXJ0ID0gbmV3IFJ1bGVOYW1lUGFydChsb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lKSxcbiAgICAgICAgICBvcHRpb25hbExvb2tBaGVhZFJ1bGVOYW1lUGFydFBhcnQgPSBuZXcgT3B0aW9uYWxQYXJ0UGFydChsb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBydWxlTmFtZVJ1bGVOYW1lUGFydCxcbiAgICAgICAgICAgIG9wdGlvbmFsTG9va0FoZWFkUnVsZU5hbWVQYXJ0UGFydFxuICAgICAgICAgIF07XG4gICAgXG4gICAgc3VwZXIocGFydHMpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBSdWxlTmFtZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcnVsZU5hbWVcIjtcbmltcG9ydCBOb25UZXJtaW5hbFBhcnRCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9wYXJ0L25vblRlcm1pbmFsXCI7XG5pbXBvcnQgUnVsZU5hbWVOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9wYXJ0UnVsZS9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuXG5pbXBvcnQgeyBOb25UZXJtaW5hbFBhcnRSdWxlTmFtZSwgQ2hvaWNlT2ZQYXJ0c1J1bGVOYW1lLCBTZXF1ZW5jZU9mUGFydHNSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9uVGVybWluYWxQYXJ0UnVsZSBleHRlbmRzIFJ1bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBuYW1lID0gTm9uVGVybWluYWxQYXJ0UnVsZU5hbWUsXG4gICAgICAgICAgY2hvaWNlT2ZQYXJ0c1J1bGVOYW1lID0gQ2hvaWNlT2ZQYXJ0c1J1bGVOYW1lLFxuICAgICAgICAgIHNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lID0gU2VxdWVuY2VPZlBhcnRzUnVsZU5hbWUsXG4gICAgICAgICAgY2hvaWNlT2ZQYXJ0c1J1bGVOYW1lRGVmaW5pdGlvbiA9IG5ldyBSdWxlTmFtZURlZmluaXRpb24oY2hvaWNlT2ZQYXJ0c1J1bGVOYW1lKSxcbiAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNSdWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKHNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lKSxcbiAgICAgICAgICBydWxlTmFtZU5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24oKSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGNob2ljZU9mUGFydHNSdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNSdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICBydWxlTmFtZU5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gTm9uVGVybWluYWxQYXJ0Qk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5pbXBvcnQgU2VxdWVuY2VPZlBhcnRzUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC9zZXF1ZW5jZU9mUGFydHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VxdWVuY2VPZlBhcnRzQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgbm9kZXMgPSBjaGlsZE5vZGVzLnNsaWNlKCksXG4gICAgICAgICAgcGFydCA9IFNlcXVlbmNlT2ZQYXJ0c1BhcnQuZnJvbU5vZGVzKG5vZGVzKTtcblxuICAgIHJldHVybiBwYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKFNlcXVlbmNlT2ZQYXJ0c0JORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcbmltcG9ydCBPbmVPck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvb25lT3JNb3JlUGFydHNcIjtcblxuaW1wb3J0IHsgUGFydFJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IG9wZW5CcmFja2V0LCBjbG9zZUJyYWNrZXQgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXF1ZW5jZU9mUGFydHNEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHBhcnRSdWxlTmFtZSA9IFBhcnRSdWxlTmFtZSxcbiAgICAgICAgICBvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCA9IG9wZW5CcmFja2V0LCAvLy9cbiAgICAgICAgICBjbG9zZUJyYWNrZXRUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBjbG9zZUJyYWNrZXQsIC8vL1xuICAgICAgICAgIHBhcnRSdWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHBhcnRSdWxlTmFtZSksXG4gICAgICAgICAgb3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KG9wZW5CcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBjbG9zZUJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgb25lT3JNb3JlUGFydFJ1bGVOYW1lUGFydHNQYXJ0ID0gbmV3IE9uZU9yTW9yZVBhcnRzUGFydChwYXJ0UnVsZU5hbWVQYXJ0KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIG9wZW5CcmFja2V0VGVybWluYWxTeW1ib2xQYXJ0LFxuICAgICAgICAgICAgcGFydFJ1bGVOYW1lUGFydCxcbiAgICAgICAgICAgIG9uZU9yTW9yZVBhcnRSdWxlTmFtZVBhcnRzUGFydCxcbiAgICAgICAgICAgIGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydFxuICAgICAgICAgIF07XG5cbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFNlcXVlbmNlT2ZQYXJ0c0JORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuaW1wb3J0IFNlcXVlbmNlT2ZQYXJ0c0RlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vc2VxdWVuY2VPZlBhcnRzXCI7XG5cbmltcG9ydCB7IFNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXF1ZW5jZU9mUGFydHNSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSBTZXF1ZW5jZU9mUGFydHNSdWxlTmFtZSxcbiAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNEZWZpbml0aW9uID0gbmV3IFNlcXVlbmNlT2ZQYXJ0c0RlZmluaXRpb24oKSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIHNlcXVlbmNlT2ZQYXJ0c0RlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBTZXF1ZW5jZU9mUGFydHNCTkZOb2RlO1xuXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuXG5jb25zdCB7IE5PX1dISVRFU1BBQ0UgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb1doaXRlc3BhY2VOb2RlUGFyc2VUcmVlIGV4dGVuZHMgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gTk9fV0hJVEVTUEFDRSwgLy8vXG4gICAgICAgICAgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoID0gc3RyaW5nTGVuZ3RoLCAvLy9cbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21XaWR0aCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21TdHJpbmdBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKE5vV2hpdGVzcGFjZU5vZGVQYXJzZVRyZWUsIHN0cmluZywgdmVydGljYWxCcmFuY2hQb3NpdGlvbik7XG5cbiAgICB0ZXJtaW5hbE5vZGVQYXJzZVRyZWUuYXBwZW5kVG9Ub3AodmVydGljYWxCcmFuY2hQYXJzZVRyZWUpO1xuXG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZSA9IHRlcm1pbmFsTm9kZVBhcnNlVHJlZTsgLy8vXG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVGVybWluYWxOb2RlIGZyb20gXCIuLi90ZXJtaW5hbFwiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZU5vZGVQYXJzZVRyZWUgZnJvbSBcIi4uLy4uL3BhcnNlVHJlZS9ub1doaXRlc3BhY2VOb2RlXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9XaGl0ZXNwYWNlTm9kZSBleHRlbmRzIFRlcm1pbmFsTm9kZSB7XG4gIGdldFR5cGUoKSB7XG4gICAgY29uc3QgdHlwZSA9IG51bGw7ICAvLy9cblxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgZ2V0Q29udGVudCgpIHtcbiAgICBjb25zdCBjb250ZW50ID0gRU1QVFlfU1RSSU5HO1xuXG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBpc05vV2hpdGVzcGFjZU5vZGUoKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlTm9kZSA9IHRydWU7XG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlTm9kZTtcbiAgfVxuXG4gIGFzUGFyc2VUcmVlKHRva2Vucykge1xuICAgIGNvbnN0IG5vV2hpdGVzcGFjZU5vZGVQYXJzZVRyZWUgPSBOb1doaXRlc3BhY2VOb2RlUGFyc2VUcmVlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgcGFyc2VUcmVlID0gbm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZTsgIC8vL1xuXG4gICAgcmV0dXJuIHBhcnNlVHJlZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBzaWduaWZpY2FudFRva2VuID0gbnVsbCxcbiAgICAgICAgICBub1doaXRlc3BhY2VOb2RlID0gVGVybWluYWxOb2RlLmZyb21TaWduaWZpY2FudFRva2VuKE5vV2hpdGVzcGFjZU5vZGUsIHNpZ25pZmljYW50VG9rZW4pO1xuXG4gICAgcmV0dXJuIG5vV2hpdGVzcGFjZU5vZGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBUZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWxcIjtcbmltcG9ydCBOb1doaXRlc3BhY2VOb2RlIGZyb20gXCIuLi8uLi9ub2RlL3Rlcm1pbmFsL25vV2hpdGVzcGFjZVwiO1xuXG5jb25zdCB7IE5PX1dISVRFU1BBQ0UgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb1doaXRlc3BhY2VQYXJ0IGV4dGVuZHMgVGVybWluYWxQYXJ0IHtcbiAgaXNOb1doaXRlc3BhY2VQYXJ0KCkge1xuICAgIGNvbnN0IG5vV2hpdGVzcGFjZVBhcnQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIG5vV2hpdGVzcGFjZVBhcnQ7XG4gIH1cblxuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGxldCBub1doaXRlc3BhY2VOb2RlID0gbnVsbDtcblxuICAgIGNvbnN0IHNhdmVkSW5kZXggPSBzdGF0ZS5nZXRTYXZlZEluZGV4KCksXG4gICAgICAgICAgbmV4dFRva2VuV2hpdGVzcGFjZVRva2VuID0gc3RhdGUuaXNOZXh0VG9rZW5XaGl0ZXNwYWNlVG9rZW4oKTtcblxuICAgIGlmICghbmV4dFRva2VuV2hpdGVzcGFjZVRva2VuKSB7XG4gICAgICBub1doaXRlc3BhY2VOb2RlID0gTm9XaGl0ZXNwYWNlTm9kZS5mcm9tTm90aGluZygpO1xuICAgIH1cblxuICAgIHBhcnNlZCA9IChub1doaXRlc3BhY2VOb2RlICE9PSBudWxsKVxuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgbm9kZXMucHVzaChub1doaXRlc3BhY2VOb2RlKTtcblxuICAgICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgIHBhcnNlZCA9IGNhbGxiYWNrKCk7XG5cbiAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICBub2Rlcy5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IE5PX1dISVRFU1BBQ0U7IC8vL1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIGNsb25lKCkgeyByZXR1cm4gc3VwZXIuY2xvbmUoTm9XaGl0ZXNwYWNlUGFydCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZVBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWwvbm9XaGl0ZXNwYWNlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vV2hpdGVzcGFjZVBhcnRCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IG5vV2hpdGVzcGFjZVBhcnQgPSBuZXcgTm9XaGl0ZXNwYWNlUGFydCgpO1xuXG4gICAgcmV0dXJuIG5vV2hpdGVzcGFjZVBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhydWxlTmFtZSwgY2hpbGROb2RlcykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoTm9XaGl0ZXNwYWNlUGFydEJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcblxuY29uc3QgeyBOT19XSElURVNQQUNFIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9XaGl0ZXNwYWNlUGFydERlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgY29udGVudCA9IE5PX1dISVRFU1BBQ0UsXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydChjb250ZW50KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydFxuICAgICAgICAgIF07XG5cbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZVBhcnRCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9ub1doaXRlc3BhY2VQYXJ0XCI7XG5pbXBvcnQgTm9XaGl0ZXNwYWNlUGFydERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vbm9XaGl0ZXNwYWNlUGFydFwiO1xuXG5pbXBvcnQgeyBOb1doaXRlc3BhY2VQYXJ0UnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vV2hpdGVzcGFjZVBhcnRSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5vV2hpdGVzcGFjZVBhcnREZWZpbml0aW9uID0gbmV3IE5vV2hpdGVzcGFjZVBhcnREZWZpbml0aW9uKCksXG4gICAgICAgICAgbmFtZSA9IE5vV2hpdGVzcGFjZVBhcnRSdWxlTmFtZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnREZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gTm9XaGl0ZXNwYWNlUGFydEJORk5vZGU7XG5cbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBOb1doaXRlc3BhY2VQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL25vV2hpdGVzcGFjZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuXG5jb25zdCB7IGV4Y2xhbWF0aW9uTWFyayB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvb2tBaGVhZE1vZGlmaWVyUnVsZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgY29udGVudCA9IGV4Y2xhbWF0aW9uTWFyaywgIC8vL1xuICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnQgPSBuZXcgTm9XaGl0ZXNwYWNlUGFydCgpLFxuICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydCA9IG5ldyBUZXJtaW5hbFN5bWJvbFBhcnQoY29udGVudCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBub1doaXRlc3BhY2VQYXJ0LFxuICAgICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXTtcblxuICAgIHN1cGVyKHBhcnRzKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgRGVmaW5pdGlvbkJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL2RlZmluaXRpb25cIjtcbmltcG9ydCBMb29rQWhlYWRNb2RpZmllclJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL2xvb2tBaGVhZE1vZGlmaWVyUnVsZVwiO1xuXG5pbXBvcnQgeyBMb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb29rQWhlYWRNb2RpZmllclJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbmFtZSA9IExvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUsXG4gICAgICAgICAgbG9va0FoZWFkTW9kaWZpZXJSdWxlRGVmaW5pdGlvbiA9IG5ldyBMb29rQWhlYWRNb2RpZmllclJ1bGVEZWZpbml0aW9uKCksXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBsb29rQWhlYWRNb2RpZmllclJ1bGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gRGVmaW5pdGlvbkJORk5vZGU7XG4gICAgXG4gICAgc3VwZXIobmFtZSwgZGVmaW5pdGlvbnMsIE5vZGUpXG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfdGVybWluYWwgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsXCIpKTtcbnZhciBfdGVybWluYWwxID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vbm9kZS90ZXJtaW5hbFwiKSk7XG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxpdGllcy9hcnJheVwiKTtcbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICAgIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICAgIH1cbiAgICByZXR1cm4gc2VsZjtcbn1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspe1xuICAgICAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxuZnVuY3Rpb24gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlcikge1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBSZWZsZWN0LmdldCkge1xuICAgICAgICBfZ2V0ID0gUmVmbGVjdC5nZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgX2dldCA9IGZ1bmN0aW9uIF9nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHtcbiAgICAgICAgICAgIHZhciBiYXNlID0gX3N1cGVyUHJvcEJhc2UodGFyZ2V0LCBwcm9wZXJ0eSk7XG4gICAgICAgICAgICBpZiAoIWJhc2UpIHJldHVybjtcbiAgICAgICAgICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihiYXNlLCBwcm9wZXJ0eSk7XG4gICAgICAgICAgICBpZiAoZGVzYy5nZXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVzYy5nZXQuY2FsbChyZWNlaXZlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZGVzYy52YWx1ZTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIF9nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIgfHwgdGFyZ2V0KTtcbn1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICAgICAgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtcbiAgICB9O1xuICAgIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7XG59XG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgICB9XG4gICAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7XG59XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikge1xuICAgIHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7XG4gICAgICAgIGRlZmF1bHQ6IG9ialxuICAgIH07XG59XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gICAgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICAgICAgcmV0dXJuIGNhbGw7XG4gICAgfVxuICAgIHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICAgICAgby5fX3Byb3RvX18gPSBwO1xuICAgICAgICByZXR1cm4gbztcbiAgICB9O1xuICAgIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59XG5mdW5jdGlvbiBfc3VwZXJQcm9wQmFzZShvYmplY3QsIHByb3BlcnR5KSB7XG4gICAgd2hpbGUoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KSl7XG4gICAgICAgIG9iamVjdCA9IF9nZXRQcm90b3R5cGVPZihvYmplY3QpO1xuICAgICAgICBpZiAob2JqZWN0ID09PSBudWxsKSBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdDtcbn1cbnZhciBfdHlwZW9mID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgXCJAc3djL2hlbHBlcnMgLSB0eXBlb2ZcIjtcbiAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbn07XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkge1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7XG4gICAgdHJ5IHtcbiAgICAgICAgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbigpIHt9KSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7XG4gICAgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkge1xuICAgICAgICB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDtcbiAgICAgICAgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHtcbiAgICAgICAgICAgIHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7XG4gICAgICAgICAgICByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTtcbiAgICB9O1xufVxudmFyIFJlZ3VsYXJFeHByZXNzaW9uUGFydCA9IC8qI19fUFVSRV9fKi8gZnVuY3Rpb24oVGVybWluYWxQYXJ0KSB7XG4gICAgX2luaGVyaXRzKFJlZ3VsYXJFeHByZXNzaW9uUGFydCwgVGVybWluYWxQYXJ0KTtcbiAgICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFJlZ3VsYXJFeHByZXNzaW9uUGFydCk7XG4gICAgZnVuY3Rpb24gUmVndWxhckV4cHJlc3Npb25QYXJ0KHJlZ3VsYXJFeHByZXNzaW9uKSB7XG4gICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBSZWd1bGFyRXhwcmVzc2lvblBhcnQpO1xuICAgICAgICB2YXIgX3RoaXM7XG4gICAgICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcyk7XG4gICAgICAgIF90aGlzLnJlZ3VsYXJFeHByZXNzaW9uID0gcmVndWxhckV4cHJlc3Npb247XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgX2NyZWF0ZUNsYXNzKFJlZ3VsYXJFeHByZXNzaW9uUGFydCwgW1xuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwicGFyc2VcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHBhcnNlZDtcbiAgICAgICAgICAgICAgICB2YXIgdGVybWluYWxOb2RlID0gbnVsbDtcbiAgICAgICAgICAgICAgICB2YXIgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKSwgbmV4dFNpZ25pZmljYW50VG9rZW4gPSBzdGF0ZS5nZXROZXh0U2lnbmlmaWNhbnRUb2tlbigpLCBzaWduaWZpY2FudFRva2VuID0gbmV4dFNpZ25pZmljYW50VG9rZW47IC8vL1xuICAgICAgICAgICAgICAgIGlmIChzaWduaWZpY2FudFRva2VuICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb250ZW50ID0gc2lnbmlmaWNhbnRUb2tlbi5nZXRDb250ZW50KCksIG1hdGNoZXMgPSBjb250ZW50Lm1hdGNoKHRoaXMucmVndWxhckV4cHJlc3Npb24pO1xuICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0TWF0Y2ggPSAoMCwgX2FycmF5KS5maXJzdChtYXRjaGVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdE1hdGNoID09PSBjb250ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVybWluYWxOb2RlID0gX3Rlcm1pbmFsMS5kZWZhdWx0LmZyb21TaWduaWZpY2FudFRva2VuKHNpZ25pZmljYW50VG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBhcnNlZCA9IHRlcm1pbmFsTm9kZSAhPT0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGVzLnB1c2godGVybWluYWxOb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWQgPSBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rlcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJhc1N0cmluZ1wiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFzU3RyaW5nKCkge1xuICAgICAgICAgICAgICAgIHZhciByZWd1bGFyRXhwcmVzc2lvblN0cmluZyA9IHRoaXMucmVndWxhckV4cHJlc3Npb24udG9TdHJpbmcoKSwgc3RyaW5nID0gcmVndWxhckV4cHJlc3Npb25TdHJpbmc7IC8vL1xuICAgICAgICAgICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJjbG9uZVwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsb25lKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfZ2V0KF9nZXRQcm90b3R5cGVPZihSZWd1bGFyRXhwcmVzc2lvblBhcnQucHJvdG90eXBlKSwgXCJjbG9uZVwiLCB0aGlzKS5jYWxsKHRoaXMsIFJlZ3VsYXJFeHByZXNzaW9uUGFydCwgdGhpcy5yZWd1bGFyRXhwcmVzc2lvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICBdKTtcbiAgICByZXR1cm4gUmVndWxhckV4cHJlc3Npb25QYXJ0O1xufShfdGVybWluYWwuZGVmYXVsdCk7XG5leHBvcnRzLmRlZmF1bHQgPSBSZWd1bGFyRXhwcmVzc2lvblBhcnQ7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUwzTnlZeTl3WVhKMEwzUmxjbTFwYm1Gc0wzSmxaM1ZzWVhKRmVIQnlaWE56YVc5dUxtcHpJbDBzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWx3aWRYTmxJSE4wY21samRGd2lPMXh1WEc1cGJYQnZjblFnVkdWeWJXbHVZV3hRWVhKMElHWnliMjBnWENJdUxpOHVMaTl3WVhKMEwzUmxjbTFwYm1Gc1hDSTdYRzVwYlhCdmNuUWdWR1Z5YldsdVlXeE9iMlJsSUdaeWIyMGdYQ0l1TGk4dUxpOXViMlJsTDNSbGNtMXBibUZzWENJN1hHNWNibWx0Y0c5eWRDQjdJR1pwY25OMElIMGdabkp2YlNCY0lpNHVMeTR1TDNWMGFXeHBkR2xsY3k5aGNuSmhlVndpTzF4dVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCamJHRnpjeUJTWldkMWJHRnlSWGh3Y21WemMybHZibEJoY25RZ1pYaDBaVzVrY3lCVVpYSnRhVzVoYkZCaGNuUWdlMXh1SUNCamIyNXpkSEoxWTNSdmNpaHlaV2QxYkdGeVJYaHdjbVZ6YzJsdmJpa2dlMXh1SUNBZ0lITjFjR1Z5S0NrN1hHNWNiaUFnSUNCMGFHbHpMbkpsWjNWc1lYSkZlSEJ5WlhOemFXOXVJRDBnY21WbmRXeGhja1Y0Y0hKbGMzTnBiMjQ3WEc0Z0lIMWNibHh1SUNCd1lYSnpaU2h1YjJSbGN5d2djM1JoZEdVc0lHTmhiR3hpWVdOcktTQjdYRzRnSUNBZ2JHVjBJSEJoY25ObFpEdGNibHh1SUNBZ0lHeGxkQ0IwWlhKdGFXNWhiRTV2WkdVZ1BTQnVkV3hzTzF4dUlDQWdJRnh1SUNBZ0lHTnZibk4wSUhOaGRtVmtTVzVrWlhnZ1BTQnpkR0YwWlM1blpYUlRZWFpsWkVsdVpHVjRLQ2tzWEc1Y2RGeDBJQ0FnSUNBZ2JtVjRkRk5wWjI1cFptbGpZVzUwVkc5clpXNGdQU0J6ZEdGMFpTNW5aWFJPWlhoMFUybG5ibWxtYVdOaGJuUlViMnRsYmlncExGeHVYSFJjZEZ4MFhIUmNkSE5wWjI1cFptbGpZVzUwVkc5clpXNGdQU0J1WlhoMFUybG5ibWxtYVdOaGJuUlViMnRsYmpzZ0x5OHZYRzVjYmlBZ0lDQnBaaUFvYzJsbmJtbG1hV05oYm5SVWIydGxiaUFoUFQwZ2JuVnNiQ2tnZTF4dUlDQWdJQ0FnWTI5dWMzUWdZMjl1ZEdWdWRDQTlJSE5wWjI1cFptbGpZVzUwVkc5clpXNHVaMlYwUTI5dWRHVnVkQ2dwTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdiV0YwWTJobGN5QTlJR052Ym5SbGJuUXViV0YwWTJnb2RHaHBjeTV5WldkMWJHRnlSWGh3Y21WemMybHZiaWs3WEc1Y2JpQWdJQ0FnSUdsbUlDaHRZWFJqYUdWeklDRTlQU0J1ZFd4c0tTQjdYRzRnSUNBZ0lDQWdJR052Ym5OMElHWnBjbk4wVFdGMFkyZ2dQU0JtYVhKemRDaHRZWFJqYUdWektUdGNibHh1SUNBZ0lDQWdJQ0JwWmlBb1ptbHljM1JOWVhSamFDQTlQVDBnWTI5dWRHVnVkQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lIUmxjbTFwYm1Gc1RtOWtaU0E5SUZSbGNtMXBibUZzVG05a1pTNW1jbTl0VTJsbmJtbG1hV05oYm5SVWIydGxiaWh6YVdkdWFXWnBZMkZ1ZEZSdmEyVnVLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmx4dUlDQWdJSEJoY25ObFpDQTlJQ2gwWlhKdGFXNWhiRTV2WkdVZ0lUMDlJRzUxYkd3cE8xeHVYRzRnSUNBZ2FXWWdLSEJoY25ObFpDa2dlMXh1SUNBZ0lDQWdibTlrWlhNdWNIVnphQ2gwWlhKdGFXNWhiRTV2WkdVcE8xeHVYRzRnSUNBZ0lDQnBaaUFvWTJGc2JHSmhZMnNnSVQwOUlHNTFiR3dwSUh0Y2JpQWdJQ0FnSUNBZ2NHRnljMlZrSUQwZ1kyRnNiR0poWTJzb0tUdGNibHh1SUNBZ0lDQWdJQ0JwWmlBb0lYQmhjbk5sWkNrZ2UxeHVJQ0FnSUNBZ0lDQWdJRzV2WkdWekxuQnZjQ2dwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dVhHNGdJQ0FnYVdZZ0tDRndZWEp6WldRcElIdGNiaUFnSUNBZ0lITjBZWFJsTG1KaFkydDBjbUZqYXloellYWmxaRWx1WkdWNEtUdGNiaUFnSUNCOVhHNWNiaUFnSUNCeVpYUjFjbTRnY0dGeWMyVmtPMXh1SUNCOVhHNWNiaUFnWVhOVGRISnBibWNvS1NCN1hHNGdJQ0FnWTI5dWMzUWdjbVZuZFd4aGNrVjRjSEpsYzNOcGIyNVRkSEpwYm1jZ1BTQjBhR2x6TG5KbFozVnNZWEpGZUhCeVpYTnphVzl1TG5SdlUzUnlhVzVuS0Nrc1hHNWNkRngwSUNBZ0lDQWdjM1J5YVc1bklEMGdjbVZuZFd4aGNrVjRjSEpsYzNOcGIyNVRkSEpwYm1jN0lDOHZMMXh1WEc0Z0lDQWdjbVYwZFhKdUlITjBjbWx1Wnp0Y2JpQWdmVnh1WEc0Z0lHTnNiMjVsS0NrZ2V5QnlaWFIxY200Z2MzVndaWEl1WTJ4dmJtVW9VbVZuZFd4aGNrVjRjSEpsYzNOcGIyNVFZWEowTENCMGFHbHpMbkpsWjNWc1lYSkZlSEJ5WlhOemFXOXVLVHNnZlZ4dWZWeHVJbDBzSW01aGJXVnpJanBiSWxKbFozVnNZWEpGZUhCeVpYTnphVzl1VUdGeWRDSXNJbkpsWjNWc1lYSkZlSEJ5WlhOemFXOXVJaXdpY0dGeWMyVWlMQ0p1YjJSbGN5SXNJbk4wWVhSbElpd2lZMkZzYkdKaFkyc2lMQ0p3WVhKelpXUWlMQ0owWlhKdGFXNWhiRTV2WkdVaUxDSnpZWFpsWkVsdVpHVjRJaXdpWjJWMFUyRjJaV1JKYm1SbGVDSXNJbTVsZUhSVGFXZHVhV1pwWTJGdWRGUnZhMlZ1SWl3aVoyVjBUbVY0ZEZOcFoyNXBabWxqWVc1MFZHOXJaVzRpTENKemFXZHVhV1pwWTJGdWRGUnZhMlZ1SWl3aVkyOXVkR1Z1ZENJc0ltZGxkRU52Ym5SbGJuUWlMQ0p0WVhSamFHVnpJaXdpYldGMFkyZ2lMQ0ptYVhKemRFMWhkR05vSWl3aVptbHljM1FpTENKVVpYSnRhVzVoYkU1dlpHVWlMQ0ptY205dFUybG5ibWxtYVdOaGJuUlViMnRsYmlJc0luQjFjMmdpTENKd2IzQWlMQ0ppWVdOcmRISmhZMnNpTENKaGMxTjBjbWx1WnlJc0luSmxaM1ZzWVhKRmVIQnlaWE56YVc5dVUzUnlhVzVuSWl3aWRHOVRkSEpwYm1jaUxDSnpkSEpwYm1jaUxDSmpiRzl1WlNJc0lsUmxjbTFwYm1Gc1VHRnlkQ0pkTENKdFlYQndhVzVuY3lJNklrRkJRVUVzUTBGQldTeFhRVUZCTEVOQlFVTTdPenRGTzNkQ08wRkJSVmtzUjBGQmNVSXNRMEZCY2tJc1UwRkJjVUk3UVVGRGNrSXNSMEZCY1VJc1EwRkJja0lzVlVGQmNVSTdRVUZGZUVJc1IwRkJkVUlzUTBGQmRrSXNUVUZCZFVJN096czdPenM3T3pzN096czdPenM0UkR0elF6czJSRHRwUlRzN096dDNSVHRuUlRzN096czdNRUk3T3pzN096czdPenM3VXpzN096czdPenRMT3pzN096czdPenM3T3pzN08wMDdlVVE3T3pzN096czdPenM3T3pzN096dDFRanM3U3pzN096czdkME03T3pzN096c3lRanM3T3pzN096czdjVVk3T3pzN096czdPenM3T3p0dFJUczdhVVE3T3pzN08wbEJSWGhDUVN4eFFrRkJjVUlzYVVKQlFUTkNMRkZCUVZFN2EwUTdPMkZCUVVaQkxIRkNRVUZ4UWl4RFFVTTFRa01zYVVKQlFXbENPMjlFT3p0cFEwTlNMMElzUTBSVFdUdGpRVVZJUVN4cFFrRkJhVUlzUjBGQlIwRXNhVUpCUVdsQ0xFTkJRVU03T3pzN08xbEJSemREUXl4SFFVRkxMRVZCUVV4QkxFTkJRVXM3YlVKQlFVeEJMRkZCUVZFc1EwRkJVa0VzUzBGQlN5eERRVUZEUXl4TFFVRkxMRVZCUVVWRExFdEJRVXNzUlVGQlJVTXNVVUZCVVN4RlFVRkZMRU5CUVVNN1owSkJRemRDTEVkQlFVY3NRMEZCUTBNc1RVRkJUVHRuUWtGRlZpeEhRVUZITEVOQlFVTkRMRmxCUVZrc1IwRkJSeXhKUVVGSk8yZENRVVYyUWl4SFFVRkxMRU5CUVVORExGVkJRVlVzUjBGQlIwb3NTMEZCU3l4RFFVRkRTeXhoUVVGaExFbEJRMnhEUXl4dlFrRkJiMElzUjBGQlIwNHNTMEZCU3l4RFFVRkRUeXgxUWtGQmRVSXNTVUZEZGtSRExHZENRVUZuUWl4SFFVRkhSaXh2UWtGQmIwSXNSVUZCUlN4RlFVRkhMRUZCUVVnc1EwRkJSenRuUWtGRk4wTXNSVUZCUlN4RlFVRkZSU3huUWtGQlowSXNTMEZCU3l4SlFVRkpMRVZCUVVVc1EwRkJRenR2UWtGRE9VSXNSMEZCU3l4RFFVRkRReXhQUVVGUExFZEJRVWRFTEdkQ1FVRm5RaXhEUVVGRFJTeFZRVUZWTEVsQlEzSkRReXhQUVVGUExFZEJRVWRHTEU5QlFVOHNRMEZCUTBjc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlEyWXNhVUpCUVdsQ08yOUNRVVZ3UkN4RlFVRkZMRVZCUVVWakxFOUJRVThzUzBGQlN5eEpRVUZKTEVWQlFVVXNRMEZCUXp0M1FrRkRja0lzUjBGQlN5eERRVUZEUlN4VlFVRlZMRTlCUVVkRExFMUJRVXNzVVVGQlEwZ3NUMEZCVHp0M1FrRkZhRU1zUlVGQlJTeEZRVUZGUlN4VlFVRlZMRXRCUVV0S0xFOUJRVThzUlVGQlJTeERRVUZET3pSQ1FVTXpRazRzV1VGQldTeEhRVUZIV1N4VlFVRlpMRk5CUVVORExHOUNRVUZ2UWl4RFFVRkRVaXhuUWtGQlowSXNRMEZCUXl4RFFVRkRPM2RDUVVOeVJTeERRVUZETzI5Q1FVTklMRU5CUVVNN1owSkJRMGdzUTBGQlF6dG5Ra0ZGUkU0c1RVRkJUU3hIUVVGSlF5eFpRVUZaTEV0QlFVc3NTVUZCU1N4QlFVRkRMRU5CUVVNN1owSkJSV3BETEVWQlFVVXNSVUZCUlVRc1RVRkJUU3hGUVVGRkxFTkJRVU03YjBKQlExaElMRXRCUVVzc1EwRkJRMnRDTEVsQlFVa3NRMEZCUTJRc1dVRkJXU3hEUVVGRExFTkJRVU03YjBKQlJYcENMRVZCUVVVc1JVRkJSVVlzVVVGQlVTeExRVUZMTEVsQlFVa3NSVUZCUlN4RFFVRkRPM2RDUVVOMFFrTXNUVUZCVFN4SFFVRkhSQ3hSUVVGUkxFVkJRVVVzUTBGQlF6dDNRa0ZGY0VJc1JVRkJSU3hIUVVGSFF5eE5RVUZOTEVWQlFVVXNRMEZCUXpzMFFrRkRXa2dzUzBGQlN5eERRVUZEYlVJc1IwRkJSeXhGUVVGRkxFTkJRVU03ZDBKQlEyUXNRMEZCUXp0dlFrRkRTQ3hEUVVGRE8yZENRVU5JTEVOQlFVTTdaMEpCUlVRc1JVRkJSU3hIUVVGSGFFSXNUVUZCVFN4RlFVRkZMRU5CUVVNN2IwSkJRMXBHTEV0QlFVc3NRMEZCUTIxQ0xGTkJRVk1zUTBGQlEyWXNWVUZCVlN4RFFVRkRMRU5CUVVNN1owSkJRemxDTEVOQlFVTTdaMEpCUlVRc1RVRkJUU3hEUVVGRFJpeE5RVUZOTzFsQlEyWXNRMEZCUXpzN08xbEJSVVJyUWl4SFFVRlJMRVZCUVZKQkxFTkJRVkU3YlVKQlFWSkJMRkZCUVZFc1EwRkJVa0VzVVVGQlVTeEhRVUZITEVOQlFVTTdaMEpCUTFZc1IwRkJTeXhEUVVGRFF5eDFRa0ZCZFVJc1IwRkJSeXhKUVVGSkxFTkJRVU40UWl4cFFrRkJhVUlzUTBGQlEzbENMRkZCUVZFc1NVRkRNMFJETEUxQlFVMHNSMEZCUjBZc2RVSkJRWFZDTEVWQlFVVXNSVUZCUnl4QlFVRklMRU5CUVVjN1owSkJSWHBETEUxQlFVMHNRMEZCUTBVc1RVRkJUVHRaUVVObUxFTkJRVU03T3p0WlFVVkVReXhIUVVGTExFVkJRVXhCTEVOQlFVczdiVUpCUVV4QkxGRkJRVkVzUTBGQlVrRXNTMEZCU3l4SFFVRkhMRU5CUVVNN1owSkJRVU1zVFVGQlRTeHpRa0Y2UkVjMVFpeHhRa0ZCY1VJc1lVRjVSR3BDTkVJc1EwRkJTeXhSUVVGWUxFbEJRVXNzWVVGQlR6VkNMSEZDUVVGeFFpeEZRVUZGTEVsQlFVa3NRMEZCUTBNc2FVSkJRV2xDTzFsQlFVY3NRMEZCUXpzN1RUczdSVUY2UkRkQ05FSXNVMEZCV1R0clFrRkJNVU0zUWl4eFFrRkJjVUlzUVNKOSIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfbm9uVGVybWluYWwgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCIpKTtcbnZhciBfcmVndWxhckV4cHJlc3Npb24gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsL3JlZ3VsYXJFeHByZXNzaW9uXCIpKTtcbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbGl0aWVzL2FycmF5XCIpO1xuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gICAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gICAgfVxuICAgIHJldHVybiBzZWxmO1xufVxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG59XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gICAgaWYgKGtleSBpbiBvYmopIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbn1cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICAgICAgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtcbiAgICB9O1xuICAgIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7XG59XG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgICB9XG4gICAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7XG59XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikge1xuICAgIHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7XG4gICAgICAgIGRlZmF1bHQ6IG9ialxuICAgIH07XG59XG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gICAgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICAgICAgcmV0dXJuIGNhbGw7XG4gICAgfVxuICAgIHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufVxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICAgICAgby5fX3Byb3RvX18gPSBwO1xuICAgICAgICByZXR1cm4gbztcbiAgICB9O1xuICAgIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59XG52YXIgX3R5cGVvZiA9IGZ1bmN0aW9uKG9iaikge1xuICAgIFwiQHN3Yy9oZWxwZXJzIC0gdHlwZW9mXCI7XG4gICAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG59O1xuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTtcbiAgICBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlO1xuICAgIHRyeSB7XG4gICAgICAgIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24oKSB7fSkpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkge1xuICAgIHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpO1xuICAgIHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHtcbiAgICAgICAgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7XG4gICAgICAgIGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7XG4gICAgICAgICAgICB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yO1xuICAgICAgICAgICAgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7XG4gICAgfTtcbn1cbnZhciBSZWd1bGFyRXhwcmVzc2lvbkJORk5vZGUgPSAvKiNfX1BVUkVfXyovIGZ1bmN0aW9uKE5vblRlcm1pbmFsTm9kZSkge1xuICAgIF9pbmhlcml0cyhSZWd1bGFyRXhwcmVzc2lvbkJORk5vZGUsIE5vblRlcm1pbmFsTm9kZSk7XG4gICAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihSZWd1bGFyRXhwcmVzc2lvbkJORk5vZGUpO1xuICAgIGZ1bmN0aW9uIFJlZ3VsYXJFeHByZXNzaW9uQk5GTm9kZSgpIHtcbiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFJlZ3VsYXJFeHByZXNzaW9uQk5GTm9kZSk7XG4gICAgICAgIHZhciBfdGhpcztcbiAgICAgICAgX3RoaXMgPSBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInJlZ3VsYXJFeHByZXNzaW9uXCIsIC9eXFwvKCg/OlxcXFwufFteXFwvXSkqKVxcLyQvKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBfY3JlYXRlQ2xhc3MoUmVndWxhckV4cHJlc3Npb25CTkZOb2RlLCBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJnZW5lcmF0ZVBhcnRcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlZ3VsYXJFeHByZXNzaW9uID0gdGhpcy5nZXRSZWd1bGFyRXhwcmVzc2lvbigpLCByZWd1bGFyRXhwcmVzc2lvblBhcnQgPSBuZXcgX3JlZ3VsYXJFeHByZXNzaW9uLmRlZmF1bHQocmVndWxhckV4cHJlc3Npb24pO1xuICAgICAgICAgICAgICAgIHJldHVybiByZWd1bGFyRXhwcmVzc2lvblBhcnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJnZXRSZWd1bGFyRXhwcmVzc2lvblwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJlZ3VsYXJFeHByZXNzaW9uKCkge1xuICAgICAgICAgICAgICAgIHZhciBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksIGZpcnN0Q2hpbGROb2RlID0gKDAsIF9hcnJheSkuZmlyc3QoY2hpbGROb2RlcyksIHRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlLCB0ZXJtaW5hbE5vZGVDb250ZW50ID0gdGVybWluYWxOb2RlLmdldENvbnRlbnQoKSwgbWF0Y2hlcyA9IHRlcm1pbmFsTm9kZUNvbnRlbnQubWF0Y2godGhpcy5yZWd1bGFyRXhwcmVzc2lvbiksIHNlY29uZE1hdGNoID0gKDAsIF9hcnJheSkuc2Vjb25kKG1hdGNoZXMpLCBwYXR0ZXJuID0gc2Vjb25kTWF0Y2gsIHJlZ3VsYXJFeHByZXNzaW9uID0gbmV3IFJlZ0V4cChwYXR0ZXJuKTsgLy8vXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZ3VsYXJFeHByZXNzaW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgXSwgW1xuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2Rlc1wiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMocnVsZU5hbWUsIGNoaWxkTm9kZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX25vblRlcm1pbmFsLmRlZmF1bHQuZnJvbVJ1bGVOYW1lQW5kQ2hpbGROb2RlcyhSZWd1bGFyRXhwcmVzc2lvbkJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIF0pO1xuICAgIHJldHVybiBSZWd1bGFyRXhwcmVzc2lvbkJORk5vZGU7XG59KF9ub25UZXJtaW5hbC5kZWZhdWx0KTtcbmV4cG9ydHMuZGVmYXVsdCA9IFJlZ3VsYXJFeHByZXNzaW9uQk5GTm9kZTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1TDNOeVl5OXViMlJsTDJKdVppOXlaV2QxYkdGeVJYaHdjbVZ6YzJsdmJpNXFjeUpkTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKY0luVnpaU0J6ZEhKcFkzUmNJanRjYmx4dWFXMXdiM0owSUU1dmJsUmxjbTFwYm1Gc1RtOWtaU0JtY205dElGd2lMaTR2TGk0dmJtOWtaUzl1YjI1VVpYSnRhVzVoYkZ3aU8xeHVhVzF3YjNKMElGSmxaM1ZzWVhKRmVIQnlaWE56YVc5dVVHRnlkQ0JtY205dElGd2lMaTR2TGk0dmNHRnlkQzkwWlhKdGFXNWhiQzl5WldkMWJHRnlSWGh3Y21WemMybHZibHdpTzF4dVhHNXBiWEJ2Y25RZ2V5Qm1hWEp6ZEN3Z2MyVmpiMjVrSUgwZ1puSnZiU0JjSWk0dUx5NHVMM1YwYVd4cGRHbGxjeTloY25KaGVWd2lPMXh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0JqYkdGemN5QlNaV2QxYkdGeVJYaHdjbVZ6YzJsdmJrSk9SazV2WkdVZ1pYaDBaVzVrY3lCT2IyNVVaWEp0YVc1aGJFNXZaR1VnZTF4dUlDQnlaV2QxYkdGeVJYaHdjbVZ6YzJsdmJpQTlJQzllWEZ3dktDZy9PbHhjWEZ3dWZGdGVYRnd2WFNrcUtWeGNMeVF2TzF4dVhHNGdJR2RsYm1WeVlYUmxVR0Z5ZENoc2IyOXJRV2hsWVdRcElIdGNiaUFnSUNCamIyNXpkQ0J5WldkMWJHRnlSWGh3Y21WemMybHZiaUE5SUhSb2FYTXVaMlYwVW1WbmRXeGhja1Y0Y0hKbGMzTnBiMjRvS1N4Y2JpQWdJQ0FnSUNBZ0lDQnlaV2QxYkdGeVJYaHdjbVZ6YzJsdmJsQmhjblFnUFNCdVpYY2dVbVZuZFd4aGNrVjRjSEpsYzNOcGIyNVFZWEowS0hKbFozVnNZWEpGZUhCeVpYTnphVzl1S1R0Y2JseHVJQ0FnSUhKbGRIVnliaUJ5WldkMWJHRnlSWGh3Y21WemMybHZibEJoY25RN1hHNGdJSDFjYmx4dUlDQm5aWFJTWldkMWJHRnlSWGh3Y21WemMybHZiaWdwSUh0Y2JpQWdJQ0JqYjI1emRDQmphR2xzWkU1dlpHVnpJRDBnZEdocGN5NW5aWFJEYUdsc1pFNXZaR1Z6S0Nrc1hHNGdJQ0FnSUNBZ0lDQWdabWx5YzNSRGFHbHNaRTV2WkdVZ1BTQm1hWEp6ZENoamFHbHNaRTV2WkdWektTeGNiaUFnSUNBZ0lDQWdJQ0IwWlhKdGFXNWhiRTV2WkdVZ1BTQm1hWEp6ZEVOb2FXeGtUbTlrWlN3Z0lDOHZMMXh1SUNBZ0lDQWdJQ0FnSUhSbGNtMXBibUZzVG05a1pVTnZiblJsYm5RZ1BTQjBaWEp0YVc1aGJFNXZaR1V1WjJWMFEyOXVkR1Z1ZENncExGeHVJQ0FnSUNBZ0lDQWdJRzFoZEdOb1pYTWdQU0IwWlhKdGFXNWhiRTV2WkdWRGIyNTBaVzUwTG0xaGRHTm9LSFJvYVhNdWNtVm5kV3hoY2tWNGNISmxjM05wYjI0cExGeHVJQ0FnSUNBZ0lDQWdJSE5sWTI5dVpFMWhkR05vSUQwZ2MyVmpiMjVrS0cxaGRHTm9aWE1wTEZ4dUlDQWdJQ0FnSUNBZ0lIQmhkSFJsY200Z1BTQnpaV052Ym1STllYUmphQ3dnTHk4dlhHNGdJQ0FnSUNBZ0lDQWdjbVZuZFd4aGNrVjRjSEpsYzNOcGIyNGdQU0J1WlhjZ1VtVm5SWGh3S0hCaGRIUmxjbTRwT3lBZ0x5OHZYRzVjYmlBZ0lDQnlaWFIxY200Z2NtVm5kV3hoY2tWNGNISmxjM05wYjI0N1hHNGdJSDFjYmx4dUlDQnpkR0YwYVdNZ1puSnZiVkoxYkdWT1lXMWxRVzVrUTJocGJHUk9iMlJsY3loeWRXeGxUbUZ0WlN3Z1kyaHBiR1JPYjJSbGN5a2dleUJ5WlhSMWNtNGdUbTl1VkdWeWJXbHVZV3hPYjJSbExtWnliMjFTZFd4bFRtRnRaVUZ1WkVOb2FXeGtUbTlrWlhNb1VtVm5kV3hoY2tWNGNISmxjM05wYjI1Q1RrWk9iMlJsTENCeWRXeGxUbUZ0WlN3Z1kyaHBiR1JPYjJSbGN5azdJSDFjYm4xY2JseHVJbDBzSW01aGJXVnpJanBiSWxKbFozVnNZWEpGZUhCeVpYTnphVzl1UWs1R1RtOWtaU0lzSW5KbFozVnNZWEpGZUhCeVpYTnphVzl1SWl3aVoyVnVaWEpoZEdWUVlYSjBJaXdpYkc5dmEwRm9aV0ZrSWl3aVoyVjBVbVZuZFd4aGNrVjRjSEpsYzNOcGIyNGlMQ0p5WldkMWJHRnlSWGh3Y21WemMybHZibEJoY25RaUxDSlNaV2QxYkdGeVJYaHdjbVZ6YzJsdmJsQmhjblFpTENKamFHbHNaRTV2WkdWeklpd2laMlYwUTJocGJHUk9iMlJsY3lJc0ltWnBjbk4wUTJocGJHUk9iMlJsSWl3aVptbHljM1FpTENKMFpYSnRhVzVoYkU1dlpHVWlMQ0owWlhKdGFXNWhiRTV2WkdWRGIyNTBaVzUwSWl3aVoyVjBRMjl1ZEdWdWRDSXNJbTFoZEdOb1pYTWlMQ0p0WVhSamFDSXNJbk5sWTI5dVpFMWhkR05vSWl3aWMyVmpiMjVrSWl3aWNHRjBkR1Z5YmlJc0lsSmxaMFY0Y0NJc0ltWnliMjFTZFd4bFRtRnRaVUZ1WkVOb2FXeGtUbTlrWlhNaUxDSnlkV3hsVG1GdFpTSXNJazV2YmxSbGNtMXBibUZzVG05a1pTSmRMQ0p0WVhCd2FXNW5jeUk2SWtGQlFVRXNRMEZCV1N4WFFVRkJMRU5CUVVNN096dEZPM2RDTzBGQlJXVXNSMEZCZDBJc1EwRkJlRUlzV1VGQmQwSTdRVUZEYkVJc1IwRkJkVU1zUTBGQmRrTXNhMEpCUVhWRE8wRkJSVE5ETEVkQlFYVkNMRU5CUVhaQ0xFMUJRWFZDT3pzN096czdPenM3T3pzN096czdPRVE3YzBNN05rUTdhVVU3T3pzN2QwVTdaMFU3T3pzN096czdPenM3VlRzN2QwSTdPenM3T3pzN1N6czdPenM3T3pzN096czdPenROTzNsRU96czdPenM3T3pzN096czdPenM3ZFVJN08wczdPenM3TWtJN096czdPenM3TzNGR096czdPenM3T3pzN096czdiVVU3TzJsRU96czdPenRKUVVWb1EwRXNkMEpCUVhkQ0xHbENRVUU1UWl4UlFVRlJPM2RFT3p0aFFVRkdRU3gzUWtGQmQwSTdkVVE3T3paRE8zVkVRVU16UTBNc1EwRkJhVUlzTmtORFVtNUNMRU5FVVN0RE96czdPenRaUVVVM1EwTXNSMEZCV1N4RlFVRmFRU3hEUVVGWk8yMUNRVUZhUVN4UlFVRlJMRU5CUVZKQkxGbEJRVmtzUTBGQlEwTXNVMEZCVXl4RlFVRkZMRU5CUVVNN1owSkJRM1pDTEVkQlFVc3NRMEZCUTBZc2FVSkJRV2xDTEVkQlFVY3NTVUZCU1N4RFFVRkRSeXh2UWtGQmIwSXNTVUZETjBORExIRkNRVUZ4UWl4SFFVRkhMRWRCUVVjc1EwRkJRME1zYTBKQlFYRkNMRk5CUVVOTUxHbENRVUZwUWp0blFrRkZla1VzVFVGQlRTeERRVUZEU1N4eFFrRkJjVUk3V1VGRE9VSXNRMEZCUXpzN08xbEJSVVJFTEVkQlFXOUNMRVZCUVhCQ1FTeERRVUZ2UWp0dFFrRkJjRUpCTEZGQlFWRXNRMEZCVWtFc2IwSkJRVzlDTEVkQlFVY3NRMEZCUXp0blFrRkRkRUlzUjBGQlN5eERRVUZEUnl4VlFVRlZMRWRCUVVjc1NVRkJTU3hEUVVGRFF5eGhRVUZoTEVsQlF5OUNReXhqUVVGakxFOUJRVWRETEUxQlFVc3NVVUZCUTBnc1ZVRkJWU3hIUVVOcVEwa3NXVUZCV1N4SFFVRkhSaXhqUVVGakxFVkJRemRDUnl4dFFrRkJiVUlzUjBGQlIwUXNXVUZCV1N4RFFVRkRSU3hWUVVGVkxFbEJRemREUXl4UFFVRlBMRWRCUVVkR0xHMUNRVUZ0UWl4RFFVRkRSeXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZEWkN4cFFrRkJhVUlzUjBGRE1VUmxMRmRCUVZjc1QwRkJSME1zVFVGQlRTeFRRVUZEU0N4UFFVRlBMRWRCUXpWQ1NTeFBRVUZQTEVkQlFVZEdMRmRCUVZjc1JVRkRja0ptTEdsQ1FVRnBRaXhIUVVGSExFZEJRVWNzUTBGQlEydENMRTFCUVUwc1EwRkJRMFFzVDBGQlR5eEhRVUZKTEVWQlFVY3NRVUZCU0N4RFFVRkhPMmRDUVVWdVJDeE5RVUZOTEVOQlFVTnFRaXhwUWtGQmFVSTdXVUZETVVJc1EwRkJRenM3T3p0WlFVVk5iVUlzUjBGQmVVSXNSVUZCZWtKQkxFTkJRWGxDTzIxQ1FVRm9ReXhSUVVGUkxFTkJRVVJCTEhsQ1FVRjVRaXhEUVVGRFF5eFJRVUZSTEVWQlFVVmtMRlZCUVZVc1JVRkJSU3hEUVVGRE8yZENRVUZETEUxQlFVMHNRMEZCUTJVc1dVRkJaU3hUUVVGRFJpeDVRa0ZCZVVJc1EwRkJRM0JDTEhkQ1FVRjNRaXhGUVVGRmNVSXNVVUZCVVN4RlFVRkZaQ3hWUVVGVk8xbEJRVWNzUTBGQlF6czdUVHM3UlVGMlFuaEhaU3haUVVGbE8ydENRVUZvUkhSQ0xIZENRVUYzUWl4QkluMD0iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHR5cGVzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFJlZ3VsYXJFeHByZXNzaW9uQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvcmVndWxhckV4cHJlc3Npb25cIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuaW1wb3J0IHsgUmVndWxhckV4cHJlc3Npb25SdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyByZWd1bGFyRXhwcmVzc2lvblR5cGUgfSA9IHR5cGVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWd1bGFyRXhwcmVzc2lvblJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcmVndWxhckV4cHJlc3Npb25TaWduaWZpY2FudFRva2VuVHlwZSA9IHJlZ3VsYXJFeHByZXNzaW9uVHlwZSwgIC8vL1xuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uID0gbmV3IFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbihyZWd1bGFyRXhwcmVzc2lvblNpZ25pZmljYW50VG9rZW5UeXBlKSxcbiAgICAgICAgICBuYW1lID0gUmVndWxhckV4cHJlc3Npb25SdWxlTmFtZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb2RlID0gUmVndWxhckV4cHJlc3Npb25CTkZOb2RlO1xuICAgIFxuICAgIHN1cGVyKG5hbWUsIGRlZmluaXRpb25zLCBOb2RlKVxuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgTm9XaGl0ZXNwYWNlUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC9ub1doaXRlc3BhY2VcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHRlcm1pbmFsU3ltYm9sQ29udGVudCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0ZXJtaW5hbFN5bWJvbENvbnRlbnQsICAvLy9cbiAgICAgICAgICBub1doaXRlc3BhY2VQYXJ0ID0gbmV3IE5vV2hpdGVzcGFjZVBhcnQoKSxcbiAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFBhcnQgPSBuZXcgVGVybWluYWxTeW1ib2xQYXJ0KGNvbnRlbnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydCxcbiAgICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydFxuICAgICAgICAgIF07XG5cbiAgICBzdXBlcihwYXJ0cylcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBEZWZpbml0aW9uQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvZGVmaW5pdGlvblwiO1xuaW1wb3J0IFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9xdWFudGlmaWVyUnVsZVwiO1xuXG5pbXBvcnQgeyBPcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyBxdWVzdGlvbk1hcmsgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPcHRpb25hbFF1YW50aWZpZXJSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSBPcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSxcbiAgICAgICAgICBvcHRpb25hbFF1YW50aWZpZXJUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBxdWVzdGlvbk1hcmssIC8vL1xuICAgICAgICAgIG9wdGlvbmFsUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uID0gbmV3IFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbihvcHRpb25hbFF1YW50aWZpZXJUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgb3B0aW9uYWxRdWFudGlmaWVyUnVsZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBEZWZpbml0aW9uQk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBEZWZpbml0aW9uQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvZGVmaW5pdGlvblwiO1xuaW1wb3J0IFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9xdWFudGlmaWVyUnVsZVwiO1xuXG5pbXBvcnQgeyBPbmVPck1vcmVRdWFudGlmaWVyUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgcGx1cyB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSBPbmVPck1vcmVRdWFudGlmaWVyUnVsZU5hbWUsXG4gICAgICAgICAgb25lT3JNb3JlUXVhbnRpZmllclRlcm1pbmFsU3ltYm9sQ29udGVudCA9IHBsdXMsIC8vL1xuICAgICAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbiA9IG5ldyBRdWFudGlmaWVyUnVsZURlZmluaXRpb24ob25lT3JNb3JlUXVhbnRpZmllclRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBvbmVPck1vcmVRdWFudGlmaWVyUnVsZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBEZWZpbml0aW9uQk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBEZWZpbml0aW9uQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvZGVmaW5pdGlvblwiO1xuaW1wb3J0IFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9xdWFudGlmaWVyUnVsZVwiO1xuXG5pbXBvcnQgeyBaZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IGFzdGVyaXNrIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgWmVyb09yTW9yZVF1YW50aWZpZXJSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5hbWUgPSBaZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lLFxuICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyVGVybWluYWxTeW1ib2xDb250ZW50ID0gYXN0ZXJpc2ssIC8vL1xuICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZURlZmluaXRpb24gPSBuZXcgUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uKHplcm9Pck1vcmVRdWFudGlmaWVyVGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vZGUgPSBEZWZpbml0aW9uQk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF9ub25UZXJtaW5hbCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIikpO1xudmFyIF9zaWduaWZpY2FudFRva2VuVHlwZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uLy4uL3BhcnQvdGVybWluYWwvc2lnbmlmaWNhbnRUb2tlblR5cGVcIikpO1xudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIik7XG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHNlbGY7XG59XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gICAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgICB9XG59XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAgICBpZiAoa2V5IGluIG9iaikge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBvYmpba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xufVxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgICAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICAgIH07XG4gICAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn1cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICAgIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICAgIH1cbiAgICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHtcbiAgICAgICAgZGVmYXVsdDogb2JqXG4gICAgfTtcbn1cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgICAgICByZXR1cm4gY2FsbDtcbiAgICB9XG4gICAgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59XG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgICAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgICAgIHJldHVybiBvO1xuICAgIH07XG4gICAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cbnZhciBfdHlwZW9mID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgXCJAc3djL2hlbHBlcnMgLSB0eXBlb2ZcIjtcbiAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbn07XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkge1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7XG4gICAgdHJ5IHtcbiAgICAgICAgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbigpIHt9KSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7XG4gICAgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkge1xuICAgICAgICB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDtcbiAgICAgICAgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHtcbiAgICAgICAgICAgIHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7XG4gICAgICAgICAgICByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTtcbiAgICB9O1xufVxudmFyIFNpZ25pZmljYW50VG9rZW5UeXBlQk5GTm9kZSA9IC8qI19fUFVSRV9fKi8gZnVuY3Rpb24oTm9uVGVybWluYWxOb2RlKSB7XG4gICAgX2luaGVyaXRzKFNpZ25pZmljYW50VG9rZW5UeXBlQk5GTm9kZSwgTm9uVGVybWluYWxOb2RlKTtcbiAgICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFNpZ25pZmljYW50VG9rZW5UeXBlQk5GTm9kZSk7XG4gICAgZnVuY3Rpb24gU2lnbmlmaWNhbnRUb2tlblR5cGVCTkZOb2RlKCkge1xuICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU2lnbmlmaWNhbnRUb2tlblR5cGVCTkZOb2RlKTtcbiAgICAgICAgdmFyIF90aGlzO1xuICAgICAgICBfdGhpcyA9IF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicmVndWxhckV4cHJlc3Npb25cIiwgL15cXFsoW15cXF1dKyldJC8pO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIF9jcmVhdGVDbGFzcyhTaWduaWZpY2FudFRva2VuVHlwZUJORk5vZGUsIFtcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImdlbmVyYXRlUGFydFwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICAgICAgICAgICAgICB2YXIgc2lnbmlmaWNhbnRUb2tlblR5cGUgPSB0aGlzLmdldFNpZ25pZmljYW50VG9rZW5UeXBlKCksIHNpZ25pZmljYW50VG9rZW5UeXBlUGFydCA9IG5ldyBfc2lnbmlmaWNhbnRUb2tlblR5cGUuZGVmYXVsdChzaWduaWZpY2FudFRva2VuVHlwZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW5UeXBlUGFydDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImdldFNpZ25pZmljYW50VG9rZW5UeXBlXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0U2lnbmlmaWNhbnRUb2tlblR5cGUoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSwgZmlyc3RDaGlsZE5vZGUgPSAoMCwgX2FycmF5KS5maXJzdChjaGlsZE5vZGVzKSwgdGVybWluYWxOb2RlID0gZmlyc3RDaGlsZE5vZGUsIHRlcm1pbmFsTm9kZUNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpLCBtYXRjaGVzID0gdGVybWluYWxOb2RlQ29udGVudC5tYXRjaCh0aGlzLnJlZ3VsYXJFeHByZXNzaW9uKSwgc2Vjb25kTWF0Y2ggPSAoMCwgX2FycmF5KS5zZWNvbmQobWF0Y2hlcyksIHNpZ25pZmljYW50VG9rZW5UeXBlID0gc2Vjb25kTWF0Y2g7IC8vL1xuICAgICAgICAgICAgICAgIHJldHVybiBzaWduaWZpY2FudFRva2VuVHlwZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIF0sIFtcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXNcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBmcm9tUnVsZU5hbWVBbmRDaGlsZE5vZGVzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9ub25UZXJtaW5hbC5kZWZhdWx0LmZyb21SdWxlTmFtZUFuZENoaWxkTm9kZXMoU2lnbmlmaWNhbnRUb2tlblR5cGVCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICBdKTtcbiAgICByZXR1cm4gU2lnbmlmaWNhbnRUb2tlblR5cGVCTkZOb2RlO1xufShfbm9uVGVybWluYWwuZGVmYXVsdCk7XG5leHBvcnRzLmRlZmF1bHQgPSBTaWduaWZpY2FudFRva2VuVHlwZUJORk5vZGU7XG5tb2R1bGUuZXhwb3J0cyA9IFNpZ25pZmljYW50VG9rZW5UeXBlQk5GTm9kZTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1TDNOeVl5OXViMlJsTDJKdVppOXphV2R1YVdacFkyRnVkRlJ2YTJWdVZIbHdaUzVxY3lKZExDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SmNJblZ6WlNCemRISnBZM1JjSWp0Y2JseHVhVzF3YjNKMElFNXZibFJsY20xcGJtRnNUbTlrWlNCbWNtOXRJRndpTGk0dkxpNHZibTlrWlM5dWIyNVVaWEp0YVc1aGJGd2lPMXh1YVcxd2IzSjBJRk5wWjI1cFptbGpZVzUwVkc5clpXNVVlWEJsVUdGeWRDQm1jbTl0SUZ3aUxpNHZMaTR2Y0dGeWRDOTBaWEp0YVc1aGJDOXphV2R1YVdacFkyRnVkRlJ2YTJWdVZIbHdaVndpTzF4dVhHNXBiWEJ2Y25RZ2V5Qm1hWEp6ZEN3Z2MyVmpiMjVrSUgwZ1puSnZiU0JjSWk0dUx5NHVMM1YwYVd4cGRHbGxjeTloY25KaGVWd2lPMXh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0JqYkdGemN5QlRhV2R1YVdacFkyRnVkRlJ2YTJWdVZIbHdaVUpPUms1dlpHVWdaWGgwWlc1a2N5Qk9iMjVVWlhKdGFXNWhiRTV2WkdVZ2UxeHVJQ0J5WldkMWJHRnlSWGh3Y21WemMybHZiaUE5SUM5ZVhGeGJLRnRlWEZ4ZFhTc3BYU1F2TzF4dVhHNGdJR2RsYm1WeVlYUmxVR0Z5ZENoc2IyOXJRV2hsWVdRcElIdGNiaUFnSUNCamIyNXpkQ0J6YVdkdWFXWnBZMkZ1ZEZSdmEyVnVWSGx3WlNBOUlIUm9hWE11WjJWMFUybG5ibWxtYVdOaGJuUlViMnRsYmxSNWNHVW9LU3hjYmlBZ0lDQWdJQ0FnSUNCemFXZHVhV1pwWTJGdWRGUnZhMlZ1Vkhsd1pWQmhjblFnUFNCdVpYY2dVMmxuYm1sbWFXTmhiblJVYjJ0bGJsUjVjR1ZRWVhKMEtITnBaMjVwWm1sallXNTBWRzlyWlc1VWVYQmxLVHRjYmx4dUlDQWdJSEpsZEhWeWJpQnphV2R1YVdacFkyRnVkRlJ2YTJWdVZIbHdaVkJoY25RN1hHNGdJSDFjYmx4dUlDQm5aWFJUYVdkdWFXWnBZMkZ1ZEZSdmEyVnVWSGx3WlNncElIdGNiaUFnSUNCamIyNXpkQ0JqYUdsc1pFNXZaR1Z6SUQwZ2RHaHBjeTVuWlhSRGFHbHNaRTV2WkdWektDa3NYRzRnSUNBZ0lDQWdJQ0FnWm1seWMzUkRhR2xzWkU1dlpHVWdQU0JtYVhKemRDaGphR2xzWkU1dlpHVnpLU3hjYmlBZ0lDQWdJQ0FnSUNCMFpYSnRhVzVoYkU1dlpHVWdQU0JtYVhKemRFTm9hV3hrVG05a1pTd2dJQzh2TDF4dUlDQWdJQ0FnSUNBZ0lIUmxjbTFwYm1Gc1RtOWtaVU52Ym5SbGJuUWdQU0IwWlhKdGFXNWhiRTV2WkdVdVoyVjBRMjl1ZEdWdWRDZ3BMRnh1SUNBZ0lDQWdJQ0FnSUcxaGRHTm9aWE1nUFNCMFpYSnRhVzVoYkU1dlpHVkRiMjUwWlc1MExtMWhkR05vS0hSb2FYTXVjbVZuZFd4aGNrVjRjSEpsYzNOcGIyNHBMRnh1SUNBZ0lDQWdJQ0FnSUhObFkyOXVaRTFoZEdOb0lEMGdjMlZqYjI1a0tHMWhkR05vWlhNcExGeHVJQ0FnSUNBZ0lDQWdJSE5wWjI1cFptbGpZVzUwVkc5clpXNVVlWEJsSUQwZ2MyVmpiMjVrVFdGMFkyZzdJQzh2TDF4dVhHNGdJQ0FnY21WMGRYSnVJSE5wWjI1cFptbGpZVzUwVkc5clpXNVVlWEJsTzF4dUlDQjlYRzVjYmlBZ2MzUmhkR2xqSUdaeWIyMVNkV3hsVG1GdFpVRnVaRU5vYVd4a1RtOWtaWE1vY25Wc1pVNWhiV1VzSUdOb2FXeGtUbTlrWlhNcElIc2djbVYwZFhKdUlFNXZibFJsY20xcGJtRnNUbTlrWlM1bWNtOXRVblZzWlU1aGJXVkJibVJEYUdsc1pFNXZaR1Z6S0ZOcFoyNXBabWxqWVc1MFZHOXJaVzVVZVhCbFFrNUdUbTlrWlN3Z2NuVnNaVTVoYldVc0lHTm9hV3hrVG05a1pYTXBPeUI5WEc1OVhHNWNibTF2WkhWc1pTNWxlSEJ2Y25SeklEMGdVMmxuYm1sbWFXTmhiblJVYjJ0bGJsUjVjR1ZDVGtaT2IyUmxPMXh1WEc1Y2JpSmRMQ0p1WVcxbGN5STZXeUpUYVdkdWFXWnBZMkZ1ZEZSdmEyVnVWSGx3WlVKT1JrNXZaR1VpTENKeVpXZDFiR0Z5Ulhod2NtVnpjMmx2YmlJc0ltZGxibVZ5WVhSbFVHRnlkQ0lzSW14dmIydEJhR1ZoWkNJc0luTnBaMjVwWm1sallXNTBWRzlyWlc1VWVYQmxJaXdpWjJWMFUybG5ibWxtYVdOaGJuUlViMnRsYmxSNWNHVWlMQ0p6YVdkdWFXWnBZMkZ1ZEZSdmEyVnVWSGx3WlZCaGNuUWlMQ0pUYVdkdWFXWnBZMkZ1ZEZSdmEyVnVWSGx3WlZCaGNuUWlMQ0pqYUdsc1pFNXZaR1Z6SWl3aVoyVjBRMmhwYkdST2IyUmxjeUlzSW1acGNuTjBRMmhwYkdST2IyUmxJaXdpWm1seWMzUWlMQ0owWlhKdGFXNWhiRTV2WkdVaUxDSjBaWEp0YVc1aGJFNXZaR1ZEYjI1MFpXNTBJaXdpWjJWMFEyOXVkR1Z1ZENJc0ltMWhkR05vWlhNaUxDSnRZWFJqYUNJc0luTmxZMjl1WkUxaGRHTm9JaXdpYzJWamIyNWtJaXdpWm5KdmJWSjFiR1ZPWVcxbFFXNWtRMmhwYkdST2IyUmxjeUlzSW5KMWJHVk9ZVzFsSWl3aVRtOXVWR1Z5YldsdVlXeE9iMlJsSWl3aWJXOWtkV3hsSWl3aVpYaHdiM0owY3lKZExDSnRZWEJ3YVc1bmN5STZJa0ZCUVVFc1EwRkJXU3hYUVVGQkxFTkJRVU03T3p0Rk8zZENPMEZCUldVc1IwRkJkMElzUTBGQmVFSXNXVUZCZDBJN1FVRkRaaXhIUVVFd1F5eERRVUV4UXl4eFFrRkJNRU03UVVGRmFrUXNSMEZCZFVJc1EwRkJka0lzVFVGQmRVSTdPenM3T3pzN096czdPenM3T3pzNFJEdHpRenMyUkR0cFJUczdPenQzUlR0blJUczdPenM3T3pzN096dFZPenQzUWpzN096czdPenRMT3pzN096czdPenM3T3pzN08wMDdlVVE3T3pzN096czdPenM3T3pzN096dDFRanM3U3pzN096c3lRanM3T3pzN096czdjVVk3T3pzN096czdPenM3T3p0dFJUczdhVVE3T3pzN08wbEJSV2hEUVN3eVFrRkJNa0lzYVVKQlFXcERMRkZCUVZFN01rUTdPMkZCUVVaQkxESkNRVUV5UWpzd1JEczdOa003ZFVSQlF6bERReXhEUVVGcFFpeHZRME5TYmtJc1EwUlJjME03T3pzN08xbEJSWEJEUXl4SFFVRlpMRVZCUVZwQkxFTkJRVms3YlVKQlFWcEJMRkZCUVZFc1EwRkJVa0VzV1VGQldTeERRVUZEUXl4VFFVRlRMRVZCUVVVc1EwRkJRenRuUWtGRGRrSXNSMEZCU3l4RFFVRkRReXh2UWtGQmIwSXNSMEZCUnl4SlFVRkpMRU5CUVVORExIVkNRVUYxUWl4SlFVTnVSRU1zZDBKQlFYZENMRWRCUVVjc1IwRkJSeXhEUVVGRFF5eHhRa0ZCZDBJc1UwRkJRMGdzYjBKQlFXOUNPMmRDUVVWc1JpeE5RVUZOTEVOQlFVTkZMSGRDUVVGM1FqdFpRVU5xUXl4RFFVRkRPenM3V1VGRlJFUXNSMEZCZFVJc1JVRkJka0pCTEVOQlFYVkNPMjFDUVVGMlFrRXNVVUZCVVN4RFFVRlNRU3gxUWtGQmRVSXNSMEZCUnl4RFFVRkRPMmRDUVVONlFpeEhRVUZMTEVOQlFVTkhMRlZCUVZVc1IwRkJSeXhKUVVGSkxFTkJRVU5ETEdGQlFXRXNTVUZETDBKRExHTkJRV01zVDBGQlIwTXNUVUZCU3l4UlFVRkRTQ3hWUVVGVkxFZEJRMnBEU1N4WlFVRlpMRWRCUVVkR0xHTkJRV01zUlVGRE4wSkhMRzFDUVVGdFFpeEhRVUZIUkN4WlFVRlpMRU5CUVVORkxGVkJRVlVzU1VGRE4wTkRMRTlCUVU4c1IwRkJSMFlzYlVKQlFXMUNMRU5CUVVOSExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTm1MR2xDUVVGcFFpeEhRVU14UkdkQ0xGZEJRVmNzVDBGQlIwTXNUVUZCVFN4VFFVRkRTQ3hQUVVGUExFZEJRelZDV0N4dlFrRkJiMElzUjBGQlIyRXNWMEZCVnl4RlFVRkZMRVZCUVVjc1FVRkJTQ3hEUVVGSE8yZENRVVUzUXl4TlFVRk5MRU5CUVVOaUxHOUNRVUZ2UWp0WlFVTTNRaXhEUVVGRE96czdPMWxCUlUxbExFZEJRWGxDTEVWQlFYcENRU3hEUVVGNVFqdHRRa0ZCYUVNc1VVRkJVU3hEUVVGRVFTeDVRa0ZCZVVJc1EwRkJRME1zVVVGQlVTeEZRVUZGV2l4VlFVRlZMRVZCUVVVc1EwRkJRenRuUWtGQlF5eE5RVUZOTEVOQlFVTmhMRmxCUVdVc1UwRkJRMFlzZVVKQlFYbENMRU5CUVVOdVFpd3lRa0ZCTWtJc1JVRkJSVzlDTEZGQlFWRXNSVUZCUlZvc1ZVRkJWVHRaUVVGSExFTkJRVU03TzAwN08wVkJkRUo0UjJFc1dVRkJaVHRyUWtGQmJrUnlRaXd5UWtGQk1rSXNRVHRCUVhsQ2FFUnpRaXhOUVVGTkxFTkJRVU5ETEU5QlFVOHNSMEZCUjNaQ0xESkNRVUV5UWl4RFFVRkRJbjA9IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyB0eXBlcyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZUJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5cbmltcG9ydCB7IFNpZ25pZmljYW50VG9rZW5UeXBlUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgdHlwZVR5cGUgfSA9IHR5cGVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaWduaWZpY2FudFRva2VuVHlwZVJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgdHlwZVNpZ25pZmljYW50VG9rZW5UeXBlID0gdHlwZVR5cGUsICAvLy9cbiAgICAgICAgICB0eXBlU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uID0gbmV3IFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbih0eXBlU2lnbmlmaWNhbnRUb2tlblR5cGUpLFxuICAgICAgICAgIG5hbWUgPSBTaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgdHlwZVNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9kZSA9IFNpZ25pZmljYW50VG9rZW5UeXBlQk5GTm9kZTtcbiAgICBcbiAgICBzdXBlcihuYW1lLCBkZWZpbml0aW9ucywgTm9kZSlcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVNYXBGcm9tUnVsZXMocnVsZXMpIHtcbiAgY29uc3QgcnVsZU1hcCA9IHt9O1xuXG4gIHJ1bGVzLmZvckVhY2goKHJ1bGUpID0+IHtcbiAgICBjb25zdCBydWxlTmFtZSA9IHJ1bGUuZ2V0TmFtZSgpO1xuXG4gICAgcnVsZU1hcFtydWxlTmFtZV0gPSBydWxlO1xuICB9KTtcblxuICByZXR1cm4gcnVsZU1hcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0UnVsZUZyb21SdWxlcyhydWxlcykge1xuICBjb25zdCBmaXJzdFJ1bGUgPSBmaXJzdChydWxlcyksXG4gICAgICBzdGFydFJ1bGUgPSBmaXJzdFJ1bGU7ICAvLy9cblxuICByZXR1cm4gc3RhcnRSdWxlO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgYm5mIGZyb20gXCIuL2JuZlwiO1xuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBTdGF0ZSBmcm9tIFwiLi4vc3RhdGVcIjtcbmltcG9ydCBOYW1lUnVsZSBmcm9tIFwiLi4vcnVsZS9uYW1lXCI7XG5pbXBvcnQgUGFydFJ1bGUgZnJvbSBcIi4uL3J1bGUvcGFydFwiO1xuaW1wb3J0IFJ1bGVSdWxlIGZyb20gXCIuLi9ydWxlL3J1bGVcIjtcbmltcG9ydCBFcnJvclJ1bGUgZnJvbSBcIi4uL3J1bGUvZXJyb3JcIjtcbmltcG9ydCBEb2N1bWVudFJ1bGUgZnJvbSBcIi4uL3J1bGUvZG9jdW1lbnRcIjtcbmltcG9ydCBSdWxlTmFtZVJ1bGUgZnJvbSBcIi4uL3J1bGUvcnVsZU5hbWVcIjtcbmltcG9ydCBXaWxkY2FyZFJ1bGUgZnJvbSBcIi4uL3J1bGUvd2lsZGNhcmRcIjtcbmltcG9ydCBFbmRPZkxpbmVSdWxlIGZyb20gXCIuLi9ydWxlL2VuZE9mTGluZVwiO1xuaW1wb3J0IFF1YW50aWZpZXJSdWxlIGZyb20gXCIuLi9ydWxlL3F1YW50aWZpZXJcIjtcbmltcG9ydCBEZWZpbml0aW9uUnVsZSBmcm9tIFwiLi4vcnVsZS9kZWZpbml0aW9uXCI7XG5pbXBvcnQgRGVmaW5pdGlvbnNSdWxlIGZyb20gXCIuLi9ydWxlL2RlZmluaXRpb25zXCI7XG5pbXBvcnQgVGVybWluYWxQYXJ0UnVsZSBmcm9tIFwiLi4vcnVsZS90ZXJtaW5hbFBhcnRcIjtcbmltcG9ydCBDaG9pY2VPZlBhcnRzUnVsZSBmcm9tIFwiLi4vcnVsZS9jaG9pY2VPZlBhcnRzXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xSdWxlIGZyb20gXCIuLi9ydWxlL3Rlcm1pbmFsU3ltYm9sXCI7XG5pbXBvcnQgTm9uVGVybWluYWxQYXJ0UnVsZSBmcm9tIFwiLi4vcnVsZS9ub25UZXJtaW5hbFBhcnRcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNSdWxlIGZyb20gXCIuLi9ydWxlL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZVBhcnRSdWxlIGZyb20gXCIuLi9ydWxlL25vV2hpdGVzcGFjZVBhcnRcIjtcbmltcG9ydCBMb29rQWhlYWRNb2RpZmllclJ1bGUgZnJvbSBcIi4uL3J1bGUvbG9va0FoZWFkTW9kaWZpZXJcIjtcbmltcG9ydCBSZWd1bGFyRXhwcmVzc2lvblJ1bGUgZnJvbSBcIi4uL3J1bGUvcmVndWxhckV4cHJlc3Npb25cIjtcbmltcG9ydCBPcHRpb25hbFF1YW50aWZpZXJSdWxlIGZyb20gXCIuLi9ydWxlL29wdGlvbmFsUXVhbnRpZmllclwiO1xuaW1wb3J0IE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlIGZyb20gXCIuLi9ydWxlL29uZU9yTW9yZVF1YW50aWZpZXJcIjtcbmltcG9ydCBaZXJvT3JNb3JlUXVhbnRpZmllclJ1bGUgZnJvbSBcIi4uL3J1bGUvemVyb09yTW9yZVF1YW50aWZpZXJcIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZVJ1bGUgZnJvbSBcIi4uL3J1bGUvc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuaW1wb3J0IHsgc3RhcnRSdWxlRnJvbVJ1bGVzLCBydWxlTWFwRnJvbVJ1bGVzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9ydWxlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCTkZQYXJzZXIge1xuICBjb25zdHJ1Y3RvcihzdGFydFJ1bGUsIHJ1bGVNYXApIHtcbiAgICB0aGlzLnN0YXJ0UnVsZSA9IHN0YXJ0UnVsZTtcbiAgICB0aGlzLnJ1bGVNYXAgPSBydWxlTWFwO1xuICB9XG5cbiAgZ2V0U3RhcnRSdWxlKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0UnVsZTtcbiAgfVxuXG4gIGdldFJ1bGVNYXAoKSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZU1hcDtcbiAgfVxuXG4gIHBhcnNlKHRva2VucywgcnVsZSA9IHRoaXMuc3RhcnRSdWxlKSB7XG4gICAgY29uc3Qgc3RhdGUgPSBTdGF0ZS5mcm9tVG9rZW5zQW5kUnVsZU1hcCh0b2tlbnMsIHRoaXMucnVsZU1hcCksXG4gICAgICAgICAgY2FsbGJhY2sgPSBudWxsLFxuICAgICAgICAgIHJ1bGVOb2RlID0gcnVsZS5wYXJzZShzdGF0ZSwgY2FsbGJhY2spLFxuICAgICAgICAgIG5vZGUgPSBydWxlTm9kZTsgLy8vXG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG5cdHJ1bGVzRnJvbVRva2Vucyh0b2tlbnMpIHtcblx0ICBsZXQgcnVsZXM7XG5cbiAgICBjb25zdCBub2RlID0gdGhpcy5wYXJzZSh0b2tlbnMpO1xuXG4gICAgaWYgKG5vZGUgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlcmUgaXMgbm8gbm9kZS5gKTtcbiAgICB9XG5cbiAgICBydWxlcyA9IG5vZGUuZ2VuZXJhdGVSdWxlcyhSdWxlKTtcblxuICAgIGNvbnN0IHJ1bGVzTGVuZ3RoID0gcnVsZXMubGVuZ3RoO1xuXG4gICAgaWYgKHJ1bGVzTGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZXJlIGFyZSBubyBydWxlcy5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcnVsZXM7XG4gIH1cblxuICBzdGF0aWMgYm5mID0gYm5mO1xuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBuYW1lUnVsZSA9IG5ldyBOYW1lUnVsZSgpLFxuICAgICAgICAgIHBhcnRSdWxlID0gbmV3IFBhcnRSdWxlKCksXG4gICAgICAgICAgcnVsZVJ1bGUgPSBuZXcgUnVsZVJ1bGUoKSxcbiAgICAgICAgICBlcnJvclJ1bGUgPSBuZXcgRXJyb3JSdWxlKCksXG4gICAgICAgICAgZG9jdW1lbnRSdWxlID0gbmV3IERvY3VtZW50UnVsZSgpLFxuICAgICAgICAgIHJ1bGVOYW1lUnVsZSA9IG5ldyBSdWxlTmFtZVJ1bGUoKSxcbiAgICAgICAgICB3aWxkY2FyZFJ1bGUgPSBuZXcgV2lsZGNhcmRSdWxlKCksXG4gICAgICAgICAgZW5kT2ZMaW5lUnVsZSA9IG5ldyBFbmRPZkxpbmVSdWxlKCksXG4gICAgICAgICAgcXVhbnRpZmllclJ1bGUgPSBuZXcgUXVhbnRpZmllclJ1bGUoKSxcbiAgICAgICAgICBkZWZpbml0aW9uUnVsZSA9IG5ldyBEZWZpbml0aW9uUnVsZSgpLFxuICAgICAgICAgIGRlZmluaXRpb25zUnVsZSA9IG5ldyBEZWZpbml0aW9uc1J1bGUoKSxcbiAgICAgICAgICB0ZXJtaW5hbFBhcnRSdWxlID0gbmV3IFRlcm1pbmFsUGFydFJ1bGUoKSxcbiAgICAgICAgICBjaG9pY2VPZlBhcnRzUnVsZSA9IG5ldyBDaG9pY2VPZlBhcnRzUnVsZSgpLFxuICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUnVsZSA9IG5ldyBUZXJtaW5hbFN5bWJvbFJ1bGUoKSxcbiAgICAgICAgICBub25UZXJtaW5hbFBhcnRSdWxlID0gbmV3IE5vblRlcm1pbmFsUGFydFJ1bGUoKSxcbiAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNSdWxlID0gbmV3IFNlcXVlbmNlT2ZQYXJ0c1J1bGUoKSxcbiAgICAgICAgICBub1doaXRlc3BhY2VQYXJ0UnVsZSA9IG5ldyBOb1doaXRlc3BhY2VQYXJ0UnVsZSgpLFxuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUnVsZSA9IG5ldyBSZWd1bGFyRXhwcmVzc2lvblJ1bGUoKSxcbiAgICAgICAgICBsb29rQWhlYWRNb2RpZmllclJ1bGUgPSBuZXcgTG9va0FoZWFkTW9kaWZpZXJSdWxlKCksXG4gICAgICAgICAgb3B0aW9uYWxRdWFudGlmaWVyUnVsZSA9IG5ldyBPcHRpb25hbFF1YW50aWZpZXJSdWxlKCksXG4gICAgICAgICAgb25lT3JNb3JlUXVhbnRpZmllclJ1bGUgPSBuZXcgT25lT3JNb3JlUXVhbnRpZmllclJ1bGUoKSxcbiAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGUgPSBuZXcgWmVyb09yTW9yZVF1YW50aWZpZXJSdWxlKCksXG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlID0gbmV3IFNpZ25pZmljYW50VG9rZW5UeXBlUnVsZSgpO1xuXG4gICAgbGV0IHJ1bGVzID0gW1xuICAgICAgZG9jdW1lbnRSdWxlLFxuICAgICAgcnVsZVJ1bGUsXG4gICAgICBuYW1lUnVsZSxcbiAgICAgIGRlZmluaXRpb25zUnVsZSxcbiAgICAgIGRlZmluaXRpb25SdWxlLFxuICAgICAgcGFydFJ1bGUsXG4gICAgICBub25UZXJtaW5hbFBhcnRSdWxlLFxuICAgICAgdGVybWluYWxQYXJ0UnVsZSxcbiAgICAgIG5vV2hpdGVzcGFjZVBhcnRSdWxlLFxuICAgICAgc2VxdWVuY2VPZlBhcnRzUnVsZSxcbiAgICAgIGNob2ljZU9mUGFydHNSdWxlLFxuICAgICAgcnVsZU5hbWVSdWxlLFxuICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlLFxuICAgICAgcmVndWxhckV4cHJlc3Npb25SdWxlLFxuICAgICAgdGVybWluYWxTeW1ib2xSdWxlLFxuICAgICAgZW5kT2ZMaW5lUnVsZSxcbiAgICAgIHdpbGRjYXJkUnVsZSxcbiAgICAgIHF1YW50aWZpZXJSdWxlLFxuICAgICAgbG9va0FoZWFkTW9kaWZpZXJSdWxlLFxuICAgICAgb3B0aW9uYWxRdWFudGlmaWVyUnVsZSxcbiAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlLFxuICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlLFxuICAgICAgZXJyb3JSdWxlXG4gICAgXTtcblxuICAgIGNvbnN0IHN0YXJ0UnVsZSA9IHN0YXJ0UnVsZUZyb21SdWxlcyhydWxlcyksXG4gICAgICAgICAgcnVsZU1hcCA9IHJ1bGVNYXBGcm9tUnVsZXMocnVsZXMpLFxuICAgICAgICAgIGJuZlBhcnNlciA9IG5ldyBCTkZQYXJzZXIoc3RhcnRSdWxlLCBydWxlTWFwKTtcbiAgICBcbiAgICByZXR1cm4gYm5mUGFyc2VyO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGJuZiA9IGBcblxuICBleHByZXNzaW9uICA6Oj0gZXhwcmVzc2lvbl8gb3BlcmF0b3IgZXhwcmVzc2lvbiBleHByZXNzaW9ufipcblxuICAgICAgICAgICAgICAgIHwgZXhwcmVzc2lvbl9cblxuICAgICAgICAgICAgICAgIDtcblxuICBvcGVyYXRvciAgICA6Oj0gXCIrXCJcblxuICAgICAgICAgICAgICAgIHwgXCItXCJcblxuICAgICAgICAgICAgICAgIHwgXCIvXCJcblxuICAgICAgICAgICAgICAgIHwgXCIqXCJcblxuICAgICAgICAgICAgICAgIDtcblxuICB0ZXJtICAgICAgICA6Oj0gL1xcXFxkKy8gO1xuXG4gIGV4cHJlc3Npb25fIDo6PSBcIihcIiBleHByZXNzaW9uIFwiKVwiXG5cbiAgICAgICAgICAgICAgICB8IHRlcm1cblxuICAgICAgICAgICAgICAgIDtcblxuICBleHByZXNzaW9ufiA6Oj0gb3BlcmF0b3IgZXhwcmVzc2lvbiA7XG4gIFxuYDtcblxuZXhwb3J0IGRlZmF1bHQgYm5mO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBCTkZMZXhlciB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IEJORlBhcnNlciBmcm9tIFwiLi4vYm5mL3BhcnNlclwiO1xuXG5pbXBvcnQgeyBzdGFydFJ1bGVGcm9tUnVsZXMsIHJ1bGVNYXBGcm9tUnVsZXMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3J1bGVzXCI7XG5cbmNvbnN0IGJuZkxleGVyID0gQk5GTGV4ZXIuZnJvbU5vdGhpbmcoKSxcbiAgICAgIGJuZlBhcnNlciA9IEJORlBhcnNlci5mcm9tTm90aGluZygpO1xuXG5leHBvcnQgZnVuY3Rpb24gcnVsZXNGcm9tQk5GKGJuZikge1xuICBjb25zdCB0b2tlbnMgPSBibmZMZXhlci50b2tlbnNGcm9tQk5GKGJuZiksXG4gICAgICAgIHJ1bGVzID0gYm5mUGFyc2VyLnJ1bGVzRnJvbVRva2Vucyh0b2tlbnMpO1xuXG4gIHJldHVybiBydWxlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlckZyb21SdWxlcyhDbGFzcywgcnVsZXMpIHtcbiAgY29uc3Qgc3RhcnRSdWxlID0gc3RhcnRSdWxlRnJvbVJ1bGVzKHJ1bGVzKSxcbiAgICAgICAgcnVsZU1hcCA9IHJ1bGVNYXBGcm9tUnVsZXMocnVsZXMpLFxuICAgICAgICBwYXJzZXIgPSBuZXcgQ2xhc3Moc3RhcnRSdWxlLCBydWxlTWFwKTtcblxuICByZXR1cm4gcGFyc2VyO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU3RhdGUgZnJvbSBcIi4uL3N0YXRlXCI7XG5cbmltcG9ydCB7IHJ1bGVzRnJvbUJORiwgcGFyc2VyRnJvbVJ1bGVzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9wYXJzZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29tbW9uUGFyc2VyIHtcbiAgY29uc3RydWN0b3Ioc3RhcnRSdWxlLCBydWxlTWFwKSB7XG4gICAgdGhpcy5zdGFydFJ1bGUgPSBzdGFydFJ1bGU7XG4gICAgdGhpcy5ydWxlTWFwID0gcnVsZU1hcDtcbiAgfVxuXG4gIGdldFN0YXJ0UnVsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydFJ1bGU7XG4gIH1cblxuICBnZXRSdWxlTWFwKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVNYXA7XG4gIH1cblxuICBwYXJzZSh0b2tlbnMsIHJ1bGUgPSB0aGlzLnN0YXJ0UnVsZSkge1xuICAgIGNvbnN0IHN0YXRlID0gU3RhdGUuZnJvbVRva2Vuc0FuZFJ1bGVNYXAodG9rZW5zLCB0aGlzLnJ1bGVNYXApLFxuICAgICAgICAgIGNhbGxiYWNrID0gbnVsbCxcbiAgICAgICAgICBydWxlTm9kZSA9IHJ1bGUucGFyc2Uoc3RhdGUsIGNhbGxiYWNrKSxcbiAgICAgICAgICBub2RlID0gcnVsZU5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoQ2xhc3MpIHtcbiAgICBjb25zdCB7IGJuZiB9ID0gQ2xhc3MsXG4gICAgICAgICAgcnVsZXMgPSBydWxlc0Zyb21CTkYoYm5mKSxcbiAgICAgICAgICBwYXJzZXIgPSBwYXJzZXJGcm9tUnVsZXMoQ2xhc3MsIHJ1bGVzKTtcblxuICAgIHJldHVybiBwYXJzZXI7XG4gIH1cblxuICBzdGF0aWMgZnJvbUJORihDbGFzcywgYm5mKSB7XG4gICAgY29uc3QgcnVsZXMgPSBydWxlc0Zyb21CTkYoYm5mKSxcbiAgICAgICAgICBwYXJzZXIgPSBwYXJzZXJGcm9tUnVsZXMoQ2xhc3MsIHJ1bGVzKTtcblxuICAgIHJldHVybiBwYXJzZXI7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVzKENsYXNzLCBydWxlcykge1xuICAgIGNvbnN0IHBhcnNlciA9IHBhcnNlckZyb21SdWxlcyhDbGFzcywgcnVsZXMpO1xuXG4gICAgcmV0dXJuIHBhcnNlcjtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgYm5mIGZyb20gXCIuL2JuZlwiO1xuaW1wb3J0IENvbW1vblBhcnNlciBmcm9tIFwiLi4vY29tbW9uL3BhcnNlclwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCYXNpY1BhcnNlciBleHRlbmRzIENvbW1vblBhcnNlciB7XG4gIHN0YXRpYyBibmYgPSBibmY7XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21Ob3RoaW5nKEJhc2ljUGFyc2VyKTsgfVxuXG4gIHN0YXRpYyBmcm9tQk5GKGJuZikgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21CTkYoQmFzaWNQYXJzZXIsIGJuZik7IH1cblxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbVJ1bGVzKEJhc2ljUGFyc2VyLCBydWxlcyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFdpbGRjYXJkUGFydCBmcm9tIFwiLi9wYXJ0L3Rlcm1pbmFsL3dpbGRjYXJkXCI7XG5pbXBvcnQgRW5kT2ZMaW5lUGFydCBmcm9tIFwiLi9wYXJ0L3Rlcm1pbmFsL2VuZE9mTGluZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5pbXBvcnQgUmVndWxhckV4cHJlc3Npb25QYXJ0IGZyb20gXCIuL3BhcnQvdGVybWluYWwvcmVndWxhckV4cHJlc3Npb25cIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQgZnJvbSBcIi4vcGFydC90ZXJtaW5hbC9zaWduaWZpY2FudFRva2VuVHlwZVwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgT3B0aW9uYWxQYXJ0UGFydCBmcm9tIFwiLi9wYXJ0L25vblRlcm1pbmFsL29wdGlvbmFsUGFydFwiO1xuaW1wb3J0IFplcm9Pck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4vcGFydC9ub25UZXJtaW5hbC96ZXJvT3JNb3JlUGFydHNcIjtcbmltcG9ydCBPbmVPck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4vcGFydC9ub25UZXJtaW5hbC9vbmVPck1vcmVQYXJ0c1wiO1xuaW1wb3J0IFNlcXVlbmNlT2ZQYXJ0c1BhcnQgZnJvbSBcIi4vcGFydC9ub25UZXJtaW5hbC9zZXF1ZW5jZU9mUGFydHNcIjtcbmltcG9ydCBDaG9pY2VPZlBhcnRzUGFydCBmcm9tIFwiLi9wYXJ0L25vblRlcm1pbmFsL2Nob2ljZU9mUGFydHNcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBXaWxkY2FyZFBhcnQsXG4gIEVuZE9mTGluZVBhcnQsXG4gIFRlcm1pbmFsU3ltYm9sUGFydCxcbiAgUmVndWxhckV4cHJlc3Npb25QYXJ0LFxuICBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQsXG4gIFJ1bGVOYW1lUGFydCxcbiAgT3B0aW9uYWxQYXJ0UGFydCxcbiAgWmVyb09yTW9yZVBhcnRzUGFydCxcbiAgT25lT3JNb3JlUGFydHNQYXJ0LFxuICBTZXF1ZW5jZU9mUGFydHNQYXJ0LFxuICBDaG9pY2VPZlBhcnRzUGFydFxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBCTkZQYXJzZXIgfSBmcm9tIFwiLi9ibmYvcGFyc2VyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJhc2ljUGFyc2VyIH0gZnJvbSBcIi4vYmFzaWMvcGFyc2VyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENvbW1vblBhcnNlciB9IGZyb20gXCIuL2NvbW1vbi9wYXJzZXJcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBSdWxlIH0gZnJvbSBcIi4vcnVsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQYXJ0cyB9IGZyb20gXCIuL3BhcnRzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHBhcnRUeXBlcyB9IGZyb20gXCIuL3BhcnRUeXBlc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEZWZpbml0aW9uIH0gZnJvbSBcIi4vZGVmaW5pdGlvblwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUZXJtaW5hbE5vZGUgfSBmcm9tIFwiLi9ub2RlL3Rlcm1pbmFsXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE5vblRlcm1pbmFsTm9kZSB9IGZyb20gXCIuL25vZGUvbm9uVGVybWluYWxcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgYm5mID0gYFxuXG5cblxuICAgIHN0eWxlc2hlZXQgICAgICAgICAgICAgICAgIDo6PSAoIG1lZGlhIHwgcnVsZVNldCB8IGRlY2xhcmF0aW9uIHwgZXJyb3IgKSsgO1xuXG5cblxuXG5cbiAgICBtZWRpYSAgICAgICAgICAgICAgICAgICAgICA6Oj0gXCJAbWVkaWFcIiBtZWRpYVF1ZXJpZXMgXCJ7XCIgKCBydWxlU2V0IHwgZGVjbGFyYXRpb24gKSogXCJ9XCIgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgbWVkaWFRdWVyaWVzICAgICAgICAgICAgICAgOjo9ICBtZWRpYVF1ZXJ5ICggXCIsXCIgbWVkaWFRdWVyeSApKiA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICBtZWRpYVF1ZXJ5ICAgICAgICAgICAgICAgICA6Oj0gIFwibm90XCI/ICggXCJvbmx5XCI/IG1lZGlhVHlwZSBcImFuZFwiICk/IG1lZGlhRXhwcmVzc2lvbiAoIFwiYW5kXCIgbWVkaWFFeHByZXNzaW9uICkqIDtcblxuXG4gICAgbWVkaWFUeXBlICAgICAgICAgICAgICAgICAgOjo9ICBcImFsbFwiIHwgXCJwcmludFwiIHwgXCJzY3JlZW5cIiB8IFwic3BlZWNoXCIgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgbWVkaWFFeHByZXNzaW9uICAgICAgICAgICAgOjo9ICBcIihcIiBbaWRlbnRpZmllcl0gKCBcIjpcIiBleHByZXNzaW9uICk/IFwiKVwiIDtcblxuXG5cblxuXG4gICAgcnVsZVNldCAgICAgICAgICAgICAgICAgICAgOjo9ICBzZWxlY3RvcnMgXCJ7XCIgZGVjbGFyYXRpb24qIFwifVwiIDtcbiAgICBcbiAgICBcbiAgICBzZWxlY3RvcnMgICAgICAgICAgICAgICAgICA6Oj0gIHNlbGVjdG9yICggXCIsXCIgc2VsZWN0b3IgKSogO1xuXG5cbiAgICBzZWxlY3RvciAgICAgICAgICAgICAgICAgICA6Oj0gICggY2xhc3MgfCBwc2V1ZG9DbGFzcyB8IHBzZXVkb0VsZW1lbnQgfCBhdHRyaWJ1dGUgKSsgO1xuXG5cblxuXG5cbiAgICBkZWNsYXJhdGlvbiAgICAgICAgICAgICAgICA6Oj0gIHByb3BlcnR5IFwiOlwiIGV4cHJlc3Npb24gKCBcIixcIiBleHByZXNzaW9uICkqIHByaW9yaXR5PyBcIjtcIiA7XG5cblxuICAgIGNsYXNzICAgICAgICAgICAgICAgICAgICAgIDo6PSAgXCIuXCI8Tk9fV0hJVEVTUEFDRT5baWRlbnRpZmllcl0gcGFyZW50aGVzaXNlZFNlbGVjdG9yPyA7XG5cblxuICAgIHBzZXVkb0NsYXNzICAgICAgICAgICAgICAgIDo6PSAgXCI6XCI8Tk9fV0hJVEVTUEFDRT5baWRlbnRpZmllcl0gcGFyZW50aGVzaXNlZFNlbGVjdG9yPyA7XG5cblxuICAgIHBzZXVkb0VsZW1lbnQgICAgICAgICAgICAgIDo6PSAgXCI6OlwiPE5PX1dISVRFU1BBQ0U+W2lkZW50aWZpZXJdIHBhcmVudGhlc2lzZWRTZWxlY3Rvcj8gO1xuXG5cbiAgICBwYXJlbnRoZXNpc2VkU2VsZWN0b3IgICAgICA6Oj0gIDxOT19XSElURVNQQUNFPlwiKFwiIHNlbGVjdG9yIDxOT19XSElURVNQQUNFPlwiKVwiIDtcblxuXG4gICAgYXR0cmlidXRlICAgICAgICAgICAgICAgICAgOjo9ICBcIltcIlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRlbnRpZmllcl1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggXCI9XCIgfCBcIn49XCIgfCBcInw9XCIgKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggW2lkZW50aWZpZXJdIHwgW3N0cmluZy1saXRlcmFsXSApXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk/XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXVwiXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcblxuXG4gICAgcHJvcGVydHkgICAgICAgICAgICAgICAgICAgOjo9ICBbaWRlbnRpZmllcl0gO1xuXG5cbiAgICBleHByZXNzaW9uICAgICAgICAgICAgICAgICA6Oj0gIHRlcm0gKCBcIixcIj8gdGVybSApKiA7XG5cblxuICAgIHByaW9yaXR5ICAgICAgICAgICAgICAgICAgIDo6PSAgXCIhaW1wb3J0YW50XCIgO1xuXG5cblxuXG5cbiAgICB0ZXJtICAgICAgICAgICAgICAgICAgICAgICA6Oj0gIFt1bmFyeS1vcGVyYXRvcl0/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIFtwZXJjZW50YWdlXSB8IFtmcmVxdWVuY3ldIHwgW2ZyYWN0aW9uXSB8IFtsZW5ndGhdIHwgW2FuZ2xlXSB8IFtyZW1zXSB8IFtlbXNdIHwgW3RpbWVdIHwgW251bWJlcl0gKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0cmluZy1saXRlcmFsXStcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkZW50aWZpZXJdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xvdXJdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuXG5cbiAgICB1cmkgICAgICAgICAgICAgICAgICAgICAgICA6Oj0gIFwidXJsXCI8Tk9fV0hJVEVTUEFDRT5cIihcIiBbc3RyaW5nLWxpdGVyYWxdIFwiKVwiIDtcblxuXG4gICAgZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgOjo9ICBbaWRlbnRpZmllcl08Tk9fV0hJVEVTUEFDRT5cIihcIiBleHByZXNzaW9uIFwiKVwiIDtcblxuXG5cblxuXG4gICAgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgOjo9ICAuIDtcblxuXG5cbmA7XG5cbmV4cG9ydCBkZWZhdWx0IGJuZjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQ29tbW9uUGFyc2VyIH0gZnJvbSBcIm9jY2FtLXBhcnNlcnNcIjtcblxuaW1wb3J0IGJuZiBmcm9tIFwiLi9ibmZcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ1NTUGFyc2VyIGV4dGVuZHMgQ29tbW9uUGFyc2VyIHtcbiAgc3RhdGljIGJuZiA9IGJuZjtcblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbU5vdGhpbmcoQ1NTUGFyc2VyKTsgfVxuXG4gIHN0YXRpYyBmcm9tQk5GKGJuZikgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21CTkYoQ1NTUGFyc2VyLCBibmYpOyB9XG5cbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21SdWxlcyhDU1NQYXJzZXIsIHJ1bGVzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuZXhwb3J0IGNvbnN0IHsgY2xlYXIsIHB1c2gsIHNlY29uZCwgdGhpcmQsIGZvdXJ0aCwgZmlmdGggfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZnVuY3Rpb24gdHJpbShhcnJheSwgc3RhcnRJbmRleCwgZW5kSW5kZXgpIHtcbiAgbGV0IHN0YXJ0LFxuICAgICAgZGVsZXRlQ291bnQ7XG5cbiAgaWYgKGVuZEluZGV4ICE9PSBJbmZpbml0eSkge1xuICAgIHN0YXJ0ID0gZW5kSW5kZXggKyAxO1xuXG4gICAgYXJyYXkuc3BsaWNlKHN0YXJ0KTtcbiAgfVxuXG4gIHN0YXJ0ID0gMDtcbiAgZGVsZXRlQ291bnQgPSBzdGFydEluZGV4O1xuXG4gIGFycmF5LnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5jbHVkZXMoYXJyYXksIC4uLmVsZW1lbnRzKSB7XG4gIHJldHVybiBlbGVtZW50cy5zb21lKChlbGVtZW50KSA9PiBhcnJheS5pbmNsdWRlcyhlbGVtZW50KSk7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGNoYXJhY3RlcnMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCB7IGNsZWFyLCB0cmltLCBzZWNvbmQsIHRoaXJkLCBmb3VydGggfSBmcm9tIFwiLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuY29uc3QgeyBFWENMQU1BVElPTl9NQVJLX0NIQVJBQ1RFUiB9ID0gY2hhcmFjdGVycztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3ByZWFkIHtcbiAgY29uc3RydWN0b3Ioc3RhcnRJbmRleCwgZW5kSW5kZXgsIHVuaXF1ZSkge1xuICAgIHRoaXMuc3RhcnRJbmRleCA9IHN0YXJ0SW5kZXg7XG4gICAgdGhpcy5lbmRJbmRleCA9IGVuZEluZGV4O1xuICAgIHRoaXMudW5pcXVlID0gdW5pcXVlO1xuICB9XG5cbiAgYWRqdXN0Tm9kZXMobm9kZXMpIHtcbiAgICBpZiAodGhpcy51bmlxdWUpIHtcbiAgICAgIGNvbnN0IG5vZGVzTGVuZ3RoID0gbm9kZXMubGVuZ3RoO1xuXG4gICAgICBpZiAobm9kZXNMZW5ndGggPiAxKSB7XG4gICAgICAgIGNsZWFyKG5vZGVzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdHJpbShub2RlcywgdGhpcy5zdGFydEluZGV4LCB0aGlzLmVuZEluZGV4KTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZnJvbVNwcmVhZEV4cHJlc3Npb24oc3ByZWFkRXhwcmVzc2lvbikge1xuICAgIGxldCBzdGFydEluZGV4ID0gMCxcbiAgICAgICAgZW5kSW5kZXggPSBJbmZpbml0eSxcbiAgICAgICAgdW5pcXVlID0gZmFsc2U7XG5cbiAgICBpZiAoc3ByZWFkRXhwcmVzc2lvbiAhPT0gbnVsbCkge1xuICAgICAgaWYgKHNwcmVhZEV4cHJlc3Npb24gPT09IEVYQ0xBTUFUSU9OX01BUktfQ0hBUkFDVEVSKSB7XG4gICAgICAgIHVuaXF1ZSA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByZWdFeHAgPSAvXFxbKFxcZCspPyhcXC5cXC5cXC4pPyhcXGQrKT9dLyxcbiAgICAgICAgICAgICAgbWF0Y2hlcyA9IHNwcmVhZEV4cHJlc3Npb24ubWF0Y2gocmVnRXhwKSxcbiAgICAgICAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyksXG4gICAgICAgICAgICAgIHRoaXJkTWF0Y2ggPSB0aGlyZChtYXRjaGVzKSxcbiAgICAgICAgICAgICAgZm91cnRoTWF0Y2ggPSBmb3VydGgobWF0Y2hlcyk7XG5cbiAgICAgICAgaWYgKHNlY29uZE1hdGNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzdGFydEluZGV4ID0gcGFyc2VJbnQoc2Vjb25kTWF0Y2gpO1xuXG4gICAgICAgICAgaWYgKHRoaXJkTWF0Y2ggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZW5kSW5kZXggPSBzdGFydEluZGV4O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmb3VydGhNYXRjaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZW5kSW5kZXggPSBwYXJzZUludChmb3VydGhNYXRjaCk7XG5cbiAgICAgICAgICBpZiAodGhpcmRNYXRjaCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzdGFydEluZGV4ID0gZW5kSW5kZXg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc3ByZWFkID0gbmV3IFNwcmVhZChzdGFydEluZGV4LCBlbmRJbmRleCwgdW5pcXVlKTtcblxuICAgIHJldHVybiBzcHJlYWQ7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY2hhcmFjdGVycyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IFNwcmVhZCBmcm9tIFwiLi9zcHJlYWRcIjtcblxuaW1wb3J0IHsgaW5jbHVkZXMsIHB1c2gsIGNsZWFyLCBzZWNvbmQsIHRoaXJkLCBmb3VydGgsIGZpZnRoIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmNvbnN0IHsgV0lMRENBUkRfQ0hBUkFDVEVSIH0gPSBjaGFyYWN0ZXJzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBRdWVyeSB7XG4gIGNvbnN0cnVjdG9yKHJ1bGVOYW1lcywgdHlwZXMsIHNwcmVhZCwgc3ViUXVlcnksICBtYXhpbXVtRGVwdGgsIGluZmluaXRlRGVzY2VudCwgaW50ZXJtZWRpYXRlTm9kZXMpIHtcbiAgICB0aGlzLnJ1bGVOYW1lcyA9IHJ1bGVOYW1lcztcbiAgICB0aGlzLnR5cGVzID0gdHlwZXM7XG4gICAgdGhpcy5zcHJlYWQgPSBzcHJlYWQ7XG4gICAgdGhpcy5zdWJRdWVyeSA9IHN1YlF1ZXJ5O1xuICAgIHRoaXMubWF4aW11bURlcHRoID0gbWF4aW11bURlcHRoO1xuICAgIHRoaXMuaW5maW5pdGVEZXNjZW50ID0gaW5maW5pdGVEZXNjZW50O1xuICAgIHRoaXMuaW50ZXJtZWRpYXRlTm9kZXMgPSBpbnRlcm1lZGlhdGVOb2RlcztcbiAgfVxuXG4gIGV4ZWN1dGUobm9kZSwgZGVwdGggPSAwLCBtYXhpbXVtRGVwdGggPSB0aGlzLm1heGltdW1EZXB0aCkge1xuICAgIGNvbnN0IG5vZGVzID0gW107XG5cbiAgICB0aGlzLmNsZWFyKCk7XG5cbiAgICB0aGlzLmZpbmQobm9kZSwgZGVwdGgsIG1heGltdW1EZXB0aCk7XG5cbiAgICB0aGlzLmFwcGx5KG5vZGVzLCBkZXB0aCwgbWF4aW11bURlcHRoKTtcblxuICAgIHJldHVybiBub2RlcztcbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIGNsZWFyKHRoaXMuaW50ZXJtZWRpYXRlTm9kZXMpO1xuICB9XG5cbiAgZmluZChub2RlLCBkZXB0aCwgbWF4aW11bURlcHRoKSB7XG4gICAgaWYgKGRlcHRoID4gbWF4aW11bURlcHRoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZVRlcm1pbmFsTm9kZSA9IG5vZGUuaXNUZXJtaW5hbE5vZGUoKSxcbiAgICAgICAgICBub2RlTm9uVGVybWluYWxOb2RlID0gIW5vZGVUZXJtaW5hbE5vZGU7XG5cbiAgICBsZXQgZm91bmQ7XG5cbiAgICBpZiAobm9kZVRlcm1pbmFsTm9kZSkge1xuICAgICAgY29uc3QgdGVybWluYWxOb2RlID0gbm9kZSwgIC8vL1xuICAgICAgICAgICAgdHlwZSA9IHRlcm1pbmFsTm9kZS5nZXRUeXBlKCk7XG5cbiAgICAgIGZvdW5kID0gaW5jbHVkZXModGhpcy50eXBlcywgdHlwZSwgV0lMRENBUkRfQ0hBUkFDVEVSKTtcbiAgICB9XG5cbiAgICBpZiAobm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgICBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpO1xuXG4gICAgICBmb3VuZCA9IGluY2x1ZGVzKHRoaXMucnVsZU5hbWVzLCBydWxlTmFtZSwgV0lMRENBUkRfQ0hBUkFDVEVSKTtcbiAgICB9XG5cbiAgICBpZiAoZm91bmQpIHtcbiAgICAgIGNvbnN0IGludGVybWVkaWF0ZU5vZGUgPSBub2RlOyAvLy9cblxuICAgICAgdGhpcy5pbnRlcm1lZGlhdGVOb2Rlcy5wdXNoKGludGVybWVkaWF0ZU5vZGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmluZmluaXRlRGVzY2VudCkge1xuICAgICAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgICAgZGVwdGgrKztcblxuICAgICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICAgICAgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCk7XG5cbiAgICAgICAgY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZE5vZGUpID0+IHRoaXMuZmluZChjaGlsZE5vZGUsIGRlcHRoLCBtYXhpbXVtRGVwdGgpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhcHBseShub2RlcywgZGVwdGgsIG1heGltdW1EZXB0aCkge1xuICAgIHRoaXMuc3ByZWFkLmFkanVzdE5vZGVzKHRoaXMuaW50ZXJtZWRpYXRlTm9kZXMpO1xuXG4gICAgaWYgKHRoaXMuc3ViUXVlcnkgPT09IG51bGwpIHtcbiAgICAgIHB1c2gobm9kZXMsIHRoaXMuaW50ZXJtZWRpYXRlTm9kZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmludGVybWVkaWF0ZU5vZGVzLmZvckVhY2goKGludGVybWVkaWF0ZU5vZGUpID0+IHtcbiAgICAgICAgY29uc3QgaW50ZXJtZWRpYXRlTm9kZU5vblRlcm1pbmFsTm9kZSA9IGludGVybWVkaWF0ZU5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICAgICAgICBpZiAoaW50ZXJtZWRpYXRlTm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgICAgICAgIGRlcHRoKys7XG5cbiAgICAgICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBpbnRlcm1lZGlhdGVOb2RlLCAvLy9cbiAgICAgICAgICAgICAgICBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKTtcblxuICAgICAgICAgIHRoaXMuc3ViUXVlcnkuY2xlYXIoKTtcblxuICAgICAgICAgIGNoaWxkTm9kZXMuZm9yRWFjaCgoY2hpbGROb2RlKSA9PiB0aGlzLnN1YlF1ZXJ5LmZpbmQoY2hpbGROb2RlLCBkZXB0aCwgbWF4aW11bURlcHRoKSk7XG5cbiAgICAgICAgICB0aGlzLnN1YlF1ZXJ5LmFwcGx5KG5vZGVzLCBkZXB0aCwgbWF4aW11bURlcHRoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGZyb21TdWJFeHByZXNzaW9uQW5kVHlwZXMoc3ViRXhwcmVzaW9uLCB0eXBlcykge1xuICAgIGxldCBxdWVyeSA9IG51bGw7XG5cbiAgICBpZiAoc3ViRXhwcmVzaW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB0eXBlc0xlbmd0aCA9IHR5cGVzLmxlbmd0aDtcblxuICAgICAgaWYgKHR5cGVzTGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSBzdWJFeHByZXNpb247ICAvLy9cblxuICAgICAgICBxdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKGV4cHJlc3Npb24pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBxdWVyeTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tRXhwcmVzc2lvbihleHByZXNzaW9uLCBtYXhpbXVtRGVwdGggPSBJbmZpbml0eSkge1xuICAgIGNvbnN0IHJlZ0V4cCA9IC9eXFwvKFxcLyk/KFteL1xcWyFdKykoXFxbW15cXF1dK118ISk/KFxcLy4qKT8kLyxcbiAgICAgICAgICBtYXRjaGVzID0gZXhwcmVzc2lvbi5tYXRjaChyZWdFeHApLFxuICAgICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICAgIHRoaXJkTWF0Y2ggPSB0aGlyZChtYXRjaGVzKSxcbiAgICAgICAgICBmb3VydGhNYXRjaCA9IGZvdXJ0aChtYXRjaGVzKSxcbiAgICAgICAgICBmaWZ0aE1hdGNoID0gZmlmdGgobWF0Y2hlcyksXG4gICAgICAgICAgc2VsZWN0b3JzID0gdGhpcmRNYXRjaC5zcGxpdChcInxcIiksXG4gICAgICAgICAgc3ViRXhwcmVzc2lvbiA9IGZpZnRoTWF0Y2ggfHwgbnVsbCxcbiAgICAgICAgICBzcHJlYWRFeHByZXNzaW9uID0gZm91cnRoTWF0Y2ggfHwgbnVsbCxcbiAgICAgICAgICB0eXBlcyA9IHR5cGVzRnJvbVNlbGVjdG9ycyhzZWxlY3RvcnMpLFxuICAgICAgICAgIHJ1bGVOYW1lcyA9IHJ1bGVOYW1lc0Zyb21TZWxlY3RvcnNBbmRUeXBlcyhzZWxlY3RvcnMsIHR5cGVzKSxcbiAgICAgICAgICBzcHJlYWQgPSBTcHJlYWQuZnJvbVNwcmVhZEV4cHJlc3Npb24oc3ByZWFkRXhwcmVzc2lvbiksXG4gICAgICAgICAgc3ViUXVlcnkgPSBRdWVyeS5mcm9tU3ViRXhwcmVzc2lvbkFuZFR5cGVzKHN1YkV4cHJlc3Npb24sIHR5cGVzKSxcbiAgICAgICAgICBpbmZpbml0ZURlc2NlbnQgPSAoc2Vjb25kTWF0Y2ggPT09IFwiL1wiKSwgIC8vL1xuICAgICAgICAgIGludGVybWVkaWF0ZU5vZGVzID0gW10sXG4gICAgICAgICAgcXVlcnkgPSBuZXcgUXVlcnkocnVsZU5hbWVzLCB0eXBlcywgc3ByZWFkLCBzdWJRdWVyeSwgbWF4aW11bURlcHRoLCBpbmZpbml0ZURlc2NlbnQsIGludGVybWVkaWF0ZU5vZGVzKTtcbiAgICBcbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHlwZXNGcm9tU2VsZWN0b3JzKHNlbGVjdG9ycykge1xuICBjb25zdCB0eXBlcyA9IFtdO1xuXG4gIHNlbGVjdG9ycy5mb3JFYWNoKChzZWxlY3RvcikgPT4ge1xuICAgIGNvbnN0IHNlbGVjdG9yVHlwZVNlbGVjdG9yID0gaXNTZWxlY3RvclR5cGVTZWxlY3RvcihzZWxlY3Rvcik7XG5cbiAgICBpZiAoc2VsZWN0b3JUeXBlU2VsZWN0b3IpIHtcbiAgICAgIGNvbnN0IHR5cGUgPSBzZWxlY3Rvci5zdWJzdHJpbmcoMSk7XG5cbiAgICAgIHR5cGVzLnB1c2godHlwZSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdHlwZXM7XG59XG5cbmZ1bmN0aW9uIGlzU2VsZWN0b3JUeXBlU2VsZWN0b3Ioc2VsZWN0b3IpIHsgcmV0dXJuIC9eQC8udGVzdChzZWxlY3Rvcik7IH1cblxuZnVuY3Rpb24gcnVsZU5hbWVzRnJvbVNlbGVjdG9ycyhzZWxlY3RvcnMpIHsgcmV0dXJuIHNlbGVjdG9ycy5maWx0ZXIoaXNTZWxlY3RvclJ1bGVOYW1lU2VsZWN0b3IpOyB9XG5cbmZ1bmN0aW9uIGlzU2VsZWN0b3JSdWxlTmFtZVNlbGVjdG9yKHNlbGVjdG9yKSB7IHJldHVybiAvXlteQF0vLnRlc3Qoc2VsZWN0b3IpOyB9XG5cbmZ1bmN0aW9uIHJ1bGVOYW1lc0Zyb21TZWxlY3RvcnNBbmRUeXBlcyhzZWxlY3RvcnMsIHR5cGVzKSB7XG4gIGxldCBydWxlTmFtZXMgPSBbXTtcblxuICBjb25zdCB0eXBlc0xlbmd0aCA9IHR5cGVzLmxlbmd0aDtcblxuICBpZiAodHlwZXNMZW5ndGggPT09IDApIHtcbiAgICBydWxlTmFtZXMgPSBydWxlTmFtZXNGcm9tU2VsZWN0b3JzKHNlbGVjdG9ycyk7XG4gIH1cblxuICByZXR1cm4gcnVsZU5hbWVzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUXVlcnkgZnJvbSBcIi4uL3F1ZXJ5XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeUJ5Q2xhc3Mobm9kZSwgQ2xhc3MsIG5vZGVzID0gW10pIHtcbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDbGFzcykge1xuICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gIH1cblxuICBjb25zdCBub2RlTm9uVGVybWluYWxOb2RlID0gbm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IG5vZGUuZ2V0Q2hpbGROb2RlcygpO1xuXG4gICAgY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZE5vZGUpID0+IHF1ZXJ5QnlDbGFzcyhjaGlsZE5vZGUsIENsYXNzLCBub2RlcykpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlCeUNsYXNzZXMobm9kZSwgQ2xhc3Nlcywgbm9kZXMgPSBbXSkge1xuICBDbGFzc2VzLnNvbWUoKENsYXNzKSA9PiB7XG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDbGFzcykge1xuICAgICAgbm9kZXMucHVzaChub2RlKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBub2RlTm9uVGVybWluYWxOb2RlID0gbm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IG5vZGUuZ2V0Q2hpbGROb2RlcygpO1xuXG4gICAgY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZE5vZGUpID0+IHF1ZXJ5QnlDbGFzc2VzKGNoaWxkTm9kZSwgQ2xhc3Nlcywgbm9kZXMpKTtcbiAgfVxuXG4gIHJldHVybiBub2Rlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5QnlFeHByZXNzaW9uKG5vZGUsIGV4cHJlc3Npb24sIG1heGltdW1EZXB0aCkge1xuICBjb25zdCBxdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKGV4cHJlc3Npb24sIG1heGltdW1EZXB0aCksXG4gICAgICAgIG5vZGVzID0gcXVlcnkuZXhlY3V0ZShub2RlKTtcblxuICByZXR1cm4gbm9kZXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcXVlcnlCeUNsYXNzLFxuICBxdWVyeUJ5Q2xhc3NlcyxcbiAgcXVlcnlCeUV4cHJlc3Npb25cbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgUXVlcnkgfSBmcm9tIFwiLi9xdWVyeVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBxdWVyeVV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9xdWVyeVwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgSEVBRCA9IFwiaGVhZFwiO1xuZXhwb3J0IGNvbnN0IFNUWUxFID0gXCJzdHlsZVwiO1xuZXhwb3J0IGNvbnN0IENIQVJBQ1RFUlMgPSBcImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpcIjtcbmV4cG9ydCBjb25zdCBUV09fU1BBQ0VTID0gXCIgIFwiO1xuZXhwb3J0IGNvbnN0IEZPVVJfU1BBQ0VTID0gXCIgICAgXCI7XG5leHBvcnQgY29uc3QgRU1QVFlfU1RSSU5HID0gXCJcIjtcbmV4cG9ydCBjb25zdCBDTEFTU19OQU1FX0xFTkdUSCA9IDY7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHsgZmlyc3QgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZnVuY3Rpb24gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMocXVlcnksIG5vZGUsIHRva2Vucykge1xuICBjb25zdCBub2RlcyA9IHF1ZXJ5LmV4ZWN1dGUobm9kZSksXG4gICAgICAgIGZpcnN0Tm9kZSA9IGZpcnN0KG5vZGVzKTtcblxuICBub2RlID0gZmlyc3ROb2RlOyAvLy9cblxuICBjb25zdCBjb250ZW50ID0gY29udGVudEZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucyk7XG5cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG5cbmZ1bmN0aW9uIGNvbnRlbnRGcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgY29uc3QgZmlyc3RTaWduaWZpY2FudFRva2VuID0gbm9kZS5nZXRGaXJzdFNpZ25pZmljYW50VG9rZW4oKSxcbiAgICAgICAgbGFzdFNpZ25pZmljYW50VG9rZW4gPSBub2RlLmdldExhc3RTaWduaWZpY2FudFRva2VuKCksXG4gICAgICAgIGZpcnN0VG9rZW4gPSBmaXJzdFNpZ25pZmljYW50VG9rZW4sIC8vL1xuICAgICAgICBsYXN0VG9rZW4gPSBsYXN0U2lnbmlmaWNhbnRUb2tlbiwgLy8vXG4gICAgICAgIGZpcnN0VG9rZW5JbmRleCA9IHRva2Vucy5pbmRleE9mKGZpcnN0VG9rZW4pLFxuICAgICAgICBsYXN0VG9rZW5JbmRleCA9IHRva2Vucy5pbmRleE9mKGxhc3RUb2tlbik7XG5cbiAgbGV0IGNvbnRlbnQgPSBFTVBUWV9TVFJJTkc7XG5cbiAgZm9yIChsZXQgaW5kZXggPSBmaXJzdFRva2VuSW5kZXg7IGluZGV4IDw9IGxhc3RUb2tlbkluZGV4OyBpbmRleCsrKSB7XG4gICAgY29uc3QgdG9rZW4gPSB0b2tlbnNbaW5kZXhdLFxuICAgICAgICAgIHRva2VuQ29udGVudCA9IHRva2VuLmdldENvbnRlbnQoKTtcblxuICAgIGNvbnRlbnQgKz0gdG9rZW5Db250ZW50O1xuICB9XG5cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSBcIm9jY2FtLWRvbVwiO1xuXG5pbXBvcnQgeyBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2VucyB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGVudFwiO1xuXG5jb25zdCBwcm9wZXJ0eVF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oXCIvKi9wcm9wZXJ0eVwiKSxcbiAgICAgIGV4cHJlc3Npb25RdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKFwiLyovZXhwcmVzc2lvblwiKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVjbGFyYXRpb24ge1xuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eSwgZXhwcmVzc2lvbikge1xuICAgIHRoaXMucHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uO1xuICB9XG5cbiAgZ2V0UHJvcGVydHkoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHk7XG4gIH1cblxuICBnZXRFeHByZXNzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLmV4cHJlc3Npb247XG4gIH1cblxuICBjaGVja01hdGNoZXMoZGVjbGFyYXRpb25zKSB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IGRlY2xhcmF0aW9ucy5zb21lKChkZWNsYXJhdGlvbikgPT4ge1xuICAgICAgY29uc3QgcHJvcGVydHkgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eSgpLFxuICAgICAgICAgICAgcHJvcGVydGllc01hdGNoID0gKHByb3BlcnR5ID09PSB0aGlzLnByb3BlcnR5KTtcblxuICAgICAgaWYgKHByb3BlcnRpZXNNYXRjaCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBtYXRjaGVzO1xuICB9XG5cbiAgYXNDU1MoaW5kZW50LCBsYXN0KSB7XG4gICAgY29uc3QgY3NzID0gbGFzdCA/XG4gICAgICAgICAgICAgICAgYCR7aW5kZW50fSR7dGhpcy5wcm9wZXJ0eX06ICR7dGhpcy5leHByZXNzaW9ufTtgIDpcbiAgICAgICAgICAgICAgICAgIGAke2luZGVudH0ke3RoaXMucHJvcGVydHl9OiAke3RoaXMuZXhwcmVzc2lvbn07XFxuYDtcblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgcHJvcGVydHlDb250ZW50ID0gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMocHJvcGVydHlRdWVyeSwgbm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBleHByZXNzaW9uQ29udGVudCA9IGNvbnRlbnRGcm9tUXVlcnlOb2RlQW5kVG9rZW5zKGV4cHJlc3Npb25RdWVyeSwgbm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnR5Q29udGVudCwgLy8vXG4gICAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25Db250ZW50LCAvLy9cbiAgICAgICAgICBkZWNsYXJhdGlvbiA9IG5ldyBEZWNsYXJhdGlvbihwcm9wZXJ0eSwgZXhwcmVzc2lvbik7XG5cbiAgICByZXR1cm4gZGVjbGFyYXRpb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tZG9tXCI7XG5cbmltcG9ydCBEZWNsYXJhdGlvbiBmcm9tIFwiLi9kZWNsYXJhdGlvblwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IGRlY2xhcmF0aW9uUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi8qL2RlY2xhcmF0aW9uXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWNsYXJhdGlvbnMge1xuICBjb25zdHJ1Y3RvcihhcnJheSkge1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbiAgfVxuXG4gIGZvcndhcmRzRm9yRWFjaChjYWxsYmFjaykge1xuICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuYXJyYXkubGVuZ3RoLFxuICAgICAgICAgIGZpcnN0SW5kZXggPSAwLFxuICAgICAgICAgIGxhc3RJbmRleCA9IGxlbmd0aCAtIDE7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IGZpcnN0SW5kZXg7IGluZGV4IDw9IGxhc3RJbmRleDsgaW5kZXgrKykge1xuICAgICAgY29uc3QgZGVjbGFyYXRpb24gPSB0aGlzLmFycmF5W2luZGV4XTtcblxuICAgICAgY2FsbGJhY2soZGVjbGFyYXRpb24sIGluZGV4KTtcbiAgICB9XG4gIH1cblxuICBiYWNrd2FyZHNGb3JFYWNoKGNhbGxiYWNrKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gdGhpcy5hcnJheS5sZW5ndGgsXG4gICAgICAgICAgZmlyc3RJbmRleCA9IDAsXG4gICAgICAgICAgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMTtcblxuICAgIGZvciAobGV0IGluZGV4ID0gbGFzdEluZGV4OyBpbmRleCA+PSBmaXJzdEluZGV4OyBpbmRleC0tKSB7XG4gICAgICBjb25zdCBkZWNsYXJhdGlvbiA9IHRoaXMuYXJyYXlbaW5kZXhdO1xuXG4gICAgICBjYWxsYmFjayhkZWNsYXJhdGlvbiwgaW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHVuc2hpZnQoZGVjbGFyYXRpb25zKSB7XG4gICAgZGVjbGFyYXRpb25zLmJhY2t3YXJkc0ZvckVhY2goKGRlY2xhcmF0aW9uKSA9PiB7XG4gICAgICBjb25zdCBtYXRjaGVzID0gZGVjbGFyYXRpb24uY2hlY2tNYXRjaGVzKHRoaXMuYXJyYXkpOyAvLy9cblxuICAgICAgaWYgKCFtYXRjaGVzKSB7XG4gICAgICAgIHRoaXMuYXJyYXkudW5zaGlmdChkZWNsYXJhdGlvbik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUsIGluZGVudCkge1xuICAgIGlmIChpbmRlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaW5kZW50ID0gY2xhc3NOYW1lOyAvLy9cblxuICAgICAgY2xhc3NOYW1lID0gbnVsbDsgLy8vXG4gICAgfVxuXG4gICAgbGV0IGNzcyA9IEVNUFRZX1NUUklORztcblxuICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuYXJyYXkubGVuZ3RoO1xuXG4gICAgaWYgKGxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGxhc3RJbmRleCA9IGxlbmd0aCAtIDEsXG4gICAgICAgICAgICBkZWNsYXJhdGlvbnNDU1MgPSB0aGlzLmFycmF5LnJlZHVjZSgoZGVjbGFyYXRpb25zQ1NTLCBkZWNsYXJhdGlvbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbGFzdCA9IChpbmRleCA9PT0gbGFzdEluZGV4KSxcbiAgICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb25DU1MgPSBkZWNsYXJhdGlvbi5hc0NTUyhpbmRlbnQsIGxhc3QpO1xuXG4gICAgICAgICAgICAgIGRlY2xhcmF0aW9uc0NTUyArPSBkZWNsYXJhdGlvbkNTUztcblxuICAgICAgICAgICAgICByZXR1cm4gZGVjbGFyYXRpb25zQ1NTO1xuICAgICAgICAgICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgICAgaWYgKGNsYXNzTmFtZSA9PT0gbnVsbCkge1xuICAgICAgICBjc3MgPSBkZWNsYXJhdGlvbnNDU1M7ICAvLy9cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNzcyA9IGAuJHtjbGFzc05hbWV9IHtcbiR7ZGVjbGFyYXRpb25zQ1NTfVxufVxuXG5gO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb25Ob2RlcyA9IGRlY2xhcmF0aW9uUXVlcnkuZXhlY3V0ZShub2RlKSxcbiAgICAgICAgICBhcnJheSA9IGRlY2xhcmF0aW9uTm9kZXMubWFwKChkZWNsYXJhdGlvbk5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBkZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb24gPSBEZWNsYXJhdGlvbi5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpO1xuXG4gICAgICAgICAgICByZXR1cm4gZGVjbGFyYXRpb247XG4gICAgICAgICAgfSksXG4gICAgICAgICAgZGVjbGFyYXRpb25zID0gbmV3IERlY2xhcmF0aW9ucyhhcnJheSk7XG5cbiAgICByZXR1cm4gZGVjbGFyYXRpb25zO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSBcIm9jY2FtLWRvbVwiO1xuXG5pbXBvcnQgRGVjbGFyYXRpb25zIGZyb20gXCIuL2RlY2xhcmF0aW9uc1wiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2VucyB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGVudFwiO1xuXG5jb25zdCBzZWxlY3RvcnNRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKFwiLy9zZWxlY3RvcnNcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVTZXQge1xuICBjb25zdHJ1Y3RvcihzZWxlY3RvcnMsIGRlY2xhcmF0aW9ucykge1xuICAgIHRoaXMuc2VsZWN0b3JzID0gc2VsZWN0b3JzO1xuICAgIHRoaXMuZGVjbGFyYXRpb25zID0gZGVjbGFyYXRpb25zO1xuICB9XG5cbiAgZ2V0U2VsZWN0b3JzKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdG9ycztcbiAgfVxuXG4gIGdldERlY2xhcmF0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5kZWNsYXJhdGlvbnM7XG4gIH1cblxuICB1bnNoaWZ0KHJ1bGVTZXQpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbnMgPSBydWxlU2V0LmdldERlY2xhcmF0aW9ucygpO1xuXG4gICAgdGhpcy5kZWNsYXJhdGlvbnMudW5zaGlmdChkZWNsYXJhdGlvbnMpO1xuICB9XG5cbiAgZmluZE1hdGNoaW5nUnVsZVNldChydWxlU2V0cykge1xuICAgIGNvbnN0IG1hdGNoaW5nUnVsZVNldCA9IHJ1bGVTZXRzLmZpbmQoKHJ1bGVTZXQpID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdG9ycyA9IHJ1bGVTZXQuZ2V0U2VsZWN0b3JzKCksXG4gICAgICAgICAgICBzZWxlY3RvcnNNYXRjaCA9IChzZWxlY3RvcnMgPT09IHRoaXMuc2VsZWN0b3JzKSxcbiAgICAgICAgICAgIHJ1bGVTZXRzTWF0Y2ggPSBzZWxlY3RvcnNNYXRjaDsgLy8vXG5cbiAgICAgIGlmIChydWxlU2V0c01hdGNoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pIHx8IG51bGw7IC8vL1xuXG4gICAgcmV0dXJuIG1hdGNoaW5nUnVsZVNldDtcbiAgfVxuXG4gIGFzQ1NTKGNsYXNzTmFtZSwgaW5kZW50KSB7XG4gICAgbGV0IGNzcyA9IEVNUFRZX1NUUklORztcblxuICAgIGNvbnN0IGRlY2xhcmF0aW9uc0NTUyA9IHRoaXMuZGVjbGFyYXRpb25zLmFzQ1NTKGAgICR7aW5kZW50fWApO1xuXG4gICAgaWYgKGRlY2xhcmF0aW9uc0NTUyAhPT0gRU1QVFlfU1RSSU5HKSB7XG4gICAgICAgY3NzID0gYCR7aW5kZW50fS4ke2NsYXNzTmFtZX0ke3RoaXMuc2VsZWN0b3JzfSB7XG4ke2RlY2xhcmF0aW9uc0NTU31cbiR7aW5kZW50fX1cblxuYDtcbiAgICB9XG5cbiAgICByZXR1cm4gY3NzO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucykge1xuICAgIGNvbnN0IHNlbGVjdG9ycyA9IHNlbGVjdG9yc0Zyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgZGVjbGFyYXRpb25zID0gRGVjbGFyYXRpb25zLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgbWVkaWEgPSBuZXcgUnVsZVNldChzZWxlY3RvcnMsIGRlY2xhcmF0aW9ucyk7XG5cbiAgICByZXR1cm4gbWVkaWE7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2VsZWN0b3JzRnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gIGNvbnN0IHNlbGVjdG9yc05vZGVDb250ZW50ID0gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMoc2VsZWN0b3JzUXVlcnksIG5vZGUsIHRva2VucyksXG4gICAgICAgIHNlbGVjdG9ycyA9IGAke3NlbGVjdG9yc05vZGVDb250ZW50fWA7XG5cbiAgcmV0dXJuIHNlbGVjdG9ycztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tZG9tXCI7XG5cbmltcG9ydCBSdWxlU2V0IGZyb20gXCIuL3J1bGVTZXRcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCBydWxlU2V0UXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi8qL3J1bGVTZXRcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVTZXRzIHtcbiAgY29uc3RydWN0b3IoYXJyYXkpIHtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG4gIH1cblxuICB1bnNoaWZ0KHJ1bGVTZXRzKSB7XG4gICAgcnVsZVNldHMuZm9yRWFjaCgocnVsZVNldCkgPT4ge1xuICAgICAgY29uc3QgbWF0Y2hpbmdSdWxlU2V0ID0gcnVsZVNldC5maW5kTWF0Y2hpbmdSdWxlU2V0KHRoaXMuYXJyYXkpOyAvLy9cblxuICAgICAgKG1hdGNoaW5nUnVsZVNldCA9PT0gbnVsbCkgP1xuICAgICAgICB0aGlzLmFycmF5LnVuc2hpZnQocnVsZVNldCkgOlxuICAgICAgICAgIG1hdGNoaW5nUnVsZVNldC51bnNoaWZ0KHJ1bGVTZXQpO1xuICAgIH0pO1xuICB9XG5cbiAgZm9yRWFjaChjYWxsYmFjaykge1xuICAgIHRoaXMuYXJyYXkuZm9yRWFjaChjYWxsYmFjayk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUsIGluZGVudCkge1xuICAgIGNvbnN0IGNzcyA9IHRoaXMuYXJyYXkucmVkdWNlKChjc3MsIHJ1bGVTZXQpID0+IHtcbiAgICAgIGNvbnN0IHJ1bGVTZXRDU1MgPSBydWxlU2V0LmFzQ1NTKGNsYXNzTmFtZSwgaW5kZW50KTtcblxuICAgICAgY3NzICs9IHJ1bGVTZXRDU1M7XG5cbiAgICAgIHJldHVybiBjc3M7XG4gICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgcnVsZVNldE5vZGVzID0gcnVsZVNldFF1ZXJ5LmV4ZWN1dGUobm9kZSksXG4gICAgICAgICAgYXJyYXkgPSBydWxlU2V0Tm9kZXMubWFwKChydWxlU2V0Tm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHJ1bGVTZXROb2RlLCAvLy9cbiAgICAgICAgICAgICAgICAgIHJ1bGVTZXQgPSBSdWxlU2V0LmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucyk7XG5cbiAgICAgICAgICAgIHJldHVybiBydWxlU2V0O1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHJ1bGVTZXRzID0gbmV3IFJ1bGVTZXRzKGFycmF5KTtcblxuICAgIHJldHVybiBydWxlU2V0cztcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gXCJvY2NhbS1kb21cIjtcblxuaW1wb3J0IFJ1bGVTZXRzIGZyb20gXCIuL3J1bGVTZXRzXCI7XG5pbXBvcnQgRGVjbGFyYXRpb25zIGZyb20gXCIuL2RlY2xhcmF0aW9uc1wiO1xuXG5pbXBvcnQgeyBUV09fU1BBQ0VTLCBGT1VSX1NQQUNFUyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGNvbnRlbnRGcm9tUXVlcnlOb2RlQW5kVG9rZW5zIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZW50XCI7XG5cbmNvbnN0IG1lZGlhUXVlcmllc1F1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oXCIvbWVkaWEvbWVkaWFRdWVyaWVzXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZWRpYSB7XG4gIGNvbnN0cnVjdG9yKG1lZGlhUXVlcmllcywgZGVjbGFyYXRpb25zLCBydWxlU2V0cykge1xuICAgIHRoaXMubWVkaWFRdWVyaWVzID0gbWVkaWFRdWVyaWVzO1xuICAgIHRoaXMuZGVjbGFyYXRpb25zID0gZGVjbGFyYXRpb25zO1xuICAgIHRoaXMucnVsZVNldHMgPSBydWxlU2V0cztcbiAgfVxuXG4gIGdldE1lZGlhUXVlcmllcygpIHtcbiAgICByZXR1cm4gdGhpcy5tZWRpYVF1ZXJpZXM7XG4gIH1cblxuICBnZXREZWNsYXJhdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVjbGFyYXRpb25zO1xuICB9XG5cbiAgZ2V0UnVsZVNldHMoKSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZVNldHM7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUpIHtcbiAgICBsZXQgY3NzID0gXCJcIjtcblxuICAgIGNvbnN0IHJ1bGVTZXRzQ1NTID0gdGhpcy5ydWxlU2V0cy5hc0NTUyhjbGFzc05hbWUsIFRXT19TUEFDRVMpLFxuICAgICAgICAgIGRlY2xhcmF0aW9uc0NTUyA9IHRoaXMuZGVjbGFyYXRpb25zLmFzQ1NTKGNsYXNzTmFtZSwgRk9VUl9TUEFDRVMpO1xuXG4gICAgaWYgKChydWxlU2V0c0NTUyAhPT0gbnVsbCkgfHwgKGRlY2xhcmF0aW9uc0NTUyAhPT0gbnVsbCkpIHtcbiAgICAgIGNzcyA9IGBAbWVkaWEgJHt0aGlzLm1lZGlhUXVlcmllc30ge1xuJHtkZWNsYXJhdGlvbnNDU1N9JHtydWxlU2V0c0NTU31cbn1cblxuYDtcbiAgICB9XG5cbiAgICByZXR1cm4gY3NzO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucykge1xuICAgIGNvbnN0IG1lZGlhUXVlcmllcyA9IG1lZGlhUXVlcmllc0Zyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgZGVjbGFyYXRpb25zID0gRGVjbGFyYXRpb25zLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgcnVsZVNldHMgPSBSdWxlU2V0cy5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpLFxuICAgICAgICAgIG1lZGlhID0gbmV3IE1lZGlhKG1lZGlhUXVlcmllcywgZGVjbGFyYXRpb25zLCBydWxlU2V0cyk7XG5cbiAgICByZXR1cm4gbWVkaWE7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWVkaWFRdWVyaWVzRnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gIGNvbnN0IG1lZGlhUXVlcmllc05vZGVDb250ZW50ID0gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMobWVkaWFRdWVyaWVzUXVlcnksIG5vZGUsIHRva2VucyksXG4gICAgICAgIG1lZGlhUXVlcmllcyA9IGAke21lZGlhUXVlcmllc05vZGVDb250ZW50fWA7XG5cbiAgcmV0dXJuIG1lZGlhUXVlcmllcztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tZG9tXCI7XG5cbmltcG9ydCBNZWRpYSBmcm9tIFwiLi9tZWRpYVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IG1lZGlhUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi9zdHlsZXNoZWV0L21lZGlhXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZWRpYXMge1xuICBjb25zdHJ1Y3RvcihhcnJheSkge1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbiAgfVxuXG4gIHVuc2hpZnQobWVkaWFzKSB7XG4gICAgbWVkaWFzLmZvckVhY2goKG1lZGlhKSA9PiB7XG4gICAgICB0aGlzLmFycmF5LnVuc2hpZnQobWVkaWEpO1xuICAgIH0pO1xuICB9XG5cbiAgZm9yRWFjaChjYWxsYmFjaykge1xuICAgIHRoaXMuYXJyYXkuZm9yRWFjaChjYWxsYmFjayk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUpIHtcbiAgICBjb25zdCBjc3MgPSB0aGlzLmFycmF5LnJlZHVjZSgoY3NzLCBtZWRpYSkgPT4ge1xuICAgICAgY29uc3QgbWVkaWFDU1MgPSBtZWRpYS5hc0NTUyhjbGFzc05hbWUpO1xuXG4gICAgICBjc3MgKz0gbWVkaWFDU1M7XG5cbiAgICAgIHJldHVybiBjc3M7XG4gICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgbWVkaWFOb2RlcyA9IG1lZGlhUXVlcnkuZXhlY3V0ZShub2RlKSxcbiAgICAgICAgICBhcnJheSA9IG1lZGlhTm9kZXMubWFwKChtZWRpYU5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBtZWRpYU5vZGUsIC8vL1xuICAgICAgICAgICAgICAgICAgbWVkaWEgPSBNZWRpYS5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpO1xuXG4gICAgICAgICAgICByZXR1cm4gbWVkaWE7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgbWVkaWFzID0gbmV3IE1lZGlhcyhhcnJheSk7XG5cbiAgICByZXR1cm4gbWVkaWFzO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBNZWRpYXMgZnJvbSBcIi4vc3R5bGUvbWVkaWFzXCI7XG5pbXBvcnQgUnVsZVNldHMgZnJvbSBcIi4vc3R5bGUvcnVsZVNldHNcIjtcbmltcG9ydCBEZWNsYXJhdGlvbnMgZnJvbSBcIi4vc3R5bGUvZGVjbGFyYXRpb25zXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0eWxlIHtcbiAgY29uc3RydWN0b3IoZGVjbGFyYXRpb25zLCBydWxlU2V0cywgbWVkaWFzKSB7XG4gICAgdGhpcy5kZWNsYXJhdGlvbnMgPSBkZWNsYXJhdGlvbnM7XG4gICAgdGhpcy5ydWxlU2V0cyA9IHJ1bGVTZXRzO1xuICAgIHRoaXMubWVkaWFzID0gbWVkaWFzO1xuICB9XG5cbiAgZ2V0RGVjbGFyYXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmRlY2xhcmF0aW9ucztcbiAgfVxuXG4gIGdldFJ1bGVTZXRzKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVTZXRzO1xuICB9XG5cbiAgZ2V0TWVkaWFzKCkge1xuICAgIHJldHVybiB0aGlzLm1lZGlhcztcbiAgfVxuXG4gIGV4dGVuZHMoc3VwZXJTdHlsZSkge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9ucyA9IHN1cGVyU3R5bGUuZ2V0RGVjbGFyYXRpb25zKCksXG4gICAgICAgICAgcnVsZVNldHMgPSBzdXBlclN0eWxlLmdldFJ1bGVTZXRzKCksXG4gICAgICAgICAgbWVkaWFzID0gc3VwZXJTdHlsZS5nZXRNZWRpYXMoKTtcblxuICAgIHRoaXMudW5zaGlmdChkZWNsYXJhdGlvbnMsIHJ1bGVTZXRzLCBtZWRpYXMpO1xuICB9XG5cbiAgdW5zaGlmdChkZWNsYXJhdGlvbnMsIHJ1bGVTZXRzLCBtZWRpYXMpIHtcbiAgICB0aGlzLmRlY2xhcmF0aW9ucy51bnNoaWZ0KGRlY2xhcmF0aW9ucyk7XG4gICAgdGhpcy5ydWxlU2V0cy51bnNoaWZ0KHJ1bGVTZXRzKTtcbiAgICB0aGlzLm1lZGlhcy51bnNoaWZ0KG1lZGlhcyk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbnNDU1MgPSB0aGlzLmRlY2xhcmF0aW9ucy5hc0NTUyhjbGFzc05hbWUsIFwiICBcIiksXG4gICAgICAgICAgcnVsZVNldHNDU1MgPSB0aGlzLnJ1bGVTZXRzLmFzQ1NTKGNsYXNzTmFtZSwgXCJcIiksXG4gICAgICAgICAgbWVkaWFzQ1NTID0gdGhpcy5tZWRpYXMuYXNDU1MoY2xhc3NOYW1lKSxcbiAgICAgICAgICBjc3MgPSBgJHtkZWNsYXJhdGlvbnNDU1N9JHtydWxlU2V0c0NTU30ke21lZGlhc0NTU31gO1xuXG4gICAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbnMgPSBEZWNsYXJhdGlvbnMuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBydWxlU2V0cyA9IFJ1bGVTZXRzLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgbWVkaWFzID0gTWVkaWFzLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgc3R5bGUgPSBuZXcgU3R5bGUoZGVjbGFyYXRpb25zLCBydWxlU2V0cywgbWVkaWFzKTtcblxuICAgIHJldHVybiBzdHlsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU3R5bGUgZnJvbSBcIi4uL3N0eWxlXCI7XG5pbXBvcnQgQ1NTTGV4ZXIgZnJvbSBcIi4uL2Nzcy9sZXhlclwiO1xuaW1wb3J0IENTU1BhcnNlciBmcm9tIFwiLi4vY3NzL3BhcnNlclwiO1xuXG5pbXBvcnQgeyBIRUFELCBTVFlMRSwgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCBjc3NMZXhlciA9IENTU0xleGVyLmZyb21Ob3RoaW5nKCksXG4gICAgICBjc3NQYXJzZXIgPSBDU1NQYXJzZXIuZnJvbU5vdGhpbmcoKTtcblxuaWYgKCFnbG9iYWxUaGlzLnN0eWxlTWFwKSB7XG4gIGdsb2JhbFRoaXMuc3R5bGVNYXAgPSB7fTtcbn1cblxuY29uc3QgeyBzdHlsZU1hcCB9ID0gZ2xvYmFsVGhpcztcblxuZnVuY3Rpb24gcmVuZGVyU3R5bGUoc3R5bGUpIHtcbiAgY29uc3QgaGVhZERPTUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKEhFQUQpLFxuICAgICAgICBzdHlsZURPTUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFNUWUxFKSxcbiAgICAgICAgaW5uZXJIVE1MID0gYFxuICAgICAgICBcbiR7c3R5bGV9YDtcblxuICBPYmplY3QuYXNzaWduKHN0eWxlRE9NRWxlbWVudCwge1xuICAgIGlubmVySFRNTFxuICB9KTtcblxuICBoZWFkRE9NRWxlbWVudC5hcHBlbmRDaGlsZChzdHlsZURPTUVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiByZW5kZXJTdHlsZXMoKSB7XG4gIGNvbnN0IHN0eWxlc0NTUyA9IHJldHJpZXZlU3R5bGVzQ1NTKCksXG4gICAgICAgIHN0eWxlID0gc3R5bGVzQ1NTOyAgLy8vXG5cbiAgcmVuZGVyU3R5bGUoc3R5bGUpO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVN0eWxlKGFyZ3MsIGNsYXNzTmFtZSwgc3VwZXJTdHlsZSA9IG51bGwpIHtcbiAgY29uc3Qgc3RyaW5ncyA9IGFyZ3Muc2hpZnQoKSxcdC8vL1xuICAgICAgICBjb250ZW50ID0gc3RyaW5ncy5yZWR1Y2UoKGNvbnRlbnQsIHN0cmluZywgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCBhcmcgPSBhcmdzW2luZGV4XTtcblxuICAgICAgICAgIGNvbnRlbnQgPSAoYXJnICE9PSB1bmRlZmluZWQpID9cbiAgICAgICAgICAgICAgICAgICAgICBgJHtjb250ZW50fSR7c3RyaW5nfSR7YXJnfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgYCR7Y29udGVudH0ke3N0cmluZ31gO1xuXG4gICAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICAgIH0sIEVNUFRZX1NUUklORyksXG4gICAgICAgIHRva2VucyA9IGNzc0xleGVyLnRva2VuaXNlKGNvbnRlbnQpLFxuICAgICAgICBub2RlID0gY3NzUGFyc2VyLnBhcnNlKHRva2VucyksXG4gICAgICAgIHN0eWxlID0gU3R5bGUuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKTtcblxuICAgICAgICBpZiAoc3VwZXJTdHlsZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHN0eWxlLmV4dGVuZHMoc3VwZXJTdHlsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBzdHlsZU1hcFtjbGFzc05hbWVdID0gc3R5bGU7XG59XG5cbmZ1bmN0aW9uIHJldHJpZXZlU3R5bGUoY2xhc3NOYW1lKSB7XG4gIGNvbnN0IHN0eWxlID0gc3R5bGVNYXBbY2xhc3NOYW1lXSB8fCBudWxsO1xuXG4gIHJldHVybiBzdHlsZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICByZW5kZXJTdHlsZSxcbiAgcmVuZGVyU3R5bGVzLFxuICBnZW5lcmF0ZVN0eWxlLFxuICByZXRyaWV2ZVN0eWxlXG59O1xuXG5mdW5jdGlvbiByZXRyaWV2ZVN0eWxlc0NTUygpIHtcbiAgY29uc3QgY2xhc3NOYW1lcyA9IE9iamVjdC5rZXlzKHN0eWxlTWFwKSxcbiAgICAgICAgc3R5bGVzQ1NTID0gY2xhc3NOYW1lcy5yZWR1Y2UoKHN0eWxlc0NTUywgY2xhc3NOYW1lKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3R5bGUgPSByZXRyaWV2ZVN0eWxlKGNsYXNzTmFtZSksXG4gICAgICAgICAgICAgICAgc3R5bGVDU1MgPSBzdHlsZS5hc0NTUyhjbGFzc05hbWUpO1xuXG4gICAgICAgICAgc3R5bGVzQ1NTICs9IHN0eWxlQ1NTO1xuXG4gICAgICAgICAgcmV0dXJuIHN0eWxlc0NTUztcbiAgICAgICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICByZXR1cm4gc3R5bGVzQ1NTO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDSEFSQUNURVJTLCBFTVBUWV9TVFJJTkcsIENMQVNTX05BTUVfTEVOR1RIIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCBsZW5ndGggPSBDTEFTU19OQU1FX0xFTkdUSCxcbiAgICAgIGNoYXJhY3RlcnMgPSBDSEFSQUNURVJTLFxuICAgICAgY2hhcmFjdGVyc0xlbmd0aCA9IGNoYXJhY3RlcnMubGVuZ3RoO1xuXG5jb25zdCBjbGFzc05hbWVzID0gW107XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUNsYXNzTmFtZSgpIHtcbiAgbGV0IGNsYXNzTmFtZSA9IEVNUFRZX1NUUklORztcblxuICBmb3IgKGxldCBjb3VudCA9IDA7IGNvdW50IDwgbGVuZ3RoOyBjb3VudCsrKSB7XG4gICAgY29uc3QgaW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjaGFyYWN0ZXJzTGVuZ3RoKSxcbiAgICAgICAgICBjaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzW2luZGV4XTtcblxuICAgIGNsYXNzTmFtZSArPSBjaGFyYWN0ZXI7XG4gIH1cblxuICBjb25zdCBjbGFzc05hbWVzSW5jbHVkZXNDbGFzc05hbWUgPSBjbGFzc05hbWVzLmluY2x1ZGVzKGNsYXNzTmFtZSk7XG5cbiAgaWYgKCFjbGFzc05hbWVzSW5jbHVkZXNDbGFzc05hbWUpIHtcbiAgICBjbGFzc05hbWVzLnB1c2goY2xhc3NOYW1lKTtcbiAgfSBlbHNlIHtcbiAgICBjbGFzc05hbWUgPSBnZW5lcmF0ZUNsYXNzTmFtZSgpO1xuICB9XG5cbiAgcmV0dXJuIGNsYXNzTmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldHJpZXZlQ2xhc3NOYW1lKGVsZW1lbnQpIHtcbiAgY29uc3QgeyBjbGFzc05hbWUgfSA9IGVsZW1lbnQucmVhY3RGdW5jdGlvbiB8fCBlbGVtZW50LnJlYWN0Q29tcG9uZW50LmNvbnN0cnVjdG9yO1xuXG4gIHJldHVybiBjbGFzc05hbWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZ2VuZXJhdGVDbGFzc05hbWUsXG4gIHJldHJpZXZlQ2xhc3NOYW1lXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIHRhZ05hbWVzIH0gZnJvbSBcIi4vdGFnTmFtZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ1NTTGV4ZXIgfSBmcm9tIFwiLi9jc3MvbGV4ZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ1NTUGFyc2VyIH0gZnJvbSBcIi4vY3NzL3BhcnNlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzdHlsZXNVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvc3R5bGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNsYXNzTmFtZVV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9jbGFzc05hbWVcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3R5bGVzVXRpbGl0aWVzIH0gZnJvbSBcIi4vaW5kZXhcIjsgLy8vXG5cbmNvbnN0IHsgZ2VuZXJhdGVTdHlsZSwgcmV0cmlldmVTdHlsZSwgcmVuZGVyU3R5bGVzIH0gPSBzdHlsZXNVdGlsaXRpZXM7XG5cbmNvbnN0IGZpcmFDb2RlRm9udE1peGluID0gYFxuXG4gIGZvbnQtc2l6ZTogMS4zcmVtO1xuICBsaW5lLWhlaWdodDogMjBweDtcbiAgZm9udC1mYW1pbHk6IFwiRmlyYSBDb2RlXCI7XG4gIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7IC8qIEZvcmNlIGxpZ2F0dXJlcyBmb3IgV2Via2l0LCBCbGluaywgR2Vja28gKi9cbiAgZm9udC1mZWF0dXJlLXNldHRpbmdzOiBcImNhbHRcIiAxOyAgLyogRW5hYmxlIGxpZ2F0dXJlcyBmb3IgSUUgMTArLCBFZGdlICovXG5cbmA7XG5cbmNvbnN0IG1vbm9zcGFjZUZvbnRNaXhpbiA9IGBcblxuICBmb250LXNpemU6IDEuM3JlbTtcbiAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7XG4gICBcbmA7XG5cbmdlbmVyYXRlU3R5bGUoW1tgXG5cbiAgZGlzcGxheTogbm9uZTtcbiAgXG4gIC5hY3RpdmUge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG5cbmBdXSwgXCJhYmNcIik7XG5cbmNvbnN0IHN1cGVyU3R5bGUgPSByZXRyaWV2ZVN0eWxlKFwiYWJjXCIpO1xuXG5nZW5lcmF0ZVN0eWxlKFtbYFxuXG4gIGNvbG9yOiB0cmFuc3BhcmVudDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgY3Vyc29yOiBhdXRvO1xuICByZXNpemU6IG5vbmU7XG4gIG91dGxpbmU6IG5vbmU7XG4gIHRhYi1zaXplOiAyO1xuICBib3JkZXItdG9wOiBub25lO1xuICBvdmVyZmxvdy14OiBzY3JvbGw7XG4gIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgY2FyZXQtY29sb3I6IHRyYW5zcGFyZW50O1xuICB3aGl0ZS1zcGFjZTogcHJlO1xuICBvdmVyZmxvdy13cmFwOiBub3JtYWw7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuXG4gIDo6c2VsZWN0aW9uIHsgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IH1cbiAgXG4gICR7bW9ub3NwYWNlRm9udE1peGlufVxuXG4gIC5maXJhLWNvZGUge1xuXG4gICAgJHtmaXJhQ29kZUZvbnRNaXhpbn1cbiAgICBcbiAgfVxuICBcbmBdXSwgXCJkZWZcIiwgc3VwZXJTdHlsZSk7XG5cbnJlbmRlclN0eWxlcygpO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7OztBQUFBOzs7Ozs7QUFFQSxRQUFNLFdBQVc7TUFDZjtNQUFLO01BQVE7TUFBVztNQUFTO01BQ2pDO01BQUs7TUFBUTtNQUFPO01BQU87TUFBYztNQUFRO01BQU07TUFDdkQ7TUFBVTtNQUFXO01BQVE7TUFBUTtNQUFPO01BQzVDO01BQVE7TUFBWTtNQUFNO01BQU87TUFBVztNQUFPO01BQVU7TUFBTztNQUFNO01BQU07TUFBTTtNQUFTO01BQVk7TUFBYztNQUFVO01BQVU7TUFDN0k7TUFBTTtNQUFNO01BQU07TUFBTTtN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