appium-android-driver 5.2.2 → 5.2.5
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.
|
@@ -579,7 +579,7 @@ helpers.installHelperApp = async function installHelperApp(adb, apkPath, package
|
|
|
579
579
|
});
|
|
580
580
|
};
|
|
581
581
|
|
|
582
|
-
helpers.pushSettingsApp = async function pushSettingsApp(adb, throwError = false) {
|
|
582
|
+
helpers.pushSettingsApp = async function pushSettingsApp(adb, throwError = false, opts = {}) {
|
|
583
583
|
_logger.default.debug('Pushing settings apk to device...');
|
|
584
584
|
|
|
585
585
|
try {
|
|
@@ -617,7 +617,9 @@ helpers.pushSettingsApp = async function pushSettingsApp(adb, throwError = false
|
|
|
617
617
|
}
|
|
618
618
|
|
|
619
619
|
try {
|
|
620
|
-
await adb.requireRunningSettingsApp(
|
|
620
|
+
await adb.requireRunningSettingsApp({
|
|
621
|
+
timeout: helpers.isEmulator(adb, opts) ? 30000 : 5000
|
|
622
|
+
});
|
|
621
623
|
} catch (err) {
|
|
622
624
|
_logger.default.debug(err);
|
|
623
625
|
|
|
@@ -773,7 +775,7 @@ helpers.initDevice = async function initDevice(adb, opts) {
|
|
|
773
775
|
} else {
|
|
774
776
|
await adb.waitForDevice();
|
|
775
777
|
const shouldThrowError = language || locale || localeScript || unicodeKeyboard || disableWindowAnimation || !skipUnlock;
|
|
776
|
-
await helpers.pushSettingsApp(adb, shouldThrowError);
|
|
778
|
+
await helpers.pushSettingsApp(adb, shouldThrowError, opts);
|
|
777
779
|
}
|
|
778
780
|
|
|
779
781
|
if (!helpers.isEmulator(adb, opts) && (mockLocationApp || _lodash.default.isUndefined(mockLocationApp))) {
|
|
@@ -911,4 +913,4 @@ var _default = helpers;
|
|
|
911
913
|
exports.default = _default;require('source-map-support').install();
|
|
912
914
|
|
|
913
915
|
|
|
914
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2FuZHJvaWQtaGVscGVycy5qcyIsIm5hbWVzIjpbIlBBQ0tBR0VfSU5TVEFMTF9USU1FT1VUIiwiQ0hST01FX0JST1dTRVJfUEFDS0FHRV9BQ1RJVklUWSIsImNocm9tZSIsInBrZyIsImFjdGl2aXR5IiwiY2hyb21pdW0iLCJjaHJvbWViZXRhIiwiYnJvd3NlciIsImRlZmF1bHQiLCJTRVRUSU5HU19IRUxQRVJfUEtHX0lEIiwiU0VUVElOR1NfSEVMUEVSX1VOTE9DS19BQ1RJVklUWSIsIkVNVUxBVE9SX1BBVFRFUk4iLCJBUFBfU1RBVEUiLCJPYmplY3QiLCJmcmVlemUiLCJOT1RfSU5TVEFMTEVEIiwiTk9UX1JVTk5JTkciLCJSVU5OSU5HX0lOX0JBQ0tHUk9VTkQiLCJSVU5OSU5HX0lOX0ZPUkVHUk9VTkQiLCJlbnN1cmVOZXR3b3JrU3BlZWQiLCJhZGIiLCJuZXR3b3JrU3BlZWQiLCJfIiwidmFsdWVzIiwiTkVUV09SS19TUEVFRCIsImluY2x1ZGVzIiwibG9nZ2VyIiwid2FybiIsIkZVTEwiLCJwcmVwYXJlQXZkQXJncyIsIm9wdHMiLCJpc0hlYWRsZXNzIiwiYXZkQXJncyIsInJlc3VsdCIsImlzQXJyYXkiLCJwdXNoIiwidXRpbCIsInNoZWxsUGFyc2UiLCJ0b0NyZWRlbnRpYWxUeXBlIiwidW5sb2NrVHlwZSIsIlBJTl9VTkxPQ0siLCJQSU5fVU5MT0NLX0tFWV9FVkVOVCIsIlBBU1NXT1JEX1VOTE9DSyIsIlBBVFRFUk5fVU5MT0NLIiwiRXJyb3IiLCJoZWxwZXJzIiwiY3JlYXRlQmFzZUFEQiIsImFkYlBvcnQiLCJzdXBwcmVzc0tpbGxTZXJ2ZXIiLCJyZW1vdGVBZGJIb3N0IiwiY2xlYXJEZXZpY2VMb2dzT25TdGFydCIsImFkYkV4ZWNUaW1lb3V0IiwidXNlS2V5c3RvcmUiLCJrZXlzdG9yZVBhdGgiLCJrZXlzdG9yZVBhc3N3b3JkIiwia2V5QWxpYXMiLCJrZXlQYXNzd29yZCIsInJlbW90ZUFwcHNDYWNoZUxpbWl0IiwiYnVpbGRUb29sc1ZlcnNpb24iLCJhbGxvd09mZmxpbmVEZXZpY2VzIiwiYWxsb3dEZWxheUFkYiIsIkFEQiIsImNyZWF0ZUFEQiIsInByZXBhcmVFbXVsYXRvciIsImF2ZCIsImF2ZEVudiIsImVudiIsImxhbmd1YWdlIiwibG9jYWxlIiwiY291bnRyeSIsImF2ZExhdW5jaFRpbWVvdXQiLCJsYXVuY2hUaW1lb3V0IiwiYXZkUmVhZHlUaW1lb3V0IiwicmVhZHlUaW1lb3V0IiwiYXZkTmFtZSIsInJlcGxhY2UiLCJydW5uaW5nQVZEIiwiZ2V0UnVubmluZ0FWRCIsImFyZ3MiLCJkZWJ1ZyIsImtpbGxFbXVsYXRvciIsImxhdW5jaEFWRCIsImVuc3VyZURldmljZUxvY2FsZSIsInNjcmlwdCIsImlzU3RyaW5nIiwic2V0RGV2aWNlTGFuZ3VhZ2VDb3VudHJ5IiwiZW5zdXJlQ3VycmVudExvY2FsZSIsIm1lc3NhZ2UiLCJnZXREZXZpY2VJbmZvRnJvbUNhcHMiLCJ1ZGlkIiwiZW1Qb3J0IiwiY3VyRGV2aWNlSWQiLCJlbXVsYXRvclBvcnQiLCJpbmZvIiwiZGV2aWNlcyIsImdldERldmljZXNXaXRoUmV0cnkiLCJtYXAiLCJlcnJvckFuZFRocm93IiwiZ2V0UG9ydEZyb21FbXVsYXRvclN0cmluZyIsInBsYXRmb3JtVmVyc2lvbiIsInRyaW0iLCJzZW12ZXIiLCJjb2VyY2UiLCJhdmFpbERldmljZXMiLCJwYXJ0aWFsTWF0Y2hDYW5kaWRhdGUiLCJkZXZpY2UiLCJzZXREZXZpY2VJZCIsInJhd0RldmljZU9TIiwiZ2V0UGxhdGZvcm1WZXJzaW9uIiwiZGV2aWNlT1MiLCJib3RoVmVyc2lvbnNDYW5CZUNvZXJjZWQiLCJ2YWxpZCIsImJvdGhWZXJzaW9uc0FyZVN0cmluZ3MiLCJ2ZXJzaW9uIiwidG9Mb3dlciIsIm1ham9yIiwibWlub3IiLCJndCIsImtleXMiLCJqb2luIiwic2V0RW11bGF0b3JQb3J0IiwidmFsaWRhdGVQYWNrYWdlQWN0aXZpdHlOYW1lcyIsImtleSIsIm5hbWUiLCJtYXRjaCIsImV4ZWMiLCJpbmRleCIsInN1YnN0cmluZyIsImdldExhdW5jaEluZm8iLCJhcHAiLCJhcHBQYWNrYWdlIiwiYXBwQWN0aXZpdHkiLCJhcHBXYWl0UGFja2FnZSIsImFwcFdhaXRBY3Rpdml0eSIsImFwa1BhY2thZ2UiLCJhcGtBY3Rpdml0eSIsInBhY2thZ2VBbmRMYXVuY2hBY3Rpdml0eUZyb21NYW5pZmVzdCIsInJlc2V0QXBwIiwiZmFzdFJlc2V0IiwiZnVsbFJlc2V0IiwiYW5kcm9pZEluc3RhbGxUaW1lb3V0IiwiYXV0b0dyYW50UGVybWlzc2lvbnMiLCJhbGxvd1Rlc3RQYWNrYWdlcyIsImlzSW5zdGFsbGVkIiwiaXNBcHBJbnN0YWxsZWQiLCJmb3JjZVN0b3AiLCJpZ24iLCJvdXRwdXQiLCJjbGVhciIsInRvTG93ZXJDYXNlIiwiZ3JhbnRBbGxQZXJtaXNzaW9ucyIsImVycm9yIiwidW5pbnN0YWxsQXBrIiwiaW5zdGFsbCIsImdyYW50UGVybWlzc2lvbnMiLCJ0aW1lb3V0IiwiaW5zdGFsbEFwayIsImVuZm9yY2VBcHBJbnN0YWxsIiwiYXBwU3RhdGUiLCJ3YXNVbmluc3RhbGxlZCIsImluc3RhbGxPclVwZ3JhZGUiLCJlbmZvcmNlQ3VycmVudEJ1aWxkIiwiaXNJbnN0YWxsZWRPdmVyRXhpc3RpbmdBcHAiLCJBUFBfSU5TVEFMTF9TVEFURSIsImluc3RhbGxPdGhlckFwa3MiLCJvdGhlckFwcHMiLCJCIiwiYWxsIiwib3RoZXJBcHAiLCJ1bmluc3RhbGxPdGhlclBhY2thZ2VzIiwiYXBwUGFja2FnZXMiLCJmaWx0ZXJQYWNrYWdlcyIsImdldFRoaXJkUGFydHlQYWNrYWdlcyIsInBhY2thZ2VzU3RyaW5nIiwic2hlbGwiLCJhcHBQYWNrYWdlc0FycmF5Iiwic3BsaXQiLCJFT0wiLCJkaWZmZXJlbmNlIiwiZXJyIiwiaW5pdFVuaWNvZGVLZXlib2FyZCIsImRlZmF1bHRJTUUiLCJhcHBpdW1JTUUiLCJlbmFibGVJTUUiLCJzZXRJTUUiLCJzZXRNb2NrTG9jYXRpb25BcHAiLCJnZXRBcGlMZXZlbCIsImluc3RhbGxIZWxwZXJBcHAiLCJhcGtQYXRoIiwicGFja2FnZUlkIiwicmV0cnkiLCJyZXRyeUluc3RhbGxIZWxwZXJBcHAiLCJwdXNoU2V0dGluZ3NBcHAiLCJ0aHJvd0Vycm9yIiwic2V0dGluZ3NBcGtQYXRoIiwicHJvY2Vzc0V4aXN0cyIsImFwaUxldmVsIiwicGVybXMiLCJ4IiwicmVxdWlyZVJ1bm5pbmdTZXR0aW5nc0FwcCIsInB1c2hTdHJpbmdzIiwicmVtb3RlRGlyIiwic3RyaW5nc0pzb24iLCJyZW1vdGVGaWxlIiwicGF0aCIsInBvc2l4IiwicmVzb2x2ZSIsInJpbXJhZiIsInB1bGxBcGsiLCJ0bXBEaXIiLCJpc0VtcHR5IiwiZnMiLCJleGlzdHMiLCJzdHJpbmdzVG1wRGlyIiwiYXBrU3RyaW5ncyIsImxvY2FsUGF0aCIsImV4dHJhY3RTdHJpbmdzRnJvbUFwayIsInVubG9ja1dpdGhIZWxwZXJBcHAiLCJmaXJzdFJ1biIsImxhdW5jaEhlbHBlciIsImlzU2NyZWVuTG9ja2VkIiwiZSIsImRlbGF5IiwidW5sb2NrIiwiZHJpdmVyIiwiY2FwYWJpbGl0aWVzIiwidW5sb2NrS2V5IiwidW5sb2NrU3RyYXRlZ3kiLCJ1bmxvY2tTdWNjZXNzVGltZW91dCIsInVubG9ja2VyIiwidmFsaWRhdGVVbmxvY2tDYXBhYmlsaXRpZXMiLCJGSU5HRVJQUklOVF9VTkxPQ0siLCJpc05pbCIsImlzTG9ja01hbmFnZW1lbnRTdXBwb3J0ZWQiLCJmYXN0VW5sb2NrIiwiY3JlZGVudGlhbCIsImNyZWRlbnRpYWxUeXBlIiwidW5sb2NrTWV0aG9kIiwicGluVW5sb2NrIiwicGluVW5sb2NrV2l0aEtleUV2ZW50IiwicGFzc3dvcmRVbmxvY2siLCJwYXR0ZXJuVW5sb2NrIiwiZmluZ2VycHJpbnRVbmxvY2siLCJ2ZXJpZnlVbmxvY2siLCJ0aW1lb3V0TXMiLCJ3YWl0Rm9yQ29uZGl0aW9uIiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsImluaXREZXZpY2UiLCJza2lwRGV2aWNlSW5pdGlhbGl6YXRpb24iLCJsb2NhbGVTY3JpcHQiLCJ1bmljb2RlS2V5Ym9hcmQiLCJkaXNhYmxlV2luZG93QW5pbWF0aW9uIiwic2tpcFVubG9jayIsIm1vY2tMb2NhdGlvbkFwcCIsInNraXBMb2djYXRDYXB0dXJlIiwibG9nY2F0Rm9ybWF0IiwibG9nY2F0RmlsdGVyU3BlY3MiLCJ3YWl0Rm9yRGV2aWNlIiwic2hvdWxkVGhyb3dFcnJvciIsImlzRW11bGF0b3IiLCJpc1VuZGVmaW5lZCIsInN0YXJ0TG9nY2F0IiwiZm9ybWF0IiwiZmlsdGVyU3BlY3MiLCJyZW1vdmVOdWxsUHJvcGVydGllcyIsIm9iaiIsImlzTnVsbCIsInRydW5jYXRlRGVjaW1hbHMiLCJudW1iZXIiLCJkaWdpdHMiLCJtdWx0aXBsaWVyIiwiTWF0aCIsInBvdyIsImFkanVzdGVkTnVtIiwidHJ1bmNhdGVkTnVtIiwiaXNDaHJvbWVCcm93c2VyIiwiZ2V0Q2hyb21lUGtnIiwicmVtb3ZlQWxsU2Vzc2lvbldlYlNvY2tldEhhbmRsZXJzIiwic2VydmVyIiwic2Vzc2lvbklkIiwiaXNGdW5jdGlvbiIsImdldFdlYlNvY2tldEhhbmRsZXJzIiwiYWN0aXZlSGFuZGxlcnMiLCJwYXRobmFtZSIsInJlbW92ZVdlYlNvY2tldEhhbmRsZXIiLCJwYXJzZUFycmF5IiwiY2FwIiwicGFyc2VkQ2FwcyIsIkpTT04iLCJwYXJzZSIsInZhbGlkYXRlRGVzaXJlZENhcHMiLCJjYXBzIiwiYnJvd3Nlck5hbWUiLCJhZGp1c3RCcm93c2VyU2Vzc2lvbkNhcHMiLCJzdHJpbmdpZnkiLCJwb3NzaWJsZU5hbWVzIiwic29tZSIsInRlc3QiLCJib290c3RyYXAiLCJCb290c3RyYXAiXSwic291cmNlUm9vdCI6Ii4uLy4uIiwic291cmNlcyI6WyJsaWIvYW5kcm9pZC1oZWxwZXJzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IHJldHJ5LCB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBmcywgdXRpbCB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IHBhdGggYXMgc2V0dGluZ3NBcGtQYXRoIH0gZnJvbSAnaW8uYXBwaXVtLnNldHRpbmdzJztcbmltcG9ydCBCb290c3RyYXAgZnJvbSAnLi9ib290c3RyYXAnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IEFEQiBmcm9tICdhcHBpdW0tYWRiJztcbmltcG9ydCB7XG4gIGRlZmF1bHQgYXMgdW5sb2NrZXIsIFBJTl9VTkxPQ0ssIFBJTl9VTkxPQ0tfS0VZX0VWRU5ULFxuICBQQVNTV09SRF9VTkxPQ0ssIFBBVFRFUk5fVU5MT0NLLCBGSU5HRVJQUklOVF9VTkxPQ0tcbn0gZnJvbSAnLi91bmxvY2staGVscGVycyc7XG5pbXBvcnQgeyBFT0wgfSBmcm9tICdvcyc7XG5pbXBvcnQgc2VtdmVyIGZyb20gJ3NlbXZlcic7XG5cbmNvbnN0IFBBQ0tBR0VfSU5TVEFMTF9USU1FT1VUID0gOTAwMDA7IC8vIG1pbGxpc2Vjb25kc1xuLy8gaHR0cHM6Ly9jcy5jaHJvbWl1bS5vcmcvY2hyb21pdW0vc3JjL2Nocm9tZS9icm93c2VyL2RldnRvb2xzL2RldmljZS9hbmRyb2lkX2RldmljZV9pbmZvX3F1ZXJ5LmNjXG5jb25zdCBDSFJPTUVfQlJPV1NFUl9QQUNLQUdFX0FDVElWSVRZID0ge1xuICBjaHJvbWU6IHtcbiAgICBwa2c6ICdjb20uYW5kcm9pZC5jaHJvbWUnLFxuICAgIGFjdGl2aXR5OiAnY29tLmdvb2dsZS5hbmRyb2lkLmFwcHMuY2hyb21lLk1haW4nLFxuICB9LFxuICBjaHJvbWl1bToge1xuICAgIHBrZzogJ29yZy5jaHJvbWl1bS5jaHJvbWUuc2hlbGwnLFxuICAgIGFjdGl2aXR5OiAnLkNocm9tZVNoZWxsQWN0aXZpdHknLFxuICB9LFxuICBjaHJvbWViZXRhOiB7XG4gICAgcGtnOiAnY29tLmNocm9tZS5iZXRhJyxcbiAgICBhY3Rpdml0eTogJ2NvbS5nb29nbGUuYW5kcm9pZC5hcHBzLmNocm9tZS5NYWluJyxcbiAgfSxcbiAgYnJvd3Nlcjoge1xuICAgIHBrZzogJ2NvbS5hbmRyb2lkLmJyb3dzZXInLFxuICAgIGFjdGl2aXR5OiAnY29tLmFuZHJvaWQuYnJvd3Nlci5Ccm93c2VyQWN0aXZpdHknLFxuICB9LFxuICAnY2hyb21pdW0tYnJvd3Nlcic6IHtcbiAgICBwa2c6ICdvcmcuY2hyb21pdW0uY2hyb21lJyxcbiAgICBhY3Rpdml0eTogJ2NvbS5nb29nbGUuYW5kcm9pZC5hcHBzLmNocm9tZS5NYWluJyxcbiAgfSxcbiAgJ2Nocm9taXVtLXdlYnZpZXcnOiB7XG4gICAgcGtnOiAnb3JnLmNocm9taXVtLndlYnZpZXdfc2hlbGwnLFxuICAgIGFjdGl2aXR5OiAnb3JnLmNocm9taXVtLndlYnZpZXdfc2hlbGwuV2ViVmlld0Jyb3dzZXJBY3Rpdml0eScsXG4gIH0sXG4gIGRlZmF1bHQ6IHtcbiAgICBwa2c6ICdjb20uYW5kcm9pZC5jaHJvbWUnLFxuICAgIGFjdGl2aXR5OiAnY29tLmdvb2dsZS5hbmRyb2lkLmFwcHMuY2hyb21lLk1haW4nLFxuICB9LFxufTtcbmNvbnN0IFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQgPSAnaW8uYXBwaXVtLnNldHRpbmdzJztcbmNvbnN0IFNFVFRJTkdTX0hFTFBFUl9VTkxPQ0tfQUNUSVZJVFkgPSAnLlVubG9jayc7XG5jb25zdCBFTVVMQVRPUl9QQVRURVJOID0gL1xcYmVtdWxhdG9yXFxiL2k7XG4vLyBUaGVzZSBjb25zdGFudHMgYXJlIGluIHN5bmMgd2l0aFxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWlhcHBsaWNhdGlvbnN0YXRlL3hjdWlhcHBsaWNhdGlvbnN0YXRlcnVubmluZ2JhY2tncm91bmQ/bGFuZ3VhZ2U9b2JqY1xuY29uc3QgQVBQX1NUQVRFID0gT2JqZWN0LmZyZWV6ZSh7XG4gIE5PVF9JTlNUQUxMRUQ6IDAsXG4gIE5PVF9SVU5OSU5HOiAxLFxuICBSVU5OSU5HX0lOX0JBQ0tHUk9VTkQ6IDMsXG4gIFJVTk5JTkdfSU5fRk9SRUdST1VORDogNFxufSk7XG5cblxuZnVuY3Rpb24gZW5zdXJlTmV0d29ya1NwZWVkIChhZGIsIG5ldHdvcmtTcGVlZCkge1xuICBpZiAoXy52YWx1ZXMoYWRiLk5FVFdPUktfU1BFRUQpLmluY2x1ZGVzKG5ldHdvcmtTcGVlZCkpIHtcbiAgICByZXR1cm4gbmV0d29ya1NwZWVkO1xuICB9XG4gIGxvZ2dlci53YXJuKGBXcm9uZyBuZXR3b3JrIHNwZWVkIHBhcmFtICcke25ldHdvcmtTcGVlZH0nLCB1c2luZyBkZWZhdWx0OiAke2FkYi5ORVRXT1JLX1NQRUVELkZVTEx9LiBgICtcbiAgICBgU3VwcG9ydGVkIHZhbHVlczogJHtfLnZhbHVlcyhhZGIuTkVUV09SS19TUEVFRCl9YCk7XG4gIHJldHVybiBhZGIuTkVUV09SS19TUEVFRC5GVUxMO1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlQXZkQXJncyAoYWRiLCBvcHRzKSB7XG4gIGNvbnN0IHtcbiAgICBuZXR3b3JrU3BlZWQsXG4gICAgaXNIZWFkbGVzcyxcbiAgICBhdmRBcmdzLFxuICB9ID0gb3B0cztcbiAgY29uc3QgcmVzdWx0ID0gW107XG4gIGlmIChhdmRBcmdzKSB7XG4gICAgaWYgKF8uaXNBcnJheShhdmRBcmdzKSkge1xuICAgICAgcmVzdWx0LnB1c2goLi4uYXZkQXJncyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wdXNoKC4uLih1dGlsLnNoZWxsUGFyc2UoYCR7YXZkQXJnc31gKSkpO1xuICAgIH1cbiAgfVxuICBpZiAobmV0d29ya1NwZWVkKSB7XG4gICAgcmVzdWx0LnB1c2goJy1uZXRzcGVlZCcsIGVuc3VyZU5ldHdvcmtTcGVlZChhZGIsIG5ldHdvcmtTcGVlZCkpO1xuICB9XG4gIGlmIChpc0hlYWRsZXNzKSB7XG4gICAgcmVzdWx0LnB1c2goJy1uby13aW5kb3cnKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiB0b0NyZWRlbnRpYWxUeXBlICh1bmxvY2tUeXBlKSB7XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICBbUElOX1VOTE9DS106ICdwaW4nLFxuICAgIFtQSU5fVU5MT0NLX0tFWV9FVkVOVF06ICdwaW4nLFxuICAgIFtQQVNTV09SRF9VTkxPQ0tdOiAncGFzc3dvcmQnLFxuICAgIFtQQVRURVJOX1VOTE9DS106ICdwYXR0ZXJuJyxcbiAgfVt1bmxvY2tUeXBlXTtcbiAgaWYgKHJlc3VsdCkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBVbmxvY2sgdHlwZSAnJHt1bmxvY2tUeXBlfScgaXMgbm90IGtub3duYCk7XG59XG5cblxuY29uc3QgaGVscGVycyA9IHt9O1xuXG5oZWxwZXJzLmNyZWF0ZUJhc2VBREIgPSBhc3luYyBmdW5jdGlvbiBjcmVhdGVCYXNlQURCIChvcHRzID0ge30pIHtcbiAgLy8gZmlsdGVyIG91dCBhbnkgdW53YW50ZWQgb3B0aW9ucyBzZW50IGluXG4gIC8vIHRoaXMgbGlzdCBzaG91bGQgYmUgdXBkYXRlZCBhcyBBREIgdGFrZXMgbW9yZSBhcmd1bWVudHNcbiAgY29uc3Qge1xuICAgIGFkYlBvcnQsXG4gICAgc3VwcHJlc3NLaWxsU2VydmVyLFxuICAgIHJlbW90ZUFkYkhvc3QsXG4gICAgY2xlYXJEZXZpY2VMb2dzT25TdGFydCxcbiAgICBhZGJFeGVjVGltZW91dCxcbiAgICB1c2VLZXlzdG9yZSxcbiAgICBrZXlzdG9yZVBhdGgsXG4gICAga2V5c3RvcmVQYXNzd29yZCxcbiAgICBrZXlBbGlhcyxcbiAgICBrZXlQYXNzd29yZCxcbiAgICByZW1vdGVBcHBzQ2FjaGVMaW1pdCxcbiAgICBidWlsZFRvb2xzVmVyc2lvbixcbiAgICBhbGxvd09mZmxpbmVEZXZpY2VzLFxuICAgIGFsbG93RGVsYXlBZGIsXG4gIH0gPSBvcHRzO1xuICByZXR1cm4gYXdhaXQgQURCLmNyZWF0ZUFEQih7XG4gICAgYWRiUG9ydCxcbiAgICBzdXBwcmVzc0tpbGxTZXJ2ZXIsXG4gICAgcmVtb3RlQWRiSG9zdCxcbiAgICBjbGVhckRldmljZUxvZ3NPblN0YXJ0LFxuICAgIGFkYkV4ZWNUaW1lb3V0LFxuICAgIHVzZUtleXN0b3JlLFxuICAgIGtleXN0b3JlUGF0aCxcbiAgICBrZXlzdG9yZVBhc3N3b3JkLFxuICAgIGtleUFsaWFzLFxuICAgIGtleVBhc3N3b3JkLFxuICAgIHJlbW90ZUFwcHNDYWNoZUxpbWl0LFxuICAgIGJ1aWxkVG9vbHNWZXJzaW9uLFxuICAgIGFsbG93T2ZmbGluZURldmljZXMsXG4gICAgYWxsb3dEZWxheUFkYixcbiAgfSk7XG59O1xuXG5oZWxwZXJzLnByZXBhcmVFbXVsYXRvciA9IGFzeW5jIGZ1bmN0aW9uIHByZXBhcmVFbXVsYXRvciAoYWRiLCBvcHRzKSB7XG4gIGNvbnN0IHtcbiAgICBhdmQsXG4gICAgYXZkRW52OiBlbnYsXG4gICAgbGFuZ3VhZ2UsXG4gICAgbG9jYWxlOiBjb3VudHJ5LFxuICAgIGF2ZExhdW5jaFRpbWVvdXQ6IGxhdW5jaFRpbWVvdXQsXG4gICAgYXZkUmVhZHlUaW1lb3V0OiByZWFkeVRpbWVvdXQsXG4gIH0gPSBvcHRzO1xuICBpZiAoIWF2ZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGxhdW5jaCBBVkQgd2l0aG91dCBBVkQgbmFtZScpO1xuICB9XG5cbiAgY29uc3QgYXZkTmFtZSA9IGF2ZC5yZXBsYWNlKCdAJywgJycpO1xuICBjb25zdCBydW5uaW5nQVZEID0gYXdhaXQgYWRiLmdldFJ1bm5pbmdBVkQoYXZkTmFtZSk7XG4gIGNvbnN0IGFyZ3MgPSBwcmVwYXJlQXZkQXJncyhhZGIsIG9wdHMpO1xuICBpZiAocnVubmluZ0FWRCkge1xuICAgIGlmIChhcmdzLmluY2x1ZGVzKCctd2lwZS1kYXRhJykpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgS2lsbGluZyAnJHthdmROYW1lfScgYmVjYXVzZSBpdCBuZWVkcyB0byBiZSB3aXBlZCBhdCBzdGFydC5gKTtcbiAgICAgIGF3YWl0IGFkYi5raWxsRW11bGF0b3IoYXZkTmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnTm90IGxhdW5jaGluZyBBVkQgYmVjYXVzZSBpdCBpcyBhbHJlYWR5IHJ1bm5pbmcuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG4gIGF3YWl0IGFkYi5sYXVuY2hBVkQoYXZkLCB7XG4gICAgYXJncyxcbiAgICBlbnYsXG4gICAgbGFuZ3VhZ2UsXG4gICAgY291bnRyeSxcbiAgICBsYXVuY2hUaW1lb3V0LFxuICAgIHJlYWR5VGltZW91dCxcbiAgfSk7XG59O1xuXG4vKipcbiAqIFNldCBhbmQgZW5zdXJlIHRoZSBsb2NhbGUgbmFtZSBvZiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGFkYiAtIFRoZSBhZGIgbW9kdWxlIGluc3RhbmNlLlxuICogQHBhcmFtIHtzdHJpbmd9IGxhbmd1YWdlIC0gTGFuZ3VhZ2UuIFRoZSBsYW5ndWFnZSBmaWVsZCBpcyBjYXNlIGluc2Vuc2l0aXZlLCBidXQgTG9jYWxlIGFsd2F5cyBjYW5vbmljYWxpemVzIHRvIGxvd2VyIGNhc2UuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6IFthLXpBLVpdezIsOH0uIGUuZy4gZW4sIGphIDogaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2phdmEvdXRpbC9Mb2NhbGUuaHRtbFxuICogQHBhcmFtIHtzdHJpbmd9IGNvdW50cnkgLSBDb3VudHJ5LiBUaGUgY291bnRyeSAocmVnaW9uKSBmaWVsZCBpcyBjYXNlIGluc2Vuc2l0aXZlLCBidXQgTG9jYWxlIGFsd2F5cyBjYW5vbmljYWxpemVzIHRvIHVwcGVyIGNhc2UuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6IFthLXpBLVpdezJ9IHwgWzAtOV17M30uIGUuZy4gVVMsIEpQIDogaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2phdmEvdXRpbC9Mb2NhbGUuaHRtbFxuICogQHBhcmFtIHs/c3RyaW5nfSBzY3JpcHQgLSBTY3JpcHQuIFRoZSBzY3JpcHQgZmllbGQgaXMgY2FzZSBpbnNlbnNpdGl2ZSBidXQgTG9jYWxlIGFsd2F5cyBjYW5vbmljYWxpemVzIHRvIHRpdGxlIGNhc2UuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6IFthLXpBLVpdezR9LiBlLmcuIEhhbnMgaW4gemgtSGFucy1DTiA6IGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9qYXZhL3V0aWwvTG9jYWxlLmh0bWxcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBpdCBmYWlsZWQgdG8gc2V0IGxvY2FsZSBwcm9wZXJseVxuICovXG5oZWxwZXJzLmVuc3VyZURldmljZUxvY2FsZSA9IGFzeW5jIGZ1bmN0aW9uIGVuc3VyZURldmljZUxvY2FsZSAoYWRiLCBsYW5ndWFnZSwgY291bnRyeSwgc2NyaXB0ID0gbnVsbCkge1xuICBpZiAoIV8uaXNTdHJpbmcobGFuZ3VhZ2UpICYmICFfLmlzU3RyaW5nKGNvdW50cnkpKSB7XG4gICAgbG9nZ2VyLndhcm4oYHNldERldmljZUxhbmd1YWdlQ291bnRyeSByZXF1aXJlcyBsYW5ndWFnZSBvciBjb3VudHJ5LmApO1xuICAgIGxvZ2dlci53YXJuKGBHb3QgbGFuZ3VhZ2U6ICcke2xhbmd1YWdlfScgYW5kIGNvdW50cnk6ICcke2NvdW50cnl9J2ApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGF3YWl0IGFkYi5zZXREZXZpY2VMYW5ndWFnZUNvdW50cnkobGFuZ3VhZ2UsIGNvdW50cnksIHNjcmlwdCk7XG5cbiAgaWYgKCFhd2FpdCBhZGIuZW5zdXJlQ3VycmVudExvY2FsZShsYW5ndWFnZSwgY291bnRyeSwgc2NyaXB0KSkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBzY3JpcHQgPyBgbGFuZ3VhZ2U6ICR7bGFuZ3VhZ2V9LCBjb3VudHJ5OiAke2NvdW50cnl9IGFuZCBzY3JpcHQ6ICR7c2NyaXB0fWAgOiBgbGFuZ3VhZ2U6ICR7bGFuZ3VhZ2V9IGFuZCBjb3VudHJ5OiAke2NvdW50cnl9YDtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBzZXQgJHttZXNzYWdlfWApO1xuICB9XG59O1xuXG5oZWxwZXJzLmdldERldmljZUluZm9Gcm9tQ2FwcyA9IGFzeW5jIGZ1bmN0aW9uIGdldERldmljZUluZm9Gcm9tQ2FwcyAob3B0cyA9IHt9KSB7XG4gIC8vIHdlIGNhbiBjcmVhdGUgYSB0aHJvd2F3YXkgQURCIGluc3RhbmNlIGhlcmUsIHNvIHRoZXJlIGlzIG5vIGRlcGVuZGVuY3lcbiAgLy8gb24gaW5zdGFudGlhdGluZyBvbiBlYXJsaWVyIChhdCB0aGlzIHBvaW50LCB3ZSBoYXZlIG5vIHVkaWQpXG4gIC8vIHdlIGNhbiBvbmx5IHVzZSB0aGlzIEFEQiBvYmplY3QgZm9yIGNvbW1hbmRzIHRoYXQgd291bGQgbm90IGJlIGNvbmZ1c2VkXG4gIC8vIGlmIG11bHRpcGxlIGRldmljZXMgYXJlIGNvbm5lY3RlZFxuICBjb25zdCBhZGIgPSBhd2FpdCBoZWxwZXJzLmNyZWF0ZUJhc2VBREIob3B0cyk7XG4gIGxldCB1ZGlkID0gb3B0cy51ZGlkO1xuICBsZXQgZW1Qb3J0ID0gbnVsbDtcblxuICAvLyBhIHNwZWNpZmljIGF2ZCBuYW1lIHdhcyBnaXZlbi4gdHJ5IHRvIGluaXRpYWxpemUgd2l0aCB0aGF0XG4gIGlmIChvcHRzLmF2ZCkge1xuICAgIGF3YWl0IGhlbHBlcnMucHJlcGFyZUVtdWxhdG9yKGFkYiwgb3B0cyk7XG4gICAgdWRpZCA9IGFkYi5jdXJEZXZpY2VJZDtcbiAgICBlbVBvcnQgPSBhZGIuZW11bGF0b3JQb3J0O1xuICB9IGVsc2Uge1xuICAgIC8vIG5vIGF2ZCBnaXZlbi4gbGV0cyB0cnkgd2hhdGV2ZXIncyBwbHVnZ2VkIGluIGRldmljZXMvZW11bGF0b3JzXG4gICAgbG9nZ2VyLmluZm8oJ1JldHJpZXZpbmcgZGV2aWNlIGxpc3QnKTtcbiAgICBsZXQgZGV2aWNlcyA9IGF3YWl0IGFkYi5nZXREZXZpY2VzV2l0aFJldHJ5KCk7XG5cbiAgICAvLyB1ZGlkIHdhcyBnaXZlbiwgbGV0cyB0cnkgdG8gaW5pdCB3aXRoIHRoYXQgZGV2aWNlXG4gICAgaWYgKHVkaWQpIHtcbiAgICAgIGlmICghXy5pbmNsdWRlcyhfLm1hcChkZXZpY2VzLCAndWRpZCcpLCB1ZGlkKSkge1xuICAgICAgICBsb2dnZXIuZXJyb3JBbmRUaHJvdyhgRGV2aWNlICR7dWRpZH0gd2FzIG5vdCBpbiB0aGUgbGlzdCBvZiBjb25uZWN0ZWQgZGV2aWNlc2ApO1xuICAgICAgfVxuICAgICAgZW1Qb3J0ID0gYWRiLmdldFBvcnRGcm9tRW11bGF0b3JTdHJpbmcodWRpZCk7XG4gICAgfSBlbHNlIGlmIChvcHRzLnBsYXRmb3JtVmVyc2lvbikge1xuICAgICAgb3B0cy5wbGF0Zm9ybVZlcnNpb24gPSBgJHtvcHRzLnBsYXRmb3JtVmVyc2lvbn1gLnRyaW0oKTtcblxuICAgICAgLy8gYSBwbGF0Zm9ybSB2ZXJzaW9uIHdhcyBnaXZlbi4gbGV0cyB0cnkgdG8gZmluZCBhIGRldmljZSB3aXRoIHRoZSBzYW1lIG9zXG4gICAgICBjb25zdCBwbGF0Zm9ybVZlcnNpb24gPSBzZW12ZXIuY29lcmNlKG9wdHMucGxhdGZvcm1WZXJzaW9uKSB8fCBvcHRzLnBsYXRmb3JtVmVyc2lvbjtcbiAgICAgIGxvZ2dlci5pbmZvKGBMb29raW5nIGZvciBhIGRldmljZSB3aXRoIEFuZHJvaWQgJyR7cGxhdGZvcm1WZXJzaW9ufSdgKTtcblxuICAgICAgLy8gaW4gY2FzZSB3ZSBmYWlsIHRvIGZpbmQgc29tZXRoaW5nLCBnaXZlIHRoZSB1c2VyIGEgdXNlZnVsIGxvZyB0aGF0IGhhc1xuICAgICAgLy8gdGhlIGRldmljZSB1ZGlkcyBhbmQgb3MgdmVyc2lvbnMgc28gdGhleSBrbm93IHdoYXQncyBhdmFpbGFibGVcbiAgICAgIGNvbnN0IGF2YWlsRGV2aWNlcyA9IFtdO1xuICAgICAgbGV0IHBhcnRpYWxNYXRjaENhbmRpZGF0ZSA9IG51bGw7XG4gICAgICAvLyBmaXJzdCB0cnkgc3RhcnRlZCBkZXZpY2VzL2VtdWxhdG9yc1xuICAgICAgZm9yIChjb25zdCBkZXZpY2Ugb2YgZGV2aWNlcykge1xuICAgICAgICAvLyBkaXJlY3QgYWRiIGNhbGxzIHRvIHRoZSBzcGVjaWZpYyBkZXZpY2VcbiAgICAgICAgYXdhaXQgYWRiLnNldERldmljZUlkKGRldmljZS51ZGlkKTtcbiAgICAgICAgY29uc3QgcmF3RGV2aWNlT1MgPSBhd2FpdCBhZGIuZ2V0UGxhdGZvcm1WZXJzaW9uKCk7XG4gICAgICAgIC8vIFRoZSBkZXZpY2UgT1MgY291bGQgZWl0aGVyIGJlIGEgbnVtYmVyLCBsaWtlIGA2LjBgXG4gICAgICAgIC8vIG9yIGFuIGFiYnJldmlhdGlvbiwgbGlrZSBgUmBcbiAgICAgICAgYXZhaWxEZXZpY2VzLnB1c2goYCR7ZGV2aWNlLnVkaWR9ICgke3Jhd0RldmljZU9TfSlgKTtcbiAgICAgICAgY29uc3QgZGV2aWNlT1MgPSBzZW12ZXIuY29lcmNlKHJhd0RldmljZU9TKSB8fCByYXdEZXZpY2VPUztcbiAgICAgICAgaWYgKCFkZXZpY2VPUykge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYm90aFZlcnNpb25zQ2FuQmVDb2VyY2VkID0gc2VtdmVyLnZhbGlkKGRldmljZU9TKSAmJiBzZW12ZXIudmFsaWQocGxhdGZvcm1WZXJzaW9uKTtcbiAgICAgICAgY29uc3QgYm90aFZlcnNpb25zQXJlU3RyaW5ncyA9IF8uaXNTdHJpbmcoZGV2aWNlT1MpICYmIF8uaXNTdHJpbmcocGxhdGZvcm1WZXJzaW9uKTtcbiAgICAgICAgaWYgKGJvdGhWZXJzaW9uc0NhbkJlQ29lcmNlZCAmJiBkZXZpY2VPUy52ZXJzaW9uID09PSBwbGF0Zm9ybVZlcnNpb24udmVyc2lvblxuICAgICAgICAgICAgfHwgYm90aFZlcnNpb25zQXJlU3RyaW5ncyAmJiBfLnRvTG93ZXIoZGV2aWNlT1MpID09PSBfLnRvTG93ZXIocGxhdGZvcm1WZXJzaW9uKSkge1xuICAgICAgICAgIC8vIEdvdCBhbiBleGFjdCBtYXRjaCAtIHByb2NlZWQgaW1tZWRpYXRlbHlcbiAgICAgICAgICB1ZGlkID0gZGV2aWNlLnVkaWQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSBpZiAoIWJvdGhWZXJzaW9uc0NhbkJlQ29lcmNlZCkge1xuICAgICAgICAgIC8vIFRoZXJlIGlzIG5vIHBvaW50IHRvIGNoZWNrIGZvciBwYXJ0aWFsIG1hdGNoIGlmIGVpdGhlciBvZiB2ZXJzaW9uIG51bWJlcnMgaXMgbm90IGNvZXJjaWJsZVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCghXy5pbmNsdWRlcyhvcHRzLnBsYXRmb3JtVmVyc2lvbiwgJy4nKSAmJiBwbGF0Zm9ybVZlcnNpb24ubWFqb3IgPT09IGRldmljZU9TLm1ham9yXG4gICAgICAgICAgICB8fCBwbGF0Zm9ybVZlcnNpb24ubWFqb3IgPT09IGRldmljZU9TLm1ham9yICYmIHBsYXRmb3JtVmVyc2lvbi5taW5vciA9PT0gZGV2aWNlT1MubWlub3IpXG4gICAgICAgICAgICAvLyBHb3QgYSBwYXJ0aWFsIG1hdGNoIC0gbWFrZSBzdXJlIHdlIGNvbnNpZGVyIHRoZSBtb3N0IHJlY2VudFxuICAgICAgICAgICAgLy8gZGV2aWNlIHZlcnNpb24gYXZhaWxhYmxlIG9uIHRoZSBob3N0IHN5c3RlbVxuICAgICAgICAgICAgJiYgKHBhcnRpYWxNYXRjaENhbmRpZGF0ZSAmJiBzZW12ZXIuZ3QoZGV2aWNlT1MsIF8udmFsdWVzKHBhcnRpYWxNYXRjaENhbmRpZGF0ZSlbMF0pXG4gICAgICAgICAgICAgICAgfHwgIXBhcnRpYWxNYXRjaENhbmRpZGF0ZSkpIHtcbiAgICAgICAgICBwYXJ0aWFsTWF0Y2hDYW5kaWRhdGUgPSB7W2RldmljZS51ZGlkXTogZGV2aWNlT1N9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIXVkaWQgJiYgcGFydGlhbE1hdGNoQ2FuZGlkYXRlKSB7XG4gICAgICAgIHVkaWQgPSBfLmtleXMocGFydGlhbE1hdGNoQ2FuZGlkYXRlKVswXTtcbiAgICAgICAgYXdhaXQgYWRiLnNldERldmljZUlkKHVkaWQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXVkaWQpIHtcbiAgICAgICAgLy8gd2UgY291bGRuJ3QgZmluZCBhbnl0aGluZyEgcXVpdFxuICAgICAgICBsb2dnZXIuZXJyb3JBbmRUaHJvdyhgVW5hYmxlIHRvIGZpbmQgYW4gYWN0aXZlIGRldmljZSBvciBlbXVsYXRvciBgICtcbiAgICAgICAgICBgd2l0aCBPUyAke29wdHMucGxhdGZvcm1WZXJzaW9ufS4gVGhlIGZvbGxvd2luZyBhcmUgYXZhaWxhYmxlOiBgICtcbiAgICAgICAgICBhdmFpbERldmljZXMuam9pbignLCAnKSk7XG4gICAgICB9XG5cbiAgICAgIGVtUG9ydCA9IGFkYi5nZXRQb3J0RnJvbUVtdWxhdG9yU3RyaW5nKHVkaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhIHVkaWQgd2FzIG5vdCBnaXZlbiwgZ3JhYiB0aGUgZmlyc3QgZGV2aWNlIHdlIHNlZVxuICAgICAgdWRpZCA9IGRldmljZXNbMF0udWRpZDtcbiAgICAgIGVtUG9ydCA9IGFkYi5nZXRQb3J0RnJvbUVtdWxhdG9yU3RyaW5nKHVkaWQpO1xuICAgIH1cbiAgfVxuXG4gIGxvZ2dlci5pbmZvKGBVc2luZyBkZXZpY2U6ICR7dWRpZH1gKTtcbiAgcmV0dXJuIHt1ZGlkLCBlbVBvcnR9O1xufTtcblxuLy8gcmV0dXJucyBhIG5ldyBhZGIgaW5zdGFuY2Ugd2l0aCBkZXZpY2VJZCBzZXRcbmhlbHBlcnMuY3JlYXRlQURCID0gYXN5bmMgZnVuY3Rpb24gY3JlYXRlQURCIChvcHRzID0ge30pIHtcbiAgY29uc3Qge3VkaWQsIGVtUG9ydH0gPSBvcHRzO1xuICBjb25zdCBhZGIgPSBhd2FpdCBoZWxwZXJzLmNyZWF0ZUJhc2VBREIob3B0cyk7XG4gIGFkYi5zZXREZXZpY2VJZCh1ZGlkKTtcbiAgaWYgKGVtUG9ydCkge1xuICAgIGFkYi5zZXRFbXVsYXRvclBvcnQoZW1Qb3J0KTtcbiAgfVxuXG4gIHJldHVybiBhZGI7XG59O1xuXG5oZWxwZXJzLnZhbGlkYXRlUGFja2FnZUFjdGl2aXR5TmFtZXMgPSBmdW5jdGlvbiB2YWxpZGF0ZVBhY2thZ2VBY3Rpdml0eU5hbWVzIChvcHRzKSB7XG4gIGZvciAoY29uc3Qga2V5IG9mIFsnYXBwUGFja2FnZScsICdhcHBBY3Rpdml0eScsICdhcHBXYWl0UGFja2FnZScsICdhcHBXYWl0QWN0aXZpdHknXSkge1xuICAgIGNvbnN0IG5hbWUgPSBvcHRzW2tleV07XG4gICAgaWYgKCFuYW1lKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBtYXRjaCA9IC8oW15cXHcuKixdKSsvLmV4ZWMobmFtZSk7XG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgbG9nZ2VyLndhcm4oYENhcGFiaWxpdHkgJyR7a2V5fScgaXMgZXhwZWN0ZWQgdG8gb25seSBpbmNsdWRlIGxhdGluIGxldHRlcnMsIGRpZ2l0cywgdW5kZXJzY29yZSwgZG90LCBjb21tYSBhbmQgYXN0ZXJpc2sgY2hhcmFjdGVycy5gKTtcbiAgICBsb2dnZXIud2FybihgQ3VycmVudCB2YWx1ZSAnJHtuYW1lfScgaGFzIG5vbi1tYXRjaGluZyBjaGFyYWN0ZXIgYXQgaW5kZXggJHttYXRjaC5pbmRleH06ICcke25hbWUuc3Vic3RyaW5nKDAsIG1hdGNoLmluZGV4ICsgMSl9J2ApO1xuICB9XG59O1xuXG5oZWxwZXJzLmdldExhdW5jaEluZm8gPSBhc3luYyBmdW5jdGlvbiBnZXRMYXVuY2hJbmZvIChhZGIsIG9wdHMpIHtcbiAgbGV0IHthcHAsIGFwcFBhY2thZ2UsIGFwcEFjdGl2aXR5LCBhcHBXYWl0UGFja2FnZSwgYXBwV2FpdEFjdGl2aXR5fSA9IG9wdHM7XG4gIGlmICghYXBwKSB7XG4gICAgbG9nZ2VyLndhcm4oJ05vIGFwcCBzZW50IGluLCBub3QgcGFyc2luZyBwYWNrYWdlL2FjdGl2aXR5Jyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy52YWxpZGF0ZVBhY2thZ2VBY3Rpdml0eU5hbWVzKG9wdHMpO1xuXG4gIGlmIChhcHBQYWNrYWdlICYmIGFwcEFjdGl2aXR5KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKCdQYXJzaW5nIHBhY2thZ2UgYW5kIGFjdGl2aXR5IGZyb20gYXBwIG1hbmlmZXN0Jyk7XG4gIGxldCB7YXBrUGFja2FnZSwgYXBrQWN0aXZpdHl9ID1cbiAgICBhd2FpdCBhZGIucGFja2FnZUFuZExhdW5jaEFjdGl2aXR5RnJvbU1hbmlmZXN0KGFwcCk7XG4gIGlmIChhcGtQYWNrYWdlICYmICFhcHBQYWNrYWdlKSB7XG4gICAgYXBwUGFja2FnZSA9IGFwa1BhY2thZ2U7XG4gIH1cbiAgaWYgKCFhcHBXYWl0UGFja2FnZSkge1xuICAgIGFwcFdhaXRQYWNrYWdlID0gYXBwUGFja2FnZTtcbiAgfVxuICBpZiAoYXBrQWN0aXZpdHkgJiYgIWFwcEFjdGl2aXR5KSB7XG4gICAgYXBwQWN0aXZpdHkgPSBhcGtBY3Rpdml0eTtcbiAgfVxuICBpZiAoIWFwcFdhaXRBY3Rpdml0eSkge1xuICAgIGFwcFdhaXRBY3Rpdml0eSA9IGFwcEFjdGl2aXR5O1xuICB9XG4gIGxvZ2dlci5kZWJ1ZyhgUGFyc2VkIHBhY2thZ2UgYW5kIGFjdGl2aXR5IGFyZTogJHthcGtQYWNrYWdlfS8ke2Fwa0FjdGl2aXR5fWApO1xuICByZXR1cm4ge2FwcFBhY2thZ2UsIGFwcFdhaXRQYWNrYWdlLCBhcHBBY3Rpdml0eSwgYXBwV2FpdEFjdGl2aXR5fTtcbn07XG5cbmhlbHBlcnMucmVzZXRBcHAgPSBhc3luYyBmdW5jdGlvbiByZXNldEFwcCAoYWRiLCBvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBhcHBQYWNrYWdlLFxuICAgIGZhc3RSZXNldCxcbiAgICBmdWxsUmVzZXQsXG4gICAgYW5kcm9pZEluc3RhbGxUaW1lb3V0ID0gUEFDS0FHRV9JTlNUQUxMX1RJTUVPVVQsXG4gICAgYXV0b0dyYW50UGVybWlzc2lvbnMsXG4gICAgYWxsb3dUZXN0UGFja2FnZXNcbiAgfSA9IG9wdHM7XG5cbiAgaWYgKCFhcHBQYWNrYWdlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiJ2FwcFBhY2thZ2UnIG9wdGlvbiBpcyByZXF1aXJlZFwiKTtcbiAgfVxuXG4gIGNvbnN0IGlzSW5zdGFsbGVkID0gYXdhaXQgYWRiLmlzQXBwSW5zdGFsbGVkKGFwcFBhY2thZ2UpO1xuXG4gIGlmIChpc0luc3RhbGxlZCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBhZGIuZm9yY2VTdG9wKGFwcFBhY2thZ2UpO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICAvLyBmdWxsUmVzZXQgaGFzIHByaW9yaXR5IG92ZXIgZmFzdFJlc2V0XG4gICAgaWYgKCFmdWxsUmVzZXQgJiYgZmFzdFJlc2V0KSB7XG4gICAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBhZGIuY2xlYXIoYXBwUGFja2FnZSk7XG4gICAgICBpZiAoXy5pc1N0cmluZyhvdXRwdXQpICYmIG91dHB1dC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdmYWlsZWQnKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjbGVhciB0aGUgYXBwbGljYXRpb24gZGF0YSBvZiAnJHthcHBQYWNrYWdlfScuIE9yaWdpbmFsIGVycm9yOiAke291dHB1dH1gKTtcbiAgICAgIH1cbiAgICAgIC8vIGV4ZWN1dGluZyBgc2hlbGwgcG0gY2xlYXJgIHJlc2V0cyBwcmV2aW91c2x5IGFzc2lnbmVkIGFwcGxpY2F0aW9uIHBlcm1pc3Npb25zIGFzIHdlbGxcbiAgICAgIGlmIChhdXRvR3JhbnRQZXJtaXNzaW9ucykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGFkYi5ncmFudEFsbFBlcm1pc3Npb25zKGFwcFBhY2thZ2UpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGxvZ2dlci5lcnJvcihgVW5hYmxlIHRvIGdyYW50IHBlcm1pc3Npb25zIHJlcXVlc3RlZC4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbG9nZ2VyLmRlYnVnKGBQZXJmb3JtZWQgZmFzdCByZXNldCBvbiB0aGUgaW5zdGFsbGVkICcke2FwcFBhY2thZ2V9JyBhcHBsaWNhdGlvbiAoc3RvcCBhbmQgY2xlYXIpYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaWYgKCFhcHApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCInYXBwJyBvcHRpb24gaXMgcmVxdWlyZWQgZm9yIHJlaW5zdGFsbFwiKTtcbiAgfVxuXG4gIGxvZ2dlci5kZWJ1ZyhgUnVubmluZyBmdWxsIHJlc2V0IG9uICcke2FwcFBhY2thZ2V9JyAocmVpbnN0YWxsKWApO1xuICBpZiAoaXNJbnN0YWxsZWQpIHtcbiAgICBhd2FpdCBhZGIudW5pbnN0YWxsQXBrKGFwcFBhY2thZ2UpO1xuICB9XG4gIGF3YWl0IGFkYi5pbnN0YWxsKGFwcCwge1xuICAgIGdyYW50UGVybWlzc2lvbnM6IGF1dG9HcmFudFBlcm1pc3Npb25zLFxuICAgIHRpbWVvdXQ6IGFuZHJvaWRJbnN0YWxsVGltZW91dCxcbiAgICBhbGxvd1Rlc3RQYWNrYWdlcyxcbiAgfSk7XG59O1xuXG5oZWxwZXJzLmluc3RhbGxBcGsgPSBhc3luYyBmdW5jdGlvbiBpbnN0YWxsQXBrIChhZGIsIG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGFwcFBhY2thZ2UsXG4gICAgZmFzdFJlc2V0LFxuICAgIGZ1bGxSZXNldCxcbiAgICBhbmRyb2lkSW5zdGFsbFRpbWVvdXQgPSBQQUNLQUdFX0lOU1RBTExfVElNRU9VVCxcbiAgICBhdXRvR3JhbnRQZXJtaXNzaW9ucyxcbiAgICBhbGxvd1Rlc3RQYWNrYWdlcyxcbiAgICBlbmZvcmNlQXBwSW5zdGFsbCxcbiAgfSA9IG9wdHM7XG5cbiAgaWYgKCFhcHAgfHwgIWFwcFBhY2thZ2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCInYXBwJyBhbmQgJ2FwcFBhY2thZ2UnIG9wdGlvbnMgYXJlIHJlcXVpcmVkXCIpO1xuICB9XG5cbiAgaWYgKGZ1bGxSZXNldCkge1xuICAgIGF3YWl0IHRoaXMucmVzZXRBcHAoYWRiLCBvcHRzKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB7XG4gICAgYXBwU3RhdGUsXG4gICAgd2FzVW5pbnN0YWxsZWRcbiAgfSA9IGF3YWl0IGFkYi5pbnN0YWxsT3JVcGdyYWRlKGFwcCwgYXBwUGFja2FnZSwge1xuICAgIGdyYW50UGVybWlzc2lvbnM6IGF1dG9HcmFudFBlcm1pc3Npb25zLFxuICAgIHRpbWVvdXQ6IGFuZHJvaWRJbnN0YWxsVGltZW91dCxcbiAgICBhbGxvd1Rlc3RQYWNrYWdlcyxcbiAgICBlbmZvcmNlQ3VycmVudEJ1aWxkOiBlbmZvcmNlQXBwSW5zdGFsbCxcbiAgfSk7XG5cbiAgLy8gVGhlcmUgaXMgbm8gbmVlZCB0byByZXNldCB0aGUgbmV3bHkgaW5zdGFsbGVkIGFwcFxuICBjb25zdCBpc0luc3RhbGxlZE92ZXJFeGlzdGluZ0FwcCA9ICF3YXNVbmluc3RhbGxlZFxuICAgICYmIGFwcFN0YXRlICE9PSBhZGIuQVBQX0lOU1RBTExfU1RBVEUuTk9UX0lOU1RBTExFRDtcbiAgaWYgKGZhc3RSZXNldCAmJiBpc0luc3RhbGxlZE92ZXJFeGlzdGluZ0FwcCkge1xuICAgIGxvZ2dlci5pbmZvKGBQZXJmb3JtaW5nIGZhc3QgcmVzZXQgb24gJyR7YXBwUGFja2FnZX0nYCk7XG4gICAgYXdhaXQgdGhpcy5yZXNldEFwcChhZGIsIG9wdHMpO1xuICB9XG59O1xuXG4vKipcbiAqIEluc3RhbGxzIGFuIGFycmF5IG9mIGFwa3NcbiAqIEBwYXJhbSB7QURCfSBhZGIgSW5zdGFuY2Ugb2YgQXBwaXVtIEFEQiBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIE9wdHMgZGVmaW5lZCBpbiBkcml2ZXIuanNcbiAqL1xuaGVscGVycy5pbnN0YWxsT3RoZXJBcGtzID0gYXN5bmMgZnVuY3Rpb24gaW5zdGFsbE90aGVyQXBrcyAob3RoZXJBcHBzLCBhZGIsIG9wdHMpIHtcbiAgbGV0IHtcbiAgICBhbmRyb2lkSW5zdGFsbFRpbWVvdXQgPSBQQUNLQUdFX0lOU1RBTExfVElNRU9VVCxcbiAgICBhdXRvR3JhbnRQZXJtaXNzaW9ucyxcbiAgICBhbGxvd1Rlc3RQYWNrYWdlc1xuICB9ID0gb3B0cztcblxuICAvLyBJbnN0YWxsIGFsbCBvZiB0aGUgQVBLJ3MgYXN5bmNocm9ub3VzbHlcbiAgYXdhaXQgQi5hbGwob3RoZXJBcHBzLm1hcCgob3RoZXJBcHApID0+IHtcbiAgICBsb2dnZXIuZGVidWcoYEluc3RhbGxpbmcgYXBwOiAke290aGVyQXBwfWApO1xuICAgIHJldHVybiBhZGIuaW5zdGFsbE9yVXBncmFkZShvdGhlckFwcCwgbnVsbCwge1xuICAgICAgZ3JhbnRQZXJtaXNzaW9uczogYXV0b0dyYW50UGVybWlzc2lvbnMsXG4gICAgICB0aW1lb3V0OiBhbmRyb2lkSW5zdGFsbFRpbWVvdXQsXG4gICAgICBhbGxvd1Rlc3RQYWNrYWdlcyxcbiAgICB9KTtcbiAgfSkpO1xufTtcblxuLyoqXG4gKiBVbmluc3RhbGwgYW4gYXJyYXkgb2YgcGFja2FnZXNcbiAqIEBwYXJhbSB7QURCfSBhZGIgSW5zdGFuY2Ugb2YgQXBwaXVtIEFEQiBvYmplY3RcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gYXBwUGFja2FnZXMgQW4gYXJyYXkgb2YgcGFja2FnZSBuYW1lcyB0byB1bmluc3RhbGwuIElmIHRoaXMgaW5jbHVkZXMgYCcqJ2AsIHVuaW5zdGFsbCBhbGwgb2YgM3JkIHBhcnR5IGFwcHNcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gZmlsdGVyUGFja2FnZXMgQW4gYXJyYXkgb2YgcGFja2FnZXMgZG9lcyBub3QgdW5pbnN0YWxsIHdoZW4gYCpgIGlzIHByb3ZpZGVkIGFzIGBhcHBQYWNrYWdlc2BcbiAqL1xuaGVscGVycy51bmluc3RhbGxPdGhlclBhY2thZ2VzID0gYXN5bmMgZnVuY3Rpb24gdW5pbnN0YWxsT3RoZXJQYWNrYWdlcyAoYWRiLCBhcHBQYWNrYWdlcywgZmlsdGVyUGFja2FnZXMgPSBbXSkge1xuICBpZiAoYXBwUGFja2FnZXMuaW5jbHVkZXMoJyonKSkge1xuICAgIGxvZ2dlci5kZWJ1ZygnVW5pbnN0YWxsIHRoaXJkIHBhcnR5IHBhY2thZ2VzJyk7XG4gICAgYXBwUGFja2FnZXMgPSBhd2FpdCB0aGlzLmdldFRoaXJkUGFydHlQYWNrYWdlcyhhZGIsIGZpbHRlclBhY2thZ2VzKTtcbiAgfVxuXG4gIGxvZ2dlci5kZWJ1ZyhgVW5pbnN0YWxsaW5nIHBhY2thZ2VzOiAke2FwcFBhY2thZ2VzfWApO1xuICBhd2FpdCBCLmFsbChhcHBQYWNrYWdlcy5tYXAoKGFwcFBhY2thZ2UpID0+IGFkYi51bmluc3RhbGxBcGsoYXBwUGFja2FnZSkpKTtcbn07XG5cbi8qKlxuICogR2V0IHRoaXJkIHBhcnR5IHBhY2thZ2VzIGZpbHRlcmVkIHdpdGggYGZpbHRlclBhY2thZ2VzYFxuICogQHBhcmFtIHtBREJ9IGFkYiBJbnN0YW5jZSBvZiBBcHBpdW0gQURCIG9iamVjdFxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBmaWx0ZXJQYWNrYWdlcyBBbiBhcnJheSBvZiBwYWNrYWdlcyBkb2VzIG5vdCB1bmluc3RhbGwgd2hlbiBgKmAgaXMgcHJvdmlkZWQgYXMgYGFwcFBhY2thZ2VzYFxuICogQHJldHVybnMge0FycmF5PHN0cmluZz59IEFuIGFycmF5IG9mIGluc3RhbGxlZCB0aGlyZCBwYXJ5IHBhY2thZ2VzXG4gKi9cbmhlbHBlcnMuZ2V0VGhpcmRQYXJ0eVBhY2thZ2VzID0gYXN5bmMgZnVuY3Rpb24gZ2V0VGhpcmRQYXJ0eVBhY2thZ2VzIChhZGIsIGZpbHRlclBhY2thZ2VzID0gW10pIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYWNrYWdlc1N0cmluZyA9IGF3YWl0IGFkYi5zaGVsbChbJ3BtJywgJ2xpc3QnLCAncGFja2FnZXMnLCAnLTMnXSk7XG4gICAgY29uc3QgYXBwUGFja2FnZXNBcnJheSA9IHBhY2thZ2VzU3RyaW5nLnRyaW0oKS5yZXBsYWNlKC9wYWNrYWdlOi9nLCAnJykuc3BsaXQoRU9MKTtcbiAgICBsb2dnZXIuZGVidWcoYCcke2FwcFBhY2thZ2VzQXJyYXl9JyBmaWx0ZXJlZCB3aXRoICcke2ZpbHRlclBhY2thZ2VzfSdgKTtcbiAgICByZXR1cm4gXy5kaWZmZXJlbmNlKGFwcFBhY2thZ2VzQXJyYXksIGZpbHRlclBhY2thZ2VzKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLndhcm4oYFVuYWJsZSB0byBnZXQgcGFja2FnZXMgd2l0aCAnYWRiIHNoZWxsIHBtIGxpc3QgcGFja2FnZXMgLTMnOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIHJldHVybiBbXTtcbiAgfVxufTtcblxuaGVscGVycy5pbml0VW5pY29kZUtleWJvYXJkID0gYXN5bmMgZnVuY3Rpb24gaW5pdFVuaWNvZGVLZXlib2FyZCAoYWRiKSB7XG4gIGxvZ2dlci5kZWJ1ZygnRW5hYmxpbmcgVW5pY29kZSBrZXlib2FyZCBzdXBwb3J0Jyk7XG5cbiAgLy8gZ2V0IHRoZSBkZWZhdWx0IElNRSBzbyB3ZSBjYW4gcmV0dXJuIGJhY2sgdG8gaXQgbGF0ZXIgaWYgd2Ugd2FudFxuICBsZXQgZGVmYXVsdElNRSA9IGF3YWl0IGFkYi5kZWZhdWx0SU1FKCk7XG5cbiAgbG9nZ2VyLmRlYnVnKGBVbnNldHRpbmcgcHJldmlvdXMgSU1FICR7ZGVmYXVsdElNRX1gKTtcbiAgY29uc3QgYXBwaXVtSU1FID0gYCR7U0VUVElOR1NfSEVMUEVSX1BLR19JRH0vLlVuaWNvZGVJTUVgO1xuICBsb2dnZXIuZGVidWcoYFNldHRpbmcgSU1FIHRvICcke2FwcGl1bUlNRX0nYCk7XG4gIGF3YWl0IGFkYi5lbmFibGVJTUUoYXBwaXVtSU1FKTtcbiAgYXdhaXQgYWRiLnNldElNRShhcHBpdW1JTUUpO1xuICByZXR1cm4gZGVmYXVsdElNRTtcbn07XG5cbmhlbHBlcnMuc2V0TW9ja0xvY2F0aW9uQXBwID0gYXN5bmMgZnVuY3Rpb24gc2V0TW9ja0xvY2F0aW9uQXBwIChhZGIsIGFwcCkge1xuICB0cnkge1xuICAgIGlmIChhd2FpdCBhZGIuZ2V0QXBpTGV2ZWwoKSA8IDIzKSB7XG4gICAgICBhd2FpdCBhZGIuc2hlbGwoWydzZXR0aW5ncycsICdwdXQnLCAnc2VjdXJlJywgJ21vY2tfbG9jYXRpb24nLCAnMSddKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgYWRiLnNoZWxsKFsnYXBwb3BzJywgJ3NldCcsIGFwcCwgJ2FuZHJvaWQ6bW9ja19sb2NhdGlvbicsICdhbGxvdyddKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci53YXJuKGBVbmFibGUgdG8gc2V0IG1vY2sgbG9jYXRpb24gZm9yIGFwcCAnJHthcHB9JzogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuaGVscGVycy5pbnN0YWxsSGVscGVyQXBwID0gYXN5bmMgZnVuY3Rpb24gaW5zdGFsbEhlbHBlckFwcCAoYWRiLCBhcGtQYXRoLCBwYWNrYWdlSWQpIHtcbiAgLy8gU29tZXRpbWVzIGFkYiBwdXNoIG9yIGFkYiBpbnN0YWwgdGFrZSBtb3JlIHRpbWUgdGhhbiBleHBlY3RlZCB0byBpbnN0YWxsIGFuIGFwcFxuICAvLyBlLmcuIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vaW8uYXBwaXVtLnNldHRpbmdzL2lzc3Vlcy80MCNpc3N1ZWNvbW1lbnQtNDc2NTkzMTc0XG4gIGF3YWl0IHJldHJ5KDIsIGFzeW5jIGZ1bmN0aW9uIHJldHJ5SW5zdGFsbEhlbHBlckFwcCAoKSB7XG4gICAgYXdhaXQgYWRiLmluc3RhbGxPclVwZ3JhZGUoYXBrUGF0aCwgcGFja2FnZUlkLCB7Z3JhbnRQZXJtaXNzaW9uczogdHJ1ZX0pO1xuICB9KTtcbn07XG5cbi8qKlxuICogUHVzaGVzIGFuZCBpbnN0YWxscyBpby5hcHBpdW0uc2V0dGluZ3MgYXBwLlxuICogVGhyb3dzIGFuIGVycm9yIGlmIHRoZSBzZXR0aW5nIGFwcCBpcyByZXF1aXJlZFxuICpcbiAqIEBwYXJhbSB7QWRifSBhZGIgLSBUaGUgYWRiIG1vZHVsZSBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdGhyb3dFcnJvcltmYWxzZV0gLSBXaGV0aGVyIHRocm93IGVycm9yIG9yIG5vdFxuICogQHRocm93cyB7RXJyb3J9IElmIHRocm93RXJyb3IgaXMgdHJ1ZSBhbmQgc29tZXRoaW5nIGhhcHBlbnMgaW4gaW5zdGFsbGF0aW9uIHN0ZXBcbiAqL1xuaGVscGVycy5wdXNoU2V0dGluZ3NBcHAgPSBhc3luYyBmdW5jdGlvbiBwdXNoU2V0dGluZ3NBcHAgKGFkYiwgdGhyb3dFcnJvciA9IGZhbHNlKSB7XG4gIGxvZ2dlci5kZWJ1ZygnUHVzaGluZyBzZXR0aW5ncyBhcGsgdG8gZGV2aWNlLi4uJyk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBoZWxwZXJzLmluc3RhbGxIZWxwZXJBcHAoYWRiLCBzZXR0aW5nc0Fwa1BhdGgsIFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQsIHRocm93RXJyb3IpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAodGhyb3dFcnJvcikge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cblxuICAgIGxvZ2dlci53YXJuKGBJZ25vcmVkIGVycm9yIHdoaWxlIGluc3RhbGxpbmcgJyR7c2V0dGluZ3NBcGtQYXRofSc6IGAgK1xuICAgICAgICAgICAgICAgIGAnJHtlcnIubWVzc2FnZX0nLiBGZWF0dXJlcyB0aGF0IHJlbHkgb24gdGhpcyBoZWxwZXIgYCArXG4gICAgICAgICAgICAgICAgJ3JlcXVpcmUgdGhlIGFwayBzdWNoIGFzIHRvZ2dsZSBXaUZpIGFuZCBnZXR0aW5nIGxvY2F0aW9uICcgK1xuICAgICAgICAgICAgICAgICd3aWxsIHJhaXNlIGFuIGVycm9yIGlmIHlvdSB0cnkgdG8gdXNlIHRoZW0uJyk7XG4gIH1cblxuICAvLyBSZWluc3RhbGwgd291bGQgc3RvcCB0aGUgc2V0dGluZ3MgaGVscGVyIHByb2Nlc3MgYW55d2F5LCBzb1xuICAvLyB0aGVyZSBpcyBubyBuZWVkIHRvIGNvbnRpbnVlIGlmIHRoZSBhcHBsaWNhdGlvbiBpcyBzdGlsbCBydW5uaW5nXG4gIGlmIChhd2FpdCBhZGIucHJvY2Vzc0V4aXN0cyhTRVRUSU5HU19IRUxQRVJfUEtHX0lEKSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgJHtTRVRUSU5HU19IRUxQRVJfUEtHX0lEfSBpcyBhbHJlYWR5IHJ1bm5pbmcuIGAgK1xuICAgICAgYFRoZXJlIGlzIG5vIG5lZWQgdG8gcmVzZXQgaXRzIHBlcm1pc3Npb25zLmApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGFwaUxldmVsID0gYXdhaXQgYWRiLmdldEFwaUxldmVsKCk7XG4gIGlmIChhcGlMZXZlbCA+PSAyOSkge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vaW8uYXBwaXVtLnNldHRpbmdzI2ludGVybmFsLWF1ZGlvLS12aWRlby1yZWNvcmRpbmdcbiAgICB0cnkge1xuICAgICAgYXdhaXQgYWRiLnNoZWxsKFsnYXBwb3BzJywgJ3NldCcsIFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQsICdQUk9KRUNUX01FRElBJywgJ2FsbG93J10pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLmRlYnVnKGVycik7XG4gICAgfVxuICB9XG4gIGlmIChhcGlMZXZlbCA8PSAyMykgeyAvLyBBbmRyb2lkIDYtIGRldmljZXMgc2hvdWxkIGhhdmUgZ3JhbnRlZCBwZXJtaXNzaW9uc1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL3B1bGwvMTE2NDAjaXNzdWVjb21tZW50LTQzODI2MDQ3N1xuICAgIGNvbnN0IHBlcm1zID0gWydTRVRfQU5JTUFUSU9OX1NDQUxFJywgJ0NIQU5HRV9DT05GSUdVUkFUSU9OJywgJ0FDQ0VTU19GSU5FX0xPQ0FUSU9OJ107XG4gICAgbG9nZ2VyLmluZm8oYEdyYW50aW5nIHBlcm1pc3Npb25zICR7cGVybXN9IHRvICcke1NFVFRJTkdTX0hFTFBFUl9QS0dfSUR9J2ApO1xuICAgIGF3YWl0IGFkYi5ncmFudFBlcm1pc3Npb25zKFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQsIHBlcm1zLm1hcCgoeCkgPT4gYGFuZHJvaWQucGVybWlzc2lvbi4ke3h9YCkpO1xuICB9XG5cbiAgLy8gbGF1bmNoIGlvLmFwcGl1bS5zZXR0aW5ncyBhcHAgZHVlIHRvIHNldHRpbmdzIGZhaWxpbmcgdG8gYmUgc2V0XG4gIC8vIGlmIHRoZSBhcHAgaXMgbm90IGxhdW5jaGVkIHByaW9yIHRvIHN0YXJ0IHRoZSBzZXNzaW9uIG9uIGFuZHJvaWQgNytcbiAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2lzc3Vlcy84OTU3XG4gIHRyeSB7XG4gICAgYXdhaXQgYWRiLnJlcXVpcmVSdW5uaW5nU2V0dGluZ3NBcHAoKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGVycik7XG4gICAgaWYgKHRocm93RXJyb3IpIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogRXh0cmFjdHMgc3RyaW5nLnhtbCBhbmQgY29udmVydHMgaXQgdG8gc3RyaW5nLmpzb24gYW5kIHB1c2hlc1xuICogaXQgdG8gL2RhdGEvbG9jYWwvdG1wL3N0cmluZy5qc29uIG9uIGZvciB1c2Ugb2YgYm9vdHN0cmFwXG4gKiBJZiBhcHAgaXMgbm90IHByZXNlbnQgdG8gZXh0cmFjdCBzdHJpbmcueG1sIGl0IGRlbGV0ZXMgcmVtb3RlIHN0cmluZ3MuanNvblxuICogSWYgYXBwIGRvZXMgbm90IGhhdmUgc3RyaW5ncy54bWwgd2UgcHVzaCBhbiBlbXB0eSBqc29uIG9iamVjdCB0byByZW1vdGVcbiAqXG4gKiBAcGFyYW0gez9zdHJpbmd9IGxhbmd1YWdlIC0gTGFuZ3VhZ2UgYWJicmV2aWF0aW9uLCBmb3IgZXhhbXBsZSAnZnInLiBUaGUgZGVmYXVsdCBsYW5ndWFnZVxuICogaXMgdXNlZCBpZiB0aGlzIGFyZ3VtZW50IGlzIG5vdCBkZWZpbmVkLlxuICogQHBhcmFtIHtPYmplY3R9IGFkYiAtIFRoZSBhZGIgbW9kdWxlIGluc3RhbmNlLlxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBEcml2ZXIgb3B0aW9ucyBkaWN0aW9uYXJ5LlxuICogQHJldHVybnMge09iamVjdH0gVGhlIGRpY3Rpb25hcnksIHdoZXJlIHN0cmluZyByZXNvdXJjZSBpZGVudGlmaWVycyBhcmUga2V5c1xuICogYWxvbmcgd2l0aCB0aGVpciBjb3JyZXNwb25kaW5nIHZhbHVlcyBmb3IgdGhlIGdpdmVuIGxhbmd1YWdlIG9yIGFuIGVtcHR5IG9iamVjdFxuICogaWYgbm8gbWF0Y2hpbmcgcmVzb3VyY2VzIHdlcmUgZXh0cmFjdGVkLlxuICovXG5oZWxwZXJzLnB1c2hTdHJpbmdzID0gYXN5bmMgZnVuY3Rpb24gcHVzaFN0cmluZ3MgKGxhbmd1YWdlLCBhZGIsIG9wdHMpIHtcbiAgY29uc3QgcmVtb3RlRGlyID0gJy9kYXRhL2xvY2FsL3RtcCc7XG4gIGNvbnN0IHN0cmluZ3NKc29uID0gJ3N0cmluZ3MuanNvbic7XG4gIGNvbnN0IHJlbW90ZUZpbGUgPSBwYXRoLnBvc2l4LnJlc29sdmUocmVtb3RlRGlyLCBzdHJpbmdzSnNvbik7XG5cbiAgLy8gY2xlYW4gdXAgcmVtb3RlIHN0cmluZy5qc29uIGlmIHByZXNlbnRcbiAgYXdhaXQgYWRiLnJpbXJhZihyZW1vdGVGaWxlKTtcblxuICBsZXQgYXBwO1xuICB0cnkge1xuICAgIGFwcCA9IG9wdHMuYXBwIHx8IGF3YWl0IGFkYi5wdWxsQXBrKG9wdHMuYXBwUGFja2FnZSwgb3B0cy50bXBEaXIpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIuaW5mbyhgRmFpbGVkIHRvIHB1bGwgYW4gYXBrIGZyb20gJyR7b3B0cy5hcHBQYWNrYWdlfScgdG8gJyR7b3B0cy50bXBEaXJ9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cblxuICBpZiAoXy5pc0VtcHR5KG9wdHMuYXBwUGFja2FnZSkgfHwgIShhd2FpdCBmcy5leGlzdHMoYXBwKSkpIHtcbiAgICBsb2dnZXIuZGVidWcoYE5vIGFwcCBvciBwYWNrYWdlIHNwZWNpZmllZC4gUmV0dXJuaW5nIGVtcHR5IHN0cmluZ3NgKTtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjb25zdCBzdHJpbmdzVG1wRGlyID0gcGF0aC5yZXNvbHZlKG9wdHMudG1wRGlyLCBvcHRzLmFwcFBhY2thZ2UpO1xuICB0cnkge1xuICAgIGxvZ2dlci5kZWJ1ZygnRXh0cmFjdGluZyBzdHJpbmdzIGZyb20gYXBrJywgYXBwLCBsYW5ndWFnZSwgc3RyaW5nc1RtcERpcik7XG4gICAgY29uc3Qge2Fwa1N0cmluZ3MsIGxvY2FsUGF0aH0gPSBhd2FpdCBhZGIuZXh0cmFjdFN0cmluZ3NGcm9tQXBrKGFwcCwgbGFuZ3VhZ2UsIHN0cmluZ3NUbXBEaXIpO1xuICAgIGF3YWl0IGFkYi5wdXNoKGxvY2FsUGF0aCwgcmVtb3RlRGlyKTtcbiAgICByZXR1cm4gYXBrU3RyaW5ncztcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLndhcm4oYENvdWxkIG5vdCBnZXQgc3RyaW5ncywgY29udGludWluZyBhbnl3YXkuIE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIGF3YWl0IGFkYi5zaGVsbCgnZWNobycsIFtgJ3t9JyA+ICR7cmVtb3RlRmlsZX1gXSk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgZnMucmltcmFmKHN0cmluZ3NUbXBEaXIpO1xuICB9XG4gIHJldHVybiB7fTtcbn07XG5cbmhlbHBlcnMudW5sb2NrV2l0aEhlbHBlckFwcCA9IGFzeW5jIGZ1bmN0aW9uIHVubG9ja1dpdGhIZWxwZXJBcHAgKGFkYikge1xuICBsb2dnZXIuaW5mbygnVW5sb2NraW5nIHNjcmVlbicpO1xuXG4gIC8vIFVubG9jayBzdWNjZWVkIHdpdGggYSBjb3VwbGUgb2YgcmV0cmllcy5cbiAgbGV0IGZpcnN0UnVuID0gdHJ1ZTtcbiAgYXdhaXQgcmV0cnkoMywgYXN5bmMgZnVuY3Rpb24gbGF1bmNoSGVscGVyICgpIHtcbiAgICAvLyBUbyByZWR1Y2UgYSB0aW1lIHRvIGNhbGwgYWRiLmlzU2NyZWVuTG9ja2VkKCkgc2luY2UgYGFkYiBzaGVsbCBkdW1wc3lzIHdpbmRvd2AgaXMgZWFzeSB0byBoYW5nIGFkYiBjb21tYW5kc1xuICAgIGlmIChmaXJzdFJ1bikge1xuICAgICAgZmlyc3RSdW4gPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCEoYXdhaXQgYWRiLmlzU2NyZWVuTG9ja2VkKCkpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGBFcnJvciBpbiBpc1NjcmVlbkxvY2tlZDogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgIGxvZ2dlci53YXJuKCdcImFkYiBzaGVsbCBkdW1wc3lzIHdpbmRvd1wiIGNvbW1hbmQgaGFzIHRpbWVkIG91dC4nKTtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ1RoZSByZWFzb24gb2YgdGhpcyB0aW1lb3V0IGlzIHRoZSBkZWxheWVkIGFkYiByZXNwb25zZS4gUmVzZXR0aW5nIGFkYiBzZXJ2ZXIgY2FuIGltcHJvdmUgaXQuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbG9nZ2VyLmluZm8oYExhdW5jaGluZyAke1NFVFRJTkdTX0hFTFBFUl9VTkxPQ0tfQUNUSVZJVFl9YCk7XG4gICAgYXdhaXQgYWRiLnNoZWxsKFtcbiAgICAgICdhbScsICdzdGFydCcsXG4gICAgICAnLW4nLCBgJHtTRVRUSU5HU19IRUxQRVJfUEtHX0lEfS8ke1NFVFRJTkdTX0hFTFBFUl9VTkxPQ0tfQUNUSVZJVFl9YCxcbiAgICAgICctYycsICdhbmRyb2lkLmludGVudC5jYXRlZ29yeS5MQVVOQ0hFUicsXG4gICAgICAnLWEnLCAnYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4nLFxuICAgICAgJy1mJywgJzB4MTAyMDAwMDAnLFxuICAgIF0pO1xuICAgIGF3YWl0IEIuZGVsYXkoMTAwMCk7XG4gIH0pO1xufTtcblxuaGVscGVycy51bmxvY2sgPSBhc3luYyBmdW5jdGlvbiB1bmxvY2sgKGRyaXZlciwgYWRiLCBjYXBhYmlsaXRpZXMpIHtcbiAgaWYgKCEoYXdhaXQgYWRiLmlzU2NyZWVuTG9ja2VkKCkpKSB7XG4gICAgbG9nZ2VyLmluZm8oJ1NjcmVlbiBhbHJlYWR5IHVubG9ja2VkLCBkb2luZyBub3RoaW5nJyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxvZ2dlci5kZWJ1ZygnU2NyZWVuIGlzIGxvY2tlZCwgdHJ5aW5nIHRvIHVubG9jaycpO1xuXG4gIGlmICghY2FwYWJpbGl0aWVzLnVubG9ja1R5cGUgJiYgIWNhcGFiaWxpdGllcy51bmxvY2tLZXkpIHtcbiAgICBsb2dnZXIud2FybignVXNpbmcgYXBwIHVubG9jaywgdGhpcyBpcyBnb2luZyB0byBiZSBkZXByZWNhdGVkIScpO1xuICAgIGF3YWl0IGhlbHBlcnMudW5sb2NrV2l0aEhlbHBlckFwcChhZGIpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICB1bmxvY2tUeXBlLFxuICAgIHVubG9ja0tleSxcbiAgICB1bmxvY2tTdHJhdGVneSxcbiAgICB1bmxvY2tTdWNjZXNzVGltZW91dCxcbiAgfSA9IHVubG9ja2VyLnZhbGlkYXRlVW5sb2NrQ2FwYWJpbGl0aWVzKGNhcGFiaWxpdGllcyk7XG4gIGlmICh1bmxvY2tLZXkgJiYgdW5sb2NrVHlwZSAhPT0gRklOR0VSUFJJTlRfVU5MT0NLXG4gICAgICAmJiAoXy5pc05pbCh1bmxvY2tTdHJhdGVneSkgfHwgXy50b0xvd2VyKHVubG9ja1N0cmF0ZWd5KSA9PT0gJ2xvY2tzZXR0aW5ncycpXG4gICAgICAmJiBhd2FpdCBhZGIuaXNMb2NrTWFuYWdlbWVudFN1cHBvcnRlZCgpKSB7XG4gICAgYXdhaXQgdW5sb2NrZXIuZmFzdFVubG9jayhhZGIsIHtcbiAgICAgIGNyZWRlbnRpYWw6IHVubG9ja0tleSxcbiAgICAgIGNyZWRlbnRpYWxUeXBlOiB0b0NyZWRlbnRpYWxUeXBlKHVubG9ja1R5cGUpLFxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHVubG9ja01ldGhvZCA9IHtcbiAgICAgIFtQSU5fVU5MT0NLXTogdW5sb2NrZXIucGluVW5sb2NrLFxuICAgICAgW1BJTl9VTkxPQ0tfS0VZX0VWRU5UXTogdW5sb2NrZXIucGluVW5sb2NrV2l0aEtleUV2ZW50LFxuICAgICAgW1BBU1NXT1JEX1VOTE9DS106IHVubG9ja2VyLnBhc3N3b3JkVW5sb2NrLFxuICAgICAgW1BBVFRFUk5fVU5MT0NLXTogdW5sb2NrZXIucGF0dGVyblVubG9jayxcbiAgICAgIFtGSU5HRVJQUklOVF9VTkxPQ0tdOiB1bmxvY2tlci5maW5nZXJwcmludFVubG9jayxcbiAgICB9W3VubG9ja1R5cGVdO1xuICAgIGF3YWl0IHVubG9ja01ldGhvZChhZGIsIGRyaXZlciwgY2FwYWJpbGl0aWVzKTtcbiAgfVxuICBhd2FpdCBoZWxwZXJzLnZlcmlmeVVubG9jayhhZGIsIHVubG9ja1N1Y2Nlc3NUaW1lb3V0KTtcbn07XG5cbmhlbHBlcnMudmVyaWZ5VW5sb2NrID0gYXN5bmMgZnVuY3Rpb24gdmVyaWZ5VW5sb2NrIChhZGIsIHRpbWVvdXRNcyA9IG51bGwpIHtcbiAgdHJ5IHtcbiAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+ICEoYXdhaXQgYWRiLmlzU2NyZWVuTG9ja2VkKCkpLCB7XG4gICAgICB3YWl0TXM6IHRpbWVvdXRNcyA/PyAyMDAwLFxuICAgICAgaW50ZXJ2YWxNczogNTAwLFxuICAgIH0pO1xuICB9IGNhdGNoIChpZ24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBkZXZpY2UgaGFzIGZhaWxlZCB0byBiZSB1bmxvY2tlZCcpO1xuICB9XG4gIGxvZ2dlci5pbmZvKCdUaGUgZGV2aWNlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB1bmxvY2tlZCcpO1xufTtcblxuaGVscGVycy5pbml0RGV2aWNlID0gYXN5bmMgZnVuY3Rpb24gaW5pdERldmljZSAoYWRiLCBvcHRzKSB7XG4gIGNvbnN0IHtcbiAgICBza2lwRGV2aWNlSW5pdGlhbGl6YXRpb24sXG4gICAgbG9jYWxlLFxuICAgIGxhbmd1YWdlLFxuICAgIGxvY2FsZVNjcmlwdCxcbiAgICB1bmljb2RlS2V5Ym9hcmQsXG4gICAgZGlzYWJsZVdpbmRvd0FuaW1hdGlvbixcbiAgICBza2lwVW5sb2NrLFxuICAgIG1vY2tMb2NhdGlvbkFwcCxcbiAgICBza2lwTG9nY2F0Q2FwdHVyZSxcbiAgICBsb2djYXRGb3JtYXQsXG4gICAgbG9nY2F0RmlsdGVyU3BlY3MsXG4gIH0gPSBvcHRzO1xuXG4gIGlmIChza2lwRGV2aWNlSW5pdGlhbGl6YXRpb24pIHtcbiAgICBsb2dnZXIuaW5mbyhgJ3NraXBEZXZpY2VJbml0aWFsaXphdGlvbicgaXMgc2V0LiBTa2lwcGluZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24uYCk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgYWRiLndhaXRGb3JEZXZpY2UoKTtcbiAgICAvLyBwdXNoU2V0dGluZ3NBcHAgcmVxdWlyZWQgYmVmb3JlIGNhbGxpbmcgZW5zdXJlRGV2aWNlTG9jYWxlIGZvciBBUEkgTGV2ZWwgMjQrXG5cbiAgICAvLyBTb21lIGZlYXR1cmUgc3VjaCBhcyBsb2NhdGlvbi93aWZpIGFyZSBub3QgbmVjZXNzYXJ5IGZvciBhbGwgdXNlcnMsXG4gICAgLy8gYnV0IHRoZXkgcmVxdWlyZSB0aGUgc2V0dGluZ3MgYXBwLiBTbywgdHJ5IHRvIGNvbmZpZ3VyZSBpdCB3aGlsZSBBcHBpdW1cbiAgICAvLyBkb2VzIG5vdCB0aHJvdyBlcnJvciBldmVuIGlmIHRoZXkgZmFpbC5cbiAgICBjb25zdCBzaG91bGRUaHJvd0Vycm9yID0gbGFuZ3VhZ2VcbiAgICAgIHx8IGxvY2FsZVxuICAgICAgfHwgbG9jYWxlU2NyaXB0XG4gICAgICB8fCB1bmljb2RlS2V5Ym9hcmRcbiAgICAgIHx8IGRpc2FibGVXaW5kb3dBbmltYXRpb25cbiAgICAgIHx8ICFza2lwVW5sb2NrO1xuICAgIGF3YWl0IGhlbHBlcnMucHVzaFNldHRpbmdzQXBwKGFkYiwgc2hvdWxkVGhyb3dFcnJvcik7XG4gIH1cblxuICBpZiAoIWhlbHBlcnMuaXNFbXVsYXRvcihhZGIsIG9wdHMpICYmIChtb2NrTG9jYXRpb25BcHAgfHwgXy5pc1VuZGVmaW5lZChtb2NrTG9jYXRpb25BcHApKSkge1xuICAgIGF3YWl0IGhlbHBlcnMuc2V0TW9ja0xvY2F0aW9uQXBwKGFkYiwgbW9ja0xvY2F0aW9uQXBwIHx8IFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQpO1xuICB9XG5cbiAgaWYgKGxhbmd1YWdlIHx8IGxvY2FsZSkge1xuICAgIGF3YWl0IGhlbHBlcnMuZW5zdXJlRGV2aWNlTG9jYWxlKGFkYiwgbGFuZ3VhZ2UsIGxvY2FsZSwgbG9jYWxlU2NyaXB0KTtcbiAgfVxuXG4gIGlmIChza2lwTG9nY2F0Q2FwdHVyZSkge1xuICAgIGxvZ2dlci5pbmZvKGAnc2tpcExvZ2NhdENhcHR1cmUnIGlzIHNldC4gU2tpcHBpbmcgc3RhcnRpbmcgbG9nY2F0IGNhcHR1cmUuYCk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgYWRiLnN0YXJ0TG9nY2F0KHtcbiAgICAgIGZvcm1hdDogbG9nY2F0Rm9ybWF0LFxuICAgICAgZmlsdGVyU3BlY3M6IGxvZ2NhdEZpbHRlclNwZWNzLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHVuaWNvZGVLZXlib2FyZCkge1xuICAgIHJldHVybiBhd2FpdCBoZWxwZXJzLmluaXRVbmljb2RlS2V5Ym9hcmQoYWRiKTtcbiAgfVxufTtcblxuaGVscGVycy5yZW1vdmVOdWxsUHJvcGVydGllcyA9IGZ1bmN0aW9uIHJlbW92ZU51bGxQcm9wZXJ0aWVzIChvYmopIHtcbiAgZm9yIChsZXQga2V5IG9mIF8ua2V5cyhvYmopKSB7XG4gICAgaWYgKF8uaXNOdWxsKG9ialtrZXldKSB8fCBfLmlzVW5kZWZpbmVkKG9ialtrZXldKSkge1xuICAgICAgZGVsZXRlIG9ialtrZXldO1xuICAgIH1cbiAgfVxufTtcblxuaGVscGVycy50cnVuY2F0ZURlY2ltYWxzID0gZnVuY3Rpb24gdHJ1bmNhdGVEZWNpbWFscyAobnVtYmVyLCBkaWdpdHMpIHtcbiAgbGV0IG11bHRpcGxpZXIgPSBNYXRoLnBvdygxMCwgZGlnaXRzKSxcbiAgICAgIGFkanVzdGVkTnVtID0gbnVtYmVyICogbXVsdGlwbGllcixcbiAgICAgIHRydW5jYXRlZE51bSA9IE1hdGhbYWRqdXN0ZWROdW0gPCAwID8gJ2NlaWwnIDogJ2Zsb29yJ10oYWRqdXN0ZWROdW0pO1xuXG4gIHJldHVybiB0cnVuY2F0ZWROdW0gLyBtdWx0aXBsaWVyO1xufTtcblxuaGVscGVycy5pc0Nocm9tZUJyb3dzZXIgPSBmdW5jdGlvbiBpc0Nocm9tZUJyb3dzZXIgKGJyb3dzZXIpIHtcbiAgcmV0dXJuIF8uaW5jbHVkZXMoT2JqZWN0LmtleXMoQ0hST01FX0JST1dTRVJfUEFDS0FHRV9BQ1RJVklUWSksIChicm93c2VyIHx8ICcnKS50b0xvd2VyQ2FzZSgpKTtcbn07XG5cbmhlbHBlcnMuZ2V0Q2hyb21lUGtnID0gZnVuY3Rpb24gZ2V0Q2hyb21lUGtnIChicm93c2VyKSB7XG4gIHJldHVybiBDSFJPTUVfQlJPV1NFUl9QQUNLQUdFX0FDVElWSVRZW2Jyb3dzZXIudG9Mb3dlckNhc2UoKV0gfHwgQ0hST01FX0JST1dTRVJfUEFDS0FHRV9BQ1RJVklUWS5kZWZhdWx0O1xufTtcblxuaGVscGVycy5yZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnMgPSBhc3luYyBmdW5jdGlvbiByZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnMgKHNlcnZlciwgc2Vzc2lvbklkKSB7XG4gIGlmICghc2VydmVyIHx8ICFfLmlzRnVuY3Rpb24oc2VydmVyLmdldFdlYlNvY2tldEhhbmRsZXJzKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGFjdGl2ZUhhbmRsZXJzID0gYXdhaXQgc2VydmVyLmdldFdlYlNvY2tldEhhbmRsZXJzKHNlc3Npb25JZCk7XG4gIGZvciAoY29uc3QgcGF0aG5hbWUgb2YgXy5rZXlzKGFjdGl2ZUhhbmRsZXJzKSkge1xuICAgIGF3YWl0IHNlcnZlci5yZW1vdmVXZWJTb2NrZXRIYW5kbGVyKHBhdGhuYW1lKTtcbiAgfVxufTtcblxuLyoqXG4gKiBUYWtlcyBhIGRlc2lyZWQgY2FwYWJpbGl0eSBhbmQgdHJpZXMgdG8gSlNPTi5wYXJzZSBpdCBhcyBhbiBhcnJheSxcbiAqIGFuZCBlaXRoZXIgcmV0dXJucyB0aGUgcGFyc2VkIGFycmF5IG9yIGEgc2luZ2xldG9uIGFycmF5LlxuICpcbiAqIEBwYXJhbSB7YW55fSBjYXAgQSBkZXNpcmVkIGNhcGFiaWxpdHlcbiAqL1xuaGVscGVycy5wYXJzZUFycmF5ID0gZnVuY3Rpb24gcGFyc2VBcnJheSAoY2FwKSB7XG4gIGxldCBwYXJzZWRDYXBzO1xuICB0cnkge1xuICAgIHBhcnNlZENhcHMgPSBKU09OLnBhcnNlKGNhcCk7XG4gIH0gY2F0Y2ggKGlnbikgeyB9XG5cbiAgaWYgKF8uaXNBcnJheShwYXJzZWRDYXBzKSkge1xuICAgIHJldHVybiBwYXJzZWRDYXBzO1xuICB9IGVsc2UgaWYgKF8uaXNTdHJpbmcoY2FwKSkge1xuICAgIHJldHVybiBbY2FwXTtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihgbXVzdCBwcm92aWRlIGEgc3RyaW5nIG9yIEpTT04gQXJyYXk7IHJlY2VpdmVkICR7Y2FwfWApO1xufTtcblxuLyoqXG4gKiBWYWxpZGF0ZSBkZXNpcmVkIGNhcGFiaWxpdGllcy4gUmV0dXJucyB0cnVlIGlmIGNhcGFiaWxpdHkgaXMgdmFsaWRcbiAqXG4gKiBAcGFyYW0geyp9IGNhcCBBIGRlc2lyZWQgY2FwYWJpbGl0eVxuICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZSBjYXBhYmlsaXR5IGlzIHZhbGlkXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGNhcHMgaGFzIGludmFsaWQgY2FwYWJpbGl0eVxuICovXG5oZWxwZXJzLnZhbGlkYXRlRGVzaXJlZENhcHMgPSBmdW5jdGlvbiB2YWxpZGF0ZURlc2lyZWRDYXBzIChjYXBzKSB7XG4gIGlmIChjYXBzLmJyb3dzZXJOYW1lKSB7XG4gICAgaWYgKGNhcHMuYXBwKSB7XG4gICAgICAvLyB3YXJuIGlmIHRoZSBjYXBhYmlsaXRpZXMgaGF2ZSBib3RoIGBhcHBgIGFuZCBgYnJvd3NlciwgYWx0aG91Z2ggdGhpcyBpcyBjb21tb24gd2l0aCBzZWxlbml1bSBncmlkXG4gICAgICBsb2dnZXIud2FybihgVGhlIGRlc2lyZWQgY2FwYWJpbGl0aWVzIHNob3VsZCBnZW5lcmFsbHkgbm90IGluY2x1ZGUgYm90aCBhbiAnYXBwJyBhbmQgYSAnYnJvd3Nlck5hbWUnYCk7XG4gICAgfVxuICAgIGlmIChjYXBzLmFwcFBhY2thZ2UpIHtcbiAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KGBUaGUgZGVzaXJlZCBzaG91bGQgbm90IGluY2x1ZGUgYm90aCBvZiBhbiAnYXBwUGFja2FnZScgYW5kIGEgJ2Jyb3dzZXJOYW1lJ2ApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjYXBzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5wYXJzZUFycmF5KGNhcHMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBwYXJzZSBcInVuaW5zdGFsbE90aGVyUGFja2FnZXNcIiBjYXBhYmlsaXR5OiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogQWRqdXN0IHRoZSBjYXBhYmlsaXRpZXMgZm9yIGEgYnJvd3NlciBzZXNzaW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNhcHMgLSBDdXJyZW50IGNhcGFiaWxpdGllcyBvYmplY3RcbiAqICEhISBUaGUgb2JqZWN0IGlzIG11dGF0ZWQgYnkgdGhpcyBtZXRob2QgY2FsbCAhISFcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBzYW1lIHBvc3NpYmx5IG11dGF0ZWQgYG9wdHNgIGluc3RhbmNlLlxuICogTm8gbXV0YXRpb24gaXMgaGFwcGVuaW5nIGlzIHRoZSBjdXJyZW50IHNlc3Npb24gaWZcbiAqIGFwcFBhY2thZ2UvYXBwQWN0aXZpdHkgY2FwcyBoYXZlIGFscmVhZHkgYmVlbiBwcm92aWRlZC5cbiAqL1xuaGVscGVycy5hZGp1c3RCcm93c2VyU2Vzc2lvbkNhcHMgPSBmdW5jdGlvbiBhZGp1c3RCcm93c2VyU2Vzc2lvbkNhcHMgKGNhcHMgPSB7fSkge1xuICBjb25zdCB7IGJyb3dzZXJOYW1lIH0gPSBjYXBzO1xuICBsb2dnZXIuaW5mbyhgVGhlIGN1cnJlbnQgc2Vzc2lvbiBpcyBjb25zaWRlcmVkIGJyb3dzZXItYmFzZWRgKTtcbiAgbG9nZ2VyLmluZm8oYFN1cHBvcnRlZCBicm93c2VyIG5hbWVzOiAke0pTT04uc3RyaW5naWZ5KF8ua2V5cyhDSFJPTUVfQlJPV1NFUl9QQUNLQUdFX0FDVElWSVRZKSl9YCk7XG4gIGlmIChjYXBzLmFwcFBhY2thZ2UgfHwgY2Fwcy5hcHBBY3Rpdml0eSkge1xuICAgIGxvZ2dlci5pbmZvKGBOb3Qgb3ZlcnJpZGluZyBhcHBQYWNrYWdlL2FwcEFjdGl2aXR5IGNhcGFiaWxpdHkgdmFsdWVzIGZvciAnJHticm93c2VyTmFtZX0nIGAgK1xuICAgICAgJ2JlY2F1c2Ugc29tZSBvZiB0aGVtIGhhdmUgYmVlbiBhbHJlYWR5IHByb3ZpZGVkJyk7XG4gICAgcmV0dXJuIGNhcHM7XG4gIH1cblxuICBjb25zdCB7cGtnLCBhY3Rpdml0eX0gPSB0aGlzLmdldENocm9tZVBrZyhicm93c2VyTmFtZSk7XG4gIGNhcHMuYXBwUGFja2FnZSA9IHBrZztcbiAgY2Fwcy5hcHBBY3Rpdml0eSA9IGFjdGl2aXR5O1xuICBsb2dnZXIuaW5mbyhgYXBwUGFja2FnZS9hcHBBY3Rpdml0eSBjYXBhYmlsaXRpZXMgaGF2ZSBiZWVuIGF1dG9tYXRpY2FsbHkgc2V0IHRvICR7cGtnfS8ke2FjdGl2aXR5fSBgICtcbiAgICBgZm9yICcke2Jyb3dzZXJOYW1lfSdgKTtcbiAgbG9nZ2VyLmluZm8oYENvbnNpZGVyIGNoYW5naW5nIHRoZSBicm93c2VyTmFtZSB0byB0aGUgb25lIGZyb20gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIGJyb3dzZXIgbmFtZXMgYCArXG4gICAgYG9yIHByb3ZpZGUgY3VzdG9tIGFwcFBhY2thZ2UvYXBwQWN0aXZpdHkgY2FwYWJpbGl0eSB2YWx1ZXMgaWYgdGhlIGF1dG9tYXRpY2FsbHkgYXNzaWduZWQgb25lcyBkbyBgICtcbiAgICBgbm90IG1ha2Ugc2Vuc2VgKTtcbiAgcmV0dXJuIGNhcHM7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBjdXJyZW50IGRldmljZSB1bmRlciB0ZXN0IGlzIGFuIGVtdWxhdG9yXG4gKlxuICogQHBhcmFtIHtBREJ9IGFkYiAtIGFwcGl1bS1hZGIgaW5zdGFuY2VcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gZHJpdmVyIG9wdGlvbnMgbWFwcGluZ1xuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgZGV2aWNlIGlzIGFuIEFuZHJvaWQgZW11bGF0b3JcbiAqL1xuaGVscGVycy5pc0VtdWxhdG9yID0gZnVuY3Rpb24gaXNFbXVsYXRvciAoYWRiLCBvcHRzKSB7XG4gIGNvbnN0IHBvc3NpYmxlTmFtZXMgPSBbb3B0cy51ZGlkLCBhZGI/LmN1ckRldmljZUlkXTtcbiAgcmV0dXJuICEhb3B0cy5hdmQgfHwgcG9zc2libGVOYW1lcy5zb21lKCh4KSA9PiBFTVVMQVRPUl9QQVRURVJOLnRlc3QoeCkpO1xufTtcblxuaGVscGVycy5ib290c3RyYXAgPSBCb290c3RyYXA7XG5oZWxwZXJzLnVubG9ja2VyID0gdW5sb2NrZXI7XG5cbmV4cG9ydCB7IGhlbHBlcnMsIFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQsIEFQUF9TVEFURSwgcHJlcGFyZUF2ZEFyZ3MsIGVuc3VyZU5ldHdvcmtTcGVlZCB9O1xuZXhwb3J0IGRlZmF1bHQgaGVscGVycztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFJQTs7QUFDQTs7Ozs7O0FBRUEsTUFBTUEsdUJBQXVCLEdBQUcsS0FBaEM7QUFFQSxNQUFNQywrQkFBK0IsR0FBRztFQUN0Q0MsTUFBTSxFQUFFO0lBQ05DLEdBQUcsRUFBRSxvQkFEQztJQUVOQyxRQUFRLEVBQUU7RUFGSixDQUQ4QjtFQUt0Q0MsUUFBUSxFQUFFO0lBQ1JGLEdBQUcsRUFBRSwyQkFERztJQUVSQyxRQUFRLEVBQUU7RUFGRixDQUw0QjtFQVN0Q0UsVUFBVSxFQUFFO0lBQ1ZILEdBQUcsRUFBRSxpQkFESztJQUVWQyxRQUFRLEVBQUU7RUFGQSxDQVQwQjtFQWF0Q0csT0FBTyxFQUFFO0lBQ1BKLEdBQUcsRUFBRSxxQkFERTtJQUVQQyxRQUFRLEVBQUU7RUFGSCxDQWI2QjtFQWlCdEMsb0JBQW9CO0lBQ2xCRCxHQUFHLEVBQUUscUJBRGE7SUFFbEJDLFFBQVEsRUFBRTtFQUZRLENBakJrQjtFQXFCdEMsb0JBQW9CO0lBQ2xCRCxHQUFHLEVBQUUsNEJBRGE7SUFFbEJDLFFBQVEsRUFBRTtFQUZRLENBckJrQjtFQXlCdENJLE9BQU8sRUFBRTtJQUNQTCxHQUFHLEVBQUUsb0JBREU7SUFFUEMsUUFBUSxFQUFFO0VBRkg7QUF6QjZCLENBQXhDO0FBOEJBLE1BQU1LLHNCQUFzQixHQUFHLG9CQUEvQjs7QUFDQSxNQUFNQywrQkFBK0IsR0FBRyxTQUF4QztBQUNBLE1BQU1DLGdCQUFnQixHQUFHLGVBQXpCO0FBR0EsTUFBTUMsU0FBUyxHQUFHQyxNQUFNLENBQUNDLE1BQVAsQ0FBYztFQUM5QkMsYUFBYSxFQUFFLENBRGU7RUFFOUJDLFdBQVcsRUFBRSxDQUZpQjtFQUc5QkMscUJBQXFCLEVBQUUsQ0FITztFQUk5QkMscUJBQXFCLEVBQUU7QUFKTyxDQUFkLENBQWxCOzs7QUFRQSxTQUFTQyxrQkFBVCxDQUE2QkMsR0FBN0IsRUFBa0NDLFlBQWxDLEVBQWdEO0VBQzlDLElBQUlDLGVBQUEsQ0FBRUMsTUFBRixDQUFTSCxHQUFHLENBQUNJLGFBQWIsRUFBNEJDLFFBQTVCLENBQXFDSixZQUFyQyxDQUFKLEVBQXdEO0lBQ3RELE9BQU9BLFlBQVA7RUFDRDs7RUFDREssZUFBQSxDQUFPQyxJQUFQLENBQWEsOEJBQTZCTixZQUFhLHFCQUFvQkQsR0FBRyxDQUFDSSxhQUFKLENBQWtCSSxJQUFLLElBQXRGLEdBQ1QscUJBQW9CTixlQUFBLENBQUVDLE1BQUYsQ0FBU0gsR0FBRyxDQUFDSSxhQUFiLENBQTRCLEVBRG5EOztFQUVBLE9BQU9KLEdBQUcsQ0FBQ0ksYUFBSixDQUFrQkksSUFBekI7QUFDRDs7QUFFRCxTQUFTQyxjQUFULENBQXlCVCxHQUF6QixFQUE4QlUsSUFBOUIsRUFBb0M7RUFDbEMsTUFBTTtJQUNKVCxZQURJO0lBRUpVLFVBRkk7SUFHSkM7RUFISSxJQUlGRixJQUpKO0VBS0EsTUFBTUcsTUFBTSxHQUFHLEVBQWY7O0VBQ0EsSUFBSUQsT0FBSixFQUFhO0lBQ1gsSUFBSVYsZUFBQSxDQUFFWSxPQUFGLENBQVVGLE9BQVYsQ0FBSixFQUF3QjtNQUN0QkMsTUFBTSxDQUFDRSxJQUFQLENBQVksR0FBR0gsT0FBZjtJQUNELENBRkQsTUFFTztNQUNMQyxNQUFNLENBQUNFLElBQVAsQ0FBWSxHQUFJQyxhQUFBLENBQUtDLFVBQUwsQ0FBaUIsR0FBRUwsT0FBUSxFQUEzQixDQUFoQjtJQUNEO0VBQ0Y7O0VBQ0QsSUFBSVgsWUFBSixFQUFrQjtJQUNoQlksTUFBTSxDQUFDRSxJQUFQLENBQVksV0FBWixFQUF5QmhCLGtCQUFrQixDQUFDQyxHQUFELEVBQU1DLFlBQU4sQ0FBM0M7RUFDRDs7RUFDRCxJQUFJVSxVQUFKLEVBQWdCO0lBQ2RFLE1BQU0sQ0FBQ0UsSUFBUCxDQUFZLFlBQVo7RUFDRDs7RUFDRCxPQUFPRixNQUFQO0FBQ0Q7O0FBRUQsU0FBU0ssZ0JBQVQsQ0FBMkJDLFVBQTNCLEVBQXVDO0VBQ3JDLE1BQU1OLE1BQU0sR0FBRztJQUNiLENBQUNPLHlCQUFELEdBQWMsS0FERDtJQUViLENBQUNDLG1DQUFELEdBQXdCLEtBRlg7SUFHYixDQUFDQyw4QkFBRCxHQUFtQixVQUhOO0lBSWIsQ0FBQ0MsNkJBQUQsR0FBa0I7RUFKTCxFQUtiSixVQUxhLENBQWY7O0VBTUEsSUFBSU4sTUFBSixFQUFZO0lBQ1YsT0FBT0EsTUFBUDtFQUNEOztFQUNELE1BQU0sSUFBSVcsS0FBSixDQUFXLGdCQUFlTCxVQUFXLGdCQUFyQyxDQUFOO0FBQ0Q7O0FBR0QsTUFBTU0sT0FBTyxHQUFHLEVBQWhCOzs7QUFFQUEsT0FBTyxDQUFDQyxhQUFSLEdBQXdCLGVBQWVBLGFBQWYsQ0FBOEJoQixJQUFJLEdBQUcsRUFBckMsRUFBeUM7RUFHL0QsTUFBTTtJQUNKaUIsT0FESTtJQUVKQyxrQkFGSTtJQUdKQyxhQUhJO0lBSUpDLHNCQUpJO0lBS0pDLGNBTEk7SUFNSkMsV0FOSTtJQU9KQyxZQVBJO0lBUUpDLGdCQVJJO0lBU0pDLFFBVEk7SUFVSkMsV0FWSTtJQVdKQyxvQkFYSTtJQVlKQyxpQkFaSTtJQWFKQyxtQkFiSTtJQWNKQztFQWRJLElBZUY5QixJQWZKO0VBZ0JBLE9BQU8sTUFBTStCLGtCQUFBLENBQUlDLFNBQUosQ0FBYztJQUN6QmYsT0FEeUI7SUFFekJDLGtCQUZ5QjtJQUd6QkMsYUFIeUI7SUFJekJDLHNCQUp5QjtJQUt6QkMsY0FMeUI7SUFNekJDLFdBTnlCO0lBT3pCQyxZQVB5QjtJQVF6QkMsZ0JBUnlCO0lBU3pCQyxRQVR5QjtJQVV6QkMsV0FWeUI7SUFXekJDLG9CQVh5QjtJQVl6QkMsaUJBWnlCO0lBYXpCQyxtQkFieUI7SUFjekJDO0VBZHlCLENBQWQsQ0FBYjtBQWdCRCxDQW5DRDs7QUFxQ0FmLE9BQU8sQ0FBQ2tCLGVBQVIsR0FBMEIsZUFBZUEsZUFBZixDQUFnQzNDLEdBQWhDLEVBQXFDVSxJQUFyQyxFQUEyQztFQUNuRSxNQUFNO0lBQ0prQyxHQURJO0lBRUpDLE1BQU0sRUFBRUMsR0FGSjtJQUdKQyxRQUhJO0lBSUpDLE1BQU0sRUFBRUMsT0FKSjtJQUtKQyxnQkFBZ0IsRUFBRUMsYUFMZDtJQU1KQyxlQUFlLEVBQUVDO0VBTmIsSUFPRjNDLElBUEo7O0VBUUEsSUFBSSxDQUFDa0MsR0FBTCxFQUFVO0lBQ1IsTUFBTSxJQUFJcEIsS0FBSixDQUFVLG9DQUFWLENBQU47RUFDRDs7RUFFRCxNQUFNOEIsT0FBTyxHQUFHVixHQUFHLENBQUNXLE9BQUosQ0FBWSxHQUFaLEVBQWlCLEVBQWpCLENBQWhCO0VBQ0EsTUFBTUMsVUFBVSxHQUFHLE1BQU14RCxHQUFHLENBQUN5RCxhQUFKLENBQWtCSCxPQUFsQixDQUF6QjtFQUNBLE1BQU1JLElBQUksR0FBR2pELGNBQWMsQ0FBQ1QsR0FBRCxFQUFNVSxJQUFOLENBQTNCOztFQUNBLElBQUk4QyxVQUFKLEVBQWdCO0lBQ2QsSUFBSUUsSUFBSSxDQUFDckQsUUFBTCxDQUFjLFlBQWQsQ0FBSixFQUFpQztNQUMvQkMsZUFBQSxDQUFPcUQsS0FBUCxDQUFjLFlBQVdMLE9BQVEsMENBQWpDOztNQUNBLE1BQU10RCxHQUFHLENBQUM0RCxZQUFKLENBQWlCTixPQUFqQixDQUFOO0lBQ0QsQ0FIRCxNQUdPO01BQ0xoRCxlQUFBLENBQU9xRCxLQUFQLENBQWEsa0RBQWI7O01BQ0E7SUFDRDtFQUNGOztFQUNELE1BQU0zRCxHQUFHLENBQUM2RCxTQUFKLENBQWNqQixHQUFkLEVBQW1CO0lBQ3ZCYyxJQUR1QjtJQUV2QlosR0FGdUI7SUFHdkJDLFFBSHVCO0lBSXZCRSxPQUp1QjtJQUt2QkUsYUFMdUI7SUFNdkJFO0VBTnVCLENBQW5CLENBQU47QUFRRCxDQWpDRDs7QUErQ0E1QixPQUFPLENBQUNxQyxrQkFBUixHQUE2QixlQUFlQSxrQkFBZixDQUFtQzlELEdBQW5DLEVBQXdDK0MsUUFBeEMsRUFBa0RFLE9BQWxELEVBQTJEYyxNQUFNLEdBQUcsSUFBcEUsRUFBMEU7RUFDckcsSUFBSSxDQUFDN0QsZUFBQSxDQUFFOEQsUUFBRixDQUFXakIsUUFBWCxDQUFELElBQXlCLENBQUM3QyxlQUFBLENBQUU4RCxRQUFGLENBQVdmLE9BQVgsQ0FBOUIsRUFBbUQ7SUFDakQzQyxlQUFBLENBQU9DLElBQVAsQ0FBYSx3REFBYjs7SUFDQUQsZUFBQSxDQUFPQyxJQUFQLENBQWEsa0JBQWlCd0MsUUFBUyxtQkFBa0JFLE9BQVEsR0FBakU7O0lBQ0E7RUFDRDs7RUFFRCxNQUFNakQsR0FBRyxDQUFDaUUsd0JBQUosQ0FBNkJsQixRQUE3QixFQUF1Q0UsT0FBdkMsRUFBZ0RjLE1BQWhELENBQU47O0VBRUEsSUFBSSxFQUFDLE1BQU0vRCxHQUFHLENBQUNrRSxtQkFBSixDQUF3Qm5CLFFBQXhCLEVBQWtDRSxPQUFsQyxFQUEyQ2MsTUFBM0MsQ0FBUCxDQUFKLEVBQStEO0lBQzdELE1BQU1JLE9BQU8sR0FBR0osTUFBTSxHQUFJLGFBQVloQixRQUFTLGNBQWFFLE9BQVEsZ0JBQWVjLE1BQU8sRUFBcEUsR0FBeUUsYUFBWWhCLFFBQVMsaUJBQWdCRSxPQUFRLEVBQTVJO0lBQ0EsTUFBTSxJQUFJekIsS0FBSixDQUFXLGlCQUFnQjJDLE9BQVEsRUFBbkMsQ0FBTjtFQUNEO0FBQ0YsQ0FiRDs7QUFlQTFDLE9BQU8sQ0FBQzJDLHFCQUFSLEdBQWdDLGVBQWVBLHFCQUFmLENBQXNDMUQsSUFBSSxHQUFHLEVBQTdDLEVBQWlEO0VBSy9FLE1BQU1WLEdBQUcsR0FBRyxNQUFNeUIsT0FBTyxDQUFDQyxhQUFSLENBQXNCaEIsSUFBdEIsQ0FBbEI7RUFDQSxJQUFJMkQsSUFBSSxHQUFHM0QsSUFBSSxDQUFDMkQsSUFBaEI7RUFDQSxJQUFJQyxNQUFNLEdBQUcsSUFBYjs7RUFHQSxJQUFJNUQsSUFBSSxDQUFDa0MsR0FBVCxFQUFjO0lBQ1osTUFBTW5CLE9BQU8sQ0FBQ2tCLGVBQVIsQ0FBd0IzQyxHQUF4QixFQUE2QlUsSUFBN0IsQ0FBTjtJQUNBMkQsSUFBSSxHQUFHckUsR0FBRyxDQUFDdUUsV0FBWDtJQUNBRCxNQUFNLEdBQUd0RSxHQUFHLENBQUN3RSxZQUFiO0VBQ0QsQ0FKRCxNQUlPO0lBRUxsRSxlQUFBLENBQU9tRSxJQUFQLENBQVksd0JBQVo7O0lBQ0EsSUFBSUMsT0FBTyxHQUFHLE1BQU0xRSxHQUFHLENBQUMyRSxtQkFBSixFQUFwQjs7SUFHQSxJQUFJTixJQUFKLEVBQVU7TUFDUixJQUFJLENBQUNuRSxlQUFBLENBQUVHLFFBQUYsQ0FBV0gsZUFBQSxDQUFFMEUsR0FBRixDQUFNRixPQUFOLEVBQWUsTUFBZixDQUFYLEVBQW1DTCxJQUFuQyxDQUFMLEVBQStDO1FBQzdDL0QsZUFBQSxDQUFPdUUsYUFBUCxDQUFzQixVQUFTUixJQUFLLDJDQUFwQztNQUNEOztNQUNEQyxNQUFNLEdBQUd0RSxHQUFHLENBQUM4RSx5QkFBSixDQUE4QlQsSUFBOUIsQ0FBVDtJQUNELENBTEQsTUFLTyxJQUFJM0QsSUFBSSxDQUFDcUUsZUFBVCxFQUEwQjtNQUMvQnJFLElBQUksQ0FBQ3FFLGVBQUwsR0FBd0IsR0FBRXJFLElBQUksQ0FBQ3FFLGVBQWdCLEVBQXhCLENBQTBCQyxJQUExQixFQUF2QjtNQUdBLE1BQU1ELGVBQWUsR0FBR0UsZUFBQSxDQUFPQyxNQUFQLENBQWN4RSxJQUFJLENBQUNxRSxlQUFuQixLQUF1Q3JFLElBQUksQ0FBQ3FFLGVBQXBFOztNQUNBekUsZUFBQSxDQUFPbUUsSUFBUCxDQUFhLHNDQUFxQ00sZUFBZ0IsR0FBbEU7O01BSUEsTUFBTUksWUFBWSxHQUFHLEVBQXJCO01BQ0EsSUFBSUMscUJBQXFCLEdBQUcsSUFBNUI7O01BRUEsS0FBSyxNQUFNQyxNQUFYLElBQXFCWCxPQUFyQixFQUE4QjtRQUU1QixNQUFNMUUsR0FBRyxDQUFDc0YsV0FBSixDQUFnQkQsTUFBTSxDQUFDaEIsSUFBdkIsQ0FBTjtRQUNBLE1BQU1rQixXQUFXLEdBQUcsTUFBTXZGLEdBQUcsQ0FBQ3dGLGtCQUFKLEVBQTFCO1FBR0FMLFlBQVksQ0FBQ3BFLElBQWIsQ0FBbUIsR0FBRXNFLE1BQU0sQ0FBQ2hCLElBQUssS0FBSWtCLFdBQVksR0FBakQ7UUFDQSxNQUFNRSxRQUFRLEdBQUdSLGVBQUEsQ0FBT0MsTUFBUCxDQUFjSyxXQUFkLEtBQThCQSxXQUEvQzs7UUFDQSxJQUFJLENBQUNFLFFBQUwsRUFBZTtVQUNiO1FBQ0Q7O1FBRUQsTUFBTUMsd0JBQXdCLEdBQUdULGVBQUEsQ0FBT1UsS0FBUCxDQUFhRixRQUFiLEtBQTBCUixlQUFBLENBQU9VLEtBQVAsQ0FBYVosZUFBYixDQUEzRDs7UUFDQSxNQUFNYSxzQkFBc0IsR0FBRzFGLGVBQUEsQ0FBRThELFFBQUYsQ0FBV3lCLFFBQVgsS0FBd0J2RixlQUFBLENBQUU4RCxRQUFGLENBQVdlLGVBQVgsQ0FBdkQ7O1FBQ0EsSUFBSVcsd0JBQXdCLElBQUlELFFBQVEsQ0FBQ0ksT0FBVCxLQUFxQmQsZUFBZSxDQUFDYyxPQUFqRSxJQUNHRCxzQkFBc0IsSUFBSTFGLGVBQUEsQ0FBRTRGLE9BQUYsQ0FBVUwsUUFBVixNQUF3QnZGLGVBQUEsQ0FBRTRGLE9BQUYsQ0FBVWYsZUFBVixDQUR6RCxFQUNxRjtVQUVuRlYsSUFBSSxHQUFHZ0IsTUFBTSxDQUFDaEIsSUFBZDtVQUNBO1FBQ0QsQ0FMRCxNQUtPLElBQUksQ0FBQ3FCLHdCQUFMLEVBQStCO1VBRXBDO1FBQ0Q7O1FBRUQsSUFBSSxDQUFDLENBQUN4RixlQUFBLENBQUVHLFFBQUYsQ0FBV0ssSUFBSSxDQUFDcUUsZUFBaEIsRUFBaUMsR0FBakMsQ0FBRCxJQUEwQ0EsZUFBZSxDQUFDZ0IsS0FBaEIsS0FBMEJOLFFBQVEsQ0FBQ00sS0FBN0UsSUFDRWhCLGVBQWUsQ0FBQ2dCLEtBQWhCLEtBQTBCTixRQUFRLENBQUNNLEtBQW5DLElBQTRDaEIsZUFBZSxDQUFDaUIsS0FBaEIsS0FBMEJQLFFBQVEsQ0FBQ08sS0FEbEYsTUFJSVoscUJBQXFCLElBQUlILGVBQUEsQ0FBT2dCLEVBQVAsQ0FBVVIsUUFBVixFQUFvQnZGLGVBQUEsQ0FBRUMsTUFBRixDQUFTaUYscUJBQVQsRUFBZ0MsQ0FBaEMsQ0FBcEIsQ0FBekIsSUFDRyxDQUFDQSxxQkFMUixDQUFKLEVBS29DO1VBQ2xDQSxxQkFBcUIsR0FBRztZQUFDLENBQUNDLE1BQU0sQ0FBQ2hCLElBQVIsR0FBZW9CO1VBQWhCLENBQXhCO1FBQ0Q7TUFDRjs7TUFDRCxJQUFJLENBQUNwQixJQUFELElBQVNlLHFCQUFiLEVBQW9DO1FBQ2xDZixJQUFJLEdBQUduRSxlQUFBLENBQUVnRyxJQUFGLENBQU9kLHFCQUFQLEVBQThCLENBQTlCLENBQVA7UUFDQSxNQUFNcEYsR0FBRyxDQUFDc0YsV0FBSixDQUFnQmpCLElBQWhCLENBQU47TUFDRDs7TUFFRCxJQUFJLENBQUNBLElBQUwsRUFBVztRQUVUL0QsZUFBQSxDQUFPdUUsYUFBUCxDQUFzQiw4Q0FBRCxHQUNsQixXQUFVbkUsSUFBSSxDQUFDcUUsZUFBZ0IsaUNBRGIsR0FFbkJJLFlBQVksQ0FBQ2dCLElBQWIsQ0FBa0IsSUFBbEIsQ0FGRjtNQUdEOztNQUVEN0IsTUFBTSxHQUFHdEUsR0FBRyxDQUFDOEUseUJBQUosQ0FBOEJULElBQTlCLENBQVQ7SUFDRCxDQTFETSxNQTBEQTtNQUVMQSxJQUFJLEdBQUdLLE9BQU8sQ0FBQyxDQUFELENBQVAsQ0FBV0wsSUFBbEI7TUFDQUMsTUFBTSxHQUFHdEUsR0FBRyxDQUFDOEUseUJBQUosQ0FBOEJULElBQTlCLENBQVQ7SUFDRDtFQUNGOztFQUVEL0QsZUFBQSxDQUFPbUUsSUFBUCxDQUFhLGlCQUFnQkosSUFBSyxFQUFsQzs7RUFDQSxPQUFPO0lBQUNBLElBQUQ7SUFBT0M7RUFBUCxDQUFQO0FBQ0QsQ0E1RkQ7O0FBK0ZBN0MsT0FBTyxDQUFDaUIsU0FBUixHQUFvQixlQUFlQSxTQUFmLENBQTBCaEMsSUFBSSxHQUFHLEVBQWpDLEVBQXFDO0VBQ3ZELE1BQU07SUFBQzJELElBQUQ7SUFBT0M7RUFBUCxJQUFpQjVELElBQXZCO0VBQ0EsTUFBTVYsR0FBRyxHQUFHLE1BQU15QixPQUFPLENBQUNDLGFBQVIsQ0FBc0JoQixJQUF0QixDQUFsQjtFQUNBVixHQUFHLENBQUNzRixXQUFKLENBQWdCakIsSUFBaEI7O0VBQ0EsSUFBSUMsTUFBSixFQUFZO0lBQ1Z0RSxHQUFHLENBQUNvRyxlQUFKLENBQW9COUIsTUFBcEI7RUFDRDs7RUFFRCxPQUFPdEUsR0FBUDtBQUNELENBVEQ7O0FBV0F5QixPQUFPLENBQUM0RSw0QkFBUixHQUF1QyxTQUFTQSw0QkFBVCxDQUF1QzNGLElBQXZDLEVBQTZDO0VBQ2xGLEtBQUssTUFBTTRGLEdBQVgsSUFBa0IsQ0FBQyxZQUFELEVBQWUsYUFBZixFQUE4QixnQkFBOUIsRUFBZ0QsaUJBQWhELENBQWxCLEVBQXNGO0lBQ3BGLE1BQU1DLElBQUksR0FBRzdGLElBQUksQ0FBQzRGLEdBQUQsQ0FBakI7O0lBQ0EsSUFBSSxDQUFDQyxJQUFMLEVBQVc7TUFDVDtJQUNEOztJQUVELE1BQU1DLEtBQUssR0FBRyxjQUFjQyxJQUFkLENBQW1CRixJQUFuQixDQUFkOztJQUNBLElBQUksQ0FBQ0MsS0FBTCxFQUFZO01BQ1Y7SUFDRDs7SUFFRGxHLGVBQUEsQ0FBT0MsSUFBUCxDQUFhLGVBQWMrRixHQUFJLHNHQUEvQjs7SUFDQWhHLGVBQUEsQ0FBT0MsSUFBUCxDQUFhLGtCQUFpQmdHLElBQUsseUNBQXdDQyxLQUFLLENBQUNFLEtBQU0sTUFBS0gsSUFBSSxDQUFDSSxTQUFMLENBQWUsQ0FBZixFQUFrQkgsS0FBSyxDQUFDRSxLQUFOLEdBQWMsQ0FBaEMsQ0FBbUMsR0FBL0g7RUFDRDtBQUNGLENBZkQ7O0FBaUJBakYsT0FBTyxDQUFDbUYsYUFBUixHQUF3QixlQUFlQSxhQUFmLENBQThCNUcsR0FBOUIsRUFBbUNVLElBQW5DLEVBQXlDO0VBQy9ELElBQUk7SUFBQ21HLEdBQUQ7SUFBTUMsVUFBTjtJQUFrQkMsV0FBbEI7SUFBK0JDLGNBQS9CO0lBQStDQztFQUEvQyxJQUFrRXZHLElBQXRFOztFQUNBLElBQUksQ0FBQ21HLEdBQUwsRUFBVTtJQUNSdkcsZUFBQSxDQUFPQyxJQUFQLENBQVksOENBQVo7O0lBQ0E7RUFDRDs7RUFFRCxLQUFLOEYsNEJBQUwsQ0FBa0MzRixJQUFsQzs7RUFFQSxJQUFJb0csVUFBVSxJQUFJQyxXQUFsQixFQUErQjtJQUM3QjtFQUNEOztFQUVEekcsZUFBQSxDQUFPcUQsS0FBUCxDQUFhLGdEQUFiOztFQUNBLElBQUk7SUFBQ3VELFVBQUQ7SUFBYUM7RUFBYixJQUNGLE1BQU1uSCxHQUFHLENBQUNvSCxvQ0FBSixDQUF5Q1AsR0FBekMsQ0FEUjs7RUFFQSxJQUFJSyxVQUFVLElBQUksQ0FBQ0osVUFBbkIsRUFBK0I7SUFDN0JBLFVBQVUsR0FBR0ksVUFBYjtFQUNEOztFQUNELElBQUksQ0FBQ0YsY0FBTCxFQUFxQjtJQUNuQkEsY0FBYyxHQUFHRixVQUFqQjtFQUNEOztFQUNELElBQUlLLFdBQVcsSUFBSSxDQUFDSixXQUFwQixFQUFpQztJQUMvQkEsV0FBVyxHQUFHSSxXQUFkO0VBQ0Q7O0VBQ0QsSUFBSSxDQUFDRixlQUFMLEVBQXNCO0lBQ3BCQSxlQUFlLEdBQUdGLFdBQWxCO0VBQ0Q7O0VBQ0R6RyxlQUFBLENBQU9xRCxLQUFQLENBQWMsb0NBQW1DdUQsVUFBVyxJQUFHQyxXQUFZLEVBQTNFOztFQUNBLE9BQU87SUFBQ0wsVUFBRDtJQUFhRSxjQUFiO0lBQTZCRCxXQUE3QjtJQUEwQ0U7RUFBMUMsQ0FBUDtBQUNELENBOUJEOztBQWdDQXhGLE9BQU8sQ0FBQzRGLFFBQVIsR0FBbUIsZUFBZUEsUUFBZixDQUF5QnJILEdBQXpCLEVBQThCVSxJQUFJLEdBQUcsRUFBckMsRUFBeUM7RUFDMUQsTUFBTTtJQUNKbUcsR0FESTtJQUVKQyxVQUZJO0lBR0pRLFNBSEk7SUFJSkMsU0FKSTtJQUtKQyxxQkFBcUIsR0FBRzVJLHVCQUxwQjtJQU1KNkksb0JBTkk7SUFPSkM7RUFQSSxJQVFGaEgsSUFSSjs7RUFVQSxJQUFJLENBQUNvRyxVQUFMLEVBQWlCO0lBQ2YsTUFBTSxJQUFJdEYsS0FBSixDQUFVLGlDQUFWLENBQU47RUFDRDs7RUFFRCxNQUFNbUcsV0FBVyxHQUFHLE1BQU0zSCxHQUFHLENBQUM0SCxjQUFKLENBQW1CZCxVQUFuQixDQUExQjs7RUFFQSxJQUFJYSxXQUFKLEVBQWlCO0lBQ2YsSUFBSTtNQUNGLE1BQU0zSCxHQUFHLENBQUM2SCxTQUFKLENBQWNmLFVBQWQsQ0FBTjtJQUNELENBRkQsQ0FFRSxPQUFPZ0IsR0FBUCxFQUFZLENBQUU7O0lBRWhCLElBQUksQ0FBQ1AsU0FBRCxJQUFjRCxTQUFsQixFQUE2QjtNQUMzQixNQUFNUyxNQUFNLEdBQUcsTUFBTS9ILEdBQUcsQ0FBQ2dJLEtBQUosQ0FBVWxCLFVBQVYsQ0FBckI7O01BQ0EsSUFBSTVHLGVBQUEsQ0FBRThELFFBQUYsQ0FBVytELE1BQVgsS0FBc0JBLE1BQU0sQ0FBQ0UsV0FBUCxHQUFxQjVILFFBQXJCLENBQThCLFFBQTlCLENBQTFCLEVBQW1FO1FBQ2pFLE1BQU0sSUFBSW1CLEtBQUosQ0FBVyx5Q0FBd0NzRixVQUFXLHNCQUFxQmlCLE1BQU8sRUFBMUYsQ0FBTjtNQUNEOztNQUVELElBQUlOLG9CQUFKLEVBQTBCO1FBQ3hCLElBQUk7VUFDRixNQUFNekgsR0FBRyxDQUFDa0ksbUJBQUosQ0FBd0JwQixVQUF4QixDQUFOO1FBQ0QsQ0FGRCxDQUVFLE9BQU9xQixLQUFQLEVBQWM7VUFDZDdILGVBQUEsQ0FBTzZILEtBQVAsQ0FBYywwREFBeURBLEtBQUssQ0FBQ2hFLE9BQVEsRUFBckY7UUFDRDtNQUNGOztNQUNEN0QsZUFBQSxDQUFPcUQsS0FBUCxDQUFjLDBDQUF5Q21ELFVBQVcsZ0NBQWxFOztNQUNBO0lBQ0Q7RUFDRjs7RUFFRCxJQUFJLENBQUNELEdBQUwsRUFBVTtJQUNSLE1BQU0sSUFBSXJGLEtBQUosQ0FBVSx3Q0FBVixDQUFOO0VBQ0Q7O0VBRURsQixlQUFBLENBQU9xRCxLQUFQLENBQWMsMEJBQXlCbUQsVUFBVyxlQUFsRDs7RUFDQSxJQUFJYSxXQUFKLEVBQWlCO0lBQ2YsTUFBTTNILEdBQUcsQ0FBQ29JLFlBQUosQ0FBaUJ0QixVQUFqQixDQUFOO0VBQ0Q7O0VBQ0QsTUFBTTlHLEdBQUcsQ0FBQ3FJLE9BQUosQ0FBWXhCLEdBQVosRUFBaUI7SUFDckJ5QixnQkFBZ0IsRUFBRWIsb0JBREc7SUFFckJjLE9BQU8sRUFBRWYscUJBRlk7SUFHckJFO0VBSHFCLENBQWpCLENBQU47QUFLRCxDQXJERDs7QUF1REFqRyxPQUFPLENBQUMrRyxVQUFSLEdBQXFCLGVBQWVBLFVBQWYsQ0FBMkJ4SSxHQUEzQixFQUFnQ1UsSUFBSSxHQUFHLEVBQXZDLEVBQTJDO0VBQzlELE1BQU07SUFDSm1HLEdBREk7SUFFSkMsVUFGSTtJQUdKUSxTQUhJO0lBSUpDLFNBSkk7SUFLSkMscUJBQXFCLEdBQUc1SSx1QkFMcEI7SUFNSjZJLG9CQU5JO0lBT0pDLGlCQVBJO0lBUUplO0VBUkksSUFTRi9ILElBVEo7O0VBV0EsSUFBSSxDQUFDbUcsR0FBRCxJQUFRLENBQUNDLFVBQWIsRUFBeUI7SUFDdkIsTUFBTSxJQUFJdEYsS0FBSixDQUFVLDZDQUFWLENBQU47RUFDRDs7RUFFRCxJQUFJK0YsU0FBSixFQUFlO0lBQ2IsTUFBTSxLQUFLRixRQUFMLENBQWNySCxHQUFkLEVBQW1CVSxJQUFuQixDQUFOO0lBQ0E7RUFDRDs7RUFFRCxNQUFNO0lBQ0pnSSxRQURJO0lBRUpDO0VBRkksSUFHRixNQUFNM0ksR0FBRyxDQUFDNEksZ0JBQUosQ0FBcUIvQixHQUFyQixFQUEwQkMsVUFBMUIsRUFBc0M7SUFDOUN3QixnQkFBZ0IsRUFBRWIsb0JBRDRCO0lBRTlDYyxPQUFPLEVBQUVmLHFCQUZxQztJQUc5Q0UsaUJBSDhDO0lBSTlDbUIsbUJBQW1CLEVBQUVKO0VBSnlCLENBQXRDLENBSFY7RUFXQSxNQUFNSywwQkFBMEIsR0FBRyxDQUFDSCxjQUFELElBQzlCRCxRQUFRLEtBQUsxSSxHQUFHLENBQUMrSSxpQkFBSixDQUFzQnBKLGFBRHhDOztFQUVBLElBQUkySCxTQUFTLElBQUl3QiwwQkFBakIsRUFBNkM7SUFDM0N4SSxlQUFBLENBQU9tRSxJQUFQLENBQWEsNkJBQTRCcUMsVUFBVyxHQUFwRDs7SUFDQSxNQUFNLEtBQUtPLFFBQUwsQ0FBY3JILEdBQWQsRUFBbUJVLElBQW5CLENBQU47RUFDRDtBQUNGLENBdENEOztBQTZDQWUsT0FBTyxDQUFDdUgsZ0JBQVIsR0FBMkIsZUFBZUEsZ0JBQWYsQ0FBaUNDLFNBQWpDLEVBQTRDakosR0FBNUMsRUFBaURVLElBQWpELEVBQXVEO0VBQ2hGLElBQUk7SUFDRjhHLHFCQUFxQixHQUFHNUksdUJBRHRCO0lBRUY2SSxvQkFGRTtJQUdGQztFQUhFLElBSUFoSCxJQUpKO0VBT0EsTUFBTXdJLGlCQUFBLENBQUVDLEdBQUYsQ0FBTUYsU0FBUyxDQUFDckUsR0FBVixDQUFld0UsUUFBRCxJQUFjO0lBQ3RDOUksZUFBQSxDQUFPcUQsS0FBUCxDQUFjLG1CQUFrQnlGLFFBQVMsRUFBekM7O0lBQ0EsT0FBT3BKLEdBQUcsQ0FBQzRJLGdCQUFKLENBQXFCUSxRQUFyQixFQUErQixJQUEvQixFQUFxQztNQUMxQ2QsZ0JBQWdCLEVBQUViLG9CQUR3QjtNQUUxQ2MsT0FBTyxFQUFFZixxQkFGaUM7TUFHMUNFO0lBSDBDLENBQXJDLENBQVA7RUFLRCxDQVBXLENBQU4sQ0FBTjtBQVFELENBaEJEOztBQXdCQWpHLE9BQU8sQ0FBQzRILHNCQUFSLEdBQWlDLGVBQWVBLHNCQUFmLENBQXVDckosR0FBdkMsRUFBNENzSixXQUE1QyxFQUF5REMsY0FBYyxHQUFHLEVBQTFFLEVBQThFO0VBQzdHLElBQUlELFdBQVcsQ0FBQ2pKLFFBQVosQ0FBcUIsR0FBckIsQ0FBSixFQUErQjtJQUM3QkMsZUFBQSxDQUFPcUQsS0FBUCxDQUFhLGdDQUFiOztJQUNBMkYsV0FBVyxHQUFHLE1BQU0sS0FBS0UscUJBQUwsQ0FBMkJ4SixHQUEzQixFQUFnQ3VKLGNBQWhDLENBQXBCO0VBQ0Q7O0VBRURqSixlQUFBLENBQU9xRCxLQUFQLENBQWMsMEJBQXlCMkYsV0FBWSxFQUFuRDs7RUFDQSxNQUFNSixpQkFBQSxDQUFFQyxHQUFGLENBQU1HLFdBQVcsQ0FBQzFFLEdBQVosQ0FBaUJrQyxVQUFELElBQWdCOUcsR0FBRyxDQUFDb0ksWUFBSixDQUFpQnRCLFVBQWpCLENBQWhDLENBQU4sQ0FBTjtBQUNELENBUkQ7O0FBZ0JBckYsT0FBTyxDQUFDK0gscUJBQVIsR0FBZ0MsZUFBZUEscUJBQWYsQ0FBc0N4SixHQUF0QyxFQUEyQ3VKLGNBQWMsR0FBRyxFQUE1RCxFQUFnRTtFQUM5RixJQUFJO0lBQ0YsTUFBTUUsY0FBYyxHQUFHLE1BQU16SixHQUFHLENBQUMwSixLQUFKLENBQVUsQ0FBQyxJQUFELEVBQU8sTUFBUCxFQUFlLFVBQWYsRUFBMkIsSUFBM0IsQ0FBVixDQUE3QjtJQUNBLE1BQU1DLGdCQUFnQixHQUFHRixjQUFjLENBQUN6RSxJQUFmLEdBQXNCekIsT0FBdEIsQ0FBOEIsV0FBOUIsRUFBMkMsRUFBM0MsRUFBK0NxRyxLQUEvQyxDQUFxREMsT0FBckQsQ0FBekI7O0lBQ0F2SixlQUFBLENBQU9xRCxLQUFQLENBQWMsSUFBR2dHLGdCQUFpQixvQkFBbUJKLGNBQWUsR0FBcEU7O0lBQ0EsT0FBT3JKLGVBQUEsQ0FBRTRKLFVBQUYsQ0FBYUgsZ0JBQWIsRUFBK0JKLGNBQS9CLENBQVA7RUFDRCxDQUxELENBS0UsT0FBT1EsR0FBUCxFQUFZO0lBQ1p6SixlQUFBLENBQU9DLElBQVAsQ0FBYSxnRUFBK0R3SixHQUFHLENBQUM1RixPQUFRLEVBQXhGOztJQUNBLE9BQU8sRUFBUDtFQUNEO0FBQ0YsQ0FWRDs7QUFZQTFDLE9BQU8sQ0FBQ3VJLG1CQUFSLEdBQThCLGVBQWVBLG1CQUFmLENBQW9DaEssR0FBcEMsRUFBeUM7RUFDckVNLGVBQUEsQ0FBT3FELEtBQVAsQ0FBYSxtQ0FBYjs7RUFHQSxJQUFJc0csVUFBVSxHQUFHLE1BQU1qSyxHQUFHLENBQUNpSyxVQUFKLEVBQXZCOztFQUVBM0osZUFBQSxDQUFPcUQsS0FBUCxDQUFjLDBCQUF5QnNHLFVBQVcsRUFBbEQ7O0VBQ0EsTUFBTUMsU0FBUyxHQUFJLEdBQUU3SyxzQkFBdUIsY0FBNUM7O0VBQ0FpQixlQUFBLENBQU9xRCxLQUFQLENBQWMsbUJBQWtCdUcsU0FBVSxHQUExQzs7RUFDQSxNQUFNbEssR0FBRyxDQUFDbUssU0FBSixDQUFjRCxTQUFkLENBQU47RUFDQSxNQUFNbEssR0FBRyxDQUFDb0ssTUFBSixDQUFXRixTQUFYLENBQU47RUFDQSxPQUFPRCxVQUFQO0FBQ0QsQ0FaRDs7QUFjQXhJLE9BQU8sQ0FBQzRJLGtCQUFSLEdBQTZCLGVBQWVBLGtCQUFmLENBQW1DckssR0FBbkMsRUFBd0M2RyxHQUF4QyxFQUE2QztFQUN4RSxJQUFJO0lBQ0YsSUFBSSxPQUFNN0csR0FBRyxDQUFDc0ssV0FBSixFQUFOLElBQTBCLEVBQTlCLEVBQWtDO01BQ2hDLE1BQU10SyxHQUFHLENBQUMwSixLQUFKLENBQVUsQ0FBQyxVQUFELEVBQWEsS0FBYixFQUFvQixRQUFwQixFQUE4QixlQUE5QixFQUErQyxHQUEvQyxDQUFWLENBQU47SUFDRCxDQUZELE1BRU87TUFDTCxNQUFNMUosR0FBRyxDQUFDMEosS0FBSixDQUFVLENBQUMsUUFBRCxFQUFXLEtBQVgsRUFBa0I3QyxHQUFsQixFQUF1Qix1QkFBdkIsRUFBZ0QsT0FBaEQsQ0FBVixDQUFOO0lBQ0Q7RUFDRixDQU5ELENBTUUsT0FBT2tELEdBQVAsRUFBWTtJQUNaekosZUFBQSxDQUFPQyxJQUFQLENBQWEsd0NBQXVDc0csR0FBSSxNQUFLa0QsR0FBRyxDQUFDNUYsT0FBUSxFQUF6RTtFQUNEO0FBQ0YsQ0FWRDs7QUFZQTFDLE9BQU8sQ0FBQzhJLGdCQUFSLEdBQTJCLGVBQWVBLGdCQUFmLENBQWlDdkssR0FBakMsRUFBc0N3SyxPQUF0QyxFQUErQ0MsU0FBL0MsRUFBMEQ7RUFHbkYsTUFBTSxJQUFBQyxlQUFBLEVBQU0sQ0FBTixFQUFTLGVBQWVDLHFCQUFmLEdBQXdDO0lBQ3JELE1BQU0zSyxHQUFHLENBQUM0SSxnQkFBSixDQUFxQjRCLE9BQXJCLEVBQThCQyxTQUE5QixFQUF5QztNQUFDbkMsZ0JBQWdCLEVBQUU7SUFBbkIsQ0FBekMsQ0FBTjtFQUNELENBRkssQ0FBTjtBQUdELENBTkQ7O0FBZ0JBN0csT0FBTyxDQUFDbUosZUFBUixHQUEwQixlQUFlQSxlQUFmLENBQWdDNUssR0FBaEMsRUFBcUM2SyxVQUFVLEdBQUcsS0FBbEQsRUFBeUQ7RUFDakZ2SyxlQUFBLENBQU9xRCxLQUFQLENBQWEsbUNBQWI7O0VBRUEsSUFBSTtJQUNGLE1BQU1sQyxPQUFPLENBQUM4SSxnQkFBUixDQUF5QnZLLEdBQXpCLEVBQThCOEssY0FBOUIsRUFBK0N6TCxzQkFBL0MsRUFBdUV3TCxVQUF2RSxDQUFOO0VBQ0QsQ0FGRCxDQUVFLE9BQU9kLEdBQVAsRUFBWTtJQUNaLElBQUljLFVBQUosRUFBZ0I7TUFDZCxNQUFNZCxHQUFOO0lBQ0Q7O0lBRUR6SixlQUFBLENBQU9DLElBQVAsQ0FBYSxtQ0FBa0N1SyxjQUFnQixLQUFuRCxHQUNDLElBQUdmLEdBQUcsQ0FBQzVGLE9BQVEsdUNBRGhCLEdBRUEsMkRBRkEsR0FHQSw2Q0FIWjtFQUlEOztFQUlELElBQUksTUFBTW5FLEdBQUcsQ0FBQytLLGFBQUosQ0FBa0IxTCxzQkFBbEIsQ0FBVixFQUFxRDtJQUNuRGlCLGVBQUEsQ0FBT3FELEtBQVAsQ0FBYyxHQUFFdEUsc0JBQXVCLHVCQUExQixHQUNWLDRDQURIOztJQUVBO0VBQ0Q7O0VBRUQsTUFBTTJMLFFBQVEsR0FBRyxNQUFNaEwsR0FBRyxDQUFDc0ssV0FBSixFQUF2Qjs7RUFDQSxJQUFJVSxRQUFRLElBQUksRUFBaEIsRUFBb0I7SUFFbEIsSUFBSTtNQUNGLE1BQU1oTCxHQUFHLENBQUMwSixLQUFKLENBQVUsQ0FBQyxRQUFELEVBQVcsS0FBWCxFQUFrQnJLLHNCQUFsQixFQUEwQyxlQUExQyxFQUEyRCxPQUEzRCxDQUFWLENBQU47SUFDRCxDQUZELENBRUUsT0FBTzBLLEdBQVAsRUFBWTtNQUNaekosZUFBQSxDQUFPcUQsS0FBUCxDQUFhb0csR0FBYjtJQUNEO0VBQ0Y7O0VBQ0QsSUFBSWlCLFFBQVEsSUFBSSxFQUFoQixFQUFvQjtJQUVsQixNQUFNQyxLQUFLLEdBQUcsQ0FBQyxxQkFBRCxFQUF3QixzQkFBeEIsRUFBZ0Qsc0JBQWhELENBQWQ7O0lBQ0EzSyxlQUFBLENBQU9tRSxJQUFQLENBQWEsd0JBQXVCd0csS0FBTSxRQUFPNUwsc0JBQXVCLEdBQXhFOztJQUNBLE1BQU1XLEdBQUcsQ0FBQ3NJLGdCQUFKLENBQXFCakosc0JBQXJCLEVBQTZDNEwsS0FBSyxDQUFDckcsR0FBTixDQUFXc0csQ0FBRCxJQUFRLHNCQUFxQkEsQ0FBRSxFQUF6QyxDQUE3QyxDQUFOO0VBQ0Q7O0VBS0QsSUFBSTtJQUNGLE1BQU1sTCxHQUFHLENBQUNtTCx5QkFBSixFQUFOO0VBQ0QsQ0FGRCxDQUVFLE9BQU9wQixHQUFQLEVBQVk7SUFDWnpKLGVBQUEsQ0FBT3FELEtBQVAsQ0FBYW9HLEdBQWI7O0lBQ0EsSUFBSWMsVUFBSixFQUFnQjtNQUNkLE1BQU1kLEdBQU47SUFDRDtFQUNGO0FBQ0YsQ0FuREQ7O0FBbUVBdEksT0FBTyxDQUFDMkosV0FBUixHQUFzQixlQUFlQSxXQUFmLENBQTRCckksUUFBNUIsRUFBc0MvQyxHQUF0QyxFQUEyQ1UsSUFBM0MsRUFBaUQ7RUFDckUsTUFBTTJLLFNBQVMsR0FBRyxpQkFBbEI7RUFDQSxNQUFNQyxXQUFXLEdBQUcsY0FBcEI7O0VBQ0EsTUFBTUMsVUFBVSxHQUFHQyxhQUFBLENBQUtDLEtBQUwsQ0FBV0MsT0FBWCxDQUFtQkwsU0FBbkIsRUFBOEJDLFdBQTlCLENBQW5COztFQUdBLE1BQU10TCxHQUFHLENBQUMyTCxNQUFKLENBQVdKLFVBQVgsQ0FBTjtFQUVBLElBQUkxRSxHQUFKOztFQUNBLElBQUk7SUFDRkEsR0FBRyxHQUFHbkcsSUFBSSxDQUFDbUcsR0FBTCxLQUFZLE1BQU03RyxHQUFHLENBQUM0TCxPQUFKLENBQVlsTCxJQUFJLENBQUNvRyxVQUFqQixFQUE2QnBHLElBQUksQ0FBQ21MLE1BQWxDLENBQWxCLENBQU47RUFDRCxDQUZELENBRUUsT0FBTzlCLEdBQVAsRUFBWTtJQUNaekosZUFBQSxDQUFPbUUsSUFBUCxDQUFhLCtCQUE4Qi9ELElBQUksQ0FBQ29HLFVBQVcsU0FBUXBHLElBQUksQ0FBQ21MLE1BQU8sc0JBQXFCOUIsR0FBRyxDQUFDNUYsT0FBUSxFQUFoSDtFQUNEOztFQUVELElBQUlqRSxlQUFBLENBQUU0TCxPQUFGLENBQVVwTCxJQUFJLENBQUNvRyxVQUFmLEtBQThCLEVBQUUsTUFBTWlGLFdBQUEsQ0FBR0MsTUFBSCxDQUFVbkYsR0FBVixDQUFSLENBQWxDLEVBQTJEO0lBQ3pEdkcsZUFBQSxDQUFPcUQsS0FBUCxDQUFjLHNEQUFkOztJQUNBLE9BQU8sRUFBUDtFQUNEOztFQUVELE1BQU1zSSxhQUFhLEdBQUdULGFBQUEsQ0FBS0UsT0FBTCxDQUFhaEwsSUFBSSxDQUFDbUwsTUFBbEIsRUFBMEJuTCxJQUFJLENBQUNvRyxVQUEvQixDQUF0Qjs7RUFDQSxJQUFJO0lBQ0Z4RyxlQUFBLENBQU9xRCxLQUFQLENBQWEsNkJBQWIsRUFBNENrRCxHQUE1QyxFQUFpRDlELFFBQWpELEVBQTJEa0osYUFBM0Q7O0lBQ0EsTUFBTTtNQUFDQyxVQUFEO01BQWFDO0lBQWIsSUFBMEIsTUFBTW5NLEdBQUcsQ0FBQ29NLHFCQUFKLENBQTBCdkYsR0FBMUIsRUFBK0I5RCxRQUEvQixFQUF5Q2tKLGFBQXpDLENBQXRDO0lBQ0EsTUFBTWpNLEdBQUcsQ0FBQ2UsSUFBSixDQUFTb0wsU0FBVCxFQUFvQmQsU0FBcEIsQ0FBTjtJQUNBLE9BQU9hLFVBQVA7RUFDRCxDQUxELENBS0UsT0FBT25DLEdBQVAsRUFBWTtJQUNaekosZUFBQSxDQUFPQyxJQUFQLENBQWEsNkRBQTREd0osR0FBRyxDQUFDNUYsT0FBUSxFQUFyRjs7SUFDQSxNQUFNbkUsR0FBRyxDQUFDMEosS0FBSixDQUFVLE1BQVYsRUFBa0IsQ0FBRSxVQUFTNkIsVUFBVyxFQUF0QixDQUFsQixDQUFOO0VBQ0QsQ0FSRCxTQVFVO0lBQ1IsTUFBTVEsV0FBQSxDQUFHSixNQUFILENBQVVNLGFBQVYsQ0FBTjtFQUNEOztFQUNELE9BQU8sRUFBUDtBQUNELENBakNEOztBQW1DQXhLLE9BQU8sQ0FBQzRLLG1CQUFSLEdBQThCLGVBQWVBLG1CQUFmLENBQW9Dck0sR0FBcEMsRUFBeUM7RUFDckVNLGVBQUEsQ0FBT21FLElBQVAsQ0FBWSxrQkFBWjs7RUFHQSxJQUFJNkgsUUFBUSxHQUFHLElBQWY7RUFDQSxNQUFNLElBQUE1QixlQUFBLEVBQU0sQ0FBTixFQUFTLGVBQWU2QixZQUFmLEdBQStCO0lBRTVDLElBQUlELFFBQUosRUFBYztNQUNaQSxRQUFRLEdBQUcsS0FBWDtJQUNELENBRkQsTUFFTztNQUNMLElBQUk7UUFDRixJQUFJLEVBQUUsTUFBTXRNLEdBQUcsQ0FBQ3dNLGNBQUosRUFBUixDQUFKLEVBQW1DO1VBQ2pDO1FBQ0Q7TUFDRixDQUpELENBSUUsT0FBT0MsQ0FBUCxFQUFVO1FBQ1ZuTSxlQUFBLENBQU9DLElBQVAsQ0FBYSw0QkFBMkJrTSxDQUFDLENBQUN0SSxPQUFRLEVBQWxEOztRQUNBN0QsZUFBQSxDQUFPQyxJQUFQLENBQVksbURBQVo7O1FBQ0FELGVBQUEsQ0FBT0MsSUFBUCxDQUFZLDhGQUFaO01BQ0Q7SUFDRjs7SUFFREQsZUFBQSxDQUFPbUUsSUFBUCxDQUFhLGFBQVluRiwrQkFBZ0MsRUFBekQ7O0lBQ0EsTUFBTVUsR0FBRyxDQUFDMEosS0FBSixDQUFVLENBQ2QsSUFEYyxFQUNSLE9BRFEsRUFFZCxJQUZjLEVBRVAsR0FBRXJLLHNCQUF1QixJQUFHQywrQkFBZ0MsRUFGckQsRUFHZCxJQUhjLEVBR1Isa0NBSFEsRUFJZCxJQUpjLEVBSVIsNEJBSlEsRUFLZCxJQUxjLEVBS1IsWUFMUSxDQUFWLENBQU47SUFPQSxNQUFNNEosaUJBQUEsQ0FBRXdELEtBQUYsQ0FBUSxJQUFSLENBQU47RUFDRCxDQXpCSyxDQUFOO0FBMEJELENBL0JEOztBQWlDQWpMLE9BQU8sQ0FBQ2tMLE1BQVIsR0FBaUIsZUFBZUEsTUFBZixDQUF1QkMsTUFBdkIsRUFBK0I1TSxHQUEvQixFQUFvQzZNLFlBQXBDLEVBQWtEO0VBQ2pFLElBQUksRUFBRSxNQUFNN00sR0FBRyxDQUFDd00sY0FBSixFQUFSLENBQUosRUFBbUM7SUFDakNsTSxlQUFBLENBQU9tRSxJQUFQLENBQVksd0NBQVo7O0lBQ0E7RUFDRDs7RUFDRG5FLGVBQUEsQ0FBT3FELEtBQVAsQ0FBYSxvQ0FBYjs7RUFFQSxJQUFJLENBQUNrSixZQUFZLENBQUMxTCxVQUFkLElBQTRCLENBQUMwTCxZQUFZLENBQUNDLFNBQTlDLEVBQXlEO0lBQ3ZEeE0sZUFBQSxDQUFPQyxJQUFQLENBQVksbURBQVo7O0lBQ0EsTUFBTWtCLE9BQU8sQ0FBQzRLLG1CQUFSLENBQTRCck0sR0FBNUIsQ0FBTjtJQUNBO0VBQ0Q7O0VBRUQsTUFBTTtJQUNKbUIsVUFESTtJQUVKMkwsU0FGSTtJQUdKQyxjQUhJO0lBSUpDO0VBSkksSUFLRkMsc0JBQUEsQ0FBU0MsMEJBQVQsQ0FBb0NMLFlBQXBDLENBTEo7O0VBTUEsSUFBSUMsU0FBUyxJQUFJM0wsVUFBVSxLQUFLZ00saUNBQTVCLEtBQ0lqTixlQUFBLENBQUVrTixLQUFGLENBQVFMLGNBQVIsS0FBMkI3TSxlQUFBLENBQUU0RixPQUFGLENBQVVpSCxjQUFWLE1BQThCLGNBRDdELE1BRUcsTUFBTS9NLEdBQUcsQ0FBQ3FOLHlCQUFKLEVBRlQsQ0FBSixFQUU4QztJQUM1QyxNQUFNSixzQkFBQSxDQUFTSyxVQUFULENBQW9CdE4sR0FBcEIsRUFBeUI7TUFDN0J1TixVQUFVLEVBQUVULFNBRGlCO01BRTdCVSxjQUFjLEVBQUV0TSxnQkFBZ0IsQ0FBQ0MsVUFBRDtJQUZILENBQXpCLENBQU47RUFJRCxDQVBELE1BT087SUFDTCxNQUFNc00sWUFBWSxHQUFHO01BQ25CLENBQUNyTSx5QkFBRCxHQUFjNkwsc0JBQUEsQ0FBU1MsU0FESjtNQUVuQixDQUFDck0sbUNBQUQsR0FBd0I0TCxzQkFBQSxDQUFTVSxxQkFGZDtNQUduQixDQUFDck0sOEJBQUQsR0FBbUIyTCxzQkFBQSxDQUFTVyxjQUhUO01BSW5CLENBQUNyTSw2QkFBRCxHQUFrQjBMLHNCQUFBLENBQVNZLGFBSlI7TUFLbkIsQ0FBQ1YsaUNBQUQsR0FBc0JGLHNCQUFBLENBQVNhO0lBTFosRUFNbkIzTSxVQU5tQixDQUFyQjtJQU9BLE1BQU1zTSxZQUFZLENBQUN6TixHQUFELEVBQU00TSxNQUFOLEVBQWNDLFlBQWQsQ0FBbEI7RUFDRDs7RUFDRCxNQUFNcEwsT0FBTyxDQUFDc00sWUFBUixDQUFxQi9OLEdBQXJCLEVBQTBCZ04sb0JBQTFCLENBQU47QUFDRCxDQXJDRDs7QUF1Q0F2TCxPQUFPLENBQUNzTSxZQUFSLEdBQXVCLGVBQWVBLFlBQWYsQ0FBNkIvTixHQUE3QixFQUFrQ2dPLFNBQVMsR0FBRyxJQUE5QyxFQUFvRDtFQUN6RSxJQUFJO0lBQ0YsTUFBTSxJQUFBQywwQkFBQSxFQUFpQixZQUFZLEVBQUUsTUFBTWpPLEdBQUcsQ0FBQ3dNLGNBQUosRUFBUixDQUE3QixFQUE0RDtNQUNoRTBCLE1BQU0sRUFBRUYsU0FBRixhQUFFQSxTQUFGLGNBQUVBLFNBQUYsR0FBZSxJQUQyQztNQUVoRUcsVUFBVSxFQUFFO0lBRm9ELENBQTVELENBQU47RUFJRCxDQUxELENBS0UsT0FBT3JHLEdBQVAsRUFBWTtJQUNaLE1BQU0sSUFBSXRHLEtBQUosQ0FBVSxzQ0FBVixDQUFOO0VBQ0Q7O0VBQ0RsQixlQUFBLENBQU9tRSxJQUFQLENBQVksMkNBQVo7QUFDRCxDQVZEOztBQVlBaEQsT0FBTyxDQUFDMk0sVUFBUixHQUFxQixlQUFlQSxVQUFmLENBQTJCcE8sR0FBM0IsRUFBZ0NVLElBQWhDLEVBQXNDO0VBQ3pELE1BQU07SUFDSjJOLHdCQURJO0lBRUpyTCxNQUZJO0lBR0pELFFBSEk7SUFJSnVMLFlBSkk7SUFLSkMsZUFMSTtJQU1KQyxzQkFOSTtJQU9KQyxVQVBJO0lBUUpDLGVBUkk7SUFTSkMsaUJBVEk7SUFVSkMsWUFWSTtJQVdKQztFQVhJLElBWUZuTyxJQVpKOztFQWNBLElBQUkyTix3QkFBSixFQUE4QjtJQUM1Qi9OLGVBQUEsQ0FBT21FLElBQVAsQ0FBYSxvRUFBYjtFQUNELENBRkQsTUFFTztJQUNMLE1BQU16RSxHQUFHLENBQUM4TyxhQUFKLEVBQU47SUFNQSxNQUFNQyxnQkFBZ0IsR0FBR2hNLFFBQVEsSUFDNUJDLE1BRG9CLElBRXBCc0wsWUFGb0IsSUFHcEJDLGVBSG9CLElBSXBCQyxzQkFKb0IsSUFLcEIsQ0FBQ0MsVUFMTjtJQU1BLE1BQU1oTixPQUFPLENBQUNtSixlQUFSLENBQXdCNUssR0FBeEIsRUFBNkIrTyxnQkFBN0IsQ0FBTjtFQUNEOztFQUVELElBQUksQ0FBQ3ROLE9BQU8sQ0FBQ3VOLFVBQVIsQ0FBbUJoUCxHQUFuQixFQUF3QlUsSUFBeEIsQ0FBRCxLQUFtQ2dPLGVBQWUsSUFBSXhPLGVBQUEsQ0FBRStPLFdBQUYsQ0FBY1AsZUFBZCxDQUF0RCxDQUFKLEVBQTJGO0lBQ3pGLE1BQU1qTixPQUFPLENBQUM0SSxrQkFBUixDQUEyQnJLLEdBQTNCLEVBQWdDME8sZUFBZSxJQUFJclAsc0JBQW5ELENBQU47RUFDRDs7RUFFRCxJQUFJMEQsUUFBUSxJQUFJQyxNQUFoQixFQUF3QjtJQUN0QixNQUFNdkIsT0FBTyxDQUFDcUMsa0JBQVIsQ0FBMkI5RCxHQUEzQixFQUFnQytDLFFBQWhDLEVBQTBDQyxNQUExQyxFQUFrRHNMLFlBQWxELENBQU47RUFDRDs7RUFFRCxJQUFJSyxpQkFBSixFQUF1QjtJQUNyQnJPLGVBQUEsQ0FBT21FLElBQVAsQ0FBYSwrREFBYjtFQUNELENBRkQsTUFFTztJQUNMLE1BQU16RSxHQUFHLENBQUNrUCxXQUFKLENBQWdCO01BQ3BCQyxNQUFNLEVBQUVQLFlBRFk7TUFFcEJRLFdBQVcsRUFBRVA7SUFGTyxDQUFoQixDQUFOO0VBSUQ7O0VBRUQsSUFBSU4sZUFBSixFQUFxQjtJQUNuQixPQUFPLE1BQU05TSxPQUFPLENBQUN1SSxtQkFBUixDQUE0QmhLLEdBQTVCLENBQWI7RUFDRDtBQUNGLENBckREOztBQXVEQXlCLE9BQU8sQ0FBQzROLG9CQUFSLEdBQStCLFNBQVNBLG9CQUFULENBQStCQyxHQUEvQixFQUFvQztFQUNqRSxLQUFLLElBQUloSixHQUFULElBQWdCcEcsZUFBQSxDQUFFZ0csSUFBRixDQUFPb0osR0FBUCxDQUFoQixFQUE2QjtJQUMzQixJQUFJcFAsZUFBQSxDQUFFcVAsTUFBRixDQUFTRCxHQUFHLENBQUNoSixHQUFELENBQVosS0FBc0JwRyxlQUFBLENBQUUrTyxXQUFGLENBQWNLLEdBQUcsQ0FBQ2hKLEdBQUQsQ0FBakIsQ0FBMUIsRUFBbUQ7TUFDakQsT0FBT2dKLEdBQUcsQ0FBQ2hKLEdBQUQsQ0FBVjtJQUNEO0VBQ0Y7QUFDRixDQU5EOztBQVFBN0UsT0FBTyxDQUFDK04sZ0JBQVIsR0FBMkIsU0FBU0EsZ0JBQVQsQ0FBMkJDLE1BQTNCLEVBQW1DQyxNQUFuQyxFQUEyQztFQUNwRSxJQUFJQyxVQUFVLEdBQUdDLElBQUksQ0FBQ0MsR0FBTCxDQUFTLEVBQVQsRUFBYUgsTUFBYixDQUFqQjtFQUFBLElBQ0lJLFdBQVcsR0FBR0wsTUFBTSxHQUFHRSxVQUQzQjtFQUFBLElBRUlJLFlBQVksR0FBR0gsSUFBSSxDQUFDRSxXQUFXLEdBQUcsQ0FBZCxHQUFrQixNQUFsQixHQUEyQixPQUE1QixDQUFKLENBQXlDQSxXQUF6QyxDQUZuQjtFQUlBLE9BQU9DLFlBQVksR0FBR0osVUFBdEI7QUFDRCxDQU5EOztBQVFBbE8sT0FBTyxDQUFDdU8sZUFBUixHQUEwQixTQUFTQSxlQUFULENBQTBCN1EsT0FBMUIsRUFBbUM7RUFDM0QsT0FBT2UsZUFBQSxDQUFFRyxRQUFGLENBQVdaLE1BQU0sQ0FBQ3lHLElBQVAsQ0FBWXJILCtCQUFaLENBQVgsRUFBeUQsQ0FBQ00sT0FBTyxJQUFJLEVBQVosRUFBZ0I4SSxXQUFoQixFQUF6RCxDQUFQO0FBQ0QsQ0FGRDs7QUFJQXhHLE9BQU8sQ0FBQ3dPLFlBQVIsR0FBdUIsU0FBU0EsWUFBVCxDQUF1QjlRLE9BQXZCLEVBQWdDO0VBQ3JELE9BQU9OLCtCQUErQixDQUFDTSxPQUFPLENBQUM4SSxXQUFSLEVBQUQsQ0FBL0IsSUFBMERwSiwrQkFBK0IsQ0FBQ08sT0FBakc7QUFDRCxDQUZEOztBQUlBcUMsT0FBTyxDQUFDeU8saUNBQVIsR0FBNEMsZUFBZUEsaUNBQWYsQ0FBa0RDLE1BQWxELEVBQTBEQyxTQUExRCxFQUFxRTtFQUMvRyxJQUFJLENBQUNELE1BQUQsSUFBVyxDQUFDalEsZUFBQSxDQUFFbVEsVUFBRixDQUFhRixNQUFNLENBQUNHLG9CQUFwQixDQUFoQixFQUEyRDtJQUN6RDtFQUNEOztFQUVELE1BQU1DLGNBQWMsR0FBRyxNQUFNSixNQUFNLENBQUNHLG9CQUFQLENBQTRCRixTQUE1QixDQUE3Qjs7RUFDQSxLQUFLLE1BQU1JLFFBQVgsSUFBdUJ0USxlQUFBLENBQUVnRyxJQUFGLENBQU9xSyxjQUFQLENBQXZCLEVBQStDO0lBQzdDLE1BQU1KLE1BQU0sQ0FBQ00sc0JBQVAsQ0FBOEJELFFBQTlCLENBQU47RUFDRDtBQUNGLENBVEQ7O0FBaUJBL08sT0FBTyxDQUFDaVAsVUFBUixHQUFxQixTQUFTQSxVQUFULENBQXFCQyxHQUFyQixFQUEwQjtFQUM3QyxJQUFJQyxVQUFKOztFQUNBLElBQUk7SUFDRkEsVUFBVSxHQUFHQyxJQUFJLENBQUNDLEtBQUwsQ0FBV0gsR0FBWCxDQUFiO0VBQ0QsQ0FGRCxDQUVFLE9BQU83SSxHQUFQLEVBQVksQ0FBRzs7RUFFakIsSUFBSTVILGVBQUEsQ0FBRVksT0FBRixDQUFVOFAsVUFBVixDQUFKLEVBQTJCO0lBQ3pCLE9BQU9BLFVBQVA7RUFDRCxDQUZELE1BRU8sSUFBSTFRLGVBQUEsQ0FBRThELFFBQUYsQ0FBVzJNLEdBQVgsQ0FBSixFQUFxQjtJQUMxQixPQUFPLENBQUNBLEdBQUQsQ0FBUDtFQUNEOztFQUVELE1BQU0sSUFBSW5QLEtBQUosQ0FBVyxpREFBZ0RtUCxHQUFJLEVBQS9ELENBQU47QUFDRCxDQWJEOztBQXNCQWxQLE9BQU8sQ0FBQ3NQLG1CQUFSLEdBQThCLFNBQVNBLG1CQUFULENBQThCQyxJQUE5QixFQUFvQztFQUNoRSxJQUFJQSxJQUFJLENBQUNDLFdBQVQsRUFBc0I7SUFDcEIsSUFBSUQsSUFBSSxDQUFDbkssR0FBVCxFQUFjO01BRVp2RyxlQUFBLENBQU9DLElBQVAsQ0FBYSx5RkFBYjtJQUNEOztJQUNELElBQUl5USxJQUFJLENBQUNsSyxVQUFULEVBQXFCO01BQ25CeEcsZUFBQSxDQUFPdUUsYUFBUCxDQUFzQiw0RUFBdEI7SUFDRDtFQUNGOztFQUVELElBQUltTSxJQUFJLENBQUMzSCxzQkFBVCxFQUFpQztJQUMvQixJQUFJO01BQ0YsS0FBS3FILFVBQUwsQ0FBZ0JNLElBQUksQ0FBQzNILHNCQUFyQjtJQUNELENBRkQsQ0FFRSxPQUFPb0QsQ0FBUCxFQUFVO01BQ1ZuTSxlQUFBLENBQU91RSxhQUFQLENBQXNCLHdEQUF1RDRILENBQUMsQ0FBQ3RJLE9BQVEsRUFBdkY7SUFDRDtFQUNGOztFQUVELE9BQU8sSUFBUDtBQUNELENBcEJEOztBQStCQTFDLE9BQU8sQ0FBQ3lQLHdCQUFSLEdBQW1DLFNBQVNBLHdCQUFULENBQW1DRixJQUFJLEdBQUcsRUFBMUMsRUFBOEM7RUFDL0UsTUFBTTtJQUFFQztFQUFGLElBQWtCRCxJQUF4Qjs7RUFDQTFRLGVBQUEsQ0FBT21FLElBQVAsQ0FBYSxpREFBYjs7RUFDQW5FLGVBQUEsQ0FBT21FLElBQVAsQ0FBYSw0QkFBMkJvTSxJQUFJLENBQUNNLFNBQUwsQ0FBZWpSLGVBQUEsQ0FBRWdHLElBQUYsQ0FBT3JILCtCQUFQLENBQWYsQ0FBd0QsRUFBaEc7O0VBQ0EsSUFBSW1TLElBQUksQ0FBQ2xLLFVBQUwsSUFBbUJrSyxJQUFJLENBQUNqSyxXQUE1QixFQUF5QztJQUN2Q3pHLGVBQUEsQ0FBT21FLElBQVAsQ0FBYSxnRUFBK0R3TSxXQUFZLElBQTVFLEdBQ1YsaURBREY7O0lBRUEsT0FBT0QsSUFBUDtFQUNEOztFQUVELE1BQU07SUFBQ2pTLEdBQUQ7SUFBTUM7RUFBTixJQUFrQixLQUFLaVIsWUFBTCxDQUFrQmdCLFdBQWxCLENBQXhCO0VBQ0FELElBQUksQ0FBQ2xLLFVBQUwsR0FBa0IvSCxHQUFsQjtFQUNBaVMsSUFBSSxDQUFDakssV0FBTCxHQUFtQi9ILFFBQW5COztFQUNBc0IsZUFBQSxDQUFPbUUsSUFBUCxDQUFhLHNFQUFxRTFGLEdBQUksSUFBR0MsUUFBUyxHQUF0RixHQUNULFFBQU9pUyxXQUFZLEdBRHRCOztFQUVBM1EsZUFBQSxDQUFPbUUsSUFBUCxDQUFhLHdGQUFELEdBQ1QsbUdBRFMsR0FFVCxnQkFGSDs7RUFHQSxPQUFPdU0sSUFBUDtBQUNELENBbkJEOztBQTRCQXZQLE9BQU8sQ0FBQ3VOLFVBQVIsR0FBcUIsU0FBU0EsVUFBVCxDQUFxQmhQLEdBQXJCLEVBQTBCVSxJQUExQixFQUFnQztFQUNuRCxNQUFNMFEsYUFBYSxHQUFHLENBQUMxUSxJQUFJLENBQUMyRCxJQUFOLEVBQVlyRSxHQUFaLGFBQVlBLEdBQVosdUJBQVlBLEdBQUcsQ0FBRXVFLFdBQWpCLENBQXRCO0VBQ0EsT0FBTyxDQUFDLENBQUM3RCxJQUFJLENBQUNrQyxHQUFQLElBQWN3TyxhQUFhLENBQUNDLElBQWQsQ0FBb0JuRyxDQUFELElBQU8zTCxnQkFBZ0IsQ0FBQytSLElBQWpCLENBQXNCcEcsQ0FBdEIsQ0FBMUIsQ0FBckI7QUFDRCxDQUhEOztBQUtBekosT0FBTyxDQUFDOFAsU0FBUixHQUFvQkMsa0JBQXBCO0FBQ0EvUCxPQUFPLENBQUN3TCxRQUFSLEdBQW1CQSxzQkFBbkI7ZUFHZXhMLE8ifQ==
|
|
916
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2FuZHJvaWQtaGVscGVycy5qcyIsIm5hbWVzIjpbIlBBQ0tBR0VfSU5TVEFMTF9USU1FT1VUIiwiQ0hST01FX0JST1dTRVJfUEFDS0FHRV9BQ1RJVklUWSIsImNocm9tZSIsInBrZyIsImFjdGl2aXR5IiwiY2hyb21pdW0iLCJjaHJvbWViZXRhIiwiYnJvd3NlciIsImRlZmF1bHQiLCJTRVRUSU5HU19IRUxQRVJfUEtHX0lEIiwiU0VUVElOR1NfSEVMUEVSX1VOTE9DS19BQ1RJVklUWSIsIkVNVUxBVE9SX1BBVFRFUk4iLCJBUFBfU1RBVEUiLCJPYmplY3QiLCJmcmVlemUiLCJOT1RfSU5TVEFMTEVEIiwiTk9UX1JVTk5JTkciLCJSVU5OSU5HX0lOX0JBQ0tHUk9VTkQiLCJSVU5OSU5HX0lOX0ZPUkVHUk9VTkQiLCJlbnN1cmVOZXR3b3JrU3BlZWQiLCJhZGIiLCJuZXR3b3JrU3BlZWQiLCJfIiwidmFsdWVzIiwiTkVUV09SS19TUEVFRCIsImluY2x1ZGVzIiwibG9nZ2VyIiwid2FybiIsIkZVTEwiLCJwcmVwYXJlQXZkQXJncyIsIm9wdHMiLCJpc0hlYWRsZXNzIiwiYXZkQXJncyIsInJlc3VsdCIsImlzQXJyYXkiLCJwdXNoIiwidXRpbCIsInNoZWxsUGFyc2UiLCJ0b0NyZWRlbnRpYWxUeXBlIiwidW5sb2NrVHlwZSIsIlBJTl9VTkxPQ0siLCJQSU5fVU5MT0NLX0tFWV9FVkVOVCIsIlBBU1NXT1JEX1VOTE9DSyIsIlBBVFRFUk5fVU5MT0NLIiwiRXJyb3IiLCJoZWxwZXJzIiwiY3JlYXRlQmFzZUFEQiIsImFkYlBvcnQiLCJzdXBwcmVzc0tpbGxTZXJ2ZXIiLCJyZW1vdGVBZGJIb3N0IiwiY2xlYXJEZXZpY2VMb2dzT25TdGFydCIsImFkYkV4ZWNUaW1lb3V0IiwidXNlS2V5c3RvcmUiLCJrZXlzdG9yZVBhdGgiLCJrZXlzdG9yZVBhc3N3b3JkIiwia2V5QWxpYXMiLCJrZXlQYXNzd29yZCIsInJlbW90ZUFwcHNDYWNoZUxpbWl0IiwiYnVpbGRUb29sc1ZlcnNpb24iLCJhbGxvd09mZmxpbmVEZXZpY2VzIiwiYWxsb3dEZWxheUFkYiIsIkFEQiIsImNyZWF0ZUFEQiIsInByZXBhcmVFbXVsYXRvciIsImF2ZCIsImF2ZEVudiIsImVudiIsImxhbmd1YWdlIiwibG9jYWxlIiwiY291bnRyeSIsImF2ZExhdW5jaFRpbWVvdXQiLCJsYXVuY2hUaW1lb3V0IiwiYXZkUmVhZHlUaW1lb3V0IiwicmVhZHlUaW1lb3V0IiwiYXZkTmFtZSIsInJlcGxhY2UiLCJydW5uaW5nQVZEIiwiZ2V0UnVubmluZ0FWRCIsImFyZ3MiLCJkZWJ1ZyIsImtpbGxFbXVsYXRvciIsImxhdW5jaEFWRCIsImVuc3VyZURldmljZUxvY2FsZSIsInNjcmlwdCIsImlzU3RyaW5nIiwic2V0RGV2aWNlTGFuZ3VhZ2VDb3VudHJ5IiwiZW5zdXJlQ3VycmVudExvY2FsZSIsIm1lc3NhZ2UiLCJnZXREZXZpY2VJbmZvRnJvbUNhcHMiLCJ1ZGlkIiwiZW1Qb3J0IiwiY3VyRGV2aWNlSWQiLCJlbXVsYXRvclBvcnQiLCJpbmZvIiwiZGV2aWNlcyIsImdldERldmljZXNXaXRoUmV0cnkiLCJtYXAiLCJlcnJvckFuZFRocm93IiwiZ2V0UG9ydEZyb21FbXVsYXRvclN0cmluZyIsInBsYXRmb3JtVmVyc2lvbiIsInRyaW0iLCJzZW12ZXIiLCJjb2VyY2UiLCJhdmFpbERldmljZXMiLCJwYXJ0aWFsTWF0Y2hDYW5kaWRhdGUiLCJkZXZpY2UiLCJzZXREZXZpY2VJZCIsInJhd0RldmljZU9TIiwiZ2V0UGxhdGZvcm1WZXJzaW9uIiwiZGV2aWNlT1MiLCJib3RoVmVyc2lvbnNDYW5CZUNvZXJjZWQiLCJ2YWxpZCIsImJvdGhWZXJzaW9uc0FyZVN0cmluZ3MiLCJ2ZXJzaW9uIiwidG9Mb3dlciIsIm1ham9yIiwibWlub3IiLCJndCIsImtleXMiLCJqb2luIiwic2V0RW11bGF0b3JQb3J0IiwidmFsaWRhdGVQYWNrYWdlQWN0aXZpdHlOYW1lcyIsImtleSIsIm5hbWUiLCJtYXRjaCIsImV4ZWMiLCJpbmRleCIsInN1YnN0cmluZyIsImdldExhdW5jaEluZm8iLCJhcHAiLCJhcHBQYWNrYWdlIiwiYXBwQWN0aXZpdHkiLCJhcHBXYWl0UGFja2FnZSIsImFwcFdhaXRBY3Rpdml0eSIsImFwa1BhY2thZ2UiLCJhcGtBY3Rpdml0eSIsInBhY2thZ2VBbmRMYXVuY2hBY3Rpdml0eUZyb21NYW5pZmVzdCIsInJlc2V0QXBwIiwiZmFzdFJlc2V0IiwiZnVsbFJlc2V0IiwiYW5kcm9pZEluc3RhbGxUaW1lb3V0IiwiYXV0b0dyYW50UGVybWlzc2lvbnMiLCJhbGxvd1Rlc3RQYWNrYWdlcyIsImlzSW5zdGFsbGVkIiwiaXNBcHBJbnN0YWxsZWQiLCJmb3JjZVN0b3AiLCJpZ24iLCJvdXRwdXQiLCJjbGVhciIsInRvTG93ZXJDYXNlIiwiZ3JhbnRBbGxQZXJtaXNzaW9ucyIsImVycm9yIiwidW5pbnN0YWxsQXBrIiwiaW5zdGFsbCIsImdyYW50UGVybWlzc2lvbnMiLCJ0aW1lb3V0IiwiaW5zdGFsbEFwayIsImVuZm9yY2VBcHBJbnN0YWxsIiwiYXBwU3RhdGUiLCJ3YXNVbmluc3RhbGxlZCIsImluc3RhbGxPclVwZ3JhZGUiLCJlbmZvcmNlQ3VycmVudEJ1aWxkIiwiaXNJbnN0YWxsZWRPdmVyRXhpc3RpbmdBcHAiLCJBUFBfSU5TVEFMTF9TVEFURSIsImluc3RhbGxPdGhlckFwa3MiLCJvdGhlckFwcHMiLCJCIiwiYWxsIiwib3RoZXJBcHAiLCJ1bmluc3RhbGxPdGhlclBhY2thZ2VzIiwiYXBwUGFja2FnZXMiLCJmaWx0ZXJQYWNrYWdlcyIsImdldFRoaXJkUGFydHlQYWNrYWdlcyIsInBhY2thZ2VzU3RyaW5nIiwic2hlbGwiLCJhcHBQYWNrYWdlc0FycmF5Iiwic3BsaXQiLCJFT0wiLCJkaWZmZXJlbmNlIiwiZXJyIiwiaW5pdFVuaWNvZGVLZXlib2FyZCIsImRlZmF1bHRJTUUiLCJhcHBpdW1JTUUiLCJlbmFibGVJTUUiLCJzZXRJTUUiLCJzZXRNb2NrTG9jYXRpb25BcHAiLCJnZXRBcGlMZXZlbCIsImluc3RhbGxIZWxwZXJBcHAiLCJhcGtQYXRoIiwicGFja2FnZUlkIiwicmV0cnkiLCJyZXRyeUluc3RhbGxIZWxwZXJBcHAiLCJwdXNoU2V0dGluZ3NBcHAiLCJ0aHJvd0Vycm9yIiwic2V0dGluZ3NBcGtQYXRoIiwicHJvY2Vzc0V4aXN0cyIsImFwaUxldmVsIiwicGVybXMiLCJ4IiwicmVxdWlyZVJ1bm5pbmdTZXR0aW5nc0FwcCIsImlzRW11bGF0b3IiLCJwdXNoU3RyaW5ncyIsInJlbW90ZURpciIsInN0cmluZ3NKc29uIiwicmVtb3RlRmlsZSIsInBhdGgiLCJwb3NpeCIsInJlc29sdmUiLCJyaW1yYWYiLCJwdWxsQXBrIiwidG1wRGlyIiwiaXNFbXB0eSIsImZzIiwiZXhpc3RzIiwic3RyaW5nc1RtcERpciIsImFwa1N0cmluZ3MiLCJsb2NhbFBhdGgiLCJleHRyYWN0U3RyaW5nc0Zyb21BcGsiLCJ1bmxvY2tXaXRoSGVscGVyQXBwIiwiZmlyc3RSdW4iLCJsYXVuY2hIZWxwZXIiLCJpc1NjcmVlbkxvY2tlZCIsImUiLCJkZWxheSIsInVubG9jayIsImRyaXZlciIsImNhcGFiaWxpdGllcyIsInVubG9ja0tleSIsInVubG9ja1N0cmF0ZWd5IiwidW5sb2NrU3VjY2Vzc1RpbWVvdXQiLCJ1bmxvY2tlciIsInZhbGlkYXRlVW5sb2NrQ2FwYWJpbGl0aWVzIiwiRklOR0VSUFJJTlRfVU5MT0NLIiwiaXNOaWwiLCJpc0xvY2tNYW5hZ2VtZW50U3VwcG9ydGVkIiwiZmFzdFVubG9jayIsImNyZWRlbnRpYWwiLCJjcmVkZW50aWFsVHlwZSIsInVubG9ja01ldGhvZCIsInBpblVubG9jayIsInBpblVubG9ja1dpdGhLZXlFdmVudCIsInBhc3N3b3JkVW5sb2NrIiwicGF0dGVyblVubG9jayIsImZpbmdlcnByaW50VW5sb2NrIiwidmVyaWZ5VW5sb2NrIiwidGltZW91dE1zIiwid2FpdEZvckNvbmRpdGlvbiIsIndhaXRNcyIsImludGVydmFsTXMiLCJpbml0RGV2aWNlIiwic2tpcERldmljZUluaXRpYWxpemF0aW9uIiwibG9jYWxlU2NyaXB0IiwidW5pY29kZUtleWJvYXJkIiwiZGlzYWJsZVdpbmRvd0FuaW1hdGlvbiIsInNraXBVbmxvY2siLCJtb2NrTG9jYXRpb25BcHAiLCJza2lwTG9nY2F0Q2FwdHVyZSIsImxvZ2NhdEZvcm1hdCIsImxvZ2NhdEZpbHRlclNwZWNzIiwid2FpdEZvckRldmljZSIsInNob3VsZFRocm93RXJyb3IiLCJpc1VuZGVmaW5lZCIsInN0YXJ0TG9nY2F0IiwiZm9ybWF0IiwiZmlsdGVyU3BlY3MiLCJyZW1vdmVOdWxsUHJvcGVydGllcyIsIm9iaiIsImlzTnVsbCIsInRydW5jYXRlRGVjaW1hbHMiLCJudW1iZXIiLCJkaWdpdHMiLCJtdWx0aXBsaWVyIiwiTWF0aCIsInBvdyIsImFkanVzdGVkTnVtIiwidHJ1bmNhdGVkTnVtIiwiaXNDaHJvbWVCcm93c2VyIiwiZ2V0Q2hyb21lUGtnIiwicmVtb3ZlQWxsU2Vzc2lvbldlYlNvY2tldEhhbmRsZXJzIiwic2VydmVyIiwic2Vzc2lvbklkIiwiaXNGdW5jdGlvbiIsImdldFdlYlNvY2tldEhhbmRsZXJzIiwiYWN0aXZlSGFuZGxlcnMiLCJwYXRobmFtZSIsInJlbW92ZVdlYlNvY2tldEhhbmRsZXIiLCJwYXJzZUFycmF5IiwiY2FwIiwicGFyc2VkQ2FwcyIsIkpTT04iLCJwYXJzZSIsInZhbGlkYXRlRGVzaXJlZENhcHMiLCJjYXBzIiwiYnJvd3Nlck5hbWUiLCJhZGp1c3RCcm93c2VyU2Vzc2lvbkNhcHMiLCJzdHJpbmdpZnkiLCJwb3NzaWJsZU5hbWVzIiwic29tZSIsInRlc3QiLCJib290c3RyYXAiLCJCb290c3RyYXAiXSwic291cmNlUm9vdCI6Ii4uLy4uIiwic291cmNlcyI6WyJsaWIvYW5kcm9pZC1oZWxwZXJzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IHJldHJ5LCB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBmcywgdXRpbCB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IHBhdGggYXMgc2V0dGluZ3NBcGtQYXRoIH0gZnJvbSAnaW8uYXBwaXVtLnNldHRpbmdzJztcbmltcG9ydCBCb290c3RyYXAgZnJvbSAnLi9ib290c3RyYXAnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IEFEQiBmcm9tICdhcHBpdW0tYWRiJztcbmltcG9ydCB7XG4gIGRlZmF1bHQgYXMgdW5sb2NrZXIsIFBJTl9VTkxPQ0ssIFBJTl9VTkxPQ0tfS0VZX0VWRU5ULFxuICBQQVNTV09SRF9VTkxPQ0ssIFBBVFRFUk5fVU5MT0NLLCBGSU5HRVJQUklOVF9VTkxPQ0tcbn0gZnJvbSAnLi91bmxvY2staGVscGVycyc7XG5pbXBvcnQgeyBFT0wgfSBmcm9tICdvcyc7XG5pbXBvcnQgc2VtdmVyIGZyb20gJ3NlbXZlcic7XG5cbmNvbnN0IFBBQ0tBR0VfSU5TVEFMTF9USU1FT1VUID0gOTAwMDA7IC8vIG1pbGxpc2Vjb25kc1xuLy8gaHR0cHM6Ly9jcy5jaHJvbWl1bS5vcmcvY2hyb21pdW0vc3JjL2Nocm9tZS9icm93c2VyL2RldnRvb2xzL2RldmljZS9hbmRyb2lkX2RldmljZV9pbmZvX3F1ZXJ5LmNjXG5jb25zdCBDSFJPTUVfQlJPV1NFUl9QQUNLQUdFX0FDVElWSVRZID0ge1xuICBjaHJvbWU6IHtcbiAgICBwa2c6ICdjb20uYW5kcm9pZC5jaHJvbWUnLFxuICAgIGFjdGl2aXR5OiAnY29tLmdvb2dsZS5hbmRyb2lkLmFwcHMuY2hyb21lLk1haW4nLFxuICB9LFxuICBjaHJvbWl1bToge1xuICAgIHBrZzogJ29yZy5jaHJvbWl1bS5jaHJvbWUuc2hlbGwnLFxuICAgIGFjdGl2aXR5OiAnLkNocm9tZVNoZWxsQWN0aXZpdHknLFxuICB9LFxuICBjaHJvbWViZXRhOiB7XG4gICAgcGtnOiAnY29tLmNocm9tZS5iZXRhJyxcbiAgICBhY3Rpdml0eTogJ2NvbS5nb29nbGUuYW5kcm9pZC5hcHBzLmNocm9tZS5NYWluJyxcbiAgfSxcbiAgYnJvd3Nlcjoge1xuICAgIHBrZzogJ2NvbS5hbmRyb2lkLmJyb3dzZXInLFxuICAgIGFjdGl2aXR5OiAnY29tLmFuZHJvaWQuYnJvd3Nlci5Ccm93c2VyQWN0aXZpdHknLFxuICB9LFxuICAnY2hyb21pdW0tYnJvd3Nlcic6IHtcbiAgICBwa2c6ICdvcmcuY2hyb21pdW0uY2hyb21lJyxcbiAgICBhY3Rpdml0eTogJ2NvbS5nb29nbGUuYW5kcm9pZC5hcHBzLmNocm9tZS5NYWluJyxcbiAgfSxcbiAgJ2Nocm9taXVtLXdlYnZpZXcnOiB7XG4gICAgcGtnOiAnb3JnLmNocm9taXVtLndlYnZpZXdfc2hlbGwnLFxuICAgIGFjdGl2aXR5OiAnb3JnLmNocm9taXVtLndlYnZpZXdfc2hlbGwuV2ViVmlld0Jyb3dzZXJBY3Rpdml0eScsXG4gIH0sXG4gIGRlZmF1bHQ6IHtcbiAgICBwa2c6ICdjb20uYW5kcm9pZC5jaHJvbWUnLFxuICAgIGFjdGl2aXR5OiAnY29tLmdvb2dsZS5hbmRyb2lkLmFwcHMuY2hyb21lLk1haW4nLFxuICB9LFxufTtcbmNvbnN0IFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQgPSAnaW8uYXBwaXVtLnNldHRpbmdzJztcbmNvbnN0IFNFVFRJTkdTX0hFTFBFUl9VTkxPQ0tfQUNUSVZJVFkgPSAnLlVubG9jayc7XG5jb25zdCBFTVVMQVRPUl9QQVRURVJOID0gL1xcYmVtdWxhdG9yXFxiL2k7XG4vLyBUaGVzZSBjb25zdGFudHMgYXJlIGluIHN5bmMgd2l0aFxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWlhcHBsaWNhdGlvbnN0YXRlL3hjdWlhcHBsaWNhdGlvbnN0YXRlcnVubmluZ2JhY2tncm91bmQ/bGFuZ3VhZ2U9b2JqY1xuY29uc3QgQVBQX1NUQVRFID0gT2JqZWN0LmZyZWV6ZSh7XG4gIE5PVF9JTlNUQUxMRUQ6IDAsXG4gIE5PVF9SVU5OSU5HOiAxLFxuICBSVU5OSU5HX0lOX0JBQ0tHUk9VTkQ6IDMsXG4gIFJVTk5JTkdfSU5fRk9SRUdST1VORDogNFxufSk7XG5cblxuZnVuY3Rpb24gZW5zdXJlTmV0d29ya1NwZWVkIChhZGIsIG5ldHdvcmtTcGVlZCkge1xuICBpZiAoXy52YWx1ZXMoYWRiLk5FVFdPUktfU1BFRUQpLmluY2x1ZGVzKG5ldHdvcmtTcGVlZCkpIHtcbiAgICByZXR1cm4gbmV0d29ya1NwZWVkO1xuICB9XG4gIGxvZ2dlci53YXJuKGBXcm9uZyBuZXR3b3JrIHNwZWVkIHBhcmFtICcke25ldHdvcmtTcGVlZH0nLCB1c2luZyBkZWZhdWx0OiAke2FkYi5ORVRXT1JLX1NQRUVELkZVTEx9LiBgICtcbiAgICBgU3VwcG9ydGVkIHZhbHVlczogJHtfLnZhbHVlcyhhZGIuTkVUV09SS19TUEVFRCl9YCk7XG4gIHJldHVybiBhZGIuTkVUV09SS19TUEVFRC5GVUxMO1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlQXZkQXJncyAoYWRiLCBvcHRzKSB7XG4gIGNvbnN0IHtcbiAgICBuZXR3b3JrU3BlZWQsXG4gICAgaXNIZWFkbGVzcyxcbiAgICBhdmRBcmdzLFxuICB9ID0gb3B0cztcbiAgY29uc3QgcmVzdWx0ID0gW107XG4gIGlmIChhdmRBcmdzKSB7XG4gICAgaWYgKF8uaXNBcnJheShhdmRBcmdzKSkge1xuICAgICAgcmVzdWx0LnB1c2goLi4uYXZkQXJncyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wdXNoKC4uLih1dGlsLnNoZWxsUGFyc2UoYCR7YXZkQXJnc31gKSkpO1xuICAgIH1cbiAgfVxuICBpZiAobmV0d29ya1NwZWVkKSB7XG4gICAgcmVzdWx0LnB1c2goJy1uZXRzcGVlZCcsIGVuc3VyZU5ldHdvcmtTcGVlZChhZGIsIG5ldHdvcmtTcGVlZCkpO1xuICB9XG4gIGlmIChpc0hlYWRsZXNzKSB7XG4gICAgcmVzdWx0LnB1c2goJy1uby13aW5kb3cnKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiB0b0NyZWRlbnRpYWxUeXBlICh1bmxvY2tUeXBlKSB7XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICBbUElOX1VOTE9DS106ICdwaW4nLFxuICAgIFtQSU5fVU5MT0NLX0tFWV9FVkVOVF06ICdwaW4nLFxuICAgIFtQQVNTV09SRF9VTkxPQ0tdOiAncGFzc3dvcmQnLFxuICAgIFtQQVRURVJOX1VOTE9DS106ICdwYXR0ZXJuJyxcbiAgfVt1bmxvY2tUeXBlXTtcbiAgaWYgKHJlc3VsdCkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBVbmxvY2sgdHlwZSAnJHt1bmxvY2tUeXBlfScgaXMgbm90IGtub3duYCk7XG59XG5cblxuY29uc3QgaGVscGVycyA9IHt9O1xuXG5oZWxwZXJzLmNyZWF0ZUJhc2VBREIgPSBhc3luYyBmdW5jdGlvbiBjcmVhdGVCYXNlQURCIChvcHRzID0ge30pIHtcbiAgLy8gZmlsdGVyIG91dCBhbnkgdW53YW50ZWQgb3B0aW9ucyBzZW50IGluXG4gIC8vIHRoaXMgbGlzdCBzaG91bGQgYmUgdXBkYXRlZCBhcyBBREIgdGFrZXMgbW9yZSBhcmd1bWVudHNcbiAgY29uc3Qge1xuICAgIGFkYlBvcnQsXG4gICAgc3VwcHJlc3NLaWxsU2VydmVyLFxuICAgIHJlbW90ZUFkYkhvc3QsXG4gICAgY2xlYXJEZXZpY2VMb2dzT25TdGFydCxcbiAgICBhZGJFeGVjVGltZW91dCxcbiAgICB1c2VLZXlzdG9yZSxcbiAgICBrZXlzdG9yZVBhdGgsXG4gICAga2V5c3RvcmVQYXNzd29yZCxcbiAgICBrZXlBbGlhcyxcbiAgICBrZXlQYXNzd29yZCxcbiAgICByZW1vdGVBcHBzQ2FjaGVMaW1pdCxcbiAgICBidWlsZFRvb2xzVmVyc2lvbixcbiAgICBhbGxvd09mZmxpbmVEZXZpY2VzLFxuICAgIGFsbG93RGVsYXlBZGIsXG4gIH0gPSBvcHRzO1xuICByZXR1cm4gYXdhaXQgQURCLmNyZWF0ZUFEQih7XG4gICAgYWRiUG9ydCxcbiAgICBzdXBwcmVzc0tpbGxTZXJ2ZXIsXG4gICAgcmVtb3RlQWRiSG9zdCxcbiAgICBjbGVhckRldmljZUxvZ3NPblN0YXJ0LFxuICAgIGFkYkV4ZWNUaW1lb3V0LFxuICAgIHVzZUtleXN0b3JlLFxuICAgIGtleXN0b3JlUGF0aCxcbiAgICBrZXlzdG9yZVBhc3N3b3JkLFxuICAgIGtleUFsaWFzLFxuICAgIGtleVBhc3N3b3JkLFxuICAgIHJlbW90ZUFwcHNDYWNoZUxpbWl0LFxuICAgIGJ1aWxkVG9vbHNWZXJzaW9uLFxuICAgIGFsbG93T2ZmbGluZURldmljZXMsXG4gICAgYWxsb3dEZWxheUFkYixcbiAgfSk7XG59O1xuXG5oZWxwZXJzLnByZXBhcmVFbXVsYXRvciA9IGFzeW5jIGZ1bmN0aW9uIHByZXBhcmVFbXVsYXRvciAoYWRiLCBvcHRzKSB7XG4gIGNvbnN0IHtcbiAgICBhdmQsXG4gICAgYXZkRW52OiBlbnYsXG4gICAgbGFuZ3VhZ2UsXG4gICAgbG9jYWxlOiBjb3VudHJ5LFxuICAgIGF2ZExhdW5jaFRpbWVvdXQ6IGxhdW5jaFRpbWVvdXQsXG4gICAgYXZkUmVhZHlUaW1lb3V0OiByZWFkeVRpbWVvdXQsXG4gIH0gPSBvcHRzO1xuICBpZiAoIWF2ZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGxhdW5jaCBBVkQgd2l0aG91dCBBVkQgbmFtZScpO1xuICB9XG5cbiAgY29uc3QgYXZkTmFtZSA9IGF2ZC5yZXBsYWNlKCdAJywgJycpO1xuICBjb25zdCBydW5uaW5nQVZEID0gYXdhaXQgYWRiLmdldFJ1bm5pbmdBVkQoYXZkTmFtZSk7XG4gIGNvbnN0IGFyZ3MgPSBwcmVwYXJlQXZkQXJncyhhZGIsIG9wdHMpO1xuICBpZiAocnVubmluZ0FWRCkge1xuICAgIGlmIChhcmdzLmluY2x1ZGVzKCctd2lwZS1kYXRhJykpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgS2lsbGluZyAnJHthdmROYW1lfScgYmVjYXVzZSBpdCBuZWVkcyB0byBiZSB3aXBlZCBhdCBzdGFydC5gKTtcbiAgICAgIGF3YWl0IGFkYi5raWxsRW11bGF0b3IoYXZkTmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnTm90IGxhdW5jaGluZyBBVkQgYmVjYXVzZSBpdCBpcyBhbHJlYWR5IHJ1bm5pbmcuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG4gIGF3YWl0IGFkYi5sYXVuY2hBVkQoYXZkLCB7XG4gICAgYXJncyxcbiAgICBlbnYsXG4gICAgbGFuZ3VhZ2UsXG4gICAgY291bnRyeSxcbiAgICBsYXVuY2hUaW1lb3V0LFxuICAgIHJlYWR5VGltZW91dCxcbiAgfSk7XG59O1xuXG4vKipcbiAqIFNldCBhbmQgZW5zdXJlIHRoZSBsb2NhbGUgbmFtZSBvZiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGFkYiAtIFRoZSBhZGIgbW9kdWxlIGluc3RhbmNlLlxuICogQHBhcmFtIHtzdHJpbmd9IGxhbmd1YWdlIC0gTGFuZ3VhZ2UuIFRoZSBsYW5ndWFnZSBmaWVsZCBpcyBjYXNlIGluc2Vuc2l0aXZlLCBidXQgTG9jYWxlIGFsd2F5cyBjYW5vbmljYWxpemVzIHRvIGxvd2VyIGNhc2UuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6IFthLXpBLVpdezIsOH0uIGUuZy4gZW4sIGphIDogaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2phdmEvdXRpbC9Mb2NhbGUuaHRtbFxuICogQHBhcmFtIHtzdHJpbmd9IGNvdW50cnkgLSBDb3VudHJ5LiBUaGUgY291bnRyeSAocmVnaW9uKSBmaWVsZCBpcyBjYXNlIGluc2Vuc2l0aXZlLCBidXQgTG9jYWxlIGFsd2F5cyBjYW5vbmljYWxpemVzIHRvIHVwcGVyIGNhc2UuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6IFthLXpBLVpdezJ9IHwgWzAtOV17M30uIGUuZy4gVVMsIEpQIDogaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2phdmEvdXRpbC9Mb2NhbGUuaHRtbFxuICogQHBhcmFtIHs/c3RyaW5nfSBzY3JpcHQgLSBTY3JpcHQuIFRoZSBzY3JpcHQgZmllbGQgaXMgY2FzZSBpbnNlbnNpdGl2ZSBidXQgTG9jYWxlIGFsd2F5cyBjYW5vbmljYWxpemVzIHRvIHRpdGxlIGNhc2UuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6IFthLXpBLVpdezR9LiBlLmcuIEhhbnMgaW4gemgtSGFucy1DTiA6IGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9qYXZhL3V0aWwvTG9jYWxlLmh0bWxcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBpdCBmYWlsZWQgdG8gc2V0IGxvY2FsZSBwcm9wZXJseVxuICovXG5oZWxwZXJzLmVuc3VyZURldmljZUxvY2FsZSA9IGFzeW5jIGZ1bmN0aW9uIGVuc3VyZURldmljZUxvY2FsZSAoYWRiLCBsYW5ndWFnZSwgY291bnRyeSwgc2NyaXB0ID0gbnVsbCkge1xuICBpZiAoIV8uaXNTdHJpbmcobGFuZ3VhZ2UpICYmICFfLmlzU3RyaW5nKGNvdW50cnkpKSB7XG4gICAgbG9nZ2VyLndhcm4oYHNldERldmljZUxhbmd1YWdlQ291bnRyeSByZXF1aXJlcyBsYW5ndWFnZSBvciBjb3VudHJ5LmApO1xuICAgIGxvZ2dlci53YXJuKGBHb3QgbGFuZ3VhZ2U6ICcke2xhbmd1YWdlfScgYW5kIGNvdW50cnk6ICcke2NvdW50cnl9J2ApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGF3YWl0IGFkYi5zZXREZXZpY2VMYW5ndWFnZUNvdW50cnkobGFuZ3VhZ2UsIGNvdW50cnksIHNjcmlwdCk7XG5cbiAgaWYgKCFhd2FpdCBhZGIuZW5zdXJlQ3VycmVudExvY2FsZShsYW5ndWFnZSwgY291bnRyeSwgc2NyaXB0KSkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBzY3JpcHQgPyBgbGFuZ3VhZ2U6ICR7bGFuZ3VhZ2V9LCBjb3VudHJ5OiAke2NvdW50cnl9IGFuZCBzY3JpcHQ6ICR7c2NyaXB0fWAgOiBgbGFuZ3VhZ2U6ICR7bGFuZ3VhZ2V9IGFuZCBjb3VudHJ5OiAke2NvdW50cnl9YDtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBzZXQgJHttZXNzYWdlfWApO1xuICB9XG59O1xuXG5oZWxwZXJzLmdldERldmljZUluZm9Gcm9tQ2FwcyA9IGFzeW5jIGZ1bmN0aW9uIGdldERldmljZUluZm9Gcm9tQ2FwcyAob3B0cyA9IHt9KSB7XG4gIC8vIHdlIGNhbiBjcmVhdGUgYSB0aHJvd2F3YXkgQURCIGluc3RhbmNlIGhlcmUsIHNvIHRoZXJlIGlzIG5vIGRlcGVuZGVuY3lcbiAgLy8gb24gaW5zdGFudGlhdGluZyBvbiBlYXJsaWVyIChhdCB0aGlzIHBvaW50LCB3ZSBoYXZlIG5vIHVkaWQpXG4gIC8vIHdlIGNhbiBvbmx5IHVzZSB0aGlzIEFEQiBvYmplY3QgZm9yIGNvbW1hbmRzIHRoYXQgd291bGQgbm90IGJlIGNvbmZ1c2VkXG4gIC8vIGlmIG11bHRpcGxlIGRldmljZXMgYXJlIGNvbm5lY3RlZFxuICBjb25zdCBhZGIgPSBhd2FpdCBoZWxwZXJzLmNyZWF0ZUJhc2VBREIob3B0cyk7XG4gIGxldCB1ZGlkID0gb3B0cy51ZGlkO1xuICBsZXQgZW1Qb3J0ID0gbnVsbDtcblxuICAvLyBhIHNwZWNpZmljIGF2ZCBuYW1lIHdhcyBnaXZlbi4gdHJ5IHRvIGluaXRpYWxpemUgd2l0aCB0aGF0XG4gIGlmIChvcHRzLmF2ZCkge1xuICAgIGF3YWl0IGhlbHBlcnMucHJlcGFyZUVtdWxhdG9yKGFkYiwgb3B0cyk7XG4gICAgdWRpZCA9IGFkYi5jdXJEZXZpY2VJZDtcbiAgICBlbVBvcnQgPSBhZGIuZW11bGF0b3JQb3J0O1xuICB9IGVsc2Uge1xuICAgIC8vIG5vIGF2ZCBnaXZlbi4gbGV0cyB0cnkgd2hhdGV2ZXIncyBwbHVnZ2VkIGluIGRldmljZXMvZW11bGF0b3JzXG4gICAgbG9nZ2VyLmluZm8oJ1JldHJpZXZpbmcgZGV2aWNlIGxpc3QnKTtcbiAgICBsZXQgZGV2aWNlcyA9IGF3YWl0IGFkYi5nZXREZXZpY2VzV2l0aFJldHJ5KCk7XG5cbiAgICAvLyB1ZGlkIHdhcyBnaXZlbiwgbGV0cyB0cnkgdG8gaW5pdCB3aXRoIHRoYXQgZGV2aWNlXG4gICAgaWYgKHVkaWQpIHtcbiAgICAgIGlmICghXy5pbmNsdWRlcyhfLm1hcChkZXZpY2VzLCAndWRpZCcpLCB1ZGlkKSkge1xuICAgICAgICBsb2dnZXIuZXJyb3JBbmRUaHJvdyhgRGV2aWNlICR7dWRpZH0gd2FzIG5vdCBpbiB0aGUgbGlzdCBvZiBjb25uZWN0ZWQgZGV2aWNlc2ApO1xuICAgICAgfVxuICAgICAgZW1Qb3J0ID0gYWRiLmdldFBvcnRGcm9tRW11bGF0b3JTdHJpbmcodWRpZCk7XG4gICAgfSBlbHNlIGlmIChvcHRzLnBsYXRmb3JtVmVyc2lvbikge1xuICAgICAgb3B0cy5wbGF0Zm9ybVZlcnNpb24gPSBgJHtvcHRzLnBsYXRmb3JtVmVyc2lvbn1gLnRyaW0oKTtcblxuICAgICAgLy8gYSBwbGF0Zm9ybSB2ZXJzaW9uIHdhcyBnaXZlbi4gbGV0cyB0cnkgdG8gZmluZCBhIGRldmljZSB3aXRoIHRoZSBzYW1lIG9zXG4gICAgICBjb25zdCBwbGF0Zm9ybVZlcnNpb24gPSBzZW12ZXIuY29lcmNlKG9wdHMucGxhdGZvcm1WZXJzaW9uKSB8fCBvcHRzLnBsYXRmb3JtVmVyc2lvbjtcbiAgICAgIGxvZ2dlci5pbmZvKGBMb29raW5nIGZvciBhIGRldmljZSB3aXRoIEFuZHJvaWQgJyR7cGxhdGZvcm1WZXJzaW9ufSdgKTtcblxuICAgICAgLy8gaW4gY2FzZSB3ZSBmYWlsIHRvIGZpbmQgc29tZXRoaW5nLCBnaXZlIHRoZSB1c2VyIGEgdXNlZnVsIGxvZyB0aGF0IGhhc1xuICAgICAgLy8gdGhlIGRldmljZSB1ZGlkcyBhbmQgb3MgdmVyc2lvbnMgc28gdGhleSBrbm93IHdoYXQncyBhdmFpbGFibGVcbiAgICAgIGNvbnN0IGF2YWlsRGV2aWNlcyA9IFtdO1xuICAgICAgbGV0IHBhcnRpYWxNYXRjaENhbmRpZGF0ZSA9IG51bGw7XG4gICAgICAvLyBmaXJzdCB0cnkgc3RhcnRlZCBkZXZpY2VzL2VtdWxhdG9yc1xuICAgICAgZm9yIChjb25zdCBkZXZpY2Ugb2YgZGV2aWNlcykge1xuICAgICAgICAvLyBkaXJlY3QgYWRiIGNhbGxzIHRvIHRoZSBzcGVjaWZpYyBkZXZpY2VcbiAgICAgICAgYXdhaXQgYWRiLnNldERldmljZUlkKGRldmljZS51ZGlkKTtcbiAgICAgICAgY29uc3QgcmF3RGV2aWNlT1MgPSBhd2FpdCBhZGIuZ2V0UGxhdGZvcm1WZXJzaW9uKCk7XG4gICAgICAgIC8vIFRoZSBkZXZpY2UgT1MgY291bGQgZWl0aGVyIGJlIGEgbnVtYmVyLCBsaWtlIGA2LjBgXG4gICAgICAgIC8vIG9yIGFuIGFiYnJldmlhdGlvbiwgbGlrZSBgUmBcbiAgICAgICAgYXZhaWxEZXZpY2VzLnB1c2goYCR7ZGV2aWNlLnVkaWR9ICgke3Jhd0RldmljZU9TfSlgKTtcbiAgICAgICAgY29uc3QgZGV2aWNlT1MgPSBzZW12ZXIuY29lcmNlKHJhd0RldmljZU9TKSB8fCByYXdEZXZpY2VPUztcbiAgICAgICAgaWYgKCFkZXZpY2VPUykge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYm90aFZlcnNpb25zQ2FuQmVDb2VyY2VkID0gc2VtdmVyLnZhbGlkKGRldmljZU9TKSAmJiBzZW12ZXIudmFsaWQocGxhdGZvcm1WZXJzaW9uKTtcbiAgICAgICAgY29uc3QgYm90aFZlcnNpb25zQXJlU3RyaW5ncyA9IF8uaXNTdHJpbmcoZGV2aWNlT1MpICYmIF8uaXNTdHJpbmcocGxhdGZvcm1WZXJzaW9uKTtcbiAgICAgICAgaWYgKGJvdGhWZXJzaW9uc0NhbkJlQ29lcmNlZCAmJiBkZXZpY2VPUy52ZXJzaW9uID09PSBwbGF0Zm9ybVZlcnNpb24udmVyc2lvblxuICAgICAgICAgICAgfHwgYm90aFZlcnNpb25zQXJlU3RyaW5ncyAmJiBfLnRvTG93ZXIoZGV2aWNlT1MpID09PSBfLnRvTG93ZXIocGxhdGZvcm1WZXJzaW9uKSkge1xuICAgICAgICAgIC8vIEdvdCBhbiBleGFjdCBtYXRjaCAtIHByb2NlZWQgaW1tZWRpYXRlbHlcbiAgICAgICAgICB1ZGlkID0gZGV2aWNlLnVkaWQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSBpZiAoIWJvdGhWZXJzaW9uc0NhbkJlQ29lcmNlZCkge1xuICAgICAgICAgIC8vIFRoZXJlIGlzIG5vIHBvaW50IHRvIGNoZWNrIGZvciBwYXJ0aWFsIG1hdGNoIGlmIGVpdGhlciBvZiB2ZXJzaW9uIG51bWJlcnMgaXMgbm90IGNvZXJjaWJsZVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCghXy5pbmNsdWRlcyhvcHRzLnBsYXRmb3JtVmVyc2lvbiwgJy4nKSAmJiBwbGF0Zm9ybVZlcnNpb24ubWFqb3IgPT09IGRldmljZU9TLm1ham9yXG4gICAgICAgICAgICB8fCBwbGF0Zm9ybVZlcnNpb24ubWFqb3IgPT09IGRldmljZU9TLm1ham9yICYmIHBsYXRmb3JtVmVyc2lvbi5taW5vciA9PT0gZGV2aWNlT1MubWlub3IpXG4gICAgICAgICAgICAvLyBHb3QgYSBwYXJ0aWFsIG1hdGNoIC0gbWFrZSBzdXJlIHdlIGNvbnNpZGVyIHRoZSBtb3N0IHJlY2VudFxuICAgICAgICAgICAgLy8gZGV2aWNlIHZlcnNpb24gYXZhaWxhYmxlIG9uIHRoZSBob3N0IHN5c3RlbVxuICAgICAgICAgICAgJiYgKHBhcnRpYWxNYXRjaENhbmRpZGF0ZSAmJiBzZW12ZXIuZ3QoZGV2aWNlT1MsIF8udmFsdWVzKHBhcnRpYWxNYXRjaENhbmRpZGF0ZSlbMF0pXG4gICAgICAgICAgICAgICAgfHwgIXBhcnRpYWxNYXRjaENhbmRpZGF0ZSkpIHtcbiAgICAgICAgICBwYXJ0aWFsTWF0Y2hDYW5kaWRhdGUgPSB7W2RldmljZS51ZGlkXTogZGV2aWNlT1N9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIXVkaWQgJiYgcGFydGlhbE1hdGNoQ2FuZGlkYXRlKSB7XG4gICAgICAgIHVkaWQgPSBfLmtleXMocGFydGlhbE1hdGNoQ2FuZGlkYXRlKVswXTtcbiAgICAgICAgYXdhaXQgYWRiLnNldERldmljZUlkKHVkaWQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXVkaWQpIHtcbiAgICAgICAgLy8gd2UgY291bGRuJ3QgZmluZCBhbnl0aGluZyEgcXVpdFxuICAgICAgICBsb2dnZXIuZXJyb3JBbmRUaHJvdyhgVW5hYmxlIHRvIGZpbmQgYW4gYWN0aXZlIGRldmljZSBvciBlbXVsYXRvciBgICtcbiAgICAgICAgICBgd2l0aCBPUyAke29wdHMucGxhdGZvcm1WZXJzaW9ufS4gVGhlIGZvbGxvd2luZyBhcmUgYXZhaWxhYmxlOiBgICtcbiAgICAgICAgICBhdmFpbERldmljZXMuam9pbignLCAnKSk7XG4gICAgICB9XG5cbiAgICAgIGVtUG9ydCA9IGFkYi5nZXRQb3J0RnJvbUVtdWxhdG9yU3RyaW5nKHVkaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhIHVkaWQgd2FzIG5vdCBnaXZlbiwgZ3JhYiB0aGUgZmlyc3QgZGV2aWNlIHdlIHNlZVxuICAgICAgdWRpZCA9IGRldmljZXNbMF0udWRpZDtcbiAgICAgIGVtUG9ydCA9IGFkYi5nZXRQb3J0RnJvbUVtdWxhdG9yU3RyaW5nKHVkaWQpO1xuICAgIH1cbiAgfVxuXG4gIGxvZ2dlci5pbmZvKGBVc2luZyBkZXZpY2U6ICR7dWRpZH1gKTtcbiAgcmV0dXJuIHt1ZGlkLCBlbVBvcnR9O1xufTtcblxuLy8gcmV0dXJucyBhIG5ldyBhZGIgaW5zdGFuY2Ugd2l0aCBkZXZpY2VJZCBzZXRcbmhlbHBlcnMuY3JlYXRlQURCID0gYXN5bmMgZnVuY3Rpb24gY3JlYXRlQURCIChvcHRzID0ge30pIHtcbiAgY29uc3Qge3VkaWQsIGVtUG9ydH0gPSBvcHRzO1xuICBjb25zdCBhZGIgPSBhd2FpdCBoZWxwZXJzLmNyZWF0ZUJhc2VBREIob3B0cyk7XG4gIGFkYi5zZXREZXZpY2VJZCh1ZGlkKTtcbiAgaWYgKGVtUG9ydCkge1xuICAgIGFkYi5zZXRFbXVsYXRvclBvcnQoZW1Qb3J0KTtcbiAgfVxuXG4gIHJldHVybiBhZGI7XG59O1xuXG5oZWxwZXJzLnZhbGlkYXRlUGFja2FnZUFjdGl2aXR5TmFtZXMgPSBmdW5jdGlvbiB2YWxpZGF0ZVBhY2thZ2VBY3Rpdml0eU5hbWVzIChvcHRzKSB7XG4gIGZvciAoY29uc3Qga2V5IG9mIFsnYXBwUGFja2FnZScsICdhcHBBY3Rpdml0eScsICdhcHBXYWl0UGFja2FnZScsICdhcHBXYWl0QWN0aXZpdHknXSkge1xuICAgIGNvbnN0IG5hbWUgPSBvcHRzW2tleV07XG4gICAgaWYgKCFuYW1lKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBtYXRjaCA9IC8oW15cXHcuKixdKSsvLmV4ZWMobmFtZSk7XG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgbG9nZ2VyLndhcm4oYENhcGFiaWxpdHkgJyR7a2V5fScgaXMgZXhwZWN0ZWQgdG8gb25seSBpbmNsdWRlIGxhdGluIGxldHRlcnMsIGRpZ2l0cywgdW5kZXJzY29yZSwgZG90LCBjb21tYSBhbmQgYXN0ZXJpc2sgY2hhcmFjdGVycy5gKTtcbiAgICBsb2dnZXIud2FybihgQ3VycmVudCB2YWx1ZSAnJHtuYW1lfScgaGFzIG5vbi1tYXRjaGluZyBjaGFyYWN0ZXIgYXQgaW5kZXggJHttYXRjaC5pbmRleH06ICcke25hbWUuc3Vic3RyaW5nKDAsIG1hdGNoLmluZGV4ICsgMSl9J2ApO1xuICB9XG59O1xuXG5oZWxwZXJzLmdldExhdW5jaEluZm8gPSBhc3luYyBmdW5jdGlvbiBnZXRMYXVuY2hJbmZvIChhZGIsIG9wdHMpIHtcbiAgbGV0IHthcHAsIGFwcFBhY2thZ2UsIGFwcEFjdGl2aXR5LCBhcHBXYWl0UGFja2FnZSwgYXBwV2FpdEFjdGl2aXR5fSA9IG9wdHM7XG4gIGlmICghYXBwKSB7XG4gICAgbG9nZ2VyLndhcm4oJ05vIGFwcCBzZW50IGluLCBub3QgcGFyc2luZyBwYWNrYWdlL2FjdGl2aXR5Jyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy52YWxpZGF0ZVBhY2thZ2VBY3Rpdml0eU5hbWVzKG9wdHMpO1xuXG4gIGlmIChhcHBQYWNrYWdlICYmIGFwcEFjdGl2aXR5KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKCdQYXJzaW5nIHBhY2thZ2UgYW5kIGFjdGl2aXR5IGZyb20gYXBwIG1hbmlmZXN0Jyk7XG4gIGxldCB7YXBrUGFja2FnZSwgYXBrQWN0aXZpdHl9ID1cbiAgICBhd2FpdCBhZGIucGFja2FnZUFuZExhdW5jaEFjdGl2aXR5RnJvbU1hbmlmZXN0KGFwcCk7XG4gIGlmIChhcGtQYWNrYWdlICYmICFhcHBQYWNrYWdlKSB7XG4gICAgYXBwUGFja2FnZSA9IGFwa1BhY2thZ2U7XG4gIH1cbiAgaWYgKCFhcHBXYWl0UGFja2FnZSkge1xuICAgIGFwcFdhaXRQYWNrYWdlID0gYXBwUGFja2FnZTtcbiAgfVxuICBpZiAoYXBrQWN0aXZpdHkgJiYgIWFwcEFjdGl2aXR5KSB7XG4gICAgYXBwQWN0aXZpdHkgPSBhcGtBY3Rpdml0eTtcbiAgfVxuICBpZiAoIWFwcFdhaXRBY3Rpdml0eSkge1xuICAgIGFwcFdhaXRBY3Rpdml0eSA9IGFwcEFjdGl2aXR5O1xuICB9XG4gIGxvZ2dlci5kZWJ1ZyhgUGFyc2VkIHBhY2thZ2UgYW5kIGFjdGl2aXR5IGFyZTogJHthcGtQYWNrYWdlfS8ke2Fwa0FjdGl2aXR5fWApO1xuICByZXR1cm4ge2FwcFBhY2thZ2UsIGFwcFdhaXRQYWNrYWdlLCBhcHBBY3Rpdml0eSwgYXBwV2FpdEFjdGl2aXR5fTtcbn07XG5cbmhlbHBlcnMucmVzZXRBcHAgPSBhc3luYyBmdW5jdGlvbiByZXNldEFwcCAoYWRiLCBvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBhcHBQYWNrYWdlLFxuICAgIGZhc3RSZXNldCxcbiAgICBmdWxsUmVzZXQsXG4gICAgYW5kcm9pZEluc3RhbGxUaW1lb3V0ID0gUEFDS0FHRV9JTlNUQUxMX1RJTUVPVVQsXG4gICAgYXV0b0dyYW50UGVybWlzc2lvbnMsXG4gICAgYWxsb3dUZXN0UGFja2FnZXNcbiAgfSA9IG9wdHM7XG5cbiAgaWYgKCFhcHBQYWNrYWdlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiJ2FwcFBhY2thZ2UnIG9wdGlvbiBpcyByZXF1aXJlZFwiKTtcbiAgfVxuXG4gIGNvbnN0IGlzSW5zdGFsbGVkID0gYXdhaXQgYWRiLmlzQXBwSW5zdGFsbGVkKGFwcFBhY2thZ2UpO1xuXG4gIGlmIChpc0luc3RhbGxlZCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBhZGIuZm9yY2VTdG9wKGFwcFBhY2thZ2UpO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICAvLyBmdWxsUmVzZXQgaGFzIHByaW9yaXR5IG92ZXIgZmFzdFJlc2V0XG4gICAgaWYgKCFmdWxsUmVzZXQgJiYgZmFzdFJlc2V0KSB7XG4gICAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBhZGIuY2xlYXIoYXBwUGFja2FnZSk7XG4gICAgICBpZiAoXy5pc1N0cmluZyhvdXRwdXQpICYmIG91dHB1dC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdmYWlsZWQnKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjbGVhciB0aGUgYXBwbGljYXRpb24gZGF0YSBvZiAnJHthcHBQYWNrYWdlfScuIE9yaWdpbmFsIGVycm9yOiAke291dHB1dH1gKTtcbiAgICAgIH1cbiAgICAgIC8vIGV4ZWN1dGluZyBgc2hlbGwgcG0gY2xlYXJgIHJlc2V0cyBwcmV2aW91c2x5IGFzc2lnbmVkIGFwcGxpY2F0aW9uIHBlcm1pc3Npb25zIGFzIHdlbGxcbiAgICAgIGlmIChhdXRvR3JhbnRQZXJtaXNzaW9ucykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGFkYi5ncmFudEFsbFBlcm1pc3Npb25zKGFwcFBhY2thZ2UpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGxvZ2dlci5lcnJvcihgVW5hYmxlIHRvIGdyYW50IHBlcm1pc3Npb25zIHJlcXVlc3RlZC4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbG9nZ2VyLmRlYnVnKGBQZXJmb3JtZWQgZmFzdCByZXNldCBvbiB0aGUgaW5zdGFsbGVkICcke2FwcFBhY2thZ2V9JyBhcHBsaWNhdGlvbiAoc3RvcCBhbmQgY2xlYXIpYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaWYgKCFhcHApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCInYXBwJyBvcHRpb24gaXMgcmVxdWlyZWQgZm9yIHJlaW5zdGFsbFwiKTtcbiAgfVxuXG4gIGxvZ2dlci5kZWJ1ZyhgUnVubmluZyBmdWxsIHJlc2V0IG9uICcke2FwcFBhY2thZ2V9JyAocmVpbnN0YWxsKWApO1xuICBpZiAoaXNJbnN0YWxsZWQpIHtcbiAgICBhd2FpdCBhZGIudW5pbnN0YWxsQXBrKGFwcFBhY2thZ2UpO1xuICB9XG4gIGF3YWl0IGFkYi5pbnN0YWxsKGFwcCwge1xuICAgIGdyYW50UGVybWlzc2lvbnM6IGF1dG9HcmFudFBlcm1pc3Npb25zLFxuICAgIHRpbWVvdXQ6IGFuZHJvaWRJbnN0YWxsVGltZW91dCxcbiAgICBhbGxvd1Rlc3RQYWNrYWdlcyxcbiAgfSk7XG59O1xuXG5oZWxwZXJzLmluc3RhbGxBcGsgPSBhc3luYyBmdW5jdGlvbiBpbnN0YWxsQXBrIChhZGIsIG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGFwcFBhY2thZ2UsXG4gICAgZmFzdFJlc2V0LFxuICAgIGZ1bGxSZXNldCxcbiAgICBhbmRyb2lkSW5zdGFsbFRpbWVvdXQgPSBQQUNLQUdFX0lOU1RBTExfVElNRU9VVCxcbiAgICBhdXRvR3JhbnRQZXJtaXNzaW9ucyxcbiAgICBhbGxvd1Rlc3RQYWNrYWdlcyxcbiAgICBlbmZvcmNlQXBwSW5zdGFsbCxcbiAgfSA9IG9wdHM7XG5cbiAgaWYgKCFhcHAgfHwgIWFwcFBhY2thZ2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCInYXBwJyBhbmQgJ2FwcFBhY2thZ2UnIG9wdGlvbnMgYXJlIHJlcXVpcmVkXCIpO1xuICB9XG5cbiAgaWYgKGZ1bGxSZXNldCkge1xuICAgIGF3YWl0IHRoaXMucmVzZXRBcHAoYWRiLCBvcHRzKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB7XG4gICAgYXBwU3RhdGUsXG4gICAgd2FzVW5pbnN0YWxsZWRcbiAgfSA9IGF3YWl0IGFkYi5pbnN0YWxsT3JVcGdyYWRlKGFwcCwgYXBwUGFja2FnZSwge1xuICAgIGdyYW50UGVybWlzc2lvbnM6IGF1dG9HcmFudFBlcm1pc3Npb25zLFxuICAgIHRpbWVvdXQ6IGFuZHJvaWRJbnN0YWxsVGltZW91dCxcbiAgICBhbGxvd1Rlc3RQYWNrYWdlcyxcbiAgICBlbmZvcmNlQ3VycmVudEJ1aWxkOiBlbmZvcmNlQXBwSW5zdGFsbCxcbiAgfSk7XG5cbiAgLy8gVGhlcmUgaXMgbm8gbmVlZCB0byByZXNldCB0aGUgbmV3bHkgaW5zdGFsbGVkIGFwcFxuICBjb25zdCBpc0luc3RhbGxlZE92ZXJFeGlzdGluZ0FwcCA9ICF3YXNVbmluc3RhbGxlZFxuICAgICYmIGFwcFN0YXRlICE9PSBhZGIuQVBQX0lOU1RBTExfU1RBVEUuTk9UX0lOU1RBTExFRDtcbiAgaWYgKGZhc3RSZXNldCAmJiBpc0luc3RhbGxlZE92ZXJFeGlzdGluZ0FwcCkge1xuICAgIGxvZ2dlci5pbmZvKGBQZXJmb3JtaW5nIGZhc3QgcmVzZXQgb24gJyR7YXBwUGFja2FnZX0nYCk7XG4gICAgYXdhaXQgdGhpcy5yZXNldEFwcChhZGIsIG9wdHMpO1xuICB9XG59O1xuXG4vKipcbiAqIEluc3RhbGxzIGFuIGFycmF5IG9mIGFwa3NcbiAqIEBwYXJhbSB7QURCfSBhZGIgSW5zdGFuY2Ugb2YgQXBwaXVtIEFEQiBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIE9wdHMgZGVmaW5lZCBpbiBkcml2ZXIuanNcbiAqL1xuaGVscGVycy5pbnN0YWxsT3RoZXJBcGtzID0gYXN5bmMgZnVuY3Rpb24gaW5zdGFsbE90aGVyQXBrcyAob3RoZXJBcHBzLCBhZGIsIG9wdHMpIHtcbiAgbGV0IHtcbiAgICBhbmRyb2lkSW5zdGFsbFRpbWVvdXQgPSBQQUNLQUdFX0lOU1RBTExfVElNRU9VVCxcbiAgICBhdXRvR3JhbnRQZXJtaXNzaW9ucyxcbiAgICBhbGxvd1Rlc3RQYWNrYWdlc1xuICB9ID0gb3B0cztcblxuICAvLyBJbnN0YWxsIGFsbCBvZiB0aGUgQVBLJ3MgYXN5bmNocm9ub3VzbHlcbiAgYXdhaXQgQi5hbGwob3RoZXJBcHBzLm1hcCgob3RoZXJBcHApID0+IHtcbiAgICBsb2dnZXIuZGVidWcoYEluc3RhbGxpbmcgYXBwOiAke290aGVyQXBwfWApO1xuICAgIHJldHVybiBhZGIuaW5zdGFsbE9yVXBncmFkZShvdGhlckFwcCwgbnVsbCwge1xuICAgICAgZ3JhbnRQZXJtaXNzaW9uczogYXV0b0dyYW50UGVybWlzc2lvbnMsXG4gICAgICB0aW1lb3V0OiBhbmRyb2lkSW5zdGFsbFRpbWVvdXQsXG4gICAgICBhbGxvd1Rlc3RQYWNrYWdlcyxcbiAgICB9KTtcbiAgfSkpO1xufTtcblxuLyoqXG4gKiBVbmluc3RhbGwgYW4gYXJyYXkgb2YgcGFja2FnZXNcbiAqIEBwYXJhbSB7QURCfSBhZGIgSW5zdGFuY2Ugb2YgQXBwaXVtIEFEQiBvYmplY3RcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gYXBwUGFja2FnZXMgQW4gYXJyYXkgb2YgcGFja2FnZSBuYW1lcyB0byB1bmluc3RhbGwuIElmIHRoaXMgaW5jbHVkZXMgYCcqJ2AsIHVuaW5zdGFsbCBhbGwgb2YgM3JkIHBhcnR5IGFwcHNcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gZmlsdGVyUGFja2FnZXMgQW4gYXJyYXkgb2YgcGFja2FnZXMgZG9lcyBub3QgdW5pbnN0YWxsIHdoZW4gYCpgIGlzIHByb3ZpZGVkIGFzIGBhcHBQYWNrYWdlc2BcbiAqL1xuaGVscGVycy51bmluc3RhbGxPdGhlclBhY2thZ2VzID0gYXN5bmMgZnVuY3Rpb24gdW5pbnN0YWxsT3RoZXJQYWNrYWdlcyAoYWRiLCBhcHBQYWNrYWdlcywgZmlsdGVyUGFja2FnZXMgPSBbXSkge1xuICBpZiAoYXBwUGFja2FnZXMuaW5jbHVkZXMoJyonKSkge1xuICAgIGxvZ2dlci5kZWJ1ZygnVW5pbnN0YWxsIHRoaXJkIHBhcnR5IHBhY2thZ2VzJyk7XG4gICAgYXBwUGFja2FnZXMgPSBhd2FpdCB0aGlzLmdldFRoaXJkUGFydHlQYWNrYWdlcyhhZGIsIGZpbHRlclBhY2thZ2VzKTtcbiAgfVxuXG4gIGxvZ2dlci5kZWJ1ZyhgVW5pbnN0YWxsaW5nIHBhY2thZ2VzOiAke2FwcFBhY2thZ2VzfWApO1xuICBhd2FpdCBCLmFsbChhcHBQYWNrYWdlcy5tYXAoKGFwcFBhY2thZ2UpID0+IGFkYi51bmluc3RhbGxBcGsoYXBwUGFja2FnZSkpKTtcbn07XG5cbi8qKlxuICogR2V0IHRoaXJkIHBhcnR5IHBhY2thZ2VzIGZpbHRlcmVkIHdpdGggYGZpbHRlclBhY2thZ2VzYFxuICogQHBhcmFtIHtBREJ9IGFkYiBJbnN0YW5jZSBvZiBBcHBpdW0gQURCIG9iamVjdFxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBmaWx0ZXJQYWNrYWdlcyBBbiBhcnJheSBvZiBwYWNrYWdlcyBkb2VzIG5vdCB1bmluc3RhbGwgd2hlbiBgKmAgaXMgcHJvdmlkZWQgYXMgYGFwcFBhY2thZ2VzYFxuICogQHJldHVybnMge0FycmF5PHN0cmluZz59IEFuIGFycmF5IG9mIGluc3RhbGxlZCB0aGlyZCBwYXJ5IHBhY2thZ2VzXG4gKi9cbmhlbHBlcnMuZ2V0VGhpcmRQYXJ0eVBhY2thZ2VzID0gYXN5bmMgZnVuY3Rpb24gZ2V0VGhpcmRQYXJ0eVBhY2thZ2VzIChhZGIsIGZpbHRlclBhY2thZ2VzID0gW10pIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYWNrYWdlc1N0cmluZyA9IGF3YWl0IGFkYi5zaGVsbChbJ3BtJywgJ2xpc3QnLCAncGFja2FnZXMnLCAnLTMnXSk7XG4gICAgY29uc3QgYXBwUGFja2FnZXNBcnJheSA9IHBhY2thZ2VzU3RyaW5nLnRyaW0oKS5yZXBsYWNlKC9wYWNrYWdlOi9nLCAnJykuc3BsaXQoRU9MKTtcbiAgICBsb2dnZXIuZGVidWcoYCcke2FwcFBhY2thZ2VzQXJyYXl9JyBmaWx0ZXJlZCB3aXRoICcke2ZpbHRlclBhY2thZ2VzfSdgKTtcbiAgICByZXR1cm4gXy5kaWZmZXJlbmNlKGFwcFBhY2thZ2VzQXJyYXksIGZpbHRlclBhY2thZ2VzKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLndhcm4oYFVuYWJsZSB0byBnZXQgcGFja2FnZXMgd2l0aCAnYWRiIHNoZWxsIHBtIGxpc3QgcGFja2FnZXMgLTMnOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIHJldHVybiBbXTtcbiAgfVxufTtcblxuaGVscGVycy5pbml0VW5pY29kZUtleWJvYXJkID0gYXN5bmMgZnVuY3Rpb24gaW5pdFVuaWNvZGVLZXlib2FyZCAoYWRiKSB7XG4gIGxvZ2dlci5kZWJ1ZygnRW5hYmxpbmcgVW5pY29kZSBrZXlib2FyZCBzdXBwb3J0Jyk7XG5cbiAgLy8gZ2V0IHRoZSBkZWZhdWx0IElNRSBzbyB3ZSBjYW4gcmV0dXJuIGJhY2sgdG8gaXQgbGF0ZXIgaWYgd2Ugd2FudFxuICBsZXQgZGVmYXVsdElNRSA9IGF3YWl0IGFkYi5kZWZhdWx0SU1FKCk7XG5cbiAgbG9nZ2VyLmRlYnVnKGBVbnNldHRpbmcgcHJldmlvdXMgSU1FICR7ZGVmYXVsdElNRX1gKTtcbiAgY29uc3QgYXBwaXVtSU1FID0gYCR7U0VUVElOR1NfSEVMUEVSX1BLR19JRH0vLlVuaWNvZGVJTUVgO1xuICBsb2dnZXIuZGVidWcoYFNldHRpbmcgSU1FIHRvICcke2FwcGl1bUlNRX0nYCk7XG4gIGF3YWl0IGFkYi5lbmFibGVJTUUoYXBwaXVtSU1FKTtcbiAgYXdhaXQgYWRiLnNldElNRShhcHBpdW1JTUUpO1xuICByZXR1cm4gZGVmYXVsdElNRTtcbn07XG5cbmhlbHBlcnMuc2V0TW9ja0xvY2F0aW9uQXBwID0gYXN5bmMgZnVuY3Rpb24gc2V0TW9ja0xvY2F0aW9uQXBwIChhZGIsIGFwcCkge1xuICB0cnkge1xuICAgIGlmIChhd2FpdCBhZGIuZ2V0QXBpTGV2ZWwoKSA8IDIzKSB7XG4gICAgICBhd2FpdCBhZGIuc2hlbGwoWydzZXR0aW5ncycsICdwdXQnLCAnc2VjdXJlJywgJ21vY2tfbG9jYXRpb24nLCAnMSddKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgYWRiLnNoZWxsKFsnYXBwb3BzJywgJ3NldCcsIGFwcCwgJ2FuZHJvaWQ6bW9ja19sb2NhdGlvbicsICdhbGxvdyddKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci53YXJuKGBVbmFibGUgdG8gc2V0IG1vY2sgbG9jYXRpb24gZm9yIGFwcCAnJHthcHB9JzogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuaGVscGVycy5pbnN0YWxsSGVscGVyQXBwID0gYXN5bmMgZnVuY3Rpb24gaW5zdGFsbEhlbHBlckFwcCAoYWRiLCBhcGtQYXRoLCBwYWNrYWdlSWQpIHtcbiAgLy8gU29tZXRpbWVzIGFkYiBwdXNoIG9yIGFkYiBpbnN0YWwgdGFrZSBtb3JlIHRpbWUgdGhhbiBleHBlY3RlZCB0byBpbnN0YWxsIGFuIGFwcFxuICAvLyBlLmcuIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vaW8uYXBwaXVtLnNldHRpbmdzL2lzc3Vlcy80MCNpc3N1ZWNvbW1lbnQtNDc2NTkzMTc0XG4gIGF3YWl0IHJldHJ5KDIsIGFzeW5jIGZ1bmN0aW9uIHJldHJ5SW5zdGFsbEhlbHBlckFwcCAoKSB7XG4gICAgYXdhaXQgYWRiLmluc3RhbGxPclVwZ3JhZGUoYXBrUGF0aCwgcGFja2FnZUlkLCB7Z3JhbnRQZXJtaXNzaW9uczogdHJ1ZX0pO1xuICB9KTtcbn07XG5cbi8qKlxuICogUHVzaGVzIGFuZCBpbnN0YWxscyBpby5hcHBpdW0uc2V0dGluZ3MgYXBwLlxuICogVGhyb3dzIGFuIGVycm9yIGlmIHRoZSBzZXR0aW5nIGFwcCBpcyByZXF1aXJlZFxuICpcbiAqIEBwYXJhbSB7QWRifSBhZGIgLSBUaGUgYWRiIG1vZHVsZSBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gRHJpdmVyIG9wdGlvbnMgZGljdGlvbmFyeS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdGhyb3dFcnJvciBbZmFsc2VdIC0gV2hldGhlciB0aHJvdyBhbiBlcnJvciBpZiBTZXR0aW5ncyBhcHAgZmFpbHMgdG8gc3RhcnRcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aHJvd0Vycm9yIGlzIHRydWUgYW5kIHNvbWV0aGluZyBoYXBwZW5zIGluIGluc3RhbGxhdGlvbiBzdGVwXG4gKi9cbmhlbHBlcnMucHVzaFNldHRpbmdzQXBwID0gYXN5bmMgZnVuY3Rpb24gcHVzaFNldHRpbmdzQXBwIChhZGIsIHRocm93RXJyb3IgPSBmYWxzZSwgb3B0cyA9IHt9KSB7XG4gIGxvZ2dlci5kZWJ1ZygnUHVzaGluZyBzZXR0aW5ncyBhcGsgdG8gZGV2aWNlLi4uJyk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBoZWxwZXJzLmluc3RhbGxIZWxwZXJBcHAoYWRiLCBzZXR0aW5nc0Fwa1BhdGgsIFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQsIHRocm93RXJyb3IpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAodGhyb3dFcnJvcikge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cblxuICAgIGxvZ2dlci53YXJuKGBJZ25vcmVkIGVycm9yIHdoaWxlIGluc3RhbGxpbmcgJyR7c2V0dGluZ3NBcGtQYXRofSc6IGAgK1xuICAgICAgICAgICAgICAgIGAnJHtlcnIubWVzc2FnZX0nLiBGZWF0dXJlcyB0aGF0IHJlbHkgb24gdGhpcyBoZWxwZXIgYCArXG4gICAgICAgICAgICAgICAgJ3JlcXVpcmUgdGhlIGFwayBzdWNoIGFzIHRvZ2dsZSBXaUZpIGFuZCBnZXR0aW5nIGxvY2F0aW9uICcgK1xuICAgICAgICAgICAgICAgICd3aWxsIHJhaXNlIGFuIGVycm9yIGlmIHlvdSB0cnkgdG8gdXNlIHRoZW0uJyk7XG4gIH1cblxuICAvLyBSZWluc3RhbGwgd291bGQgc3RvcCB0aGUgc2V0dGluZ3MgaGVscGVyIHByb2Nlc3MgYW55d2F5LCBzb1xuICAvLyB0aGVyZSBpcyBubyBuZWVkIHRvIGNvbnRpbnVlIGlmIHRoZSBhcHBsaWNhdGlvbiBpcyBzdGlsbCBydW5uaW5nXG4gIGlmIChhd2FpdCBhZGIucHJvY2Vzc0V4aXN0cyhTRVRUSU5HU19IRUxQRVJfUEtHX0lEKSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgJHtTRVRUSU5HU19IRUxQRVJfUEtHX0lEfSBpcyBhbHJlYWR5IHJ1bm5pbmcuIGAgK1xuICAgICAgYFRoZXJlIGlzIG5vIG5lZWQgdG8gcmVzZXQgaXRzIHBlcm1pc3Npb25zLmApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGFwaUxldmVsID0gYXdhaXQgYWRiLmdldEFwaUxldmVsKCk7XG4gIGlmIChhcGlMZXZlbCA+PSAyOSkge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vaW8uYXBwaXVtLnNldHRpbmdzI2ludGVybmFsLWF1ZGlvLS12aWRlby1yZWNvcmRpbmdcbiAgICB0cnkge1xuICAgICAgYXdhaXQgYWRiLnNoZWxsKFsnYXBwb3BzJywgJ3NldCcsIFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQsICdQUk9KRUNUX01FRElBJywgJ2FsbG93J10pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLmRlYnVnKGVycik7XG4gICAgfVxuICB9XG4gIGlmIChhcGlMZXZlbCA8PSAyMykgeyAvLyBBbmRyb2lkIDYtIGRldmljZXMgc2hvdWxkIGhhdmUgZ3JhbnRlZCBwZXJtaXNzaW9uc1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL3B1bGwvMTE2NDAjaXNzdWVjb21tZW50LTQzODI2MDQ3N1xuICAgIGNvbnN0IHBlcm1zID0gWydTRVRfQU5JTUFUSU9OX1NDQUxFJywgJ0NIQU5HRV9DT05GSUdVUkFUSU9OJywgJ0FDQ0VTU19GSU5FX0xPQ0FUSU9OJ107XG4gICAgbG9nZ2VyLmluZm8oYEdyYW50aW5nIHBlcm1pc3Npb25zICR7cGVybXN9IHRvICcke1NFVFRJTkdTX0hFTFBFUl9QS0dfSUR9J2ApO1xuICAgIGF3YWl0IGFkYi5ncmFudFBlcm1pc3Npb25zKFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQsIHBlcm1zLm1hcCgoeCkgPT4gYGFuZHJvaWQucGVybWlzc2lvbi4ke3h9YCkpO1xuICB9XG5cbiAgLy8gbGF1bmNoIGlvLmFwcGl1bS5zZXR0aW5ncyBhcHAgZHVlIHRvIHNldHRpbmdzIGZhaWxpbmcgdG8gYmUgc2V0XG4gIC8vIGlmIHRoZSBhcHAgaXMgbm90IGxhdW5jaGVkIHByaW9yIHRvIHN0YXJ0IHRoZSBzZXNzaW9uIG9uIGFuZHJvaWQgNytcbiAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2lzc3Vlcy84OTU3XG4gIHRyeSB7XG4gICAgYXdhaXQgYWRiLnJlcXVpcmVSdW5uaW5nU2V0dGluZ3NBcHAoe1xuICAgICAgdGltZW91dDogaGVscGVycy5pc0VtdWxhdG9yKGFkYiwgb3B0cykgPyAzMDAwMCA6IDUwMDBcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGVycik7XG4gICAgaWYgKHRocm93RXJyb3IpIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogRXh0cmFjdHMgc3RyaW5nLnhtbCBhbmQgY29udmVydHMgaXQgdG8gc3RyaW5nLmpzb24gYW5kIHB1c2hlc1xuICogaXQgdG8gL2RhdGEvbG9jYWwvdG1wL3N0cmluZy5qc29uIG9uIGZvciB1c2Ugb2YgYm9vdHN0cmFwXG4gKiBJZiBhcHAgaXMgbm90IHByZXNlbnQgdG8gZXh0cmFjdCBzdHJpbmcueG1sIGl0IGRlbGV0ZXMgcmVtb3RlIHN0cmluZ3MuanNvblxuICogSWYgYXBwIGRvZXMgbm90IGhhdmUgc3RyaW5ncy54bWwgd2UgcHVzaCBhbiBlbXB0eSBqc29uIG9iamVjdCB0byByZW1vdGVcbiAqXG4gKiBAcGFyYW0gez9zdHJpbmd9IGxhbmd1YWdlIC0gTGFuZ3VhZ2UgYWJicmV2aWF0aW9uLCBmb3IgZXhhbXBsZSAnZnInLiBUaGUgZGVmYXVsdCBsYW5ndWFnZVxuICogaXMgdXNlZCBpZiB0aGlzIGFyZ3VtZW50IGlzIG5vdCBkZWZpbmVkLlxuICogQHBhcmFtIHtPYmplY3R9IGFkYiAtIFRoZSBhZGIgbW9kdWxlIGluc3RhbmNlLlxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBEcml2ZXIgb3B0aW9ucyBkaWN0aW9uYXJ5LlxuICogQHJldHVybnMge09iamVjdH0gVGhlIGRpY3Rpb25hcnksIHdoZXJlIHN0cmluZyByZXNvdXJjZSBpZGVudGlmaWVycyBhcmUga2V5c1xuICogYWxvbmcgd2l0aCB0aGVpciBjb3JyZXNwb25kaW5nIHZhbHVlcyBmb3IgdGhlIGdpdmVuIGxhbmd1YWdlIG9yIGFuIGVtcHR5IG9iamVjdFxuICogaWYgbm8gbWF0Y2hpbmcgcmVzb3VyY2VzIHdlcmUgZXh0cmFjdGVkLlxuICovXG5oZWxwZXJzLnB1c2hTdHJpbmdzID0gYXN5bmMgZnVuY3Rpb24gcHVzaFN0cmluZ3MgKGxhbmd1YWdlLCBhZGIsIG9wdHMpIHtcbiAgY29uc3QgcmVtb3RlRGlyID0gJy9kYXRhL2xvY2FsL3RtcCc7XG4gIGNvbnN0IHN0cmluZ3NKc29uID0gJ3N0cmluZ3MuanNvbic7XG4gIGNvbnN0IHJlbW90ZUZpbGUgPSBwYXRoLnBvc2l4LnJlc29sdmUocmVtb3RlRGlyLCBzdHJpbmdzSnNvbik7XG5cbiAgLy8gY2xlYW4gdXAgcmVtb3RlIHN0cmluZy5qc29uIGlmIHByZXNlbnRcbiAgYXdhaXQgYWRiLnJpbXJhZihyZW1vdGVGaWxlKTtcblxuICBsZXQgYXBwO1xuICB0cnkge1xuICAgIGFwcCA9IG9wdHMuYXBwIHx8IGF3YWl0IGFkYi5wdWxsQXBrKG9wdHMuYXBwUGFja2FnZSwgb3B0cy50bXBEaXIpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIuaW5mbyhgRmFpbGVkIHRvIHB1bGwgYW4gYXBrIGZyb20gJyR7b3B0cy5hcHBQYWNrYWdlfScgdG8gJyR7b3B0cy50bXBEaXJ9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cblxuICBpZiAoXy5pc0VtcHR5KG9wdHMuYXBwUGFja2FnZSkgfHwgIShhd2FpdCBmcy5leGlzdHMoYXBwKSkpIHtcbiAgICBsb2dnZXIuZGVidWcoYE5vIGFwcCBvciBwYWNrYWdlIHNwZWNpZmllZC4gUmV0dXJuaW5nIGVtcHR5IHN0cmluZ3NgKTtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjb25zdCBzdHJpbmdzVG1wRGlyID0gcGF0aC5yZXNvbHZlKG9wdHMudG1wRGlyLCBvcHRzLmFwcFBhY2thZ2UpO1xuICB0cnkge1xuICAgIGxvZ2dlci5kZWJ1ZygnRXh0cmFjdGluZyBzdHJpbmdzIGZyb20gYXBrJywgYXBwLCBsYW5ndWFnZSwgc3RyaW5nc1RtcERpcik7XG4gICAgY29uc3Qge2Fwa1N0cmluZ3MsIGxvY2FsUGF0aH0gPSBhd2FpdCBhZGIuZXh0cmFjdFN0cmluZ3NGcm9tQXBrKGFwcCwgbGFuZ3VhZ2UsIHN0cmluZ3NUbXBEaXIpO1xuICAgIGF3YWl0IGFkYi5wdXNoKGxvY2FsUGF0aCwgcmVtb3RlRGlyKTtcbiAgICByZXR1cm4gYXBrU3RyaW5ncztcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLndhcm4oYENvdWxkIG5vdCBnZXQgc3RyaW5ncywgY29udGludWluZyBhbnl3YXkuIE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIGF3YWl0IGFkYi5zaGVsbCgnZWNobycsIFtgJ3t9JyA+ICR7cmVtb3RlRmlsZX1gXSk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgZnMucmltcmFmKHN0cmluZ3NUbXBEaXIpO1xuICB9XG4gIHJldHVybiB7fTtcbn07XG5cbmhlbHBlcnMudW5sb2NrV2l0aEhlbHBlckFwcCA9IGFzeW5jIGZ1bmN0aW9uIHVubG9ja1dpdGhIZWxwZXJBcHAgKGFkYikge1xuICBsb2dnZXIuaW5mbygnVW5sb2NraW5nIHNjcmVlbicpO1xuXG4gIC8vIFVubG9jayBzdWNjZWVkIHdpdGggYSBjb3VwbGUgb2YgcmV0cmllcy5cbiAgbGV0IGZpcnN0UnVuID0gdHJ1ZTtcbiAgYXdhaXQgcmV0cnkoMywgYXN5bmMgZnVuY3Rpb24gbGF1bmNoSGVscGVyICgpIHtcbiAgICAvLyBUbyByZWR1Y2UgYSB0aW1lIHRvIGNhbGwgYWRiLmlzU2NyZWVuTG9ja2VkKCkgc2luY2UgYGFkYiBzaGVsbCBkdW1wc3lzIHdpbmRvd2AgaXMgZWFzeSB0byBoYW5nIGFkYiBjb21tYW5kc1xuICAgIGlmIChmaXJzdFJ1bikge1xuICAgICAgZmlyc3RSdW4gPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCEoYXdhaXQgYWRiLmlzU2NyZWVuTG9ja2VkKCkpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGBFcnJvciBpbiBpc1NjcmVlbkxvY2tlZDogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgIGxvZ2dlci53YXJuKCdcImFkYiBzaGVsbCBkdW1wc3lzIHdpbmRvd1wiIGNvbW1hbmQgaGFzIHRpbWVkIG91dC4nKTtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ1RoZSByZWFzb24gb2YgdGhpcyB0aW1lb3V0IGlzIHRoZSBkZWxheWVkIGFkYiByZXNwb25zZS4gUmVzZXR0aW5nIGFkYiBzZXJ2ZXIgY2FuIGltcHJvdmUgaXQuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbG9nZ2VyLmluZm8oYExhdW5jaGluZyAke1NFVFRJTkdTX0hFTFBFUl9VTkxPQ0tfQUNUSVZJVFl9YCk7XG4gICAgYXdhaXQgYWRiLnNoZWxsKFtcbiAgICAgICdhbScsICdzdGFydCcsXG4gICAgICAnLW4nLCBgJHtTRVRUSU5HU19IRUxQRVJfUEtHX0lEfS8ke1NFVFRJTkdTX0hFTFBFUl9VTkxPQ0tfQUNUSVZJVFl9YCxcbiAgICAgICctYycsICdhbmRyb2lkLmludGVudC5jYXRlZ29yeS5MQVVOQ0hFUicsXG4gICAgICAnLWEnLCAnYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4nLFxuICAgICAgJy1mJywgJzB4MTAyMDAwMDAnLFxuICAgIF0pO1xuICAgIGF3YWl0IEIuZGVsYXkoMTAwMCk7XG4gIH0pO1xufTtcblxuaGVscGVycy51bmxvY2sgPSBhc3luYyBmdW5jdGlvbiB1bmxvY2sgKGRyaXZlciwgYWRiLCBjYXBhYmlsaXRpZXMpIHtcbiAgaWYgKCEoYXdhaXQgYWRiLmlzU2NyZWVuTG9ja2VkKCkpKSB7XG4gICAgbG9nZ2VyLmluZm8oJ1NjcmVlbiBhbHJlYWR5IHVubG9ja2VkLCBkb2luZyBub3RoaW5nJyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxvZ2dlci5kZWJ1ZygnU2NyZWVuIGlzIGxvY2tlZCwgdHJ5aW5nIHRvIHVubG9jaycpO1xuXG4gIGlmICghY2FwYWJpbGl0aWVzLnVubG9ja1R5cGUgJiYgIWNhcGFiaWxpdGllcy51bmxvY2tLZXkpIHtcbiAgICBsb2dnZXIud2FybignVXNpbmcgYXBwIHVubG9jaywgdGhpcyBpcyBnb2luZyB0byBiZSBkZXByZWNhdGVkIScpO1xuICAgIGF3YWl0IGhlbHBlcnMudW5sb2NrV2l0aEhlbHBlckFwcChhZGIpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICB1bmxvY2tUeXBlLFxuICAgIHVubG9ja0tleSxcbiAgICB1bmxvY2tTdHJhdGVneSxcbiAgICB1bmxvY2tTdWNjZXNzVGltZW91dCxcbiAgfSA9IHVubG9ja2VyLnZhbGlkYXRlVW5sb2NrQ2FwYWJpbGl0aWVzKGNhcGFiaWxpdGllcyk7XG4gIGlmICh1bmxvY2tLZXkgJiYgdW5sb2NrVHlwZSAhPT0gRklOR0VSUFJJTlRfVU5MT0NLXG4gICAgICAmJiAoXy5pc05pbCh1bmxvY2tTdHJhdGVneSkgfHwgXy50b0xvd2VyKHVubG9ja1N0cmF0ZWd5KSA9PT0gJ2xvY2tzZXR0aW5ncycpXG4gICAgICAmJiBhd2FpdCBhZGIuaXNMb2NrTWFuYWdlbWVudFN1cHBvcnRlZCgpKSB7XG4gICAgYXdhaXQgdW5sb2NrZXIuZmFzdFVubG9jayhhZGIsIHtcbiAgICAgIGNyZWRlbnRpYWw6IHVubG9ja0tleSxcbiAgICAgIGNyZWRlbnRpYWxUeXBlOiB0b0NyZWRlbnRpYWxUeXBlKHVubG9ja1R5cGUpLFxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHVubG9ja01ldGhvZCA9IHtcbiAgICAgIFtQSU5fVU5MT0NLXTogdW5sb2NrZXIucGluVW5sb2NrLFxuICAgICAgW1BJTl9VTkxPQ0tfS0VZX0VWRU5UXTogdW5sb2NrZXIucGluVW5sb2NrV2l0aEtleUV2ZW50LFxuICAgICAgW1BBU1NXT1JEX1VOTE9DS106IHVubG9ja2VyLnBhc3N3b3JkVW5sb2NrLFxuICAgICAgW1BBVFRFUk5fVU5MT0NLXTogdW5sb2NrZXIucGF0dGVyblVubG9jayxcbiAgICAgIFtGSU5HRVJQUklOVF9VTkxPQ0tdOiB1bmxvY2tlci5maW5nZXJwcmludFVubG9jayxcbiAgICB9W3VubG9ja1R5cGVdO1xuICAgIGF3YWl0IHVubG9ja01ldGhvZChhZGIsIGRyaXZlciwgY2FwYWJpbGl0aWVzKTtcbiAgfVxuICBhd2FpdCBoZWxwZXJzLnZlcmlmeVVubG9jayhhZGIsIHVubG9ja1N1Y2Nlc3NUaW1lb3V0KTtcbn07XG5cbmhlbHBlcnMudmVyaWZ5VW5sb2NrID0gYXN5bmMgZnVuY3Rpb24gdmVyaWZ5VW5sb2NrIChhZGIsIHRpbWVvdXRNcyA9IG51bGwpIHtcbiAgdHJ5IHtcbiAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+ICEoYXdhaXQgYWRiLmlzU2NyZWVuTG9ja2VkKCkpLCB7XG4gICAgICB3YWl0TXM6IHRpbWVvdXRNcyA/PyAyMDAwLFxuICAgICAgaW50ZXJ2YWxNczogNTAwLFxuICAgIH0pO1xuICB9IGNhdGNoIChpZ24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBkZXZpY2UgaGFzIGZhaWxlZCB0byBiZSB1bmxvY2tlZCcpO1xuICB9XG4gIGxvZ2dlci5pbmZvKCdUaGUgZGV2aWNlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB1bmxvY2tlZCcpO1xufTtcblxuaGVscGVycy5pbml0RGV2aWNlID0gYXN5bmMgZnVuY3Rpb24gaW5pdERldmljZSAoYWRiLCBvcHRzKSB7XG4gIGNvbnN0IHtcbiAgICBza2lwRGV2aWNlSW5pdGlhbGl6YXRpb24sXG4gICAgbG9jYWxlLFxuICAgIGxhbmd1YWdlLFxuICAgIGxvY2FsZVNjcmlwdCxcbiAgICB1bmljb2RlS2V5Ym9hcmQsXG4gICAgZGlzYWJsZVdpbmRvd0FuaW1hdGlvbixcbiAgICBza2lwVW5sb2NrLFxuICAgIG1vY2tMb2NhdGlvbkFwcCxcbiAgICBza2lwTG9nY2F0Q2FwdHVyZSxcbiAgICBsb2djYXRGb3JtYXQsXG4gICAgbG9nY2F0RmlsdGVyU3BlY3MsXG4gIH0gPSBvcHRzO1xuXG4gIGlmIChza2lwRGV2aWNlSW5pdGlhbGl6YXRpb24pIHtcbiAgICBsb2dnZXIuaW5mbyhgJ3NraXBEZXZpY2VJbml0aWFsaXphdGlvbicgaXMgc2V0LiBTa2lwcGluZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24uYCk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgYWRiLndhaXRGb3JEZXZpY2UoKTtcbiAgICAvLyBwdXNoU2V0dGluZ3NBcHAgcmVxdWlyZWQgYmVmb3JlIGNhbGxpbmcgZW5zdXJlRGV2aWNlTG9jYWxlIGZvciBBUEkgTGV2ZWwgMjQrXG5cbiAgICAvLyBTb21lIGZlYXR1cmUgc3VjaCBhcyBsb2NhdGlvbi93aWZpIGFyZSBub3QgbmVjZXNzYXJ5IGZvciBhbGwgdXNlcnMsXG4gICAgLy8gYnV0IHRoZXkgcmVxdWlyZSB0aGUgc2V0dGluZ3MgYXBwLiBTbywgdHJ5IHRvIGNvbmZpZ3VyZSBpdCB3aGlsZSBBcHBpdW1cbiAgICAvLyBkb2VzIG5vdCB0aHJvdyBlcnJvciBldmVuIGlmIHRoZXkgZmFpbC5cbiAgICBjb25zdCBzaG91bGRUaHJvd0Vycm9yID0gbGFuZ3VhZ2VcbiAgICAgIHx8IGxvY2FsZVxuICAgICAgfHwgbG9jYWxlU2NyaXB0XG4gICAgICB8fCB1bmljb2RlS2V5Ym9hcmRcbiAgICAgIHx8IGRpc2FibGVXaW5kb3dBbmltYXRpb25cbiAgICAgIHx8ICFza2lwVW5sb2NrO1xuICAgIGF3YWl0IGhlbHBlcnMucHVzaFNldHRpbmdzQXBwKGFkYiwgc2hvdWxkVGhyb3dFcnJvciwgb3B0cyk7XG4gIH1cblxuICBpZiAoIWhlbHBlcnMuaXNFbXVsYXRvcihhZGIsIG9wdHMpICYmIChtb2NrTG9jYXRpb25BcHAgfHwgXy5pc1VuZGVmaW5lZChtb2NrTG9jYXRpb25BcHApKSkge1xuICAgIGF3YWl0IGhlbHBlcnMuc2V0TW9ja0xvY2F0aW9uQXBwKGFkYiwgbW9ja0xvY2F0aW9uQXBwIHx8IFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQpO1xuICB9XG5cbiAgaWYgKGxhbmd1YWdlIHx8IGxvY2FsZSkge1xuICAgIGF3YWl0IGhlbHBlcnMuZW5zdXJlRGV2aWNlTG9jYWxlKGFkYiwgbGFuZ3VhZ2UsIGxvY2FsZSwgbG9jYWxlU2NyaXB0KTtcbiAgfVxuXG4gIGlmIChza2lwTG9nY2F0Q2FwdHVyZSkge1xuICAgIGxvZ2dlci5pbmZvKGAnc2tpcExvZ2NhdENhcHR1cmUnIGlzIHNldC4gU2tpcHBpbmcgc3RhcnRpbmcgbG9nY2F0IGNhcHR1cmUuYCk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgYWRiLnN0YXJ0TG9nY2F0KHtcbiAgICAgIGZvcm1hdDogbG9nY2F0Rm9ybWF0LFxuICAgICAgZmlsdGVyU3BlY3M6IGxvZ2NhdEZpbHRlclNwZWNzLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHVuaWNvZGVLZXlib2FyZCkge1xuICAgIHJldHVybiBhd2FpdCBoZWxwZXJzLmluaXRVbmljb2RlS2V5Ym9hcmQoYWRiKTtcbiAgfVxufTtcblxuaGVscGVycy5yZW1vdmVOdWxsUHJvcGVydGllcyA9IGZ1bmN0aW9uIHJlbW92ZU51bGxQcm9wZXJ0aWVzIChvYmopIHtcbiAgZm9yIChsZXQga2V5IG9mIF8ua2V5cyhvYmopKSB7XG4gICAgaWYgKF8uaXNOdWxsKG9ialtrZXldKSB8fCBfLmlzVW5kZWZpbmVkKG9ialtrZXldKSkge1xuICAgICAgZGVsZXRlIG9ialtrZXldO1xuICAgIH1cbiAgfVxufTtcblxuaGVscGVycy50cnVuY2F0ZURlY2ltYWxzID0gZnVuY3Rpb24gdHJ1bmNhdGVEZWNpbWFscyAobnVtYmVyLCBkaWdpdHMpIHtcbiAgbGV0IG11bHRpcGxpZXIgPSBNYXRoLnBvdygxMCwgZGlnaXRzKSxcbiAgICAgIGFkanVzdGVkTnVtID0gbnVtYmVyICogbXVsdGlwbGllcixcbiAgICAgIHRydW5jYXRlZE51bSA9IE1hdGhbYWRqdXN0ZWROdW0gPCAwID8gJ2NlaWwnIDogJ2Zsb29yJ10oYWRqdXN0ZWROdW0pO1xuXG4gIHJldHVybiB0cnVuY2F0ZWROdW0gLyBtdWx0aXBsaWVyO1xufTtcblxuaGVscGVycy5pc0Nocm9tZUJyb3dzZXIgPSBmdW5jdGlvbiBpc0Nocm9tZUJyb3dzZXIgKGJyb3dzZXIpIHtcbiAgcmV0dXJuIF8uaW5jbHVkZXMoT2JqZWN0LmtleXMoQ0hST01FX0JST1dTRVJfUEFDS0FHRV9BQ1RJVklUWSksIChicm93c2VyIHx8ICcnKS50b0xvd2VyQ2FzZSgpKTtcbn07XG5cbmhlbHBlcnMuZ2V0Q2hyb21lUGtnID0gZnVuY3Rpb24gZ2V0Q2hyb21lUGtnIChicm93c2VyKSB7XG4gIHJldHVybiBDSFJPTUVfQlJPV1NFUl9QQUNLQUdFX0FDVElWSVRZW2Jyb3dzZXIudG9Mb3dlckNhc2UoKV0gfHwgQ0hST01FX0JST1dTRVJfUEFDS0FHRV9BQ1RJVklUWS5kZWZhdWx0O1xufTtcblxuaGVscGVycy5yZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnMgPSBhc3luYyBmdW5jdGlvbiByZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnMgKHNlcnZlciwgc2Vzc2lvbklkKSB7XG4gIGlmICghc2VydmVyIHx8ICFfLmlzRnVuY3Rpb24oc2VydmVyLmdldFdlYlNvY2tldEhhbmRsZXJzKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGFjdGl2ZUhhbmRsZXJzID0gYXdhaXQgc2VydmVyLmdldFdlYlNvY2tldEhhbmRsZXJzKHNlc3Npb25JZCk7XG4gIGZvciAoY29uc3QgcGF0aG5hbWUgb2YgXy5rZXlzKGFjdGl2ZUhhbmRsZXJzKSkge1xuICAgIGF3YWl0IHNlcnZlci5yZW1vdmVXZWJTb2NrZXRIYW5kbGVyKHBhdGhuYW1lKTtcbiAgfVxufTtcblxuLyoqXG4gKiBUYWtlcyBhIGRlc2lyZWQgY2FwYWJpbGl0eSBhbmQgdHJpZXMgdG8gSlNPTi5wYXJzZSBpdCBhcyBhbiBhcnJheSxcbiAqIGFuZCBlaXRoZXIgcmV0dXJucyB0aGUgcGFyc2VkIGFycmF5IG9yIGEgc2luZ2xldG9uIGFycmF5LlxuICpcbiAqIEBwYXJhbSB7YW55fSBjYXAgQSBkZXNpcmVkIGNhcGFiaWxpdHlcbiAqL1xuaGVscGVycy5wYXJzZUFycmF5ID0gZnVuY3Rpb24gcGFyc2VBcnJheSAoY2FwKSB7XG4gIGxldCBwYXJzZWRDYXBzO1xuICB0cnkge1xuICAgIHBhcnNlZENhcHMgPSBKU09OLnBhcnNlKGNhcCk7XG4gIH0gY2F0Y2ggKGlnbikgeyB9XG5cbiAgaWYgKF8uaXNBcnJheShwYXJzZWRDYXBzKSkge1xuICAgIHJldHVybiBwYXJzZWRDYXBzO1xuICB9IGVsc2UgaWYgKF8uaXNTdHJpbmcoY2FwKSkge1xuICAgIHJldHVybiBbY2FwXTtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihgbXVzdCBwcm92aWRlIGEgc3RyaW5nIG9yIEpTT04gQXJyYXk7IHJlY2VpdmVkICR7Y2FwfWApO1xufTtcblxuLyoqXG4gKiBWYWxpZGF0ZSBkZXNpcmVkIGNhcGFiaWxpdGllcy4gUmV0dXJucyB0cnVlIGlmIGNhcGFiaWxpdHkgaXMgdmFsaWRcbiAqXG4gKiBAcGFyYW0geyp9IGNhcCBBIGRlc2lyZWQgY2FwYWJpbGl0eVxuICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZSBjYXBhYmlsaXR5IGlzIHZhbGlkXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGNhcHMgaGFzIGludmFsaWQgY2FwYWJpbGl0eVxuICovXG5oZWxwZXJzLnZhbGlkYXRlRGVzaXJlZENhcHMgPSBmdW5jdGlvbiB2YWxpZGF0ZURlc2lyZWRDYXBzIChjYXBzKSB7XG4gIGlmIChjYXBzLmJyb3dzZXJOYW1lKSB7XG4gICAgaWYgKGNhcHMuYXBwKSB7XG4gICAgICAvLyB3YXJuIGlmIHRoZSBjYXBhYmlsaXRpZXMgaGF2ZSBib3RoIGBhcHBgIGFuZCBgYnJvd3NlciwgYWx0aG91Z2ggdGhpcyBpcyBjb21tb24gd2l0aCBzZWxlbml1bSBncmlkXG4gICAgICBsb2dnZXIud2FybihgVGhlIGRlc2lyZWQgY2FwYWJpbGl0aWVzIHNob3VsZCBnZW5lcmFsbHkgbm90IGluY2x1ZGUgYm90aCBhbiAnYXBwJyBhbmQgYSAnYnJvd3Nlck5hbWUnYCk7XG4gICAgfVxuICAgIGlmIChjYXBzLmFwcFBhY2thZ2UpIHtcbiAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KGBUaGUgZGVzaXJlZCBzaG91bGQgbm90IGluY2x1ZGUgYm90aCBvZiBhbiAnYXBwUGFja2FnZScgYW5kIGEgJ2Jyb3dzZXJOYW1lJ2ApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjYXBzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5wYXJzZUFycmF5KGNhcHMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBwYXJzZSBcInVuaW5zdGFsbE90aGVyUGFja2FnZXNcIiBjYXBhYmlsaXR5OiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogQWRqdXN0IHRoZSBjYXBhYmlsaXRpZXMgZm9yIGEgYnJvd3NlciBzZXNzaW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNhcHMgLSBDdXJyZW50IGNhcGFiaWxpdGllcyBvYmplY3RcbiAqICEhISBUaGUgb2JqZWN0IGlzIG11dGF0ZWQgYnkgdGhpcyBtZXRob2QgY2FsbCAhISFcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBzYW1lIHBvc3NpYmx5IG11dGF0ZWQgYG9wdHNgIGluc3RhbmNlLlxuICogTm8gbXV0YXRpb24gaXMgaGFwcGVuaW5nIGlzIHRoZSBjdXJyZW50IHNlc3Npb24gaWZcbiAqIGFwcFBhY2thZ2UvYXBwQWN0aXZpdHkgY2FwcyBoYXZlIGFscmVhZHkgYmVlbiBwcm92aWRlZC5cbiAqL1xuaGVscGVycy5hZGp1c3RCcm93c2VyU2Vzc2lvbkNhcHMgPSBmdW5jdGlvbiBhZGp1c3RCcm93c2VyU2Vzc2lvbkNhcHMgKGNhcHMgPSB7fSkge1xuICBjb25zdCB7IGJyb3dzZXJOYW1lIH0gPSBjYXBzO1xuICBsb2dnZXIuaW5mbyhgVGhlIGN1cnJlbnQgc2Vzc2lvbiBpcyBjb25zaWRlcmVkIGJyb3dzZXItYmFzZWRgKTtcbiAgbG9nZ2VyLmluZm8oYFN1cHBvcnRlZCBicm93c2VyIG5hbWVzOiAke0pTT04uc3RyaW5naWZ5KF8ua2V5cyhDSFJPTUVfQlJPV1NFUl9QQUNLQUdFX0FDVElWSVRZKSl9YCk7XG4gIGlmIChjYXBzLmFwcFBhY2thZ2UgfHwgY2Fwcy5hcHBBY3Rpdml0eSkge1xuICAgIGxvZ2dlci5pbmZvKGBOb3Qgb3ZlcnJpZGluZyBhcHBQYWNrYWdlL2FwcEFjdGl2aXR5IGNhcGFiaWxpdHkgdmFsdWVzIGZvciAnJHticm93c2VyTmFtZX0nIGAgK1xuICAgICAgJ2JlY2F1c2Ugc29tZSBvZiB0aGVtIGhhdmUgYmVlbiBhbHJlYWR5IHByb3ZpZGVkJyk7XG4gICAgcmV0dXJuIGNhcHM7XG4gIH1cblxuICBjb25zdCB7cGtnLCBhY3Rpdml0eX0gPSB0aGlzLmdldENocm9tZVBrZyhicm93c2VyTmFtZSk7XG4gIGNhcHMuYXBwUGFja2FnZSA9IHBrZztcbiAgY2Fwcy5hcHBBY3Rpdml0eSA9IGFjdGl2aXR5O1xuICBsb2dnZXIuaW5mbyhgYXBwUGFja2FnZS9hcHBBY3Rpdml0eSBjYXBhYmlsaXRpZXMgaGF2ZSBiZWVuIGF1dG9tYXRpY2FsbHkgc2V0IHRvICR7cGtnfS8ke2FjdGl2aXR5fSBgICtcbiAgICBgZm9yICcke2Jyb3dzZXJOYW1lfSdgKTtcbiAgbG9nZ2VyLmluZm8oYENvbnNpZGVyIGNoYW5naW5nIHRoZSBicm93c2VyTmFtZSB0byB0aGUgb25lIGZyb20gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIGJyb3dzZXIgbmFtZXMgYCArXG4gICAgYG9yIHByb3ZpZGUgY3VzdG9tIGFwcFBhY2thZ2UvYXBwQWN0aXZpdHkgY2FwYWJpbGl0eSB2YWx1ZXMgaWYgdGhlIGF1dG9tYXRpY2FsbHkgYXNzaWduZWQgb25lcyBkbyBgICtcbiAgICBgbm90IG1ha2Ugc2Vuc2VgKTtcbiAgcmV0dXJuIGNhcHM7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBjdXJyZW50IGRldmljZSB1bmRlciB0ZXN0IGlzIGFuIGVtdWxhdG9yXG4gKlxuICogQHBhcmFtIHtBREJ9IGFkYiAtIGFwcGl1bS1hZGIgaW5zdGFuY2VcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gZHJpdmVyIG9wdGlvbnMgbWFwcGluZ1xuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgZGV2aWNlIGlzIGFuIEFuZHJvaWQgZW11bGF0b3JcbiAqL1xuaGVscGVycy5pc0VtdWxhdG9yID0gZnVuY3Rpb24gaXNFbXVsYXRvciAoYWRiLCBvcHRzKSB7XG4gIGNvbnN0IHBvc3NpYmxlTmFtZXMgPSBbb3B0cy51ZGlkLCBhZGI/LmN1ckRldmljZUlkXTtcbiAgcmV0dXJuICEhb3B0cy5hdmQgfHwgcG9zc2libGVOYW1lcy5zb21lKCh4KSA9PiBFTVVMQVRPUl9QQVRURVJOLnRlc3QoeCkpO1xufTtcblxuaGVscGVycy5ib290c3RyYXAgPSBCb290c3RyYXA7XG5oZWxwZXJzLnVubG9ja2VyID0gdW5sb2NrZXI7XG5cbmV4cG9ydCB7IGhlbHBlcnMsIFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQsIEFQUF9TVEFURSwgcHJlcGFyZUF2ZEFyZ3MsIGVuc3VyZU5ldHdvcmtTcGVlZCB9O1xuZXhwb3J0IGRlZmF1bHQgaGVscGVycztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFJQTs7QUFDQTs7Ozs7O0FBRUEsTUFBTUEsdUJBQXVCLEdBQUcsS0FBaEM7QUFFQSxNQUFNQywrQkFBK0IsR0FBRztFQUN0Q0MsTUFBTSxFQUFFO0lBQ05DLEdBQUcsRUFBRSxvQkFEQztJQUVOQyxRQUFRLEVBQUU7RUFGSixDQUQ4QjtFQUt0Q0MsUUFBUSxFQUFFO0lBQ1JGLEdBQUcsRUFBRSwyQkFERztJQUVSQyxRQUFRLEVBQUU7RUFGRixDQUw0QjtFQVN0Q0UsVUFBVSxFQUFFO0lBQ1ZILEdBQUcsRUFBRSxpQkFESztJQUVWQyxRQUFRLEVBQUU7RUFGQSxDQVQwQjtFQWF0Q0csT0FBTyxFQUFFO0lBQ1BKLEdBQUcsRUFBRSxxQkFERTtJQUVQQyxRQUFRLEVBQUU7RUFGSCxDQWI2QjtFQWlCdEMsb0JBQW9CO0lBQ2xCRCxHQUFHLEVBQUUscUJBRGE7SUFFbEJDLFFBQVEsRUFBRTtFQUZRLENBakJrQjtFQXFCdEMsb0JBQW9CO0lBQ2xCRCxHQUFHLEVBQUUsNEJBRGE7SUFFbEJDLFFBQVEsRUFBRTtFQUZRLENBckJrQjtFQXlCdENJLE9BQU8sRUFBRTtJQUNQTCxHQUFHLEVBQUUsb0JBREU7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
|
package/lib/android-helpers.js
CHANGED
|
@@ -552,10 +552,11 @@ helpers.installHelperApp = async function installHelperApp (adb, apkPath, packag
|
|
|
552
552
|
* Throws an error if the setting app is required
|
|
553
553
|
*
|
|
554
554
|
* @param {Adb} adb - The adb module instance.
|
|
555
|
-
* @param {
|
|
555
|
+
* @param {Object} opts - Driver options dictionary.
|
|
556
|
+
* @param {boolean} throwError [false] - Whether throw an error if Settings app fails to start
|
|
556
557
|
* @throws {Error} If throwError is true and something happens in installation step
|
|
557
558
|
*/
|
|
558
|
-
helpers.pushSettingsApp = async function pushSettingsApp (adb, throwError = false) {
|
|
559
|
+
helpers.pushSettingsApp = async function pushSettingsApp (adb, throwError = false, opts = {}) {
|
|
559
560
|
logger.debug('Pushing settings apk to device...');
|
|
560
561
|
|
|
561
562
|
try {
|
|
@@ -599,7 +600,9 @@ helpers.pushSettingsApp = async function pushSettingsApp (adb, throwError = fals
|
|
|
599
600
|
// if the app is not launched prior to start the session on android 7+
|
|
600
601
|
// see https://github.com/appium/appium/issues/8957
|
|
601
602
|
try {
|
|
602
|
-
await adb.requireRunningSettingsApp(
|
|
603
|
+
await adb.requireRunningSettingsApp({
|
|
604
|
+
timeout: helpers.isEmulator(adb, opts) ? 30000 : 5000
|
|
605
|
+
});
|
|
603
606
|
} catch (err) {
|
|
604
607
|
logger.debug(err);
|
|
605
608
|
if (throwError) {
|
|
@@ -771,7 +774,7 @@ helpers.initDevice = async function initDevice (adb, opts) {
|
|
|
771
774
|
|| unicodeKeyboard
|
|
772
775
|
|| disableWindowAnimation
|
|
773
776
|
|| !skipUnlock;
|
|
774
|
-
await helpers.pushSettingsApp(adb, shouldThrowError);
|
|
777
|
+
await helpers.pushSettingsApp(adb, shouldThrowError, opts);
|
|
775
778
|
}
|
|
776
779
|
|
|
777
780
|
if (!helpers.isEmulator(adb, opts) && (mockLocationApp || _.isUndefined(mockLocationApp))) {
|
package/package.json
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"mobile",
|
|
10
10
|
"mobile testing"
|
|
11
11
|
],
|
|
12
|
-
"version": "5.2.
|
|
12
|
+
"version": "5.2.5",
|
|
13
13
|
"author": "appium",
|
|
14
14
|
"license": "Apache-2.0",
|
|
15
15
|
"repository": {
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
],
|
|
37
37
|
"dependencies": {
|
|
38
38
|
"@babel/runtime": "^7.0.0",
|
|
39
|
-
"appium-adb": "^9.
|
|
39
|
+
"appium-adb": "^9.10.1",
|
|
40
40
|
"appium-chromedriver": "^5.0.1",
|
|
41
41
|
"asyncbox": "^2.8.0",
|
|
42
42
|
"axios": "^0.x",
|