appium-adb 9.10.3 → 9.10.4
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 +28 -0
- package/build/lib/adb.js +130 -0
- package/build/lib/helpers.js +977 -0
- package/build/lib/logcat.js +219 -0
- package/build/lib/logger.js +16 -0
- package/build/lib/tools/aab-utils.js +155 -0
- package/build/lib/tools/adb-commands.js +1146 -0
- package/build/lib/tools/adb-emu-commands.js +395 -0
- package/build/lib/tools/android-manifest.js +229 -0
- package/build/lib/tools/apk-signing.js +331 -0
- package/build/lib/tools/apk-utils.js +986 -0
- package/build/lib/tools/apks-utils.js +217 -0
- package/build/lib/tools/index.js +47 -0
- package/build/lib/tools/keyboard-commands.js +69 -0
- package/build/lib/tools/lockmgmt.js +222 -0
- package/build/lib/tools/settings-client-commands.js +360 -0
- package/build/lib/tools/system-calls.js +1062 -0
- package/package.json +1 -1
package/build/index.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getSdkRootFromEnv = exports.getAndroidBinaryPath = exports.default = exports.DEFAULT_ADB_PORT = exports.ADB = void 0;
|
|
7
|
+
|
|
8
|
+
require("source-map-support/register");
|
|
9
|
+
|
|
10
|
+
var adb = _interopRequireWildcard(require("./lib/adb"));
|
|
11
|
+
|
|
12
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
13
|
+
|
|
14
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
15
|
+
|
|
16
|
+
const {
|
|
17
|
+
ADB,
|
|
18
|
+
DEFAULT_ADB_PORT,
|
|
19
|
+
getAndroidBinaryPath,
|
|
20
|
+
getSdkRootFromEnv
|
|
21
|
+
} = adb;
|
|
22
|
+
exports.getSdkRootFromEnv = getSdkRootFromEnv;
|
|
23
|
+
exports.getAndroidBinaryPath = getAndroidBinaryPath;
|
|
24
|
+
exports.DEFAULT_ADB_PORT = DEFAULT_ADB_PORT;
|
|
25
|
+
exports.ADB = ADB;
|
|
26
|
+
var _default = ADB;
|
|
27
|
+
exports.default = _default;
|
|
28
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBREIiLCJERUZBVUxUX0FEQl9QT1JUIiwiZ2V0QW5kcm9pZEJpbmFyeVBhdGgiLCJnZXRTZGtSb290RnJvbUVudiIsImFkYiJdLCJzb3VyY2VzIjpbIi4uL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIHRyYW5zcGlsZTptYWluXG5cbmltcG9ydCAqIGFzIGFkYiBmcm9tICcuL2xpYi9hZGInO1xuXG5jb25zdCB7XG4gIEFEQixcbiAgREVGQVVMVF9BREJfUE9SVCxcbiAgZ2V0QW5kcm9pZEJpbmFyeVBhdGgsXG4gIGdldFNka1Jvb3RGcm9tRW52XG59ID0gYWRiO1xuXG5leHBvcnQgZGVmYXVsdCBBREI7XG5leHBvcnQgeyBBREIsIERFRkFVTFRfQURCX1BPUlQsIGdldEFuZHJvaWRCaW5hcnlQYXRoLCBnZXRTZGtSb290RnJvbUVudiB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFFQTs7Ozs7O0FBRUEsTUFBTTtFQUNKQSxHQURJO0VBRUpDLGdCQUZJO0VBR0pDLG9CQUhJO0VBSUpDO0FBSkksSUFLRkMsR0FMSjs7Ozs7ZUFPZUosRyJ9
|
package/build/lib/adb.js
ADDED
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = exports.DEFAULT_ADB_PORT = exports.ADB = void 0;
|
|
9
|
+
Object.defineProperty(exports, "getAndroidBinaryPath", {
|
|
10
|
+
enumerable: true,
|
|
11
|
+
get: function () {
|
|
12
|
+
return _index.getAndroidBinaryPath;
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
Object.defineProperty(exports, "getSdkRootFromEnv", {
|
|
16
|
+
enumerable: true,
|
|
17
|
+
get: function () {
|
|
18
|
+
return _helpers.getSdkRootFromEnv;
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
require("source-map-support/register");
|
|
23
|
+
|
|
24
|
+
var _lodash = _interopRequireDefault(require("lodash"));
|
|
25
|
+
|
|
26
|
+
var _os = _interopRequireDefault(require("os"));
|
|
27
|
+
|
|
28
|
+
var _index = _interopRequireWildcard(require("./tools/index.js"));
|
|
29
|
+
|
|
30
|
+
var _helpers = require("./helpers");
|
|
31
|
+
|
|
32
|
+
var _logger = _interopRequireDefault(require("./logger.js"));
|
|
33
|
+
|
|
34
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
35
|
+
|
|
36
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
37
|
+
|
|
38
|
+
const DEFAULT_ADB_PORT = 5037;
|
|
39
|
+
exports.DEFAULT_ADB_PORT = DEFAULT_ADB_PORT;
|
|
40
|
+
const DEFAULT_OPTS = {
|
|
41
|
+
sdkRoot: (0, _helpers.getSdkRootFromEnv)() || null,
|
|
42
|
+
udid: null,
|
|
43
|
+
appDeviceReadyTimeout: null,
|
|
44
|
+
useKeystore: null,
|
|
45
|
+
keystorePath: null,
|
|
46
|
+
keystorePassword: null,
|
|
47
|
+
keyAlias: null,
|
|
48
|
+
keyPassword: null,
|
|
49
|
+
executable: {
|
|
50
|
+
path: 'adb',
|
|
51
|
+
defaultArgs: []
|
|
52
|
+
},
|
|
53
|
+
tmpDir: _os.default.tmpdir(),
|
|
54
|
+
curDeviceId: null,
|
|
55
|
+
emulatorPort: null,
|
|
56
|
+
logcat: null,
|
|
57
|
+
binaries: {},
|
|
58
|
+
instrumentProc: null,
|
|
59
|
+
suppressKillServer: null,
|
|
60
|
+
jars: {},
|
|
61
|
+
adbPort: DEFAULT_ADB_PORT,
|
|
62
|
+
adbHost: null,
|
|
63
|
+
adbExecTimeout: _helpers.DEFAULT_ADB_EXEC_TIMEOUT,
|
|
64
|
+
remoteAppsCacheLimit: 10,
|
|
65
|
+
buildToolsVersion: null,
|
|
66
|
+
allowOfflineDevices: false,
|
|
67
|
+
allowDelayAdb: true
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
class ADB {
|
|
71
|
+
constructor(opts = {}) {
|
|
72
|
+
Object.assign(this, opts);
|
|
73
|
+
|
|
74
|
+
_lodash.default.defaultsDeep(this, _lodash.default.cloneDeep(DEFAULT_OPTS));
|
|
75
|
+
|
|
76
|
+
if (opts.remoteAdbHost) {
|
|
77
|
+
this.executable.defaultArgs.push('-H', opts.remoteAdbHost);
|
|
78
|
+
this.adbHost = opts.remoteAdbHost;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
if (opts.remoteAdbPort) {
|
|
82
|
+
this.adbPort = opts.remoteAdbPort;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
this.executable.defaultArgs.push('-P', this.adbPort);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
clone(opts = {}) {
|
|
89
|
+
const originalOptions = _lodash.default.cloneDeep(_lodash.default.pick(this, Object.keys(DEFAULT_OPTS)));
|
|
90
|
+
|
|
91
|
+
const cloneOptions = _lodash.default.defaultsDeep(opts, originalOptions);
|
|
92
|
+
|
|
93
|
+
const defaultArgs = cloneOptions.executable.defaultArgs;
|
|
94
|
+
|
|
95
|
+
if (cloneOptions.remoteAdbHost && defaultArgs.includes('-H')) {
|
|
96
|
+
defaultArgs.splice(defaultArgs.indexOf('-H'), 2);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
if (defaultArgs.includes('-P')) {
|
|
100
|
+
defaultArgs.splice(defaultArgs.indexOf('-P'), 2);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
return new ADB(cloneOptions);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
exports.ADB = ADB;
|
|
109
|
+
|
|
110
|
+
ADB.createADB = async function createADB(opts) {
|
|
111
|
+
const adb = new ADB(opts);
|
|
112
|
+
adb.sdkRoot = await (0, _helpers.requireSdkRoot)(adb.sdkRoot);
|
|
113
|
+
await adb.getAdbWithCorrectAdbPath();
|
|
114
|
+
|
|
115
|
+
try {
|
|
116
|
+
await adb.adbExec(['start-server']);
|
|
117
|
+
} catch (e) {
|
|
118
|
+
_logger.default.warn(e.stderr || e.message);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
return adb;
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
for (const [fnName, fn] of _lodash.default.toPairs(_index.default)) {
|
|
125
|
+
ADB.prototype[fnName] = fn;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
var _default = ADB;
|
|
129
|
+
exports.default = _default;
|
|
130
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJERUZBVUxUX0FEQl9QT1JUIiwiREVGQVVMVF9PUFRTIiwic2RrUm9vdCIsImdldFNka1Jvb3RGcm9tRW52IiwidWRpZCIsImFwcERldmljZVJlYWR5VGltZW91dCIsInVzZUtleXN0b3JlIiwia2V5c3RvcmVQYXRoIiwia2V5c3RvcmVQYXNzd29yZCIsImtleUFsaWFzIiwia2V5UGFzc3dvcmQiLCJleGVjdXRhYmxlIiwicGF0aCIsImRlZmF1bHRBcmdzIiwidG1wRGlyIiwib3MiLCJ0bXBkaXIiLCJjdXJEZXZpY2VJZCIsImVtdWxhdG9yUG9ydCIsImxvZ2NhdCIsImJpbmFyaWVzIiwiaW5zdHJ1bWVudFByb2MiLCJzdXBwcmVzc0tpbGxTZXJ2ZXIiLCJqYXJzIiwiYWRiUG9ydCIsImFkYkhvc3QiLCJhZGJFeGVjVGltZW91dCIsIkRFRkFVTFRfQURCX0VYRUNfVElNRU9VVCIsInJlbW90ZUFwcHNDYWNoZUxpbWl0IiwiYnVpbGRUb29sc1ZlcnNpb24iLCJhbGxvd09mZmxpbmVEZXZpY2VzIiwiYWxsb3dEZWxheUFkYiIsIkFEQiIsImNvbnN0cnVjdG9yIiwib3B0cyIsIk9iamVjdCIsImFzc2lnbiIsIl8iLCJkZWZhdWx0c0RlZXAiLCJjbG9uZURlZXAiLCJyZW1vdGVBZGJIb3N0IiwicHVzaCIsInJlbW90ZUFkYlBvcnQiLCJjbG9uZSIsIm9yaWdpbmFsT3B0aW9ucyIsInBpY2siLCJrZXlzIiwiY2xvbmVPcHRpb25zIiwiaW5jbHVkZXMiLCJzcGxpY2UiLCJpbmRleE9mIiwiY3JlYXRlQURCIiwiYWRiIiwicmVxdWlyZVNka1Jvb3QiLCJnZXRBZGJXaXRoQ29ycmVjdEFkYlBhdGgiLCJhZGJFeGVjIiwiZSIsImxvZyIsIndhcm4iLCJzdGRlcnIiLCJtZXNzYWdlIiwiZm5OYW1lIiwiZm4iLCJ0b1BhaXJzIiwibWV0aG9kcyIsInByb3RvdHlwZSJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9hZGIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBvcyBmcm9tICdvcyc7XG5pbXBvcnQgbWV0aG9kcywgeyBnZXRBbmRyb2lkQmluYXJ5UGF0aCB9IGZyb20gJy4vdG9vbHMvaW5kZXguanMnO1xuaW1wb3J0IHtcbiAgREVGQVVMVF9BREJfRVhFQ19USU1FT1VULCByZXF1aXJlU2RrUm9vdCwgZ2V0U2RrUm9vdEZyb21FbnZcbn0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXIuanMnO1xuXG5jb25zdCBERUZBVUxUX0FEQl9QT1JUID0gNTAzNztcbmNvbnN0IERFRkFVTFRfT1BUUyA9IHtcbiAgc2RrUm9vdDogZ2V0U2RrUm9vdEZyb21FbnYoKSB8fCBudWxsLFxuICB1ZGlkOiBudWxsLFxuICBhcHBEZXZpY2VSZWFkeVRpbWVvdXQ6IG51bGwsXG4gIHVzZUtleXN0b3JlOiBudWxsLFxuICBrZXlzdG9yZVBhdGg6IG51bGwsXG4gIGtleXN0b3JlUGFzc3dvcmQ6IG51bGwsXG4gIGtleUFsaWFzOiBudWxsLFxuICBrZXlQYXNzd29yZDogbnVsbCxcbiAgZXhlY3V0YWJsZToge3BhdGg6ICdhZGInLCBkZWZhdWx0QXJnczogW119LFxuICB0bXBEaXI6IG9zLnRtcGRpcigpLFxuICBjdXJEZXZpY2VJZDogbnVsbCxcbiAgZW11bGF0b3JQb3J0OiBudWxsLFxuICBsb2djYXQ6IG51bGwsXG4gIGJpbmFyaWVzOiB7fSxcbiAgaW5zdHJ1bWVudFByb2M6IG51bGwsXG4gIHN1cHByZXNzS2lsbFNlcnZlcjogbnVsbCxcbiAgamFyczoge30sXG4gIGFkYlBvcnQ6IERFRkFVTFRfQURCX1BPUlQsXG4gIGFkYkhvc3Q6IG51bGwsXG4gIGFkYkV4ZWNUaW1lb3V0OiBERUZBVUxUX0FEQl9FWEVDX1RJTUVPVVQsXG4gIHJlbW90ZUFwcHNDYWNoZUxpbWl0OiAxMCxcbiAgYnVpbGRUb29sc1ZlcnNpb246IG51bGwsXG4gIGFsbG93T2ZmbGluZURldmljZXM6IGZhbHNlLFxuICBhbGxvd0RlbGF5QWRiOiB0cnVlLFxufTtcblxuY2xhc3MgQURCIHtcbiAgY29uc3RydWN0b3IgKG9wdHMgPSB7fSkge1xuICAgIE9iamVjdC5hc3NpZ24odGhpcywgb3B0cyk7XG4gICAgXy5kZWZhdWx0c0RlZXAodGhpcywgXy5jbG9uZURlZXAoREVGQVVMVF9PUFRTKSk7XG5cbiAgICBpZiAob3B0cy5yZW1vdGVBZGJIb3N0KSB7XG4gICAgICB0aGlzLmV4ZWN1dGFibGUuZGVmYXVsdEFyZ3MucHVzaCgnLUgnLCBvcHRzLnJlbW90ZUFkYkhvc3QpO1xuICAgICAgdGhpcy5hZGJIb3N0ID0gb3B0cy5yZW1vdGVBZGJIb3N0O1xuICAgIH1cbiAgICAvLyBUT0RPIGZpZ3VyZSBvdXQgd2h5IHdlIGhhdmUgdGhpcyBvcHRpb24gYXMgaXQgZG9lcyBub3QgYXBwZWFyIHRvIGJlXG4gICAgLy8gdXNlZCBhbnl3aGVyZS4gUHJvYmFibHkgZGVwcmVjYXRlIGluIGZhdm9yIG9mIHNpbXBsZSBvcHRzLmFkYlBvcnRcbiAgICBpZiAob3B0cy5yZW1vdGVBZGJQb3J0KSB7XG4gICAgICB0aGlzLmFkYlBvcnQgPSBvcHRzLnJlbW90ZUFkYlBvcnQ7XG4gICAgfVxuICAgIHRoaXMuZXhlY3V0YWJsZS5kZWZhdWx0QXJncy5wdXNoKCctUCcsIHRoaXMuYWRiUG9ydCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIGBBREJgIHRoYXQgaW5oZXJpdHMgY29uZmlndXJhdGlvbiBmcm9tIHRoaXMgYEFEQmAgaW5zdGFuY2UuXG4gICAqIFRoaXMgYXZvaWRzIHRoZSBuZWVkIHRvIGNhbGwgYEFEQi5jcmVhdGVBREIoKWAgbXVsdGlwbGUgdGltZXMuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRzIC0gQWRkaXRpb25hbCBvcHRpb25zIG1hcHBpbmcgdG8gcGFzcyB0byB0aGUgYEFEQmAgY29uc3RydWN0b3IuXG4gICAqIEByZXR1cm5zIHtBREJ9IFRoZSByZXN1bHRpbmcgY2xhc3MgaW5zdGFuY2UuXG4gICAqL1xuICBjbG9uZSAob3B0cyA9IHt9KSB7XG4gICAgY29uc3Qgb3JpZ2luYWxPcHRpb25zID0gXy5jbG9uZURlZXAoXy5waWNrKHRoaXMsIE9iamVjdC5rZXlzKERFRkFVTFRfT1BUUykpKTtcbiAgICBjb25zdCBjbG9uZU9wdGlvbnMgPSBfLmRlZmF1bHRzRGVlcChvcHRzLCBvcmlnaW5hbE9wdGlvbnMpO1xuXG4gICAgLy8gUmVzZXQgZGVmYXVsdCBhcmd1bWVudHMgY3JlYXRlZCBpbiB0aGUgY29uc3RydWN0b3IuXG4gICAgLy8gV2l0aG91dCB0aGlzIGNvZGUsIC1IIGFuZCAtUCBjYW4gYmUgaW5qZWN0ZWQgaW50byBkZWZhdWx0QXJncyBtdWx0aXBsZSB0aW1lcy5cbiAgICBjb25zdCBkZWZhdWx0QXJncyA9IGNsb25lT3B0aW9ucy5leGVjdXRhYmxlLmRlZmF1bHRBcmdzO1xuICAgIGlmIChjbG9uZU9wdGlvbnMucmVtb3RlQWRiSG9zdCAmJiBkZWZhdWx0QXJncy5pbmNsdWRlcygnLUgnKSkge1xuICAgICAgZGVmYXVsdEFyZ3Muc3BsaWNlKGRlZmF1bHRBcmdzLmluZGV4T2YoJy1IJyksIDIpO1xuICAgIH1cbiAgICBpZiAoZGVmYXVsdEFyZ3MuaW5jbHVkZXMoJy1QJykpIHtcbiAgICAgIGRlZmF1bHRBcmdzLnNwbGljZShkZWZhdWx0QXJncy5pbmRleE9mKCctUCcpLCAyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEFEQihjbG9uZU9wdGlvbnMpO1xuICB9XG59XG5cbkFEQi5jcmVhdGVBREIgPSBhc3luYyBmdW5jdGlvbiBjcmVhdGVBREIgKG9wdHMpIHtcbiAgY29uc3QgYWRiID0gbmV3IEFEQihvcHRzKTtcbiAgYWRiLnNka1Jvb3QgPSBhd2FpdCByZXF1aXJlU2RrUm9vdChhZGIuc2RrUm9vdCk7XG4gIGF3YWl0IGFkYi5nZXRBZGJXaXRoQ29ycmVjdEFkYlBhdGgoKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBhZGIuYWRiRXhlYyhbJ3N0YXJ0LXNlcnZlciddKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZy53YXJuKGUuc3RkZXJyIHx8IGUubWVzc2FnZSk7XG4gIH1cbiAgcmV0dXJuIGFkYjtcbn07XG5cbi8vIGFkZCBhbGwgdGhlIG1ldGhvZHMgdG8gdGhlIEFEQiBwcm90b3R5cGVcbmZvciAoY29uc3QgW2ZuTmFtZSwgZm5dIG9mIF8udG9QYWlycyhtZXRob2RzKSkge1xuICBBREIucHJvdG90eXBlW2ZuTmFtZV0gPSBmbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQURCO1xuZXhwb3J0IHsgQURCLCBERUZBVUxUX0FEQl9QT1JULCBnZXRBbmRyb2lkQmluYXJ5UGF0aCwgZ2V0U2RrUm9vdEZyb21FbnYgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQTs7Ozs7O0FBRUEsTUFBTUEsZ0JBQWdCLEdBQUcsSUFBekI7O0FBQ0EsTUFBTUMsWUFBWSxHQUFHO0VBQ25CQyxPQUFPLEVBQUUsSUFBQUMsMEJBQUEsT0FBdUIsSUFEYjtFQUVuQkMsSUFBSSxFQUFFLElBRmE7RUFHbkJDLHFCQUFxQixFQUFFLElBSEo7RUFJbkJDLFdBQVcsRUFBRSxJQUpNO0VBS25CQyxZQUFZLEVBQUUsSUFMSztFQU1uQkMsZ0JBQWdCLEVBQUUsSUFOQztFQU9uQkMsUUFBUSxFQUFFLElBUFM7RUFRbkJDLFdBQVcsRUFBRSxJQVJNO0VBU25CQyxVQUFVLEVBQUU7SUFBQ0MsSUFBSSxFQUFFLEtBQVA7SUFBY0MsV0FBVyxFQUFFO0VBQTNCLENBVE87RUFVbkJDLE1BQU0sRUFBRUMsV0FBQSxDQUFHQyxNQUFILEVBVlc7RUFXbkJDLFdBQVcsRUFBRSxJQVhNO0VBWW5CQyxZQUFZLEVBQUUsSUFaSztFQWFuQkMsTUFBTSxFQUFFLElBYlc7RUFjbkJDLFFBQVEsRUFBRSxFQWRTO0VBZW5CQyxjQUFjLEVBQUUsSUFmRztFQWdCbkJDLGtCQUFrQixFQUFFLElBaEJEO0VBaUJuQkMsSUFBSSxFQUFFLEVBakJhO0VBa0JuQkMsT0FB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
|