appium-android-driver 4.43.1 → 4.46.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/index.js +8 -7
- package/build/lib/android-helpers.js +10 -2
- package/build/lib/commands/app-management.js +8 -10
- package/build/lib/commands/context.js +65 -20
- package/build/lib/unlock-helpers.js +34 -11
- package/build/lib/webview-helpers.js +52 -28
- package/index.js +6 -3
- package/lib/android-helpers.js +11 -2
- package/lib/commands/app-management.js +6 -11
- package/lib/commands/context.js +51 -19
- package/lib/unlock-helpers.js +48 -12
- package/lib/webview-helpers.js +56 -35
- package/package.json +5 -7
package/build/index.js
CHANGED
|
@@ -3,8 +3,6 @@
|
|
|
3
3
|
|
|
4
4
|
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
|
|
5
5
|
|
|
6
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
7
|
-
|
|
8
6
|
Object.defineProperty(exports, "__esModule", {
|
|
9
7
|
value: true
|
|
10
8
|
});
|
|
@@ -12,8 +10,6 @@ exports.SETTINGS_HELPER_PKG_ID = exports.CHROMIUM_WIN = exports.WEBVIEW_BASE = e
|
|
|
12
10
|
|
|
13
11
|
require("source-map-support/register");
|
|
14
12
|
|
|
15
|
-
var _yargs = _interopRequireDefault(require("yargs"));
|
|
16
|
-
|
|
17
13
|
var _asyncbox = require("asyncbox");
|
|
18
14
|
|
|
19
15
|
var server = _interopRequireWildcard(require("./lib/server"));
|
|
@@ -36,8 +32,13 @@ const DEFAULT_HOST = 'localhost';
|
|
|
36
32
|
const DEFAULT_PORT = 4723;
|
|
37
33
|
|
|
38
34
|
async function main() {
|
|
39
|
-
|
|
40
|
-
|
|
35
|
+
const getArgValue = argName => {
|
|
36
|
+
const argIndex = process.argv.indexOf(argName);
|
|
37
|
+
return argIndex > 0 ? process.argv[argIndex + 1] : null;
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
const port = parseInt(getArgValue('--port'), 10) || DEFAULT_PORT;
|
|
41
|
+
const host = getArgValue('--host') || DEFAULT_HOST;
|
|
41
42
|
return await startServer(port, host);
|
|
42
43
|
}
|
|
43
44
|
|
|
@@ -79,4 +80,4 @@ var _default = AndroidDriver;
|
|
|
79
80
|
exports.default = _default;require('source-map-support').install();
|
|
80
81
|
|
|
81
82
|
|
|
82
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
83
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbInN0YXJ0U2VydmVyIiwic2VydmVyIiwiREVGQVVMVF9IT1NUIiwiREVGQVVMVF9QT1JUIiwibWFpbiIsImdldEFyZ1ZhbHVlIiwiYXJnTmFtZSIsImFyZ0luZGV4IiwicHJvY2VzcyIsImFyZ3YiLCJpbmRleE9mIiwicG9ydCIsInBhcnNlSW50IiwiaG9zdCIsInJlcXVpcmUiLCJtb2R1bGUiLCJBbmRyb2lkRHJpdmVyIiwiZHJpdmVyIiwiaGVscGVycyIsIndlYnZpZXdIZWxwZXJzIiwiTkFUSVZFX1dJTiIsIldFQlZJRVdfV0lOIiwiV0VCVklFV19CQVNFIiwiQ0hST01JVU1fV0lOIiwid2VidmlldyIsImNvbW1vbkNhcENvbnN0cmFpbnRzIiwiY2FwcyIsImNvbW1hbmRzIiwiYW5kcm9pZENvbW1hbmRzIiwiY29tbWFuZEluZGV4IiwiYW5kcm9pZEhlbHBlcnMiLCJTRVRUSU5HU19IRUxQRVJfUEtHX0lEIiwiYW5kcm9pZEhlbHBlckluZGV4Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7O0FBR0E7O0FBQ0E7O0FBdUJBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQXhCQSxNQUFNO0FBQUVBLEVBQUFBO0FBQUYsSUFBa0JDLE1BQXhCOztBQUVBLE1BQU1DLFlBQVksR0FBRyxXQUFyQjtBQUNBLE1BQU1DLFlBQVksR0FBRyxJQUFyQjs7QUFFQSxlQUFlQyxJQUFmLEdBQXVCO0FBQ3JCLFFBQU1DLFdBQVcsR0FBSUMsT0FBRCxJQUFhO0FBQy9CLFVBQU1DLFFBQVEsR0FBR0MsT0FBTyxDQUFDQyxJQUFSLENBQWFDLE9BQWIsQ0FBcUJKLE9BQXJCLENBQWpCO0FBQ0EsV0FBT0MsUUFBUSxHQUFHLENBQVgsR0FBZUMsT0FBTyxDQUFDQyxJQUFSLENBQWFGLFFBQVEsR0FBRyxDQUF4QixDQUFmLEdBQTRDLElBQW5EO0FBQ0QsR0FIRDs7QUFJQSxRQUFNSSxJQUFJLEdBQUdDLFFBQVEsQ0FBQ1AsV0FBVyxDQUFDLFFBQUQsQ0FBWixFQUF3QixFQUF4QixDQUFSLElBQXVDRixZQUFwRDtBQUNBLFFBQU1VLElBQUksR0FBR1IsV0FBVyxDQUFDLFFBQUQsQ0FBWCxJQUF5QkgsWUFBdEM7QUFDQSxTQUFPLE1BQU1GLFdBQVcsQ0FBQ1csSUFBRCxFQUFPRSxJQUFQLENBQXhCO0FBQ0Q7O0FBRUQsSUFBSUMsT0FBTyxDQUFDVixJQUFSLEtBQWlCVyxNQUFyQixFQUE2QjtBQUMzQiwwQkFBU1gsSUFBVDtBQUNEOztBQVVELE1BQU07QUFBRVksRUFBQUE7QUFBRixJQUFvQkMsTUFBMUI7O0FBQ0EsTUFBTTtBQUFFQyxFQUFBQSxPQUFPLEVBQUVDLGNBQVg7QUFBMkJDLEVBQUFBLFVBQTNCO0FBQXVDQyxFQUFBQSxXQUF2QztBQUFvREMsRUFBQUEsWUFBcEQ7QUFDRUMsRUFBQUE7QUFERixJQUNtQkMsT0FEekI7Ozs7OztBQUVBLE1BQU07QUFBRUMsRUFBQUE7QUFBRixJQUEyQkMsSUFBakM7O0FBQ0EsTUFBTTtBQUFFQyxFQUFBQSxRQUFRLEVBQUVDO0FBQVosSUFBZ0NDLFlBQXRDOztBQUNBLE1BQU07QUFBRVgsRUFBQUEsT0FBTyxFQUFFWSxjQUFYO0FBQTJCQyxFQUFBQTtBQUEzQixJQUFzREMsa0JBQTVEOzs7ZUFHZWhCLGEiLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiBub2RlXG4vLyB0cmFuc3BpbGU6bWFpblxuXG5pbXBvcnQgeyBhc3luY2lmeSB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCAqIGFzIHNlcnZlciBmcm9tICcuL2xpYi9zZXJ2ZXInO1xuXG5cbmNvbnN0IHsgc3RhcnRTZXJ2ZXIgfSA9IHNlcnZlcjtcblxuY29uc3QgREVGQVVMVF9IT1NUID0gJ2xvY2FsaG9zdCc7XG5jb25zdCBERUZBVUxUX1BPUlQgPSA0NzIzO1xuXG5hc3luYyBmdW5jdGlvbiBtYWluICgpIHtcbiAgY29uc3QgZ2V0QXJnVmFsdWUgPSAoYXJnTmFtZSkgPT4ge1xuICAgIGNvbnN0IGFyZ0luZGV4ID0gcHJvY2Vzcy5hcmd2LmluZGV4T2YoYXJnTmFtZSk7XG4gICAgcmV0dXJuIGFyZ0luZGV4ID4gMCA/IHByb2Nlc3MuYXJndlthcmdJbmRleCArIDFdIDogbnVsbDtcbiAgfTtcbiAgY29uc3QgcG9ydCA9IHBhcnNlSW50KGdldEFyZ1ZhbHVlKCctLXBvcnQnKSwgMTApIHx8IERFRkFVTFRfUE9SVDtcbiAgY29uc3QgaG9zdCA9IGdldEFyZ1ZhbHVlKCctLWhvc3QnKSB8fCBERUZBVUxUX0hPU1Q7XG4gIHJldHVybiBhd2FpdCBzdGFydFNlcnZlcihwb3J0LCBob3N0KTtcbn1cblxuaWYgKHJlcXVpcmUubWFpbiA9PT0gbW9kdWxlKSB7XG4gIGFzeW5jaWZ5KG1haW4pO1xufVxuXG5cbmltcG9ydCAqIGFzIGRyaXZlciBmcm9tICcuL2xpYi9kcml2ZXInO1xuaW1wb3J0ICogYXMgYW5kcm9pZEhlbHBlckluZGV4IGZyb20gJy4vbGliL2FuZHJvaWQtaGVscGVycyc7XG5pbXBvcnQgKiBhcyBjb21tYW5kSW5kZXggZnJvbSAnLi9saWIvY29tbWFuZHMvaW5kZXgnO1xuaW1wb3J0ICogYXMgd2VidmlldyBmcm9tICcuL2xpYi93ZWJ2aWV3LWhlbHBlcnMnO1xuaW1wb3J0ICogYXMgY2FwcyBmcm9tICcuL2xpYi9kZXNpcmVkLWNhcHMnO1xuXG5cbmNvbnN0IHsgQW5kcm9pZERyaXZlciB9ID0gZHJpdmVyO1xuY29uc3QgeyBoZWxwZXJzOiB3ZWJ2aWV3SGVscGVycywgTkFUSVZFX1dJTiwgV0VCVklFV19XSU4sIFdFQlZJRVdfQkFTRSxcbiAgICAgICAgQ0hST01JVU1fV0lOIH0gPSB3ZWJ2aWV3O1xuY29uc3QgeyBjb21tb25DYXBDb25zdHJhaW50cyB9ID0gY2FwcztcbmNvbnN0IHsgY29tbWFuZHM6IGFuZHJvaWRDb21tYW5kcyB9ID0gY29tbWFuZEluZGV4O1xuY29uc3QgeyBoZWxwZXJzOiBhbmRyb2lkSGVscGVycywgU0VUVElOR1NfSEVMUEVSX1BLR19JRCB9ID0gYW5kcm9pZEhlbHBlckluZGV4O1xuXG5cbmV4cG9ydCBkZWZhdWx0IEFuZHJvaWREcml2ZXI7XG5leHBvcnQge1xuICBhbmRyb2lkSGVscGVycywgYW5kcm9pZENvbW1hbmRzLCBBbmRyb2lkRHJpdmVyLCBzdGFydFNlcnZlcixcbiAgY29tbW9uQ2FwQ29uc3RyYWludHMsIHdlYnZpZXdIZWxwZXJzLCBOQVRJVkVfV0lOLCBXRUJWSUVXX1dJTixcbiAgV0VCVklFV19CQVNFLCBDSFJPTUlVTV9XSU4sIFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQsXG59O1xuIl0sImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZVJvb3QiOiIuLiJ9
|
|
@@ -9,7 +9,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
9
9
|
});
|
|
10
10
|
exports.prepareAvdArgs = prepareAvdArgs;
|
|
11
11
|
exports.ensureNetworkSpeed = ensureNetworkSpeed;
|
|
12
|
-
exports.default = exports.SETTINGS_HELPER_PKG_ID = exports.helpers = void 0;
|
|
12
|
+
exports.default = exports.APP_STATE = exports.SETTINGS_HELPER_PKG_ID = exports.helpers = void 0;
|
|
13
13
|
|
|
14
14
|
require("source-map-support/register");
|
|
15
15
|
|
|
@@ -72,6 +72,13 @@ const SETTINGS_HELPER_PKG_ID = 'io.appium.settings';
|
|
|
72
72
|
exports.SETTINGS_HELPER_PKG_ID = SETTINGS_HELPER_PKG_ID;
|
|
73
73
|
const SETTINGS_HELPER_UNLOCK_ACTIVITY = '.Unlock';
|
|
74
74
|
const EMULATOR_PATTERN = /\bemulator\b/i;
|
|
75
|
+
const APP_STATE = Object.freeze({
|
|
76
|
+
NOT_INSTALLED: 0,
|
|
77
|
+
NOT_RUNNING: 1,
|
|
78
|
+
RUNNING_IN_BACKGROUND: 3,
|
|
79
|
+
RUNNING_IN_FOREGROUND: 4
|
|
80
|
+
});
|
|
81
|
+
exports.APP_STATE = APP_STATE;
|
|
75
82
|
|
|
76
83
|
function ensureNetworkSpeed(adb, networkSpeed) {
|
|
77
84
|
if (_lodash.default.values(adb.NETWORK_SPEED).includes(networkSpeed)) {
|
|
@@ -650,6 +657,7 @@ helpers.unlockWithUIAutomation = async function unlockWithUIAutomation(driver, a
|
|
|
650
657
|
|
|
651
658
|
const unlockMethod = {
|
|
652
659
|
[_unlockHelpers.PIN_UNLOCK]: _unlockHelpers.default.pinUnlock,
|
|
660
|
+
[_unlockHelpers.PIN_UNLOCK_KEY_EVENT]: _unlockHelpers.default.pinUnlockWithKeyEvent,
|
|
653
661
|
[_unlockHelpers.PASSWORD_UNLOCK]: _unlockHelpers.default.passwordUnlock,
|
|
654
662
|
[_unlockHelpers.PATTERN_UNLOCK]: _unlockHelpers.default.patternUnlock,
|
|
655
663
|
[_unlockHelpers.FINGERPRINT_UNLOCK]: _unlockHelpers.default.fingerprintUnlock
|
|
@@ -876,4 +884,4 @@ var _default = helpers;
|
|
|
876
884
|
exports.default = _default;require('source-map-support').install();
|
|
877
885
|
|
|
878
886
|
|
|
879
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9hbmRyb2lkLWhlbHBlcnMuanMiXSwibmFtZXMiOlsiUEFDS0FHRV9JTlNUQUxMX1RJTUVPVVQiLCJDSFJPTUVfQlJPV1NFUl9QQUNLQUdFX0FDVElWSVRZIiwiY2hyb21lIiwicGtnIiwiYWN0aXZpdHkiLCJjaHJvbWl1bSIsImNocm9tZWJldGEiLCJicm93c2VyIiwiZGVmYXVsdCIsIlNFVFRJTkdTX0hFTFBFUl9QS0dfSUQiLCJTRVRUSU5HU19IRUxQRVJfVU5MT0NLX0FDVElWSVRZIiwiRU1VTEFUT1JfUEFUVEVSTiIsImVuc3VyZU5ldHdvcmtTcGVlZCIsImFkYiIsIm5ldHdvcmtTcGVlZCIsIl8iLCJ2YWx1ZXMiLCJORVRXT1JLX1NQRUVEIiwiaW5jbHVkZXMiLCJsb2dnZXIiLCJ3YXJuIiwiRlVMTCIsInByZXBhcmVBdmRBcmdzIiwib3B0cyIsImlzSGVhZGxlc3MiLCJhdmRBcmdzIiwicmVzdWx0IiwiaXNBcnJheSIsInB1c2giLCJ1dGlsIiwic2hlbGxQYXJzZSIsImhlbHBlcnMiLCJjcmVhdGVCYXNlQURCIiwiYWRiUG9ydCIsInN1cHByZXNzS2lsbFNlcnZlciIsInJlbW90ZUFkYkhvc3QiLCJjbGVhckRldmljZUxvZ3NPblN0YXJ0IiwiYWRiRXhlY1RpbWVvdXQiLCJ1c2VLZXlzdG9yZSIsImtleXN0b3JlUGF0aCIsImtleXN0b3JlUGFzc3dvcmQiLCJrZXlBbGlhcyIsImtleVBhc3N3b3JkIiwicmVtb3RlQXBwc0NhY2hlTGltaXQiLCJidWlsZFRvb2xzVmVyc2lvbiIsImFsbG93T2ZmbGluZURldmljZXMiLCJhbGxvd0RlbGF5QWRiIiwiQURCIiwiY3JlYXRlQURCIiwicHJlcGFyZUVtdWxhdG9yIiwiYXZkIiwiYXZkRW52IiwiZW52IiwibGFuZ3VhZ2UiLCJsb2NhbGUiLCJjb3VudHJ5IiwiYXZkTGF1bmNoVGltZW91dCIsImxhdW5jaFRpbWVvdXQiLCJhdmRSZWFkeVRpbWVvdXQiLCJyZWFkeVRpbWVvdXQiLCJFcnJvciIsImF2ZE5hbWUiLCJyZXBsYWNlIiwicnVubmluZ0FWRCIsImdldFJ1bm5pbmdBVkQiLCJhcmdzIiwiZGVidWciLCJraWxsRW11bGF0b3IiLCJsYXVuY2hBVkQiLCJlbnN1cmVEZXZpY2VMb2NhbGUiLCJzY3JpcHQiLCJpc1N0cmluZyIsInNldERldmljZUxhbmd1YWdlQ291bnRyeSIsImVuc3VyZUN1cnJlbnRMb2NhbGUiLCJtZXNzYWdlIiwiZ2V0RGV2aWNlSW5mb0Zyb21DYXBzIiwidWRpZCIsImVtUG9ydCIsImN1ckRldmljZUlkIiwiZW11bGF0b3JQb3J0IiwiaW5mbyIsImRldmljZXMiLCJnZXREZXZpY2VzV2l0aFJldHJ5IiwibWFwIiwiZXJyb3JBbmRUaHJvdyIsImdldFBvcnRGcm9tRW11bGF0b3JTdHJpbmciLCJwbGF0Zm9ybVZlcnNpb24iLCJ0cmltIiwic2VtdmVyIiwiY29lcmNlIiwiYXZhaWxEZXZpY2VzIiwicGFydGlhbE1hdGNoQ2FuZGlkYXRlIiwiZGV2aWNlIiwic2V0RGV2aWNlSWQiLCJyYXdEZXZpY2VPUyIsImdldFBsYXRmb3JtVmVyc2lvbiIsImRldmljZU9TIiwiYm90aFZlcnNpb25zQ2FuQmVDb2VyY2VkIiwidmFsaWQiLCJib3RoVmVyc2lvbnNBcmVTdHJpbmdzIiwidmVyc2lvbiIsInRvTG93ZXIiLCJtYWpvciIsIm1pbm9yIiwiZ3QiLCJrZXlzIiwiam9pbiIsInNldEVtdWxhdG9yUG9ydCIsInZhbGlkYXRlUGFja2FnZUFjdGl2aXR5TmFtZXMiLCJrZXkiLCJuYW1lIiwibWF0Y2giLCJleGVjIiwiaW5kZXgiLCJzdWJzdHJpbmciLCJnZXRMYXVuY2hJbmZvIiwiYXBwIiwiYXBwUGFja2FnZSIsImFwcEFjdGl2aXR5IiwiYXBwV2FpdFBhY2thZ2UiLCJhcHBXYWl0QWN0aXZpdHkiLCJhcGtQYWNrYWdlIiwiYXBrQWN0aXZpdHkiLCJwYWNrYWdlQW5kTGF1bmNoQWN0aXZpdHlGcm9tTWFuaWZlc3QiLCJyZXNldEFwcCIsImZhc3RSZXNldCIsImZ1bGxSZXNldCIsImFuZHJvaWRJbnN0YWxsVGltZW91dCIsImF1dG9HcmFudFBlcm1pc3Npb25zIiwiYWxsb3dUZXN0UGFja2FnZXMiLCJpc0luc3RhbGxlZCIsImlzQXBwSW5zdGFsbGVkIiwiZm9yY2VTdG9wIiwiaWduIiwib3V0cHV0IiwiY2xlYXIiLCJ0b0xvd2VyQ2FzZSIsImdyYW50QWxsUGVybWlzc2lvbnMiLCJlcnJvciIsInVuaW5zdGFsbEFwayIsImluc3RhbGwiLCJncmFudFBlcm1pc3Npb25zIiwidGltZW91dCIsImluc3RhbGxBcGsiLCJlbmZvcmNlQXBwSW5zdGFsbCIsImFwcFN0YXRlIiwid2FzVW5pbnN0YWxsZWQiLCJpbnN0YWxsT3JVcGdyYWRlIiwiZW5mb3JjZUN1cnJlbnRCdWlsZCIsImlzSW5zdGFsbGVkT3ZlckV4aXN0aW5nQXBwIiwiQVBQX0lOU1RBTExfU1RBVEUiLCJOT1RfSU5TVEFMTEVEIiwiaW5zdGFsbE90aGVyQXBrcyIsIm90aGVyQXBwcyIsIkIiLCJhbGwiLCJvdGhlckFwcCIsInVuaW5zdGFsbE90aGVyUGFja2FnZXMiLCJhcHBQYWNrYWdlcyIsImZpbHRlclBhY2thZ2VzIiwiZ2V0VGhpcmRQYXJ0eVBhY2thZ2VzIiwicGFja2FnZXNTdHJpbmciLCJzaGVsbCIsImFwcFBhY2thZ2VzQXJyYXkiLCJzcGxpdCIsIkVPTCIsImRpZmZlcmVuY2UiLCJlcnIiLCJpbml0VW5pY29kZUtleWJvYXJkIiwiZGVmYXVsdElNRSIsImFwcGl1bUlNRSIsImVuYWJsZUlNRSIsInNldElNRSIsInNldE1vY2tMb2NhdGlvbkFwcCIsImdldEFwaUxldmVsIiwiaW5zdGFsbEhlbHBlckFwcCIsImFwa1BhdGgiLCJwYWNrYWdlSWQiLCJyZXRyeUluc3RhbGxIZWxwZXJBcHAiLCJwdXNoU2V0dGluZ3NBcHAiLCJ0aHJvd0Vycm9yIiwic2V0dGluZ3NBcGtQYXRoIiwicHJvY2Vzc0V4aXN0cyIsInBlcm1zIiwieCIsInJlcXVpcmVSdW5uaW5nU2V0dGluZ3NBcHAiLCJwdXNoU3RyaW5ncyIsInJlbW90ZURpciIsInN0cmluZ3NKc29uIiwicmVtb3RlRmlsZSIsInBhdGgiLCJwb3NpeCIsInJlc29sdmUiLCJyaW1yYWYiLCJwdWxsQXBrIiwidG1wRGlyIiwiaXNFbXB0eSIsImZzIiwiZXhpc3RzIiwic3RyaW5nc1RtcERpciIsImFwa1N0cmluZ3MiLCJsb2NhbFBhdGgiLCJleHRyYWN0U3RyaW5nc0Zyb21BcGsiLCJ1bmxvY2tXaXRoVUlBdXRvbWF0aW9uIiwiZHJpdmVyIiwidW5sb2NrQ2FwYWJpbGl0aWVzIiwidW5sb2NrVHlwZSIsInVubG9ja2VyIiwiaXNWYWxpZFVubG9ja1R5cGUiLCJ1bmxvY2tLZXkiLCJpc1ZhbGlkS2V5IiwidW5sb2NrTWV0aG9kIiwiUElOX1VOTE9DSyIsInBpblVubG9jayIsIlBBU1NXT1JEX1VOTE9DSyIsInBhc3N3b3JkVW5sb2NrIiwiUEFUVEVSTl9VTkxPQ0siLCJwYXR0ZXJuVW5sb2NrIiwiRklOR0VSUFJJTlRfVU5MT0NLIiwiZmluZ2VycHJpbnRVbmxvY2siLCJ1bmxvY2tXaXRoSGVscGVyQXBwIiwiZmlyc3RSdW4iLCJsYXVuY2hIZWxwZXIiLCJpc1NjcmVlbkxvY2tlZCIsImUiLCJkZWxheSIsInVubG9jayIsImNhcGFiaWxpdGllcyIsImlzVW5kZWZpbmVkIiwidmVyaWZ5VW5sb2NrIiwidW5sb2NrU3VjY2Vzc1RpbWVvdXQiLCJzdWNjZXNzVGltZW91dCIsImluaXREZXZpY2UiLCJza2lwRGV2aWNlSW5pdGlhbGl6YXRpb24iLCJsb2NhbGVTY3JpcHQiLCJ1bmljb2RlS2V5Ym9hcmQiLCJkaXNhYmxlV2luZG93QW5pbWF0aW9uIiwic2tpcFVubG9jayIsIm1vY2tMb2NhdGlvbkFwcCIsInNraXBMb2djYXRDYXB0dXJlIiwibG9nY2F0Rm9ybWF0IiwibG9nY2F0RmlsdGVyU3BlY3MiLCJ3YWl0Rm9yRGV2aWNlIiwic2hvdWxkVGhyb3dFcnJvciIsImlzRW11bGF0b3IiLCJzdGFydExvZ2NhdCIsImZvcm1hdCIsImZpbHRlclNwZWNzIiwicmVtb3ZlTnVsbFByb3BlcnRpZXMiLCJvYmoiLCJpc051bGwiLCJ0cnVuY2F0ZURlY2ltYWxzIiwibnVtYmVyIiwiZGlnaXRzIiwibXVsdGlwbGllciIsIk1hdGgiLCJwb3ciLCJhZGp1c3RlZE51bSIsInRydW5jYXRlZE51bSIsImlzQ2hyb21lQnJvd3NlciIsIk9iamVjdCIsImdldENocm9tZVBrZyIsInJlbW92ZUFsbFNlc3Npb25XZWJTb2NrZXRIYW5kbGVycyIsInNlcnZlciIsInNlc3Npb25JZCIsImlzRnVuY3Rpb24iLCJnZXRXZWJTb2NrZXRIYW5kbGVycyIsImFjdGl2ZUhhbmRsZXJzIiwicGF0aG5hbWUiLCJyZW1vdmVXZWJTb2NrZXRIYW5kbGVyIiwicGFyc2VBcnJheSIsImNhcCIsInBhcnNlZENhcHMiLCJKU09OIiwicGFyc2UiLCJ2YWxpZGF0ZURlc2lyZWRDYXBzIiwiY2FwcyIsImJyb3dzZXJOYW1lIiwiYWRqdXN0QnJvd3NlclNlc3Npb25DYXBzIiwic3RyaW5naWZ5IiwicG9zc2libGVOYW1lcyIsInNvbWUiLCJ0ZXN0IiwiYm9vdHN0cmFwIiwiQm9vdHN0cmFwIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFJQTs7QUFDQTs7QUFFQSxNQUFNQSx1QkFBdUIsR0FBRyxLQUFoQztBQUVBLE1BQU1DLCtCQUErQixHQUFHO0FBQ3RDQyxFQUFBQSxNQUFNLEVBQUU7QUFDTkMsSUFBQUEsR0FBRyxFQUFFLG9CQURDO0FBRU5DLElBQUFBLFFBQVEsRUFBRTtBQUZKLEdBRDhCO0FBS3RDQyxFQUFBQSxRQUFRLEVBQUU7QUFDUkYsSUFBQUEsR0FBRyxFQUFFLDJCQURHO0FBRVJDLElBQUFBLFFBQVEsRUFBRTtBQUZGLEdBTDRCO0FBU3RDRSxFQUFBQSxVQUFVLEVBQUU7QUFDVkgsSUFBQUEsR0FBRyxFQUFFLGlCQURLO0FBRVZDLElBQUFBLFFBQVEsRUFBRTtBQUZBLEdBVDBCO0FBYXRDRyxFQUFBQSxPQUFPLEVBQUU7QUFDUEosSUFBQUEsR0FBRyxFQUFFLHFCQURFO0FBRVBDLElBQUFBLFFBQVEsRUFBRTtBQUZILEdBYjZCO0FBaUJ0QyxzQkFBb0I7QUFDbEJELElBQUFBLEdBQUcsRUFBRSxxQkFEYTtBQUVsQkMsSUFBQUEsUUFBUSxFQUFFO0FBRlEsR0FqQmtCO0FBcUJ0QyxzQkFBb0I7QUFDbEJELElBQUFBLEdBQUcsRUFBRSw0QkFEYTtBQUVsQkMsSUFBQUEsUUFBUSxFQUFFO0FBRlEsR0FyQmtCO0FBeUJ0Q0ksRUFBQUEsT0FBTyxFQUFFO0FBQ1BMLElBQUFBLEdBQUcsRUFBRSxvQkFERTtBQUVQQyxJQUFBQSxRQUFRLEVBQUU7QUFGSDtBQXpCNkIsQ0FBeEM7QUE4QkEsTUFBTUssc0JBQXNCLEdBQUcsb0JBQS9COztBQUNBLE1BQU1DLCtCQUErQixHQUFHLFNBQXhDO0FBQ0EsTUFBTUMsZ0JBQWdCLEdBQUcsZUFBekI7O0FBR0EsU0FBU0Msa0JBQVQsQ0FBNkJDLEdBQTdCLEVBQWtDQyxZQUFsQyxFQUFnRDtBQUM5QyxNQUFJQyxnQkFBRUMsTUFBRixDQUFTSCxHQUFHLENBQUNJLGFBQWIsRUFBNEJDLFFBQTVCLENBQXFDSixZQUFyQyxDQUFKLEVBQXdEO0FBQ3RELFdBQU9BLFlBQVA7QUFDRDs7QUFDREssa0JBQU9DLElBQVAsQ0FBYSw4QkFBNkJOLFlBQWEscUJBQW9CRCxHQUFHLENBQUNJLGFBQUosQ0FBa0JJLElBQUssSUFBdEYsR0FDVCxxQkFBb0JOLGdCQUFFQyxNQUFGLENBQVNILEdBQUcsQ0FBQ0ksYUFBYixDQUE0QixFQURuRDs7QUFFQSxTQUFPSixHQUFHLENBQUNJLGFBQUosQ0FBa0JJLElBQXpCO0FBQ0Q7O0FBRUQsU0FBU0MsY0FBVCxDQUF5QlQsR0FBekIsRUFBOEJVLElBQTlCLEVBQW9DO0FBQ2xDLFFBQU07QUFDSlQsSUFBQUEsWUFESTtBQUVKVSxJQUFBQSxVQUZJO0FBR0pDLElBQUFBO0FBSEksTUFJRkYsSUFKSjtBQUtBLFFBQU1HLE1BQU0sR0FBRyxFQUFmOztBQUNBLE1BQUlELE9BQUosRUFBYTtBQUNYLFFBQUlWLGdCQUFFWSxPQUFGLENBQVVGLE9BQVYsQ0FBSixFQUF3QjtBQUN0QkMsTUFBQUEsTUFBTSxDQUFDRSxJQUFQLENBQVksR0FBR0gsT0FBZjtBQUNELEtBRkQsTUFFTztBQUNMQyxNQUFBQSxNQUFNLENBQUNFLElBQVAsQ0FBWSxHQUFJQyxvQkFBS0MsVUFBTCxDQUFpQixHQUFFTCxPQUFRLEVBQTNCLENBQWhCO0FBQ0Q7QUFDRjs7QUFDRCxNQUFJWCxZQUFKLEVBQWtCO0FBQ2hCWSxJQUFBQSxNQUFNLENBQUNFLElBQVAsQ0FBWSxXQUFaLEVBQXlCaEIsa0JBQWtCLENBQUNDLEdBQUQsRUFBTUMsWUFBTixDQUEzQztBQUNEOztBQUNELE1BQUlVLFVBQUosRUFBZ0I7QUFDZEUsSUFBQUEsTUFBTSxDQUFDRSxJQUFQLENBQVksWUFBWjtBQUNEOztBQUNELFNBQU9GLE1BQVA7QUFDRDs7QUFHRCxNQUFNSyxPQUFPLEdBQUcsRUFBaEI7OztBQUVBQSxPQUFPLENBQUNDLGFBQVIsR0FBd0IsZUFBZUEsYUFBZixDQUE4QlQsSUFBSSxHQUFHLEVBQXJDLEVBQXlDO0FBRy9ELFFBQU07QUFDSlUsSUFBQUEsT0FESTtBQUVKQyxJQUFBQSxrQkFGSTtBQUdKQyxJQUFBQSxhQUhJO0FBSUpDLElBQUFBLHNCQUpJO0FBS0pDLElBQUFBLGNBTEk7QUFNSkMsSUFBQUEsV0FOSTtBQU9KQyxJQUFBQSxZQVBJO0FBUUpDLElBQUFBLGdCQVJJO0FBU0pDLElBQUFBLFFBVEk7QUFVSkMsSUFBQUEsV0FWSTtBQVdKQyxJQUFBQSxvQkFYSTtBQVlKQyxJQUFBQSxpQkFaSTtBQWFKQyxJQUFBQSxtQkFiSTtBQWNKQyxJQUFBQTtBQWRJLE1BZUZ2QixJQWZKO0FBZ0JBLFNBQU8sTUFBTXdCLG1CQUFJQyxTQUFKLENBQWM7QUFDekJmLElBQUFBLE9BRHlCO0FBRXpCQyxJQUFBQSxrQkFGeUI7QUFHekJDLElBQUFBLGFBSHlCO0FBSXpCQyxJQUFBQSxzQkFKeUI7QUFLekJDLElBQUFBLGNBTHlCO0FBTXpCQyxJQUFBQSxXQU55QjtBQU96QkMsSUFBQUEsWUFQeUI7QUFRekJDLElBQUFBLGdCQVJ5QjtBQVN6QkMsSUFBQUEsUUFUeUI7QUFVekJDLElBQUFBLFdBVnlCO0FBV3pCQyxJQUFBQSxvQkFYeUI7QUFZekJDLElBQUFBLGlCQVp5QjtBQWF6QkMsSUFBQUEsbUJBYnlCO0FBY3pCQyxJQUFBQTtBQWR5QixHQUFkLENBQWI7QUFnQkQsQ0FuQ0Q7O0FBcUNBZixPQUFPLENBQUNrQixlQUFSLEdBQTBCLGVBQWVBLGVBQWYsQ0FBZ0NwQyxHQUFoQyxFQUFxQ1UsSUFBckMsRUFBMkM7QUFDbkUsUUFBTTtBQUNKMkIsSUFBQUEsR0FESTtBQUVKQyxJQUFBQSxNQUFNLEVBQUVDLEdBRko7QUFHSkMsSUFBQUEsUUFISTtBQUlKQyxJQUFBQSxNQUFNLEVBQUVDLE9BSko7QUFLSkMsSUFBQUEsZ0JBQWdCLEVBQUVDLGFBTGQ7QUFNSkMsSUFBQUEsZUFBZSxFQUFFQztBQU5iLE1BT0ZwQyxJQVBKOztBQVFBLE1BQUksQ0FBQzJCLEdBQUwsRUFBVTtBQUNSLFVBQU0sSUFBSVUsS0FBSixDQUFVLG9DQUFWLENBQU47QUFDRDs7QUFFRCxRQUFNQyxPQUFPLEdBQUdYLEdBQUcsQ0FBQ1ksT0FBSixDQUFZLEdBQVosRUFBaUIsRUFBakIsQ0FBaEI7QUFDQSxRQUFNQyxVQUFVLEdBQUcsTUFBTWxELEdBQUcsQ0FBQ21ELGFBQUosQ0FBa0JILE9BQWxCLENBQXpCO0FBQ0EsUUFBTUksSUFBSSxHQUFHM0MsY0FBYyxDQUFDVCxHQUFELEVBQU1VLElBQU4sQ0FBM0I7O0FBQ0EsTUFBSXdDLFVBQUosRUFBZ0I7QUFDZCxRQUFJRSxJQUFJLENBQUMvQyxRQUFMLENBQWMsWUFBZCxDQUFKLEVBQWlDO0FBQy9CQyxzQkFBTytDLEtBQVAsQ0FBYyxZQUFXTCxPQUFRLDBDQUFqQzs7QUFDQSxZQUFNaEQsR0FBRyxDQUFDc0QsWUFBSixDQUFpQk4sT0FBakIsQ0FBTjtBQUNELEtBSEQsTUFHTztBQUNMMUMsc0JBQU8rQyxLQUFQLENBQWEsa0RBQWI7O0FBQ0E7QUFDRDtBQUNGOztBQUNELFFBQU1yRCxHQUFHLENBQUN1RCxTQUFKLENBQWNsQixHQUFkLEVBQW1CO0FBQ3ZCZSxJQUFBQSxJQUR1QjtBQUV2QmIsSUFBQUEsR0FGdUI7QUFHdkJDLElBQUFBLFFBSHVCO0FBSXZCRSxJQUFBQSxPQUp1QjtBQUt2QkUsSUFBQUEsYUFMdUI7QUFNdkJFLElBQUFBO0FBTnVCLEdBQW5CLENBQU47QUFRRCxDQWpDRDs7QUErQ0E1QixPQUFPLENBQUNzQyxrQkFBUixHQUE2QixlQUFlQSxrQkFBZixDQUFtQ3hELEdBQW5DLEVBQXdDd0MsUUFBeEMsRUFBa0RFLE9BQWxELEVBQTJEZSxNQUFNLEdBQUcsSUFBcEUsRUFBMEU7QUFDckcsTUFBSSxDQUFDdkQsZ0JBQUV3RCxRQUFGLENBQVdsQixRQUFYLENBQUQsSUFBeUIsQ0FBQ3RDLGdCQUFFd0QsUUFBRixDQUFXaEIsT0FBWCxDQUE5QixFQUFtRDtBQUNqRHBDLG9CQUFPQyxJQUFQLENBQWEsd0RBQWI7O0FBQ0FELG9CQUFPQyxJQUFQLENBQWEsa0JBQWlCaUMsUUFBUyxtQkFBa0JFLE9BQVEsR0FBakU7O0FBQ0E7QUFDRDs7QUFFRCxRQUFNMUMsR0FBRyxDQUFDMkQsd0JBQUosQ0FBNkJuQixRQUE3QixFQUF1Q0UsT0FBdkMsRUFBZ0RlLE1BQWhELENBQU47O0FBRUEsTUFBSSxFQUFDLE1BQU16RCxHQUFHLENBQUM0RCxtQkFBSixDQUF3QnBCLFFBQXhCLEVBQWtDRSxPQUFsQyxFQUEyQ2UsTUFBM0MsQ0FBUCxDQUFKLEVBQStEO0FBQzdELFVBQU1JLE9BQU8sR0FBR0osTUFBTSxHQUFJLGFBQVlqQixRQUFTLGNBQWFFLE9BQVEsZ0JBQWVlLE1BQU8sRUFBcEUsR0FBeUUsYUFBWWpCLFFBQVMsaUJBQWdCRSxPQUFRLEVBQTVJO0FBQ0EsVUFBTSxJQUFJSyxLQUFKLENBQVcsaUJBQWdCYyxPQUFRLEVBQW5DLENBQU47QUFDRDtBQUNGLENBYkQ7O0FBZUEzQyxPQUFPLENBQUM0QyxxQkFBUixHQUFnQyxlQUFlQSxxQkFBZixDQUFzQ3BELElBQUksR0FBRyxFQUE3QyxFQUFpRDtBQUsvRSxRQUFNVixHQUFHLEdBQUcsTUFBTWtCLE9BQU8sQ0FBQ0MsYUFBUixDQUFzQlQsSUFBdEIsQ0FBbEI7QUFDQSxNQUFJcUQsSUFBSSxHQUFHckQsSUFBSSxDQUFDcUQsSUFBaEI7QUFDQSxNQUFJQyxNQUFNLEdBQUcsSUFBYjs7QUFHQSxNQUFJdEQsSUFBSSxDQUFDMkIsR0FBVCxFQUFjO0FBQ1osVUFBTW5CLE9BQU8sQ0FBQ2tCLGVBQVIsQ0FBd0JwQyxHQUF4QixFQUE2QlUsSUFBN0IsQ0FBTjtBQUNBcUQsSUFBQUEsSUFBSSxHQUFHL0QsR0FBRyxDQUFDaUUsV0FBWDtBQUNBRCxJQUFBQSxNQUFNLEdBQUdoRSxHQUFHLENBQUNrRSxZQUFiO0FBQ0QsR0FKRCxNQUlPO0FBRUw1RCxvQkFBTzZELElBQVAsQ0FBWSx3QkFBWjs7QUFDQSxRQUFJQyxPQUFPLEdBQUcsTUFBTXBFLEdBQUcsQ0FBQ3FFLG1CQUFKLEVBQXBCOztBQUdBLFFBQUlOLElBQUosRUFBVTtBQUNSLFVBQUksQ0FBQzdELGdCQUFFRyxRQUFGLENBQVdILGdCQUFFb0UsR0FBRixDQUFNRixPQUFOLEVBQWUsTUFBZixDQUFYLEVBQW1DTCxJQUFuQyxDQUFMLEVBQStDO0FBQzdDekQsd0JBQU9pRSxhQUFQLENBQXNCLFVBQVNSLElBQUssMkNBQXBDO0FBQ0Q7O0FBQ0RDLE1BQUFBLE1BQU0sR0FBR2hFLEdBQUcsQ0FBQ3dFLHlCQUFKLENBQThCVCxJQUE5QixDQUFUO0FBQ0QsS0FMRCxNQUtPLElBQUlyRCxJQUFJLENBQUMrRCxlQUFULEVBQTBCO0FBQy9CL0QsTUFBQUEsSUFBSSxDQUFDK0QsZUFBTCxHQUF3QixHQUFFL0QsSUFBSSxDQUFDK0QsZUFBZ0IsRUFBeEIsQ0FBMEJDLElBQTFCLEVBQXZCO0FBR0EsWUFBTUQsZUFBZSxHQUFHRSxnQkFBT0MsTUFBUCxDQUFjbEUsSUFBSSxDQUFDK0QsZUFBbkIsS0FBdUMvRCxJQUFJLENBQUMrRCxlQUFwRTs7QUFDQW5FLHNCQUFPNkQsSUFBUCxDQUFhLHNDQUFxQ00sZUFBZ0IsR0FBbEU7O0FBSUEsWUFBTUksWUFBWSxHQUFHLEVBQXJCO0FBQ0EsVUFBSUMscUJBQXFCLEdBQUcsSUFBNUI7O0FBRUEsV0FBSyxNQUFNQyxNQUFYLElBQXFCWCxPQUFyQixFQUE4QjtBQUU1QixjQUFNcEUsR0FBRyxDQUFDZ0YsV0FBSixDQUFnQkQsTUFBTSxDQUFDaEIsSUFBdkIsQ0FBTjtBQUNBLGNBQU1rQixXQUFXLEdBQUcsTUFBTWpGLEdBQUcsQ0FBQ2tGLGtCQUFKLEVBQTFCO0FBR0FMLFFBQUFBLFlBQVksQ0FBQzlELElBQWIsQ0FBbUIsR0FBRWdFLE1BQU0sQ0FBQ2hCLElBQUssS0FBSWtCLFdBQVksR0FBakQ7QUFDQSxjQUFNRSxRQUFRLEdBQUdSLGdCQUFPQyxNQUFQLENBQWNLLFdBQWQsS0FBOEJBLFdBQS9DOztBQUNBLFlBQUksQ0FBQ0UsUUFBTCxFQUFlO0FBQ2I7QUFDRDs7QUFFRCxjQUFNQyx3QkFBd0IsR0FBR1QsZ0JBQU9VLEtBQVAsQ0FBYUYsUUFBYixLQUEwQlIsZ0JBQU9VLEtBQVAsQ0FBYVosZUFBYixDQUEzRDs7QUFDQSxjQUFNYSxzQkFBc0IsR0FBR3BGLGdCQUFFd0QsUUFBRixDQUFXeUIsUUFBWCxLQUF3QmpGLGdCQUFFd0QsUUFBRixDQUFXZSxlQUFYLENBQXZEOztBQUNBLFlBQUlXLHdCQUF3QixJQUFJRCxRQUFRLENBQUNJLE9BQVQsS0FBcUJkLGVBQWUsQ0FBQ2MsT0FBakUsSUFDR0Qsc0JBQXNCLElBQUlwRixnQkFBRXNGLE9BQUYsQ0FBVUwsUUFBVixNQUF3QmpGLGdCQUFFc0YsT0FBRixDQUFVZixlQUFWLENBRHpELEVBQ3FGO0FBRW5GVixVQUFBQSxJQUFJLEdBQUdnQixNQUFNLENBQUNoQixJQUFkO0FBQ0E7QUFDRCxTQUxELE1BS08sSUFBSSxDQUFDcUIsd0JBQUwsRUFBK0I7QUFFcEM7QUFDRDs7QUFFRCxZQUFJLENBQUMsQ0FBQ2xGLGdCQUFFRyxRQUFGLENBQVdLLElBQUksQ0FBQytELGVBQWhCLEVBQWlDLEdBQWpDLENBQUQsSUFBMENBLGVBQWUsQ0FBQ2dCLEtBQWhCLEtBQTBCTixRQUFRLENBQUNNLEtBQTdFLElBQ0VoQixlQUFlLENBQUNnQixLQUFoQixLQUEwQk4sUUFBUSxDQUFDTSxLQUFuQyxJQUE0Q2hCLGVBQWUsQ0FBQ2lCLEtBQWhCLEtBQTBCUCxRQUFRLENBQUNPLEtBRGxGLE1BSUlaLHFCQUFxQixJQUFJSCxnQkFBT2dCLEVBQVAsQ0FBVVIsUUFBVixFQUFvQmpGLGdCQUFFQyxNQUFGLENBQVMyRSxxQkFBVCxFQUFnQyxDQUFoQyxDQUFwQixDQUF6QixJQUNHLENBQUNBLHFCQUxSLENBQUosRUFLb0M7QUFDbENBLFVBQUFBLHFCQUFxQixHQUFHO0FBQUMsYUFBQ0MsTUFBTSxDQUFDaEIsSUFBUixHQUFlb0I7QUFBaEIsV0FBeEI7QUFDRDtBQUNGOztBQUNELFVBQUksQ0FBQ3BCLElBQUQsSUFBU2UscUJBQWIsRUFBb0M7QUFDbENmLFFBQUFBLElBQUksR0FBRzdELGdCQUFFMEYsSUFBRixDQUFPZCxxQkFBUCxFQUE4QixDQUE5QixDQUFQO0FBQ0EsY0FBTTlFLEdBQUcsQ0FBQ2dGLFdBQUosQ0FBZ0JqQixJQUFoQixDQUFOO0FBQ0Q7O0FBRUQsVUFBSSxDQUFDQSxJQUFMLEVBQVc7QUFFVHpELHdCQUFPaUUsYUFBUCxDQUFzQiw4Q0FBRCxHQUNsQixXQUFVN0QsSUFBSSxDQUFDK0QsZUFBZ0IsaUNBRGIsR0FFbkJJLFlBQVksQ0FBQ2dCLElBQWIsQ0FBa0IsSUFBbEIsQ0FGRjtBQUdEOztBQUVEN0IsTUFBQUEsTUFBTSxHQUFHaEUsR0FBRyxDQUFDd0UseUJBQUosQ0FBOEJULElBQTlCLENBQVQ7QUFDRCxLQTFETSxNQTBEQTtBQUVMQSxNQUFBQSxJQUFJLEdBQUdLLE9BQU8sQ0FBQyxDQUFELENBQVAsQ0FBV0wsSUFBbEI7QUFDQUMsTUFBQUEsTUFBTSxHQUFHaEUsR0FBRyxDQUFDd0UseUJBQUosQ0FBOEJULElBQTlCLENBQVQ7QUFDRDtBQUNGOztBQUVEekQsa0JBQU82RCxJQUFQLENBQWEsaUJBQWdCSixJQUFLLEVBQWxDOztBQUNBLFNBQU87QUFBQ0EsSUFBQUEsSUFBRDtBQUFPQyxJQUFBQTtBQUFQLEdBQVA7QUFDRCxDQTVGRDs7QUErRkE5QyxPQUFPLENBQUNpQixTQUFSLEdBQW9CLGVBQWVBLFNBQWYsQ0FBMEJ6QixJQUFJLEdBQUcsRUFBakMsRUFBcUM7QUFDdkQsUUFBTTtBQUFDcUQsSUFBQUEsSUFBRDtBQUFPQyxJQUFBQTtBQUFQLE1BQWlCdEQsSUFBdkI7QUFDQSxRQUFNVixHQUFHLEdBQUcsTUFBTWtCLE9BQU8sQ0FBQ0MsYUFBUixDQUFzQlQsSUFBdEIsQ0FBbEI7QUFDQVYsRUFBQUEsR0FBRyxDQUFDZ0YsV0FBSixDQUFnQmpCLElBQWhCOztBQUNBLE1BQUlDLE1BQUosRUFBWTtBQUNWaEUsSUFBQUEsR0FBRyxDQUFDOEYsZUFBSixDQUFvQjlCLE1BQXBCO0FBQ0Q7O0FBRUQsU0FBT2hFLEdBQVA7QUFDRCxDQVREOztBQVdBa0IsT0FBTyxDQUFDNkUsNEJBQVIsR0FBdUMsU0FBU0EsNEJBQVQsQ0FBdUNyRixJQUF2QyxFQUE2QztBQUNsRixPQUFLLE1BQU1zRixHQUFYLElBQWtCLENBQUMsWUFBRCxFQUFlLGFBQWYsRUFBOEIsZ0JBQTlCLEVBQWdELGlCQUFoRCxDQUFsQixFQUFzRjtBQUNwRixVQUFNQyxJQUFJLEdBQUd2RixJQUFJLENBQUNzRixHQUFELENBQWpCOztBQUNBLFFBQUksQ0FBQ0MsSUFBTCxFQUFXO0FBQ1Q7QUFDRDs7QUFFRCxVQUFNQyxLQUFLLEdBQUcsY0FBY0MsSUFBZCxDQUFtQkYsSUFBbkIsQ0FBZDs7QUFDQSxRQUFJLENBQUNDLEtBQUwsRUFBWTtBQUNWO0FBQ0Q7O0FBRUQ1RixvQkFBT0MsSUFBUCxDQUFhLGVBQWN5RixHQUFJLHNHQUEvQjs7QUFDQTFGLG9CQUFPQyxJQUFQLENBQWEsa0JBQWlCMEYsSUFBSyx5Q0FBd0NDLEtBQUssQ0FBQ0UsS0FBTSxNQUFLSCxJQUFJLENBQUNJLFNBQUwsQ0FBZSxDQUFmLEVBQWtCSCxLQUFLLENBQUNFLEtBQU4sR0FBYyxDQUFoQyxDQUFtQyxHQUEvSDtBQUNEO0FBQ0YsQ0FmRDs7QUFpQkFsRixPQUFPLENBQUNvRixhQUFSLEdBQXdCLGVBQWVBLGFBQWYsQ0FBOEJ0RyxHQUE5QixFQUFtQ1UsSUFBbkMsRUFBeUM7QUFDL0QsTUFBSTtBQUFDNkYsSUFBQUEsR0FBRDtBQUFNQyxJQUFBQSxVQUFOO0FBQWtCQyxJQUFBQSxXQUFsQjtBQUErQkMsSUFBQUEsY0FBL0I7QUFBK0NDLElBQUFBO0FBQS9DLE1BQWtFakcsSUFBdEU7O0FBQ0EsTUFBSSxDQUFDNkYsR0FBTCxFQUFVO0FBQ1JqRyxvQkFBT0MsSUFBUCxDQUFZLDhDQUFaOztBQUNBO0FBQ0Q7O0FBRUQsT0FBS3dGLDRCQUFMLENBQWtDckYsSUFBbEM7O0FBRUEsTUFBSThGLFVBQVUsSUFBSUMsV0FBbEIsRUFBK0I7QUFDN0I7QUFDRDs7QUFFRG5HLGtCQUFPK0MsS0FBUCxDQUFhLGdEQUFiOztBQUNBLE1BQUk7QUFBQ3VELElBQUFBLFVBQUQ7QUFBYUMsSUFBQUE7QUFBYixNQUNGLE1BQU03RyxHQUFHLENBQUM4RyxvQ0FBSixDQUF5Q1AsR0FBekMsQ0FEUjs7QUFFQSxNQUFJSyxVQUFVLElBQUksQ0FBQ0osVUFBbkIsRUFBK0I7QUFDN0JBLElBQUFBLFVBQVUsR0FBR0ksVUFBYjtBQUNEOztBQUNELE1BQUksQ0FBQ0YsY0FBTCxFQUFxQjtBQUNuQkEsSUFBQUEsY0FBYyxHQUFHRixVQUFqQjtBQUNEOztBQUNELE1BQUlLLFdBQVcsSUFBSSxDQUFDSixXQUFwQixFQUFpQztBQUMvQkEsSUFBQUEsV0FBVyxHQUFHSSxXQUFkO0FBQ0Q7O0FBQ0QsTUFBSSxDQUFDRixlQUFMLEVBQXNCO0FBQ3BCQSxJQUFBQSxlQUFlLEdBQUdGLFdBQWxCO0FBQ0Q7O0FBQ0RuRyxrQkFBTytDLEtBQVAsQ0FBYyxvQ0FBbUN1RCxVQUFXLElBQUdDLFdBQVksRUFBM0U7O0FBQ0EsU0FBTztBQUFDTCxJQUFBQSxVQUFEO0FBQWFFLElBQUFBLGNBQWI7QUFBNkJELElBQUFBLFdBQTdCO0FBQTBDRSxJQUFBQTtBQUExQyxHQUFQO0FBQ0QsQ0E5QkQ7O0FBZ0NBekYsT0FBTyxDQUFDNkYsUUFBUixHQUFtQixlQUFlQSxRQUFmLENBQXlCL0csR0FBekIsRUFBOEJVLElBQUksR0FBRyxFQUFyQyxFQUF5QztBQUMxRCxRQUFNO0FBQ0o2RixJQUFBQSxHQURJO0FBRUpDLElBQUFBLFVBRkk7QUFHSlEsSUFBQUEsU0FISTtBQUlKQyxJQUFBQSxTQUpJO0FBS0pDLElBQUFBLHFCQUFxQixHQUFHL0gsdUJBTHBCO0FBTUpnSSxJQUFBQSxvQkFOSTtBQU9KQyxJQUFBQTtBQVBJLE1BUUYxRyxJQVJKOztBQVVBLE1BQUksQ0FBQzhGLFVBQUwsRUFBaUI7QUFDZixVQUFNLElBQUl6RCxLQUFKLENBQVUsaUNBQVYsQ0FBTjtBQUNEOztBQUVELFFBQU1zRSxXQUFXLEdBQUcsTUFBTXJILEdBQUcsQ0FBQ3NILGNBQUosQ0FBbUJkLFVBQW5CLENBQTFCOztBQUVBLE1BQUlhLFdBQUosRUFBaUI7QUFDZixRQUFJO0FBQ0YsWUFBTXJILEdBQUcsQ0FBQ3VILFNBQUosQ0FBY2YsVUFBZCxDQUFOO0FBQ0QsS0FGRCxDQUVFLE9BQU9nQixHQUFQLEVBQVksQ0FBRTs7QUFFaEIsUUFBSSxDQUFDUCxTQUFELElBQWNELFNBQWxCLEVBQTZCO0FBQzNCLFlBQU1TLE1BQU0sR0FBRyxNQUFNekgsR0FBRyxDQUFDMEgsS0FBSixDQUFVbEIsVUFBVixDQUFyQjs7QUFDQSxVQUFJdEcsZ0JBQUV3RCxRQUFGLENBQVcrRCxNQUFYLEtBQXNCQSxNQUFNLENBQUNFLFdBQVAsR0FBcUJ0SCxRQUFyQixDQUE4QixRQUE5QixDQUExQixFQUFtRTtBQUNqRSxjQUFNLElBQUkwQyxLQUFKLENBQVcseUNBQXdDeUQsVUFBVyxzQkFBcUJpQixNQUFPLEVBQTFGLENBQU47QUFDRDs7QUFFRCxVQUFJTixvQkFBSixFQUEwQjtBQUN4QixZQUFJO0FBQ0YsZ0JBQU1uSCxHQUFHLENBQUM0SCxtQkFBSixDQUF3QnBCLFVBQXhCLENBQU47QUFDRCxTQUZELENBRUUsT0FBT3FCLEtBQVAsRUFBYztBQUNkdkgsMEJBQU91SCxLQUFQLENBQWMsMERBQXlEQSxLQUFLLENBQUNoRSxPQUFRLEVBQXJGO0FBQ0Q7QUFDRjs7QUFDRHZELHNCQUFPK0MsS0FBUCxDQUFjLDBDQUF5Q21ELFVBQVcsZ0NBQWxFOztBQUNBO0FBQ0Q7QUFDRjs7QUFFRCxNQUFJLENBQUNELEdBQUwsRUFBVTtBQUNSLFVBQU0sSUFBSXhELEtBQUosQ0FBVSx3Q0FBVixDQUFOO0FBQ0Q7O0FBRUR6QyxrQkFBTytDLEtBQVAsQ0FBYywwQkFBeUJtRCxVQUFXLGVBQWxEOztBQUNBLE1BQUlhLFdBQUosRUFBaUI7QUFDZixVQUFNckgsR0FBRyxDQUFDOEgsWUFBSixDQUFpQnRCLFVBQWpCLENBQU47QUFDRDs7QUFDRCxRQUFNeEcsR0FBRyxDQUFDK0gsT0FBSixDQUFZeEIsR0FBWixFQUFpQjtBQUNyQnlCLElBQUFBLGdCQUFnQixFQUFFYixvQkFERztBQUVyQmMsSUFBQUEsT0FBTyxFQUFFZixxQkFGWTtBQUdyQkUsSUFBQUE7QUFIcUIsR0FBakIsQ0FBTjtBQUtELENBckREOztBQXVEQWxHLE9BQU8sQ0FBQ2dILFVBQVIsR0FBcUIsZUFBZUEsVUFBZixDQUEyQmxJLEdBQTNCLEVBQWdDVSxJQUFJLEdBQUcsRUFBdkMsRUFBMkM7QUFDOUQsUUFBTTtBQUNKNkYsSUFBQUEsR0FESTtBQUVKQyxJQUFBQSxVQUZJO0FBR0pRLElBQUFBLFNBSEk7QUFJSkMsSUFBQUEsU0FKSTtBQUtKQyxJQUFBQSxxQkFBcUIsR0FBRy9ILHVCQUxwQjtBQU1KZ0ksSUFBQUEsb0JBTkk7QUFPSkMsSUFBQUEsaUJBUEk7QUFRSmUsSUFBQUE7QUFSSSxNQVNGekgsSUFUSjs7QUFXQSxNQUFJLENBQUM2RixHQUFELElBQVEsQ0FBQ0MsVUFBYixFQUF5QjtBQUN2QixVQUFNLElBQUl6RCxLQUFKLENBQVUsNkNBQVYsQ0FBTjtBQUNEOztBQUVELE1BQUlrRSxTQUFKLEVBQWU7QUFDYixVQUFNLEtBQUtGLFFBQUwsQ0FBYy9HLEdBQWQsRUFBbUJVLElBQW5CLENBQU47QUFDQTtBQUNEOztBQUVELFFBQU07QUFDSjBILElBQUFBLFFBREk7QUFFSkMsSUFBQUE7QUFGSSxNQUdGLE1BQU1ySSxHQUFHLENBQUNzSSxnQkFBSixDQUFxQi9CLEdBQXJCLEVBQTBCQyxVQUExQixFQUFzQztBQUM5Q3dCLElBQUFBLGdCQUFnQixFQUFFYixvQkFENEI7QUFFOUNjLElBQUFBLE9BQU8sRUFBRWYscUJBRnFDO0FBRzlDRSxJQUFBQSxpQkFIOEM7QUFJOUNtQixJQUFBQSxtQkFBbUIsRUFBRUo7QUFKeUIsR0FBdEMsQ0FIVjtBQVdBLFFBQU1LLDBCQUEwQixHQUFHLENBQUNILGNBQUQsSUFDOUJELFFBQVEsS0FBS3BJLEdBQUcsQ0FBQ3lJLGlCQUFKLENBQXNCQyxhQUR4Qzs7QUFFQSxNQUFJMUIsU0FBUyxJQUFJd0IsMEJBQWpCLEVBQTZDO0FBQzNDbEksb0JBQU82RCxJQUFQLENBQWEsNkJBQTRCcUMsVUFBVyxHQUFwRDs7QUFDQSxVQUFNLEtBQUtPLFFBQUwsQ0FBYy9HLEdBQWQsRUFBbUJVLElBQW5CLENBQU47QUFDRDtBQUNGLENBdENEOztBQTZDQVEsT0FBTyxDQUFDeUgsZ0JBQVIsR0FBMkIsZUFBZUEsZ0JBQWYsQ0FBaUNDLFNBQWpDLEVBQTRDNUksR0FBNUMsRUFBaURVLElBQWpELEVBQXVEO0FBQ2hGLE1BQUk7QUFDRndHLElBQUFBLHFCQUFxQixHQUFHL0gsdUJBRHRCO0FBRUZnSSxJQUFBQSxvQkFGRTtBQUdGQyxJQUFBQTtBQUhFLE1BSUExRyxJQUpKO0FBT0EsUUFBTW1JLGtCQUFFQyxHQUFGLENBQU1GLFNBQVMsQ0FBQ3RFLEdBQVYsQ0FBZXlFLFFBQUQsSUFBYztBQUN0Q3pJLG9CQUFPK0MsS0FBUCxDQUFjLG1CQUFrQjBGLFFBQVMsRUFBekM7O0FBQ0EsV0FBTy9JLEdBQUcsQ0FBQ3NJLGdCQUFKLENBQXFCUyxRQUFyQixFQUErQixJQUEvQixFQUFxQztBQUMxQ2YsTUFBQUEsZ0JBQWdCLEVBQUViLG9CQUR3QjtBQUUxQ2MsTUFBQUEsT0FBTyxFQUFFZixxQkFGaUM7QUFHMUNFLE1BQUFBO0FBSDBDLEtBQXJDLENBQVA7QUFLRCxHQVBXLENBQU4sQ0FBTjtBQVFELENBaEJEOztBQXdCQWxHLE9BQU8sQ0FBQzhILHNCQUFSLEdBQWlDLGVBQWVBLHNCQUFmLENBQXVDaEosR0FBdkMsRUFBNENpSixXQUE1QyxFQUF5REMsY0FBYyxHQUFHLEVBQTFFLEVBQThFO0FBQzdHLE1BQUlELFdBQVcsQ0FBQzVJLFFBQVosQ0FBcUIsR0FBckIsQ0FBSixFQUErQjtBQUM3QkMsb0JBQU8rQyxLQUFQLENBQWEsZ0NBQWI7O0FBQ0E0RixJQUFBQSxXQUFXLEdBQUcsTUFBTSxLQUFLRSxxQkFBTCxDQUEyQm5KLEdBQTNCLEVBQWdDa0osY0FBaEMsQ0FBcEI7QUFDRDs7QUFFRDVJLGtCQUFPK0MsS0FBUCxDQUFjLDBCQUF5QjRGLFdBQVksRUFBbkQ7O0FBQ0EsUUFBTUosa0JBQUVDLEdBQUYsQ0FBTUcsV0FBVyxDQUFDM0UsR0FBWixDQUFpQmtDLFVBQUQsSUFBZ0J4RyxHQUFHLENBQUM4SCxZQUFKLENBQWlCdEIsVUFBakIsQ0FBaEMsQ0FBTixDQUFOO0FBQ0QsQ0FSRDs7QUFnQkF0RixPQUFPLENBQUNpSSxxQkFBUixHQUFnQyxlQUFlQSxxQkFBZixDQUFzQ25KLEdBQXRDLEVBQTJDa0osY0FBYyxHQUFHLEVBQTVELEVBQWdFO0FBQzlGLE1BQUk7QUFDRixVQUFNRSxjQUFjLEdBQUcsTUFBTXBKLEdBQUcsQ0FBQ3FKLEtBQUosQ0FBVSxDQUFDLElBQUQsRUFBTyxNQUFQLEVBQWUsVUFBZixFQUEyQixJQUEzQixDQUFWLENBQTdCO0FBQ0EsVUFBTUMsZ0JBQWdCLEdBQUdGLGNBQWMsQ0FBQzFFLElBQWYsR0FBc0J6QixPQUF0QixDQUE4QixXQUE5QixFQUEyQyxFQUEzQyxFQUErQ3NHLEtBQS9DLENBQXFEQyxPQUFyRCxDQUF6Qjs7QUFDQWxKLG9CQUFPK0MsS0FBUCxDQUFjLElBQUdpRyxnQkFBaUIsb0JBQW1CSixjQUFlLEdBQXBFOztBQUNBLFdBQU9oSixnQkFBRXVKLFVBQUYsQ0FBYUgsZ0JBQWIsRUFBK0JKLGNBQS9CLENBQVA7QUFDRCxHQUxELENBS0UsT0FBT1EsR0FBUCxFQUFZO0FBQ1pwSixvQkFBT0MsSUFBUCxDQUFhLGdFQUErRG1KLEdBQUcsQ0FBQzdGLE9BQVEsRUFBeEY7O0FBQ0EsV0FBTyxFQUFQO0FBQ0Q7QUFDRixDQVZEOztBQVlBM0MsT0FBTyxDQUFDeUksbUJBQVIsR0FBOEIsZUFBZUEsbUJBQWYsQ0FBb0MzSixHQUFwQyxFQUF5QztBQUNyRU0sa0JBQU8rQyxLQUFQLENBQWEsbUNBQWI7O0FBR0EsTUFBSXVHLFVBQVUsR0FBRyxNQUFNNUosR0FBRyxDQUFDNEosVUFBSixFQUF2Qjs7QUFFQXRKLGtCQUFPK0MsS0FBUCxDQUFjLDBCQUF5QnVHLFVBQVcsRUFBbEQ7O0FBQ0EsUUFBTUMsU0FBUyxHQUFJLEdBQUVqSyxzQkFBdUIsY0FBNUM7O0FBQ0FVLGtCQUFPK0MsS0FBUCxDQUFjLG1CQUFrQndHLFNBQVUsR0FBMUM7O0FBQ0EsUUFBTTdKLEdBQUcsQ0FBQzhKLFNBQUosQ0FBY0QsU0FBZCxDQUFOO0FBQ0EsUUFBTTdKLEdBQUcsQ0FBQytKLE1BQUosQ0FBV0YsU0FBWCxDQUFOO0FBQ0EsU0FBT0QsVUFBUDtBQUNELENBWkQ7O0FBY0ExSSxPQUFPLENBQUM4SSxrQkFBUixHQUE2QixlQUFlQSxrQkFBZixDQUFtQ2hLLEdBQW5DLEVBQXdDdUcsR0FBeEMsRUFBNkM7QUFDeEUsTUFBSTtBQUNGLFFBQUksT0FBTXZHLEdBQUcsQ0FBQ2lLLFdBQUosRUFBTixJQUEwQixFQUE5QixFQUFrQztBQUNoQyxZQUFNakssR0FBRyxDQUFDcUosS0FBSixDQUFVLENBQUMsVUFBRCxFQUFhLEtBQWIsRUFBb0IsUUFBcEIsRUFBOEIsZUFBOUIsRUFBK0MsR0FBL0MsQ0FBVixDQUFOO0FBQ0QsS0FGRCxNQUVPO0FBQ0wsWUFBTXJKLEdBQUcsQ0FBQ3FKLEtBQUosQ0FBVSxDQUFDLFFBQUQsRUFBVyxLQUFYLEVBQWtCOUMsR0FBbEIsRUFBdUIsdUJBQXZCLEVBQWdELE9BQWhELENBQVYsQ0FBTjtBQUNEO0FBQ0YsR0FORCxDQU1FLE9BQU9tRCxHQUFQLEVBQVk7QUFDWnBKLG9CQUFPQyxJQUFQLENBQWEsd0NBQXVDZ0csR0FBSSxNQUFLbUQsR0FBRyxDQUFDN0YsT0FBUSxFQUF6RTtBQUNEO0FBQ0YsQ0FWRDs7QUFZQTNDLE9BQU8sQ0FBQ2dKLGdCQUFSLEdBQTJCLGVBQWVBLGdCQUFmLENBQWlDbEssR0FBakMsRUFBc0NtSyxPQUF0QyxFQUErQ0MsU0FBL0MsRUFBMEQ7QUFHbkYsUUFBTSxxQkFBTSxDQUFOLEVBQVMsZUFBZUMscUJBQWYsR0FBd0M7QUFDckQsVUFBTXJLLEdBQUcsQ0FBQ3NJLGdCQUFKLENBQXFCNkIsT0FBckIsRUFBOEJDLFNBQTlCLEVBQXlDO0FBQUNwQyxNQUFBQSxnQkFBZ0IsRUFBRTtBQUFuQixLQUF6QyxDQUFOO0FBQ0QsR0FGSyxDQUFOO0FBR0QsQ0FORDs7QUFnQkE5RyxPQUFPLENBQUNvSixlQUFSLEdBQTBCLGVBQWVBLGVBQWYsQ0FBZ0N0SyxHQUFoQyxFQUFxQ3VLLFVBQVUsR0FBRyxLQUFsRCxFQUF5RDtBQUNqRmpLLGtCQUFPK0MsS0FBUCxDQUFhLG1DQUFiOztBQUVBLE1BQUk7QUFDRixVQUFNbkMsT0FBTyxDQUFDZ0osZ0JBQVIsQ0FBeUJsSyxHQUF6QixFQUE4QndLLGNBQTlCLEVBQStDNUssc0JBQS9DLEVBQXVFMkssVUFBdkUsQ0FBTjtBQUNELEdBRkQsQ0FFRSxPQUFPYixHQUFQLEVBQVk7QUFDWixRQUFJYSxVQUFKLEVBQWdCO0FBQ2QsWUFBTWIsR0FBTjtBQUNEOztBQUVEcEosb0JBQU9DLElBQVAsQ0FBYSxtQ0FBa0NpSyxjQUFnQixLQUFuRCxHQUNDLElBQUdkLEdBQUcsQ0FBQzdGLE9BQVEsdUNBRGhCLEdBRUEsMkRBRkEsR0FHQSw2Q0FIWjtBQUlEOztBQUlELE1BQUksTUFBTTdELEdBQUcsQ0FBQ3lLLGFBQUosQ0FBa0I3SyxzQkFBbEIsQ0FBVixFQUFxRDtBQUNuRFUsb0JBQU8rQyxLQUFQLENBQWMsR0FBRXpELHNCQUF1Qix1QkFBMUIsR0FDViw0Q0FESDs7QUFFQTtBQUNEOztBQUVELE1BQUksT0FBTUksR0FBRyxDQUFDaUssV0FBSixFQUFOLEtBQTJCLEVBQS9CLEVBQW1DO0FBRWpDLFVBQU1TLEtBQUssR0FBRyxDQUFDLHFCQUFELEVBQXdCLHNCQUF4QixFQUFnRCxzQkFBaEQsQ0FBZDs7QUFDQXBLLG9CQUFPNkQsSUFBUCxDQUFhLHdCQUF1QnVHLEtBQU0sUUFBTzlLLHNCQUF1QixHQUF4RTs7QUFDQSxVQUFNSSxHQUFHLENBQUNnSSxnQkFBSixDQUFxQnBJLHNCQUFyQixFQUE2QzhLLEtBQUssQ0FBQ3BHLEdBQU4sQ0FBV3FHLENBQUQsSUFBUSxzQkFBcUJBLENBQUUsRUFBekMsQ0FBN0MsQ0FBTjtBQUNEOztBQUtELE1BQUk7QUFDRixVQUFNM0ssR0FBRyxDQUFDNEsseUJBQUosRUFBTjtBQUNELEdBRkQsQ0FFRSxPQUFPbEIsR0FBUCxFQUFZO0FBQ1pwSixvQkFBTytDLEtBQVAsQ0FBYXFHLEdBQWI7O0FBQ0EsUUFBSWEsVUFBSixFQUFnQjtBQUNkLFlBQU1iLEdBQU47QUFDRDtBQUNGO0FBQ0YsQ0ExQ0Q7O0FBMERBeEksT0FBTyxDQUFDMkosV0FBUixHQUFzQixlQUFlQSxXQUFmLENBQTRCckksUUFBNUIsRUFBc0N4QyxHQUF0QyxFQUEyQ1UsSUFBM0MsRUFBaUQ7QUFDckUsUUFBTW9LLFNBQVMsR0FBRyxpQkFBbEI7QUFDQSxRQUFNQyxXQUFXLEdBQUcsY0FBcEI7O0FBQ0EsUUFBTUMsVUFBVSxHQUFHQyxjQUFLQyxLQUFMLENBQVdDLE9BQVgsQ0FBbUJMLFNBQW5CLEVBQThCQyxXQUE5QixDQUFuQjs7QUFHQSxRQUFNL0ssR0FBRyxDQUFDb0wsTUFBSixDQUFXSixVQUFYLENBQU47QUFFQSxNQUFJekUsR0FBSjs7QUFDQSxNQUFJO0FBQ0ZBLElBQUFBLEdBQUcsR0FBRzdGLElBQUksQ0FBQzZGLEdBQUwsS0FBWSxNQUFNdkcsR0FBRyxDQUFDcUwsT0FBSixDQUFZM0ssSUFBSSxDQUFDOEYsVUFBakIsRUFBNkI5RixJQUFJLENBQUM0SyxNQUFsQyxDQUFsQixDQUFOO0FBQ0QsR0FGRCxDQUVFLE9BQU81QixHQUFQLEVBQVk7QUFDWnBKLG9CQUFPNkQsSUFBUCxDQUFhLCtCQUE4QnpELElBQUksQ0FBQzhGLFVBQVcsU0FBUTlGLElBQUksQ0FBQzRLLE1BQU8sc0JBQXFCNUIsR0FBRyxDQUFDN0YsT0FBUSxFQUFoSDtBQUNEOztBQUVELE1BQUkzRCxnQkFBRXFMLE9BQUYsQ0FBVTdLLElBQUksQ0FBQzhGLFVBQWYsS0FBOEIsRUFBRSxNQUFNZ0Ysa0JBQUdDLE1BQUgsQ0FBVWxGLEdBQVYsQ0FBUixDQUFsQyxFQUEyRDtBQUN6RGpHLG9CQUFPK0MsS0FBUCxDQUFjLHNEQUFkOztBQUNBLFdBQU8sRUFBUDtBQUNEOztBQUVELFFBQU1xSSxhQUFhLEdBQUdULGNBQUtFLE9BQUwsQ0FBYXpLLElBQUksQ0FBQzRLLE1BQWxCLEVBQTBCNUssSUFBSSxDQUFDOEYsVUFBL0IsQ0FBdEI7O0FBQ0EsTUFBSTtBQUNGbEcsb0JBQU8rQyxLQUFQLENBQWEsNkJBQWIsRUFBNENrRCxHQUE1QyxFQUFpRC9ELFFBQWpELEVBQTJEa0osYUFBM0Q7O0FBQ0EsVUFBTTtBQUFDQyxNQUFBQSxVQUFEO0FBQWFDLE1BQUFBO0FBQWIsUUFBMEIsTUFBTTVMLEdBQUcsQ0FBQzZMLHFCQUFKLENBQTBCdEYsR0FBMUIsRUFBK0IvRCxRQUEvQixFQUF5Q2tKLGFBQXpDLENBQXRDO0FBQ0EsVUFBTTFMLEdBQUcsQ0FBQ2UsSUFBSixDQUFTNkssU0FBVCxFQUFvQmQsU0FBcEIsQ0FBTjtBQUNBLFdBQU9hLFVBQVA7QUFDRCxHQUxELENBS0UsT0FBT2pDLEdBQVAsRUFBWTtBQUNacEosb0JBQU9DLElBQVAsQ0FBYSw2REFBNERtSixHQUFHLENBQUM3RixPQUFRLEVBQXJGOztBQUNBLFVBQU03RCxHQUFHLENBQUNxSixLQUFKLENBQVUsTUFBVixFQUFrQixDQUFFLFVBQVMyQixVQUFXLEVBQXRCLENBQWxCLENBQU47QUFDRCxHQVJELFNBUVU7QUFDUixVQUFNUSxrQkFBR0osTUFBSCxDQUFVTSxhQUFWLENBQU47QUFDRDs7QUFDRCxTQUFPLEVBQVA7QUFDRCxDQWpDRDs7QUFtQ0F4SyxPQUFPLENBQUM0SyxzQkFBUixHQUFpQyxlQUFlQSxzQkFBZixDQUF1Q0MsTUFBdkMsRUFBK0MvTCxHQUEvQyxFQUFvRGdNLGtCQUFwRCxFQUF3RTtBQUN2RyxNQUFJQyxVQUFVLEdBQUdELGtCQUFrQixDQUFDQyxVQUFwQzs7QUFDQSxNQUFJLENBQUNDLHVCQUFTQyxpQkFBVCxDQUEyQkYsVUFBM0IsQ0FBTCxFQUE2QztBQUMzQyxVQUFNLElBQUlsSixLQUFKLENBQVcsdUJBQXNCa0osVUFBVyxFQUE1QyxDQUFOO0FBQ0Q7O0FBQ0QsTUFBSUcsU0FBUyxHQUFHSixrQkFBa0IsQ0FBQ0ksU0FBbkM7O0FBQ0EsTUFBSSxDQUFDRix1QkFBU0csVUFBVCxDQUFvQkosVUFBcEIsRUFBZ0NHLFNBQWhDLENBQUwsRUFBaUQ7QUFDL0MsVUFBTSxJQUFJckosS0FBSixDQUFXLHFCQUFvQnFKLFNBQVUsOEJBQTZCSCxVQUFXLEVBQWpGLENBQU47QUFDRDs7QUFDRCxRQUFNSyxZQUFZLEdBQUc7QUFDbkIsS0FBQ0MseUJBQUQsR0FBY0wsdUJBQVNNLFNBREo7QUFFbkIsS0FBQ0MsOEJBQUQsR0FBbUJQLHVCQUFTUSxjQUZUO0FBR25CLEtBQUNDLDZCQUFELEdBQWtCVCx1QkFBU1UsYUFIUjtBQUluQixLQUFDQyxpQ0FBRCxHQUFzQlgsdUJBQVNZO0FBSlosSUFLbkJiLFVBTG1CLENBQXJCO0FBTUEsUUFBTUssWUFBWSxDQUFDdE0sR0FBRCxFQUFNK0wsTUFBTixFQUFjQyxrQkFBZCxDQUFsQjtBQUNELENBaEJEOztBQWtCQTlLLE9BQU8sQ0FBQzZMLG1CQUFSLEdBQThCLGVBQWVBLG1CQUFmLENBQW9DL00sR0FBcEMsRUFBeUM7QUFDckVNLGtCQUFPNkQsSUFBUCxDQUFZLGtCQUFaOztBQUdBLE1BQUk2SSxRQUFRLEdBQUcsSUFBZjtBQUNBLFFBQU0scUJBQU0sQ0FBTixFQUFTLGVBQWVDLFlBQWYsR0FBK0I7QUFFNUMsUUFBSUQsUUFBSixFQUFjO0FBQ1pBLE1BQUFBLFFBQVEsR0FBRyxLQUFYO0FBQ0QsS0FGRCxNQUVPO0FBQ0wsVUFBSTtBQUNGLFlBQUksRUFBRSxNQUFNaE4sR0FBRyxDQUFDa04sY0FBSixFQUFSLENBQUosRUFBbUM7QUFDakM7QUFDRDtBQUNGLE9BSkQsQ0FJRSxPQUFPQyxDQUFQLEVBQVU7QUFDVjdNLHdCQUFPQyxJQUFQLENBQWEsNEJBQTJCNE0sQ0FBQyxDQUFDdEosT0FBUSxFQUFsRDs7QUFDQXZELHdCQUFPQyxJQUFQLENBQVksbURBQVo7O0FBQ0FELHdCQUFPQyxJQUFQLENBQVksOEZBQVo7QUFDRDtBQUNGOztBQUVERCxvQkFBTzZELElBQVAsQ0FBYSxhQUFZdEUsK0JBQWdDLEVBQXpEOztBQUNBLFVBQU1HLEdBQUcsQ0FBQ3FKLEtBQUosQ0FBVSxDQUNkLElBRGMsRUFDUixPQURRLEVBRWQsSUFGYyxFQUVQLEdBQUV6SixzQkFBdUIsSUFBR0MsK0JBQWdDLEVBRnJELEVBR2QsSUFIYyxFQUdSLGtDQUhRLEVBSWQsSUFKYyxFQUlSLDRCQUpRLEVBS2QsSUFMYyxFQUtSLFlBTFEsQ0FBVixDQUFOO0FBT0EsVUFBTWdKLGtCQUFFdUUsS0FBRixDQUFRLElBQVIsQ0FBTjtBQUNELEdBekJLLENBQU47QUEwQkQsQ0EvQkQ7O0FBaUNBbE0sT0FBTyxDQUFDbU0sTUFBUixHQUFpQixlQUFlQSxNQUFmLENBQXVCdEIsTUFBdkIsRUFBK0IvTCxHQUEvQixFQUFvQ3NOLFlBQXBDLEVBQWtEO0FBQ2pFLE1BQUksRUFBRSxNQUFNdE4sR0FBRyxDQUFDa04sY0FBSixFQUFSLENBQUosRUFBbUM7QUFDakM1TSxvQkFBTzZELElBQVAsQ0FBWSx3Q0FBWjs7QUFDQTtBQUNEOztBQUVEN0Qsa0JBQU8rQyxLQUFQLENBQWEsb0NBQWI7O0FBQ0EsTUFBSW5ELGdCQUFFcU4sV0FBRixDQUFjRCxZQUFZLENBQUNyQixVQUEzQixDQUFKLEVBQTRDO0FBQzFDM0wsb0JBQU9DLElBQVAsQ0FBWSxtREFBWjs7QUFDQSxVQUFNVyxPQUFPLENBQUM2TCxtQkFBUixDQUE0Qi9NLEdBQTVCLENBQU47QUFDRCxHQUhELE1BR087QUFDTCxVQUFNa0IsT0FBTyxDQUFDNEssc0JBQVIsQ0FBK0JDLE1BQS9CLEVBQXVDL0wsR0FBdkMsRUFBNEM7QUFBQ2lNLE1BQUFBLFVBQVUsRUFBRXFCLFlBQVksQ0FBQ3JCLFVBQTFCO0FBQXNDRyxNQUFBQSxTQUFTLEVBQUVrQixZQUFZLENBQUNsQjtBQUE5RCxLQUE1QyxDQUFOO0FBQ0EsVUFBTWxMLE9BQU8sQ0FBQ3NNLFlBQVIsQ0FBcUJ4TixHQUFyQixFQUEwQnNOLFlBQVksQ0FBQ0csb0JBQXZDLENBQU47QUFDRDtBQUNGLENBZEQ7O0FBZ0JBdk0sT0FBTyxDQUFDc00sWUFBUixHQUF1QixlQUFlQSxZQUFmLENBQTZCeE4sR0FBN0IsRUFBa0N5TixvQkFBbEMsRUFBd0Q7QUFDN0UsTUFBSUMsY0FBYyxHQUFHRCxvQkFBb0IsSUFBSSxJQUE3QztBQUNBLFFBQU0sNkJBQWNDLGNBQWMsR0FBRyxJQUEvQixFQUFxQ0EsY0FBckMsRUFBcUQsWUFBWTtBQUNyRSxRQUFJLE1BQU0xTixHQUFHLENBQUNrTixjQUFKLEVBQVYsRUFBZ0M7QUFDOUIsWUFBTSxJQUFJbkssS0FBSixDQUFVLDhDQUFWLENBQU47QUFDRDs7QUFDRHpDLG9CQUFPK0MsS0FBUCxDQUFhLDhCQUFiO0FBQ0QsR0FMSyxDQUFOO0FBTUQsQ0FSRDs7QUFVQW5DLE9BQU8sQ0FBQ3lNLFVBQVIsR0FBcUIsZUFBZUEsVUFBZixDQUEyQjNOLEdBQTNCLEVBQWdDVSxJQUFoQyxFQUFzQztBQUN6RCxRQUFNO0FBQ0prTixJQUFBQSx3QkFESTtBQUVKbkwsSUFBQUEsTUFGSTtBQUdKRCxJQUFBQSxRQUhJO0FBSUpxTCxJQUFBQSxZQUpJO0FBS0pDLElBQUFBLGVBTEk7QUFNSkMsSUFBQUEsc0JBTkk7QUFPSkMsSUFBQUEsVUFQSTtBQVFKQyxJQUFBQSxlQVJJO0FBU0pDLElBQUFBLGlCQVRJO0FBVUpDLElBQUFBLFlBVkk7QUFXSkMsSUFBQUE7QUFYSSxNQVlGMU4sSUFaSjs7QUFjQSxNQUFJa04sd0JBQUosRUFBOEI7QUFDNUJ0TixvQkFBTzZELElBQVAsQ0FBYSxvRUFBYjtBQUNELEdBRkQsTUFFTztBQUNMLFVBQU1uRSxHQUFHLENBQUNxTyxhQUFKLEVBQU47QUFNQSxVQUFNQyxnQkFBZ0IsR0FBRzlMLFFBQVEsSUFDNUJDLE1BRG9CLElBRXBCb0wsWUFGb0IsSUFHcEJDLGVBSG9CLElBSXBCQyxzQkFKb0IsSUFLcEIsQ0FBQ0MsVUFMTjtBQU1BLFVBQU05TSxPQUFPLENBQUNvSixlQUFSLENBQXdCdEssR0FBeEIsRUFBNkJzTyxnQkFBN0IsQ0FBTjtBQUNEOztBQUVELE1BQUksQ0FBQ3BOLE9BQU8sQ0FBQ3FOLFVBQVIsQ0FBbUJ2TyxHQUFuQixFQUF3QlUsSUFBeEIsQ0FBRCxLQUFtQ3VOLGVBQWUsSUFBSS9OLGdCQUFFcU4sV0FBRixDQUFjVSxlQUFkLENBQXRELENBQUosRUFBMkY7QUFDekYsVUFBTS9NLE9BQU8sQ0FBQzhJLGtCQUFSLENBQTJCaEssR0FBM0IsRUFBZ0NpTyxlQUFlLElBQUlyTyxzQkFBbkQsQ0FBTjtBQUNEOztBQUVELE1BQUk0QyxRQUFRLElBQUlDLE1BQWhCLEVBQXdCO0FBQ3RCLFVBQU12QixPQUFPLENBQUNzQyxrQkFBUixDQUEyQnhELEdBQTNCLEVBQWdDd0MsUUFBaEMsRUFBMENDLE1BQTFDLEVBQWtEb0wsWUFBbEQsQ0FBTjtBQUNEOztBQUVELE1BQUlLLGlCQUFKLEVBQXVCO0FBQ3JCNU4sb0JBQU82RCxJQUFQLENBQWEsK0RBQWI7QUFDRCxHQUZELE1BRU87QUFDTCxVQUFNbkUsR0FBRyxDQUFDd08sV0FBSixDQUFnQjtBQUNwQkMsTUFBQUEsTUFBTSxFQUFFTixZQURZO0FBRXBCTyxNQUFBQSxXQUFXLEVBQUVOO0FBRk8sS0FBaEIsQ0FBTjtBQUlEOztBQUVELE1BQUlOLGVBQUosRUFBcUI7QUFDbkIsV0FBTyxNQUFNNU0sT0FBTyxDQUFDeUksbUJBQVIsQ0FBNEIzSixHQUE1QixDQUFiO0FBQ0Q7QUFDRixDQXJERDs7QUF1REFrQixPQUFPLENBQUN5TixvQkFBUixHQUErQixTQUFTQSxvQkFBVCxDQUErQkMsR0FBL0IsRUFBb0M7QUFDakUsT0FBSyxJQUFJNUksR0FBVCxJQUFnQjlGLGdCQUFFMEYsSUFBRixDQUFPZ0osR0FBUCxDQUFoQixFQUE2QjtBQUMzQixRQUFJMU8sZ0JBQUUyTyxNQUFGLENBQVNELEdBQUcsQ0FBQzVJLEdBQUQsQ0FBWixLQUFzQjlGLGdCQUFFcU4sV0FBRixDQUFjcUIsR0FBRyxDQUFDNUksR0FBRCxDQUFqQixDQUExQixFQUFtRDtBQUNqRCxhQUFPNEksR0FBRyxDQUFDNUksR0FBRCxDQUFWO0FBQ0Q7QUFDRjtBQUNGLENBTkQ7O0FBUUE5RSxPQUFPLENBQUM0TixnQkFBUixHQUEyQixTQUFTQSxnQkFBVCxDQUEyQkMsTUFBM0IsRUFBbUNDLE1BQW5DLEVBQTJDO0FBQ3BFLE1BQUlDLFVBQVUsR0FBR0MsSUFBSSxDQUFDQyxHQUFMLENBQVMsRUFBVCxFQUFhSCxNQUFiLENBQWpCO0FBQUEsTUFDSUksV0FBVyxHQUFHTCxNQUFNLEdBQUdFLFVBRDNCO0FBQUEsTUFFSUksWUFBWSxHQUFHSCxJQUFJLENBQUNFLFdBQVcsR0FBRyxDQUFkLEdBQWtCLE1BQWxCLEdBQTJCLE9BQTVCLENBQUosQ0FBeUNBLFdBQXpDLENBRm5CO0FBSUEsU0FBT0MsWUFBWSxHQUFHSixVQUF0QjtBQUNELENBTkQ7O0FBUUEvTixPQUFPLENBQUNvTyxlQUFSLEdBQTBCLFNBQVNBLGVBQVQsQ0FBMEI1UCxPQUExQixFQUFtQztBQUMzRCxTQUFPUSxnQkFBRUcsUUFBRixDQUFXa1AsTUFBTSxDQUFDM0osSUFBUCxDQUFZeEcsK0JBQVosQ0FBWCxFQUF5RCxDQUFDTSxPQUFPLElBQUksRUFBWixFQUFnQmlJLFdBQWhCLEVBQXpELENBQVA7QUFDRCxDQUZEOztBQUlBekcsT0FBTyxDQUFDc08sWUFBUixHQUF1QixTQUFTQSxZQUFULENBQXVCOVAsT0FBdkIsRUFBZ0M7QUFDckQsU0FBT04sK0JBQStCLENBQUNNLE9BQU8sQ0FBQ2lJLFdBQVIsRUFBRCxDQUEvQixJQUEwRHZJLCtCQUErQixDQUFDTyxPQUFqRztBQUNELENBRkQ7O0FBSUF1QixPQUFPLENBQUN1TyxpQ0FBUixHQUE0QyxlQUFlQSxpQ0FBZixDQUFrREMsTUFBbEQsRUFBMERDLFNBQTFELEVBQXFFO0FBQy9HLE1BQUksQ0FBQ0QsTUFBRCxJQUFXLENBQUN4UCxnQkFBRTBQLFVBQUYsQ0FBYUYsTUFBTSxDQUFDRyxvQkFBcEIsQ0FBaEIsRUFBMkQ7QUFDekQ7QUFDRDs7QUFFRCxRQUFNQyxjQUFjLEdBQUcsTUFBTUosTUFBTSxDQUFDRyxvQkFBUCxDQUE0QkYsU0FBNUIsQ0FBN0I7O0FBQ0EsT0FBSyxNQUFNSSxRQUFYLElBQXVCN1AsZ0JBQUUwRixJQUFGLENBQU9rSyxjQUFQLENBQXZCLEVBQStDO0FBQzdDLFVBQU1KLE1BQU0sQ0FBQ00sc0JBQVAsQ0FBOEJELFFBQTlCLENBQU47QUFDRDtBQUNGLENBVEQ7O0FBaUJBN08sT0FBTyxDQUFDK08sVUFBUixHQUFxQixTQUFTQSxVQUFULENBQXFCQyxHQUFyQixFQUEwQjtBQUM3QyxNQUFJQyxVQUFKOztBQUNBLE1BQUk7QUFDRkEsSUFBQUEsVUFBVSxHQUFHQyxJQUFJLENBQUNDLEtBQUwsQ0FBV0gsR0FBWCxDQUFiO0FBQ0QsR0FGRCxDQUVFLE9BQU8xSSxHQUFQLEVBQVksQ0FBRzs7QUFFakIsTUFBSXRILGdCQUFFWSxPQUFGLENBQVVxUCxVQUFWLENBQUosRUFBMkI7QUFDekIsV0FBT0EsVUFBUDtBQUNELEdBRkQsTUFFTyxJQUFJalEsZ0JBQUV3RCxRQUFGLENBQVd3TSxHQUFYLENBQUosRUFBcUI7QUFDMUIsV0FBTyxDQUFDQSxHQUFELENBQVA7QUFDRDs7QUFFRCxRQUFNLElBQUluTixLQUFKLENBQVcsaURBQWdEbU4sR0FBSSxFQUEvRCxDQUFOO0FBQ0QsQ0FiRDs7QUFzQkFoUCxPQUFPLENBQUNvUCxtQkFBUixHQUE4QixTQUFTQSxtQkFBVCxDQUE4QkMsSUFBOUIsRUFBb0M7QUFDaEUsTUFBSUEsSUFBSSxDQUFDQyxXQUFULEVBQXNCO0FBQ3BCLFFBQUlELElBQUksQ0FBQ2hLLEdBQVQsRUFBYztBQUVaakcsc0JBQU9DLElBQVAsQ0FBYSx5RkFBYjtBQUNEOztBQUNELFFBQUlnUSxJQUFJLENBQUMvSixVQUFULEVBQXFCO0FBQ25CbEcsc0JBQU9pRSxhQUFQLENBQXNCLDRFQUF0QjtBQUNEO0FBQ0Y7O0FBRUQsTUFBSWdNLElBQUksQ0FBQ3ZILHNCQUFULEVBQWlDO0FBQy9CLFFBQUk7QUFDRixXQUFLaUgsVUFBTCxDQUFnQk0sSUFBSSxDQUFDdkgsc0JBQXJCO0FBQ0QsS0FGRCxDQUVFLE9BQU9tRSxDQUFQLEVBQVU7QUFDVjdNLHNCQUFPaUUsYUFBUCxDQUFzQix3REFBdUQ0SSxDQUFDLENBQUN0SixPQUFRLEVBQXZGO0FBQ0Q7QUFDRjs7QUFFRCxTQUFPLElBQVA7QUFDRCxDQXBCRDs7QUErQkEzQyxPQUFPLENBQUN1UCx3QkFBUixHQUFtQyxTQUFTQSx3QkFBVCxDQUFtQ0YsSUFBSSxHQUFHLEVBQTFDLEVBQThDO0FBQy9FLFFBQU07QUFBRUMsSUFBQUE7QUFBRixNQUFrQkQsSUFBeEI7O0FBQ0FqUSxrQkFBTzZELElBQVAsQ0FBYSxpREFBYjs7QUFDQTdELGtCQUFPNkQsSUFBUCxDQUFhLDRCQUEyQmlNLElBQUksQ0FBQ00sU0FBTCxDQUFleFEsZ0JBQUUwRixJQUFGLENBQU94RywrQkFBUCxDQUFmLENBQXdELEVBQWhHOztBQUNBLE1BQUltUixJQUFJLENBQUMvSixVQUFMLElBQW1CK0osSUFBSSxDQUFDOUosV0FBNUIsRUFBeUM7QUFDdkNuRyxvQkFBTzZELElBQVAsQ0FBYSxnRUFBK0RxTSxXQUFZLElBQTVFLEdBQ1YsaURBREY7O0FBRUEsV0FBT0QsSUFBUDtBQUNEOztBQUVELFFBQU07QUFBQ2pSLElBQUFBLEdBQUQ7QUFBTUMsSUFBQUE7QUFBTixNQUFrQixLQUFLaVEsWUFBTCxDQUFrQmdCLFdBQWxCLENBQXhCO0FBQ0FELEVBQUFBLElBQUksQ0FBQy9KLFVBQUwsR0FBa0JsSCxHQUFsQjtBQUNBaVIsRUFBQUEsSUFBSSxDQUFDOUosV0FBTCxHQUFtQmxILFFBQW5COztBQUNBZSxrQkFBTzZELElBQVAsQ0FBYSxzRUFBcUU3RSxHQUFJLElBQUdDLFFBQVMsR0FBdEYsR0FDVCxRQUFPaVIsV0FBWSxHQUR0Qjs7QUFFQWxRLGtCQUFPNkQsSUFBUCxDQUFhLHdGQUFELEdBQ1QsbUdBRFMsR0FFVCxnQkFGSDs7QUFHQSxTQUFPb00sSUFBUDtBQUNELENBbkJEOztBQTRCQXJQLE9BQU8sQ0FBQ3FOLFVBQVIsR0FBcUIsU0FBU0EsVUFBVCxDQUFxQnZPLEdBQXJCLEVBQTBCVSxJQUExQixFQUFnQztBQUNuRCxRQUFNaVEsYUFBYSxHQUFHLENBQUNqUSxJQUFJLENBQUNxRCxJQUFOLEVBQVkvRCxHQUFaLGFBQVlBLEdBQVosdUJBQVlBLEdBQUcsQ0FBRWlFLFdBQWpCLENBQXRCO0FBQ0EsU0FBTyxDQUFDLENBQUN2RCxJQUFJLENBQUMyQixHQUFQLElBQWNzTyxhQUFhLENBQUNDLElBQWQsQ0FBb0JqRyxDQUFELElBQU83SyxnQkFBZ0IsQ0FBQytRLElBQWpCLENBQXNCbEcsQ0FBdEIsQ0FBMUIsQ0FBckI7QUFDRCxDQUhEOztBQUtBekosT0FBTyxDQUFDNFAsU0FBUixHQUFvQkMsa0JBQXBCO0FBQ0E3UCxPQUFPLENBQUNnTCxRQUFSLEdBQW1CQSxzQkFBbkI7ZUFHZWhMLE8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyByZXRyeSwgcmV0cnlJbnRlcnZhbCB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgZnMsIHV0aWwgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQgeyBwYXRoIGFzIHNldHRpbmdzQXBrUGF0aCB9IGZyb20gJ2lvLmFwcGl1bS5zZXR0aW5ncyc7XG5pbXBvcnQgQm9vdHN0cmFwIGZyb20gJy4vYm9vdHN0cmFwJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBBREIgZnJvbSAnYXBwaXVtLWFkYic7XG5pbXBvcnQge1xuICBkZWZhdWx0IGFzIHVubG9ja2VyLCBQSU5fVU5MT0NLLCBQQVNTV09SRF9VTkxPQ0ssXG4gIFBBVFRFUk5fVU5MT0NLLCBGSU5HRVJQUklOVF9VTkxPQ0tcbn0gZnJvbSAnLi91bmxvY2staGVscGVycyc7XG5pbXBvcnQgeyBFT0wgfSBmcm9tICdvcyc7XG5pbXBvcnQgc2VtdmVyIGZyb20gJ3NlbXZlcic7XG5cbmNvbnN0IFBBQ0tBR0VfSU5TVEFMTF9USU1FT1VUID0gOTAwMDA7IC8vIG1pbGxpc2Vjb25kc1xuLy8gaHR0cHM6Ly9jcy5jaHJvbWl1bS5vcmcvY2hyb21pdW0vc3JjL2Nocm9tZS9icm93c2VyL2RldnRvb2xzL2RldmljZS9hbmRyb2lkX2RldmljZV9pbmZvX3F1ZXJ5LmNjXG5jb25zdCBDSFJPTUVfQlJPV1NFUl9QQUNLQUdFX0FDVElWSVRZID0ge1xuICBjaHJvbWU6IHtcbiAgICBwa2c6ICdjb20uYW5kcm9pZC5jaHJvbWUnLFxuICAgIGFjdGl2aXR5OiAnY29tLmdvb2dsZS5hbmRyb2lkLmFwcHMuY2hyb21lLk1haW4nLFxuICB9LFxuICBjaHJvbWl1bToge1xuICAgIHBrZzogJ29yZy5jaHJvbWl1bS5jaHJvbWUuc2hlbGwnLFxuICAgIGFjdGl2aXR5OiAnLkNocm9tZVNoZWxsQWN0aXZpdHknLFxuICB9LFxuICBjaHJvbWViZXRhOiB7XG4gICAgcGtnOiAnY29tLmNocm9tZS5iZXRhJyxcbiAgICBhY3Rpdml0eTogJ2NvbS5nb29nbGUuYW5kcm9pZC5hcHBzLmNocm9tZS5NYWluJyxcbiAgfSxcbiAgYnJvd3Nlcjoge1xuICAgIHBrZzogJ2NvbS5hbmRyb2lkLmJyb3dzZXInLFxuICAgIGFjdGl2aXR5OiAnY29tLmFuZHJvaWQuYnJvd3Nlci5Ccm93c2VyQWN0aXZpdHknLFxuICB9LFxuICAnY2hyb21pdW0tYnJvd3Nlcic6IHtcbiAgICBwa2c6ICdvcmcuY2hyb21pdW0uY2hyb21lJyxcbiAgICBhY3Rpdml0eTogJ2NvbS5nb29nbGUuYW5kcm9pZC5hcHBzLmNocm9tZS5NYWluJyxcbiAgfSxcbiAgJ2Nocm9taXVtLXdlYnZpZXcnOiB7XG4gICAgcGtnOiAnb3JnLmNocm9taXVtLndlYnZpZXdfc2hlbGwnLFxuICAgIGFjdGl2aXR5OiAnb3JnLmNocm9taXVtLndlYnZpZXdfc2hlbGwuV2ViVmlld0Jyb3dzZXJBY3Rpdml0eScsXG4gIH0sXG4gIGRlZmF1bHQ6IHtcbiAgICBwa2c6ICdjb20uYW5kcm9pZC5jaHJvbWUnLFxuICAgIGFjdGl2aXR5OiAnY29tLmdvb2dsZS5hbmRyb2lkLmFwcHMuY2hyb21lLk1haW4nLFxuICB9LFxufTtcbmNvbnN0IFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQgPSAnaW8uYXBwaXVtLnNldHRpbmdzJztcbmNvbnN0IFNFVFRJTkdTX0hFTFBFUl9VTkxPQ0tfQUNUSVZJVFkgPSAnLlVubG9jayc7XG5jb25zdCBFTVVMQVRPUl9QQVRURVJOID0gL1xcYmVtdWxhdG9yXFxiL2k7XG5cblxuZnVuY3Rpb24gZW5zdXJlTmV0d29ya1NwZWVkIChhZGIsIG5ldHdvcmtTcGVlZCkge1xuICBpZiAoXy52YWx1ZXMoYWRiLk5FVFdPUktfU1BFRUQpLmluY2x1ZGVzKG5ldHdvcmtTcGVlZCkpIHtcbiAgICByZXR1cm4gbmV0d29ya1NwZWVkO1xuICB9XG4gIGxvZ2dlci53YXJuKGBXcm9uZyBuZXR3b3JrIHNwZWVkIHBhcmFtICcke25ldHdvcmtTcGVlZH0nLCB1c2luZyBkZWZhdWx0OiAke2FkYi5ORVRXT1JLX1NQRUVELkZVTEx9LiBgICtcbiAgICBgU3VwcG9ydGVkIHZhbHVlczogJHtfLnZhbHVlcyhhZGIuTkVUV09SS19TUEVFRCl9YCk7XG4gIHJldHVybiBhZGIuTkVUV09SS19TUEVFRC5GVUxMO1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlQXZkQXJncyAoYWRiLCBvcHRzKSB7XG4gIGNvbnN0IHtcbiAgICBuZXR3b3JrU3BlZWQsXG4gICAgaXNIZWFkbGVzcyxcbiAgICBhdmRBcmdzLFxuICB9ID0gb3B0cztcbiAgY29uc3QgcmVzdWx0ID0gW107XG4gIGlmIChhdmRBcmdzKSB7XG4gICAgaWYgKF8uaXNBcnJheShhdmRBcmdzKSkge1xuICAgICAgcmVzdWx0LnB1c2goLi4uYXZkQXJncyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wdXNoKC4uLih1dGlsLnNoZWxsUGFyc2UoYCR7YXZkQXJnc31gKSkpO1xuICAgIH1cbiAgfVxuICBpZiAobmV0d29ya1NwZWVkKSB7XG4gICAgcmVzdWx0LnB1c2goJy1uZXRzcGVlZCcsIGVuc3VyZU5ldHdvcmtTcGVlZChhZGIsIG5ldHdvcmtTcGVlZCkpO1xuICB9XG4gIGlmIChpc0hlYWRsZXNzKSB7XG4gICAgcmVzdWx0LnB1c2goJy1uby13aW5kb3cnKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5cbmNvbnN0IGhlbHBlcnMgPSB7fTtcblxuaGVscGVycy5jcmVhdGVCYXNlQURCID0gYXN5bmMgZnVuY3Rpb24gY3JlYXRlQmFzZUFEQiAob3B0cyA9IHt9KSB7XG4gIC8vIGZpbHRlciBvdXQgYW55IHVud2FudGVkIG9wdGlvbnMgc2VudCBpblxuICAvLyB0aGlzIGxpc3Qgc2hvdWxkIGJlIHVwZGF0ZWQgYXMgQURCIHRha2VzIG1vcmUgYXJndW1lbnRzXG4gIGNvbnN0IHtcbiAgICBhZGJQb3J0LFxuICAgIHN1cHByZXNzS2lsbFNlcnZlcixcbiAgICByZW1vdGVBZGJIb3N0LFxuICAgIGNsZWFyRGV2aWNlTG9nc09uU3RhcnQsXG4gICAgYWRiRXhlY1RpbWVvdXQsXG4gICAgdXNlS2V5c3RvcmUsXG4gICAga2V5c3RvcmVQYXRoLFxuICAgIGtleXN0b3JlUGFzc3dvcmQsXG4gICAga2V5QWxpYXMsXG4gICAga2V5UGFzc3dvcmQsXG4gICAgcmVtb3RlQXBwc0NhY2hlTGltaXQsXG4gICAgYnVpbGRUb29sc1ZlcnNpb24sXG4gICAgYWxsb3dPZmZsaW5lRGV2aWNlcyxcbiAgICBhbGxvd0RlbGF5QWRiLFxuICB9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IEFEQi5jcmVhdGVBREIoe1xuICAgIGFkYlBvcnQsXG4gICAgc3VwcHJlc3NLaWxsU2VydmVyLFxuICAgIHJlbW90ZUFkYkhvc3QsXG4gICAgY2xlYXJEZXZpY2VMb2dzT25TdGFydCxcbiAgICBhZGJFeGVjVGltZW91dCxcbiAgICB1c2VLZXlzdG9yZSxcbiAgICBrZXlzdG9yZVBhdGgsXG4gICAga2V5c3RvcmVQYXNzd29yZCxcbiAgICBrZXlBbGlhcyxcbiAgICBrZXlQYXNzd29yZCxcbiAgICByZW1vdGVBcHBzQ2FjaGVMaW1pdCxcbiAgICBidWlsZFRvb2xzVmVyc2lvbixcbiAgICBhbGxvd09mZmxpbmVEZXZpY2VzLFxuICAgIGFsbG93RGVsYXlBZGIsXG4gIH0pO1xufTtcblxuaGVscGVycy5wcmVwYXJlRW11bGF0b3IgPSBhc3luYyBmdW5jdGlvbiBwcmVwYXJlRW11bGF0b3IgKGFkYiwgb3B0cykge1xuICBjb25zdCB7XG4gICAgYXZkLFxuICAgIGF2ZEVudjogZW52LFxuICAgIGxhbmd1YWdlLFxuICAgIGxvY2FsZTogY291bnRyeSxcbiAgICBhdmRMYXVuY2hUaW1lb3V0OiBsYXVuY2hUaW1lb3V0LFxuICAgIGF2ZFJlYWR5VGltZW91dDogcmVhZHlUaW1lb3V0LFxuICB9ID0gb3B0cztcbiAgaWYgKCFhdmQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBsYXVuY2ggQVZEIHdpdGhvdXQgQVZEIG5hbWUnKTtcbiAgfVxuXG4gIGNvbnN0IGF2ZE5hbWUgPSBhdmQucmVwbGFjZSgnQCcsICcnKTtcbiAgY29uc3QgcnVubmluZ0FWRCA9IGF3YWl0IGFkYi5nZXRSdW5uaW5nQVZEKGF2ZE5hbWUpO1xuICBjb25zdCBhcmdzID0gcHJlcGFyZUF2ZEFyZ3MoYWRiLCBvcHRzKTtcbiAgaWYgKHJ1bm5pbmdBVkQpIHtcbiAgICBpZiAoYXJncy5pbmNsdWRlcygnLXdpcGUtZGF0YScpKSB7XG4gICAgICBsb2dnZXIuZGVidWcoYEtpbGxpbmcgJyR7YXZkTmFtZX0nIGJlY2F1c2UgaXQgbmVlZHMgdG8gYmUgd2lwZWQgYXQgc3RhcnQuYCk7XG4gICAgICBhd2FpdCBhZGIua2lsbEVtdWxhdG9yKGF2ZE5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ05vdCBsYXVuY2hpbmcgQVZEIGJlY2F1c2UgaXQgaXMgYWxyZWFkeSBydW5uaW5nLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICBhd2FpdCBhZGIubGF1bmNoQVZEKGF2ZCwge1xuICAgIGFyZ3MsXG4gICAgZW52LFxuICAgIGxhbmd1YWdlLFxuICAgIGNvdW50cnksXG4gICAgbGF1bmNoVGltZW91dCxcbiAgICByZWFkeVRpbWVvdXQsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBTZXQgYW5kIGVuc3VyZSB0aGUgbG9jYWxlIG5hbWUgb2YgdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBhZGIgLSBUaGUgYWRiIG1vZHVsZSBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBsYW5ndWFnZSAtIExhbmd1YWdlLiBUaGUgbGFuZ3VhZ2UgZmllbGQgaXMgY2FzZSBpbnNlbnNpdGl2ZSwgYnV0IExvY2FsZSBhbHdheXMgY2Fub25pY2FsaXplcyB0byBsb3dlciBjYXNlLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiBbYS16QS1aXXsyLDh9LiBlLmcuIGVuLCBqYSA6IGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9qYXZhL3V0aWwvTG9jYWxlLmh0bWxcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb3VudHJ5IC0gQ291bnRyeS4gVGhlIGNvdW50cnkgKHJlZ2lvbikgZmllbGQgaXMgY2FzZSBpbnNlbnNpdGl2ZSwgYnV0IExvY2FsZSBhbHdheXMgY2Fub25pY2FsaXplcyB0byB1cHBlciBjYXNlLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiBbYS16QS1aXXsyfSB8IFswLTldezN9LiBlLmcuIFVTLCBKUCA6IGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9qYXZhL3V0aWwvTG9jYWxlLmh0bWxcbiAqIEBwYXJhbSB7P3N0cmluZ30gc2NyaXB0IC0gU2NyaXB0LiBUaGUgc2NyaXB0IGZpZWxkIGlzIGNhc2UgaW5zZW5zaXRpdmUgYnV0IExvY2FsZSBhbHdheXMgY2Fub25pY2FsaXplcyB0byB0aXRsZSBjYXNlLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiBbYS16QS1aXXs0fS4gZS5nLiBIYW5zIGluIHpoLUhhbnMtQ04gOiBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvamF2YS91dGlsL0xvY2FsZS5odG1sXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgaXQgZmFpbGVkIHRvIHNldCBsb2NhbGUgcHJvcGVybHlcbiAqL1xuaGVscGVycy5lbnN1cmVEZXZpY2VMb2NhbGUgPSBhc3luYyBmdW5jdGlvbiBlbnN1cmVEZXZpY2VMb2NhbGUgKGFkYiwgbGFuZ3VhZ2UsIGNvdW50cnksIHNjcmlwdCA9IG51bGwpIHtcbiAgaWYgKCFfLmlzU3RyaW5nKGxhbmd1YWdlKSAmJiAhXy5pc1N0cmluZyhjb3VudHJ5KSkge1xuICAgIGxvZ2dlci53YXJuKGBzZXREZXZpY2VMYW5ndWFnZUNvdW50cnkgcmVxdWlyZXMgbGFuZ3VhZ2Ugb3IgY291bnRyeS5gKTtcbiAgICBsb2dnZXIud2FybihgR290IGxhbmd1YWdlOiAnJHtsYW5ndWFnZX0nIGFuZCBjb3VudHJ5OiAnJHtjb3VudHJ5fSdgKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBhd2FpdCBhZGIuc2V0RGV2aWNlTGFuZ3VhZ2VDb3VudHJ5KGxhbmd1YWdlLCBjb3VudHJ5LCBzY3JpcHQpO1xuXG4gIGlmICghYXdhaXQgYWRiLmVuc3VyZUN1cnJlbnRMb2NhbGUobGFuZ3VhZ2UsIGNvdW50cnksIHNjcmlwdCkpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gc2NyaXB0ID8gYGxhbmd1YWdlOiAke2xhbmd1YWdlfSwgY291bnRyeTogJHtjb3VudHJ5fSBhbmQgc2NyaXB0OiAke3NjcmlwdH1gIDogYGxhbmd1YWdlOiAke2xhbmd1YWdlfSBhbmQgY291bnRyeTogJHtjb3VudHJ5fWA7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gc2V0ICR7bWVzc2FnZX1gKTtcbiAgfVxufTtcblxuaGVscGVycy5nZXREZXZpY2VJbmZvRnJvbUNhcHMgPSBhc3luYyBmdW5jdGlvbiBnZXREZXZpY2VJbmZvRnJvbUNhcHMgKG9wdHMgPSB7fSkge1xuICAvLyB3ZSBjYW4gY3JlYXRlIGEgdGhyb3dhd2F5IEFEQiBpbnN0YW5jZSBoZXJlLCBzbyB0aGVyZSBpcyBubyBkZXBlbmRlbmN5XG4gIC8vIG9uIGluc3RhbnRpYXRpbmcgb24gZWFybGllciAoYXQgdGhpcyBwb2ludCwgd2UgaGF2ZSBubyB1ZGlkKVxuICAvLyB3ZSBjYW4gb25seSB1c2UgdGhpcyBBREIgb2JqZWN0IGZvciBjb21tYW5kcyB0aGF0IHdvdWxkIG5vdCBiZSBjb25mdXNlZFxuICAvLyBpZiBtdWx0aXBsZSBkZXZpY2VzIGFyZSBjb25uZWN0ZWRcbiAgY29uc3QgYWRiID0gYXdhaXQgaGVscGVycy5jcmVhdGVCYXNlQURCKG9wdHMpO1xuICBsZXQgdWRpZCA9IG9wdHMudWRpZDtcbiAgbGV0IGVtUG9ydCA9IG51bGw7XG5cbiAgLy8gYSBzcGVjaWZpYyBhdmQgbmFtZSB3YXMgZ2l2ZW4uIHRyeSB0byBpbml0aWFsaXplIHdpdGggdGhhdFxuICBpZiAob3B0cy5hdmQpIHtcbiAgICBhd2FpdCBoZWxwZXJzLnByZXBhcmVFbXVsYXRvcihhZGIsIG9wdHMpO1xuICAgIHVkaWQgPSBhZGIuY3VyRGV2aWNlSWQ7XG4gICAgZW1Qb3J0ID0gYWRiLmVtdWxhdG9yUG9ydDtcbiAgfSBlbHNlIHtcbiAgICAvLyBubyBhdmQgZ2l2ZW4uIGxldHMgdHJ5IHdoYXRldmVyJ3MgcGx1Z2dlZCBpbiBkZXZpY2VzL2VtdWxhdG9yc1xuICAgIGxvZ2dlci5pbmZvKCdSZXRyaWV2aW5nIGRldmljZSBsaXN0Jyk7XG4gICAgbGV0IGRldmljZXMgPSBhd2FpdCBhZGIuZ2V0RGV2aWNlc1dpdGhSZXRyeSgpO1xuXG4gICAgLy8gdWRpZCB3YXMgZ2l2ZW4sIGxldHMgdHJ5IHRvIGluaXQgd2l0aCB0aGF0IGRldmljZVxuICAgIGlmICh1ZGlkKSB7XG4gICAgICBpZiAoIV8uaW5jbHVkZXMoXy5tYXAoZGV2aWNlcywgJ3VkaWQnKSwgdWRpZCkpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yQW5kVGhyb3coYERldmljZSAke3VkaWR9IHdhcyBub3QgaW4gdGhlIGxpc3Qgb2YgY29ubmVjdGVkIGRldmljZXNgKTtcbiAgICAgIH1cbiAgICAgIGVtUG9ydCA9IGFkYi5nZXRQb3J0RnJvbUVtdWxhdG9yU3RyaW5nKHVkaWQpO1xuICAgIH0gZWxzZSBpZiAob3B0cy5wbGF0Zm9ybVZlcnNpb24pIHtcbiAgICAgIG9wdHMucGxhdGZvcm1WZXJzaW9uID0gYCR7b3B0cy5wbGF0Zm9ybVZlcnNpb259YC50cmltKCk7XG5cbiAgICAgIC8vIGEgcGxhdGZvcm0gdmVyc2lvbiB3YXMgZ2l2ZW4uIGxldHMgdHJ5IHRvIGZpbmQgYSBkZXZpY2Ugd2l0aCB0aGUgc2FtZSBvc1xuICAgICAgY29uc3QgcGxhdGZvcm1WZXJzaW9uID0gc2VtdmVyLmNvZXJjZShvcHRzLnBsYXRmb3JtVmVyc2lvbikgfHwgb3B0cy5wbGF0Zm9ybVZlcnNpb247XG4gICAgICBsb2dnZXIuaW5mbyhgTG9va2luZyBmb3IgYSBkZXZpY2Ugd2l0aCBBbmRyb2lkICcke3BsYXRmb3JtVmVyc2lvbn0nYCk7XG5cbiAgICAgIC8vIGluIGNhc2Ugd2UgZmFpbCB0byBmaW5kIHNvbWV0aGluZywgZ2l2ZSB0aGUgdXNlciBhIHVzZWZ1bCBsb2cgdGhhdCBoYXNcbiAgICAgIC8vIHRoZSBkZXZpY2UgdWRpZHMgYW5kIG9zIHZlcnNpb25zIHNvIHRoZXkga25vdyB3aGF0J3MgYXZhaWxhYmxlXG4gICAgICBjb25zdCBhdmFpbERldmljZXMgPSBbXTtcbiAgICAgIGxldCBwYXJ0aWFsTWF0Y2hDYW5kaWRhdGUgPSBudWxsO1xuICAgICAgLy8gZmlyc3QgdHJ5IHN0YXJ0ZWQgZGV2aWNlcy9lbXVsYXRvcnNcbiAgICAgIGZvciAoY29uc3QgZGV2aWNlIG9mIGRldmljZXMpIHtcbiAgICAgICAgLy8gZGlyZWN0IGFkYiBjYWxscyB0byB0aGUgc3BlY2lmaWMgZGV2aWNlXG4gICAgICAgIGF3YWl0IGFkYi5zZXREZXZpY2VJZChkZXZpY2UudWRpZCk7XG4gICAgICAgIGNvbnN0IHJhd0RldmljZU9TID0gYXdhaXQgYWRiLmdldFBsYXRmb3JtVmVyc2lvbigpO1xuICAgICAgICAvLyBUaGUgZGV2aWNlIE9TIGNvdWxkIGVpdGhlciBiZSBhIG51bWJlciwgbGlrZSBgNi4wYFxuICAgICAgICAvLyBvciBhbiBhYmJyZXZpYXRpb24sIGxpa2UgYFJgXG4gICAgICAgIGF2YWlsRGV2aWNlcy5wdXNoKGAke2RldmljZS51ZGlkfSAoJHtyYXdEZXZpY2VPU30pYCk7XG4gICAgICAgIGNvbnN0IGRldmljZU9TID0gc2VtdmVyLmNvZXJjZShyYXdEZXZpY2VPUykgfHwgcmF3RGV2aWNlT1M7XG4gICAgICAgIGlmICghZGV2aWNlT1MpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJvdGhWZXJzaW9uc0NhbkJlQ29lcmNlZCA9IHNlbXZlci52YWxpZChkZXZpY2VPUykgJiYgc2VtdmVyLnZhbGlkKHBsYXRmb3JtVmVyc2lvbik7XG4gICAgICAgIGNvbnN0IGJvdGhWZXJzaW9uc0FyZVN0cmluZ3MgPSBfLmlzU3RyaW5nKGRldmljZU9TKSAmJiBfLmlzU3RyaW5nKHBsYXRmb3JtVmVyc2lvbik7XG4gICAgICAgIGlmIChib3RoVmVyc2lvbnNDYW5CZUNvZXJjZWQgJiYgZGV2aWNlT1MudmVyc2lvbiA9PT0gcGxhdGZvcm1WZXJzaW9uLnZlcnNpb25cbiAgICAgICAgICAgIHx8IGJvdGhWZXJzaW9uc0FyZVN0cmluZ3MgJiYgXy50b0xvd2VyKGRldmljZU9TKSA9PT0gXy50b0xvd2VyKHBsYXRmb3JtVmVyc2lvbikpIHtcbiAgICAgICAgICAvLyBHb3QgYW4gZXhhY3QgbWF0Y2ggLSBwcm9jZWVkIGltbWVkaWF0ZWx5XG4gICAgICAgICAgdWRpZCA9IGRldmljZS51ZGlkO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2UgaWYgKCFib3RoVmVyc2lvbnNDYW5CZUNvZXJjZWQpIHtcbiAgICAgICAgICAvLyBUaGVyZSBpcyBubyBwb2ludCB0byBjaGVjayBmb3IgcGFydGlhbCBtYXRjaCBpZiBlaXRoZXIgb2YgdmVyc2lvbiBudW1iZXJzIGlzIG5vdCBjb2VyY2libGVcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgoIV8uaW5jbHVkZXMob3B0cy5wbGF0Zm9ybVZlcnNpb24sICcuJykgJiYgcGxhdGZvcm1WZXJzaW9uLm1ham9yID09PSBkZXZpY2VPUy5tYWpvclxuICAgICAgICAgICAgfHwgcGxhdGZvcm1WZXJzaW9uLm1ham9yID09PSBkZXZpY2VPUy5tYWpvciAmJiBwbGF0Zm9ybVZlcnNpb24ubWlub3IgPT09IGRldmljZU9TLm1pbm9yKVxuICAgICAgICAgICAgLy8gR290IGEgcGFydGlhbCBtYXRjaCAtIG1ha2Ugc3VyZSB3ZSBjb25zaWRlciB0aGUgbW9zdCByZWNlbnRcbiAgICAgICAgICAgIC8vIGRldmljZSB2ZXJzaW9uIGF2YWlsYWJsZSBvbiB0aGUgaG9zdCBzeXN0ZW1cbiAgICAgICAgICAgICYmIChwYXJ0aWFsTWF0Y2hDYW5kaWRhdGUgJiYgc2VtdmVyLmd0KGRldmljZU9TLCBfLnZhbHVlcyhwYXJ0aWFsTWF0Y2hDYW5kaWRhdGUpWzBdKVxuICAgICAgICAgICAgICAgIHx8ICFwYXJ0aWFsTWF0Y2hDYW5kaWRhdGUpKSB7XG4gICAgICAgICAgcGFydGlhbE1hdGNoQ2FuZGlkYXRlID0ge1tkZXZpY2UudWRpZF06IGRldmljZU9TfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCF1ZGlkICYmIHBhcnRpYWxNYXRjaENhbmRpZGF0ZSkge1xuICAgICAgICB1ZGlkID0gXy5rZXlzKHBhcnRpYWxNYXRjaENhbmRpZGF0ZSlbMF07XG4gICAgICAgIGF3YWl0IGFkYi5zZXREZXZpY2VJZCh1ZGlkKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF1ZGlkKSB7XG4gICAgICAgIC8vIHdlIGNvdWxkbid0IGZpbmQgYW55dGhpbmchIHF1aXRcbiAgICAgICAgbG9nZ2VyLmVycm9yQW5kVGhyb3coYFVuYWJsZSB0byBmaW5kIGFuIGFjdGl2ZSBkZXZpY2Ugb3IgZW11bGF0b3IgYCArXG4gICAgICAgICAgYHdpdGggT1MgJHtvcHRzLnBsYXRmb3JtVmVyc2lvbn0uIFRoZSBmb2xsb3dpbmcgYXJlIGF2YWlsYWJsZTogYCArXG4gICAgICAgICAgYXZhaWxEZXZpY2VzLmpvaW4oJywgJykpO1xuICAgICAgfVxuXG4gICAgICBlbVBvcnQgPSBhZGIuZ2V0UG9ydEZyb21FbXVsYXRvclN0cmluZyh1ZGlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYSB1ZGlkIHdhcyBub3QgZ2l2ZW4sIGdyYWIgdGhlIGZpcnN0IGRldmljZSB3ZSBzZWVcbiAgICAgIHVkaWQgPSBkZXZpY2VzWzBdLnVkaWQ7XG4gICAgICBlbVBvcnQgPSBhZGIuZ2V0UG9ydEZyb21FbXVsYXRvclN0cmluZyh1ZGlkKTtcbiAgICB9XG4gIH1cblxuICBsb2dnZXIuaW5mbyhgVXNpbmcgZGV2aWNlOiAke3VkaWR9YCk7XG4gIHJldHVybiB7dWRpZCwgZW1Qb3J0fTtcbn07XG5cbi8vIHJldHVybnMgYSBuZXcgYWRiIGluc3RhbmNlIHdpdGggZGV2aWNlSWQgc2V0XG5oZWxwZXJzLmNyZWF0ZUFEQiA9IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUFEQiAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHt1ZGlkLCBlbVBvcnR9ID0gb3B0cztcbiAgY29uc3QgYWRiID0gYXdhaXQgaGVscGVycy5jcmVhdGVCYXNlQURCKG9wdHMpO1xuICBhZGIuc2V0RGV2aWNlSWQodWRpZCk7XG4gIGlmIChlbVBvcnQpIHtcbiAgICBhZGIuc2V0RW11bGF0b3JQb3J0KGVtUG9ydCk7XG4gIH1cblxuICByZXR1cm4gYWRiO1xufTtcblxuaGVscGVycy52YWxpZGF0ZVBhY2thZ2VBY3Rpdml0eU5hbWVzID0gZnVuY3Rpb24gdmFsaWRhdGVQYWNrYWdlQWN0aXZpdHlOYW1lcyAob3B0cykge1xuICBmb3IgKGNvbnN0IGtleSBvZiBbJ2FwcFBhY2thZ2UnLCAnYXBwQWN0aXZpdHknLCAnYXBwV2FpdFBhY2thZ2UnLCAnYXBwV2FpdEFjdGl2aXR5J10pIHtcbiAgICBjb25zdCBuYW1lID0gb3B0c1trZXldO1xuICAgIGlmICghbmFtZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgbWF0Y2ggPSAvKFteXFx3LiosXSkrLy5leGVjKG5hbWUpO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGxvZ2dlci53YXJuKGBDYXBhYmlsaXR5ICcke2tleX0nIGlzIGV4cGVjdGVkIHRvIG9ubHkgaW5jbHVkZSBsYXRpbiBsZXR0ZXJzLCBkaWdpdHMsIHVuZGVyc2NvcmUsIGRvdCwgY29tbWEgYW5kIGFzdGVyaXNrIGNoYXJhY3RlcnMuYCk7XG4gICAgbG9nZ2VyLndhcm4oYEN1cnJlbnQgdmFsdWUgJyR7bmFtZX0nIGhhcyBub24tbWF0Y2hpbmcgY2hhcmFjdGVyIGF0IGluZGV4ICR7bWF0Y2guaW5kZXh9OiAnJHtuYW1lLnN1YnN0cmluZygwLCBtYXRjaC5pbmRleCArIDEpfSdgKTtcbiAgfVxufTtcblxuaGVscGVycy5nZXRMYXVuY2hJbmZvID0gYXN5bmMgZnVuY3Rpb24gZ2V0TGF1bmNoSW5mbyAoYWRiLCBvcHRzKSB7XG4gIGxldCB7YXBwLCBhcHBQYWNrYWdlLCBhcHBBY3Rpdml0eSwgYXBwV2FpdFBhY2thZ2UsIGFwcFdhaXRBY3Rpdml0eX0gPSBvcHRzO1xuICBpZiAoIWFwcCkge1xuICAgIGxvZ2dlci53YXJuKCdObyBhcHAgc2VudCBpbiwgbm90IHBhcnNpbmcgcGFja2FnZS9hY3Rpdml0eScpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRoaXMudmFsaWRhdGVQYWNrYWdlQWN0aXZpdHlOYW1lcyhvcHRzKTtcblxuICBpZiAoYXBwUGFja2FnZSAmJiBhcHBBY3Rpdml0eSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxvZ2dlci5kZWJ1ZygnUGFyc2luZyBwYWNrYWdlIGFuZCBhY3Rpdml0eSBmcm9tIGFwcCBtYW5pZmVzdCcpO1xuICBsZXQge2Fwa1BhY2thZ2UsIGFwa0FjdGl2aXR5fSA9XG4gICAgYXdhaXQgYWRiLnBhY2thZ2VBbmRMYXVuY2hBY3Rpdml0eUZyb21NYW5pZmVzdChhcHApO1xuICBpZiAoYXBrUGFja2FnZSAmJiAhYXBwUGFja2FnZSkge1xuICAgIGFwcFBhY2thZ2UgPSBhcGtQYWNrYWdlO1xuICB9XG4gIGlmICghYXBwV2FpdFBhY2thZ2UpIHtcbiAgICBhcHBXYWl0UGFja2FnZSA9IGFwcFBhY2thZ2U7XG4gIH1cbiAgaWYgKGFwa0FjdGl2aXR5ICYmICFhcHBBY3Rpdml0eSkge1xuICAgIGFwcEFjdGl2aXR5ID0gYXBrQWN0aXZpdHk7XG4gIH1cbiAgaWYgKCFhcHBXYWl0QWN0aXZpdHkpIHtcbiAgICBhcHBXYWl0QWN0aXZpdHkgPSBhcHBBY3Rpdml0eTtcbiAgfVxuICBsb2dnZXIuZGVidWcoYFBhcnNlZCBwYWNrYWdlIGFuZCBhY3Rpdml0eSBhcmU6ICR7YXBrUGFja2FnZX0vJHthcGtBY3Rpdml0eX1gKTtcbiAgcmV0dXJuIHthcHBQYWNrYWdlLCBhcHBXYWl0UGFja2FnZSwgYXBwQWN0aXZpdHksIGFwcFdhaXRBY3Rpdml0eX07XG59O1xuXG5oZWxwZXJzLnJlc2V0QXBwID0gYXN5bmMgZnVuY3Rpb24gcmVzZXRBcHAgKGFkYiwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgYXBwUGFja2FnZSxcbiAgICBmYXN0UmVzZXQsXG4gICAgZnVsbFJlc2V0LFxuICAgIGFuZHJvaWRJbnN0YWxsVGltZW91dCA9IFBBQ0tBR0VfSU5TVEFMTF9USU1FT1VULFxuICAgIGF1dG9HcmFudFBlcm1pc3Npb25zLFxuICAgIGFsbG93VGVzdFBhY2thZ2VzXG4gIH0gPSBvcHRzO1xuXG4gIGlmICghYXBwUGFja2FnZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIidhcHBQYWNrYWdlJyBvcHRpb24gaXMgcmVxdWlyZWRcIik7XG4gIH1cblxuICBjb25zdCBpc0luc3RhbGxlZCA9IGF3YWl0IGFkYi5pc0FwcEluc3RhbGxlZChhcHBQYWNrYWdlKTtcblxuICBpZiAoaXNJbnN0YWxsZWQpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgYWRiLmZvcmNlU3RvcChhcHBQYWNrYWdlKTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgLy8gZnVsbFJlc2V0IGhhcyBwcmlvcml0eSBvdmVyIGZhc3RSZXNldFxuICAgIGlmICghZnVsbFJlc2V0ICYmIGZhc3RSZXNldCkge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgYWRiLmNsZWFyKGFwcFBhY2thZ2UpO1xuICAgICAgaWYgKF8uaXNTdHJpbmcob3V0cHV0KSAmJiBvdXRwdXQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnZmFpbGVkJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY2xlYXIgdGhlIGFwcGxpY2F0aW9uIGRhdGEgb2YgJyR7YXBwUGFja2FnZX0nLiBPcmlnaW5hbCBlcnJvcjogJHtvdXRwdXR9YCk7XG4gICAgICB9XG4gICAgICAvLyBleGVjdXRpbmcgYHNoZWxsIHBtIGNsZWFyYCByZXNldHMgcHJldmlvdXNseSBhc3NpZ25lZCBhcHBsaWNhdGlvbiBwZXJtaXNzaW9ucyBhcyB3ZWxsXG4gICAgICBpZiAoYXV0b0dyYW50UGVybWlzc2lvbnMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBhZGIuZ3JhbnRBbGxQZXJtaXNzaW9ucyhhcHBQYWNrYWdlKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoYFVuYWJsZSB0byBncmFudCBwZXJtaXNzaW9ucyByZXF1ZXN0ZWQuIE9yaWdpbmFsIGVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxvZ2dlci5kZWJ1ZyhgUGVyZm9ybWVkIGZhc3QgcmVzZXQgb24gdGhlIGluc3RhbGxlZCAnJHthcHBQYWNrYWdlfScgYXBwbGljYXRpb24gKHN0b3AgYW5kIGNsZWFyKWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmICghYXBwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiJ2FwcCcgb3B0aW9uIGlzIHJlcXVpcmVkIGZvciByZWluc3RhbGxcIik7XG4gIH1cblxuICBsb2dnZXIuZGVidWcoYFJ1bm5pbmcgZnVsbCByZXNldCBvbiAnJHthcHBQYWNrYWdlfScgKHJlaW5zdGFsbClgKTtcbiAgaWYgKGlzSW5zdGFsbGVkKSB7XG4gICAgYXdhaXQgYWRiLnVuaW5zdGFsbEFwayhhcHBQYWNrYWdlKTtcbiAgfVxuICBhd2FpdCBhZGIuaW5zdGFsbChhcHAsIHtcbiAgICBncmFudFBlcm1pc3Npb25zOiBhdXRvR3JhbnRQZXJtaXNzaW9ucyxcbiAgICB0aW1lb3V0OiBhbmRyb2lkSW5zdGFsbFRpbWVvdXQsXG4gICAgYWxsb3dUZXN0UGFja2FnZXMsXG4gIH0pO1xufTtcblxuaGVscGVycy5pbnN0YWxsQXBrID0gYXN5bmMgZnVuY3Rpb24gaW5zdGFsbEFwayAoYWRiLCBvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBhcHBQYWNrYWdlLFxuICAgIGZhc3RSZXNldCxcbiAgICBmdWxsUmVzZXQsXG4gICAgYW5kcm9pZEluc3RhbGxUaW1lb3V0ID0gUEFDS0FHRV9JTlNUQUxMX1RJTUVPVVQsXG4gICAgYXV0b0dyYW50UGVybWlzc2lvbnMsXG4gICAgYWxsb3dUZXN0UGFja2FnZXMsXG4gICAgZW5mb3JjZUFwcEluc3RhbGwsXG4gIH0gPSBvcHRzO1xuXG4gIGlmICghYXBwIHx8ICFhcHBQYWNrYWdlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiJ2FwcCcgYW5kICdhcHBQYWNrYWdlJyBvcHRpb25zIGFyZSByZXF1aXJlZFwiKTtcbiAgfVxuXG4gIGlmIChmdWxsUmVzZXQpIHtcbiAgICBhd2FpdCB0aGlzLnJlc2V0QXBwKGFkYiwgb3B0cyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGFwcFN0YXRlLFxuICAgIHdhc1VuaW5zdGFsbGVkXG4gIH0gPSBhd2FpdCBhZGIuaW5zdGFsbE9yVXBncmFkZShhcHAsIGFwcFBhY2thZ2UsIHtcbiAgICBncmFudFBlcm1pc3Npb25zOiBhdXRvR3JhbnRQZXJtaXNzaW9ucyxcbiAgICB0aW1lb3V0OiBhbmRyb2lkSW5zdGFsbFRpbWVvdXQsXG4gICAgYWxsb3dUZXN0UGFja2FnZXMsXG4gICAgZW5mb3JjZUN1cnJlbnRCdWlsZDogZW5mb3JjZUFwcEluc3RhbGwsXG4gIH0pO1xuXG4gIC8vIFRoZXJlIGlzIG5vIG5lZWQgdG8gcmVzZXQgdGhlIG5ld2x5IGluc3RhbGxlZCBhcHBcbiAgY29uc3QgaXNJbnN0YWxsZWRPdmVyRXhpc3RpbmdBcHAgPSAhd2FzVW5pbnN0YWxsZWRcbiAgICAmJiBhcHBTdGF0ZSAhPT0gYWRiLkFQUF9JTlNUQUxMX1NUQVRFLk5PVF9JTlNUQUxMRUQ7XG4gIGlmIChmYXN0UmVzZXQgJiYgaXNJbnN0YWxsZWRPdmVyRXhpc3RpbmdBcHApIHtcbiAgICBsb2dnZXIuaW5mbyhgUGVyZm9ybWluZyBmYXN0IHJlc2V0IG9uICcke2FwcFBhY2thZ2V9J2ApO1xuICAgIGF3YWl0IHRoaXMucmVzZXRBcHAoYWRiLCBvcHRzKTtcbiAgfVxufTtcblxuLyoqXG4gKiBJbnN0YWxscyBhbiBhcnJheSBvZiBhcGtzXG4gKiBAcGFyYW0ge0FEQn0gYWRiIEluc3RhbmNlIG9mIEFwcGl1bSBBREIgb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRzIGRlZmluZWQgaW4gZHJpdmVyLmpzXG4gKi9cbmhlbHBlcnMuaW5zdGFsbE90aGVyQXBrcyA9IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxPdGhlckFwa3MgKG90aGVyQXBwcywgYWRiLCBvcHRzKSB7XG4gIGxldCB7XG4gICAgYW5kcm9pZEluc3RhbGxUaW1lb3V0ID0gUEFDS0FHRV9JTlNUQUxMX1RJTUVPVVQsXG4gICAgYXV0b0dyYW50UGVybWlzc2lvbnMsXG4gICAgYWxsb3dUZXN0UGFja2FnZXNcbiAgfSA9IG9wdHM7XG5cbiAgLy8gSW5zdGFsbCBhbGwgb2YgdGhlIEFQSydzIGFzeW5jaHJvbm91c2x5XG4gIGF3YWl0IEIuYWxsKG90aGVyQXBwcy5tYXAoKG90aGVyQXBwKSA9PiB7XG4gICAgbG9nZ2VyLmRlYnVnKGBJbnN0YWxsaW5nIGFwcDogJHtvdGhlckFwcH1gKTtcbiAgICByZXR1cm4gYWRiLmluc3RhbGxPclVwZ3JhZGUob3RoZXJBcHAsIG51bGwsIHtcbiAgICAgIGdyYW50UGVybWlzc2lvbnM6IGF1dG9HcmFudFBlcm1pc3Npb25zLFxuICAgICAgdGltZW91dDogYW5kcm9pZEluc3RhbGxUaW1lb3V0LFxuICAgICAgYWxsb3dUZXN0UGFja2FnZXMsXG4gICAgfSk7XG4gIH0pKTtcbn07XG5cbi8qKlxuICogVW5pbnN0YWxsIGFuIGFycmF5IG9mIHBhY2thZ2VzXG4gKiBAcGFyYW0ge0FEQn0gYWRiIEluc3RhbmNlIG9mIEFwcGl1bSBBREIgb2JqZWN0XG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGFwcFBhY2thZ2VzIEFuIGFycmF5IG9mIHBhY2thZ2UgbmFtZXMgdG8gdW5pbnN0YWxsLiBJZiB0aGlzIGluY2x1ZGVzIGAnKidgLCB1bmluc3RhbGwgYWxsIG9mIDNyZCBwYXJ0eSBhcHBzXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGZpbHRlclBhY2thZ2VzIEFuIGFycmF5IG9mIHBhY2thZ2VzIGRvZXMgbm90IHVuaW5zdGFsbCB3aGVuIGAqYCBpcyBwcm92aWRlZCBhcyBgYXBwUGFja2FnZXNgXG4gKi9cbmhlbHBlcnMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcyA9IGFzeW5jIGZ1bmN0aW9uIHVuaW5zdGFsbE90aGVyUGFja2FnZXMgKGFkYiwgYXBwUGFja2FnZXMsIGZpbHRlclBhY2thZ2VzID0gW10pIHtcbiAgaWYgKGFwcFBhY2thZ2VzLmluY2x1ZGVzKCcqJykpIHtcbiAgICBsb2dnZXIuZGVidWcoJ1VuaW5zdGFsbCB0aGlyZCBwYXJ0eSBwYWNrYWdlcycpO1xuICAgIGFwcFBhY2thZ2VzID0gYXdhaXQgdGhpcy5nZXRUaGlyZFBhcnR5UGFja2FnZXMoYWRiLCBmaWx0ZXJQYWNrYWdlcyk7XG4gIH1cblxuICBsb2dnZXIuZGVidWcoYFVuaW5zdGFsbGluZyBwYWNrYWdlczogJHthcHBQYWNrYWdlc31gKTtcbiAgYXdhaXQgQi5hbGwoYXBwUGFja2FnZXMubWFwKChhcHBQYWNrYWdlKSA9PiBhZGIudW5pbnN0YWxsQXBrKGFwcFBhY2thZ2UpKSk7XG59O1xuXG4vKipcbiAqIEdldCB0aGlyZCBwYXJ0eSBwYWNrYWdlcyBmaWx0ZXJlZCB3aXRoIGBmaWx0ZXJQYWNrYWdlc2BcbiAqIEBwYXJhbSB7QURCfSBhZGIgSW5zdGFuY2Ugb2YgQXBwaXVtIEFEQiBvYmplY3RcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gZmlsdGVyUGFja2FnZXMgQW4gYXJyYXkgb2YgcGFja2FnZXMgZG9lcyBub3QgdW5pbnN0YWxsIHdoZW4gYCpgIGlzIHByb3ZpZGVkIGFzIGBhcHBQYWNrYWdlc2BcbiAqIEByZXR1cm5zIHtBcnJheTxzdHJpbmc+fSBBbiBhcnJheSBvZiBpbnN0YWxsZWQgdGhpcmQgcGFyeSBwYWNrYWdlc1xuICovXG5oZWxwZXJzLmdldFRoaXJkUGFydHlQYWNrYWdlcyA9IGFzeW5jIGZ1bmN0aW9uIGdldFRoaXJkUGFydHlQYWNrYWdlcyAoYWRiLCBmaWx0ZXJQYWNrYWdlcyA9IFtdKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFja2FnZXNTdHJpbmcgPSBhd2FpdCBhZGIuc2hlbGwoWydwbScsICdsaXN0JywgJ3BhY2thZ2VzJywgJy0zJ10pO1xuICAgIGNvbnN0IGFwcFBhY2thZ2VzQXJyYXkgPSBwYWNrYWdlc1N0cmluZy50cmltKCkucmVwbGFjZSgvcGFja2FnZTovZywgJycpLnNwbGl0KEVPTCk7XG4gICAgbG9nZ2VyLmRlYnVnKGAnJHthcHBQYWNrYWdlc0FycmF5fScgZmlsdGVyZWQgd2l0aCAnJHtmaWx0ZXJQYWNrYWdlc30nYCk7XG4gICAgcmV0dXJuIF8uZGlmZmVyZW5jZShhcHBQYWNrYWdlc0FycmF5LCBmaWx0ZXJQYWNrYWdlcyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci53YXJuKGBVbmFibGUgdG8gZ2V0IHBhY2thZ2VzIHdpdGggJ2FkYiBzaGVsbCBwbSBsaXN0IHBhY2thZ2VzIC0zJzogJHtlcnIubWVzc2FnZX1gKTtcbiAgICByZXR1cm4gW107XG4gIH1cbn07XG5cbmhlbHBlcnMuaW5pdFVuaWNvZGVLZXlib2FyZCA9IGFzeW5jIGZ1bmN0aW9uIGluaXRVbmljb2RlS2V5Ym9hcmQgKGFkYikge1xuICBsb2dnZXIuZGVidWcoJ0VuYWJsaW5nIFVuaWNvZGUga2V5Ym9hcmQgc3VwcG9ydCcpO1xuXG4gIC8vIGdldCB0aGUgZGVmYXVsdCBJTUUgc28gd2UgY2FuIHJldHVybiBiYWNrIHRvIGl0IGxhdGVyIGlmIHdlIHdhbnRcbiAgbGV0IGRlZmF1bHRJTUUgPSBhd2FpdCBhZGIuZGVmYXVsdElNRSgpO1xuXG4gIGxvZ2dlci5kZWJ1ZyhgVW5zZXR0aW5nIHByZXZpb3VzIElNRSAke2RlZmF1bHRJTUV9YCk7XG4gIGNvbnN0IGFwcGl1bUlNRSA9IGAke1NFVFRJTkdTX0hFTFBFUl9QS0dfSUR9Ly5Vbmljb2RlSU1FYDtcbiAgbG9nZ2VyLmRlYnVnKGBTZXR0aW5nIElNRSB0byAnJHthcHBpdW1JTUV9J2ApO1xuICBhd2FpdCBhZGIuZW5hYmxlSU1FKGFwcGl1bUlNRSk7XG4gIGF3YWl0IGFkYi5zZXRJTUUoYXBwaXVtSU1FKTtcbiAgcmV0dXJuIGRlZmF1bHRJTUU7XG59O1xuXG5oZWxwZXJzLnNldE1vY2tMb2NhdGlvbkFwcCA9IGFzeW5jIGZ1bmN0aW9uIHNldE1vY2tMb2NhdGlvbkFwcCAoYWRiLCBhcHApIHtcbiAgdHJ5IHtcbiAgICBpZiAoYXdhaXQgYWRiLmdldEFwaUxldmVsKCkgPCAyMykge1xuICAgICAgYXdhaXQgYWRiLnNoZWxsKFsnc2V0dGluZ3MnLCAncHV0JywgJ3NlY3VyZScsICdtb2NrX2xvY2F0aW9uJywgJzEnXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IGFkYi5zaGVsbChbJ2FwcG9wcycsICdzZXQnLCBhcHAsICdhbmRyb2lkOm1vY2tfbG9jYXRpb24nLCAnYWxsb3cnXSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIud2FybihgVW5hYmxlIHRvIHNldCBtb2NrIGxvY2F0aW9uIGZvciBhcHAgJyR7YXBwfSc6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cbn07XG5cbmhlbHBlcnMuaW5zdGFsbEhlbHBlckFwcCA9IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxIZWxwZXJBcHAgKGFkYiwgYXBrUGF0aCwgcGFja2FnZUlkKSB7XG4gIC8vIFNvbWV0aW1lcyBhZGIgcHVzaCBvciBhZGIgaW5zdGFsIHRha2UgbW9yZSB0aW1lIHRoYW4gZXhwZWN0ZWQgdG8gaW5zdGFsbCBhbiBhcHBcbiAgLy8gZS5nLiBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2lvLmFwcGl1bS5zZXR0aW5ncy9pc3N1ZXMvNDAjaXNzdWVjb21tZW50LTQ3NjU5MzE3NFxuICBhd2FpdCByZXRyeSgyLCBhc3luYyBmdW5jdGlvbiByZXRyeUluc3RhbGxIZWxwZXJBcHAgKCkge1xuICAgIGF3YWl0IGFkYi5pbnN0YWxsT3JVcGdyYWRlKGFwa1BhdGgsIHBhY2thZ2VJZCwge2dyYW50UGVybWlzc2lvbnM6IHRydWV9KTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIFB1c2hlcyBhbmQgaW5zdGFsbHMgaW8uYXBwaXVtLnNldHRpbmdzIGFwcC5cbiAqIFRocm93cyBhbiBlcnJvciBpZiB0aGUgc2V0dGluZyBhcHAgaXMgcmVxdWlyZWRcbiAqXG4gKiBAcGFyYW0ge0FkYn0gYWRiIC0gVGhlIGFkYiBtb2R1bGUgaW5zdGFuY2UuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHRocm93RXJyb3JbZmFsc2VdIC0gV2hldGhlciB0aHJvdyBlcnJvciBvciBub3RcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aHJvd0Vycm9yIGlzIHRydWUgYW5kIHNvbWV0aGluZyBoYXBwZW5zIGluIGluc3RhbGxhdGlvbiBzdGVwXG4gKi9cbmhlbHBlcnMucHVzaFNldHRpbmdzQXBwID0gYXN5bmMgZnVuY3Rpb24gcHVzaFNldHRpbmdzQXBwIChhZGIsIHRocm93RXJyb3IgPSBmYWxzZSkge1xuICBsb2dnZXIuZGVidWcoJ1B1c2hpbmcgc2V0dGluZ3MgYXBrIHRvIGRldmljZS4uLicpO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgaGVscGVycy5pbnN0YWxsSGVscGVyQXBwKGFkYiwgc2V0dGluZ3NBcGtQYXRoLCBTRVRUSU5HU19IRUxQRVJfUEtHX0lELCB0aHJvd0Vycm9yKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHRocm93RXJyb3IpIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG5cbiAgICBsb2dnZXIud2FybihgSWdub3JlZCBlcnJvciB3aGlsZSBpbnN0YWxsaW5nICcke3NldHRpbmdzQXBrUGF0aH0nOiBgICtcbiAgICAgICAgICAgICAgICBgJyR7ZXJyLm1lc3NhZ2V9Jy4gRmVhdHVyZXMgdGhhdCByZWx5IG9uIHRoaXMgaGVscGVyIGAgK1xuICAgICAgICAgICAgICAgICdyZXF1aXJlIHRoZSBhcGsgc3VjaCBhcyB0b2dnbGUgV2lGaSBhbmQgZ2V0dGluZyBsb2NhdGlvbiAnICtcbiAgICAgICAgICAgICAgICAnd2lsbCByYWlzZSBhbiBlcnJvciBpZiB5b3UgdHJ5IHRvIHVzZSB0aGVtLicpO1xuICB9XG5cbiAgLy8gUmVpbnN0YWxsIHdpbGwgc3RvcCB0aGUgc2V0dGluZ3MgaGVscGVyIHByb2Nlc3MgYW55d2F5LCBzb1xuICAvLyB0aGVyZSBpcyBubyBuZWVkIHRvIGNvbnRpbnVlIGlmIHRoZSBhcHBsaWNhdGlvbiBpcyBzdGlsbCBydW5uaW5nXG4gIGlmIChhd2FpdCBhZGIucHJvY2Vzc0V4aXN0cyhTRVRUSU5HU19IRUxQRVJfUEtHX0lEKSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgJHtTRVRUSU5HU19IRUxQRVJfUEtHX0lEfSBpcyBhbHJlYWR5IHJ1bm5pbmcuIGAgK1xuICAgICAgYFRoZXJlIGlzIG5vIG5lZWQgdG8gcmVzZXQgaXRzIHBlcm1pc3Npb25zLmApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChhd2FpdCBhZGIuZ2V0QXBpTGV2ZWwoKSA8PSAyMykgeyAvLyBBbmRyb2lkIDYtIGRldmljZXMgc2hvdWxkIGhhdmUgZ3JhbnRlZCBwZXJtaXNzaW9uc1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL3B1bGwvMTE2NDAjaXNzdWVjb21tZW50LTQzODI2MDQ3N1xuICAgIGNvbnN0IHBlcm1zID0gWydTRVRfQU5JTUFUSU9OX1NDQUxFJywgJ0NIQU5HRV9DT05GSUdVUkFUSU9OJywgJ0FDQ0VTU19GSU5FX0xPQ0FUSU9OJ107XG4gICAgbG9nZ2VyLmluZm8oYEdyYW50aW5nIHBlcm1pc3Npb25zICR7cGVybXN9IHRvICcke1NFVFRJTkdTX0hFTFBFUl9QS0dfSUR9J2ApO1xuICAgIGF3YWl0IGFkYi5ncmFudFBlcm1pc3Npb25zKFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQsIHBlcm1zLm1hcCgoeCkgPT4gYGFuZHJvaWQucGVybWlzc2lvbi4ke3h9YCkpO1xuICB9XG5cbiAgLy8gbGF1bmNoIGlvLmFwcGl1bS5zZXR0aW5ncyBhcHAgZHVlIHRvIHNldHRpbmdzIGZhaWxpbmcgdG8gYmUgc2V0XG4gIC8vIGlmIHRoZSBhcHAgaXMgbm90IGxhdW5jaGVkIHByaW9yIHRvIHN0YXJ0IHRoZSBzZXNzaW9uIG9uIGFuZHJvaWQgNytcbiAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2lzc3Vlcy84OTU3XG4gIHRyeSB7XG4gICAgYXdhaXQgYWRiLnJlcXVpcmVSdW5uaW5nU2V0dGluZ3NBcHAoKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGVycik7XG4gICAgaWYgKHRocm93RXJyb3IpIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogRXh0cmFjdHMgc3RyaW5nLnhtbCBhbmQgY29udmVydHMgaXQgdG8gc3RyaW5nLmpzb24gYW5kIHB1c2hlc1xuICogaXQgdG8gL2RhdGEvbG9jYWwvdG1wL3N0cmluZy5qc29uIG9uIGZvciB1c2Ugb2YgYm9vdHN0cmFwXG4gKiBJZiBhcHAgaXMgbm90IHByZXNlbnQgdG8gZXh0cmFjdCBzdHJpbmcueG1sIGl0IGRlbGV0ZXMgcmVtb3RlIHN0cmluZ3MuanNvblxuICogSWYgYXBwIGRvZXMgbm90IGhhdmUgc3RyaW5ncy54bWwgd2UgcHVzaCBhbiBlbXB0eSBqc29uIG9iamVjdCB0byByZW1vdGVcbiAqXG4gKiBAcGFyYW0gez9zdHJpbmd9IGxhbmd1YWdlIC0gTGFuZ3VhZ2UgYWJicmV2aWF0aW9uLCBmb3IgZXhhbXBsZSAnZnInLiBUaGUgZGVmYXVsdCBsYW5ndWFnZVxuICogaXMgdXNlZCBpZiB0aGlzIGFyZ3VtZW50IGlzIG5vdCBkZWZpbmVkLlxuICogQHBhcmFtIHtPYmplY3R9IGFkYiAtIFRoZSBhZGIgbW9kdWxlIGluc3RhbmNlLlxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBEcml2ZXIgb3B0aW9ucyBkaWN0aW9uYXJ5LlxuICogQHJldHVybnMge09iamVjdH0gVGhlIGRpY3Rpb25hcnksIHdoZXJlIHN0cmluZyByZXNvdXJjZSBpZGVudGlmaWVycyBhcmUga2V5c1xuICogYWxvbmcgd2l0aCB0aGVpciBjb3JyZXNwb25kaW5nIHZhbHVlcyBmb3IgdGhlIGdpdmVuIGxhbmd1YWdlIG9yIGFuIGVtcHR5IG9iamVjdFxuICogaWYgbm8gbWF0Y2hpbmcgcmVzb3VyY2VzIHdlcmUgZXh0cmFjdGVkLlxuICovXG5oZWxwZXJzLnB1c2hTdHJpbmdzID0gYXN5bmMgZnVuY3Rpb24gcHVzaFN0cmluZ3MgKGxhbmd1YWdlLCBhZGIsIG9wdHMpIHtcbiAgY29uc3QgcmVtb3RlRGlyID0gJy9kYXRhL2xvY2FsL3RtcCc7XG4gIGNvbnN0IHN0cmluZ3NKc29uID0gJ3N0cmluZ3MuanNvbic7XG4gIGNvbnN0IHJlbW90ZUZpbGUgPSBwYXRoLnBvc2l4LnJlc29sdmUocmVtb3RlRGlyLCBzdHJpbmdzSnNvbik7XG5cbiAgLy8gY2xlYW4gdXAgcmVtb3RlIHN0cmluZy5qc29uIGlmIHByZXNlbnRcbiAgYXdhaXQgYWRiLnJpbXJhZihyZW1vdGVGaWxlKTtcblxuICBsZXQgYXBwO1xuICB0cnkge1xuICAgIGFwcCA9IG9wdHMuYXBwIHx8IGF3YWl0IGFkYi5wdWxsQXBrKG9wdHMuYXBwUGFja2FnZSwgb3B0cy50bXBEaXIpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIuaW5mbyhgRmFpbGVkIHRvIHB1bGwgYW4gYXBrIGZyb20gJyR7b3B0cy5hcHBQYWNrYWdlfScgdG8gJyR7b3B0cy50bXBEaXJ9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cblxuICBpZiAoXy5pc0VtcHR5KG9wdHMuYXBwUGFja2FnZSkgfHwgIShhd2FpdCBmcy5leGlzdHMoYXBwKSkpIHtcbiAgICBsb2dnZXIuZGVidWcoYE5vIGFwcCBvciBwYWNrYWdlIHNwZWNpZmllZC4gUmV0dXJuaW5nIGVtcHR5IHN0cmluZ3NgKTtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjb25zdCBzdHJpbmdzVG1wRGlyID0gcGF0aC5yZXNvbHZlKG9wdHMudG1wRGlyLCBvcHRzLmFwcFBhY2thZ2UpO1xuICB0cnkge1xuICAgIGxvZ2dlci5kZWJ1ZygnRXh0cmFjdGluZyBzdHJpbmdzIGZyb20gYXBrJywgYXBwLCBsYW5ndWFnZSwgc3RyaW5nc1RtcERpcik7XG4gICAgY29uc3Qge2Fwa1N0cmluZ3MsIGxvY2FsUGF0aH0gPSBhd2FpdCBhZGIuZXh0cmFjdFN0cmluZ3NGcm9tQXBrKGFwcCwgbGFuZ3VhZ2UsIHN0cmluZ3NUbXBEaXIpO1xuICAgIGF3YWl0IGFkYi5wdXNoKGxvY2FsUGF0aCwgcmVtb3RlRGlyKTtcbiAgICByZXR1cm4gYXBrU3RyaW5ncztcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLndhcm4oYENvdWxkIG5vdCBnZXQgc3RyaW5ncywgY29udGludWluZyBhbnl3YXkuIE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIGF3YWl0IGFkYi5zaGVsbCgnZWNobycsIFtgJ3t9JyA+ICR7cmVtb3RlRmlsZX1gXSk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgZnMucmltcmFmKHN0cmluZ3NUbXBEaXIpO1xuICB9XG4gIHJldHVybiB7fTtcbn07XG5cbmhlbHBlcnMudW5sb2NrV2l0aFVJQXV0b21hdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIHVubG9ja1dpdGhVSUF1dG9tYXRpb24gKGRyaXZlciwgYWRiLCB1bmxvY2tDYXBhYmlsaXRpZXMpIHtcbiAgbGV0IHVubG9ja1R5cGUgPSB1bmxvY2tDYXBhYmlsaXRpZXMudW5sb2NrVHlwZTtcbiAgaWYgKCF1bmxvY2tlci5pc1ZhbGlkVW5sb2NrVHlwZSh1bmxvY2tUeXBlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB1bmxvY2sgdHlwZSAke3VubG9ja1R5cGV9YCk7XG4gIH1cbiAgbGV0IHVubG9ja0tleSA9IHVubG9ja0NhcGFiaWxpdGllcy51bmxvY2tLZXk7XG4gIGlmICghdW5sb2NrZXIuaXNWYWxpZEtleSh1bmxvY2tUeXBlLCB1bmxvY2tLZXkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIHVubG9ja0tleSAke3VubG9ja0tleX0gY2FwYWJpbGl0eSBmb3IgdW5sb2NrVHlwZSAke3VubG9ja1R5cGV9YCk7XG4gIH1cbiAgY29uc3QgdW5sb2NrTWV0aG9kID0ge1xuICAgIFtQSU5fVU5MT0NLXTogdW5sb2NrZXIucGluVW5sb2NrLFxuICAgIFtQQVNTV09SRF9VTkxPQ0tdOiB1bmxvY2tlci5wYXNzd29yZFVubG9jayxcbiAgICBbUEFUVEVSTl9VTkxPQ0tdOiB1bmxvY2tlci5wYXR0ZXJuVW5sb2NrLFxuICAgIFtGSU5HRVJQUklOVF9VTkxPQ0tdOiB1bmxvY2tlci5maW5nZXJwcmludFVubG9ja1xuICB9W3VubG9ja1R5cGVdO1xuICBhd2FpdCB1bmxvY2tNZXRob2QoYWRiLCBkcml2ZXIsIHVubG9ja0NhcGFiaWxpdGllcyk7XG59O1xuXG5oZWxwZXJzLnVubG9ja1dpdGhIZWxwZXJBcHAgPSBhc3luYyBmdW5jdGlvbiB1bmxvY2tXaXRoSGVscGVyQXBwIChhZGIpIHtcbiAgbG9nZ2VyLmluZm8oJ1VubG9ja2luZyBzY3JlZW4nKTtcblxuICAvLyBVbmxvY2sgc3VjY2VlZCB3aXRoIGEgY291cGxlIG9mIHJldHJpZXMuXG4gIGxldCBmaXJzdFJ1biA9IHRydWU7XG4gIGF3YWl0IHJldHJ5KDMsIGFzeW5jIGZ1bmN0aW9uIGxhdW5jaEhlbHBlciAoKSB7XG4gICAgLy8gVG8gcmVkdWNlIGEgdGltZSB0byBjYWxsIGFkYi5pc1NjcmVlbkxvY2tlZCgpIHNpbmNlIGBhZGIgc2hlbGwgZHVtcHN5cyB3aW5kb3dgIGlzIGVhc3kgdG8gaGFuZyBhZGIgY29tbWFuZHNcbiAgICBpZiAoZmlyc3RSdW4pIHtcbiAgICAgIGZpcnN0UnVuID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghKGF3YWl0IGFkYi5pc1NjcmVlbkxvY2tlZCgpKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIud2FybihgRXJyb3IgaW4gaXNTY3JlZW5Mb2NrZWQ6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgICBsb2dnZXIud2FybignXCJhZGIgc2hlbGwgZHVtcHN5cyB3aW5kb3dcIiBjb21tYW5kIGhhcyB0aW1lZCBvdXQuJyk7XG4gICAgICAgIGxvZ2dlci53YXJuKCdUaGUgcmVhc29uIG9mIHRoaXMgdGltZW91dCBpcyB0aGUgZGVsYXllZCBhZGIgcmVzcG9uc2UuIFJlc2V0dGluZyBhZGIgc2VydmVyIGNhbiBpbXByb3ZlIGl0LicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxvZ2dlci5pbmZvKGBMYXVuY2hpbmcgJHtTRVRUSU5HU19IRUxQRVJfVU5MT0NLX0FDVElWSVRZfWApO1xuICAgIGF3YWl0IGFkYi5zaGVsbChbXG4gICAgICAnYW0nLCAnc3RhcnQnLFxuICAgICAgJy1uJywgYCR7U0VUVElOR1NfSEVMUEVSX1BLR19JRH0vJHtTRVRUSU5HU19IRUxQRVJfVU5MT0NLX0FDVElWSVRZfWAsXG4gICAgICAnLWMnLCAnYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVInLFxuICAgICAgJy1hJywgJ2FuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOJyxcbiAgICAgICctZicsICcweDEwMjAwMDAwJyxcbiAgICBdKTtcbiAgICBhd2FpdCBCLmRlbGF5KDEwMDApO1xuICB9KTtcbn07XG5cbmhlbHBlcnMudW5sb2NrID0gYXN5bmMgZnVuY3Rpb24gdW5sb2NrIChkcml2ZXIsIGFkYiwgY2FwYWJpbGl0aWVzKSB7XG4gIGlmICghKGF3YWl0IGFkYi5pc1NjcmVlbkxvY2tlZCgpKSkge1xuICAgIGxvZ2dlci5pbmZvKCdTY3JlZW4gYWxyZWFkeSB1bmxvY2tlZCwgZG9pbmcgbm90aGluZycpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxvZ2dlci5kZWJ1ZygnU2NyZWVuIGlzIGxvY2tlZCwgdHJ5aW5nIHRvIHVubG9jaycpO1xuICBpZiAoXy5pc1VuZGVmaW5lZChjYXBhYmlsaXRpZXMudW5sb2NrVHlwZSkpIHtcbiAgICBsb2dnZXIud2FybignVXNpbmcgYXBwIHVubG9jaywgdGhpcyBpcyBnb2luZyB0byBiZSBkZXByZWNhdGVkIScpO1xuICAgIGF3YWl0IGhlbHBlcnMudW5sb2NrV2l0aEhlbHBlckFwcChhZGIpO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IGhlbHBlcnMudW5sb2NrV2l0aFVJQXV0b21hdGlvbihkcml2ZXIsIGFkYiwge3VubG9ja1R5cGU6IGNhcGFiaWxpdGllcy51bmxvY2tUeXBlLCB1bmxvY2tLZXk6IGNhcGFiaWxpdGllcy51bmxvY2tLZXl9KTtcbiAgICBhd2FpdCBoZWxwZXJzLnZlcmlmeVVubG9jayhhZGIsIGNhcGFiaWxpdGllcy51bmxvY2tTdWNjZXNzVGltZW91dCk7XG4gIH1cbn07XG5cbmhlbHBlcnMudmVyaWZ5VW5sb2NrID0gYXN5bmMgZnVuY3Rpb24gdmVyaWZ5VW5sb2NrIChhZGIsIHVubG9ja1N1Y2Nlc3NUaW1lb3V0KSB7XG4gIGxldCBzdWNjZXNzVGltZW91dCA9IHVubG9ja1N1Y2Nlc3NUaW1lb3V0IHx8IDIwMDA7XG4gIGF3YWl0IHJldHJ5SW50ZXJ2YWwoc3VjY2Vzc1RpbWVvdXQgLyAxMDAwLCBzdWNjZXNzVGltZW91dCwgYXN5bmMgKCkgPT4ge1xuICAgIGlmIChhd2FpdCBhZGIuaXNTY3JlZW5Mb2NrZWQoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTY3JlZW4gZGlkIG5vdCB1bmxvY2sgc3VjY2Vzc2Z1bGx5LCByZXRyeWluZycpO1xuICAgIH1cbiAgICBsb2dnZXIuZGVidWcoJ1NjcmVlbiB1bmxvY2tlZCBzdWNjZXNzZnVsbHknKTtcbiAgfSk7XG59O1xuXG5oZWxwZXJzLmluaXREZXZpY2UgPSBhc3luYyBmdW5jdGlvbiBpbml0RGV2aWNlIChhZGIsIG9wdHMpIHtcbiAgY29uc3Qge1xuICAgIHNraXBEZXZpY2VJbml0aWFsaXphdGlvbixcbiAgICBsb2NhbGUsXG4gICAgbGFuZ3VhZ2UsXG4gICAgbG9jYWxlU2NyaXB0LFxuICAgIHVuaWNvZGVLZXlib2FyZCxcbiAgICBkaXNhYmxlV2luZG93QW5pbWF0aW9uLFxuICAgIHNraXBVbmxvY2ssXG4gICAgbW9ja0xvY2F0aW9uQXBwLFxuICAgIHNraXBMb2djYXRDYXB0dXJlLFxuICAgIGxvZ2NhdEZvcm1hdCxcbiAgICBsb2djYXRGaWx0ZXJTcGVjcyxcbiAgfSA9IG9wdHM7XG5cbiAgaWYgKHNraXBEZXZpY2VJbml0aWFsaXphdGlvbikge1xuICAgIGxvZ2dlci5pbmZvKGAnc2tpcERldmljZUluaXRpYWxpemF0aW9uJyBpcyBzZXQuIFNraXBwaW5nIGRldmljZSBpbml0aWFsaXphdGlvbi5gKTtcbiAgfSBlbHNlIHtcbiAgICBhd2FpdCBhZGIud2FpdEZvckRldmljZSgpO1xuICAgIC8vIHB1c2hTZXR0aW5nc0FwcCByZXF1aXJlZCBiZWZvcmUgY2FsbGluZyBlbnN1cmVEZXZpY2VMb2NhbGUgZm9yIEFQSSBMZXZlbCAyNCtcblxuICAgIC8vIFNvbWUgZmVhdHVyZSBzdWNoIGFzIGxvY2F0aW9uL3dpZmkgYXJlIG5vdCBuZWNlc3NhcnkgZm9yIGFsbCB1c2VycyxcbiAgICAvLyBidXQgdGhleSByZXF1aXJlIHRoZSBzZXR0aW5ncyBhcHAuIFNvLCB0cnkgdG8gY29uZmlndXJlIGl0IHdoaWxlIEFwcGl1bVxuICAgIC8vIGRvZXMgbm90IHRocm93IGVycm9yIGV2ZW4gaWYgdGhleSBmYWlsLlxuICAgIGNvbnN0IHNob3VsZFRocm93RXJyb3IgPSBsYW5ndWFnZVxuICAgICAgfHwgbG9jYWxlXG4gICAgICB8fCBsb2NhbGVTY3JpcHRcbiAgICAgIHx8IHVuaWNvZGVLZXlib2FyZFxuICAgICAgfHwgZGlzYWJsZVdpbmRvd0FuaW1hdGlvblxuICAgICAgfHwgIXNraXBVbmxvY2s7XG4gICAgYXdhaXQgaGVscGVycy5wdXNoU2V0dGluZ3NBcHAoYWRiLCBzaG91bGRUaHJvd0Vycm9yKTtcbiAgfVxuXG4gIGlmICghaGVscGVycy5pc0VtdWxhdG9yKGFkYiwgb3B0cykgJiYgKG1vY2tMb2NhdGlvbkFwcCB8fCBfLmlzVW5kZWZpbmVkKG1vY2tMb2NhdGlvbkFwcCkpKSB7XG4gICAgYXdhaXQgaGVscGVycy5zZXRNb2NrTG9jYXRpb25BcHAoYWRiLCBtb2NrTG9jYXRpb25BcHAgfHwgU0VUVElOR1NfSEVMUEVSX1BLR19JRCk7XG4gIH1cblxuICBpZiAobGFuZ3VhZ2UgfHwgbG9jYWxlKSB7XG4gICAgYXdhaXQgaGVscGVycy5lbnN1cmVEZXZpY2VMb2NhbGUoYWRiLCBsYW5ndWFnZSwgbG9jYWxlLCBsb2NhbGVTY3JpcHQpO1xuICB9XG5cbiAgaWYgKHNraXBMb2djYXRDYXB0dXJlKSB7XG4gICAgbG9nZ2VyLmluZm8oYCdza2lwTG9nY2F0Q2FwdHVyZScgaXMgc2V0LiBTa2lwcGluZyBzdGFydGluZyBsb2djYXQgY2FwdHVyZS5gKTtcbiAgfSBlbHNlIHtcbiAgICBhd2FpdCBhZGIuc3RhcnRMb2djYXQoe1xuICAgICAgZm9ybWF0OiBsb2djYXRGb3JtYXQsXG4gICAgICBmaWx0ZXJTcGVjczogbG9nY2F0RmlsdGVyU3BlY3MsXG4gICAgfSk7XG4gIH1cblxuICBpZiAodW5pY29kZUtleWJvYXJkKSB7XG4gICAgcmV0dXJuIGF3YWl0IGhlbHBlcnMuaW5pdFVuaWNvZGVLZXlib2FyZChhZGIpO1xuICB9XG59O1xuXG5oZWxwZXJzLnJlbW92ZU51bGxQcm9wZXJ0aWVzID0gZnVuY3Rpb24gcmVtb3ZlTnVsbFByb3BlcnRpZXMgKG9iaikge1xuICBmb3IgKGxldCBrZXkgb2YgXy5rZXlzKG9iaikpIHtcbiAgICBpZiAoXy5pc051bGwob2JqW2tleV0pIHx8IF8uaXNVbmRlZmluZWQob2JqW2tleV0pKSB7XG4gICAgICBkZWxldGUgb2JqW2tleV07XG4gICAgfVxuICB9XG59O1xuXG5oZWxwZXJzLnRydW5jYXRlRGVjaW1hbHMgPSBmdW5jdGlvbiB0cnVuY2F0ZURlY2ltYWxzIChudW1iZXIsIGRpZ2l0cykge1xuICBsZXQgbXVsdGlwbGllciA9IE1hdGgucG93KDEwLCBkaWdpdHMpLFxuICAgICAgYWRqdXN0ZWROdW0gPSBudW1iZXIgKiBtdWx0aXBsaWVyLFxuICAgICAgdHJ1bmNhdGVkTnVtID0gTWF0aFthZGp1c3RlZE51bSA8IDAgPyAnY2VpbCcgOiAnZmxvb3InXShhZGp1c3RlZE51bSk7XG5cbiAgcmV0dXJuIHRydW5jYXRlZE51bSAvIG11bHRpcGxpZXI7XG59O1xuXG5oZWxwZXJzLmlzQ2hyb21lQnJvd3NlciA9IGZ1bmN0aW9uIGlzQ2hyb21lQnJvd3NlciAoYnJvd3Nlcikge1xuICByZXR1cm4gXy5pbmNsdWRlcyhPYmplY3Qua2V5cyhDSFJPTUVfQlJPV1NFUl9QQUNLQUdFX0FDVElWSVRZKSwgKGJyb3dzZXIgfHwgJycpLnRvTG93ZXJDYXNlKCkpO1xufTtcblxuaGVscGVycy5nZXRDaHJvbWVQa2cgPSBmdW5jdGlvbiBnZXRDaHJvbWVQa2cgKGJyb3dzZXIpIHtcbiAgcmV0dXJuIENIUk9NRV9CUk9XU0VSX1BBQ0tBR0VfQUNUSVZJVFlbYnJvd3Nlci50b0xvd2VyQ2FzZSgpXSB8fCBDSFJPTUVfQlJPV1NFUl9QQUNLQUdFX0FDVElWSVRZLmRlZmF1bHQ7XG59O1xuXG5oZWxwZXJzLnJlbW92ZUFsbFNlc3Npb25XZWJTb2NrZXRIYW5kbGVycyA9IGFzeW5jIGZ1bmN0aW9uIHJlbW92ZUFsbFNlc3Npb25XZWJTb2NrZXRIYW5kbGVycyAoc2VydmVyLCBzZXNzaW9uSWQpIHtcbiAgaWYgKCFzZXJ2ZXIgfHwgIV8uaXNGdW5jdGlvbihzZXJ2ZXIuZ2V0V2ViU29ja2V0SGFuZGxlcnMpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgYWN0aXZlSGFuZGxlcnMgPSBhd2FpdCBzZXJ2ZXIuZ2V0V2ViU29ja2V0SGFuZGxlcnMoc2Vzc2lvbklkKTtcbiAgZm9yIChjb25zdCBwYXRobmFtZSBvZiBfLmtleXMoYWN0aXZlSGFuZGxlcnMpKSB7XG4gICAgYXdhaXQgc2VydmVyLnJlbW92ZVdlYlNvY2tldEhhbmRsZXIocGF0aG5hbWUpO1xuICB9XG59O1xuXG4vKipcbiAqIFRha2VzIGEgZGVzaXJlZCBjYXBhYmlsaXR5IGFuZCB0cmllcyB0byBKU09OLnBhcnNlIGl0IGFzIGFuIGFycmF5LFxuICogYW5kIGVpdGhlciByZXR1cm5zIHRoZSBwYXJzZWQgYXJyYXkgb3IgYSBzaW5nbGV0b24gYXJyYXkuXG4gKlxuICogQHBhcmFtIHthbnl9IGNhcCBBIGRlc2lyZWQgY2FwYWJpbGl0eVxuICovXG5oZWxwZXJzLnBhcnNlQXJyYXkgPSBmdW5jdGlvbiBwYXJzZUFycmF5IChjYXApIHtcbiAgbGV0IHBhcnNlZENhcHM7XG4gIHRyeSB7XG4gICAgcGFyc2VkQ2FwcyA9IEpTT04ucGFyc2UoY2FwKTtcbiAgfSBjYXRjaCAoaWduKSB7IH1cblxuICBpZiAoXy5pc0FycmF5KHBhcnNlZENhcHMpKSB7XG4gICAgcmV0dXJuIHBhcnNlZENhcHM7XG4gIH0gZWxzZSBpZiAoXy5pc1N0cmluZyhjYXApKSB7XG4gICAgcmV0dXJuIFtjYXBdO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBtdXN0IHByb3ZpZGUgYSBzdHJpbmcgb3IgSlNPTiBBcnJheTsgcmVjZWl2ZWQgJHtjYXB9YCk7XG59O1xuXG4vKipcbiAqIFZhbGlkYXRlIGRlc2lyZWQgY2FwYWJpbGl0aWVzLiBSZXR1cm5zIHRydWUgaWYgY2FwYWJpbGl0eSBpcyB2YWxpZFxuICpcbiAqIEBwYXJhbSB7Kn0gY2FwIEEgZGVzaXJlZCBjYXBhYmlsaXR5XG4gKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgdGhlIGNhcGFiaWxpdHkgaXMgdmFsaWRcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgY2FwcyBoYXMgaW52YWxpZCBjYXBhYmlsaXR5XG4gKi9cbmhlbHBlcnMudmFsaWRhdGVEZXNpcmVkQ2FwcyA9IGZ1bmN0aW9uIHZhbGlkYXRlRGVzaXJlZENhcHMgKGNhcHMpIHtcbiAgaWYgKGNhcHMuYnJvd3Nlck5hbWUpIHtcbiAgICBpZiAoY2Fwcy5hcHApIHtcbiAgICAgIC8vIHdhcm4gaWYgdGhlIGNhcGFiaWxpdGllcyBoYXZlIGJvdGggYGFwcGAgYW5kIGBicm93c2VyLCBhbHRob3VnaCB0aGlzIGlzIGNvbW1vbiB3aXRoIHNlbGVuaXVtIGdyaWRcbiAgICAgIGxvZ2dlci53YXJuKGBUaGUgZGVzaXJlZCBjYXBhYmlsaXRpZXMgc2hvdWxkIGdlbmVyYWxseSBub3QgaW5jbHVkZSBib3RoIGFuICdhcHAnIGFuZCBhICdicm93c2VyTmFtZSdgKTtcbiAgICB9XG4gICAgaWYgKGNhcHMuYXBwUGFja2FnZSkge1xuICAgICAgbG9nZ2VyLmVycm9yQW5kVGhyb3coYFRoZSBkZXNpcmVkIHNob3VsZCBub3QgaW5jbHVkZSBib3RoIG9mIGFuICdhcHBQYWNrYWdlJyBhbmQgYSAnYnJvd3Nlck5hbWUnYCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGNhcHMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcykge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnBhcnNlQXJyYXkoY2Fwcy51bmluc3RhbGxPdGhlclBhY2thZ2VzKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuZXJyb3JBbmRUaHJvdyhgQ291bGQgbm90IHBhcnNlIFwidW5pbnN0YWxsT3RoZXJQYWNrYWdlc1wiIGNhcGFiaWxpdHk6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBBZGp1c3QgdGhlIGNhcGFiaWxpdGllcyBmb3IgYSBicm93c2VyIHNlc3Npb25cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY2FwcyAtIEN1cnJlbnQgY2FwYWJpbGl0aWVzIG9iamVjdFxuICogISEhIFRoZSBvYmplY3QgaXMgbXV0YXRlZCBieSB0aGlzIG1ldGhvZCBjYWxsICEhIVxuICogQHJldHVybnMge09iamVjdH0gVGhlIHNhbWUgcG9zc2libHkgbXV0YXRlZCBgb3B0c2AgaW5zdGFuY2UuXG4gKiBObyBtdXRhdGlvbiBpcyBoYXBwZW5pbmcgaXMgdGhlIGN1cnJlbnQgc2Vzc2lvbiBpZlxuICogYXBwUGFja2FnZS9hcHBBY3Rpdml0eSBjYXBzIGhhdmUgYWxyZWFkeSBiZWVuIHByb3ZpZGVkLlxuICovXG5oZWxwZXJzLmFkanVzdEJyb3dzZXJTZXNzaW9uQ2FwcyA9IGZ1bmN0aW9uIGFkanVzdEJyb3dzZXJTZXNzaW9uQ2FwcyAoY2FwcyA9IHt9KSB7XG4gIGNvbnN0IHsgYnJvd3Nlck5hbWUgfSA9IGNhcHM7XG4gIGxvZ2dlci5pbmZvKGBUaGUgY3VycmVudCBzZXNzaW9uIGlzIGNvbnNpZGVyZWQgYnJvd3Nlci1iYXNlZGApO1xuICBsb2dnZXIuaW5mbyhgU3VwcG9ydGVkIGJyb3dzZXIgbmFtZXM6ICR7SlNPTi5zdHJpbmdpZnkoXy5rZXlzKENIUk9NRV9CUk9XU0VSX1BBQ0tBR0VfQUNUSVZJVFkpKX1gKTtcbiAgaWYgKGNhcHMuYXBwUGFja2FnZSB8fCBjYXBzLmFwcEFjdGl2aXR5KSB7XG4gICAgbG9nZ2VyLmluZm8oYE5vdCBvdmVycmlkaW5nIGFwcFBhY2thZ2UvYXBwQWN0aXZpdHkgY2FwYWJpbGl0eSB2YWx1ZXMgZm9yICcke2Jyb3dzZXJOYW1lfScgYCArXG4gICAgICAnYmVjYXVzZSBzb21lIG9mIHRoZW0gaGF2ZSBiZWVuIGFscmVhZHkgcHJvdmlkZWQnKTtcbiAgICByZXR1cm4gY2FwcztcbiAgfVxuXG4gIGNvbnN0IHtwa2csIGFjdGl2aXR5fSA9IHRoaXMuZ2V0Q2hyb21lUGtnKGJyb3dzZXJOYW1lKTtcbiAgY2Fwcy5hcHBQYWNrYWdlID0gcGtnO1xuICBjYXBzLmFwcEFjdGl2aXR5ID0gYWN0aXZpdHk7XG4gIGxvZ2dlci5pbmZvKGBhcHBQYWNrYWdlL2FwcEFjdGl2aXR5IGNhcGFiaWxpdGllcyBoYXZlIGJlZW4gYXV0b21hdGljYWxseSBzZXQgdG8gJHtwa2d9LyR7YWN0aXZpdHl9IGAgK1xuICAgIGBmb3IgJyR7YnJvd3Nlck5hbWV9J2ApO1xuICBsb2dnZXIuaW5mbyhgQ29uc2lkZXIgY2hhbmdpbmcgdGhlIGJyb3dzZXJOYW1lIHRvIHRoZSBvbmUgZnJvbSB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgYnJvd3NlciBuYW1lcyBgICtcbiAgICBgb3IgcHJvdmlkZSBjdXN0b20gYXBwUGFja2FnZS9hcHBBY3Rpdml0eSBjYXBhYmlsaXR5IHZhbHVlcyBpZiB0aGUgYXV0b21hdGljYWxseSBhc3NpZ25lZCBvbmVzIGRvIGAgK1xuICAgIGBub3QgbWFrZSBzZW5zZWApO1xuICByZXR1cm4gY2Fwcztcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGN1cnJlbnQgZGV2aWNlIHVuZGVyIHRlc3QgaXMgYW4gZW11bGF0b3JcbiAqXG4gKiBAcGFyYW0ge0FEQn0gYWRiIC0gYXBwaXVtLWFkYiBpbnN0YW5jZVxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBkcml2ZXIgb3B0aW9ucyBtYXBwaW5nXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBkZXZpY2UgaXMgYW4gQW5kcm9pZCBlbXVsYXRvclxuICovXG5oZWxwZXJzLmlzRW11bGF0b3IgPSBmdW5jdGlvbiBpc0VtdWxhdG9yIChhZGIsIG9wdHMpIHtcbiAgY29uc3QgcG9zc2libGVOYW1lcyA9IFtvcHRzLnVkaWQsIGFkYj8uY3VyRGV2aWNlSWRdO1xuICByZXR1cm4gISFvcHRzLmF2ZCB8fCBwb3NzaWJsZU5hbWVzLnNvbWUoKHgpID0+IEVNVUxBVE9SX1BBVFRFUk4udGVzdCh4KSk7XG59O1xuXG5oZWxwZXJzLmJvb3RzdHJhcCA9IEJvb3RzdHJhcDtcbmhlbHBlcnMudW5sb2NrZXIgPSB1bmxvY2tlcjtcblxuZXhwb3J0IHsgaGVscGVycywgU0VUVElOR1NfSEVMUEVSX1BLR19JRCwgcHJlcGFyZUF2ZEFyZ3MsIGVuc3VyZU5ldHdvcmtTcGVlZCB9O1xuZXhwb3J0IGRlZmF1bHQgaGVscGVycztcbiJdLCJmaWxlIjoibGliL2FuZHJvaWQtaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
|
|
887
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9hbmRyb2lkLWhlbHBlcnMuanMiXSwibmFtZXMiOlsiUEFDS0FHRV9JTlNUQUxMX1RJTUVPVVQiLCJDSFJPTUVfQlJPV1NFUl9QQUNLQUdFX0FDVElWSVRZIiwiY2hyb21lIiwicGtnIiwiYWN0aXZpdHkiLCJjaHJvbWl1bSIsImNocm9tZWJldGEiLCJicm93c2VyIiwiZGVmYXVsdCIsIlNFVFRJTkdTX0hFTFBFUl9QS0dfSUQiLCJTRVRUSU5HU19IRUxQRVJfVU5MT0NLX0FDVElWSVRZIiwiRU1VTEFUT1JfUEFUVEVSTiIsIkFQUF9TVEFURSIsIk9iamVjdCIsImZyZWV6ZSIsIk5PVF9JTlNUQUxMRUQiLCJOT1RfUlVOTklORyIsIlJVTk5JTkdfSU5fQkFDS0dST1VORCIsIlJVTk5JTkdfSU5fRk9SRUdST1VORCIsImVuc3VyZU5ldHdvcmtTcGVlZCIsImFkYiIsIm5ldHdvcmtTcGVlZCIsIl8iLCJ2YWx1ZXMiLCJORVRXT1JLX1NQRUVEIiwiaW5jbHVkZXMiLCJsb2dnZXIiLCJ3YXJuIiwiRlVMTCIsInByZXBhcmVBdmRBcmdzIiwib3B0cyIsImlzSGVhZGxlc3MiLCJhdmRBcmdzIiwicmVzdWx0IiwiaXNBcnJheSIsInB1c2giLCJ1dGlsIiwic2hlbGxQYXJzZSIsImhlbHBlcnMiLCJjcmVhdGVCYXNlQURCIiwiYWRiUG9ydCIsInN1cHByZXNzS2lsbFNlcnZlciIsInJlbW90ZUFkYkhvc3QiLCJjbGVhckRldmljZUxvZ3NPblN0YXJ0IiwiYWRiRXhlY1RpbWVvdXQiLCJ1c2VLZXlzdG9yZSIsImtleXN0b3JlUGF0aCIsImtleXN0b3JlUGFzc3dvcmQiLCJrZXlBbGlhcyIsImtleVBhc3N3b3JkIiwicmVtb3RlQXBwc0NhY2hlTGltaXQiLCJidWlsZFRvb2xzVmVyc2lvbiIsImFsbG93T2ZmbGluZURldmljZXMiLCJhbGxvd0RlbGF5QWRiIiwiQURCIiwiY3JlYXRlQURCIiwicHJlcGFyZUVtdWxhdG9yIiwiYXZkIiwiYXZkRW52IiwiZW52IiwibGFuZ3VhZ2UiLCJsb2NhbGUiLCJjb3VudHJ5IiwiYXZkTGF1bmNoVGltZW91dCIsImxhdW5jaFRpbWVvdXQiLCJhdmRSZWFkeVRpbWVvdXQiLCJyZWFkeVRpbWVvdXQiLCJFcnJvciIsImF2ZE5hbWUiLCJyZXBsYWNlIiwicnVubmluZ0FWRCIsImdldFJ1bm5pbmdBVkQiLCJhcmdzIiwiZGVidWciLCJraWxsRW11bGF0b3IiLCJsYXVuY2hBVkQiLCJlbnN1cmVEZXZpY2VMb2NhbGUiLCJzY3JpcHQiLCJpc1N0cmluZyIsInNldERldmljZUxhbmd1YWdlQ291bnRyeSIsImVuc3VyZUN1cnJlbnRMb2NhbGUiLCJtZXNzYWdlIiwiZ2V0RGV2aWNlSW5mb0Zyb21DYXBzIiwidWRpZCIsImVtUG9ydCIsImN1ckRldmljZUlkIiwiZW11bGF0b3JQb3J0IiwiaW5mbyIsImRldmljZXMiLCJnZXREZXZpY2VzV2l0aFJldHJ5IiwibWFwIiwiZXJyb3JBbmRUaHJvdyIsImdldFBvcnRGcm9tRW11bGF0b3JTdHJpbmciLCJwbGF0Zm9ybVZlcnNpb24iLCJ0cmltIiwic2VtdmVyIiwiY29lcmNlIiwiYXZhaWxEZXZpY2VzIiwicGFydGlhbE1hdGNoQ2FuZGlkYXRlIiwiZGV2aWNlIiwic2V0RGV2aWNlSWQiLCJyYXdEZXZpY2VPUyIsImdldFBsYXRmb3JtVmVyc2lvbiIsImRldmljZU9TIiwiYm90aFZlcnNpb25zQ2FuQmVDb2VyY2VkIiwidmFsaWQiLCJib3RoVmVyc2lvbnNBcmVTdHJpbmdzIiwidmVyc2lvbiIsInRvTG93ZXIiLCJtYWpvciIsIm1pbm9yIiwiZ3QiLCJrZXlzIiwiam9pbiIsInNldEVtdWxhdG9yUG9ydCIsInZhbGlkYXRlUGFja2FnZUFjdGl2aXR5TmFtZXMiLCJrZXkiLCJuYW1lIiwibWF0Y2giLCJleGVjIiwiaW5kZXgiLCJzdWJzdHJpbmciLCJnZXRMYXVuY2hJbmZvIiwiYXBwIiwiYXBwUGFja2FnZSIsImFwcEFjdGl2aXR5IiwiYXBwV2FpdFBhY2thZ2UiLCJhcHBXYWl0QWN0aXZpdHkiLCJhcGtQYWNrYWdlIiwiYXBrQWN0aXZpdHkiLCJwYWNrYWdlQW5kTGF1bmNoQWN0aXZpdHlGcm9tTWFuaWZlc3QiLCJyZXNldEFwcCIsImZhc3RSZXNldCIsImZ1bGxSZXNldCIsImFuZHJvaWRJbnN0YWxsVGltZW91dCIsImF1dG9HcmFudFBlcm1pc3Npb25zIiwiYWxsb3dUZXN0UGFja2FnZXMiLCJpc0luc3RhbGxlZCIsImlzQXBwSW5zdGFsbGVkIiwiZm9yY2VTdG9wIiwiaWduIiwib3V0cHV0IiwiY2xlYXIiLCJ0b0xvd2VyQ2FzZSIsImdyYW50QWxsUGVybWlzc2lvbnMiLCJlcnJvciIsInVuaW5zdGFsbEFwayIsImluc3RhbGwiLCJncmFudFBlcm1pc3Npb25zIiwidGltZW91dCIsImluc3RhbGxBcGsiLCJlbmZvcmNlQXBwSW5zdGFsbCIsImFwcFN0YXRlIiwid2FzVW5pbnN0YWxsZWQiLCJpbnN0YWxsT3JVcGdyYWRlIiwiZW5mb3JjZUN1cnJlbnRCdWlsZCIsImlzSW5zdGFsbGVkT3ZlckV4aXN0aW5nQXBwIiwiQVBQX0lOU1RBTExfU1RBVEUiLCJpbnN0YWxsT3RoZXJBcGtzIiwib3RoZXJBcHBzIiwiQiIsImFsbCIsIm90aGVyQXBwIiwidW5pbnN0YWxsT3RoZXJQYWNrYWdlcyIsImFwcFBhY2thZ2VzIiwiZmlsdGVyUGFja2FnZXMiLCJnZXRUaGlyZFBhcnR5UGFja2FnZXMiLCJwYWNrYWdlc1N0cmluZyIsInNoZWxsIiwiYXBwUGFja2FnZXNBcnJheSIsInNwbGl0IiwiRU9MIiwiZGlmZmVyZW5jZSIsImVyciIsImluaXRVbmljb2RlS2V5Ym9hcmQiLCJkZWZhdWx0SU1FIiwiYXBwaXVtSU1FIiwiZW5hYmxlSU1FIiwic2V0SU1FIiwic2V0TW9ja0xvY2F0aW9uQXBwIiwiZ2V0QXBpTGV2ZWwiLCJpbnN0YWxsSGVscGVyQXBwIiwiYXBrUGF0aCIsInBhY2thZ2VJZCIsInJldHJ5SW5zdGFsbEhlbHBlckFwcCIsInB1c2hTZXR0aW5nc0FwcCIsInRocm93RXJyb3IiLCJzZXR0aW5nc0Fwa1BhdGgiLCJwcm9jZXNzRXhpc3RzIiwicGVybXMiLCJ4IiwicmVxdWlyZVJ1bm5pbmdTZXR0aW5nc0FwcCIsInB1c2hTdHJpbmdzIiwicmVtb3RlRGlyIiwic3RyaW5nc0pzb24iLCJyZW1vdGVGaWxlIiwicGF0aCIsInBvc2l4IiwicmVzb2x2ZSIsInJpbXJhZiIsInB1bGxBcGsiLCJ0bXBEaXIiLCJpc0VtcHR5IiwiZnMiLCJleGlzdHMiLCJzdHJpbmdzVG1wRGlyIiwiYXBrU3RyaW5ncyIsImxvY2FsUGF0aCIsImV4dHJhY3RTdHJpbmdzRnJvbUFwayIsInVubG9ja1dpdGhVSUF1dG9tYXRpb24iLCJkcml2ZXIiLCJ1bmxvY2tDYXBhYmlsaXRpZXMiLCJ1bmxvY2tUeXBlIiwidW5sb2NrZXIiLCJpc1ZhbGlkVW5sb2NrVHlwZSIsInVubG9ja0tleSIsImlzVmFsaWRLZXkiLCJ1bmxvY2tNZXRob2QiLCJQSU5fVU5MT0NLIiwicGluVW5sb2NrIiwiUElOX1VOTE9DS19LRVlfRVZFTlQiLCJwaW5VbmxvY2tXaXRoS2V5RXZlbnQiLCJQQVNTV09SRF9VTkxPQ0siLCJwYXNzd29yZFVubG9jayIsIlBBVFRFUk5fVU5MT0NLIiwicGF0dGVyblVubG9jayIsIkZJTkdFUlBSSU5UX1VOTE9DSyIsImZpbmdlcnByaW50VW5sb2NrIiwidW5sb2NrV2l0aEhlbHBlckFwcCIsImZpcnN0UnVuIiwibGF1bmNoSGVscGVyIiwiaXNTY3JlZW5Mb2NrZWQiLCJlIiwiZGVsYXkiLCJ1bmxvY2siLCJjYXBhYmlsaXRpZXMiLCJpc1VuZGVmaW5lZCIsInZlcmlmeVVubG9jayIsInVubG9ja1N1Y2Nlc3NUaW1lb3V0Iiwic3VjY2Vzc1RpbWVvdXQiLCJpbml0RGV2aWNlIiwic2tpcERldmljZUluaXRpYWxpemF0aW9uIiwibG9jYWxlU2NyaXB0IiwidW5pY29kZUtleWJvYXJkIiwiZGlzYWJsZVdpbmRvd0FuaW1hdGlvbiIsInNraXBVbmxvY2siLCJtb2NrTG9jYXRpb25BcHAiLCJza2lwTG9nY2F0Q2FwdHVyZSIsImxvZ2NhdEZvcm1hdCIsImxvZ2NhdEZpbHRlclNwZWNzIiwid2FpdEZvckRldmljZSIsInNob3VsZFRocm93RXJyb3IiLCJpc0VtdWxhdG9yIiwic3RhcnRMb2djYXQiLCJmb3JtYXQiLCJmaWx0ZXJTcGVjcyIsInJlbW92ZU51bGxQcm9wZXJ0aWVzIiwib2JqIiwiaXNOdWxsIiwidHJ1bmNhdGVEZWNpbWFscyIsIm51bWJlciIsImRpZ2l0cyIsIm11bHRpcGxpZXIiLCJNYXRoIiwicG93IiwiYWRqdXN0ZWROdW0iLCJ0cnVuY2F0ZWROdW0iLCJpc0Nocm9tZUJyb3dzZXIiLCJnZXRDaHJvbWVQa2ciLCJyZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnMiLCJzZXJ2ZXIiLCJzZXNzaW9uSWQiLCJpc0Z1bmN0aW9uIiwiZ2V0V2ViU29ja2V0SGFuZGxlcnMiLCJhY3RpdmVIYW5kbGVycyIsInBhdGhuYW1lIiwicmVtb3ZlV2ViU29ja2V0SGFuZGxlciIsInBhcnNlQXJyYXkiLCJjYXAiLCJwYXJzZWRDYXBzIiwiSlNPTiIsInBhcnNlIiwidmFsaWRhdGVEZXNpcmVkQ2FwcyIsImNhcHMiLCJicm93c2VyTmFtZSIsImFkanVzdEJyb3dzZXJTZXNzaW9uQ2FwcyIsInN0cmluZ2lmeSIsInBvc3NpYmxlTmFtZXMiLCJzb21lIiwidGVzdCIsImJvb3RzdHJhcCIsIkJvb3RzdHJhcCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBSUE7O0FBQ0E7O0FBRUEsTUFBTUEsdUJBQXVCLEdBQUcsS0FBaEM7QUFFQSxNQUFNQywrQkFBK0IsR0FBRztBQUN0Q0MsRUFBQUEsTUFBTSxFQUFFO0FBQ05DLElBQUFBLEdBQUcsRUFBRSxvQkFEQztBQUVOQyxJQUFBQSxRQUFRLEVBQUU7QUFGSixHQUQ4QjtBQUt0Q0MsRUFBQUEsUUFBUSxFQUFFO0FBQ1JGLElBQUFBLEdBQUcsRUFBRSwyQkFERztB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Q0FBRCxJQUFPbkwsZ0JBQWdCLENBQUNzUixJQUFqQixDQUFzQm5HLENBQXRCLENBQTFCLENBQXJCO0FBQ0QsQ0FIRDs7QUFLQXhKLE9BQU8sQ0FBQzRQLFNBQVIsR0FBb0JDLGtCQUFwQjtBQUNBN1AsT0FBTyxDQUFDK0ssUUFBUixHQUFtQkEsc0JBQW5CO2VBR2UvSyxPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgcmV0cnksIHJldHJ5SW50ZXJ2YWwgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IGZzLCB1dGlsIH0gZnJvbSAnYXBwaXVtLXN1cHBvcnQnO1xuaW1wb3J0IHsgcGF0aCBhcyBzZXR0aW5nc0Fwa1BhdGggfSBmcm9tICdpby5hcHBpdW0uc2V0dGluZ3MnO1xuaW1wb3J0IEJvb3RzdHJhcCBmcm9tICcuL2Jvb3RzdHJhcCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgQURCIGZyb20gJ2FwcGl1bS1hZGInO1xuaW1wb3J0IHtcbiAgZGVmYXVsdCBhcyB1bmxvY2tlciwgUElOX1VOTE9DSywgUElOX1VOTE9DS19LRVlfRVZFTlQsIFBBU1NXT1JEX1VOTE9DSyxcbiAgUEFUVEVSTl9VTkxPQ0ssIEZJTkdFUlBSSU5UX1VOTE9DS1xufSBmcm9tICcuL3VubG9jay1oZWxwZXJzJztcbmltcG9ydCB7IEVPTCB9IGZyb20gJ29zJztcbmltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcblxuY29uc3QgUEFDS0FHRV9JTlNUQUxMX1RJTUVPVVQgPSA5MDAwMDsgLy8gbWlsbGlzZWNvbmRzXG4vLyBodHRwczovL2NzLmNocm9taXVtLm9yZy9jaHJvbWl1bS9zcmMvY2hyb21lL2Jyb3dzZXIvZGV2dG9vbHMvZGV2aWNlL2FuZHJvaWRfZGV2aWNlX2luZm9fcXVlcnkuY2NcbmNvbnN0IENIUk9NRV9CUk9XU0VSX1BBQ0tBR0VfQUNUSVZJVFkgPSB7XG4gIGNocm9tZToge1xuICAgIHBrZzogJ2NvbS5hbmRyb2lkLmNocm9tZScsXG4gICAgYWN0aXZpdHk6ICdjb20uZ29vZ2xlLmFuZHJvaWQuYXBwcy5jaHJvbWUuTWFpbicsXG4gIH0sXG4gIGNocm9taXVtOiB7XG4gICAgcGtnOiAnb3JnLmNocm9taXVtLmNocm9tZS5zaGVsbCcsXG4gICAgYWN0aXZpdHk6ICcuQ2hyb21lU2hlbGxBY3Rpdml0eScsXG4gIH0sXG4gIGNocm9tZWJldGE6IHtcbiAgICBwa2c6ICdjb20uY2hyb21lLmJldGEnLFxuICAgIGFjdGl2aXR5OiAnY29tLmdvb2dsZS5hbmRyb2lkLmFwcHMuY2hyb21lLk1haW4nLFxuICB9LFxuICBicm93c2VyOiB7XG4gICAgcGtnOiAnY29tLmFuZHJvaWQuYnJvd3NlcicsXG4gICAgYWN0aXZpdHk6ICdjb20uYW5kcm9pZC5icm93c2VyLkJyb3dzZXJBY3Rpdml0eScsXG4gIH0sXG4gICdjaHJvbWl1bS1icm93c2VyJzoge1xuICAgIHBrZzogJ29yZy5jaHJvbWl1bS5jaHJvbWUnLFxuICAgIGFjdGl2aXR5OiAnY29tLmdvb2dsZS5hbmRyb2lkLmFwcHMuY2hyb21lLk1haW4nLFxuICB9LFxuICAnY2hyb21pdW0td2Vidmlldyc6IHtcbiAgICBwa2c6ICdvcmcuY2hyb21pdW0ud2Vidmlld19zaGVsbCcsXG4gICAgYWN0aXZpdHk6ICdvcmcuY2hyb21pdW0ud2Vidmlld19zaGVsbC5XZWJWaWV3QnJvd3NlckFjdGl2aXR5JyxcbiAgfSxcbiAgZGVmYXVsdDoge1xuICAgIHBrZzogJ2NvbS5hbmRyb2lkLmNocm9tZScsXG4gICAgYWN0aXZpdHk6ICdjb20uZ29vZ2xlLmFuZHJvaWQuYXBwcy5jaHJvbWUuTWFpbicsXG4gIH0sXG59O1xuY29uc3QgU0VUVElOR1NfSEVMUEVSX1BLR19JRCA9ICdpby5hcHBpdW0uc2V0dGluZ3MnO1xuY29uc3QgU0VUVElOR1NfSEVMUEVSX1VOTE9DS19BQ1RJVklUWSA9ICcuVW5sb2NrJztcbmNvbnN0IEVNVUxBVE9SX1BBVFRFUk4gPSAvXFxiZW11bGF0b3JcXGIvaTtcbi8vIFRoZXNlIGNvbnN0YW50cyBhcmUgaW4gc3luYyB3aXRoXG4vLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWFwcGxpY2F0aW9uc3RhdGUveGN1aWFwcGxpY2F0aW9uc3RhdGVydW5uaW5nYmFja2dyb3VuZD9sYW5ndWFnZT1vYmpjXG5jb25zdCBBUFBfU1RBVEUgPSBPYmplY3QuZnJlZXplKHtcbiAgTk9UX0lOU1RBTExFRDogMCxcbiAgTk9UX1JVTk5JTkc6IDEsXG4gIFJVTk5JTkdfSU5fQkFDS0dST1VORDogMyxcbiAgUlVOTklOR19JTl9GT1JFR1JPVU5EOiA0XG59KTtcblxuXG5mdW5jdGlvbiBlbnN1cmVOZXR3b3JrU3BlZWQgKGFkYiwgbmV0d29ya1NwZWVkKSB7XG4gIGlmIChfLnZhbHVlcyhhZGIuTkVUV09SS19TUEVFRCkuaW5jbHVkZXMobmV0d29ya1NwZWVkKSkge1xuICAgIHJldHVybiBuZXR3b3JrU3BlZWQ7XG4gIH1cbiAgbG9nZ2VyLndhcm4oYFdyb25nIG5ldHdvcmsgc3BlZWQgcGFyYW0gJyR7bmV0d29ya1NwZWVkfScsIHVzaW5nIGRlZmF1bHQ6ICR7YWRiLk5FVFdPUktfU1BFRUQuRlVMTH0uIGAgK1xuICAgIGBTdXBwb3J0ZWQgdmFsdWVzOiAke18udmFsdWVzKGFkYi5ORVRXT1JLX1NQRUVEKX1gKTtcbiAgcmV0dXJuIGFkYi5ORVRXT1JLX1NQRUVELkZVTEw7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVBdmRBcmdzIChhZGIsIG9wdHMpIHtcbiAgY29uc3Qge1xuICAgIG5ldHdvcmtTcGVlZCxcbiAgICBpc0hlYWRsZXNzLFxuICAgIGF2ZEFyZ3MsXG4gIH0gPSBvcHRzO1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgaWYgKGF2ZEFyZ3MpIHtcbiAgICBpZiAoXy5pc0FycmF5KGF2ZEFyZ3MpKSB7XG4gICAgICByZXN1bHQucHVzaCguLi5hdmRBcmdzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnB1c2goLi4uKHV0aWwuc2hlbGxQYXJzZShgJHthdmRBcmdzfWApKSk7XG4gICAgfVxuICB9XG4gIGlmIChuZXR3b3JrU3BlZWQpIHtcbiAgICByZXN1bHQucHVzaCgnLW5ldHNwZWVkJywgZW5zdXJlTmV0d29ya1NwZWVkKGFkYiwgbmV0d29ya1NwZWVkKSk7XG4gIH1cbiAgaWYgKGlzSGVhZGxlc3MpIHtcbiAgICByZXN1bHQucHVzaCgnLW5vLXdpbmRvdycpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cblxuY29uc3QgaGVscGVycyA9IHt9O1xuXG5oZWxwZXJzLmNyZWF0ZUJhc2VBREIgPSBhc3luYyBmdW5jdGlvbiBjcmVhdGVCYXNlQURCIChvcHRzID0ge30pIHtcbiAgLy8gZmlsdGVyIG91dCBhbnkgdW53YW50ZWQgb3B0aW9ucyBzZW50IGluXG4gIC8vIHRoaXMgbGlzdCBzaG91bGQgYmUgdXBkYXRlZCBhcyBBREIgdGFrZXMgbW9yZSBhcmd1bWVudHNcbiAgY29uc3Qge1xuICAgIGFkYlBvcnQsXG4gICAgc3VwcHJlc3NLaWxsU2VydmVyLFxuICAgIHJlbW90ZUFkYkhvc3QsXG4gICAgY2xlYXJEZXZpY2VMb2dzT25TdGFydCxcbiAgICBhZGJFeGVjVGltZW91dCxcbiAgICB1c2VLZXlzdG9yZSxcbiAgICBrZXlzdG9yZVBhdGgsXG4gICAga2V5c3RvcmVQYXNzd29yZCxcbiAgICBrZXlBbGlhcyxcbiAgICBrZXlQYXNzd29yZCxcbiAgICByZW1vdGVBcHBzQ2FjaGVMaW1pdCxcbiAgICBidWlsZFRvb2xzVmVyc2lvbixcbiAgICBhbGxvd09mZmxpbmVEZXZpY2VzLFxuICAgIGFsbG93RGVsYXlBZGIsXG4gIH0gPSBvcHRzO1xuICByZXR1cm4gYXdhaXQgQURCLmNyZWF0ZUFEQih7XG4gICAgYWRiUG9ydCxcbiAgICBzdXBwcmVzc0tpbGxTZXJ2ZXIsXG4gICAgcmVtb3RlQWRiSG9zdCxcbiAgICBjbGVhckRldmljZUxvZ3NPblN0YXJ0LFxuICAgIGFkYkV4ZWNUaW1lb3V0LFxuICAgIHVzZUtleXN0b3JlLFxuICAgIGtleXN0b3JlUGF0aCxcbiAgICBrZXlzdG9yZVBhc3N3b3JkLFxuICAgIGtleUFsaWFzLFxuICAgIGtleVBhc3N3b3JkLFxuICAgIHJlbW90ZUFwcHNDYWNoZUxpbWl0LFxuICAgIGJ1aWxkVG9vbHNWZXJzaW9uLFxuICAgIGFsbG93T2ZmbGluZURldmljZXMsXG4gICAgYWxsb3dEZWxheUFkYixcbiAgfSk7XG59O1xuXG5oZWxwZXJzLnByZXBhcmVFbXVsYXRvciA9IGFzeW5jIGZ1bmN0aW9uIHByZXBhcmVFbXVsYXRvciAoYWRiLCBvcHRzKSB7XG4gIGNvbnN0IHtcbiAgICBhdmQsXG4gICAgYXZkRW52OiBlbnYsXG4gICAgbGFuZ3VhZ2UsXG4gICAgbG9jYWxlOiBjb3VudHJ5LFxuICAgIGF2ZExhdW5jaFRpbWVvdXQ6IGxhdW5jaFRpbWVvdXQsXG4gICAgYXZkUmVhZHlUaW1lb3V0OiByZWFkeVRpbWVvdXQsXG4gIH0gPSBvcHRzO1xuICBpZiAoIWF2ZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGxhdW5jaCBBVkQgd2l0aG91dCBBVkQgbmFtZScpO1xuICB9XG5cbiAgY29uc3QgYXZkTmFtZSA9IGF2ZC5yZXBsYWNlKCdAJywgJycpO1xuICBjb25zdCBydW5uaW5nQVZEID0gYXdhaXQgYWRiLmdldFJ1bm5pbmdBVkQoYXZkTmFtZSk7XG4gIGNvbnN0IGFyZ3MgPSBwcmVwYXJlQXZkQXJncyhhZGIsIG9wdHMpO1xuICBpZiAocnVubmluZ0FWRCkge1xuICAgIGlmIChhcmdzLmluY2x1ZGVzKCctd2lwZS1kYXRhJykpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgS2lsbGluZyAnJHthdmROYW1lfScgYmVjYXVzZSBpdCBuZWVkcyB0byBiZSB3aXBlZCBhdCBzdGFydC5gKTtcbiAgICAgIGF3YWl0IGFkYi5raWxsRW11bGF0b3IoYXZkTmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnTm90IGxhdW5jaGluZyBBVkQgYmVjYXVzZSBpdCBpcyBhbHJlYWR5IHJ1bm5pbmcuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG4gIGF3YWl0IGFkYi5sYXVuY2hBVkQoYXZkLCB7XG4gICAgYXJncyxcbiAgICBlbnYsXG4gICAgbGFuZ3VhZ2UsXG4gICAgY291bnRyeSxcbiAgICBsYXVuY2hUaW1lb3V0LFxuICAgIHJlYWR5VGltZW91dCxcbiAgfSk7XG59O1xuXG4vKipcbiAqIFNldCBhbmQgZW5zdXJlIHRoZSBsb2NhbGUgbmFtZSBvZiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGFkYiAtIFRoZSBhZGIgbW9kdWxlIGluc3RhbmNlLlxuICogQHBhcmFtIHtzdHJpbmd9IGxhbmd1YWdlIC0gTGFuZ3VhZ2UuIFRoZSBsYW5ndWFnZSBmaWVsZCBpcyBjYXNlIGluc2Vuc2l0aXZlLCBidXQgTG9jYWxlIGFsd2F5cyBjYW5vbmljYWxpemVzIHRvIGxvd2VyIGNhc2UuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6IFthLXpBLVpdezIsOH0uIGUuZy4gZW4sIGphIDogaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2phdmEvdXRpbC9Mb2NhbGUuaHRtbFxuICogQHBhcmFtIHtzdHJpbmd9IGNvdW50cnkgLSBDb3VudHJ5LiBUaGUgY291bnRyeSAocmVnaW9uKSBmaWVsZCBpcyBjYXNlIGluc2Vuc2l0aXZlLCBidXQgTG9jYWxlIGFsd2F5cyBjYW5vbmljYWxpemVzIHRvIHVwcGVyIGNhc2UuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6IFthLXpBLVpdezJ9IHwgWzAtOV17M30uIGUuZy4gVVMsIEpQIDogaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2phdmEvdXRpbC9Mb2NhbGUuaHRtbFxuICogQHBhcmFtIHs/c3RyaW5nfSBzY3JpcHQgLSBTY3JpcHQuIFRoZSBzY3JpcHQgZmllbGQgaXMgY2FzZSBpbnNlbnNpdGl2ZSBidXQgTG9jYWxlIGFsd2F5cyBjYW5vbmljYWxpemVzIHRvIHRpdGxlIGNhc2UuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6IFthLXpBLVpdezR9LiBlLmcuIEhhbnMgaW4gemgtSGFucy1DTiA6IGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9qYXZhL3V0aWwvTG9jYWxlLmh0bWxcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBpdCBmYWlsZWQgdG8gc2V0IGxvY2FsZSBwcm9wZXJseVxuICovXG5oZWxwZXJzLmVuc3VyZURldmljZUxvY2FsZSA9IGFzeW5jIGZ1bmN0aW9uIGVuc3VyZURldmljZUxvY2FsZSAoYWRiLCBsYW5ndWFnZSwgY291bnRyeSwgc2NyaXB0ID0gbnVsbCkge1xuICBpZiAoIV8uaXNTdHJpbmcobGFuZ3VhZ2UpICYmICFfLmlzU3RyaW5nKGNvdW50cnkpKSB7XG4gICAgbG9nZ2VyLndhcm4oYHNldERldmljZUxhbmd1YWdlQ291bnRyeSByZXF1aXJlcyBsYW5ndWFnZSBvciBjb3VudHJ5LmApO1xuICAgIGxvZ2dlci53YXJuKGBHb3QgbGFuZ3VhZ2U6ICcke2xhbmd1YWdlfScgYW5kIGNvdW50cnk6ICcke2NvdW50cnl9J2ApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGF3YWl0IGFkYi5zZXREZXZpY2VMYW5ndWFnZUNvdW50cnkobGFuZ3VhZ2UsIGNvdW50cnksIHNjcmlwdCk7XG5cbiAgaWYgKCFhd2FpdCBhZGIuZW5zdXJlQ3VycmVudExvY2FsZShsYW5ndWFnZSwgY291bnRyeSwgc2NyaXB0KSkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBzY3JpcHQgPyBgbGFuZ3VhZ2U6ICR7bGFuZ3VhZ2V9LCBjb3VudHJ5OiAke2NvdW50cnl9IGFuZCBzY3JpcHQ6ICR7c2NyaXB0fWAgOiBgbGFuZ3VhZ2U6ICR7bGFuZ3VhZ2V9IGFuZCBjb3VudHJ5OiAke2NvdW50cnl9YDtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBzZXQgJHttZXNzYWdlfWApO1xuICB9XG59O1xuXG5oZWxwZXJzLmdldERldmljZUluZm9Gcm9tQ2FwcyA9IGFzeW5jIGZ1bmN0aW9uIGdldERldmljZUluZm9Gcm9tQ2FwcyAob3B0cyA9IHt9KSB7XG4gIC8vIHdlIGNhbiBjcmVhdGUgYSB0aHJvd2F3YXkgQURCIGluc3RhbmNlIGhlcmUsIHNvIHRoZXJlIGlzIG5vIGRlcGVuZGVuY3lcbiAgLy8gb24gaW5zdGFudGlhdGluZyBvbiBlYXJsaWVyIChhdCB0aGlzIHBvaW50LCB3ZSBoYXZlIG5vIHVkaWQpXG4gIC8vIHdlIGNhbiBvbmx5IHVzZSB0aGlzIEFEQiBvYmplY3QgZm9yIGNvbW1hbmRzIHRoYXQgd291bGQgbm90IGJlIGNvbmZ1c2VkXG4gIC8vIGlmIG11bHRpcGxlIGRldmljZXMgYXJlIGNvbm5lY3RlZFxuICBjb25zdCBhZGIgPSBhd2FpdCBoZWxwZXJzLmNyZWF0ZUJhc2VBREIob3B0cyk7XG4gIGxldCB1ZGlkID0gb3B0cy51ZGlkO1xuICBsZXQgZW1Qb3J0ID0gbnVsbDtcblxuICAvLyBhIHNwZWNpZmljIGF2ZCBuYW1lIHdhcyBnaXZlbi4gdHJ5IHRvIGluaXRpYWxpemUgd2l0aCB0aGF0XG4gIGlmIChvcHRzLmF2ZCkge1xuICAgIGF3YWl0IGhlbHBlcnMucHJlcGFyZUVtdWxhdG9yKGFkYiwgb3B0cyk7XG4gICAgdWRpZCA9IGFkYi5jdXJEZXZpY2VJZDtcbiAgICBlbVBvcnQgPSBhZGIuZW11bGF0b3JQb3J0O1xuICB9IGVsc2Uge1xuICAgIC8vIG5vIGF2ZCBnaXZlbi4gbGV0cyB0cnkgd2hhdGV2ZXIncyBwbHVnZ2VkIGluIGRldmljZXMvZW11bGF0b3JzXG4gICAgbG9nZ2VyLmluZm8oJ1JldHJpZXZpbmcgZGV2aWNlIGxpc3QnKTtcbiAgICBsZXQgZGV2aWNlcyA9IGF3YWl0IGFkYi5nZXREZXZpY2VzV2l0aFJldHJ5KCk7XG5cbiAgICAvLyB1ZGlkIHdhcyBnaXZlbiwgbGV0cyB0cnkgdG8gaW5pdCB3aXRoIHRoYXQgZGV2aWNlXG4gICAgaWYgKHVkaWQpIHtcbiAgICAgIGlmICghXy5pbmNsdWRlcyhfLm1hcChkZXZpY2VzLCAndWRpZCcpLCB1ZGlkKSkge1xuICAgICAgICBsb2dnZXIuZXJyb3JBbmRUaHJvdyhgRGV2aWNlICR7dWRpZH0gd2FzIG5vdCBpbiB0aGUgbGlzdCBvZiBjb25uZWN0ZWQgZGV2aWNlc2ApO1xuICAgICAgfVxuICAgICAgZW1Qb3J0ID0gYWRiLmdldFBvcnRGcm9tRW11bGF0b3JTdHJpbmcodWRpZCk7XG4gICAgfSBlbHNlIGlmIChvcHRzLnBsYXRmb3JtVmVyc2lvbikge1xuICAgICAgb3B0cy5wbGF0Zm9ybVZlcnNpb24gPSBgJHtvcHRzLnBsYXRmb3JtVmVyc2lvbn1gLnRyaW0oKTtcblxuICAgICAgLy8gYSBwbGF0Zm9ybSB2ZXJzaW9uIHdhcyBnaXZlbi4gbGV0cyB0cnkgdG8gZmluZCBhIGRldmljZSB3aXRoIHRoZSBzYW1lIG9zXG4gICAgICBjb25zdCBwbGF0Zm9ybVZlcnNpb24gPSBzZW12ZXIuY29lcmNlKG9wdHMucGxhdGZvcm1WZXJzaW9uKSB8fCBvcHRzLnBsYXRmb3JtVmVyc2lvbjtcbiAgICAgIGxvZ2dlci5pbmZvKGBMb29raW5nIGZvciBhIGRldmljZSB3aXRoIEFuZHJvaWQgJyR7cGxhdGZvcm1WZXJzaW9ufSdgKTtcblxuICAgICAgLy8gaW4gY2FzZSB3ZSBmYWlsIHRvIGZpbmQgc29tZXRoaW5nLCBnaXZlIHRoZSB1c2VyIGEgdXNlZnVsIGxvZyB0aGF0IGhhc1xuICAgICAgLy8gdGhlIGRldmljZSB1ZGlkcyBhbmQgb3MgdmVyc2lvbnMgc28gdGhleSBrbm93IHdoYXQncyBhdmFpbGFibGVcbiAgICAgIGNvbnN0IGF2YWlsRGV2aWNlcyA9IFtdO1xuICAgICAgbGV0IHBhcnRpYWxNYXRjaENhbmRpZGF0ZSA9IG51bGw7XG4gICAgICAvLyBmaXJzdCB0cnkgc3RhcnRlZCBkZXZpY2VzL2VtdWxhdG9yc1xuICAgICAgZm9yIChjb25zdCBkZXZpY2Ugb2YgZGV2aWNlcykge1xuICAgICAgICAvLyBkaXJlY3QgYWRiIGNhbGxzIHRvIHRoZSBzcGVjaWZpYyBkZXZpY2VcbiAgICAgICAgYXdhaXQgYWRiLnNldERldmljZUlkKGRldmljZS51ZGlkKTtcbiAgICAgICAgY29uc3QgcmF3RGV2aWNlT1MgPSBhd2FpdCBhZGIuZ2V0UGxhdGZvcm1WZXJzaW9uKCk7XG4gICAgICAgIC8vIFRoZSBkZXZpY2UgT1MgY291bGQgZWl0aGVyIGJlIGEgbnVtYmVyLCBsaWtlIGA2LjBgXG4gICAgICAgIC8vIG9yIGFuIGFiYnJldmlhdGlvbiwgbGlrZSBgUmBcbiAgICAgICAgYXZhaWxEZXZpY2VzLnB1c2goYCR7ZGV2aWNlLnVkaWR9ICgke3Jhd0RldmljZU9TfSlgKTtcbiAgICAgICAgY29uc3QgZGV2aWNlT1MgPSBzZW12ZXIuY29lcmNlKHJhd0RldmljZU9TKSB8fCByYXdEZXZpY2VPUztcbiAgICAgICAgaWYgKCFkZXZpY2VPUykge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYm90aFZlcnNpb25zQ2FuQmVDb2VyY2VkID0gc2VtdmVyLnZhbGlkKGRldmljZU9TKSAmJiBzZW12ZXIudmFsaWQocGxhdGZvcm1WZXJzaW9uKTtcbiAgICAgICAgY29uc3QgYm90aFZlcnNpb25zQXJlU3RyaW5ncyA9IF8uaXNTdHJpbmcoZGV2aWNlT1MpICYmIF8uaXNTdHJpbmcocGxhdGZvcm1WZXJzaW9uKTtcbiAgICAgICAgaWYgKGJvdGhWZXJzaW9uc0NhbkJlQ29lcmNlZCAmJiBkZXZpY2VPUy52ZXJzaW9uID09PSBwbGF0Zm9ybVZlcnNpb24udmVyc2lvblxuICAgICAgICAgICAgfHwgYm90aFZlcnNpb25zQXJlU3RyaW5ncyAmJiBfLnRvTG93ZXIoZGV2aWNlT1MpID09PSBfLnRvTG93ZXIocGxhdGZvcm1WZXJzaW9uKSkge1xuICAgICAgICAgIC8vIEdvdCBhbiBleGFjdCBtYXRjaCAtIHByb2NlZWQgaW1tZWRpYXRlbHlcbiAgICAgICAgICB1ZGlkID0gZGV2aWNlLnVkaWQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSBpZiAoIWJvdGhWZXJzaW9uc0NhbkJlQ29lcmNlZCkge1xuICAgICAgICAgIC8vIFRoZXJlIGlzIG5vIHBvaW50IHRvIGNoZWNrIGZvciBwYXJ0aWFsIG1hdGNoIGlmIGVpdGhlciBvZiB2ZXJzaW9uIG51bWJlcnMgaXMgbm90IGNvZXJjaWJsZVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCghXy5pbmNsdWRlcyhvcHRzLnBsYXRmb3JtVmVyc2lvbiwgJy4nKSAmJiBwbGF0Zm9ybVZlcnNpb24ubWFqb3IgPT09IGRldmljZU9TLm1ham9yXG4gICAgICAgICAgICB8fCBwbGF0Zm9ybVZlcnNpb24ubWFqb3IgPT09IGRldmljZU9TLm1ham9yICYmIHBsYXRmb3JtVmVyc2lvbi5taW5vciA9PT0gZGV2aWNlT1MubWlub3IpXG4gICAgICAgICAgICAvLyBHb3QgYSBwYXJ0aWFsIG1hdGNoIC0gbWFrZSBzdXJlIHdlIGNvbnNpZGVyIHRoZSBtb3N0IHJlY2VudFxuICAgICAgICAgICAgLy8gZGV2aWNlIHZlcnNpb24gYXZhaWxhYmxlIG9uIHRoZSBob3N0IHN5c3RlbVxuICAgICAgICAgICAgJiYgKHBhcnRpYWxNYXRjaENhbmRpZGF0ZSAmJiBzZW12ZXIuZ3QoZGV2aWNlT1MsIF8udmFsdWVzKHBhcnRpYWxNYXRjaENhbmRpZGF0ZSlbMF0pXG4gICAgICAgICAgICAgICAgfHwgIXBhcnRpYWxNYXRjaENhbmRpZGF0ZSkpIHtcbiAgICAgICAgICBwYXJ0aWFsTWF0Y2hDYW5kaWRhdGUgPSB7W2RldmljZS51ZGlkXTogZGV2aWNlT1N9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIXVkaWQgJiYgcGFydGlhbE1hdGNoQ2FuZGlkYXRlKSB7XG4gICAgICAgIHVkaWQgPSBfLmtleXMocGFydGlhbE1hdGNoQ2FuZGlkYXRlKVswXTtcbiAgICAgICAgYXdhaXQgYWRiLnNldERldmljZUlkKHVkaWQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXVkaWQpIHtcbiAgICAgICAgLy8gd2UgY291bGRuJ3QgZmluZCBhbnl0aGluZyEgcXVpdFxuICAgICAgICBsb2dnZXIuZXJyb3JBbmRUaHJvdyhgVW5hYmxlIHRvIGZpbmQgYW4gYWN0aXZlIGRldmljZSBvciBlbXVsYXRvciBgICtcbiAgICAgICAgICBgd2l0aCBPUyAke29wdHMucGxhdGZvcm1WZXJzaW9ufS4gVGhlIGZvbGxvd2luZyBhcmUgYXZhaWxhYmxlOiBgICtcbiAgICAgICAgICBhdmFpbERldmljZXMuam9pbignLCAnKSk7XG4gICAgICB9XG5cbiAgICAgIGVtUG9ydCA9IGFkYi5nZXRQb3J0RnJvbUVtdWxhdG9yU3RyaW5nKHVkaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhIHVkaWQgd2FzIG5vdCBnaXZlbiwgZ3JhYiB0aGUgZmlyc3QgZGV2aWNlIHdlIHNlZVxuICAgICAgdWRpZCA9IGRldmljZXNbMF0udWRpZDtcbiAgICAgIGVtUG9ydCA9IGFkYi5nZXRQb3J0RnJvbUVtdWxhdG9yU3RyaW5nKHVkaWQpO1xuICAgIH1cbiAgfVxuXG4gIGxvZ2dlci5pbmZvKGBVc2luZyBkZXZpY2U6ICR7dWRpZH1gKTtcbiAgcmV0dXJuIHt1ZGlkLCBlbVBvcnR9O1xufTtcblxuLy8gcmV0dXJucyBhIG5ldyBhZGIgaW5zdGFuY2Ugd2l0aCBkZXZpY2VJZCBzZXRcbmhlbHBlcnMuY3JlYXRlQURCID0gYXN5bmMgZnVuY3Rpb24gY3JlYXRlQURCIChvcHRzID0ge30pIHtcbiAgY29uc3Qge3VkaWQsIGVtUG9ydH0gPSBvcHRzO1xuICBjb25zdCBhZGIgPSBhd2FpdCBoZWxwZXJzLmNyZWF0ZUJhc2VBREIob3B0cyk7XG4gIGFkYi5zZXREZXZpY2VJZCh1ZGlkKTtcbiAgaWYgKGVtUG9ydCkge1xuICAgIGFkYi5zZXRFbXVsYXRvclBvcnQoZW1Qb3J0KTtcbiAgfVxuXG4gIHJldHVybiBhZGI7XG59O1xuXG5oZWxwZXJzLnZhbGlkYXRlUGFja2FnZUFjdGl2aXR5TmFtZXMgPSBmdW5jdGlvbiB2YWxpZGF0ZVBhY2thZ2VBY3Rpdml0eU5hbWVzIChvcHRzKSB7XG4gIGZvciAoY29uc3Qga2V5IG9mIFsnYXBwUGFja2FnZScsICdhcHBBY3Rpdml0eScsICdhcHBXYWl0UGFja2FnZScsICdhcHBXYWl0QWN0aXZpdHknXSkge1xuICAgIGNvbnN0IG5hbWUgPSBvcHRzW2tleV07XG4gICAgaWYgKCFuYW1lKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBtYXRjaCA9IC8oW15cXHcuKixdKSsvLmV4ZWMobmFtZSk7XG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgbG9nZ2VyLndhcm4oYENhcGFiaWxpdHkgJyR7a2V5fScgaXMgZXhwZWN0ZWQgdG8gb25seSBpbmNsdWRlIGxhdGluIGxldHRlcnMsIGRpZ2l0cywgdW5kZXJzY29yZSwgZG90LCBjb21tYSBhbmQgYXN0ZXJpc2sgY2hhcmFjdGVycy5gKTtcbiAgICBsb2dnZXIud2FybihgQ3VycmVudCB2YWx1ZSAnJHtuYW1lfScgaGFzIG5vbi1tYXRjaGluZyBjaGFyYWN0ZXIgYXQgaW5kZXggJHttYXRjaC5pbmRleH06ICcke25hbWUuc3Vic3RyaW5nKDAsIG1hdGNoLmluZGV4ICsgMSl9J2ApO1xuICB9XG59O1xuXG5oZWxwZXJzLmdldExhdW5jaEluZm8gPSBhc3luYyBmdW5jdGlvbiBnZXRMYXVuY2hJbmZvIChhZGIsIG9wdHMpIHtcbiAgbGV0IHthcHAsIGFwcFBhY2thZ2UsIGFwcEFjdGl2aXR5LCBhcHBXYWl0UGFja2FnZSwgYXBwV2FpdEFjdGl2aXR5fSA9IG9wdHM7XG4gIGlmICghYXBwKSB7XG4gICAgbG9nZ2VyLndhcm4oJ05vIGFwcCBzZW50IGluLCBub3QgcGFyc2luZyBwYWNrYWdlL2FjdGl2aXR5Jyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy52YWxpZGF0ZVBhY2thZ2VBY3Rpdml0eU5hbWVzKG9wdHMpO1xuXG4gIGlmIChhcHBQYWNrYWdlICYmIGFwcEFjdGl2aXR5KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKCdQYXJzaW5nIHBhY2thZ2UgYW5kIGFjdGl2aXR5IGZyb20gYXBwIG1hbmlmZXN0Jyk7XG4gIGxldCB7YXBrUGFja2FnZSwgYXBrQWN0aXZpdHl9ID1cbiAgICBhd2FpdCBhZGIucGFja2FnZUFuZExhdW5jaEFjdGl2aXR5RnJvbU1hbmlmZXN0KGFwcCk7XG4gIGlmIChhcGtQYWNrYWdlICYmICFhcHBQYWNrYWdlKSB7XG4gICAgYXBwUGFja2FnZSA9IGFwa1BhY2thZ2U7XG4gIH1cbiAgaWYgKCFhcHBXYWl0UGFja2FnZSkge1xuICAgIGFwcFdhaXRQYWNrYWdlID0gYXBwUGFja2FnZTtcbiAgfVxuICBpZiAoYXBrQWN0aXZpdHkgJiYgIWFwcEFjdGl2aXR5KSB7XG4gICAgYXBwQWN0aXZpdHkgPSBhcGtBY3Rpdml0eTtcbiAgfVxuICBpZiAoIWFwcFdhaXRBY3Rpdml0eSkge1xuICAgIGFwcFdhaXRBY3Rpdml0eSA9IGFwcEFjdGl2aXR5O1xuICB9XG4gIGxvZ2dlci5kZWJ1ZyhgUGFyc2VkIHBhY2thZ2UgYW5kIGFjdGl2aXR5IGFyZTogJHthcGtQYWNrYWdlfS8ke2Fwa0FjdGl2aXR5fWApO1xuICByZXR1cm4ge2FwcFBhY2thZ2UsIGFwcFdhaXRQYWNrYWdlLCBhcHBBY3Rpdml0eSwgYXBwV2FpdEFjdGl2aXR5fTtcbn07XG5cbmhlbHBlcnMucmVzZXRBcHAgPSBhc3luYyBmdW5jdGlvbiByZXNldEFwcCAoYWRiLCBvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBhcHBQYWNrYWdlLFxuICAgIGZhc3RSZXNldCxcbiAgICBmdWxsUmVzZXQsXG4gICAgYW5kcm9pZEluc3RhbGxUaW1lb3V0ID0gUEFDS0FHRV9JTlNUQUxMX1RJTUVPVVQsXG4gICAgYXV0b0dyYW50UGVybWlzc2lvbnMsXG4gICAgYWxsb3dUZXN0UGFja2FnZXNcbiAgfSA9IG9wdHM7XG5cbiAgaWYgKCFhcHBQYWNrYWdlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiJ2FwcFBhY2thZ2UnIG9wdGlvbiBpcyByZXF1aXJlZFwiKTtcbiAgfVxuXG4gIGNvbnN0IGlzSW5zdGFsbGVkID0gYXdhaXQgYWRiLmlzQXBwSW5zdGFsbGVkKGFwcFBhY2thZ2UpO1xuXG4gIGlmIChpc0luc3RhbGxlZCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBhZGIuZm9yY2VTdG9wKGFwcFBhY2thZ2UpO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICAvLyBmdWxsUmVzZXQgaGFzIHByaW9yaXR5IG92ZXIgZmFzdFJlc2V0XG4gICAgaWYgKCFmdWxsUmVzZXQgJiYgZmFzdFJlc2V0KSB7XG4gICAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBhZGIuY2xlYXIoYXBwUGFja2FnZSk7XG4gICAgICBpZiAoXy5pc1N0cmluZyhvdXRwdXQpICYmIG91dHB1dC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdmYWlsZWQnKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjbGVhciB0aGUgYXBwbGljYXRpb24gZGF0YSBvZiAnJHthcHBQYWNrYWdlfScuIE9yaWdpbmFsIGVycm9yOiAke291dHB1dH1gKTtcbiAgICAgIH1cbiAgICAgIC8vIGV4ZWN1dGluZyBgc2hlbGwgcG0gY2xlYXJgIHJlc2V0cyBwcmV2aW91c2x5IGFzc2lnbmVkIGFwcGxpY2F0aW9uIHBlcm1pc3Npb25zIGFzIHdlbGxcbiAgICAgIGlmIChhdXRvR3JhbnRQZXJtaXNzaW9ucykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGFkYi5ncmFudEFsbFBlcm1pc3Npb25zKGFwcFBhY2thZ2UpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGxvZ2dlci5lcnJvcihgVW5hYmxlIHRvIGdyYW50IHBlcm1pc3Npb25zIHJlcXVlc3RlZC4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbG9nZ2VyLmRlYnVnKGBQZXJmb3JtZWQgZmFzdCByZXNldCBvbiB0aGUgaW5zdGFsbGVkICcke2FwcFBhY2thZ2V9JyBhcHBsaWNhdGlvbiAoc3RvcCBhbmQgY2xlYXIpYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaWYgKCFhcHApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCInYXBwJyBvcHRpb24gaXMgcmVxdWlyZWQgZm9yIHJlaW5zdGFsbFwiKTtcbiAgfVxuXG4gIGxvZ2dlci5kZWJ1ZyhgUnVubmluZyBmdWxsIHJlc2V0IG9uICcke2FwcFBhY2thZ2V9JyAocmVpbnN0YWxsKWApO1xuICBpZiAoaXNJbnN0YWxsZWQpIHtcbiAgICBhd2FpdCBhZGIudW5pbnN0YWxsQXBrKGFwcFBhY2thZ2UpO1xuICB9XG4gIGF3YWl0IGFkYi5pbnN0YWxsKGFwcCwge1xuICAgIGdyYW50UGVybWlzc2lvbnM6IGF1dG9HcmFudFBlcm1pc3Npb25zLFxuICAgIHRpbWVvdXQ6IGFuZHJvaWRJbnN0YWxsVGltZW91dCxcbiAgICBhbGxvd1Rlc3RQYWNrYWdlcyxcbiAgfSk7XG59O1xuXG5oZWxwZXJzLmluc3RhbGxBcGsgPSBhc3luYyBmdW5jdGlvbiBpbnN0YWxsQXBrIChhZGIsIG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGFwcFBhY2thZ2UsXG4gICAgZmFzdFJlc2V0LFxuICAgIGZ1bGxSZXNldCxcbiAgICBhbmRyb2lkSW5zdGFsbFRpbWVvdXQgPSBQQUNLQUdFX0lOU1RBTExfVElNRU9VVCxcbiAgICBhdXRvR3JhbnRQZXJtaXNzaW9ucyxcbiAgICBhbGxvd1Rlc3RQYWNrYWdlcyxcbiAgICBlbmZvcmNlQXBwSW5zdGFsbCxcbiAgfSA9IG9wdHM7XG5cbiAgaWYgKCFhcHAgfHwgIWFwcFBhY2thZ2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCInYXBwJyBhbmQgJ2FwcFBhY2thZ2UnIG9wdGlvbnMgYXJlIHJlcXVpcmVkXCIpO1xuICB9XG5cbiAgaWYgKGZ1bGxSZXNldCkge1xuICAgIGF3YWl0IHRoaXMucmVzZXRBcHAoYWRiLCBvcHRzKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB7XG4gICAgYXBwU3RhdGUsXG4gICAgd2FzVW5pbnN0YWxsZWRcbiAgfSA9IGF3YWl0IGFkYi5pbnN0YWxsT3JVcGdyYWRlKGFwcCwgYXBwUGFja2FnZSwge1xuICAgIGdyYW50UGVybWlzc2lvbnM6IGF1dG9HcmFudFBlcm1pc3Npb25zLFxuICAgIHRpbWVvdXQ6IGFuZHJvaWRJbnN0YWxsVGltZW91dCxcbiAgICBhbGxvd1Rlc3RQYWNrYWdlcyxcbiAgICBlbmZvcmNlQ3VycmVudEJ1aWxkOiBlbmZvcmNlQXBwSW5zdGFsbCxcbiAgfSk7XG5cbiAgLy8gVGhlcmUgaXMgbm8gbmVlZCB0byByZXNldCB0aGUgbmV3bHkgaW5zdGFsbGVkIGFwcFxuICBjb25zdCBpc0luc3RhbGxlZE92ZXJFeGlzdGluZ0FwcCA9ICF3YXNVbmluc3RhbGxlZFxuICAgICYmIGFwcFN0YXRlICE9PSBhZGIuQVBQX0lOU1RBTExfU1RBVEUuTk9UX0lOU1RBTExFRDtcbiAgaWYgKGZhc3RSZXNldCAmJiBpc0luc3RhbGxlZE92ZXJFeGlzdGluZ0FwcCkge1xuICAgIGxvZ2dlci5pbmZvKGBQZXJmb3JtaW5nIGZhc3QgcmVzZXQgb24gJyR7YXBwUGFja2FnZX0nYCk7XG4gICAgYXdhaXQgdGhpcy5yZXNldEFwcChhZGIsIG9wdHMpO1xuICB9XG59O1xuXG4vKipcbiAqIEluc3RhbGxzIGFuIGFycmF5IG9mIGFwa3NcbiAqIEBwYXJhbSB7QURCfSBhZGIgSW5zdGFuY2Ugb2YgQXBwaXVtIEFEQiBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIE9wdHMgZGVmaW5lZCBpbiBkcml2ZXIuanNcbiAqL1xuaGVscGVycy5pbnN0YWxsT3RoZXJBcGtzID0gYXN5bmMgZnVuY3Rpb24gaW5zdGFsbE90aGVyQXBrcyAob3RoZXJBcHBzLCBhZGIsIG9wdHMpIHtcbiAgbGV0IHtcbiAgICBhbmRyb2lkSW5zdGFsbFRpbWVvdXQgPSBQQUNLQUdFX0lOU1RBTExfVElNRU9VVCxcbiAgICBhdXRvR3JhbnRQZXJtaXNzaW9ucyxcbiAgICBhbGxvd1Rlc3RQYWNrYWdlc1xuICB9ID0gb3B0cztcblxuICAvLyBJbnN0YWxsIGFsbCBvZiB0aGUgQVBLJ3MgYXN5bmNocm9ub3VzbHlcbiAgYXdhaXQgQi5hbGwob3RoZXJBcHBzLm1hcCgob3RoZXJBcHApID0+IHtcbiAgICBsb2dnZXIuZGVidWcoYEluc3RhbGxpbmcgYXBwOiAke290aGVyQXBwfWApO1xuICAgIHJldHVybiBhZGIuaW5zdGFsbE9yVXBncmFkZShvdGhlckFwcCwgbnVsbCwge1xuICAgICAgZ3JhbnRQZXJtaXNzaW9uczogYXV0b0dyYW50UGVybWlzc2lvbnMsXG4gICAgICB0aW1lb3V0OiBhbmRyb2lkSW5zdGFsbFRpbWVvdXQsXG4gICAgICBhbGxvd1Rlc3RQYWNrYWdlcyxcbiAgICB9KTtcbiAgfSkpO1xufTtcblxuLyoqXG4gKiBVbmluc3RhbGwgYW4gYXJyYXkgb2YgcGFja2FnZXNcbiAqIEBwYXJhbSB7QURCfSBhZGIgSW5zdGFuY2Ugb2YgQXBwaXVtIEFEQiBvYmplY3RcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gYXBwUGFja2FnZXMgQW4gYXJyYXkgb2YgcGFja2FnZSBuYW1lcyB0byB1bmluc3RhbGwuIElmIHRoaXMgaW5jbHVkZXMgYCcqJ2AsIHVuaW5zdGFsbCBhbGwgb2YgM3JkIHBhcnR5IGFwcHNcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gZmlsdGVyUGFja2FnZXMgQW4gYXJyYXkgb2YgcGFja2FnZXMgZG9lcyBub3QgdW5pbnN0YWxsIHdoZW4gYCpgIGlzIHByb3ZpZGVkIGFzIGBhcHBQYWNrYWdlc2BcbiAqL1xuaGVscGVycy51bmluc3RhbGxPdGhlclBhY2thZ2VzID0gYXN5bmMgZnVuY3Rpb24gdW5pbnN0YWxsT3RoZXJQYWNrYWdlcyAoYWRiLCBhcHBQYWNrYWdlcywgZmlsdGVyUGFja2FnZXMgPSBbXSkge1xuICBpZiAoYXBwUGFja2FnZXMuaW5jbHVkZXMoJyonKSkge1xuICAgIGxvZ2dlci5kZWJ1ZygnVW5pbnN0YWxsIHRoaXJkIHBhcnR5IHBhY2thZ2VzJyk7XG4gICAgYXBwUGFja2FnZXMgPSBhd2FpdCB0aGlzLmdldFRoaXJkUGFydHlQYWNrYWdlcyhhZGIsIGZpbHRlclBhY2thZ2VzKTtcbiAgfVxuXG4gIGxvZ2dlci5kZWJ1ZyhgVW5pbnN0YWxsaW5nIHBhY2thZ2VzOiAke2FwcFBhY2thZ2VzfWApO1xuICBhd2FpdCBCLmFsbChhcHBQYWNrYWdlcy5tYXAoKGFwcFBhY2thZ2UpID0+IGFkYi51bmluc3RhbGxBcGsoYXBwUGFja2FnZSkpKTtcbn07XG5cbi8qKlxuICogR2V0IHRoaXJkIHBhcnR5IHBhY2thZ2VzIGZpbHRlcmVkIHdpdGggYGZpbHRlclBhY2thZ2VzYFxuICogQHBhcmFtIHtBREJ9IGFkYiBJbnN0YW5jZSBvZiBBcHBpdW0gQURCIG9iamVjdFxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBmaWx0ZXJQYWNrYWdlcyBBbiBhcnJheSBvZiBwYWNrYWdlcyBkb2VzIG5vdCB1bmluc3RhbGwgd2hlbiBgKmAgaXMgcHJvdmlkZWQgYXMgYGFwcFBhY2thZ2VzYFxuICogQHJldHVybnMge0FycmF5PHN0cmluZz59IEFuIGFycmF5IG9mIGluc3RhbGxlZCB0aGlyZCBwYXJ5IHBhY2thZ2VzXG4gKi9cbmhlbHBlcnMuZ2V0VGhpcmRQYXJ0eVBhY2thZ2VzID0gYXN5bmMgZnVuY3Rpb24gZ2V0VGhpcmRQYXJ0eVBhY2thZ2VzIChhZGIsIGZpbHRlclBhY2thZ2VzID0gW10pIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYWNrYWdlc1N0cmluZyA9IGF3YWl0IGFkYi5zaGVsbChbJ3BtJywgJ2xpc3QnLCAncGFja2FnZXMnLCAnLTMnXSk7XG4gICAgY29uc3QgYXBwUGFja2FnZXNBcnJheSA9IHBhY2thZ2VzU3RyaW5nLnRyaW0oKS5yZXBsYWNlKC9wYWNrYWdlOi9nLCAnJykuc3BsaXQoRU9MKTtcbiAgICBsb2dnZXIuZGVidWcoYCcke2FwcFBhY2thZ2VzQXJyYXl9JyBmaWx0ZXJlZCB3aXRoICcke2ZpbHRlclBhY2thZ2VzfSdgKTtcbiAgICByZXR1cm4gXy5kaWZmZXJlbmNlKGFwcFBhY2thZ2VzQXJyYXksIGZpbHRlclBhY2thZ2VzKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLndhcm4oYFVuYWJsZSB0byBnZXQgcGFja2FnZXMgd2l0aCAnYWRiIHNoZWxsIHBtIGxpc3QgcGFja2FnZXMgLTMnOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIHJldHVybiBbXTtcbiAgfVxufTtcblxuaGVscGVycy5pbml0VW5pY29kZUtleWJvYXJkID0gYXN5bmMgZnVuY3Rpb24gaW5pdFVuaWNvZGVLZXlib2FyZCAoYWRiKSB7XG4gIGxvZ2dlci5kZWJ1ZygnRW5hYmxpbmcgVW5pY29kZSBrZXlib2FyZCBzdXBwb3J0Jyk7XG5cbiAgLy8gZ2V0IHRoZSBkZWZhdWx0IElNRSBzbyB3ZSBjYW4gcmV0dXJuIGJhY2sgdG8gaXQgbGF0ZXIgaWYgd2Ugd2FudFxuICBsZXQgZGVmYXVsdElNRSA9IGF3YWl0IGFkYi5kZWZhdWx0SU1FKCk7XG5cbiAgbG9nZ2VyLmRlYnVnKGBVbnNldHRpbmcgcHJldmlvdXMgSU1FICR7ZGVmYXVsdElNRX1gKTtcbiAgY29uc3QgYXBwaXVtSU1FID0gYCR7U0VUVElOR1NfSEVMUEVSX1BLR19JRH0vLlVuaWNvZGVJTUVgO1xuICBsb2dnZXIuZGVidWcoYFNldHRpbmcgSU1FIHRvICcke2FwcGl1bUlNRX0nYCk7XG4gIGF3YWl0IGFkYi5lbmFibGVJTUUoYXBwaXVtSU1FKTtcbiAgYXdhaXQgYWRiLnNldElNRShhcHBpdW1JTUUpO1xuICByZXR1cm4gZGVmYXVsdElNRTtcbn07XG5cbmhlbHBlcnMuc2V0TW9ja0xvY2F0aW9uQXBwID0gYXN5bmMgZnVuY3Rpb24gc2V0TW9ja0xvY2F0aW9uQXBwIChhZGIsIGFwcCkge1xuICB0cnkge1xuICAgIGlmIChhd2FpdCBhZGIuZ2V0QXBpTGV2ZWwoKSA8IDIzKSB7XG4gICAgICBhd2FpdCBhZGIuc2hlbGwoWydzZXR0aW5ncycsICdwdXQnLCAnc2VjdXJlJywgJ21vY2tfbG9jYXRpb24nLCAnMSddKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgYWRiLnNoZWxsKFsnYXBwb3BzJywgJ3NldCcsIGFwcCwgJ2FuZHJvaWQ6bW9ja19sb2NhdGlvbicsICdhbGxvdyddKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci53YXJuKGBVbmFibGUgdG8gc2V0IG1vY2sgbG9jYXRpb24gZm9yIGFwcCAnJHthcHB9JzogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuaGVscGVycy5pbnN0YWxsSGVscGVyQXBwID0gYXN5bmMgZnVuY3Rpb24gaW5zdGFsbEhlbHBlckFwcCAoYWRiLCBhcGtQYXRoLCBwYWNrYWdlSWQpIHtcbiAgLy8gU29tZXRpbWVzIGFkYiBwdXNoIG9yIGFkYiBpbnN0YWwgdGFrZSBtb3JlIHRpbWUgdGhhbiBleHBlY3RlZCB0byBpbnN0YWxsIGFuIGFwcFxuICAvLyBlLmcuIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vaW8uYXBwaXVtLnNldHRpbmdzL2lzc3Vlcy80MCNpc3N1ZWNvbW1lbnQtNDc2NTkzMTc0XG4gIGF3YWl0IHJldHJ5KDIsIGFzeW5jIGZ1bmN0aW9uIHJldHJ5SW5zdGFsbEhlbHBlckFwcCAoKSB7XG4gICAgYXdhaXQgYWRiLmluc3RhbGxPclVwZ3JhZGUoYXBrUGF0aCwgcGFja2FnZUlkLCB7Z3JhbnRQZXJtaXNzaW9uczogdHJ1ZX0pO1xuICB9KTtcbn07XG5cbi8qKlxuICogUHVzaGVzIGFuZCBpbnN0YWxscyBpby5hcHBpdW0uc2V0dGluZ3MgYXBwLlxuICogVGhyb3dzIGFuIGVycm9yIGlmIHRoZSBzZXR0aW5nIGFwcCBpcyByZXF1aXJlZFxuICpcbiAqIEBwYXJhbSB7QWRifSBhZGIgLSBUaGUgYWRiIG1vZHVsZSBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdGhyb3dFcnJvcltmYWxzZV0gLSBXaGV0aGVyIHRocm93IGVycm9yIG9yIG5vdFxuICogQHRocm93cyB7RXJyb3J9IElmIHRocm93RXJyb3IgaXMgdHJ1ZSBhbmQgc29tZXRoaW5nIGhhcHBlbnMgaW4gaW5zdGFsbGF0aW9uIHN0ZXBcbiAqL1xuaGVscGVycy5wdXNoU2V0dGluZ3NBcHAgPSBhc3luYyBmdW5jdGlvbiBwdXNoU2V0dGluZ3NBcHAgKGFkYiwgdGhyb3dFcnJvciA9IGZhbHNlKSB7XG4gIGxvZ2dlci5kZWJ1ZygnUHVzaGluZyBzZXR0aW5ncyBhcGsgdG8gZGV2aWNlLi4uJyk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBoZWxwZXJzLmluc3RhbGxIZWxwZXJBcHAoYWRiLCBzZXR0aW5nc0Fwa1BhdGgsIFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQsIHRocm93RXJyb3IpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAodGhyb3dFcnJvcikge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cblxuICAgIGxvZ2dlci53YXJuKGBJZ25vcmVkIGVycm9yIHdoaWxlIGluc3RhbGxpbmcgJyR7c2V0dGluZ3NBcGtQYXRofSc6IGAgK1xuICAgICAgICAgICAgICAgIGAnJHtlcnIubWVzc2FnZX0nLiBGZWF0dXJlcyB0aGF0IHJlbHkgb24gdGhpcyBoZWxwZXIgYCArXG4gICAgICAgICAgICAgICAgJ3JlcXVpcmUgdGhlIGFwayBzdWNoIGFzIHRvZ2dsZSBXaUZpIGFuZCBnZXR0aW5nIGxvY2F0aW9uICcgK1xuICAgICAgICAgICAgICAgICd3aWxsIHJhaXNlIGFuIGVycm9yIGlmIHlvdSB0cnkgdG8gdXNlIHRoZW0uJyk7XG4gIH1cblxuICAvLyBSZWluc3RhbGwgd2lsbCBzdG9wIHRoZSBzZXR0aW5ncyBoZWxwZXIgcHJvY2VzcyBhbnl3YXksIHNvXG4gIC8vIHRoZXJlIGlzIG5vIG5lZWQgdG8gY29udGludWUgaWYgdGhlIGFwcGxpY2F0aW9uIGlzIHN0aWxsIHJ1bm5pbmdcbiAgaWYgKGF3YWl0IGFkYi5wcm9jZXNzRXhpc3RzKFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQpKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGAke1NFVFRJTkdTX0hFTFBFUl9QS0dfSUR9IGlzIGFscmVhZHkgcnVubmluZy4gYCArXG4gICAgICBgVGhlcmUgaXMgbm8gbmVlZCB0byByZXNldCBpdHMgcGVybWlzc2lvbnMuYCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGF3YWl0IGFkYi5nZXRBcGlMZXZlbCgpIDw9IDIzKSB7IC8vIEFuZHJvaWQgNi0gZGV2aWNlcyBzaG91bGQgaGF2ZSBncmFudGVkIHBlcm1pc3Npb25zXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vcHVsbC8xMTY0MCNpc3N1ZWNvbW1lbnQtNDM4MjYwNDc3XG4gICAgY29uc3QgcGVybXMgPSBbJ1NFVF9BTklNQVRJT05fU0NBTEUnLCAnQ0hBTkdFX0NPTkZJR1VSQVRJT04nLCAnQUNDRVNTX0ZJTkVfTE9DQVRJT04nXTtcbiAgICBsb2dnZXIuaW5mbyhgR3JhbnRpbmcgcGVybWlzc2lvbnMgJHtwZXJtc30gdG8gJyR7U0VUVElOR1NfSEVMUEVSX1BLR19JRH0nYCk7XG4gICAgYXdhaXQgYWRiLmdyYW50UGVybWlzc2lvbnMoU0VUVElOR1NfSEVMUEVSX1BLR19JRCwgcGVybXMubWFwKCh4KSA9PiBgYW5kcm9pZC5wZXJtaXNzaW9uLiR7eH1gKSk7XG4gIH1cblxuICAvLyBsYXVuY2ggaW8uYXBwaXVtLnNldHRpbmdzIGFwcCBkdWUgdG8gc2V0dGluZ3MgZmFpbGluZyB0byBiZSBzZXRcbiAgLy8gaWYgdGhlIGFwcCBpcyBub3QgbGF1bmNoZWQgcHJpb3IgdG8gc3RhcnQgdGhlIHNlc3Npb24gb24gYW5kcm9pZCA3K1xuICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vaXNzdWVzLzg5NTdcbiAgdHJ5IHtcbiAgICBhd2FpdCBhZGIucmVxdWlyZVJ1bm5pbmdTZXR0aW5nc0FwcCgpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIuZGVidWcoZXJyKTtcbiAgICBpZiAodGhyb3dFcnJvcikge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBFeHRyYWN0cyBzdHJpbmcueG1sIGFuZCBjb252ZXJ0cyBpdCB0byBzdHJpbmcuanNvbiBhbmQgcHVzaGVzXG4gKiBpdCB0byAvZGF0YS9sb2NhbC90bXAvc3RyaW5nLmpzb24gb24gZm9yIHVzZSBvZiBib290c3RyYXBcbiAqIElmIGFwcCBpcyBub3QgcHJlc2VudCB0byBleHRyYWN0IHN0cmluZy54bWwgaXQgZGVsZXRlcyByZW1vdGUgc3RyaW5ncy5qc29uXG4gKiBJZiBhcHAgZG9lcyBub3QgaGF2ZSBzdHJpbmdzLnhtbCB3ZSBwdXNoIGFuIGVtcHR5IGpzb24gb2JqZWN0IHRvIHJlbW90ZVxuICpcbiAqIEBwYXJhbSB7P3N0cmluZ30gbGFuZ3VhZ2UgLSBMYW5ndWFnZSBhYmJyZXZpYXRpb24sIGZvciBleGFtcGxlICdmcicuIFRoZSBkZWZhdWx0IGxhbmd1YWdlXG4gKiBpcyB1c2VkIGlmIHRoaXMgYXJndW1lbnQgaXMgbm90IGRlZmluZWQuXG4gKiBAcGFyYW0ge09iamVjdH0gYWRiIC0gVGhlIGFkYiBtb2R1bGUgaW5zdGFuY2UuXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIERyaXZlciBvcHRpb25zIGRpY3Rpb25hcnkuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZGljdGlvbmFyeSwgd2hlcmUgc3RyaW5nIHJlc291cmNlIGlkZW50aWZpZXJzIGFyZSBrZXlzXG4gKiBhbG9uZyB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmcgdmFsdWVzIGZvciB0aGUgZ2l2ZW4gbGFuZ3VhZ2Ugb3IgYW4gZW1wdHkgb2JqZWN0XG4gKiBpZiBubyBtYXRjaGluZyByZXNvdXJjZXMgd2VyZSBleHRyYWN0ZWQuXG4gKi9cbmhlbHBlcnMucHVzaFN0cmluZ3MgPSBhc3luYyBmdW5jdGlvbiBwdXNoU3RyaW5ncyAobGFuZ3VhZ2UsIGFkYiwgb3B0cykge1xuICBjb25zdCByZW1vdGVEaXIgPSAnL2RhdGEvbG9jYWwvdG1wJztcbiAgY29uc3Qgc3RyaW5nc0pzb24gPSAnc3RyaW5ncy5qc29uJztcbiAgY29uc3QgcmVtb3RlRmlsZSA9IHBhdGgucG9zaXgucmVzb2x2ZShyZW1vdGVEaXIsIHN0cmluZ3NKc29uKTtcblxuICAvLyBjbGVhbiB1cCByZW1vdGUgc3RyaW5nLmpzb24gaWYgcHJlc2VudFxuICBhd2FpdCBhZGIucmltcmFmKHJlbW90ZUZpbGUpO1xuXG4gIGxldCBhcHA7XG4gIHRyeSB7XG4gICAgYXBwID0gb3B0cy5hcHAgfHwgYXdhaXQgYWRiLnB1bGxBcGsob3B0cy5hcHBQYWNrYWdlLCBvcHRzLnRtcERpcik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci5pbmZvKGBGYWlsZWQgdG8gcHVsbCBhbiBhcGsgZnJvbSAnJHtvcHRzLmFwcFBhY2thZ2V9JyB0byAnJHtvcHRzLnRtcERpcn0nLiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxuXG4gIGlmIChfLmlzRW1wdHkob3B0cy5hcHBQYWNrYWdlKSB8fCAhKGF3YWl0IGZzLmV4aXN0cyhhcHApKSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgTm8gYXBwIG9yIHBhY2thZ2Ugc3BlY2lmaWVkLiBSZXR1cm5pbmcgZW1wdHkgc3RyaW5nc2ApO1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IHN0cmluZ3NUbXBEaXIgPSBwYXRoLnJlc29sdmUob3B0cy50bXBEaXIsIG9wdHMuYXBwUGFja2FnZSk7XG4gIHRyeSB7XG4gICAgbG9nZ2VyLmRlYnVnKCdFeHRyYWN0aW5nIHN0cmluZ3MgZnJvbSBhcGsnLCBhcHAsIGxhbmd1YWdlLCBzdHJpbmdzVG1wRGlyKTtcbiAgICBjb25zdCB7YXBrU3RyaW5ncywgbG9jYWxQYXRofSA9IGF3YWl0IGFkYi5leHRyYWN0U3RyaW5nc0Zyb21BcGsoYXBwLCBsYW5ndWFnZSwgc3RyaW5nc1RtcERpcik7XG4gICAgYXdhaXQgYWRiLnB1c2gobG9jYWxQYXRoLCByZW1vdGVEaXIpO1xuICAgIHJldHVybiBhcGtTdHJpbmdzO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIud2FybihgQ291bGQgbm90IGdldCBzdHJpbmdzLCBjb250aW51aW5nIGFueXdheS4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgYXdhaXQgYWRiLnNoZWxsKCdlY2hvJywgW2Ane30nID4gJHtyZW1vdGVGaWxlfWBdKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBmcy5yaW1yYWYoc3RyaW5nc1RtcERpcik7XG4gIH1cbiAgcmV0dXJuIHt9O1xufTtcblxuaGVscGVycy51bmxvY2tXaXRoVUlBdXRvbWF0aW9uID0gYXN5bmMgZnVuY3Rpb24gdW5sb2NrV2l0aFVJQXV0b21hdGlvbiAoZHJpdmVyLCBhZGIsIHVubG9ja0NhcGFiaWxpdGllcykge1xuICBsZXQgdW5sb2NrVHlwZSA9IHVubG9ja0NhcGFiaWxpdGllcy51bmxvY2tUeXBlO1xuICBpZiAoIXVubG9ja2VyLmlzVmFsaWRVbmxvY2tUeXBlKHVubG9ja1R5cGUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHVubG9jayB0eXBlICR7dW5sb2NrVHlwZX1gKTtcbiAgfVxuICBsZXQgdW5sb2NrS2V5ID0gdW5sb2NrQ2FwYWJpbGl0aWVzLnVubG9ja0tleTtcbiAgaWYgKCF1bmxvY2tlci5pc1ZhbGlkS2V5KHVubG9ja1R5cGUsIHVubG9ja0tleSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgdW5sb2NrS2V5ICR7dW5sb2NrS2V5fSBjYXBhYmlsaXR5IGZvciB1bmxvY2tUeXBlICR7dW5sb2NrVHlwZX1gKTtcbiAgfVxuICBjb25zdCB1bmxvY2tNZXRob2QgPSB7XG4gICAgW1BJTl9VTkxPQ0tdOiB1bmxvY2tlci5waW5VbmxvY2ssXG4gICAgW1BJTl9VTkxPQ0tfS0VZX0VWRU5UXTogdW5sb2NrZXIucGluVW5sb2NrV2l0aEtleUV2ZW50LFxuICAgIFtQQVNTV09SRF9VTkxPQ0tdOiB1bmxvY2tlci5wYXNzd29yZFVubG9jayxcbiAgICBbUEFUVEVSTl9VTkxPQ0tdOiB1bmxvY2tlci5wYXR0ZXJuVW5sb2NrLFxuICAgIFtGSU5HRVJQUklOVF9VTkxPQ0tdOiB1bmxvY2tlci5maW5nZXJwcmludFVubG9ja1xuICB9W3VubG9ja1R5cGVdO1xuICBhd2FpdCB1bmxvY2tNZXRob2QoYWRiLCBkcml2ZXIsIHVubG9ja0NhcGFiaWxpdGllcyk7XG59O1xuXG5oZWxwZXJzLnVubG9ja1dpdGhIZWxwZXJBcHAgPSBhc3luYyBmdW5jdGlvbiB1bmxvY2tXaXRoSGVscGVyQXBwIChhZGIpIHtcbiAgbG9nZ2VyLmluZm8oJ1VubG9ja2luZyBzY3JlZW4nKTtcblxuICAvLyBVbmxvY2sgc3VjY2VlZCB3aXRoIGEgY291cGxlIG9mIHJldHJpZXMuXG4gIGxldCBmaXJzdFJ1biA9IHRydWU7XG4gIGF3YWl0IHJldHJ5KDMsIGFzeW5jIGZ1bmN0aW9uIGxhdW5jaEhlbHBlciAoKSB7XG4gICAgLy8gVG8gcmVkdWNlIGEgdGltZSB0byBjYWxsIGFkYi5pc1NjcmVlbkxvY2tlZCgpIHNpbmNlIGBhZGIgc2hlbGwgZHVtcHN5cyB3aW5kb3dgIGlzIGVhc3kgdG8gaGFuZyBhZGIgY29tbWFuZHNcbiAgICBpZiAoZmlyc3RSdW4pIHtcbiAgICAgIGZpcnN0UnVuID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghKGF3YWl0IGFkYi5pc1NjcmVlbkxvY2tlZCgpKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIud2FybihgRXJyb3IgaW4gaXNTY3JlZW5Mb2NrZWQ6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgICBsb2dnZXIud2FybignXCJhZGIgc2hlbGwgZHVtcHN5cyB3aW5kb3dcIiBjb21tYW5kIGhhcyB0aW1lZCBvdXQuJyk7XG4gICAgICAgIGxvZ2dlci53YXJuKCdUaGUgcmVhc29uIG9mIHRoaXMgdGltZW91dCBpcyB0aGUgZGVsYXllZCBhZGIgcmVzcG9uc2UuIFJlc2V0dGluZyBhZGIgc2VydmVyIGNhbiBpbXByb3ZlIGl0LicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxvZ2dlci5pbmZvKGBMYXVuY2hpbmcgJHtTRVRUSU5HU19IRUxQRVJfVU5MT0NLX0FDVElWSVRZfWApO1xuICAgIGF3YWl0IGFkYi5zaGVsbChbXG4gICAgICAnYW0nLCAnc3RhcnQnLFxuICAgICAgJy1uJywgYCR7U0VUVElOR1NfSEVMUEVSX1BLR19JRH0vJHtTRVRUSU5HU19IRUxQRVJfVU5MT0NLX0FDVElWSVRZfWAsXG4gICAgICAnLWMnLCAnYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVInLFxuICAgICAgJy1hJywgJ2FuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOJyxcbiAgICAgICctZicsICcweDEwMjAwMDAwJyxcbiAgICBdKTtcbiAgICBhd2FpdCBCLmRlbGF5KDEwMDApO1xuICB9KTtcbn07XG5cbmhlbHBlcnMudW5sb2NrID0gYXN5bmMgZnVuY3Rpb24gdW5sb2NrIChkcml2ZXIsIGFkYiwgY2FwYWJpbGl0aWVzKSB7XG4gIGlmICghKGF3YWl0IGFkYi5pc1NjcmVlbkxvY2tlZCgpKSkge1xuICAgIGxvZ2dlci5pbmZvKCdTY3JlZW4gYWxyZWFkeSB1bmxvY2tlZCwgZG9pbmcgbm90aGluZycpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxvZ2dlci5kZWJ1ZygnU2NyZWVuIGlzIGxvY2tlZCwgdHJ5aW5nIHRvIHVubG9jaycpO1xuICBpZiAoXy5pc1VuZGVmaW5lZChjYXBhYmlsaXRpZXMudW5sb2NrVHlwZSkpIHtcbiAgICBsb2dnZXIud2FybignVXNpbmcgYXBwIHVubG9jaywgdGhpcyBpcyBnb2luZyB0byBiZSBkZXByZWNhdGVkIScpO1xuICAgIGF3YWl0IGhlbHBlcnMudW5sb2NrV2l0aEhlbHBlckFwcChhZGIpO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IGhlbHBlcnMudW5sb2NrV2l0aFVJQXV0b21hdGlvbihkcml2ZXIsIGFkYiwge3VubG9ja1R5cGU6IGNhcGFiaWxpdGllcy51bmxvY2tUeXBlLCB1bmxvY2tLZXk6IGNhcGFiaWxpdGllcy51bmxvY2tLZXl9KTtcbiAgICBhd2FpdCBoZWxwZXJzLnZlcmlmeVVubG9jayhhZGIsIGNhcGFiaWxpdGllcy51bmxvY2tTdWNjZXNzVGltZW91dCk7XG4gIH1cbn07XG5cbmhlbHBlcnMudmVyaWZ5VW5sb2NrID0gYXN5bmMgZnVuY3Rpb24gdmVyaWZ5VW5sb2NrIChhZGIsIHVubG9ja1N1Y2Nlc3NUaW1lb3V0KSB7XG4gIGxldCBzdWNjZXNzVGltZW91dCA9IHVubG9ja1N1Y2Nlc3NUaW1lb3V0IHx8IDIwMDA7XG4gIGF3YWl0IHJldHJ5SW50ZXJ2YWwoc3VjY2Vzc1RpbWVvdXQgLyAxMDAwLCBzdWNjZXNzVGltZW91dCwgYXN5bmMgKCkgPT4ge1xuICAgIGlmIChhd2FpdCBhZGIuaXNTY3JlZW5Mb2NrZWQoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTY3JlZW4gZGlkIG5vdCB1bmxvY2sgc3VjY2Vzc2Z1bGx5LCByZXRyeWluZycpO1xuICAgIH1cbiAgICBsb2dnZXIuZGVidWcoJ1NjcmVlbiB1bmxvY2tlZCBzdWNjZXNzZnVsbHknKTtcbiAgfSk7XG59O1xuXG5oZWxwZXJzLmluaXREZXZpY2UgPSBhc3luYyBmdW5jdGlvbiBpbml0RGV2aWNlIChhZGIsIG9wdHMpIHtcbiAgY29uc3Qge1xuICAgIHNraXBEZXZpY2VJbml0aWFsaXphdGlvbixcbiAgICBsb2NhbGUsXG4gICAgbGFuZ3VhZ2UsXG4gICAgbG9jYWxlU2NyaXB0LFxuICAgIHVuaWNvZGVLZXlib2FyZCxcbiAgICBkaXNhYmxlV2luZG93QW5pbWF0aW9uLFxuICAgIHNraXBVbmxvY2ssXG4gICAgbW9ja0xvY2F0aW9uQXBwLFxuICAgIHNraXBMb2djYXRDYXB0dXJlLFxuICAgIGxvZ2NhdEZvcm1hdCxcbiAgICBsb2djYXRGaWx0ZXJTcGVjcyxcbiAgfSA9IG9wdHM7XG5cbiAgaWYgKHNraXBEZXZpY2VJbml0aWFsaXphdGlvbikge1xuICAgIGxvZ2dlci5pbmZvKGAnc2tpcERldmljZUluaXRpYWxpemF0aW9uJyBpcyBzZXQuIFNraXBwaW5nIGRldmljZSBpbml0aWFsaXphdGlvbi5gKTtcbiAgfSBlbHNlIHtcbiAgICBhd2FpdCBhZGIud2FpdEZvckRldmljZSgpO1xuICAgIC8vIHB1c2hTZXR0aW5nc0FwcCByZXF1aXJlZCBiZWZvcmUgY2FsbGluZyBlbnN1cmVEZXZpY2VMb2NhbGUgZm9yIEFQSSBMZXZlbCAyNCtcblxuICAgIC8vIFNvbWUgZmVhdHVyZSBzdWNoIGFzIGxvY2F0aW9uL3dpZmkgYXJlIG5vdCBuZWNlc3NhcnkgZm9yIGFsbCB1c2VycyxcbiAgICAvLyBidXQgdGhleSByZXF1aXJlIHRoZSBzZXR0aW5ncyBhcHAuIFNvLCB0cnkgdG8gY29uZmlndXJlIGl0IHdoaWxlIEFwcGl1bVxuICAgIC8vIGRvZXMgbm90IHRocm93IGVycm9yIGV2ZW4gaWYgdGhleSBmYWlsLlxuICAgIGNvbnN0IHNob3VsZFRocm93RXJyb3IgPSBsYW5ndWFnZVxuICAgICAgfHwgbG9jYWxlXG4gICAgICB8fCBsb2NhbGVTY3JpcHRcbiAgICAgIHx8IHVuaWNvZGVLZXlib2FyZFxuICAgICAgfHwgZGlzYWJsZVdpbmRvd0FuaW1hdGlvblxuICAgICAgfHwgIXNraXBVbmxvY2s7XG4gICAgYXdhaXQgaGVscGVycy5wdXNoU2V0dGluZ3NBcHAoYWRiLCBzaG91bGRUaHJvd0Vycm9yKTtcbiAgfVxuXG4gIGlmICghaGVscGVycy5pc0VtdWxhdG9yKGFkYiwgb3B0cykgJiYgKG1vY2tMb2NhdGlvbkFwcCB8fCBfLmlzVW5kZWZpbmVkKG1vY2tMb2NhdGlvbkFwcCkpKSB7XG4gICAgYXdhaXQgaGVscGVycy5zZXRNb2NrTG9jYXRpb25BcHAoYWRiLCBtb2NrTG9jYXRpb25BcHAgfHwgU0VUVElOR1NfSEVMUEVSX1BLR19JRCk7XG4gIH1cblxuICBpZiAobGFuZ3VhZ2UgfHwgbG9jYWxlKSB7XG4gICAgYXdhaXQgaGVscGVycy5lbnN1cmVEZXZpY2VMb2NhbGUoYWRiLCBsYW5ndWFnZSwgbG9jYWxlLCBsb2NhbGVTY3JpcHQpO1xuICB9XG5cbiAgaWYgKHNraXBMb2djYXRDYXB0dXJlKSB7XG4gICAgbG9nZ2VyLmluZm8oYCdza2lwTG9nY2F0Q2FwdHVyZScgaXMgc2V0LiBTa2lwcGluZyBzdGFydGluZyBsb2djYXQgY2FwdHVyZS5gKTtcbiAgfSBlbHNlIHtcbiAgICBhd2FpdCBhZGIuc3RhcnRMb2djYXQoe1xuICAgICAgZm9ybWF0OiBsb2djYXRGb3JtYXQsXG4gICAgICBmaWx0ZXJTcGVjczogbG9nY2F0RmlsdGVyU3BlY3MsXG4gICAgfSk7XG4gIH1cblxuICBpZiAodW5pY29kZUtleWJvYXJkKSB7XG4gICAgcmV0dXJuIGF3YWl0IGhlbHBlcnMuaW5pdFVuaWNvZGVLZXlib2FyZChhZGIpO1xuICB9XG59O1xuXG5oZWxwZXJzLnJlbW92ZU51bGxQcm9wZXJ0aWVzID0gZnVuY3Rpb24gcmVtb3ZlTnVsbFByb3BlcnRpZXMgKG9iaikge1xuICBmb3IgKGxldCBrZXkgb2YgXy5rZXlzKG9iaikpIHtcbiAgICBpZiAoXy5pc051bGwob2JqW2tleV0pIHx8IF8uaXNVbmRlZmluZWQob2JqW2tleV0pKSB7XG4gICAgICBkZWxldGUgb2JqW2tleV07XG4gICAgfVxuICB9XG59O1xuXG5oZWxwZXJzLnRydW5jYXRlRGVjaW1hbHMgPSBmdW5jdGlvbiB0cnVuY2F0ZURlY2ltYWxzIChudW1iZXIsIGRpZ2l0cykge1xuICBsZXQgbXVsdGlwbGllciA9IE1hdGgucG93KDEwLCBkaWdpdHMpLFxuICAgICAgYWRqdXN0ZWROdW0gPSBudW1iZXIgKiBtdWx0aXBsaWVyLFxuICAgICAgdHJ1bmNhdGVkTnVtID0gTWF0aFthZGp1c3RlZE51bSA8IDAgPyAnY2VpbCcgOiAnZmxvb3InXShhZGp1c3RlZE51bSk7XG5cbiAgcmV0dXJuIHRydW5jYXRlZE51bSAvIG11bHRpcGxpZXI7XG59O1xuXG5oZWxwZXJzLmlzQ2hyb21lQnJvd3NlciA9IGZ1bmN0aW9uIGlzQ2hyb21lQnJvd3NlciAoYnJvd3Nlcikge1xuICByZXR1cm4gXy5pbmNsdWRlcyhPYmplY3Qua2V5cyhDSFJPTUVfQlJPV1NFUl9QQUNLQUdFX0FDVElWSVRZKSwgKGJyb3dzZXIgfHwgJycpLnRvTG93ZXJDYXNlKCkpO1xufTtcblxuaGVscGVycy5nZXRDaHJvbWVQa2cgPSBmdW5jdGlvbiBnZXRDaHJvbWVQa2cgKGJyb3dzZXIpIHtcbiAgcmV0dXJuIENIUk9NRV9CUk9XU0VSX1BBQ0tBR0VfQUNUSVZJVFlbYnJvd3Nlci50b0xvd2VyQ2FzZSgpXSB8fCBDSFJPTUVfQlJPV1NFUl9QQUNLQUdFX0FDVElWSVRZLmRlZmF1bHQ7XG59O1xuXG5oZWxwZXJzLnJlbW92ZUFsbFNlc3Npb25XZWJTb2NrZXRIYW5kbGVycyA9IGFzeW5jIGZ1bmN0aW9uIHJlbW92ZUFsbFNlc3Npb25XZWJTb2NrZXRIYW5kbGVycyAoc2VydmVyLCBzZXNzaW9uSWQpIHtcbiAgaWYgKCFzZXJ2ZXIgfHwgIV8uaXNGdW5jdGlvbihzZXJ2ZXIuZ2V0V2ViU29ja2V0SGFuZGxlcnMpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgYWN0aXZlSGFuZGxlcnMgPSBhd2FpdCBzZXJ2ZXIuZ2V0V2ViU29ja2V0SGFuZGxlcnMoc2Vzc2lvbklkKTtcbiAgZm9yIChjb25zdCBwYXRobmFtZSBvZiBfLmtleXMoYWN0aXZlSGFuZGxlcnMpKSB7XG4gICAgYXdhaXQgc2VydmVyLnJlbW92ZVdlYlNvY2tldEhhbmRsZXIocGF0aG5hbWUpO1xuICB9XG59O1xuXG4vKipcbiAqIFRha2VzIGEgZGVzaXJlZCBjYXBhYmlsaXR5IGFuZCB0cmllcyB0byBKU09OLnBhcnNlIGl0IGFzIGFuIGFycmF5LFxuICogYW5kIGVpdGhlciByZXR1cm5zIHRoZSBwYXJzZWQgYXJyYXkgb3IgYSBzaW5nbGV0b24gYXJyYXkuXG4gKlxuICogQHBhcmFtIHthbnl9IGNhcCBBIGRlc2lyZWQgY2FwYWJpbGl0eVxuICovXG5oZWxwZXJzLnBhcnNlQXJyYXkgPSBmdW5jdGlvbiBwYXJzZUFycmF5IChjYXApIHtcbiAgbGV0IHBhcnNlZENhcHM7XG4gIHRyeSB7XG4gICAgcGFyc2VkQ2FwcyA9IEpTT04ucGFyc2UoY2FwKTtcbiAgfSBjYXRjaCAoaWduKSB7IH1cblxuICBpZiAoXy5pc0FycmF5KHBhcnNlZENhcHMpKSB7XG4gICAgcmV0dXJuIHBhcnNlZENhcHM7XG4gIH0gZWxzZSBpZiAoXy5pc1N0cmluZyhjYXApKSB7XG4gICAgcmV0dXJuIFtjYXBdO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBtdXN0IHByb3ZpZGUgYSBzdHJpbmcgb3IgSlNPTiBBcnJheTsgcmVjZWl2ZWQgJHtjYXB9YCk7XG59O1xuXG4vKipcbiAqIFZhbGlkYXRlIGRlc2lyZWQgY2FwYWJpbGl0aWVzLiBSZXR1cm5zIHRydWUgaWYgY2FwYWJpbGl0eSBpcyB2YWxpZFxuICpcbiAqIEBwYXJhbSB7Kn0gY2FwIEEgZGVzaXJlZCBjYXBhYmlsaXR5XG4gKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgdGhlIGNhcGFiaWxpdHkgaXMgdmFsaWRcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgY2FwcyBoYXMgaW52YWxpZCBjYXBhYmlsaXR5XG4gKi9cbmhlbHBlcnMudmFsaWRhdGVEZXNpcmVkQ2FwcyA9IGZ1bmN0aW9uIHZhbGlkYXRlRGVzaXJlZENhcHMgKGNhcHMpIHtcbiAgaWYgKGNhcHMuYnJvd3Nlck5hbWUpIHtcbiAgICBpZiAoY2Fwcy5hcHApIHtcbiAgICAgIC8vIHdhcm4gaWYgdGhlIGNhcGFiaWxpdGllcyBoYXZlIGJvdGggYGFwcGAgYW5kIGBicm93c2VyLCBhbHRob3VnaCB0aGlzIGlzIGNvbW1vbiB3aXRoIHNlbGVuaXVtIGdyaWRcbiAgICAgIGxvZ2dlci53YXJuKGBUaGUgZGVzaXJlZCBjYXBhYmlsaXRpZXMgc2hvdWxkIGdlbmVyYWxseSBub3QgaW5jbHVkZSBib3RoIGFuICdhcHAnIGFuZCBhICdicm93c2VyTmFtZSdgKTtcbiAgICB9XG4gICAgaWYgKGNhcHMuYXBwUGFja2FnZSkge1xuICAgICAgbG9nZ2VyLmVycm9yQW5kVGhyb3coYFRoZSBkZXNpcmVkIHNob3VsZCBub3QgaW5jbHVkZSBib3RoIG9mIGFuICdhcHBQYWNrYWdlJyBhbmQgYSAnYnJvd3Nlck5hbWUnYCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGNhcHMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcykge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnBhcnNlQXJyYXkoY2Fwcy51bmluc3RhbGxPdGhlclBhY2thZ2VzKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuZXJyb3JBbmRUaHJvdyhgQ291bGQgbm90IHBhcnNlIFwidW5pbnN0YWxsT3RoZXJQYWNrYWdlc1wiIGNhcGFiaWxpdHk6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBBZGp1c3QgdGhlIGNhcGFiaWxpdGllcyBmb3IgYSBicm93c2VyIHNlc3Npb25cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY2FwcyAtIEN1cnJlbnQgY2FwYWJpbGl0aWVzIG9iamVjdFxuICogISEhIFRoZSBvYmplY3QgaXMgbXV0YXRlZCBieSB0aGlzIG1ldGhvZCBjYWxsICEhIVxuICogQHJldHVybnMge09iamVjdH0gVGhlIHNhbWUgcG9zc2libHkgbXV0YXRlZCBgb3B0c2AgaW5zdGFuY2UuXG4gKiBObyBtdXRhdGlvbiBpcyBoYXBwZW5pbmcgaXMgdGhlIGN1cnJlbnQgc2Vzc2lvbiBpZlxuICogYXBwUGFja2FnZS9hcHBBY3Rpdml0eSBjYXBzIGhhdmUgYWxyZWFkeSBiZWVuIHByb3ZpZGVkLlxuICovXG5oZWxwZXJzLmFkanVzdEJyb3dzZXJTZXNzaW9uQ2FwcyA9IGZ1bmN0aW9uIGFkanVzdEJyb3dzZXJTZXNzaW9uQ2FwcyAoY2FwcyA9IHt9KSB7XG4gIGNvbnN0IHsgYnJvd3Nlck5hbWUgfSA9IGNhcHM7XG4gIGxvZ2dlci5pbmZvKGBUaGUgY3VycmVudCBzZXNzaW9uIGlzIGNvbnNpZGVyZWQgYnJvd3Nlci1iYXNlZGApO1xuICBsb2dnZXIuaW5mbyhgU3VwcG9ydGVkIGJyb3dzZXIgbmFtZXM6ICR7SlNPTi5zdHJpbmdpZnkoXy5rZXlzKENIUk9NRV9CUk9XU0VSX1BBQ0tBR0VfQUNUSVZJVFkpKX1gKTtcbiAgaWYgKGNhcHMuYXBwUGFja2FnZSB8fCBjYXBzLmFwcEFjdGl2aXR5KSB7XG4gICAgbG9nZ2VyLmluZm8oYE5vdCBvdmVycmlkaW5nIGFwcFBhY2thZ2UvYXBwQWN0aXZpdHkgY2FwYWJpbGl0eSB2YWx1ZXMgZm9yICcke2Jyb3dzZXJOYW1lfScgYCArXG4gICAgICAnYmVjYXVzZSBzb21lIG9mIHRoZW0gaGF2ZSBiZWVuIGFscmVhZHkgcHJvdmlkZWQnKTtcbiAgICByZXR1cm4gY2FwcztcbiAgfVxuXG4gIGNvbnN0IHtwa2csIGFjdGl2aXR5fSA9IHRoaXMuZ2V0Q2hyb21lUGtnKGJyb3dzZXJOYW1lKTtcbiAgY2Fwcy5hcHBQYWNrYWdlID0gcGtnO1xuICBjYXBzLmFwcEFjdGl2aXR5ID0gYWN0aXZpdHk7XG4gIGxvZ2dlci5pbmZvKGBhcHBQYWNrYWdlL2FwcEFjdGl2aXR5IGNhcGFiaWxpdGllcyBoYXZlIGJlZW4gYXV0b21hdGljYWxseSBzZXQgdG8gJHtwa2d9LyR7YWN0aXZpdHl9IGAgK1xuICAgIGBmb3IgJyR7YnJvd3Nlck5hbWV9J2ApO1xuICBsb2dnZXIuaW5mbyhgQ29uc2lkZXIgY2hhbmdpbmcgdGhlIGJyb3dzZXJOYW1lIHRvIHRoZSBvbmUgZnJvbSB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgYnJvd3NlciBuYW1lcyBgICtcbiAgICBgb3IgcHJvdmlkZSBjdXN0b20gYXBwUGFja2FnZS9hcHBBY3Rpdml0eSBjYXBhYmlsaXR5IHZhbHVlcyBpZiB0aGUgYXV0b21hdGljYWxseSBhc3NpZ25lZCBvbmVzIGRvIGAgK1xuICAgIGBub3QgbWFrZSBzZW5zZWApO1xuICByZXR1cm4gY2Fwcztcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGN1cnJlbnQgZGV2aWNlIHVuZGVyIHRlc3QgaXMgYW4gZW11bGF0b3JcbiAqXG4gKiBAcGFyYW0ge0FEQn0gYWRiIC0gYXBwaXVtLWFkYiBpbnN0YW5jZVxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBkcml2ZXIgb3B0aW9ucyBtYXBwaW5nXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBkZXZpY2UgaXMgYW4gQW5kcm9pZCBlbXVsYXRvclxuICovXG5oZWxwZXJzLmlzRW11bGF0b3IgPSBmdW5jdGlvbiBpc0VtdWxhdG9yIChhZGIsIG9wdHMpIHtcbiAgY29uc3QgcG9zc2libGVOYW1lcyA9IFtvcHRzLnVkaWQsIGFkYj8uY3VyRGV2aWNlSWRdO1xuICByZXR1cm4gISFvcHRzLmF2ZCB8fCBwb3NzaWJsZU5hbWVzLnNvbWUoKHgpID0+IEVNVUxBVE9SX1BBVFRFUk4udGVzdCh4KSk7XG59O1xuXG5oZWxwZXJzLmJvb3RzdHJhcCA9IEJvb3RzdHJhcDtcbmhlbHBlcnMudW5sb2NrZXIgPSB1bmxvY2tlcjtcblxuZXhwb3J0IHsgaGVscGVycywgU0VUVElOR1NfSEVMUEVSX1BLR19JRCwgQVBQX1NUQVRFLCBwcmVwYXJlQXZkQXJncywgZW5zdXJlTmV0d29ya1NwZWVkIH07XG5leHBvcnQgZGVmYXVsdCBoZWxwZXJzO1xuIl0sImZpbGUiOiJsaWIvYW5kcm9pZC1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
|
|
@@ -15,11 +15,9 @@ var _appiumSupport = require("appium-support");
|
|
|
15
15
|
|
|
16
16
|
var _logger = _interopRequireDefault(require("../logger"));
|
|
17
17
|
|
|
18
|
+
var _androidHelpers = require("../android-helpers");
|
|
19
|
+
|
|
18
20
|
const APP_EXTENSIONS = ['.apk', '.apks'];
|
|
19
|
-
const APP_STATE_NOT_INSTALLED = 0;
|
|
20
|
-
const APP_STATE_NOT_RUNNING = 1;
|
|
21
|
-
const APP_STATE_RUNNING_IN_BACKGROUND = 3;
|
|
22
|
-
const APP_STATE_RUNNING_IN_FOREGROUND = 4;
|
|
23
21
|
let commands = {};
|
|
24
22
|
exports.commands = commands;
|
|
25
23
|
|
|
@@ -31,20 +29,20 @@ commands.queryAppState = async function queryAppState(appId) {
|
|
|
31
29
|
_logger.default.info(`Querying the state of '${appId}'`);
|
|
32
30
|
|
|
33
31
|
if (!(await this.adb.isAppInstalled(appId))) {
|
|
34
|
-
return
|
|
32
|
+
return _androidHelpers.APP_STATE.NOT_INSTALLED;
|
|
35
33
|
}
|
|
36
34
|
|
|
37
35
|
if (!(await this.adb.processExists(appId))) {
|
|
38
|
-
return
|
|
36
|
+
return _androidHelpers.APP_STATE.NOT_RUNNING;
|
|
39
37
|
}
|
|
40
38
|
|
|
41
39
|
for (const line of (await this.adb.dumpWindows()).split('\n')) {
|
|
42
40
|
if (line.includes(appId) && (line.includes('mCurrentFocus') || line.includes('mFocusedApp'))) {
|
|
43
|
-
return
|
|
41
|
+
return _androidHelpers.APP_STATE.RUNNING_IN_FOREGROUND;
|
|
44
42
|
}
|
|
45
43
|
}
|
|
46
44
|
|
|
47
|
-
return
|
|
45
|
+
return _androidHelpers.APP_STATE.RUNNING_IN_BACKGROUND;
|
|
48
46
|
};
|
|
49
47
|
|
|
50
48
|
commands.activateApp = async function activateApp(appId) {
|
|
@@ -83,7 +81,7 @@ commands.terminateApp = async function terminateApp(appId, options = {}) {
|
|
|
83
81
|
const timeout = _appiumSupport.util.hasValue(options.timeout) && !isNaN(options.timeout) ? parseInt(options.timeout, 10) : 500;
|
|
84
82
|
|
|
85
83
|
try {
|
|
86
|
-
await (0, _asyncbox.waitForCondition)(async () => (await this.queryAppState(appId)) <=
|
|
84
|
+
await (0, _asyncbox.waitForCondition)(async () => (await this.queryAppState(appId)) <= _androidHelpers.APP_STATE.NOT_RUNNING, {
|
|
87
85
|
waitMs: timeout,
|
|
88
86
|
intervalMs: 100
|
|
89
87
|
});
|
|
@@ -105,4 +103,4 @@ var _default = commands;
|
|
|
105
103
|
exports.default = _default;require('source-map-support').install();
|
|
106
104
|
|
|
107
105
|
|
|
108
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9hcHAtbWFuYWdlbWVudC5qcyJdLCJuYW1lcyI6WyJBUFBfRVhURU5TSU9OUyIsIkFQUF9TVEFURV9OT1RfSU5TVEFMTEVEIiwiQVBQX1NUQVRFX05PVF9SVU5OSU5HIiwiQVBQX1NUQVRFX1JVTk5JTkdfSU5fQkFDS0dST1VORCIsIkFQUF9TVEFURV9SVU5OSU5HX0lOX0ZPUkVHUk9VTkQiLCJjb21tYW5kcyIsImlzQXBwSW5zdGFsbGVkIiwiYXBwSWQiLCJhZGIiLCJxdWVyeUFwcFN0YXRlIiwibG9nIiwiaW5mbyIsInByb2Nlc3NFeGlzdHMiLCJsaW5lIiwiZHVtcFdpbmRvd3MiLCJzcGxpdCIsImluY2x1ZGVzIiwiYWN0aXZhdGVBcHAiLCJjbWQiLCJvdXRwdXQiLCJkZWJ1ZyIsImpvaW4iLCJzaGVsbCIsImUiLCJlcnJvckFuZFRocm93IiwibWVzc2FnZSIsInJlbW92ZUFwcCIsIm9wdGlvbnMiLCJ1bmluc3RhbGxBcGsiLCJ0ZXJtaW5hdGVBcHAiLCJmb3JjZVN0b3AiLCJ0aW1lb3V0IiwidXRpbCIsImhhc1ZhbHVlIiwiaXNOYU4iLCJwYXJzZUludCIsIndhaXRNcyIsImludGVydmFsTXMiLCJpbnN0YWxsQXBwIiwiYXBwUGF0aCIsImxvY2FsUGF0aCIsImhlbHBlcnMiLCJjb25maWd1cmVBcHAiLCJpbnN0YWxsIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLGNBQWMsR0FBRyxDQUFDLE1BQUQsRUFBUyxPQUFULENBQXZCO0FBR0EsTUFBTUMsdUJBQXVCLEdBQUcsQ0FBaEM7QUFDQSxNQUFNQyxxQkFBcUIsR0FBRyxDQUE5QjtBQUNBLE1BQU1DLCtCQUErQixHQUFHLENBQXhDO0FBQ0EsTUFBTUMsK0JBQStCLEdBQUcsQ0FBeEM7QUFFQSxJQUFJQyxRQUFRLEdBQUcsRUFBZjs7O0FBUUFBLFFBQVEsQ0FBQ0MsY0FBVCxHQUEwQixlQUFlQSxjQUFmLENBQStCQyxLQUEvQixF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QUNQLE9BQU8sQ0FBQ0ksT0FBVCxDQUF4QyxHQUE0REksUUFBUSxDQUFDUixPQUFPLENBQUNJLE9BQVQsRUFBa0IsRUFBbEIsQ0FBcEUsR0FBNEYsR0FBNUc7O0FBQ0EsTUFBSTtBQUNGLFVBQU0sZ0NBQWlCLFlBQVksT0FBTSxLQUFLdEIsYUFBTCxDQUFtQkYsS0FBbkIsQ0FBTixLQUFtQ0wscUJBQWhFLEVBQ2lCO0FBQUNrQyxNQUFBQSxNQUFNLEVBQUVMLE9BQVQ7QUFBa0JNLE1BQUFBLFVBQVUsRUFBRTtBQUE5QixLQURqQixDQUFOO0FBRUQsR0FIRCxDQUdFLE9BQU9kLENBQVAsRUFBVTtBQUNWYixvQkFBSWMsYUFBSixDQUFtQixJQUFHakIsS0FBTSw0QkFBMkJ3QixPQUFRLFlBQS9EO0FBQ0Q7O0FBQ0RyQixrQkFBSUMsSUFBSixDQUFVLElBQUdKLEtBQU0sb0NBQW5COztBQUNBLFNBQU8sSUFBUDtBQUNELENBaEJEOztBQTBDQUYsUUFBUSxDQUFDaUMsVUFBVCxHQUFzQixlQUFlQSxVQUFmLENBQTJCQyxPQUEzQixFQUFvQ1osT0FBTyxHQUFHLEVBQTlDLEVBQWtEO0FBQ3RFLFFBQU1hLFNBQVMsR0FBRyxNQUFNLEtBQUtDLE9BQUwsQ0FBYUMsWUFBYixDQUEwQkgsT0FBMUIsRUFBbUN2QyxjQUFuQyxDQUF4QjtBQUNBLFFBQU0sS0FBS1EsR0FBTCxDQUFTbUMsT0FBVCxDQUFpQkgsU0FBakIsRUFBNEJiLE9BQTVCLENBQU47QUFDRCxDQUhEOztlQU9ldEIsUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHdhaXRGb3JDb25kaXRpb24gfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyB1dGlsIH0gZnJvbSAnYXBwaXVtLXN1cHBvcnQnO1xuaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuXG5jb25zdCBBUFBfRVhURU5TSU9OUyA9IFsnLmFwaycsICcuYXBrcyddO1xuLy8gVGhlc2UgY29uc3RhbnRzIGFyZSBpbiBzeW5jIHdpdGhcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpYXBwbGljYXRpb25zdGF0ZS94Y3VpYXBwbGljYXRpb25zdGF0ZXJ1bm5pbmdiYWNrZ3JvdW5kP2xhbmd1YWdlPW9iamNcbmNvbnN0IEFQUF9TVEFURV9OT1RfSU5TVEFMTEVEID0gMDtcbmNvbnN0IEFQUF9TVEFURV9OT1RfUlVOTklORyA9IDE7XG5jb25zdCBBUFBfU1RBVEVfUlVOTklOR19JTl9CQUNLR1JPVU5EID0gMztcbmNvbnN0IEFQUF9TVEFURV9SVU5OSU5HX0lOX0ZPUkVHUk9VTkQgPSA0O1xuXG5sZXQgY29tbWFuZHMgPSB7fTtcblxuLyoqXG4gKiBWZXJpZnkgd2hldGhlciBhbiBhcHBsaWNhdGlvbiBpcyBpbnN0YWxsZWQgb3Igbm90XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwcElkIC0gQXBwbGljYXRpb24gcGFja2FnZSBpZGVudGlmaWVyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgYXBwIGlzIGluc3RhbGxlZFxuICovXG5jb21tYW5kcy5pc0FwcEluc3RhbGxlZCA9IGFzeW5jIGZ1bmN0aW9uIGlzQXBwSW5zdGFsbGVkIChhcHBJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5hZGIuaXNBcHBJbnN0YWxsZWQoYXBwSWQpO1xufTtcblxuLyoqXG4gKiBRdWVyaWVzIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBhcHAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwcElkIC0gQXBwbGljYXRpb24gcGFja2FnZSBpZGVudGlmaWVyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgY29ycmVzcG9uZGluZyBjb25zdGFudCwgd2hpY2ggZGVzY3JpYmVzXG4gKiAgICAgICAgICAgICAgICAgICB0aGUgY3VycmVudCBhcHBsaWNhdGlvbiBzdGF0ZTpcbiAqIDAgLSBpcyB0aGUgYXBwIGlzIG5vdCBpbnN0YWxsZWRcbiAqIDEgLSBpZiB0aGUgYXBwIGlzIGluc3RhbGxlZCwgYnV0IGlzIG5vdCBydW5uaW5nXG4gKiAzIC0gaWYgdGhlIGFwcCBpcyBydW5uaW5nIGluIHRoZSBiYWNrZ3JvdW5kXG4gKiA0IC0gaWYgdGhlIGFwcCBpcyBydW5uaW5nIGluIHRoZSBmb3JlZ3JvdW5kXG4gKi9cbmNvbW1hbmRzLnF1ZXJ5QXBwU3RhdGUgPSBhc3luYyBmdW5jdGlvbiBxdWVyeUFwcFN0YXRlIChhcHBJZCkge1xuICBsb2cuaW5mbyhgUXVlcnlpbmcgdGhlIHN0YXRlIG9mICcke2FwcElkfSdgKTtcbiAgaWYgKCFhd2FpdCB0aGlzLmFkYi5pc0FwcEluc3RhbGxlZChhcHBJZCkpIHtcbiAgICByZXR1cm4gQVBQX1NUQVRFX05PVF9JTlNUQUxMRUQ7XG4gIH1cbiAgaWYgKCFhd2FpdCB0aGlzLmFkYi5wcm9jZXNzRXhpc3RzKGFwcElkKSkge1xuICAgIHJldHVybiBBUFBfU1RBVEVfTk9UX1JVTk5JTkc7XG4gIH1cbiAgZm9yIChjb25zdCBsaW5lIG9mIChhd2FpdCB0aGlzLmFkYi5kdW1wV2luZG93cygpKS5zcGxpdCgnXFxuJykpIHtcbiAgICBpZiAobGluZS5pbmNsdWRlcyhhcHBJZCkgJiYgKGxpbmUuaW5jbHVkZXMoJ21DdXJyZW50Rm9jdXMnKSB8fCBsaW5lLmluY2x1ZGVzKCdtRm9jdXNlZEFwcCcpKSkge1xuICAgICAgcmV0dXJuIEFQUF9TVEFURV9SVU5OSU5HX0lOX0ZPUkVHUk9VTkQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBBUFBfU1RBVEVfUlVOTklOR19JTl9CQUNLR1JPVU5EO1xufTtcblxuLyoqXG4gKiBBY3RpdmF0ZXMgdGhlIGdpdmVuIGFwcGxpY2F0aW9uIG9yIGxhdW5jaGVzIGl0IGlmIG5lY2Vzc2FyeS5cbiAqIFRoZSBhY3Rpb24gaXMgZG9uZSB3aXRoIG1vbmtleSB0b29sIGFuZCBsaXRlcmFsbHkgc2ltdWxhdGVzXG4gKiBjbGlja2luZyB0aGUgY29ycmVzcG9uZGluZyBhcHBsaWNhdGlvbiBpY29uIG9uIHRoZSBkYXNoYm9hcmQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwcElkIC0gQXBwbGljYXRpb24gcGFja2FnZSBpZGVudGlmaWVyXG4gKi9cbmNvbW1hbmRzLmFjdGl2YXRlQXBwID0gYXN5bmMgZnVuY3Rpb24gYWN0aXZhdGVBcHAgKGFwcElkKSB7XG4gIGNvbnN0IGNtZCA9IFsnbW9ua2V5JyxcbiAgICAnLXAnLCBhcHBJZCxcbiAgICAnLWMnLCAnYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVInLFxuICAgICcxJ107XG4gIGxldCBvdXRwdXQgPSAnJztcbiAgdHJ5IHtcbiAgICBsb2cuZGVidWcoYEFjdGl2YXRpbmcgJyR7YXBwSWR9JyB3aXRoICdhZGIgc2hlbGwgJHtjbWQuam9pbignICcpfScgY29tbWFuZGApO1xuICAgIG91dHB1dCA9IGF3YWl0IHRoaXMuYWRiLnNoZWxsKGNtZCk7XG4gICAgbG9nLmRlYnVnKGBDb21tYW5kIHN0ZG91dDogJHtvdXRwdXR9YCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2cuZXJyb3JBbmRUaHJvdyhgQ2Fubm90IGFjdGl2YXRlICcke2FwcElkfScuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgfVxuICBpZiAob3V0cHV0LmluY2x1ZGVzKCdtb25rZXkgYWJvcnRlZCcpKSB7XG4gICAgbG9nLmVycm9yQW5kVGhyb3coYENhbm5vdCBhY3RpdmF0ZSAnJHthcHBJZH0nLiBBcmUgeW91IHN1cmUgaXQgaXMgaW5zdGFsbGVkP2ApO1xuICB9XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFVuaW5zdGFsbE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0aW1lb3V0IFsyMDAwMF0gLSBUaGUgY291bnQgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgdW50aWwgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwIGlzIHVuaW5zdGFsbGVkLlxuICogQHByb3BlcnR5IHtib29sZWFufSBrZWVwRGF0YSBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8ga2VlcCB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uIGRhdGEgYW5kIGNhY2hlIGZvbGRlcnMgYWZ0ZXIgdW5pbnN0YWxsLlxuICovXG5cbi8qKlxuICogUmVtb3ZlIHRoZSBjb3JyZXNwb25kaW5nIGFwcGxpY2F0aW9uIGlmIGlzIGluc3RhbGxlZC5cbiAqIFRoZSBjYWxsIGlzIGlnbm9yZWQgaWYgdGhlIGFwcCBpcyBub3QgaW5zdGFsbGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHBJZCAtIEFwcGxpY2F0aW9uIHBhY2thZ2UgaWRlbnRpZmllclxuICogQHBhcmFtIHs/VW5pbnN0YWxsT3B0aW9uc30gb3B0aW9ucyAtIFRoZSBzZXQgb2YgcmVtb3ZhbCBvcHRpb25zXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgcGFja2FnZSB3YXMgZm91bmQgb24gdGhlIGRldmljZSBhbmRcbiAqICAgICAgICAgICAgICAgICAgICBzdWNjZXNzZnVsbHkgdW5pbnN0YWxsZWQuXG4gKi9cbmNvbW1hbmRzLnJlbW92ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIHJlbW92ZUFwcCAoYXBwSWQsIG9wdGlvbnMgPSB7fSkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5hZGIudW5pbnN0YWxsQXBrKGFwcElkLCBvcHRpb25zKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gVGVybWluYXRlT3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ8c3RyaW5nfSB0aW1lb3V0IFs1MDBdIC0gVGhlIGNvdW50IG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IHVudGlsIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwIGlzIHRlcm1pbmF0ZWQuXG4gKi9cblxuLyoqXG4gKiBUZXJtaW5hdGVzIHRoZSBhcHAgaWYgaXQgaXMgcnVubmluZy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwSWQgLSBBcHBsaWNhdGlvbiBwYWNrYWdlIGlkZW50aWZpZXJcbiAqIEBwYXJhbSB7P1Rlcm1pbmF0ZU9wdGlvbnN9IG9wdGlvbnMgLSBUaGUgc2V0IG9mIGFwcGxpY2F0aW9uIHRlcm1pbmF0aW9uIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBhcHAgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHRlcm1pbmF0ZWQuXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlIGFwcCBoYXMgbm90IGJlZW4gdGVybWluYXRlZCB3aXRoaW4gdGhlIGdpdmVuIHRpbWVvdXQuXG4gKi9cbmNvbW1hbmRzLnRlcm1pbmF0ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIHRlcm1pbmF0ZUFwcCAoYXBwSWQsIG9wdGlvbnMgPSB7fSkge1xuICBsb2cuaW5mbyhgVGVybWluYXRpbmcgJyR7YXBwSWR9J2ApO1xuICBpZiAoIShhd2FpdCB0aGlzLmFkYi5wcm9jZXNzRXhpc3RzKGFwcElkKSkpIHtcbiAgICBsb2cuaW5mbyhgVGhlIGFwcCAnJHthcHBJZH0nIGlzIG5vdCBydW5uaW5nYCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGF3YWl0IHRoaXMuYWRiLmZvcmNlU3RvcChhcHBJZCk7XG4gIGNvbnN0IHRpbWVvdXQgPSB1dGlsLmhhc1ZhbHVlKG9wdGlvbnMudGltZW91dCkgJiYgIWlzTmFOKG9wdGlvbnMudGltZW91dCkgPyBwYXJzZUludChvcHRpb25zLnRpbWVvdXQsIDEwKSA6IDUwMDtcbiAgdHJ5IHtcbiAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+IGF3YWl0IHRoaXMucXVlcnlBcHBTdGF0ZShhcHBJZCkgPD0gQVBQX1NUQVRFX05PVF9SVU5OSU5HLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAge3dhaXRNczogdGltZW91dCwgaW50ZXJ2YWxNczogMTAwfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2cuZXJyb3JBbmRUaHJvdyhgJyR7YXBwSWR9JyBpcyBzdGlsbCBydW5uaW5nIGFmdGVyICR7dGltZW91dH1tcyB0aW1lb3V0YCk7XG4gIH1cbiAgbG9nLmluZm8oYCcke2FwcElkfScgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHRlcm1pbmF0ZWRgKTtcbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEluc3RhbGxPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gdGltZW91dCBbNjAwMDBdIC0gVGhlIGNvdW50IG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IHVudGlsIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcCBpcyBpbnN0YWxsZWQuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGFsbG93VGVzdFBhY2thZ2VzIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBhbGxvdyB0ZXN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyBpbnN0YWxsYXRpb24uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHVzZVNkY2FyZCBbZmFsc2VdIC0gU2V0IHRvIHRydWUgdG8gaW5zdGFsbCB0aGUgYXBwIG9uIHNkY2FyZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RlYWQgb2YgdGhlIGRldmljZSBtZW1vcnkuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGdyYW50UGVybWlzc2lvbnMgW2ZhbHNlXSAtIFNldCB0byB0cnVlIGluIG9yZGVyIHRvIGdyYW50IGFsbCB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbnMgcmVxdWVzdGVkIGluIHRoZSBhcHBsaWNhdGlvbidzIG1hbmlmZXN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgdGhlIGluc3RhbGxhdGlvbiBpcyBjb21wbGV0ZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZXIgQW5kcm9pZCA2Ky5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcmVwbGFjZSBbdHJ1ZV0gLSBTZXQgaXQgdG8gZmFsc2UgaWYgeW91IGRvbid0IHdhbnRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYXBwbGljYXRpb24gdG8gYmUgdXBncmFkZWQvcmVpbnN0YWxsZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpdCBpcyBhbHJlYWR5IHByZXNlbnQgb24gdGhlIGRldmljZS5cbiAqL1xuXG4vKipcbiAqIEluc3RhbGxzIHRoZSBnaXZlbiBhcHBsaWNhdGlvbiB0byB0aGUgZGV2aWNlIHVuZGVyIHRlc3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwUGF0aCAtIFRoZSBsb2NhbCBhcGsgcGF0aCBvciBhIHJlbW90ZSB1cmxcbiAqIEBwYXJhbSB7P0luc3RhbGxPcHRpb25zfSBvcHRpb25zIC0gVGhlIHNldCBvZiBpbnN0YWxsYXRpb24gb3B0aW9uc1xuICogQHRocm93cyB7RXJyb3J9IGlmIHRoZSBnaXZlbiBhcGsgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IHJlYWNoYWJsZVxuICovXG5jb21tYW5kcy5pbnN0YWxsQXBwID0gYXN5bmMgZnVuY3Rpb24gaW5zdGFsbEFwcCAoYXBwUGF0aCwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IGxvY2FsUGF0aCA9IGF3YWl0IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAoYXBwUGF0aCwgQVBQX0VYVEVOU0lPTlMpO1xuICBhd2FpdCB0aGlzLmFkYi5pbnN0YWxsKGxvY2FsUGF0aCwgb3B0aW9ucyk7XG59O1xuXG5cbmV4cG9ydCB7IGNvbW1hbmRzIH07XG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJmaWxlIjoibGliL2NvbW1hbmRzL2FwcC1tYW5hZ2VtZW50LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
|
|
106
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9hcHAtbWFuYWdlbWVudC5qcyJdLCJuYW1lcyI6WyJBUFBfRVhURU5TSU9OUyIsImNvbW1hbmRzIiwiaXNBcHBJbnN0YWxsZWQiLCJhcHBJZCIsImFkYiIsInF1ZXJ5QXBwU3RhdGUiLCJsb2ciLCJpbmZvIiwiQVBQX1NUQVRFIiwiTk9UX0lOU1RBTExFRCIsInByb2Nlc3NFeGlzdHMiLCJOT1RfUlVOTklORyIsImxpbmUiLCJkdW1wV2luZG93cyIsInNwbGl0IiwiaW5jbHVkZXMiLCJSVU5OSU5HX0lOX0ZPUkVHUk9VTkQiLCJSVU5OSU5HX0lOX0JBQ0tHUk9VTkQiLCJhY3RpdmF0ZUFwcCIsImNtZCIsIm91dHB1dCIsImRlYnVnIiwiam9pbiIsInNoZWxsIiwiZSIsImVycm9yQW5kVGhyb3ciLCJtZXNzYWdlIiwicmVtb3ZlQXBwIiwib3B0aW9ucyIsInVuaW5zdGFsbEFwayIsInRlcm1pbmF0ZUFwcCIsImZvcmNlU3RvcCIsInRpbWVvdXQiLCJ1dGlsIiwiaGFzVmFsdWUiLCJpc05hTiIsInBhcnNlSW50Iiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsImluc3RhbGxBcHAiLCJhcHBQYXRoIiwibG9jYWxQYXRoIiwiaGVscGVycyIsImNvbmZpZ3VyZUFwcCIsImluc3RhbGwiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsY0FBYyxHQUFHLENBQUMsTUFBRCxFQUFTLE9BQVQsQ0FBdkI7QUFFQSxJQUFJQyxRQUFRLEdBQUcsRUFBZjs7O0FBUUFBLFFBQVEsQ0FBQ0MsY0FBVCxHQUEwQixlQUFlQSxjQUFmLENBQStCQyxLQUEvQixFQUFzQztBQUM5RCxTQUFPLE1BQU0sS0FBS0MsR0FBTCxDQUFTRixjQUFULENBQXdCQyxLQUF4QixDQUFiO0FBQ0QsQ0FGRDs7QUFlQUYsUUFBUSxDQUFDSSxhQUFULEdBQXlCLGVBQWVBLGFBQWYsQ0FBOEJGLEtBQTlCLEVBQXFDO0FBQzVERyxr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TUFBSTtBQUNGLFVBQU0sZ0NBQWlCLFlBQVksT0FBTSxLQUFLM0IsYUFBTCxDQUFtQkYsS0FBbkIsQ0FBTixLQUFtQ0ssMEJBQVVHLFdBQTFFLEVBQ2lCO0FBQUMwQixNQUFBQSxNQUFNLEVBQUVMLE9BQVQ7QUFBa0JNLE1BQUFBLFVBQVUsRUFBRTtBQUE5QixLQURqQixDQUFOO0FBRUQsR0FIRCxDQUdFLE9BQU9kLENBQVAsRUFBVTtBQUNWbEIsb0JBQUltQixhQUFKLENBQW1CLElBQUd0QixLQUFNLDRCQUEyQjZCLE9BQVEsWUFBL0Q7QUFDRDs7QUFDRDFCLGtCQUFJQyxJQUFKLENBQVUsSUFBR0osS0FBTSxvQ0FBbkI7O0FBQ0EsU0FBTyxJQUFQO0FBQ0QsQ0FoQkQ7O0FBMENBRixRQUFRLENBQUNzQyxVQUFULEdBQXNCLGVBQWVBLFVBQWYsQ0FBMkJDLE9BQTNCLEVBQW9DWixPQUFPLEdBQUcsRUFBOUMsRUFBa0Q7QUFDdEUsUUFBTWEsU0FBUyxHQUFHLE1BQU0sS0FBS0MsT0FBTCxDQUFhQyxZQUFiLENBQTBCSCxPQUExQixFQUFtQ3hDLGNBQW5DLENBQXhCO0FBQ0EsUUFBTSxLQUFLSSxHQUFMLENBQVN3QyxPQUFULENBQWlCSCxTQUFqQixFQUE0QmIsT0FBNUIsQ0FBTjtBQUNELENBSEQ7O2VBT2UzQixRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgd2FpdEZvckNvbmRpdGlvbiB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IHV0aWwgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBBUFBfU1RBVEUgfSBmcm9tICcuLi9hbmRyb2lkLWhlbHBlcnMnO1xuXG5jb25zdCBBUFBfRVhURU5TSU9OUyA9IFsnLmFwaycsICcuYXBrcyddO1xuXG5sZXQgY29tbWFuZHMgPSB7fTtcblxuLyoqXG4gKiBWZXJpZnkgd2hldGhlciBhbiBhcHBsaWNhdGlvbiBpcyBpbnN0YWxsZWQgb3Igbm90XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwcElkIC0gQXBwbGljYXRpb24gcGFja2FnZSBpZGVudGlmaWVyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgYXBwIGlzIGluc3RhbGxlZFxuICovXG5jb21tYW5kcy5pc0FwcEluc3RhbGxlZCA9IGFzeW5jIGZ1bmN0aW9uIGlzQXBwSW5zdGFsbGVkIChhcHBJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5hZGIuaXNBcHBJbnN0YWxsZWQoYXBwSWQpO1xufTtcblxuLyoqXG4gKiBRdWVyaWVzIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBhcHAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwcElkIC0gQXBwbGljYXRpb24gcGFja2FnZSBpZGVudGlmaWVyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgY29ycmVzcG9uZGluZyBjb25zdGFudCwgd2hpY2ggZGVzY3JpYmVzXG4gKiAgICAgICAgICAgICAgICAgICB0aGUgY3VycmVudCBhcHBsaWNhdGlvbiBzdGF0ZTpcbiAqIDAgLSBpcyB0aGUgYXBwIGlzIG5vdCBpbnN0YWxsZWRcbiAqIDEgLSBpZiB0aGUgYXBwIGlzIGluc3RhbGxlZCwgYnV0IGlzIG5vdCBydW5uaW5nXG4gKiAzIC0gaWYgdGhlIGFwcCBpcyBydW5uaW5nIGluIHRoZSBiYWNrZ3JvdW5kXG4gKiA0IC0gaWYgdGhlIGFwcCBpcyBydW5uaW5nIGluIHRoZSBmb3JlZ3JvdW5kXG4gKi9cbmNvbW1hbmRzLnF1ZXJ5QXBwU3RhdGUgPSBhc3luYyBmdW5jdGlvbiBxdWVyeUFwcFN0YXRlIChhcHBJZCkge1xuICBsb2cuaW5mbyhgUXVlcnlpbmcgdGhlIHN0YXRlIG9mICcke2FwcElkfSdgKTtcbiAgaWYgKCFhd2FpdCB0aGlzLmFkYi5pc0FwcEluc3RhbGxlZChhcHBJZCkpIHtcbiAgICByZXR1cm4gQVBQX1NUQVRFLk5PVF9JTlNUQUxMRUQ7XG4gIH1cbiAgaWYgKCFhd2FpdCB0aGlzLmFkYi5wcm9jZXNzRXhpc3RzKGFwcElkKSkge1xuICAgIHJldHVybiBBUFBfU1RBVEUuTk9UX1JVTk5JTkc7XG4gIH1cbiAgZm9yIChjb25zdCBsaW5lIG9mIChhd2FpdCB0aGlzLmFkYi5kdW1wV2luZG93cygpKS5zcGxpdCgnXFxuJykpIHtcbiAgICBpZiAobGluZS5pbmNsdWRlcyhhcHBJZCkgJiYgKGxpbmUuaW5jbHVkZXMoJ21DdXJyZW50Rm9jdXMnKSB8fCBsaW5lLmluY2x1ZGVzKCdtRm9jdXNlZEFwcCcpKSkge1xuICAgICAgcmV0dXJuIEFQUF9TVEFURS5SVU5OSU5HX0lOX0ZPUkVHUk9VTkQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBBUFBfU1RBVEUuUlVOTklOR19JTl9CQUNLR1JPVU5EO1xufTtcblxuLyoqXG4gKiBBY3RpdmF0ZXMgdGhlIGdpdmVuIGFwcGxpY2F0aW9uIG9yIGxhdW5jaGVzIGl0IGlmIG5lY2Vzc2FyeS5cbiAqIFRoZSBhY3Rpb24gaXMgZG9uZSB3aXRoIG1vbmtleSB0b29sIGFuZCBsaXRlcmFsbHkgc2ltdWxhdGVzXG4gKiBjbGlja2luZyB0aGUgY29ycmVzcG9uZGluZyBhcHBsaWNhdGlvbiBpY29uIG9uIHRoZSBkYXNoYm9hcmQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwcElkIC0gQXBwbGljYXRpb24gcGFja2FnZSBpZGVudGlmaWVyXG4gKi9cbmNvbW1hbmRzLmFjdGl2YXRlQXBwID0gYXN5bmMgZnVuY3Rpb24gYWN0aXZhdGVBcHAgKGFwcElkKSB7XG4gIGNvbnN0IGNtZCA9IFsnbW9ua2V5JyxcbiAgICAnLXAnLCBhcHBJZCxcbiAgICAnLWMnLCAnYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVInLFxuICAgICcxJ107XG4gIGxldCBvdXRwdXQgPSAnJztcbiAgdHJ5IHtcbiAgICBsb2cuZGVidWcoYEFjdGl2YXRpbmcgJyR7YXBwSWR9JyB3aXRoICdhZGIgc2hlbGwgJHtjbWQuam9pbignICcpfScgY29tbWFuZGApO1xuICAgIG91dHB1dCA9IGF3YWl0IHRoaXMuYWRiLnNoZWxsKGNtZCk7XG4gICAgbG9nLmRlYnVnKGBDb21tYW5kIHN0ZG91dDogJHtvdXRwdXR9YCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2cuZXJyb3JBbmRUaHJvdyhgQ2Fubm90IGFjdGl2YXRlICcke2FwcElkfScuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgfVxuICBpZiAob3V0cHV0LmluY2x1ZGVzKCdtb25rZXkgYWJvcnRlZCcpKSB7XG4gICAgbG9nLmVycm9yQW5kVGhyb3coYENhbm5vdCBhY3RpdmF0ZSAnJHthcHBJZH0nLiBBcmUgeW91IHN1cmUgaXQgaXMgaW5zdGFsbGVkP2ApO1xuICB9XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFVuaW5zdGFsbE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0aW1lb3V0IFsyMDAwMF0gLSBUaGUgY291bnQgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgdW50aWwgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwIGlzIHVuaW5zdGFsbGVkLlxuICogQHByb3BlcnR5IHtib29sZWFufSBrZWVwRGF0YSBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8ga2VlcCB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uIGRhdGEgYW5kIGNhY2hlIGZvbGRlcnMgYWZ0ZXIgdW5pbnN0YWxsLlxuICovXG5cbi8qKlxuICogUmVtb3ZlIHRoZSBjb3JyZXNwb25kaW5nIGFwcGxpY2F0aW9uIGlmIGlzIGluc3RhbGxlZC5cbiAqIFRoZSBjYWxsIGlzIGlnbm9yZWQgaWYgdGhlIGFwcCBpcyBub3QgaW5zdGFsbGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHBJZCAtIEFwcGxpY2F0aW9uIHBhY2thZ2UgaWRlbnRpZmllclxuICogQHBhcmFtIHs/VW5pbnN0YWxsT3B0aW9uc30gb3B0aW9ucyAtIFRoZSBzZXQgb2YgcmVtb3ZhbCBvcHRpb25zXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgcGFja2FnZSB3YXMgZm91bmQgb24gdGhlIGRldmljZSBhbmRcbiAqICAgICAgICAgICAgICAgICAgICBzdWNjZXNzZnVsbHkgdW5pbnN0YWxsZWQuXG4gKi9cbmNvbW1hbmRzLnJlbW92ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIHJlbW92ZUFwcCAoYXBwSWQsIG9wdGlvbnMgPSB7fSkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5hZGIudW5pbnN0YWxsQXBrKGFwcElkLCBvcHRpb25zKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gVGVybWluYXRlT3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ8c3RyaW5nfSB0aW1lb3V0IFs1MDBdIC0gVGhlIGNvdW50IG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IHVudGlsIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwIGlzIHRlcm1pbmF0ZWQuXG4gKi9cblxuLyoqXG4gKiBUZXJtaW5hdGVzIHRoZSBhcHAgaWYgaXQgaXMgcnVubmluZy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwSWQgLSBBcHBsaWNhdGlvbiBwYWNrYWdlIGlkZW50aWZpZXJcbiAqIEBwYXJhbSB7P1Rlcm1pbmF0ZU9wdGlvbnN9IG9wdGlvbnMgLSBUaGUgc2V0IG9mIGFwcGxpY2F0aW9uIHRlcm1pbmF0aW9uIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBhcHAgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHRlcm1pbmF0ZWQuXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlIGFwcCBoYXMgbm90IGJlZW4gdGVybWluYXRlZCB3aXRoaW4gdGhlIGdpdmVuIHRpbWVvdXQuXG4gKi9cbmNvbW1hbmRzLnRlcm1pbmF0ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIHRlcm1pbmF0ZUFwcCAoYXBwSWQsIG9wdGlvbnMgPSB7fSkge1xuICBsb2cuaW5mbyhgVGVybWluYXRpbmcgJyR7YXBwSWR9J2ApO1xuICBpZiAoIShhd2FpdCB0aGlzLmFkYi5wcm9jZXNzRXhpc3RzKGFwcElkKSkpIHtcbiAgICBsb2cuaW5mbyhgVGhlIGFwcCAnJHthcHBJZH0nIGlzIG5vdCBydW5uaW5nYCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGF3YWl0IHRoaXMuYWRiLmZvcmNlU3RvcChhcHBJZCk7XG4gIGNvbnN0IHRpbWVvdXQgPSB1dGlsLmhhc1ZhbHVlKG9wdGlvbnMudGltZW91dCkgJiYgIWlzTmFOKG9wdGlvbnMudGltZW91dCkgPyBwYXJzZUludChvcHRpb25zLnRpbWVvdXQsIDEwKSA6IDUwMDtcbiAgdHJ5IHtcbiAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+IGF3YWl0IHRoaXMucXVlcnlBcHBTdGF0ZShhcHBJZCkgPD0gQVBQX1NUQVRFLk5PVF9SVU5OSU5HLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAge3dhaXRNczogdGltZW91dCwgaW50ZXJ2YWxNczogMTAwfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2cuZXJyb3JBbmRUaHJvdyhgJyR7YXBwSWR9JyBpcyBzdGlsbCBydW5uaW5nIGFmdGVyICR7dGltZW91dH1tcyB0aW1lb3V0YCk7XG4gIH1cbiAgbG9nLmluZm8oYCcke2FwcElkfScgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHRlcm1pbmF0ZWRgKTtcbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEluc3RhbGxPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gdGltZW91dCBbNjAwMDBdIC0gVGhlIGNvdW50IG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IHVudGlsIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcCBpcyBpbnN0YWxsZWQuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGFsbG93VGVzdFBhY2thZ2VzIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBhbGxvdyB0ZXN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyBpbnN0YWxsYXRpb24uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHVzZVNkY2FyZCBbZmFsc2VdIC0gU2V0IHRvIHRydWUgdG8gaW5zdGFsbCB0aGUgYXBwIG9uIHNkY2FyZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RlYWQgb2YgdGhlIGRldmljZSBtZW1vcnkuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGdyYW50UGVybWlzc2lvbnMgW2ZhbHNlXSAtIFNldCB0byB0cnVlIGluIG9yZGVyIHRvIGdyYW50IGFsbCB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbnMgcmVxdWVzdGVkIGluIHRoZSBhcHBsaWNhdGlvbidzIG1hbmlmZXN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgdGhlIGluc3RhbGxhdGlvbiBpcyBjb21wbGV0ZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZXIgQW5kcm9pZCA2Ky5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcmVwbGFjZSBbdHJ1ZV0gLSBTZXQgaXQgdG8gZmFsc2UgaWYgeW91IGRvbid0IHdhbnRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYXBwbGljYXRpb24gdG8gYmUgdXBncmFkZWQvcmVpbnN0YWxsZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpdCBpcyBhbHJlYWR5IHByZXNlbnQgb24gdGhlIGRldmljZS5cbiAqL1xuXG4vKipcbiAqIEluc3RhbGxzIHRoZSBnaXZlbiBhcHBsaWNhdGlvbiB0byB0aGUgZGV2aWNlIHVuZGVyIHRlc3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwUGF0aCAtIFRoZSBsb2NhbCBhcGsgcGF0aCBvciBhIHJlbW90ZSB1cmxcbiAqIEBwYXJhbSB7P0luc3RhbGxPcHRpb25zfSBvcHRpb25zIC0gVGhlIHNldCBvZiBpbnN0YWxsYXRpb24gb3B0aW9uc1xuICogQHRocm93cyB7RXJyb3J9IGlmIHRoZSBnaXZlbiBhcGsgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IHJlYWNoYWJsZVxuICovXG5jb21tYW5kcy5pbnN0YWxsQXBwID0gYXN5bmMgZnVuY3Rpb24gaW5zdGFsbEFwcCAoYXBwUGF0aCwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IGxvY2FsUGF0aCA9IGF3YWl0IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAoYXBwUGF0aCwgQVBQX0VYVEVOU0lPTlMpO1xuICBhd2FpdCB0aGlzLmFkYi5pbnN0YWxsKGxvY2FsUGF0aCwgb3B0aW9ucyk7XG59O1xuXG5cbmV4cG9ydCB7IGNvbW1hbmRzIH07XG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJmaWxlIjoibGliL2NvbW1hbmRzL2FwcC1tYW5hZ2VtZW50LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
|