appium-uiautomator2-driver 2.12.2 → 2.12.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/CHANGELOG.md +14 -0
- package/README.md +1 -1
- package/build/lib/commands/element.js +2 -3
- package/build/lib/commands/element.js.map +1 -1
- package/build/lib/driver.js +2 -11
- package/build/lib/driver.js.map +1 -1
- package/lib/commands/element.js +1 -2
- package/lib/driver.js +1 -10
- package/npm-shrinkwrap.json +858 -3464
- package/package.json +7 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
## [2.12.4](https://github.com/appium/appium-uiautomator2-driver/compare/v2.12.3...v2.12.4) (2023-02-16)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Miscellaneous Chores
|
|
5
|
+
|
|
6
|
+
* remove unused unicodeKeyboard as uia2 ([#581](https://github.com/appium/appium-uiautomator2-driver/issues/581)) ([605383f](https://github.com/appium/appium-uiautomator2-driver/commit/605383f581919ab546e62368937295b48a97521e))
|
|
7
|
+
|
|
8
|
+
## [2.12.3](https://github.com/appium/appium-uiautomator2-driver/compare/v2.12.2...v2.12.3) (2023-02-02)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Miscellaneous Chores
|
|
12
|
+
|
|
13
|
+
* bump chromedriver ([21003b3](https://github.com/appium/appium-uiautomator2-driver/commit/21003b30905778b770536bf950b7eebc8a9decf3))
|
|
14
|
+
|
|
1
15
|
## [2.12.2](https://github.com/appium/appium-uiautomator2-driver/compare/v2.12.1...v2.12.2) (2023-01-12)
|
|
2
16
|
|
|
3
17
|
|
package/README.md
CHANGED
|
@@ -284,7 +284,7 @@ mjpegBilinearFiltering | boolean | Controls whether (`true`) or not (`false`, th
|
|
|
284
284
|
useResourcesForOrientationDetection | boolean | Defines the strategy used by UiAutomator2 server to detect the original device orientation. By default (`false` value) the server uses device rotation value for this purpose. Although, this approach may not work for some devices and a portrait orientation may erroneously be detected as the landscape one (and vice versa). In such case it makes sense to play with this setting.
|
|
285
285
|
enforceXPath1 | boolean | Since UiAutomator2 driver version `4.25.0` XPath2 is set as the default and the recommended interpreter for the corresponding element locators. This interpreter is based on [Psychopath XPath2](https://wiki.eclipse.org/PsychoPathXPathProcessor) implementation, which is now a part of the Eclipse foundation. In most of the cases XPath1 locators are also valid XPath2 locators, so there should be no issues while locating elements. Although, since the XPath2 standard is much more advanced in comparison to the previous version, some [issues](https://github.com/appium/appium/issues/16142) are possible for more sophisticated locators, which cannot be fixed easily, as we depend on the third-party library mentioned above. Then try to workaround such issues by enforcing XPath1 usage (whose implementation is a part of the Android platform itself) and assigning this setting to `true`. Note, this setting is actually applied at the time when the element lookup by XPath is executed, so you could switch it on or off whenever needed throughout your automated testing session.
|
|
286
286
|
limitXPathContextScope | boolean | Due to historical reasons UiAutomator2 driver limits scopes of element context-based searches to the parent element. This means a request like `findElement(By.xpath, "//root").findElement(By.xpath, "./..")` would always fail, because the driver only collects descendants of the `root` element for the destination XML source. The `limitXPathContextScope` setting being set to `false` changes that default behavior, so the collected page source includes the whole page source XML where `root` node is set as the search context. With that setting disabled the search query above should not fail anymore. Although, you must still be careful while building XPath requests for context-based searches with the `limitXPathContextScope` setting set to `false`. A request like `findElement(By.xpath, "//root").findElement(By.xpath, "//element")` would ignore the current context and search for `element` trough the whole page source. Use `.` notation to correct that behavior and only find `element` nodes which are descendants of the `root` node: `findElement(By.xpath, "//root").findElement(By.xpath, ".//element")`.
|
|
287
|
-
disableIdLocatorAutocompletion | boolean | According to internal Android standards it is expected that each resource identifier is prefixed with `<packageName>:id/` string. This should guarantee uniqueness of each identifier. Although some application development frameworks ignore this rule and don't add such prefix automatically or, rather, let it up to the developer to decide how to represent their application identifiers. By default UIA2 driver adds the above prefixes automatically to all resource id locators if they are not prefixed, but in case of such "special" apps this feature might be disabled by assigning the setting to `true`.
|
|
287
|
+
disableIdLocatorAutocompletion | boolean | According to internal Android standards it is expected that each resource identifier is prefixed with `<packageName>:id/` string. This should guarantee uniqueness of each identifier. Although some application development frameworks ignore this rule and don't add such prefix automatically or, rather, let it up to the developer to decide how to represent their application identifiers. For example, [testTag modifier attribute in the Jetpack Compose](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/package-summary#(androidx.compose.ui.Modifier).testTag(kotlin.String)) with [testTagsAsResourceId](https://developer.android.com/reference/kotlin/androidx/compose/ui/semantics/package-summary#(androidx.compose.ui.semantics.SemanticsPropertyReceiver).testTagsAsResourceId()) allows developers to set an arbitrary string without the prefix rule. [Interoperability with UiAutomator](https://developer.android.com/jetpack/compose/testing) also explains how to set it. By default UIA2 driver adds the above prefixes automatically to all resource id locators if they are not prefixed, but in case of such "special" apps this feature might be disabled by assigning the setting to `true`.
|
|
288
288
|
includeExtrasInPageSource | boolean | Whether to include `extras` element attribute in the XML page source result. Then, XPath locator can find the element by the extras. Its value consists of combined [getExtras](https://developer.android.com/reference/android/view/accessibility/AccessibilityNodeInfo#getExtras()) as `keys=value` pair separated by a semicolon (`;`), thus you may need to find the element with partial matching like `contains` e.g. `driver.find_element :xpath, '//*[contains(@extras, "AccessibilityNodeInfo.roleDescription=")]'`. The value could be huge if elements in the XML page source have large `extras`. It could affect the performance of XML page source generation.
|
|
289
289
|
|
|
290
290
|
|
|
@@ -89,8 +89,7 @@ commands.setValueImmediate = async function (keys, elementId) {
|
|
|
89
89
|
return await this.uiautomator2.jwproxy.command(`/element/${elementId}/value`, 'POST', {
|
|
90
90
|
elementId,
|
|
91
91
|
text: _lodash.default.isArray(keys) ? keys.join('') : keys,
|
|
92
|
-
replace: false
|
|
93
|
-
unicodeKeyboard: this.opts.unicodeKeyboard
|
|
92
|
+
replace: false
|
|
94
93
|
});
|
|
95
94
|
};
|
|
96
95
|
commands.getText = async function (elementId) {
|
|
@@ -152,4 +151,4 @@ commands.getElementRect = async function (elementId) {
|
|
|
152
151
|
Object.assign(extensions, commands, helpers);
|
|
153
152
|
var _default = extensions;
|
|
154
153
|
exports.default = _default;
|
|
155
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kcyIsImhlbHBlcnMiLCJleHRlbnNpb25zIiwidG9Cb29sIiwicyIsIl8iLCJpc1N0cmluZyIsInRvTG93ZXJDYXNlIiwiYWN0aXZlIiwidWlhdXRvbWF0b3IyIiwiandwcm94eSIsImNvbW1hbmQiLCJnZXRBdHRyaWJ1dGUiLCJhdHRyaWJ1dGUiLCJlbGVtZW50SWQiLCJlbGVtZW50RGlzcGxheWVkIiwiZWxlbWVudEVuYWJsZWQiLCJlbGVtZW50U2VsZWN0ZWQiLCJnZXROYW1lIiwiZ2V0TG9jYXRpb24iLCJnZXRTaXplIiwidG91Y2hMb25nQ2xpY2siLCJlbGVtZW50IiwieCIsInkiLCJkdXJhdGlvbiIsInBhcmFtcyIsInRvdWNoRG93biIsInRvdWNoVXAiLCJ0b3VjaE1vdmUiLCJkb1NldEVsZW1lbnRWYWx1ZSIsInNldFZhbHVlSW1tZWRpYXRlIiwia2V5cyIsInRleHQiLCJpc0FycmF5Iiwiam9pbiIsInJlcGxhY2UiLCJ1bmljb2RlS2V5Ym9hcmQiLCJvcHRzIiwiZ2V0VGV4dCIsImNsaWNrIiwiZ2V0RWxlbWVudFNjcmVlbnNob3QiLCJ0YXAiLCJjb3VudCIsImFyZUNvb3JkaW5hdGVzRGVmaW5lZCIsInV0aWwiLCJoYXNWYWx1ZSIsIkVycm9yIiwiaSIsIlczQ19FTEVNRU5UX0tFWSIsImNsZWFyIiwiZ2V0RWxlbWVudFJlY3QiLCJpc1dlYkNvbnRleHQiLCJsb2ciLCJkZWJ1ZyIsImNocm9tZWRyaXZlciIsImRvd25zdHJlYW1Qcm90b2NvbCIsIlBST1RPQ09MUyIsIk1KU09OV1AiLCJ3aWR0aCIsImhlaWdodCIsIk9iamVjdCIsImFzc2lnbiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb21tYW5kcy9lbGVtZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyB1dGlsIH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgUFJPVE9DT0xTLCBXM0NfRUxFTUVOVF9LRVkgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcblxubGV0IGNvbW1hbmRzID0ge30sIGhlbHBlcnMgPSB7fSwgZXh0ZW5zaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiB0b0Jvb2wgKHMpIHtcbiAgcmV0dXJuIF8uaXNTdHJpbmcocykgPyAocy50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScpIDogISFzO1xufVxuXG5jb21tYW5kcy5hY3RpdmUgPSBhc3luYyBmdW5jdGlvbiBhY3RpdmUgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvZWxlbWVudC9hY3RpdmUnLCAnR0VUJyk7XG59O1xuXG5jb21tYW5kcy5nZXRBdHRyaWJ1dGUgPSBhc3luYyBmdW5jdGlvbiAoYXR0cmlidXRlLCBlbGVtZW50SWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL2VsZW1lbnQvJHtlbGVtZW50SWR9L2F0dHJpYnV0ZS8ke2F0dHJpYnV0ZX1gLCAnR0VUJywge30pO1xufTtcblxuY29tbWFuZHMuZWxlbWVudERpc3BsYXllZCA9IGFzeW5jIGZ1bmN0aW9uIChlbGVtZW50SWQpIHtcbiAgcmV0dXJuIHRvQm9vbChhd2FpdCB0aGlzLmdldEF0dHJpYnV0ZSgnZGlzcGxheWVkJywgZWxlbWVudElkKSk7XG59O1xuXG5jb21tYW5kcy5lbGVtZW50RW5hYmxlZCA9IGFzeW5jIGZ1bmN0aW9uIChlbGVtZW50SWQpIHtcbiAgcmV0dXJuIHRvQm9vbChhd2FpdCB0aGlzLmdldEF0dHJpYnV0ZSgnZW5hYmxlZCcsIGVsZW1lbnRJZCkpO1xufTtcblxuY29tbWFuZHMuZWxlbWVudFNlbGVjdGVkID0gYXN5bmMgZnVuY3Rpb24gKGVsZW1lbnRJZCkge1xuICByZXR1cm4gdG9Cb29sKGF3YWl0IHRoaXMuZ2V0QXR0cmlidXRlKCdzZWxlY3RlZCcsIGVsZW1lbnRJZCkpO1xufTtcblxuY29tbWFuZHMuZ2V0TmFtZSA9IGFzeW5jIGZ1bmN0aW9uIChlbGVtZW50SWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL2VsZW1lbnQvJHtlbGVtZW50SWR9L25hbWVgLCAnR0VUJywge30pO1xufTtcblxuY29tbWFuZHMuZ2V0TG9jYXRpb24gPSBhc3luYyBmdW5jdGlvbiAoZWxlbWVudElkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC9lbGVtZW50LyR7ZWxlbWVudElkfS9sb2NhdGlvbmAsICdHRVQnLCB7fSk7XG59O1xuXG5jb21tYW5kcy5nZXRTaXplID0gYXN5bmMgZnVuY3Rpb24gKGVsZW1lbnRJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvZWxlbWVudC8ke2VsZW1lbnRJZH0vc2l6ZWAsICdHRVQnLCB7fSk7XG59O1xuXG5jb21tYW5kcy50b3VjaExvbmdDbGljayA9IGFzeW5jIGZ1bmN0aW9uIChlbGVtZW50LCB4LCB5LCBkdXJhdGlvbikge1xuICBsZXQgcGFyYW1zID0ge2VsZW1lbnQsIHgsIHksIGR1cmF0aW9ufTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL3RvdWNoL2xvbmdjbGlja2AsICdQT1NUJywge3BhcmFtc30pO1xufTtcblxuY29tbWFuZHMudG91Y2hEb3duID0gYXN5bmMgZnVuY3Rpb24gKGVsZW1lbnQsIHgsIHkpIHtcbiAgbGV0IHBhcmFtcyA9IHtlbGVtZW50LCB4LCB5fTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL3RvdWNoL2Rvd25gLCAnUE9TVCcsIHtwYXJhbXN9KTtcbn07XG5cbmNvbW1hbmRzLnRvdWNoVXAgPSBhc3luYyBmdW5jdGlvbiAoZWxlbWVudCwgeCwgeSkge1xuICBsZXQgcGFyYW1zID0ge2VsZW1lbnQsIHgsIHl9O1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvdG91Y2gvdXBgLCAnUE9TVCcsIHtwYXJhbXN9KTtcbn07XG5cbmNvbW1hbmRzLnRvdWNoTW92ZSA9IGFzeW5jIGZ1bmN0aW9uIChlbGVtZW50LCB4LCB5KSB7XG4gIGxldCBwYXJhbXMgPSB7ZWxlbWVudCwgeCwgeX07XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC90b3VjaC9tb3ZlYCwgJ1BPU1QnLCB7cGFyYW1zfSk7XG59O1xuXG5oZWxwZXJzLmRvU2V0RWxlbWVudFZhbHVlID0gYXN5bmMgZnVuY3Rpb24gKHBhcmFtcykge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvZWxlbWVudC8ke3BhcmFtcy5lbGVtZW50SWR9L3ZhbHVlYCwgJ1BPU1QnLCBwYXJhbXMpO1xufTtcblxuY29tbWFuZHMuc2V0VmFsdWVJbW1lZGlhdGUgPSBhc3luYyBmdW5jdGlvbiAoa2V5cywgZWxlbWVudElkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC9lbGVtZW50LyR7ZWxlbWVudElkfS92YWx1ZWAsICdQT1NUJywge1xuICAgIGVsZW1lbnRJZCxcbiAgICB0ZXh0OiBfLmlzQXJyYXkoa2V5cykgPyBrZXlzLmpvaW4oJycpIDoga2V5cyxcbiAgICByZXBsYWNlOiBmYWxzZSxcbiAgICB1bmljb2RlS2V5Ym9hcmQ6IHRoaXMub3B0cy51bmljb2RlS2V5Ym9hcmQsXG4gIH0pO1xufTtcblxuY29tbWFuZHMuZ2V0VGV4dCA9IGFzeW5jIGZ1bmN0aW9uIChlbGVtZW50SWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL2VsZW1lbnQvJHtlbGVtZW50SWR9L3RleHRgLCAnR0VUJywge30pO1xufTtcblxuY29tbWFuZHMuY2xpY2sgPSBhc3luYyBmdW5jdGlvbiAoZWxlbWVudCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvZWxlbWVudC8ke2VsZW1lbnR9L2NsaWNrYCwgJ1BPU1QnLCB7ZWxlbWVudH0pO1xufTtcblxuY29tbWFuZHMuZ2V0RWxlbWVudFNjcmVlbnNob3QgPSBhc3luYyBmdW5jdGlvbiAoZWxlbWVudCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvZWxlbWVudC8ke2VsZW1lbnR9L3NjcmVlbnNob3RgLCAnR0VUJywge30pO1xufTtcblxuY29tbWFuZHMudGFwID0gYXN5bmMgZnVuY3Rpb24gKGVsZW1lbnRJZCA9IG51bGwsIHggPSBudWxsLCB5ID0gbnVsbCwgY291bnQgPSAxKSB7XG4gIGNvbnN0IGFyZUNvb3JkaW5hdGVzRGVmaW5lZCA9IHV0aWwuaGFzVmFsdWUoeCkgJiYgdXRpbC5oYXNWYWx1ZSh5KTtcbiAgaWYgKCF1dGlsLmhhc1ZhbHVlKGVsZW1lbnRJZCkgJiYgIWFyZUNvb3JkaW5hdGVzRGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRWl0aGVyIGVsZW1lbnQgaWQgdG8gdGFwIG9yIGJvdGggYWJzb2x1dGUgY29vcmRpbmF0ZXMgc2hvdWxkIGJlIGRlZmluZWRgKTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgIGlmICh1dGlsLmhhc1ZhbHVlKGVsZW1lbnRJZCkgJiYgIWFyZUNvb3JkaW5hdGVzRGVmaW5lZCkge1xuICAgICAgLy8gd2UgYXJlIGVpdGhlciB0YXBwaW5nIG9uIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBlbGVtZW50XG4gICAgICAvLyBvciBhbiBvZmZzZXQgZnJvbSB0aGUgdG9wIGxlZnQgY29ybmVyXG4gICAgICBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC9lbGVtZW50LyR7ZWxlbWVudElkfS9jbGlja2AsICdQT1NUJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS90YXBgLCAnUE9TVCcsIHtcbiAgICAgICAgeCwgeSxcbiAgICAgICAgW1czQ19FTEVNRU5UX0tFWV06IGVsZW1lbnRJZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufTtcblxuY29tbWFuZHMuY2xlYXIgPSBhc3luYyBmdW5jdGlvbiAoZWxlbWVudElkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC9lbGVtZW50LyR7ZWxlbWVudElkfS9jbGVhcmAsICdQT1NUJywge2VsZW1lbnRJZH0pO1xufTtcblxuY29tbWFuZHMuZ2V0RWxlbWVudFJlY3QgPSBhc3luYyBmdW5jdGlvbiAoZWxlbWVudElkKSB7XG4gIGlmICh0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhpcy5sb2cuZGVidWcoYERldGVjdGVkIGRvd25zdHJlYW0gY2hyb21lZHJpdmVyIHByb3RvY29sOiAke3RoaXMuY2hyb21lZHJpdmVyLmp3cHJveHkuZG93bnN0cmVhbVByb3RvY29sfWApO1xuICAgIGlmICh0aGlzLmNocm9tZWRyaXZlci5qd3Byb3h5LmRvd25zdHJlYW1Qcm90b2NvbCA9PT0gUFJPVE9DT0xTLk1KU09OV1ApIHtcbiAgICAgIGNvbnN0IHt4LCB5fSA9IGF3YWl0IHRoaXMuY2hyb21lZHJpdmVyLmp3cHJveHkuY29tbWFuZChgL2VsZW1lbnQvJHtlbGVtZW50SWR9L2xvY2F0aW9uYCwgJ0dFVCcpO1xuICAgICAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gYXdhaXQgdGhpcy5jaHJvbWVkcml2ZXIuandwcm94eS5jb21tYW5kKGAvZWxlbWVudC8ke2VsZW1lbnRJZH0vc2l6ZWAsICdHRVQnKTtcbiAgICAgIHJldHVybiB7eCwgeSwgd2lkdGgsIGhlaWdodH07XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCB0aGlzLmNocm9tZWRyaXZlci5qd3Byb3h5LmNvbW1hbmQoYC9lbGVtZW50LyR7ZWxlbWVudElkfS9yZWN0YCwgJ0dFVCcpO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC9lbGVtZW50LyR7ZWxlbWVudElkfS9yZWN0YCwgJ0dFVCcpO1xufTtcblxuT2JqZWN0LmFzc2lnbihleHRlbnNpb25zLCBjb21tYW5kcywgaGVscGVycyk7XG5leHBvcnQgeyBjb21tYW5kcywgaGVscGVycyB9O1xuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFFQSxJQUFJQSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0VBQUVDLE9BQU8sR0FBRyxDQUFDLENBQUM7RUFBRUMsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUFDO0FBQUE7QUFFakQsU0FBU0MsTUFBTSxDQUFFQyxDQUFDLEVBQUU7RUFDbEIsT0FBT0MsZUFBQyxDQUFDQyxRQUFRLENBQUNGLENBQUMsQ0FBQyxHQUFJQSxDQUFDLENBQUNHLFdBQVcsRUFBRSxLQUFLLE1BQU0sR0FBSSxDQUFDLENBQUNILENBQUM7QUFDM0Q7QUFFQUosUUFBUSxDQUFDUSxNQUFNLEdBQUcsZUFBZUEsTUFBTSxHQUFJO0VBQ3pDLE9BQU8sTUFBTSxJQUFJLENBQUNDLFlBQVksQ0FBQ0MsT0FBTyxDQUFDQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDO0FBQzFFLENBQUM7QUFFRFgsUUFBUSxDQUFDWSxZQUFZLEdBQUcsZ0JBQWdCQyxTQUFTLEVBQUVDLFNBQVMsRUFBRTtFQUM1RCxPQUFPLE1BQU0sSUFBSSxDQUFDTCxZQUFZLENBQUNDLE9BQU8sQ0FBQ0MsT0FBTyxDQUFFLFlBQVdHLFNBQVUsY0FBYUQsU0FBVSxFQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNHLENBQUM7QUFFRGIsUUFBUSxDQUFDZSxnQkFBZ0IsR0FBRyxnQkFBZ0JE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
|
|
154
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kcyIsImhlbHBlcnMiLCJleHRlbnNpb25zIiwidG9Cb29sIiwicyIsIl8iLCJpc1N0cmluZyIsInRvTG93ZXJDYXNlIiwiYWN0aXZlIiwidWlhdXRvbWF0b3IyIiwiandwcm94eSIsImNvbW1hbmQiLCJnZXRBdHRyaWJ1dGUiLCJhdHRyaWJ1dGUiLCJlbGVtZW50SWQiLCJlbGVtZW50RGlzcGxheWVkIiwiZWxlbWVudEVuYWJsZWQiLCJlbGVtZW50U2VsZWN0ZWQiLCJnZXROYW1lIiwiZ2V0TG9jYXRpb24iLCJnZXRTaXplIiwidG91Y2hMb25nQ2xpY2siLCJlbGVtZW50IiwieCIsInkiLCJkdXJhdGlvbiIsInBhcmFtcyIsInRvdWNoRG93biIsInRvdWNoVXAiLCJ0b3VjaE1vdmUiLCJkb1NldEVsZW1lbnRWYWx1ZSIsInNldFZhbHVlSW1tZWRpYXRlIiwia2V5cyIsInRleHQiLCJpc0FycmF5Iiwiam9pbiIsInJlcGxhY2UiLCJnZXRUZXh0IiwiY2xpY2siLCJnZXRFbGVtZW50U2NyZWVuc2hvdCIsInRhcCIsImNvdW50IiwiYXJlQ29vcmRpbmF0ZXNEZWZpbmVkIiwidXRpbCIsImhhc1ZhbHVlIiwiRXJyb3IiLCJpIiwiVzNDX0VMRU1FTlRfS0VZIiwiY2xlYXIiLCJnZXRFbGVtZW50UmVjdCIsImlzV2ViQ29udGV4dCIsImxvZyIsImRlYnVnIiwiY2hyb21lZHJpdmVyIiwiZG93bnN0cmVhbVByb3RvY29sIiwiUFJPVE9DT0xTIiwiTUpTT05XUCIsIndpZHRoIiwiaGVpZ2h0IiwiT2JqZWN0IiwiYXNzaWduIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL2VsZW1lbnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHV0aWwgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBQUk9UT0NPTFMsIFczQ19FTEVNRU5UX0tFWSB9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuXG5sZXQgY29tbWFuZHMgPSB7fSwgaGVscGVycyA9IHt9LCBleHRlbnNpb25zID0ge307XG5cbmZ1bmN0aW9uIHRvQm9vbCAocykge1xuICByZXR1cm4gXy5pc1N0cmluZyhzKSA/IChzLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJykgOiAhIXM7XG59XG5cbmNvbW1hbmRzLmFjdGl2ZSA9IGFzeW5jIGZ1bmN0aW9uIGFjdGl2ZSAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9lbGVtZW50L2FjdGl2ZScsICdHRVQnKTtcbn07XG5cbmNvbW1hbmRzLmdldEF0dHJpYnV0ZSA9IGFzeW5jIGZ1bmN0aW9uIChhdHRyaWJ1dGUsIGVsZW1lbnRJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvZWxlbWVudC8ke2VsZW1lbnRJZH0vYXR0cmlidXRlLyR7YXR0cmlidXRlfWAsICdHRVQnLCB7fSk7XG59O1xuXG5jb21tYW5kcy5lbGVtZW50RGlzcGxheWVkID0gYXN5bmMgZnVuY3Rpb24gKGVsZW1lbnRJZCkge1xuICByZXR1cm4gdG9Cb29sKGF3YWl0IHRoaXMuZ2V0QXR0cmlidXRlKCdkaXNwbGF5ZWQnLCBlbGVtZW50SWQpKTtcbn07XG5cbmNvbW1hbmRzLmVsZW1lbnRFbmFibGVkID0gYXN5bmMgZnVuY3Rpb24gKGVsZW1lbnRJZCkge1xuICByZXR1cm4gdG9Cb29sKGF3YWl0IHRoaXMuZ2V0QXR0cmlidXRlKCdlbmFibGVkJywgZWxlbWVudElkKSk7XG59O1xuXG5jb21tYW5kcy5lbGVtZW50U2VsZWN0ZWQgPSBhc3luYyBmdW5jdGlvbiAoZWxlbWVudElkKSB7XG4gIHJldHVybiB0b0Jvb2woYXdhaXQgdGhpcy5nZXRBdHRyaWJ1dGUoJ3NlbGVjdGVkJywgZWxlbWVudElkKSk7XG59O1xuXG5jb21tYW5kcy5nZXROYW1lID0gYXN5bmMgZnVuY3Rpb24gKGVsZW1lbnRJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvZWxlbWVudC8ke2VsZW1lbnRJZH0vbmFtZWAsICdHRVQnLCB7fSk7XG59O1xuXG5jb21tYW5kcy5nZXRMb2NhdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIChlbGVtZW50SWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL2VsZW1lbnQvJHtlbGVtZW50SWR9L2xvY2F0aW9uYCwgJ0dFVCcsIHt9KTtcbn07XG5cbmNvbW1hbmRzLmdldFNpemUgPSBhc3luYyBmdW5jdGlvbiAoZWxlbWVudElkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC9lbGVtZW50LyR7ZWxlbWVudElkfS9zaXplYCwgJ0dFVCcsIHt9KTtcbn07XG5cbmNvbW1hbmRzLnRvdWNoTG9uZ0NsaWNrID0gYXN5bmMgZnVuY3Rpb24gKGVsZW1lbnQsIHgsIHksIGR1cmF0aW9uKSB7XG4gIGxldCBwYXJhbXMgPSB7ZWxlbWVudCwgeCwgeSwgZHVyYXRpb259O1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvdG91Y2gvbG9uZ2NsaWNrYCwgJ1BPU1QnLCB7cGFyYW1zfSk7XG59O1xuXG5jb21tYW5kcy50b3VjaERvd24gPSBhc3luYyBmdW5jdGlvbiAoZWxlbWVudCwgeCwgeSkge1xuICBsZXQgcGFyYW1zID0ge2VsZW1lbnQsIHgsIHl9O1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvdG91Y2gvZG93bmAsICdQT1NUJywge3BhcmFtc30pO1xufTtcblxuY29tbWFuZHMudG91Y2hVcCA9IGFzeW5jIGZ1bmN0aW9uIChlbGVtZW50LCB4LCB5KSB7XG4gIGxldCBwYXJhbXMgPSB7ZWxlbWVudCwgeCwgeX07XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC90b3VjaC91cGAsICdQT1NUJywge3BhcmFtc30pO1xufTtcblxuY29tbWFuZHMudG91Y2hNb3ZlID0gYXN5bmMgZnVuY3Rpb24gKGVsZW1lbnQsIHgsIHkpIHtcbiAgbGV0IHBhcmFtcyA9IHtlbGVtZW50LCB4LCB5fTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL3RvdWNoL21vdmVgLCAnUE9TVCcsIHtwYXJhbXN9KTtcbn07XG5cbmhlbHBlcnMuZG9TZXRFbGVtZW50VmFsdWUgPSBhc3luYyBmdW5jdGlvbiAocGFyYW1zKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC9lbGVtZW50LyR7cGFyYW1zLmVsZW1lbnRJZH0vdmFsdWVgLCAnUE9TVCcsIHBhcmFtcyk7XG59O1xuXG5jb21tYW5kcy5zZXRWYWx1ZUltbWVkaWF0ZSA9IGFzeW5jIGZ1bmN0aW9uIChrZXlzLCBlbGVtZW50SWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL2VsZW1lbnQvJHtlbGVtZW50SWR9L3ZhbHVlYCwgJ1BPU1QnLCB7XG4gICAgZWxlbWVudElkLFxuICAgIHRleHQ6IF8uaXNBcnJheShrZXlzKSA/IGtleXMuam9pbignJykgOiBrZXlzLFxuICAgIHJlcGxhY2U6IGZhbHNlXG4gIH0pO1xufTtcblxuY29tbWFuZHMuZ2V0VGV4dCA9IGFzeW5jIGZ1bmN0aW9uIChlbGVtZW50SWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL2VsZW1lbnQvJHtlbGVtZW50SWR9L3RleHRgLCAnR0VUJywge30pO1xufTtcblxuY29tbWFuZHMuY2xpY2sgPSBhc3luYyBmdW5jdGlvbiAoZWxlbWVudCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvZWxlbWVudC8ke2VsZW1lbnR9L2NsaWNrYCwgJ1BPU1QnLCB7ZWxlbWVudH0pO1xufTtcblxuY29tbWFuZHMuZ2V0RWxlbWVudFNjcmVlbnNob3QgPSBhc3luYyBmdW5jdGlvbiAoZWxlbWVudCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvZWxlbWVudC8ke2VsZW1lbnR9L3NjcmVlbnNob3RgLCAnR0VUJywge30pO1xufTtcblxuY29tbWFuZHMudGFwID0gYXN5bmMgZnVuY3Rpb24gKGVsZW1lbnRJZCA9IG51bGwsIHggPSBudWxsLCB5ID0gbnVsbCwgY291bnQgPSAxKSB7XG4gIGNvbnN0IGFyZUNvb3JkaW5hdGVzRGVmaW5lZCA9IHV0aWwuaGFzVmFsdWUoeCkgJiYgdXRpbC5oYXNWYWx1ZSh5KTtcbiAgaWYgKCF1dGlsLmhhc1ZhbHVlKGVsZW1lbnRJZCkgJiYgIWFyZUNvb3JkaW5hdGVzRGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRWl0aGVyIGVsZW1lbnQgaWQgdG8gdGFwIG9yIGJvdGggYWJzb2x1dGUgY29vcmRpbmF0ZXMgc2hvdWxkIGJlIGRlZmluZWRgKTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgIGlmICh1dGlsLmhhc1ZhbHVlKGVsZW1lbnRJZCkgJiYgIWFyZUNvb3JkaW5hdGVzRGVmaW5lZCkge1xuICAgICAgLy8gd2UgYXJlIGVpdGhlciB0YXBwaW5nIG9uIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBlbGVtZW50XG4gICAgICAvLyBvciBhbiBvZmZzZXQgZnJvbSB0aGUgdG9wIGxlZnQgY29ybmVyXG4gICAgICBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC9lbGVtZW50LyR7ZWxlbWVudElkfS9jbGlja2AsICdQT1NUJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS90YXBgLCAnUE9TVCcsIHtcbiAgICAgICAgeCwgeSxcbiAgICAgICAgW1czQ19FTEVNRU5UX0tFWV06IGVsZW1lbnRJZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufTtcblxuY29tbWFuZHMuY2xlYXIgPSBhc3luYyBmdW5jdGlvbiAoZWxlbWVudElkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC9lbGVtZW50LyR7ZWxlbWVudElkfS9jbGVhcmAsICdQT1NUJywge2VsZW1lbnRJZH0pO1xufTtcblxuY29tbWFuZHMuZ2V0RWxlbWVudFJlY3QgPSBhc3luYyBmdW5jdGlvbiAoZWxlbWVudElkKSB7XG4gIGlmICh0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhpcy5sb2cuZGVidWcoYERldGVjdGVkIGRvd25zdHJlYW0gY2hyb21lZHJpdmVyIHByb3RvY29sOiAke3RoaXMuY2hyb21lZHJpdmVyLmp3cHJveHkuZG93bnN0cmVhbVByb3RvY29sfWApO1xuICAgIGlmICh0aGlzLmNocm9tZWRyaXZlci5qd3Byb3h5LmRvd25zdHJlYW1Qcm90b2NvbCA9PT0gUFJPVE9DT0xTLk1KU09OV1ApIHtcbiAgICAgIGNvbnN0IHt4LCB5fSA9IGF3YWl0IHRoaXMuY2hyb21lZHJpdmVyLmp3cHJveHkuY29tbWFuZChgL2VsZW1lbnQvJHtlbGVtZW50SWR9L2xvY2F0aW9uYCwgJ0dFVCcpO1xuICAgICAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gYXdhaXQgdGhpcy5jaHJvbWVkcml2ZXIuandwcm94eS5jb21tYW5kKGAvZWxlbWVudC8ke2VsZW1lbnRJZH0vc2l6ZWAsICdHRVQnKTtcbiAgICAgIHJldHVybiB7eCwgeSwgd2lkdGgsIGhlaWdodH07XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCB0aGlzLmNocm9tZWRyaXZlci5qd3Byb3h5LmNvbW1hbmQoYC9lbGVtZW50LyR7ZWxlbWVudElkfS9yZWN0YCwgJ0dFVCcpO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC9lbGVtZW50LyR7ZWxlbWVudElkfS9yZWN0YCwgJ0dFVCcpO1xufTtcblxuT2JqZWN0LmFzc2lnbihleHRlbnNpb25zLCBjb21tYW5kcywgaGVscGVycyk7XG5leHBvcnQgeyBjb21tYW5kcywgaGVscGVycyB9O1xuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFFQSxJQUFJQSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0VBQUVDLE9BQU8sR0FBRyxDQUFDLENBQUM7RUFBRUMsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUFDO0FBQUE7QUFFakQsU0FBU0MsTUFBTSxDQUFFQyxDQUFDLEVBQUU7RUFDbEIsT0FBT0MsZUFBQyxDQUFDQyxRQUFRLENBQUNGLENBQUMsQ0FBQyxHQUFJQSxDQUFDLENBQUNHLFdBQVcsRUFBRSxLQUFLLE1BQU0sR0FBSSxDQUFDLENBQUNILENBQUM7QUFDM0Q7QUFFQUosUUFBUSxDQUFDUSxNQUFNLEdBQUcsZUFBZUEsTUFBTSxHQUFJO0VBQ3pDLE9BQU8sTUFBTSxJQUFJLENBQUNDLFlBQVksQ0FBQ0MsT0FBTyxDQUFDQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDO0FBQzFFLENBQUM7QUFFRFgsUUFBUSxDQUFDWSxZQUFZLEdBQUcsZ0JBQWdCQyxTQUFTLEVBQUVDLFNBQVMsRUFBRTtFQUM1RCxPQUFPLE1BQU0sSUFBSSxDQUFDTCxZQUFZLENBQUNDLE9BQU8sQ0FBQ0MsT0FBTyxDQUFFLFlBQVdHLFNBQVUsY0FBYUQsU0FBVSxFQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNHLENBQUM7QUFFRGIsUUFBUSxDQUFDZSxnQkFBZ0IsR0FBRyxnQkFBZ0JELFNBQVMsRUFBRTtFQUNyRCxPQUFPWCxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUNTLFlBQVksQ0FBQyxXQUFXLEVBQUVFLFNBQVMs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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"element.js","names":["commands","helpers","extensions","toBool","s","_","isString","toLowerCase","active","uiautomator2","jwproxy","command","getAttribute","attribute","elementId","elementDisplayed","elementEnabled","elementSelected","getName","getLocation","getSize","touchLongClick","element","x","y","duration","params","touchDown","touchUp","touchMove","doSetElementValue","setValueImmediate","keys","text","isArray","join","replace","unicodeKeyboard","opts","getText","click","getElementScreenshot","tap","count","areCoordinatesDefined","util","hasValue","Error","i","W3C_ELEMENT_KEY","clear","getElementRect","isWebContext","log","debug","chromedriver","downstreamProtocol","PROTOCOLS","MJSONWP","width","height","Object","assign"],"sources":["../../../lib/commands/element.js"],"sourcesContent":["import _ from 'lodash';\nimport { util } from 'appium/support';\nimport { PROTOCOLS, W3C_ELEMENT_KEY } from 'appium/driver';\n\nlet commands = {}, helpers = {}, extensions = {};\n\nfunction toBool (s) {\n return _.isString(s) ? (s.toLowerCase() === 'true') : !!s;\n}\n\ncommands.active = async function active () {\n return await this.uiautomator2.jwproxy.command('/element/active', 'GET');\n};\n\ncommands.getAttribute = async function (attribute, elementId) {\n return await this.uiautomator2.jwproxy.command(`/element/${elementId}/attribute/${attribute}`, 'GET', {});\n};\n\ncommands.elementDisplayed = async function (elementId) {\n return toBool(await this.getAttribute('displayed', elementId));\n};\n\ncommands.elementEnabled = async function (elementId) {\n return toBool(await this.getAttribute('enabled', elementId));\n};\n\ncommands.elementSelected = async function (elementId) {\n return toBool(await this.getAttribute('selected', elementId));\n};\n\ncommands.getName = async function (elementId) {\n return await this.uiautomator2.jwproxy.command(`/element/${elementId}/name`, 'GET', {});\n};\n\ncommands.getLocation = async function (elementId) {\n return await this.uiautomator2.jwproxy.command(`/element/${elementId}/location`, 'GET', {});\n};\n\ncommands.getSize = async function (elementId) {\n return await this.uiautomator2.jwproxy.command(`/element/${elementId}/size`, 'GET', {});\n};\n\ncommands.touchLongClick = async function (element, x, y, duration) {\n let params = {element, x, y, duration};\n return await this.uiautomator2.jwproxy.command(`/touch/longclick`, 'POST', {params});\n};\n\ncommands.touchDown = async function (element, x, y) {\n let params = {element, x, y};\n return await this.uiautomator2.jwproxy.command(`/touch/down`, 'POST', {params});\n};\n\ncommands.touchUp = async function (element, x, y) {\n let params = {element, x, y};\n return await this.uiautomator2.jwproxy.command(`/touch/up`, 'POST', {params});\n};\n\ncommands.touchMove = async function (element, x, y) {\n let params = {element, x, y};\n return await this.uiautomator2.jwproxy.command(`/touch/move`, 'POST', {params});\n};\n\nhelpers.doSetElementValue = async function (params) {\n return await this.uiautomator2.jwproxy.command(`/element/${params.elementId}/value`, 'POST', params);\n};\n\ncommands.setValueImmediate = async function (keys, elementId) {\n return await this.uiautomator2.jwproxy.command(`/element/${elementId}/value`, 'POST', {\n elementId,\n text: _.isArray(keys) ? keys.join('') : keys,\n replace: false,\n unicodeKeyboard: this.opts.unicodeKeyboard,\n });\n};\n\ncommands.getText = async function (elementId) {\n return await this.uiautomator2.jwproxy.command(`/element/${elementId}/text`, 'GET', {});\n};\n\ncommands.click = async function (element) {\n return await this.uiautomator2.jwproxy.command(`/element/${element}/click`, 'POST', {element});\n};\n\ncommands.getElementScreenshot = async function (element) {\n return await this.uiautomator2.jwproxy.command(`/element/${element}/screenshot`, 'GET', {});\n};\n\ncommands.tap = async function (elementId = null, x = null, y = null, count = 1) {\n const areCoordinatesDefined = util.hasValue(x) && util.hasValue(y);\n if (!util.hasValue(elementId) && !areCoordinatesDefined) {\n throw new Error(`Either element id to tap or both absolute coordinates should be defined`);\n }\n\n for (let i = 0; i < count; i++) {\n if (util.hasValue(elementId) && !areCoordinatesDefined) {\n // we are either tapping on the default location of the element\n // or an offset from the top left corner\n await this.uiautomator2.jwproxy.command(`/element/${elementId}/click`, 'POST');\n } else {\n await this.uiautomator2.jwproxy.command(`/appium/tap`, 'POST', {\n x, y,\n [W3C_ELEMENT_KEY]: elementId,\n });\n }\n }\n};\n\ncommands.clear = async function (elementId) {\n return await this.uiautomator2.jwproxy.command(`/element/${elementId}/clear`, 'POST', {elementId});\n};\n\ncommands.getElementRect = async function (elementId) {\n if (this.isWebContext()) {\n this.log.debug(`Detected downstream chromedriver protocol: ${this.chromedriver.jwproxy.downstreamProtocol}`);\n if (this.chromedriver.jwproxy.downstreamProtocol === PROTOCOLS.MJSONWP) {\n const {x, y} = await this.chromedriver.jwproxy.command(`/element/${elementId}/location`, 'GET');\n const {width, height} = await this.chromedriver.jwproxy.command(`/element/${elementId}/size`, 'GET');\n return {x, y, width, height};\n }\n return await this.chromedriver.jwproxy.command(`/element/${elementId}/rect`, 'GET');\n }\n return await this.uiautomator2.jwproxy.command(`/element/${elementId}/rect`, 'GET');\n};\n\nObject.assign(extensions, commands, helpers);\nexport { commands, helpers };\nexport default extensions;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"element.js","names":["commands","helpers","extensions","toBool","s","_","isString","toLowerCase","active","uiautomator2","jwproxy","command","getAttribute","attribute","elementId","elementDisplayed","elementEnabled","elementSelected","getName","getLocation","getSize","touchLongClick","element","x","y","duration","params","touchDown","touchUp","touchMove","doSetElementValue","setValueImmediate","keys","text","isArray","join","replace","getText","click","getElementScreenshot","tap","count","areCoordinatesDefined","util","hasValue","Error","i","W3C_ELEMENT_KEY","clear","getElementRect","isWebContext","log","debug","chromedriver","downstreamProtocol","PROTOCOLS","MJSONWP","width","height","Object","assign"],"sources":["../../../lib/commands/element.js"],"sourcesContent":["import _ from 'lodash';\nimport { util } from 'appium/support';\nimport { PROTOCOLS, W3C_ELEMENT_KEY } from 'appium/driver';\n\nlet commands = {}, helpers = {}, extensions = {};\n\nfunction toBool (s) {\n return _.isString(s) ? (s.toLowerCase() === 'true') : !!s;\n}\n\ncommands.active = async function active () {\n return await this.uiautomator2.jwproxy.command('/element/active', 'GET');\n};\n\ncommands.getAttribute = async function (attribute, elementId) {\n return await this.uiautomator2.jwproxy.command(`/element/${elementId}/attribute/${attribute}`, 'GET', {});\n};\n\ncommands.elementDisplayed = async function (elementId) {\n return toBool(await this.getAttribute('displayed', elementId));\n};\n\ncommands.elementEnabled = async function (elementId) {\n return toBool(await this.getAttribute('enabled', elementId));\n};\n\ncommands.elementSelected = async function (elementId) {\n return toBool(await this.getAttribute('selected', elementId));\n};\n\ncommands.getName = async function (elementId) {\n return await this.uiautomator2.jwproxy.command(`/element/${elementId}/name`, 'GET', {});\n};\n\ncommands.getLocation = async function (elementId) {\n return await this.uiautomator2.jwproxy.command(`/element/${elementId}/location`, 'GET', {});\n};\n\ncommands.getSize = async function (elementId) {\n return await this.uiautomator2.jwproxy.command(`/element/${elementId}/size`, 'GET', {});\n};\n\ncommands.touchLongClick = async function (element, x, y, duration) {\n let params = {element, x, y, duration};\n return await this.uiautomator2.jwproxy.command(`/touch/longclick`, 'POST', {params});\n};\n\ncommands.touchDown = async function (element, x, y) {\n let params = {element, x, y};\n return await this.uiautomator2.jwproxy.command(`/touch/down`, 'POST', {params});\n};\n\ncommands.touchUp = async function (element, x, y) {\n let params = {element, x, y};\n return await this.uiautomator2.jwproxy.command(`/touch/up`, 'POST', {params});\n};\n\ncommands.touchMove = async function (element, x, y) {\n let params = {element, x, y};\n return await this.uiautomator2.jwproxy.command(`/touch/move`, 'POST', {params});\n};\n\nhelpers.doSetElementValue = async function (params) {\n return await this.uiautomator2.jwproxy.command(`/element/${params.elementId}/value`, 'POST', params);\n};\n\ncommands.setValueImmediate = async function (keys, elementId) {\n return await this.uiautomator2.jwproxy.command(`/element/${elementId}/value`, 'POST', {\n elementId,\n text: _.isArray(keys) ? keys.join('') : keys,\n replace: false\n });\n};\n\ncommands.getText = async function (elementId) {\n return await this.uiautomator2.jwproxy.command(`/element/${elementId}/text`, 'GET', {});\n};\n\ncommands.click = async function (element) {\n return await this.uiautomator2.jwproxy.command(`/element/${element}/click`, 'POST', {element});\n};\n\ncommands.getElementScreenshot = async function (element) {\n return await this.uiautomator2.jwproxy.command(`/element/${element}/screenshot`, 'GET', {});\n};\n\ncommands.tap = async function (elementId = null, x = null, y = null, count = 1) {\n const areCoordinatesDefined = util.hasValue(x) && util.hasValue(y);\n if (!util.hasValue(elementId) && !areCoordinatesDefined) {\n throw new Error(`Either element id to tap or both absolute coordinates should be defined`);\n }\n\n for (let i = 0; i < count; i++) {\n if (util.hasValue(elementId) && !areCoordinatesDefined) {\n // we are either tapping on the default location of the element\n // or an offset from the top left corner\n await this.uiautomator2.jwproxy.command(`/element/${elementId}/click`, 'POST');\n } else {\n await this.uiautomator2.jwproxy.command(`/appium/tap`, 'POST', {\n x, y,\n [W3C_ELEMENT_KEY]: elementId,\n });\n }\n }\n};\n\ncommands.clear = async function (elementId) {\n return await this.uiautomator2.jwproxy.command(`/element/${elementId}/clear`, 'POST', {elementId});\n};\n\ncommands.getElementRect = async function (elementId) {\n if (this.isWebContext()) {\n this.log.debug(`Detected downstream chromedriver protocol: ${this.chromedriver.jwproxy.downstreamProtocol}`);\n if (this.chromedriver.jwproxy.downstreamProtocol === PROTOCOLS.MJSONWP) {\n const {x, y} = await this.chromedriver.jwproxy.command(`/element/${elementId}/location`, 'GET');\n const {width, height} = await this.chromedriver.jwproxy.command(`/element/${elementId}/size`, 'GET');\n return {x, y, width, height};\n }\n return await this.chromedriver.jwproxy.command(`/element/${elementId}/rect`, 'GET');\n }\n return await this.uiautomator2.jwproxy.command(`/element/${elementId}/rect`, 'GET');\n};\n\nObject.assign(extensions, commands, helpers);\nexport { commands, helpers };\nexport default extensions;\n"],"mappings":";;;;;;;;AAAA;AACA;AACA;AAEA,IAAIA,QAAQ,GAAG,CAAC,CAAC;EAAEC,OAAO,GAAG,CAAC,CAAC;EAAEC,UAAU,GAAG,CAAC,CAAC;AAAC;AAAA;AAEjD,SAASC,MAAM,CAAEC,CAAC,EAAE;EAClB,OAAOC,eAAC,CAACC,QAAQ,CAACF,CAAC,CAAC,GAAIA,CAAC,CAACG,WAAW,EAAE,KAAK,MAAM,GAAI,CAAC,CAACH,CAAC;AAC3D;AAEAJ,QAAQ,CAACQ,MAAM,GAAG,eAAeA,MAAM,GAAI;EACzC,OAAO,MAAM,IAAI,CAACC,YAAY,CAACC,OAAO,CAACC,OAAO,CAAC,iBAAiB,EAAE,KAAK,CAAC;AAC1E,CAAC;AAEDX,QAAQ,CAACY,YAAY,GAAG,gBAAgBC,SAAS,EAAEC,SAAS,EAAE;EAC5D,OAAO,MAAM,IAAI,CAACL,YAAY,CAACC,OAAO,CAACC,OAAO,CAAE,YAAWG,SAAU,cAAaD,SAAU,EAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAC3G,CAAC;AAEDb,QAAQ,CAACe,gBAAgB,GAAG,gBAAgBD,SAAS,EAAE;EACrD,OAAOX,MAAM,CAAC,MAAM,IAAI,CAACS,YAAY,CAAC,WAAW,EAAEE,SAAS,CAAC,CAAC;AAChE,CAAC;AAEDd,QAAQ,CAACgB,cAAc,GAAG,gBAAgBF,SAAS,EAAE;EACnD,OAAOX,MAAM,CAAC,MAAM,IAAI,CAACS,YAAY,CAAC,SAAS,EAAEE,SAAS,CAAC,CAAC;AAC9D,CAAC;AAEDd,QAAQ,CAACiB,eAAe,GAAG,gBAAgBH,SAAS,EAAE;EACpD,OAAOX,MAAM,CAAC,MAAM,IAAI,CAACS,YAAY,CAAC,UAAU,EAAEE,SAAS,CAAC,CAAC;AAC/D,CAAC;AAEDd,QAAQ,CAACkB,OAAO,GAAG,gBAAgBJ,SAAS,EAAE;EAC5C,OAAO,MAAM,IAAI,CAACL,YAAY,CAACC,OAAO,CAACC,OAAO,CAAE,YAAWG,SAAU,OAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AACzF,CAAC;AAEDd,QAAQ,CAACmB,WAAW,GAAG,gBAAgBL,SAAS,EAAE;EAChD,OAAO,MAAM,IAAI,CAACL,YAAY,CAACC,OAAO,CAACC,OAAO,CAAE,YAAWG,SAAU,WAAU,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAC7F,CAAC;AAEDd,QAAQ,CAACoB,OAAO,GAAG,gBAAgBN,SAAS,EAAE;EAC5C,OAAO,MAAM,IAAI,CAACL,YAAY,CAACC,OAAO,CAACC,OAAO,CAAE,YAAWG,SAAU,OAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AACzF,CAAC;AAEDd,QAAQ,CAACqB,cAAc,GAAG,gBAAgBC,OAAO,EAAEC,CAAC,EAAEC,CAAC,EAAEC,QAAQ,EAAE;EACjE,IAAIC,MAAM,GAAG;IAACJ,OAAO;IAAEC,CAAC;IAAEC,CAAC;IAAEC;EAAQ,CAAC;EACtC,OAAO,MAAM,IAAI,CAAChB,YAAY,CAACC,OAAO,CAACC,OAAO,CAAE,kBAAiB,EAAE,MAAM,EAAE;IAACe;EAAM,CAAC,CAAC;AACtF,CAAC;AAED1B,QAAQ,CAAC2B,SAAS,GAAG,gBAAgBL,OAAO,EAAEC,CAAC,EAAEC,CAAC,EAAE;EAClD,IAAIE,MAAM,GAAG;IAACJ,OAAO;IAAEC,CAAC;IAAEC;EAAC,CAAC;EAC5B,OAAO,MAAM,IAAI,CAACf,YAAY,CAACC,OAAO,CAACC,OAAO,CAAE,aAAY,EAAE,MAAM,EAAE;IAACe;EAAM,CAAC,CAAC;AACjF,CAAC;AAED1B,QAAQ,CAAC4B,OAAO,GAAG,gBAAgBN,OAAO,EAAEC,CAAC,EAAEC,CAAC,EAAE;EAChD,IAAIE,MAAM,GAAG;IAACJ,OAAO;IAAEC,CAAC;IAAEC;EAAC,CAAC;EAC5B,OAAO,MAAM,IAAI,CAACf,YAAY,CAACC,OAAO,CAACC,OAAO,CAAE,WAAU,EAAE,MAAM,EAAE;IAACe;EAAM,CAAC,CAAC;AAC/E,CAAC;AAED1B,QAAQ,CAAC6B,SAAS,GAAG,gBAAgBP,OAAO,EAAEC,CAAC,EAAEC,CAAC,EAAE;EAClD,IAAIE,MAAM,GAAG;IAACJ,OAAO;IAAEC,CAAC;IAAEC;EAAC,CAAC;EAC5B,OAAO,MAAM,IAAI,CAACf,YAAY,CAACC,OAAO,CAACC,OAAO,CAAE,aAAY,EAAE,MAAM,EAAE;IAACe;EAAM,CAAC,CAAC;AACjF,CAAC;AAEDzB,OAAO,CAAC6B,iBAAiB,GAAG,gBAAgBJ,MAAM,EAAE;EAClD,OAAO,MAAM,IAAI,CAACjB,YAAY,CAACC,OAAO,CAACC,OAAO,CAAE,YAAWe,MAAM,CAACZ,SAAU,QAAO,EAAE,MAAM,EAAEY,MAAM,CAAC;AACtG,CAAC;AAED1B,QAAQ,CAAC+B,iBAAiB,GAAG,gBAAgBC,IAAI,EAAElB,SAAS,EAAE;EAC5D,OAAO,MAAM,IAAI,CAACL,YAAY,CAACC,OAAO,CAACC,OAAO,CAAE,YAAWG,SAAU,QAAO,EAAE,MAAM,EAAE;IACpFA,SAAS;IACTmB,IAAI,EAAE5B,eAAC,CAAC6B,OAAO,CAACF,IAAI,CAAC,GAAGA,IAAI,CAACG,IAAI,CAAC,EAAE,CAAC,GAAGH,IAAI;IAC5CI,OAAO,EAAE;EACX,CAAC,CAAC;AACJ,CAAC;AAEDpC,QAAQ,CAACqC,OAAO,GAAG,gBAAgBvB,SAAS,EAAE;EAC5C,OAAO,MAAM,IAAI,CAACL,YAAY,CAACC,OAAO,CAACC,OAAO,CAAE,YAAWG,SAAU,OAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AACzF,CAAC;AAEDd,QAAQ,CAACsC,KAAK,GAAG,gBAAgBhB,OAAO,EAAE;EACxC,OAAO,MAAM,IAAI,CAACb,YAAY,CAACC,OAAO,CAACC,OAAO,CAAE,YAAWW,OAAQ,QAAO,EAAE,MAAM,EAAE;IAACA;EAAO,CAAC,CAAC;AAChG,CAAC;AAEDtB,QAAQ,CAACuC,oBAAoB,GAAG,gBAAgBjB,OAAO,EAAE;EACvD,OAAO,MAAM,IAAI,CAACb,YAAY,CAACC,OAAO,CAACC,OAAO,CAAE,YAAWW,OAAQ,aAAY,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAC7F,CAAC;AAEDtB,QAAQ,CAACwC,GAAG,GAAG,gBAAgB1B,SAAS,GAAG,IAAI,EAAES,CAAC,GAAG,IAAI,EAAEC,CAAC,GAAG,IAAI,EAAEiB,KAAK,GAAG,CAAC,EAAE;EAC9E,MAAMC,qBAAqB,GAAGC,aAAI,CAACC,QAAQ,CAACrB,CAAC,CAAC,IAAIoB,aAAI,CAACC,QAAQ,CAACpB,CAAC,CAAC;EAClE,IAAI,CAACmB,aAAI,CAACC,QAAQ,CAAC9B,SAAS,CAAC,IAAI,CAAC4B,qBAAqB,EAAE;IACvD,MAAM,IAAIG,KAAK,CAAE,yEAAwE,CAAC;EAC5F;EAEA,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGL,KAAK,EAAEK,CAAC,EAAE,EAAE;IAC9B,IAAIH,aAAI,CAACC,QAAQ,CAAC9B,SAAS,CAAC,IAAI,CAAC4B,qBAAqB,EAAE;MAGtD,MAAM,IAAI,CAACjC,YAAY,CAACC,OAAO,CAACC,OAAO,CAAE,YAAWG,SAAU,QAAO,EAAE,MAAM,CAAC;IAChF,CAAC,MAAM;MACL,MAAM,IAAI,CAACL,YAAY,CAACC,OAAO,CAACC,OAAO,CAAE,aAAY,EAAE,MAAM,EAAE;QAC7DY,CAAC;QAAEC,CAAC;QACJ,CAACuB,uBAAe,GAAGjC;MACrB,CAAC,CAAC;IACJ;EACF;AACF,CAAC;AAEDd,QAAQ,CAACgD,KAAK,GAAG,gBAAgBlC,SAAS,EAAE;EAC1C,OAAO,MAAM,IAAI,CAACL,YAAY,CAACC,OAAO,CAACC,OAAO,CAAE,YAAWG,SAAU,QAAO,EAAE,MAAM,EAAE;IAACA;EAAS,CAAC,CAAC;AACpG,CAAC;AAEDd,QAAQ,CAACiD,cAAc,GAAG,gBAAgBnC,SAAS,EAAE;EACnD,IAAI,IAAI,CAACoC,YAAY,EAAE,EAAE;IACvB,IAAI,CAACC,GAAG,CAACC,KAAK,CAAE,8CAA6C,IAAI,CAACC,YAAY,CAAC3C,OAAO,CAAC4C,kBAAmB,EAAC,CAAC;IAC5G,IAAI,IAAI,CAACD,YAAY,CAAC3C,OAAO,CAAC4C,kBAAkB,KAAKC,iBAAS,CAACC,OAAO,EAAE;MACtE,MAAM;QAACjC,CAAC;QAAEC;MAAC,CAAC,GAAG,MAAM,IAAI,CAAC6B,YAAY,CAAC3C,OAAO,CAACC,OAAO,CAAE,YAAWG,SAAU,WAAU,EAAE,KAAK,CAAC;MAC/F,MAAM;QAAC2C,KAAK;QAAEC;MAAM,CAAC,GAAG,MAAM,IAAI,CAACL,YAAY,CAAC3C,OAAO,CAACC,OAAO,CAAE,YAAWG,SAAU,OAAM,EAAE,KAAK,CAAC;MACpG,OAAO;QAACS,CAAC;QAAEC,CAAC;QAAEiC,KAAK;QAAEC;MAAM,CAAC;IAC9B;IACA,OAAO,MAAM,IAAI,CAACL,YAAY,CAAC3C,OAAO,CAACC,OAAO,CAAE,YAAWG,SAAU,OAAM,EAAE,KAAK,CAAC;EACrF;EACA,OAAO,MAAM,IAAI,CAACL,YAAY,CAACC,OAAO,CAACC,OAAO,CAAE,YAAWG,SAAU,OAAM,EAAE,KAAK,CAAC;AACrF,CAAC;AAED6C,MAAM,CAACC,MAAM,CAAC1D,UAAU,EAAEF,QAAQ,EAAEC,OAAO,CAAC;AAAC,eAE9BC,UAAU;AAAA"}
|
package/build/lib/driver.js
CHANGED
|
@@ -43,7 +43,6 @@ class AndroidUiautomator2Driver extends _driver.BaseDriver {
|
|
|
43
43
|
this.desiredCapConstraints = _desiredCaps.default;
|
|
44
44
|
this.uiautomator2 = null;
|
|
45
45
|
this.jwpProxyActive = false;
|
|
46
|
-
this.defaultIME = null;
|
|
47
46
|
this.jwpProxyAvoid = NO_PROXY;
|
|
48
47
|
this.apkStrings = {};
|
|
49
48
|
this.settings = new _driver.DeviceSettings({
|
|
@@ -218,7 +217,7 @@ class AndroidUiautomator2Driver extends _driver.BaseDriver {
|
|
|
218
217
|
Object.assign(this.opts, appInfo || {});
|
|
219
218
|
this.caps.deviceName = this.adb.curDeviceId;
|
|
220
219
|
this.caps.deviceUDID = this.opts.udid;
|
|
221
|
-
|
|
220
|
+
await helpers.initDevice(this.adb, this.opts);
|
|
222
221
|
await this.allocateSystemPort();
|
|
223
222
|
await this.allocateMjpegServerPort();
|
|
224
223
|
await this.initUiAutomator2Server();
|
|
@@ -410,14 +409,6 @@ class AndroidUiautomator2Driver extends _driver.BaseDriver {
|
|
|
410
409
|
} catch (ign) {}
|
|
411
410
|
})();
|
|
412
411
|
}));
|
|
413
|
-
if (this.opts.unicodeKeyboard && this.opts.resetKeyboard && this.defaultIME) {
|
|
414
|
-
this.log.debug(`Resetting IME to '${this.defaultIME}'`);
|
|
415
|
-
try {
|
|
416
|
-
await this.adb.setIME(this.defaultIME);
|
|
417
|
-
} catch (err) {
|
|
418
|
-
this.log.warn(`Unable to reset IME: ${err.message}`);
|
|
419
|
-
}
|
|
420
|
-
}
|
|
421
412
|
if (this.caps.androidCoverage) {
|
|
422
413
|
this.log.info('Shutting down the adb process of instrumentation...');
|
|
423
414
|
await this.adb.endAndroidCoverage();
|
|
@@ -526,4 +517,4 @@ for (let [cmd, fn] of _lodash.default.toPairs(_index.default)) {
|
|
|
526
517
|
}
|
|
527
518
|
var _default = AndroidUiautomator2Driver;
|
|
528
519
|
exports.default = _default;
|
|
529
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJoZWxwZXJzIiwiT2JqZWN0IiwiYXNzaWduIiwidWlhdXRvbWF0b3IySGVscGVycyIsImFuZHJvaWRIZWxwZXJzIiwiREVWSUNFX1BPUlRfUkFOR0UiLCJERVZJQ0VfUE9SVF9BTExPQ0FUSU9OX0dVQVJEIiwidXRpbCIsImdldExvY2tGaWxlR3VhcmQiLCJwYXRoIiwicmVzb2x2ZSIsIm9zIiwidG1wZGlyIiwidGltZW91dCIsInRyeVJlY292ZXJ5IiwiREVWSUNFX1BPUlQiLCJNSlBFR19TRVJWRVJfREVWSUNFX1BPUlQiLCJMT0NBTEhPU1RfSVA0IiwiTk9fUFJPWFkiLCJSZWdFeHAiLCJDSFJPTUVfTk9fUFJPWFkiLCJNRU1PSVpFRF9GVU5DVElPTlMiLCJBbmRyb2lkVWlhdXRvbWF0b3IyRHJpdmVyIiwiQmFzZURyaXZlciIsIm5ld01ldGhvZE1hcCIsImNvbnN0cnVjdG9yIiwib3B0cyIsInNob3VsZFZhbGlkYXRlQ2FwcyIsInNoZWxsIiwibG9jYXRvclN0cmF0ZWdpZXMiLCJkZXNpcmVkQ2FwQ29uc3RyYWludHMiLCJ1aWF1dG9tYXRvcjIiLCJqd3BQcm94eUFjdGl2ZSIsImRlZmF1bHRJTUUiLCJqd3BQcm94eUF2b2lkIiwiYXBrU3RyaW5ncyIsInNldHRpbmdzIiwiRGV2aWNlU2V0dGluZ3MiLCJpZ25vcmVVbmltcG9ydGFudFZpZXdzIiwiYWxsb3dJbnZpc2libGVFbGVtZW50cyIsIm9uU2V0dGluZ3NVcGRhdGUiLCJiaW5kIiwiY2hyb21lZHJpdmVyIiwic2Vzc2lvbkNocm9tZWRyaXZlcnMiLCJmbiIsIl8iLCJtZW1vaXplIiwidmFsaWRhdGVEZXNpcmVkQ2FwcyIsImNhcHMiLCJjcmVhdGVTZXNzaW9uIiwiYXJncyIsInNlc3Npb25JZCIsInNlcnZlckRldGFpbHMiLCJwbGF0Zm9ybSIsIndlYlN0b3JhZ2VFbmFibGVkIiwidGFrZXNTY3JlZW5zaG90IiwiamF2YXNjcmlwdEVuYWJsZWQiLCJkYXRhYmFzZUVuYWJsZWQiLCJuZXR3b3JrQ29ubmVjdGlvbkVuYWJsZWQiLCJsb2NhdGlvbkNvbnRleHRFbmFibGVkIiwid2FybmluZ3MiLCJkZXNpcmVkIiwiY3VyQ29udGV4dCIsImRlZmF1bHRDb250ZXh0TmFtZSIsImRlZmF1bHRPcHRzIiwiZnVsbFJlc2V0IiwiYXV0b0xhdW5jaCIsImFkYlBvcnQiLCJERUZBVUxUX0FEQl9QT1JUIiwiYW5kcm9pZEluc3RhbGxUaW1lb3V0IiwiZGVmYXVsdHMiLCJpc0Nocm9tZVNlc3Npb24iLCJsb2ciLCJpbmZvIiwicGtnIiwiYWN0aXZpdHkiLCJnZXRDaHJvbWVQa2ciLCJicm93c2VyTmFtZSIsImFwcFBhY2thZ2UiLCJhcHBBY3Rpdml0eSIsInJlYm9vdCIsInNldEF2ZEZyb21DYXBhYmlsaXRpZXMiLCJhcHAiLCJjb25maWd1cmVBcHAiLCJBUEtfRVhURU5TSU9OIiwiQVBLU19FWFRFTlNJT04iLCJjaGVja0FwcFByZXNlbnQiLCJzdGFydFVpQXV0b21hdG9yMlNlc3Npb24iLCJmaWxsRGV2aWNlRGV0YWlscyIsIm1qcGVnU2NyZWVuc2hvdFVybCIsIm1qcGVnU3RyZWFtIiwibWpwZWciLCJNSnBlZ1N0cmVhbSIsInN0YXJ0IiwiZSIsImRlbGV0ZVNlc3Npb24iLCJwaXhlbFJhdGlvIiwiZ2V0RGV2aWNlUGl4ZWxSYXRpbyIsInN0YXRCYXJIZWlnaHQiLCJnZXRTdGF0dXNCYXJIZWlnaHQiLCJ2aWV3cG9ydFJlY3QiLCJnZXRWaWV3UG9ydFJlY3QiLCJkcml2ZXJEYXRhIiwiZ2V0U2Vzc2lvbiIsInNlc3Npb25EYXRhIiwiZGVidWciLCJ1aWEyRGF0YSIsImp3cHJveHkiLCJjb21tYW5kIiwiaXNFbXVsYXRvciIsImFkYiIsImF2ZCIsImRldmljZU5hbWUiLCJlcnJvckFuZFRocm93IiwicGxhdGZvcm1WZXJzaW9uIiwiYXZkRGV2aWNlIiwicmVwbGFjZSIsImFsbG9jYXRlU3lzdGVtUG9ydCIsImZvcndhcmRQb3J0IiwibG9jYWxQb3J0IiwiY2hlY2tQb3J0U3RhdHVzIiwic3lzdGVtUG9ydCIsIl9oYXNTeXN0ZW1Qb3J0SW5DYXBzIiwic3RhcnRQb3J0IiwiZW5kUG9ydCIsImZpbmRBUG9ydE5vdEluVXNlIiwicmVsZWFzZVN5c3RlbVBvcnQiLCJyZW1vdmVQb3J0Rm9yd2FyZCIsImFsbG9jYXRlTWpwZWdTZXJ2ZXJQb3J0IiwibWpwZWdTZXJ2ZXJQb3J0IiwicmVsZWFzZU1qcGVnU2VydmVyUG9ydCIsInVkaWQiLCJlbVBvcnQiLCJnZXREZXZpY2VJbmZvRnJvbUNhcHMiLCJjcmVhdGVBREIiLCJhcGlMZXZlbCIsImdldEFwaUxldmVsIiwic2V0SGlkZGVuQXBpUG9saWN5IiwiaWdub3JlSGlkZGVuQXBpUG9saWN5RXJyb3IiLCJoYXNWYWx1ZSIsImdwc0VuYWJsZWQiLCJ0b2dnbGVHUFNMb2NhdGlvblByb3ZpZGVyIiwid2FybiIsImFwcEluZm8iLCJnZXRMYXVuY2hJbmZvIiwiY3VyRGV2aWNlSWQiLCJkZXZpY2VVRElEIiwiaW5pdERldmljZSIsImluaXRVaUF1dG9tYXRvcjJTZXJ2ZXIiLCJkaXNhYmxlV2luZG93QW5pbWF0aW9uIiwiaXNBbmltYXRpb25PbiIsInNldEFuaW1hdGlvblN0YXRlIiwiX3dhc1dpbmRvd0FuaW1hdGlvbkRpc2FibGVkIiwiaW5pdEFVVCIsInN0YXJ0U2Vzc2lvbiIsImFkZERldmljZUluZm9Ub0NhcHMiLCJza2lwVW5sb2NrIiwidW5sb2NrIiwic3RhcnRDaHJvbWVTZXNzaW9uIiwiZW5zdXJlQXBwU3RhcnRzIiwib3JpZW50YXRpb24iLCJzZXRPcmllbnRhdGlvbiIsImF1dG9XZWJ2aWV3Iiwidmlld05hbWUiLCJkZWZhdWx0V2Vidmlld05hbWUiLCJhdXRvV2Vidmlld1RpbWVvdXQiLCJyZXRyeUludGVydmFsIiwic2V0Q29udGV4dCIsImFwaVZlcnNpb24iLCJtYW51ZmFjdHVyZXIiLCJtb2RlbCIsInJlYWxEaXNwbGF5U2l6ZSIsImRpc3BsYXlEZW5zaXR5IiwibW9iaWxlR2V0RGV2aWNlSW5mbyIsImRldmljZUFwaUxldmVsIiwicGFyc2VJbnQiLCJkZXZpY2VTY3JlZW5TaXplIiwiZGV2aWNlU2NyZWVuRGVuc2l0eSIsImRldmljZU1vZGVsIiwiZGV2aWNlTWFudWZhY3R1cmVyIiwidWlhdXRvbWF0b3IyT3B0cyIsImhvc3QiLCJyZW1vdGVBZGJIb3N0IiwiZGV2aWNlUG9ydCIsImFwayIsInRtcERpciIsImRpc2FibGVTdXBwcmVzc0FjY2Vzc2liaWxpdHlTZXJ2aWNlIiwicmVhZFRpbWVvdXQiLCJ1aWF1dG9tYXRvcjJTZXJ2ZXJSZWFkVGltZW91dCIsIlVpQXV0b21hdG9yMlNlcnZlciIsInByb3h5UmVxUmVzIiwicHJveHlDb21tYW5kIiwic2tpcFNlcnZlckluc3RhbGxhdGlvbiIsImluc3RhbGxTZXJ2ZXJBcGsiLCJ1aWF1dG9tYXRvcjJTZXJ2ZXJJbnN0YWxsVGltZW91dCIsImFkZFRvRGV2aWNlSWRsZVdoaXRlbGlzdCIsIlNFVFRJTkdTX0hFTFBFUl9QS0dfSUQiLCJTRVJWRVJfUEFDS0FHRV9JRCIsIlNFUlZFUl9URVNUX1BBQ0tBR0VfSUQiLCJzdGRlcnIiLCJtZXNzYWdlIiwidW5pbnN0YWxsT3RoZXJQYWNrYWdlcyIsInBhcnNlQXJyYXkiLCJvdGhlckFwcHMiLCJCIiwiYWxsIiwibWFwIiwiaW5zdGFsbE90aGVyQXBrcyIsIm5vUmVzZXQiLCJpc0FwcEluc3RhbGxlZCIsIm5vU2lnbiIsImNoZWNrQXBrQ2VydCIsInJlcXVpcmVEZWZhdWx0Q2VydCIsInNpZ25BcHAiLCJza2lwVW5pbnN0YWxsIiwidW5pbnN0YWxsQXBrIiwiaW5zdGFsbEFwayIsImZhc3RSZXNldCIsInJlc2V0QXBwIiwiYXBwV2FpdFBhY2thZ2UiLCJhcHBXYWl0QWN0aXZpdHkiLCJhbmRyb2lkQ292ZXJhZ2UiLCJmb3JjZUFwcExhdW5jaCIsInByb2Nlc3NFeGlzdHMiLCJzdGFydEFwcCIsImFjdGlvbiIsImludGVudEFjdGlvbiIsImNhdGVnb3J5IiwiaW50ZW50Q2F0ZWdvcnkiLCJmbGFncyIsImludGVudEZsYWdzIiwid2FpdFBrZyIsIndhaXRBY3Rpdml0eSIsIndhaXRGb3JMYXVuY2giLCJhcHBXYWl0Rm9yTGF1bmNoIiwid2FpdER1cmF0aW9uIiwiYXBwV2FpdER1cmF0aW9uIiwib3B0aW9uYWxJbnRlbnRBcmd1bWVudHMiLCJzdG9wQXBwIiwiZG9udFN0b3BBcHBPblJlc2V0IiwicmV0cnkiLCJ1c2VyIiwidXNlclByb2ZpbGUiLCJzY3JlZW5SZWNvcmRpbmdTdG9wVGFza3MiLCJpc0VtcHR5IiwiX3NjcmVlblJlY29yZGluZ1Byb3BlcnRpZXMiLCJzdG9wUmVjb3JkaW5nU2NyZWVuIiwibW9iaWxlSXNNZWRpYVByb2plY3Rpb25SZWNvcmRpbmdSdW5uaW5nIiwibW9iaWxlU3RvcE1lZGlhUHJvamVjdGlvblJlY29yZGluZyIsIl9zY3JlZW5TdHJlYW1pbmdQcm9wcyIsIm1vYmlsZVN0b3BTY3JlZW5TdHJlYW1pbmciLCJyZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnMiLCJzZXJ2ZXIiLCJzdG9wQ2hyb21lZHJpdmVyUHJveGllcyIsImVyciIsInRhc2siLCJpZ24iLCJ1bmljb2RlS2V5Ym9hcmQiLCJyZXNldEtleWJvYXJkIiwic2V0SU1FIiwiZW5kQW5kcm9pZENvdmVyYWdlIiwiYW5kcm9pZENvdmVyYWdlRW5kSW50ZW50IiwiYnJvYWRjYXN0IiwiZm9yY2VTdG9wIiwic3RvcExvZ2NhdCIsImVycm9yIiwic2V0RGVmYXVsdEhpZGRlbkFwaVBvbGljeSIsImF2ZE5hbWUiLCJraWxsRW11bGF0b3IiLCJzdG9wIiwiZnMiLCJleGlzdHMiLCJ3cmFwQm9vdHN0cmFwRGlzY29ubmVjdCIsIndyYXBwZWQiLCJyZXN0YXJ0IiwicHJveHlBY3RpdmUiLCJjYW5Qcm94eSIsImdldFByb3h5QXZvaWRMaXN0IiwibmF0aXZlV2ViU2NyZWVuc2hvdCIsImlzQ2hyb21lQnJvd3NlciIsImNtZCIsInRvUGFpcnMiLCJhbmRyb2lkQ29tbWFuZHMiLCJwcm90b3R5cGUiLCJjb21tYW5kcyJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9kcml2ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IEJhc2VEcml2ZXIsIERldmljZVNldHRpbmdzIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQge1xuICBVaUF1dG9tYXRvcjJTZXJ2ZXIsIFNFUlZFUl9QQUNLQUdFX0lELCBTRVJWRVJfVEVTVF9QQUNLQUdFX0lEXG59IGZyb20gJy4vdWlhdXRvbWF0b3IyJztcbmltcG9ydCB7IG5ld01ldGhvZE1hcCB9IGZyb20gJy4vbWV0aG9kLW1hcCc7XG5pbXBvcnQgeyBmcywgdXRpbCwgbWpwZWcgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyByZXRyeUludGVydmFsIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IGNvbW1hbmRzIGZyb20gJy4vY29tbWFuZHMvaW5kZXgnO1xuaW1wb3J0IHsgREVGQVVMVF9BREJfUE9SVCB9IGZyb20gJ2FwcGl1bS1hZGInO1xuaW1wb3J0IHVpYXV0b21hdG9yMkhlbHBlcnMgZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IGFuZHJvaWRIZWxwZXJzLCBhbmRyb2lkQ29tbWFuZHMsIFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQsIH0gZnJvbSAnYXBwaXVtLWFuZHJvaWQtZHJpdmVyJztcbmltcG9ydCBkZXNpcmVkQ2FwQ29uc3RyYWludHMgZnJvbSAnLi9kZXNpcmVkLWNhcHMnO1xuaW1wb3J0IHsgZmluZEFQb3J0Tm90SW5Vc2UsIGNoZWNrUG9ydFN0YXR1cyB9IGZyb20gJ3BvcnRzY2FubmVyJztcbmltcG9ydCBvcyBmcm9tICdvcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IEFQS19FWFRFTlNJT04sIEFQS1NfRVhURU5TSU9OIH0gZnJvbSAnLi9leHRlbnNpb25zJztcblxuXG5jb25zdCBoZWxwZXJzID0gT2JqZWN0LmFzc2lnbih7fSwgdWlhdXRvbWF0b3IySGVscGVycywgYW5kcm9pZEhlbHBlcnMpO1xuXG4vLyBUaGUgcmFuZ2Ugb2YgcG9ydHMgd2UgY2FuIHVzZSBvbiB0aGUgc3lzdGVtIGZvciBjb21tdW5pY2F0aW5nIHRvIHRoZVxuLy8gVWlBdXRvbWF0b3IyIEhUVFAgc2VydmVyIG9uIHRoZSBkZXZpY2VcbmNvbnN0IERFVklDRV9QT1JUX1JBTkdFID0gWzgyMDAsIDgyOTldO1xuXG4vLyBUaGUgZ3VhcmQgaXMgbmVlZGVkIHRvIGF2b2lkIGR5bmFtaWMgc3lzdGVtIHBvcnQgYWxsb2NhdGlvbiBjb25mbGljdHMgZm9yXG4vLyBwYXJhbGxlbCBkcml2ZXIgc2Vzc2lvbnNcbmNvbnN0IERFVklDRV9QT1JUX0FMTE9DQVRJT05fR1VBUkQgPSB1dGlsLmdldExvY2tGaWxlR3VhcmQoXG4gIHBhdGgucmVzb2x2ZShvcy50bXBkaXIoKSwgJ3VpYTJfZGV2aWNlX3BvcnRfZ3VhcmQnKSxcbiAge3RpbWVvdXQ6IDI1LCB0cnlSZWNvdmVyeTogdHJ1ZX1cbik7XG5cbi8vIFRoaXMgaXMgdGhlIHBvcnQgdGhhdCBVaUF1dG9tYXRvcjIgbGlzdGVucyB0byBvbiB0aGUgZGV2aWNlLiBXZSB3aWxsIGZvcndhcmRcbi8vIG9uZSBvZiB0aGUgcG9ydHMgYWJvdmUgb24gdGhlIHN5c3RlbSB0byB0aGlzIHBvcnQgb24gdGhlIGRldmljZS5cbmNvbnN0IERFVklDRV9QT1JUID0gNjc5MDtcbi8vIFRoaXMgaXMgdGhlIHBvcnQgdGhhdCB0aGUgVWlBdXRvbWF0b3IyIE1KUEVHIHNlcnZlciBsaXN0ZW5zIHRvIG9uIHRoZSBkZXZpY2UuXG4vLyBXZSB3aWxsIGZvcndhcmQgb25lIG9mIHRoZSBwb3J0cyBhYm92ZSBvbiB0aGUgc3lzdGVtIHRvIHRoaXMgcG9ydCBvbiB0aGVcbi8vIGRldmljZS5cbmNvbnN0IE1KUEVHX1NFUlZFUl9ERVZJQ0VfUE9SVCA9IDc4MTA7XG5cbmNvbnN0IExPQ0FMSE9TVF9JUDQgPSAnMTI3LjAuMC4xJztcblxuLy8gTk9fUFJPWFkgY29udGFpbnMgdGhlIHBhdGhzIHRoYXQgd2UgbmV2ZXIgd2FudCB0byBwcm94eSB0byBVaUF1dG9tYXRvcjIgc2VydmVyLlxuLy8gVE9ETzogIEFkZCB0aGUgbGlzdCBvZiBwYXRocyB0aGF0IHdlIG5ldmVyIHdhbnQgdG8gcHJveHkgdG8gVWlBdXRvbWF0b3IyIHNlcnZlci5cbi8vIFRPRE86IE5lZWQgdG8gc2VncmVnYXRlIHRoZSBwYXRocyBiZXR0ZXIgd2F5IHVzaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2hlcmV2ZXIgYXBwbGljYWJsZS5cbi8vIChOb3Qgc2VncmVnYXRpbmcgcmlnaHQgYXdheSBiZWNhdXNlIG1vcmUgcGF0aHMgdG8gYmUgYWRkZWQgaW4gdGhlIE5PX1BST1hZIGxpc3QpXG5jb25zdCBOT19QUk9YWSA9IFtcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vKD8hLiovKScpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYWxlcnRfW14vXSsnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FsZXJ0L1teL10rJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vW14vXSsvY3VycmVudF9hY3Rpdml0eScpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL1teL10rL2N1cnJlbnRfcGFja2FnZScpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2FwcC9bXi9dKycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9bXi9dKycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL3NldHRpbmdzJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0JyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0cycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZWxlbWVudC9bXi9dKy9hdHRyaWJ1dGUnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2VsZW1lbnQvW14vXSsvZGlzcGxheWVkJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9lbGVtZW50L1teL10rL2VuYWJsZWQnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2VsZW1lbnQvW14vXSsvbG9jYXRpb25faW5fdmlldycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZWxlbWVudC9bXi9dKy9uYW1lJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9lbGVtZW50L1teL10rL3NjcmVlbnNob3QnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2VsZW1lbnQvW14vXSsvc2VsZWN0ZWQnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2ltZS9bXi9dKycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbG9jYXRpb24nKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL25ldHdvcmtfY29ubmVjdGlvbicpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvc2NyZWVuc2hvdCcpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdGltZW91dHMnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3VybCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL1teL10rX2FsZXJ0JCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FjdGlvbnMnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hbGVydC9bXi9dKycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcC9bXi9dJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL1teL10rL3N0YXJ0X2FjdGl2aXR5JyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2FwcC9bXi9dKycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9jb21wYXJlX2ltYWdlcycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvKD8hc2V0X2NsaXBib2FyZClbXi9dKycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9lbGVtZW50L1teL10rL3JlcGxhY2VfdmFsdWUnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZWxlbWVudC9bXi9dKy92YWx1ZScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9nZXRQZXJmb3JtYW5jZURhdGEnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vcGVyZm9ybWFuY2VEYXRhL3R5cGVzJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL3NldHRpbmdzJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2V4ZWN1dGVfZHJpdmVyJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL3N0YXJ0X3JlY29yZGluZ19zY3JlZW4nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vc3RvcF9yZWNvcmRpbmdfc2NyZWVuJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtLy4qZXZlbnQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0JyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZWxlbWVudCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2ltZS9bXi9dKycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2tleXMnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9sb2NhdGlvbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL25ldHdvcmtfY29ubmVjdGlvbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3RpbWVvdXRzJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdG91Y2gvbXVsdGkvcGVyZm9ybScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3RvdWNoL3BlcmZvcm0nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy91cmwnKV0sXG5cbiAgLy8gTUpTT05XUCBjb21tYW5kc1xuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9sb2cvdHlwZXMnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZXhlY3V0ZV9hc3luYycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2xvZycpXSxcbiAgLy8gVzNDIGNvbW1hbmRzXG4gIC8vIEZvciBTZWxlbml1bSB2NCAoVzNDIGRvZXMgbm90IGhhdmUgdGhpcyByb3V0ZSlcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvc2UvbG9nL3R5cGVzJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy93aW5kb3cvcmVjdCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2V4ZWN1dGUvYXN5bmMnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlL3N5bmMnKV0sXG4gIC8vIEZvciBTZWxlbml1bSB2NCAoVzNDIGRvZXMgbm90IGhhdmUgdGhpcyByb3V0ZSlcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3NlL2xvZycpXSxcbl07XG5cbi8vIFRoaXMgaXMgYSBzZXQgb2YgbWV0aG9kcyBhbmQgcGF0aHMgdGhhdCB3ZSBuZXZlciB3YW50IHRvIHByb3h5IHRvIENocm9tZWRyaXZlci5cbmNvbnN0IENIUk9NRV9OT19QUk9YWSA9IFtcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0JyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9lbGVtZW50L1teL10rL3JlY3QnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL29yaWVudGF0aW9uJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvY29udGV4dCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL29yaWVudGF0aW9uJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdG91Y2gvbXVsdGkvcGVyZm9ybScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3RvdWNoL3BlcmZvcm0nKV0sXG5cbiAgLy8gdGhpcyBpcyBuZWVkZWQgdG8gbWFrZSB0aGUgbW9iaWxlOiBjb21tYW5kcyB3b3JraW5nIGluIHdlYiBjb250ZXh0XG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlJCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2V4ZWN1dGUvc3luYycpXSxcblxuICAvLyBNSlNPTldQIGNvbW1hbmRzXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2xvZy90eXBlcyQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9sb2ckJyldLFxuICAvLyBXM0MgY29tbWFuZHNcbiAgLy8gRm9yIFNlbGVuaXVtIHY0IChXM0MgZG9lcyBub3QgaGF2ZSB0aGlzIHJvdXRlKVxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9zZS9sb2cvdHlwZXMkJyldLFxuICAvLyBGb3IgU2VsZW5pdW0gdjQgKFczQyBkb2VzIG5vdCBoYXZlIHRoaXMgcm91dGUpXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9zZS9sb2ckJyldLFxuXTtcblxuY29uc3QgTUVNT0laRURfRlVOQ1RJT05TID0gW1xuICAnZ2V0U3RhdHVzQmFySGVpZ2h0JyxcbiAgJ2dldERldmljZVBpeGVsUmF0aW8nLFxuXTtcblxuY2xhc3MgQW5kcm9pZFVpYXV0b21hdG9yMkRyaXZlciBleHRlbmRzIEJhc2VEcml2ZXIge1xuXG4gIHN0YXRpYyBuZXdNZXRob2RNYXAgPSBuZXdNZXRob2RNYXA7XG5cbiAgY29uc3RydWN0b3IgKG9wdHMgPSB7fSwgc2hvdWxkVmFsaWRhdGVDYXBzID0gdHJ1ZSkge1xuICAgIC8vIGBzaGVsbGAgb3ZlcndyaXRlcyBhZGIuc2hlbGwsIHNvIHJlbW92ZVxuICAgIGRlbGV0ZSBvcHRzLnNoZWxsO1xuXG4gICAgc3VwZXIob3B0cywgc2hvdWxkVmFsaWRhdGVDYXBzKTtcbiAgICB0aGlzLmxvY2F0b3JTdHJhdGVnaWVzID0gW1xuICAgICAgJ3hwYXRoJyxcbiAgICAgICdpZCcsXG4gICAgICAnY2xhc3MgbmFtZScsXG4gICAgICAnYWNjZXNzaWJpbGl0eSBpZCcsXG4gICAgICAnY3NzIHNlbGVjdG9yJyxcbiAgICAgICctYW5kcm9pZCB1aWF1dG9tYXRvcidcbiAgICBdO1xuICAgIHRoaXMuZGVzaXJlZENhcENvbnN0cmFpbnRzID0gZGVzaXJlZENhcENvbnN0cmFpbnRzO1xuICAgIHRoaXMudWlhdXRvbWF0b3IyID0gbnVsbDtcbiAgICB0aGlzLmp3cFByb3h5QWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5kZWZhdWx0SU1FID0gbnVsbDtcbiAgICB0aGlzLmp3cFByb3h5QXZvaWQgPSBOT19QUk9YWTtcbiAgICB0aGlzLmFwa1N0cmluZ3MgPSB7fTsgLy8gbWFwIG9mIGxhbmd1YWdlIC0+IHN0cmluZ3Mgb2JqXG5cbiAgICB0aGlzLnNldHRpbmdzID0gbmV3IERldmljZVNldHRpbmdzKHtpZ25vcmVVbmltcG9ydGFudFZpZXdzOiBmYWxzZSwgYWxsb3dJbnZpc2libGVFbGVtZW50czogZmFsc2V9LFxuICAgICAgICB0aGlzLm9uU2V0dGluZ3NVcGRhdGUuYmluZCh0aGlzKSk7XG4gICAgLy8gaGFuZGxlIHdlYnZpZXcgbWVjaGFuaWNzIGZyb20gQW5kcm9pZERyaXZlclxuICAgIHRoaXMuY2hyb21lZHJpdmVyID0gbnVsbDtcbiAgICB0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzID0ge307XG5cbiAgICAvLyBtZW1vaXplIGZ1bmN0aW9ucyBoZXJlLCBzbyB0aGF0IHRoZXkgYXJlIGRvbmUgb24gYSBwZXItaW5zdGFuY2UgYmFzaXNcbiAgICBmb3IgKGNvbnN0IGZuIG9mIE1FTU9JWkVEX0ZVTkNUSU9OUykge1xuICAgICAgdGhpc1tmbl0gPSBfLm1lbW9pemUodGhpc1tmbl0pO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlRGVzaXJlZENhcHMgKGNhcHMpIHtcbiAgICByZXR1cm4gc3VwZXIudmFsaWRhdGVEZXNpcmVkQ2FwcyhjYXBzKSAmJiBhbmRyb2lkSGVscGVycy52YWxpZGF0ZURlc2lyZWRDYXBzKGNhcHMpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlU2Vzc2lvbiAoLi4uYXJncykge1xuICAgIHRyeSB7XG4gICAgICAvLyBUT0RPIGhhbmRsZSBvdGhlclNlc3Npb25EYXRhIGZvciBtdWx0aXBsZSBzZXNzaW9uc1xuICAgICAgbGV0IFtzZXNzaW9uSWQsIGNhcHNdID0gYXdhaXQgc3VwZXIuY3JlYXRlU2Vzc2lvbiguLi5hcmdzKTtcblxuICAgICAgbGV0IHNlcnZlckRldGFpbHMgPSB7XG4gICAgICAgIHBsYXRmb3JtOiAnTElOVVgnLFxuICAgICAgICB3ZWJTdG9yYWdlRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHRha2VzU2NyZWVuc2hvdDogdHJ1ZSxcbiAgICAgICAgamF2YXNjcmlwdEVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGRhdGFiYXNlRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIG5ldHdvcmtDb25uZWN0aW9uRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgbG9jYXRpb25Db250ZXh0RW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHdhcm5pbmdzOiB7fSxcbiAgICAgICAgZGVzaXJlZDogdGhpcy5jYXBzLFxuICAgICAgfTtcblxuICAgICAgdGhpcy5jYXBzID0gT2JqZWN0LmFzc2lnbihzZXJ2ZXJEZXRhaWxzLCB0aGlzLmNhcHMpO1xuXG4gICAgICB0aGlzLmN1ckNvbnRleHQgPSB0aGlzLmRlZmF1bHRDb250ZXh0TmFtZSgpO1xuXG4gICAgICBsZXQgZGVmYXVsdE9wdHMgPSB7XG4gICAgICAgIGZ1bGxSZXNldDogZmFsc2UsXG4gICAgICAgIGF1dG9MYXVuY2g6IHRydWUsXG4gICAgICAgIGFkYlBvcnQ6IERFRkFVTFRfQURCX1BPUlQsXG4gICAgICAgIGFuZHJvaWRJbnN0YWxsVGltZW91dDogOTAwMDBcbiAgICAgIH07XG4gICAgICBfLmRlZmF1bHRzKHRoaXMub3B0cywgZGVmYXVsdE9wdHMpO1xuXG4gICAgICBpZiAodGhpcy5pc0Nocm9tZVNlc3Npb24pIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhcIldlJ3JlIGdvaW5nIHRvIHJ1biBhIENocm9tZS1iYXNlZCBzZXNzaW9uXCIpO1xuICAgICAgICBsZXQge3BrZywgYWN0aXZpdHl9ID0gaGVscGVycy5nZXRDaHJvbWVQa2codGhpcy5vcHRzLmJyb3dzZXJOYW1lKTtcbiAgICAgICAgdGhpcy5vcHRzLmFwcFBhY2thZ2UgPSB0aGlzLmNhcHMuYXBwUGFja2FnZSA9IHBrZztcbiAgICAgICAgdGhpcy5vcHRzLmFwcEFjdGl2aXR5ID0gdGhpcy5jYXBzLmFwcEFjdGl2aXR5ID0gYWN0aXZpdHk7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYENocm9tZS10eXBlIHBhY2thZ2UgYW5kIGFjdGl2aXR5IGFyZSAke3BrZ30gYW5kICR7YWN0aXZpdHl9YCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9wdHMucmVib290KSB7XG4gICAgICAgIHRoaXMuc2V0QXZkRnJvbUNhcGFiaWxpdGllcyhjYXBzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0cy5hcHApIHtcbiAgICAgICAgLy8gZmluZCBhbmQgY29weSwgb3IgZG93bmxvYWQgYW5kIHVuemlwIGFuIGFwcCB1cmwgb3IgcGF0aFxuICAgICAgICB0aGlzLm9wdHMuYXBwID0gYXdhaXQgdGhpcy5oZWxwZXJzLmNvbmZpZ3VyZUFwcCh0aGlzLm9wdHMuYXBwLCBbQVBLX0VYVEVOU0lPTiwgQVBLU19FWFRFTlNJT05dKTtcbiAgICAgICAgYXdhaXQgdGhpcy5jaGVja0FwcFByZXNlbnQoKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5vcHRzLmFwcFBhY2thZ2UpIHtcbiAgICAgICAgLy8gdGhlIGFwcCBpc24ndCBhbiBhY3R1YWwgYXBwIGZpbGUgYnV0IHJhdGhlciBzb21ldGhpbmcgd2Ugd2FudCB0b1xuICAgICAgICAvLyBhc3N1bWUgaXMgb24gdGhlIGRldmljZSBhbmQganVzdCBsYXVuY2ggdmlhIHRoZSBhcHBQYWNrYWdlXG4gICAgICAgIHRoaXMubG9nLmluZm8oYFN0YXJ0aW5nICcke3RoaXMub3B0cy5hcHBQYWNrYWdlfScgZGlyZWN0bHkgb24gdGhlIGRldmljZWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgTmVpdGhlciAnYXBwJyBub3IgJ2FwcFBhY2thZ2UnIHdhcyBzZXQuIFN0YXJ0aW5nIFVpQXV0b21hdG9yMiBgICtcbiAgICAgICAgICAnd2l0aG91dCB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uJyk7XG4gICAgICB9XG4gICAgICB0aGlzLm9wdHMuYWRiUG9ydCA9IHRoaXMub3B0cy5hZGJQb3J0IHx8IERFRkFVTFRfQURCX1BPUlQ7XG5cbiAgICAgIGF3YWl0IHRoaXMuc3RhcnRVaUF1dG9tYXRvcjJTZXNzaW9uKCk7XG4gICAgICBhd2FpdCB0aGlzLmZpbGxEZXZpY2VEZXRhaWxzKCk7XG4gICAgICBpZiAodGhpcy5vcHRzLm1qcGVnU2NyZWVuc2hvdFVybCkge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKGBTdGFydGluZyBNSlBFRyBzdHJlYW0gcmVhZGluZyBVUkw6ICcke3RoaXMub3B0cy5tanBlZ1NjcmVlbnNob3RVcmx9J2ApO1xuICAgICAgICB0aGlzLm1qcGVnU3RyZWFtID0gbmV3IG1qcGVnLk1KcGVnU3RyZWFtKHRoaXMub3B0cy5tanBlZ1NjcmVlbnNob3RVcmwpO1xuICAgICAgICBhd2FpdCB0aGlzLm1qcGVnU3RyZWFtLnN0YXJ0KCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gW3Nlc3Npb25JZCwgdGhpcy5jYXBzXTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24oKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZmlsbERldmljZURldGFpbHMgKCkge1xuICAgIHRoaXMuY2Fwcy5waXhlbFJhdGlvID0gYXdhaXQgdGhpcy5nZXREZXZpY2VQaXhlbFJhdGlvKCk7XG4gICAgdGhpcy5jYXBzLnN0YXRCYXJIZWlnaHQgPSBhd2FpdCB0aGlzLmdldFN0YXR1c0JhckhlaWdodCgpO1xuICAgIHRoaXMuY2Fwcy52aWV3cG9ydFJlY3QgPSBhd2FpdCB0aGlzLmdldFZpZXdQb3J0UmVjdCgpO1xuICB9XG5cbiAgZ2V0IGRyaXZlckRhdGEgKCkge1xuICAgIC8vIFRPRE8gZmlsbCBvdXQgcmVzb3VyY2UgaW5mbyBoZXJlXG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgYXN5bmMgZ2V0U2Vzc2lvbiAoKSB7XG4gICAgbGV0IHNlc3Npb25EYXRhID0gYXdhaXQgc3VwZXIuZ2V0U2Vzc2lvbigpO1xuICAgIHRoaXMubG9nLmRlYnVnKCdHZXR0aW5nIHNlc3Npb24gZGV0YWlscyBmcm9tIHNlcnZlciB0byBtaXggaW4nKTtcbiAgICBsZXQgdWlhMkRhdGEgPSBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy8nLCAnR0VUJywge30pO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzZXNzaW9uRGF0YSwgdWlhMkRhdGEpO1xuICB9XG5cbiAgaXNFbXVsYXRvciAoKSB7XG4gICAgcmV0dXJuIGhlbHBlcnMuaXNFbXVsYXRvcih0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgfVxuXG4gIHNldEF2ZEZyb21DYXBhYmlsaXRpZXMgKGNhcHMpIHtcbiAgICBpZiAodGhpcy5vcHRzLmF2ZCkge1xuICAgICAgdGhpcy5sb2cuaW5mbygnYXZkIG5hbWUgZGVmaW5lZCwgaWdub3JpbmcgZGV2aWNlIG5hbWUgYW5kIHBsYXRmb3JtIHZlcnNpb24nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFjYXBzLmRldmljZU5hbWUpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnYXZkIG9yIGRldmljZU5hbWUgc2hvdWxkIGJlIHNwZWNpZmllZCB3aGVuIHJlYm9vdCBvcHRpb24gaXMgZW5hYmxlcycpO1xuICAgICAgfVxuICAgICAgaWYgKCFjYXBzLnBsYXRmb3JtVmVyc2lvbikge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdhdmQgb3IgcGxhdGZvcm1WZXJzaW9uIHNob3VsZCBiZSBzcGVjaWZpZWQgd2hlbiByZWJvb3Qgb3B0aW9uIGlzIGVuYWJsZWQnKTtcbiAgICAgIH1cbiAgICAgIGxldCBhdmREZXZpY2UgPSBjYXBzLmRldmljZU5hbWUucmVwbGFjZSgvW15hLXpBLVowLTlfLl0vZywgJy0nKTtcbiAgICAgIHRoaXMub3B0cy5hdmQgPSBgJHthdmREZXZpY2V9X18ke2NhcHMucGxhdGZvcm1WZXJzaW9ufWA7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgYWxsb2NhdGVTeXN0ZW1Qb3J0ICgpIHtcbiAgICBjb25zdCBmb3J3YXJkUG9ydCA9IGFzeW5jIChsb2NhbFBvcnQpID0+IHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBGb3J3YXJkaW5nIFVpQXV0b21hdG9yMiBTZXJ2ZXIgcG9ydCAke0RFVklDRV9QT1JUfSB0byBsb2NhbCBwb3J0ICR7bG9jYWxQb3J0fWApO1xuICAgICAgaWYgKChhd2FpdCBjaGVja1BvcnRTdGF0dXMobG9jYWxQb3J0LCBMT0NBTEhPU1RfSVA0KSkgPT09ICdvcGVuJykge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBVaUF1dG9tYXRvcjIgU2VydmVyIGNhbm5vdCBzdGFydCBiZWNhdXNlIHRoZSBsb2NhbCBwb3J0ICMke2xvY2FsUG9ydH0gaXMgYnVzeS4gYCArXG4gICAgICAgICAgYE1ha2Ugc3VyZSB0aGUgcG9ydCB5b3UgcHJvdmlkZSB2aWEgJ3N5c3RlbVBvcnQnIGNhcGFiaWxpdHkgaXMgbm90IG9jY3VwaWVkLiBgICtcbiAgICAgICAgICBgVGhpcyBzaXR1YXRpb24gbWlnaHQgb2Z0ZW4gYmUgYSByZXN1bHQgb2YgYW4gaW5hY2N1cmF0ZSBzZXNzaW9ucyBtYW5hZ2VtZW50LCBlLmcuIGAgK1xuICAgICAgICAgIGBvbGQgYXV0b21hdGlvbiBzZXNzaW9ucyBvbiB0aGUgc2FtZSBkZXZpY2UgbXVzdCBhbHdheXMgYmUgY2xvc2VkIGJlZm9yZSBzdGFydGluZyBuZXcgb25lcy5gKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuYWRiLmZvcndhcmRQb3J0KGxvY2FsUG9ydCwgREVWSUNFX1BPUlQpO1xuICAgIH07XG5cbiAgICBpZiAodGhpcy5vcHRzLnN5c3RlbVBvcnQpIHtcbiAgICAgIHRoaXMuX2hhc1N5c3RlbVBvcnRJbkNhcHMgPSB0cnVlO1xuICAgICAgcmV0dXJuIGF3YWl0IGZvcndhcmRQb3J0KHRoaXMub3B0cy5zeXN0ZW1Qb3J0KTtcbiAgICB9XG5cbiAgICBhd2FpdCBERVZJQ0VfUE9SVF9BTExPQ0FUSU9OX0dVQVJEKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IFtzdGFydFBvcnQsIGVuZFBvcnRdID0gREVWSUNFX1BPUlRfUkFOR0U7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLm9wdHMuc3lzdGVtUG9ydCA9IGF3YWl0IGZpbmRBUG9ydE5vdEluVXNlKHN0YXJ0UG9ydCwgZW5kUG9ydCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coXG4gICAgICAgICAgYENhbm5vdCBmaW5kIGFueSBmcmVlIHBvcnQgaW4gcmFuZ2UgJHtzdGFydFBvcnR9Li4ke2VuZFBvcnR9fS4gYCArXG4gICAgICAgICAgYFBsZWFzZSBzZXQgdGhlIGF2YWlsYWJsZSBwb3J0IG51bWJlciBieSBwcm92aWRpbmcgdGhlIHN5c3RlbVBvcnQgY2FwYWJpbGl0eSBvciBgICtcbiAgICAgICAgICBgZG91YmxlIGNoZWNrIHRoZSBwcm9jZXNzZXMgdGhhdCBhcmUgbG9ja2luZyBwb3J0cyB3aXRoaW4gdGhpcyByYW5nZSBhbmQgdGVybWluYXRlIGAgK1xuICAgICAgICAgIGB0aGVzZSB3aGljaCBhcmUgbm90IG5lZWRlZCBhbnltb3JlYCk7XG4gICAgICB9XG4gICAgICBhd2FpdCBmb3J3YXJkUG9ydCh0aGlzLm9wdHMuc3lzdGVtUG9ydCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyByZWxlYXNlU3lzdGVtUG9ydCAoKSB7XG4gICAgaWYgKCF0aGlzLm9wdHMuc3lzdGVtUG9ydCB8fCAhdGhpcy5hZGIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faGFzU3lzdGVtUG9ydEluQ2Fwcykge1xuICAgICAgYXdhaXQgdGhpcy5hZGIucmVtb3ZlUG9ydEZvcndhcmQodGhpcy5vcHRzLnN5c3RlbVBvcnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBERVZJQ0VfUE9SVF9BTExPQ0FUSU9OX0dVQVJEKGFzeW5jICgpID0+IGF3YWl0IHRoaXMuYWRiLnJlbW92ZVBvcnRGb3J3YXJkKHRoaXMub3B0cy5zeXN0ZW1Qb3J0KSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgYWxsb2NhdGVNanBlZ1NlcnZlclBvcnQgKCkge1xuICAgIGlmICh0aGlzLm9wdHMubWpwZWdTZXJ2ZXJQb3J0KSB7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5mb3J3YXJkUG9ydCh0aGlzLm9wdHMubWpwZWdTZXJ2ZXJQb3J0LCBNSlBFR19TRVJWRVJfREVWSUNFX1BPUlQpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJlbGVhc2VNanBlZ1NlcnZlclBvcnQgKCkge1xuICAgIGlmICh0aGlzLm9wdHMubWpwZWdTZXJ2ZXJQb3J0KSB7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5yZW1vdmVQb3J0Rm9yd2FyZCh0aGlzLm9wdHMubWpwZWdTZXJ2ZXJQb3J0KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzdGFydFVpQXV0b21hdG9yMlNlc3Npb24gKCkge1xuICAgIC8vIGdldCBkZXZpY2UgdWRpZCBmb3IgdGhpcyBzZXNzaW9uXG4gICAgbGV0IHt1ZGlkLCBlbVBvcnR9ID0gYXdhaXQgaGVscGVycy5nZXREZXZpY2VJbmZvRnJvbUNhcHModGhpcy5vcHRzKTtcbiAgICB0aGlzLm9wdHMudWRpZCA9IHVkaWQ7XG4gICAgdGhpcy5vcHRzLmVtUG9ydCA9IGVtUG9ydDtcblxuICAgIC8vIG5vdyB0aGF0IHdlIGtub3cgb3VyIGphdmEgdmVyc2lvbiBhbmQgZGV2aWNlIGluZm8sIHdlIGNhbiBjcmVhdGUgb3VyXG4gICAgLy8gQURCIGluc3RhbmNlXG4gICAgdGhpcy5hZGIgPSBhd2FpdCBhbmRyb2lkSGVscGVycy5jcmVhdGVBREIodGhpcy5vcHRzKTtcblxuICAgIGNvbnN0IGFwaUxldmVsID0gYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKTtcblxuICAgIGlmIChhcGlMZXZlbCA8IDIxKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdVSUF1dG9tYXRvcjIgaXMgb25seSBzdXBwb3J0ZWQgc2luY2UgQW5kcm9pZCA1LjAgKExvbGxpcG9wKS4gJyArXG4gICAgICAgICdZb3UgY291bGQgc3RpbGwgdXNlIG90aGVyIHN1cHBvcnRlZCBiYWNrZW5kcyBpbiBvcmRlciB0byBhdXRvbWF0ZSBvbGRlciBBbmRyb2lkIHZlcnNpb25zLicpO1xuICAgIH1cblxuICAgIGlmIChhcGlMZXZlbCA+PSAyOCkgeyAvLyBBbmRyb2lkIFBcbiAgICAgIHRoaXMubG9nLmluZm8oJ1JlbGF4aW5nIGhpZGRlbiBhcGkgcG9saWN5Jyk7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5zZXRIaWRkZW5BcGlQb2xpY3koJzEnLCAhIXRoaXMub3B0cy5pZ25vcmVIaWRkZW5BcGlQb2xpY3lFcnJvcik7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgd2UgaGF2ZSB0byBlbmFibGUvZGlzYWJsZSBncHMgYmVmb3JlIHJ1bm5pbmcgdGhlIGFwcGxpY2F0aW9uXG4gICAgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLmdwc0VuYWJsZWQpKSB7XG4gICAgICBpZiAodGhpcy5pc0VtdWxhdG9yKCkpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgVHJ5aW5nIHRvICR7dGhpcy5vcHRzLmdwc0VuYWJsZWQgPyAnZW5hYmxlJyA6ICdkaXNhYmxlJ30gZ3BzIGxvY2F0aW9uIHByb3ZpZGVyYCk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnRvZ2dsZUdQU0xvY2F0aW9uUHJvdmlkZXIodGhpcy5vcHRzLmdwc0VuYWJsZWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgU29ycnkhICdncHNFbmFibGVkJyBjYXBhYmlsaXR5IGlzIG9ubHkgYXZhaWxhYmxlIGZvciBlbXVsYXRvcnNgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBnZXQgYXBwUGFja2FnZSBldCBhbCBmcm9tIG1hbmlmZXN0IGlmIG5lY2Vzc2FyeVxuICAgIGNvbnN0IGFwcEluZm8gPSBhd2FpdCBoZWxwZXJzLmdldExhdW5jaEluZm8odGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gICAgLy8gYW5kIGdldCBpdCBvbnRvIG91ciAnb3B0cycgb2JqZWN0IHNvIHdlIHVzZSBpdCBmcm9tIG5vdyBvblxuICAgIE9iamVjdC5hc3NpZ24odGhpcy5vcHRzLCBhcHBJbmZvIHx8IHt9KTtcblxuICAgIC8vIHNldCBhY3R1YWwgZGV2aWNlIG5hbWUsIHVkaWQsIHBsYXRmb3JtIHZlcnNpb24sIHNjcmVlbiBzaXplLCBzY3JlZW4gZGVuc2l0eSwgbW9kZWwgYW5kIG1hbnVmYWN0dXJlciBkZXRhaWxzXG4gICAgdGhpcy5jYXBzLmRldmljZU5hbWUgPSB0aGlzLmFkYi5jdXJEZXZpY2VJZDtcbiAgICB0aGlzLmNhcHMuZGV2aWNlVURJRCA9IHRoaXMub3B0cy51ZGlkO1xuXG4gICAgLy8gc3RhcnQgYW4gYXZkLCBzZXQgdGhlIGxhbmd1YWdlL2xvY2FsZSwgcGljayBhbiBlbXVsYXRvciwgZXRjLi4uXG4gICAgLy8gVE9ETyB3aXRoIG11bHRpcGxlIGRldmljZXMgd2UnbGwgbmVlZCB0byBwYXJhbWV0ZXJpemUgdGhpc1xuICAgIHRoaXMuZGVmYXVsdElNRSA9IGF3YWl0IGhlbHBlcnMuaW5pdERldmljZSh0aGlzLmFkYiwgdGhpcy5vcHRzKTtcblxuICAgIC8vIFByZXBhcmUgdGhlIGRldmljZSBieSBmb3J3YXJkaW5nIHRoZSBVaUF1dG9tYXRvcjIgcG9ydFxuICAgIC8vIFRoaXMgY2FsbCBtdXRhdGVzIHRoaXMub3B0cy5zeXN0ZW1Qb3J0IGlmIGl0IGlzIG5vdCBzZXQgZXhwbGljaXRseVxuICAgIGF3YWl0IHRoaXMuYWxsb2NhdGVTeXN0ZW1Qb3J0KCk7XG5cbiAgICAvLyBQcmVwYXJlIHRoZSBkZXZpY2UgYnkgZm9yd2FyZGluZyB0aGUgVWlBdXRvbWF0b3IyIE1KUEVHIHNlcnZlciBwb3J0IChpZlxuICAgIC8vIGFwcGxpY2FibGUpXG4gICAgYXdhaXQgdGhpcy5hbGxvY2F0ZU1qcGVnU2VydmVyUG9ydCgpO1xuXG4gICAgLy8gc2V0IHVwIHRoZSBtb2RpZmllZCBVaUF1dG9tYXRvcjIgc2VydmVyIGV0Y1xuICAgIGF3YWl0IHRoaXMuaW5pdFVpQXV0b21hdG9yMlNlcnZlcigpO1xuXG4gICAgLy8gU2hvdWxkIGJlIGFmdGVyIGluc3RhbGxpbmcgaW8uYXBwaXVtLnNldHRpbmdzIGluIGhlbHBlcnMuaW5pdERldmljZVxuICAgIGlmICh0aGlzLm9wdHMuZGlzYWJsZVdpbmRvd0FuaW1hdGlvbiAmJiAoYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKSA8IDI2KSkgeyAvLyBBUEkgbGV2ZWwgMjYgaXMgQW5kcm9pZCA4LjAuXG4gICAgICAvLyBHcmFudGluZyBhbmRyb2lkLnBlcm1pc3Npb24uU0VUX0FOSU1BVElPTl9TQ0FMRSBpcyBuZWNlc3NhcnkgdG8gaGFuZGxlIGFuaW1hdGlvbnMgdW5kZXIgQVBJIGxldmVsIDI2XG4gICAgICAvLyBSZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL3B1bGwvMTE2NDAjaXNzdWVjb21tZW50LTQzODI2MDQ3N1xuICAgICAgLy8gYC0tbm8td2luZG93LWFuaW1hdGlvbmAgd29ya3Mgb3ZlciBBbmRyb2lkIDggdG8gZGlzYWJsZSBhbGwgb2YgYW5pbWF0aW9uc1xuICAgICAgaWYgKGF3YWl0IHRoaXMuYWRiLmlzQW5pbWF0aW9uT24oKSkge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKCdEaXNhYmxpbmcgYW5pbWF0aW9uIHZpYSBpby5hcHBpdW0uc2V0dGluZ3MnKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0QW5pbWF0aW9uU3RhdGUoZmFsc2UpO1xuICAgICAgICB0aGlzLl93YXNXaW5kb3dBbmltYXRpb25EaXNhYmxlZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKCdXaW5kb3cgYW5pbWF0aW9uIGlzIGFscmVhZHkgZGlzYWJsZWQnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzZXQgdXAgYXBwIHVuZGVyIHRlc3RcbiAgICAvLyBwcmVwYXJlIG91ciBhY3R1YWwgQVVULCBnZXQgaXQgb24gdGhlIGRldmljZSwgZXRjLi4uXG4gICAgYXdhaXQgdGhpcy5pbml0QVVUKCk7XG5cbiAgICAvLyBBZGRpbmcgQVVUIHBhY2thZ2UgbmFtZSBpbiB0aGUgY2FwYWJpbGl0aWVzIGlmIHBhY2thZ2UgbmFtZSBub3QgZXhpc3QgaW4gY2Fwc1xuICAgIGlmICghdGhpcy5jYXBzLmFwcFBhY2thZ2UgJiYgYXBwSW5mbykge1xuICAgICAgdGhpcy5jYXBzLmFwcFBhY2thZ2UgPSBhcHBJbmZvLmFwcFBhY2thZ2U7XG4gICAgfVxuXG4gICAgLy8gbGF1bmNoIFVpQXV0b21hdG9yMiBhbmQgd2FpdCB0aWxsIGl0cyBvbmxpbmUgYW5kIHdlIGhhdmUgYSBzZXNzaW9uXG4gICAgYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuc3RhcnRTZXNzaW9uKHRoaXMuY2Fwcyk7XG5cbiAgICBhd2FpdCB0aGlzLmFkZERldmljZUluZm9Ub0NhcHMoKTtcblxuICAgIC8vIFVubG9jayB0aGUgZGV2aWNlIGFmdGVyIHRoZSBzZXNzaW9uIGlzIHN0YXJ0ZWQuXG4gICAgaWYgKCF0aGlzLm9wdHMuc2tpcFVubG9jaykge1xuICAgICAgLy8gdW5sb2NrIHRoZSBkZXZpY2UgdG8gcHJlcGFyZSBpdCBmb3IgdGVzdGluZ1xuICAgICAgYXdhaXQgaGVscGVycy51bmxvY2sodGhpcywgdGhpcy5hZGIsIHRoaXMuY2Fwcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGAnc2tpcFVubG9jaycgY2FwYWJpbGl0eSBzZXQsIHNvIHNraXBwaW5nIGRldmljZSB1bmxvY2tgKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0Nocm9tZVNlc3Npb24pIHsgLy8gc3RhcnQgYSBjaHJvbWVkcml2ZXIgc2Vzc2lvblxuICAgICAgYXdhaXQgdGhpcy5zdGFydENocm9tZVNlc3Npb24odGhpcyk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdHMuYXV0b0xhdW5jaCAmJiB0aGlzLm9wdHMuYXBwUGFja2FnZSkge1xuICAgICAgYXdhaXQgdGhpcy5lbnN1cmVBcHBTdGFydHMoKTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgaW5pdGlhbCBvcmllbnRhdGlvbiBpcyByZXF1ZXN0ZWQsIHNldCBpdFxuICAgIGlmICh1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy5vcmllbnRhdGlvbikpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBTZXR0aW5nIGluaXRpYWwgb3JpZW50YXRpb24gdG8gJyR7dGhpcy5vcHRzLm9yaWVudGF0aW9ufSdgKTtcbiAgICAgIGF3YWl0IHRoaXMuc2V0T3JpZW50YXRpb24odGhpcy5vcHRzLm9yaWVudGF0aW9uKTtcbiAgICB9XG5cbiAgICAvLyBpZiB3ZSB3YW50IHRvIGltbWVkaWF0ZWx5IGdldCBpbnRvIGEgd2Vidmlldywgc2V0IG91ciBjb250ZXh0XG4gICAgLy8gYXBwcm9wcmlhdGVseVxuICAgIGlmICh0aGlzLm9wdHMuYXV0b1dlYnZpZXcpIHtcbiAgICAgIGNvbnN0IHZpZXdOYW1lID0gdGhpcy5kZWZhdWx0V2Vidmlld05hbWUoKTtcbiAgICAgIGNvbnN0IHRpbWVvdXQgPSB0aGlzLm9wdHMuYXV0b1dlYnZpZXdUaW1lb3V0IHx8IDIwMDA7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBTZXR0aW5nIGF1dG8gd2VidmlldyB0byBjb250ZXh0ICcke3ZpZXdOYW1lfScgd2l0aCB0aW1lb3V0ICR7dGltZW91dH1tc2ApO1xuICAgICAgYXdhaXQgcmV0cnlJbnRlcnZhbCh0aW1lb3V0IC8gNTAwLCA1MDAsIHRoaXMuc2V0Q29udGV4dC5iaW5kKHRoaXMpLCB2aWV3TmFtZSk7XG4gICAgfVxuXG4gICAgLy8gbm93IHRoYXQgZXZlcnl0aGluZyBoYXMgc3RhcnRlZCBzdWNjZXNzZnVsbHksIHR1cm4gb24gcHJveHlpbmcgc28gYWxsXG4gICAgLy8gc3Vic2VxdWVudCBzZXNzaW9uIHJlcXVlc3RzIGdvIHN0cmFpZ2h0IHRvL2Zyb20gdWlhdXRvbWF0b3IyXG4gICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IHRydWU7XG4gIH1cblxuICBhc3luYyBhZGREZXZpY2VJbmZvVG9DYXBzICgpIHtcbiAgICBjb25zdCB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgcGxhdGZvcm1WZXJzaW9uLFxuICAgICAgbWFudWZhY3R1cmVyLFxuICAgICAgbW9kZWwsXG4gICAgICByZWFsRGlzcGxheVNpemUsXG4gICAgICBkaXNwbGF5RGVuc2l0eSxcbiAgICB9ID0gYXdhaXQgdGhpcy5tb2JpbGVHZXREZXZpY2VJbmZvKCk7XG4gICAgdGhpcy5jYXBzLmRldmljZUFwaUxldmVsID0gcGFyc2VJbnQoYXBpVmVyc2lvbiwgMTApO1xuICAgIHRoaXMuY2Fwcy5wbGF0Zm9ybVZlcnNpb24gPSBwbGF0Zm9ybVZlcnNpb247XG4gICAgdGhpcy5jYXBzLmRldmljZVNjcmVlblNpemUgPSByZWFsRGlzcGxheVNpemU7XG4gICAgdGhpcy5jYXBzLmRldmljZVNjcmVlbkRlbnNpdHkgPSBkaXNwbGF5RGVuc2l0eTtcbiAgICB0aGlzLmNhcHMuZGV2aWNlTW9kZWwgPSBtb2RlbDtcbiAgICB0aGlzLmNhcHMuZGV2aWNlTWFudWZhY3R1cmVyID0gbWFudWZhY3R1cmVyO1xuICB9XG5cbiAgYXN5bmMgaW5pdFVpQXV0b21hdG9yMlNlcnZlciAoKSB7XG4gICAgLy8gYnJva2VuIG91dCBmb3IgcmVhZGFiaWxpdHlcbiAgICBjb25zdCB1aWF1dG9tYXRvcjJPcHRzID0ge1xuICAgICAgaG9zdDogdGhpcy5vcHRzLnJlbW90ZUFkYkhvc3QgfHwgdGhpcy5vcHRzLmhvc3QgfHwgTE9DQUxIT1NUX0lQNCxcbiAgICAgIHN5c3RlbVBvcnQ6IHRoaXMub3B0cy5zeXN0ZW1Qb3J0LFxuICAgICAgZGV2aWNlUG9ydDogREVWSUNFX1BPUlQsXG4gICAgICBhZGI6IHRoaXMuYWRiLFxuICAgICAgYXBrOiB0aGlzLm9wdHMuYXBwLFxuICAgICAgdG1wRGlyOiB0aGlzLm9wdHMudG1wRGlyLFxuICAgICAgYXBwUGFja2FnZTogdGhpcy5vcHRzLmFwcFBhY2thZ2UsXG4gICAgICBhcHBBY3Rpdml0eTogdGhpcy5vcHRzLmFwcEFjdGl2aXR5LFxuICAgICAgZGlzYWJsZVdpbmRvd0FuaW1hdGlvbjogISF0aGlzLm9wdHMuZGlzYWJsZVdpbmRvd0FuaW1hdGlvbixcbiAgICAgIGRpc2FibGVTdXBwcmVzc0FjY2Vzc2liaWxpdHlTZXJ2aWNlOiB0aGlzLm9wdHMuZGlzYWJsZVN1cHByZXNzQWNjZXNzaWJpbGl0eVNlcnZpY2UsXG4gICAgICByZWFkVGltZW91dDogdGhpcy5vcHRzLnVpYXV0b21hdG9yMlNlcnZlclJlYWRUaW1lb3V0LFxuICAgIH07XG4gICAgLy8gbm93IHRoYXQgd2UgaGF2ZSBwYWNrYWdlIGFuZCBhY3Rpdml0eSwgd2UgY2FuIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZlxuICAgIC8vIHVpYXV0b21hdG9yMiB3aXRoIHRoZSBhcHByb3ByaWF0ZSBvcHRpb25zXG4gICAgdGhpcy51aWF1dG9tYXRvcjIgPSBuZXcgVWlBdXRvbWF0b3IyU2VydmVyKHRoaXMubG9nLCB1aWF1dG9tYXRvcjJPcHRzKTtcbiAgICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy51aWF1dG9tYXRvcjIucHJveHlSZXFSZXMuYmluZCh0aGlzLnVpYXV0b21hdG9yMik7XG4gICAgdGhpcy5wcm94eUNvbW1hbmQgPSB0aGlzLnVpYXV0b21hdG9yMi5wcm94eUNvbW1hbmQuYmluZCh0aGlzLnVpYXV0b21hdG9yMik7XG5cbiAgICBpZiAodGhpcy5vcHRzLnNraXBTZXJ2ZXJJbnN0YWxsYXRpb24pIHtcbiAgICAgIHRoaXMubG9nLmluZm8oYCdza2lwU2VydmVySW5zdGFsbGF0aW9uJyBpcyBzZXQuIFNraXBwaW5nIFVJQXV0b21hdG9yMiBzZXJ2ZXIgaW5zdGFsbGF0aW9uLmApO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5pbnN0YWxsU2VydmVyQXBrKHRoaXMub3B0cy51aWF1dG9tYXRvcjJTZXJ2ZXJJbnN0YWxsVGltZW91dCk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5hZGRUb0RldmljZUlkbGVXaGl0ZWxpc3QoXG4gICAgICAgICAgU0VUVElOR1NfSEVMUEVSX1BLR19JRCwgU0VSVkVSX1BBQ0tBR0VfSUQsIFNFUlZFUl9URVNUX1BBQ0tBR0VfSUQsXG4gICAgICAgICk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYENhbm5vdCBhZGQgc2VydmVyIHBhY2thZ2VzIHRvIHRoZSBEb3plIHdoaXRlbGlzdC4gT3JpZ2luYWwgZXJyb3I6IGAgK1xuICAgICAgICAgIChlLnN0ZGVyciB8fCBlLm1lc3NhZ2UpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBpbml0QVVUICgpIHtcbiAgICAvLyBVbmluc3RhbGwgYW55IHVuaW5zdGFsbE90aGVyUGFja2FnZXMgd2hpY2ggd2VyZSBzcGVjaWZpZWQgaW4gY2Fwc1xuICAgIGlmICh0aGlzLm9wdHMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcykge1xuICAgICAgYXdhaXQgaGVscGVycy51bmluc3RhbGxPdGhlclBhY2thZ2VzKFxuICAgICAgICB0aGlzLmFkYixcbiAgICAgICAgaGVscGVycy5wYXJzZUFycmF5KHRoaXMub3B0cy51bmluc3RhbGxPdGhlclBhY2thZ2VzKSxcbiAgICAgICAgW1NFVFRJTkdTX0hFTFBFUl9QS0dfSUQsIFNFUlZFUl9QQUNLQUdFX0lELCBTRVJWRVJfVEVTVF9QQUNLQUdFX0lEXVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBJbnN0YWxsIGFueSBcIm90aGVyQXBwc1wiIHRoYXQgd2VyZSBzcGVjaWZpZWQgaW4gY2Fwc1xuICAgIGlmICh0aGlzLm9wdHMub3RoZXJBcHBzKSB7XG4gICAgICBsZXQgb3RoZXJBcHBzO1xuICAgICAgdHJ5IHtcbiAgICAgICAgb3RoZXJBcHBzID0gaGVscGVycy5wYXJzZUFycmF5KHRoaXMub3B0cy5vdGhlckFwcHMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBDb3VsZCBub3QgcGFyc2UgXCJvdGhlckFwcHNcIiBjYXBhYmlsaXR5OiAke2UubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICAgIG90aGVyQXBwcyA9IGF3YWl0IEIuYWxsKG90aGVyQXBwc1xuICAgICAgICAubWFwKChhcHApID0+IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAoYXBwLCBbQVBLX0VYVEVOU0lPTiwgQVBLU19FWFRFTlNJT05dKSkpO1xuICAgICAgYXdhaXQgaGVscGVycy5pbnN0YWxsT3RoZXJBcGtzKG90aGVyQXBwcywgdGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0cy5hcHApIHtcbiAgICAgIGlmICh0aGlzLm9wdHMubm9SZXNldCAmJiAhKGF3YWl0IHRoaXMuYWRiLmlzQXBwSW5zdGFsbGVkKHRoaXMub3B0cy5hcHBQYWNrYWdlKSlcbiAgICAgICAgICB8fCAhdGhpcy5vcHRzLm5vUmVzZXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLm9wdHMubm9TaWduICYmICFhd2FpdCB0aGlzLmFkYi5jaGVja0Fwa0NlcnQodGhpcy5vcHRzLmFwcCwgdGhpcy5vcHRzLmFwcFBhY2thZ2UsIHtcbiAgICAgICAgICByZXF1aXJlRGVmYXVsdENlcnQ6IGZhbHNlLFxuICAgICAgICB9KSkge1xuICAgICAgICAgIGF3YWl0IGhlbHBlcnMuc2lnbkFwcCh0aGlzLmFkYiwgdGhpcy5vcHRzLmFwcCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLm9wdHMuc2tpcFVuaW5zdGFsbCkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuYWRiLnVuaW5zdGFsbEFwayh0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgaGVscGVycy5pbnN0YWxsQXBrKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoJ25vUmVzZXQgaGFzIGJlZW4gcmVxdWVzdGVkIGFuZCB0aGUgYXBwIGlzIGFscmVhZHkgaW5zdGFsbGVkLiBEb2luZyBub3RoaW5nJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLm9wdHMuZnVsbFJlc2V0KSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ0Z1bGwgcmVzZXQgcmVxdWlyZXMgYW4gYXBwIGNhcGFiaWxpdHksIHVzZSBmYXN0UmVzZXQgaWYgYXBwIGlzIG5vdCBwcm92aWRlZCcpO1xuICAgICAgfVxuICAgICAgdGhpcy5sb2cuZGVidWcoJ05vIGFwcCBjYXBhYmlsaXR5LiBBc3N1bWluZyBpdCBpcyBhbHJlYWR5IG9uIHRoZSBkZXZpY2UnKTtcbiAgICAgIGlmICh0aGlzLm9wdHMuZmFzdFJlc2V0ICYmIHRoaXMub3B0cy5hcHBQYWNrYWdlKSB7XG4gICAgICAgIGF3YWl0IGhlbHBlcnMucmVzZXRBcHAodGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZW5zdXJlQXBwU3RhcnRzICgpIHtcbiAgICAvLyBtYWtlIHN1cmUgd2UgaGF2ZSBhbiBhY3Rpdml0eSBhbmQgcGFja2FnZSB0byB3YWl0IGZvclxuICAgIGNvbnN0IGFwcFdhaXRQYWNrYWdlID0gdGhpcy5vcHRzLmFwcFdhaXRQYWNrYWdlIHx8IHRoaXMub3B0cy5hcHBQYWNrYWdlO1xuICAgIGNvbnN0IGFwcFdhaXRBY3Rpdml0eSA9IHRoaXMub3B0cy5hcHBXYWl0QWN0aXZpdHkgfHwgdGhpcy5vcHRzLmFwcEFjdGl2aXR5O1xuXG4gICAgdGhpcy5sb2cuaW5mbyhgU3RhcnRpbmcgJyR7dGhpcy5vcHRzLmFwcFBhY2thZ2V9LyR7dGhpcy5vcHRzLmFwcEFjdGl2aXR5fSBgICtcbiAgICAgIGBhbmQgd2FpdGluZyBmb3IgJyR7YXBwV2FpdFBhY2thZ2V9LyR7YXBwV2FpdEFjdGl2aXR5fSdgKTtcblxuICAgIGlmICh0aGlzLmNhcHMuYW5kcm9pZENvdmVyYWdlKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBhbmRyb2lkQ292ZXJhZ2UgaXMgY29uZmlndXJlZC4gYCArXG4gICAgICAgIGAgU3RhcnRpbmcgaW5zdHJ1bWVudGF0aW9uIG9mICcke3RoaXMuY2Fwcy5hbmRyb2lkQ292ZXJhZ2V9Jy4uLmApO1xuICAgICAgYXdhaXQgdGhpcy5hZGIuYW5kcm9pZENvdmVyYWdlKHRoaXMuY2Fwcy5hbmRyb2lkQ292ZXJhZ2UsIGFwcFdhaXRQYWNrYWdlLCBhcHBXYWl0QWN0aXZpdHkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRzLm5vUmVzZXQgJiYgIXRoaXMub3B0cy5mb3JjZUFwcExhdW5jaFxuICAgICAgICAmJiBhd2FpdCB0aGlzLmFkYi5wcm9jZXNzRXhpc3RzKHRoaXMub3B0cy5hcHBQYWNrYWdlKSkge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgJyR7dGhpcy5vcHRzLmFwcFBhY2thZ2V9JyBpcyBhbHJlYWR5IHJ1bm5pbmcgYW5kIG5vUmVzZXQgaXMgZW5hYmxlZC4gYCArXG4gICAgICAgIGBTZXQgZm9yY2VBcHBMYXVuY2ggY2FwYWJpbGl0eSB0byB0cnVlIGlmIHRoZSBhcHAgbXVzdCBiZSBmb3JjZWZ1bGx5IHJlc3RhcnRlZCBvbiBzZXNzaW9uIHN0YXJ0dXAuYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuYWRiLnN0YXJ0QXBwKHtcbiAgICAgIHBrZzogdGhpcy5vcHRzLmFwcFBhY2thZ2UsXG4gICAgICBhY3Rpdml0eTogdGhpcy5vcHRzLmFwcEFjdGl2aXR5LFxuICAgICAgYWN0aW9uOiB0aGlzLm9wdHMuaW50ZW50QWN0aW9uIHx8ICdhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTicsXG4gICAgICBjYXRlZ29yeTogdGhpcy5vcHRzLmludGVudENhdGVnb3J5IHx8ICdhbmRyb2lkLmludGVudC5jYXRlZ29yeS5MQVVOQ0hFUicsXG4gICAgICBmbGFnczogdGhpcy5vcHRzLmludGVudEZsYWdzIHx8ICcweDEwMjAwMDAwJywgLy8gRkxBR19BQ1RJVklUWV9ORVdfVEFTSyB8IEZMQUdfQUNUSVZJVFlfUkVTRVRfVEFTS19JRl9ORUVERURcbiAgICAgIHdhaXRQa2c6IHRoaXMub3B0cy5hcHBXYWl0UGFja2FnZSxcbiAgICAgIHdhaXRBY3Rpdml0eTogdGhpcy5vcHRzLmFwcFdhaXRBY3Rpdml0eSxcbiAgICAgIHdhaXRGb3JMYXVuY2g6IHRoaXMub3B0cy5hcHBXYWl0Rm9yTGF1bmNoLFxuICAgICAgd2FpdER1cmF0aW9uOiB0aGlzLm9wdHMuYXBwV2FpdER1cmF0aW9uLFxuICAgICAgb3B0aW9uYWxJbnRlbnRBcmd1bWVudHM6IHRoaXMub3B0cy5vcHRpb25hbEludGVudEFyZ3VtZW50cyxcbiAgICAgIHN0b3BBcHA6IHRoaXMub3B0cy5mb3JjZUFwcExhdW5jaCB8fCAhdGhpcy5vcHRzLmRvbnRTdG9wQXBwT25SZXNldCxcbiAgICAgIHJldHJ5OiB0cnVlLFxuICAgICAgdXNlcjogdGhpcy5vcHRzLnVzZXJQcm9maWxlLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlU2Vzc2lvbiAoKSB7XG4gICAgdGhpcy5sb2cuZGVidWcoJ0RlbGV0aW5nIFVpQXV0b21hdG9yMiBzZXNzaW9uJyk7XG5cbiAgICBjb25zdCBzY3JlZW5SZWNvcmRpbmdTdG9wVGFza3MgPSBbYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFfLmlzRW1wdHkodGhpcy5fc2NyZWVuUmVjb3JkaW5nUHJvcGVydGllcykpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zdG9wUmVjb3JkaW5nU2NyZWVuKCk7XG4gICAgICB9XG4gICAgfSwgYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKGF3YWl0IHRoaXMubW9iaWxlSXNNZWRpYVByb2plY3Rpb25SZWNvcmRpbmdSdW5uaW5nKCkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5tb2JpbGVTdG9wTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nKCk7XG4gICAgICB9XG4gICAgfSwgYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFfLmlzRW1wdHkodGhpcy5fc2NyZWVuU3RyZWFtaW5nUHJvcHMpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubW9iaWxlU3RvcFNjcmVlblN0cmVhbWluZygpO1xuICAgICAgfVxuICAgIH1dO1xuXG4gICAgYXdhaXQgYW5kcm9pZEhlbHBlcnMucmVtb3ZlQWxsU2Vzc2lvbldlYlNvY2tldEhhbmRsZXJzKHRoaXMuc2VydmVyLCB0aGlzLnNlc3Npb25JZCk7XG5cbiAgICBpZiAodGhpcy51aWF1dG9tYXRvcjIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc3RvcENocm9tZWRyaXZlclByb3hpZXMoKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBVbmFibGUgdG8gc3RvcCBDaHJvbWVEcml2ZXIgcHJveGllczogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmp3cFByb3h5QWN0aXZlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuZGVsZXRlU2Vzc2lvbigpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aGlzLmxvZy53YXJuKGBVbmFibGUgdG8gcHJveHkgZGVsZXRlU2Vzc2lvbiB0byBVaUF1dG9tYXRvcjI6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMudWlhdXRvbWF0b3IyID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuYWRiKSB7XG4gICAgICBhd2FpdCBCLmFsbChzY3JlZW5SZWNvcmRpbmdTdG9wVGFza3MubWFwKCh0YXNrKSA9PiB7XG4gICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRhc2soKTtcbiAgICAgICAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgICAgIH0pKCk7XG4gICAgICB9KSk7XG5cbiAgICAgIGlmICh0aGlzLm9wdHMudW5pY29kZUtleWJvYXJkICYmIHRoaXMub3B0cy5yZXNldEtleWJvYXJkICYmIHRoaXMuZGVmYXVsdElNRSkge1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgUmVzZXR0aW5nIElNRSB0byAnJHt0aGlzLmRlZmF1bHRJTUV9J2ApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuYWRiLnNldElNRSh0aGlzLmRlZmF1bHRJTUUpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aGlzLmxvZy53YXJuKGBVbmFibGUgdG8gcmVzZXQgSU1FOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jYXBzLmFuZHJvaWRDb3ZlcmFnZSkge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKCdTaHV0dGluZyBkb3duIHRoZSBhZGIgcHJvY2VzcyBvZiBpbnN0cnVtZW50YXRpb24uLi4nKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuZW5kQW5kcm9pZENvdmVyYWdlKCk7XG4gICAgICAgIC8vIFVzZSB0aGlzIGJyb2FkY2FzdCBpbnRlbnQgdG8gbm90aWZ5IGl0J3MgdGltZSB0byBkdW1wIGNvdmVyYWdlIHRvIGZpbGVcbiAgICAgICAgaWYgKHRoaXMuY2Fwcy5hbmRyb2lkQ292ZXJhZ2VFbmRJbnRlbnQpIHtcbiAgICAgICAgICB0aGlzLmxvZy5pbmZvKGBTZW5kaW5nIGludGVudCBicm9hZGNhc3QgJyR7dGhpcy5jYXBzLmFuZHJvaWRDb3ZlcmFnZUVuZEludGVudH0nIGF0IHRoZSBlbmQgb2YgaW5zdHJ1bWVudGluZy5gKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLmFkYi5icm9hZGNhc3QodGhpcy5jYXBzLmFuZHJvaWRDb3ZlcmFnZUVuZEludGVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2cud2FybignTm8gYW5kcm9pZENvdmVyYWdlRW5kSW50ZW50IGlzIGNvbmZpZ3VyZWQgaW4gY2Fwcy4gUG9zc2libHkgeW91IGNhbm5vdCBnZXQgY292ZXJhZ2UgZmlsZS4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0cy5hcHBQYWNrYWdlKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0Nocm9tZVNlc3Npb25cbiAgICAgICAgICAgICYmICF0aGlzLm9wdHMuZG9udFN0b3BBcHBPblJlc2V0XG4gICAgICAgICAgICAmJiAhdGhpcy5vcHRzLm5vUmVzZXQpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5hZGIuZm9yY2VTdG9wKHRoaXMub3B0cy5hcHBQYWNrYWdlKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMubG9nLndhcm4oYFVuYWJsZSB0byBmb3JjZSBzdG9wIGFwcDogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0cy5mdWxsUmVzZXQgJiYgIXRoaXMub3B0cy5za2lwVW5pbnN0YWxsKSB7XG4gICAgICAgICAgdGhpcy5sb2cuZGVidWcoYENhcGFiaWxpdHkgJ2Z1bGxSZXNldCcgc2V0IHRvICd0cnVlJywgVW5pbnN0YWxsaW5nICcke3RoaXMub3B0cy5hcHBQYWNrYWdlfSdgKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5hZGIudW5pbnN0YWxsQXBrKHRoaXMub3B0cy5hcHBQYWNrYWdlKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMubG9nLndhcm4oYFVuYWJsZSB0byB1bmluc3RhbGwgYXBwOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gVGhpcyB2YWx1ZSBjYW4gYmUgdHJ1ZSBpZiB0ZXN0IHRhcmdldCBkZXZpY2UgaXMgPD0gMjZcbiAgICAgIGlmICh0aGlzLl93YXNXaW5kb3dBbmltYXRpb25EaXNhYmxlZCkge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKCdSZXN0b3Jpbmcgd2luZG93IGFuaW1hdGlvbiBzdGF0ZScpO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5zZXRBbmltYXRpb25TdGF0ZSh0cnVlKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuYWRiLnN0b3BMb2djYXQoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMucmVsZWFzZVN5c3RlbVBvcnQoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYFVuYWJsZSB0byByZW1vdmUgc3lzdGVtIHBvcnQgZm9yd2FyZDogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICAvLyBJZ25vcmUsIHRoaXMgYmxvY2sgd2lsbCBhbHNvIGJlIGNhbGxlZCB3aGVuIHdlIGZhbGwgaW4gY2F0Y2ggYmxvY2tcbiAgICAgICAgLy8gYW5kIGJlZm9yZSBldmVuIHBvcnQgZm9yd2FyZC5cbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMucmVsZWFzZU1qcGVnU2VydmVyUG9ydCgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgVW5hYmxlIHRvIHJlbW92ZSBNSlBFRyBzZXJ2ZXIgcG9ydCBmb3J3YXJkOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgIC8vIElnbm9yZSwgdGhpcyBibG9jayB3aWxsIGFsc28gYmUgY2FsbGVkIHdoZW4gd2UgZmFsbCBpbiBjYXRjaCBibG9ja1xuICAgICAgICAvLyBhbmQgYmVmb3JlIGV2ZW4gcG9ydCBmb3J3YXJkLlxuICAgICAgfVxuXG4gICAgICBpZiAoYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKSA+PSAyOCkgeyAvLyBBbmRyb2lkIFBcbiAgICAgICAgdGhpcy5sb2cuaW5mbygnUmVzdG9yaW5nIGhpZGRlbiBhcGkgcG9saWN5IHRvIHRoZSBkZXZpY2UgZGVmYXVsdCBjb25maWd1cmF0aW9uJyk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnNldERlZmF1bHRIaWRkZW5BcGlQb2xpY3koISF0aGlzLm9wdHMuaWdub3JlSGlkZGVuQXBpUG9saWN5RXJyb3IpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcHRzLnJlYm9vdCkge1xuICAgICAgICBsZXQgYXZkTmFtZSA9IHRoaXMub3B0cy5hdmQucmVwbGFjZSgnQCcsICcnKTtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoYENsb3NpbmcgZW11bGF0b3IgJyR7YXZkTmFtZX0nYCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5hZGIua2lsbEVtdWxhdG9yKGF2ZE5hbWUpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aGlzLmxvZy53YXJuKGBVbmFibGUgdG8gY2xvc2UgZW11bGF0b3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMubWpwZWdTdHJlYW0pIHtcbiAgICAgIHRoaXMubG9nLmluZm8oJ0Nsb3NpbmcgTUpQRUcgc3RyZWFtJyk7XG4gICAgICB0aGlzLm1qcGVnU3RyZWFtLnN0b3AoKTtcbiAgICB9XG4gICAgYXdhaXQgc3VwZXIuZGVsZXRlU2Vzc2lvbigpO1xuICB9XG5cbiAgYXN5bmMgY2hlY2tBcHBQcmVzZW50ICgpIHtcbiAgICB0aGlzLmxvZy5kZWJ1ZygnQ2hlY2tpbmcgd2hldGhlciBhcHAgaXMgYWN0dWFsbHkgcHJlc2VudCcpO1xuICAgIGlmICghKGF3YWl0IGZzLmV4aXN0cyh0aGlzLm9wdHMuYXBwKSkpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBmaW5kIGFwcCBhcGsgYXQgJyR7dGhpcy5vcHRzLmFwcH0nYCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgb25TZXR0aW5nc1VwZGF0ZSAoKSB7XG4gICAgLy8gaW50ZW50aW9uYWxseSBkbyBub3RoaW5nIGhlcmUsIHNpbmNlIGNvbW1hbmRzLnVwZGF0ZVNldHRpbmdzIHByb3hpZXNcbiAgICAvLyBzZXR0aW5ncyB0byB0aGUgdWlhdXRvMiBzZXJ2ZXIgYWxyZWFkeVxuICB9XG5cbiAgLy8gTmVlZCB0byBvdmVycmlkZSBhbmRyb2lkLWRyaXZlcidzIHZlcnNpb24gb2YgdGhpcyBzaW5jZSB3ZSBkb24ndCBhY3R1YWxseVxuICAvLyBoYXZlIGEgYm9vdHN0cmFwOyBpbnN0ZWFkIHdlIGp1c3QgcmVzdGFydCBhZGIgYW5kIHJlLWZvcndhcmQgdGhlIFVpQXV0b21hdG9yMlxuICAvLyBwb3J0XG4gIGFzeW5jIHdyYXBCb290c3RyYXBEaXNjb25uZWN0ICh3cmFwcGVkKSB7XG4gICAgYXdhaXQgd3JhcHBlZCgpO1xuICAgIGF3YWl0IHRoaXMuYWRiLnJlc3RhcnQoKTtcbiAgICBhd2FpdCB0aGlzLmFsbG9jYXRlU3lzdGVtUG9ydCgpO1xuICAgIGF3YWl0IHRoaXMuYWxsb2NhdGVNanBlZ1NlcnZlclBvcnQoKTtcbiAgfVxuXG4gIHByb3h5QWN0aXZlIChzZXNzaW9uSWQpIHtcbiAgICBzdXBlci5wcm94eUFjdGl2ZShzZXNzaW9uSWQpO1xuXG4gICAgLy8gd2UgYWx3YXlzIGhhdmUgYW4gYWN0aXZlIHByb3h5IHRvIHRoZSBVaUF1dG9tYXRvcjIgc2VydmVyXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjYW5Qcm94eSAoc2Vzc2lvbklkKSB7XG4gICAgc3VwZXIuY2FuUHJveHkoc2Vzc2lvbklkKTtcblxuICAgIC8vIHdlIGNhbiBhbHdheXMgcHJveHkgdG8gdGhlIHVpYXV0b21hdG9yMiBzZXJ2ZXJcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGdldFByb3h5QXZvaWRMaXN0IChzZXNzaW9uSWQpIHtcbiAgICBzdXBlci5nZXRQcm94eUF2b2lkTGlzdChzZXNzaW9uSWQpO1xuICAgIC8vIHdlIGFyZSBtYWludGFpbmluZyB0d28gc2V0cyBvZiBOT19QUk9YWSBsaXN0cywgb25lIGZvciBjaHJvbWVkcml2ZXIoQ0hST01FX05PX1BST1hZKVxuICAgIC8vIGFuZCBvbmUgZm9yIHVpYXV0b21hdG9yMihOT19QUk9YWSksIGJhc2VkIG9uIGN1cnJlbnQgY29udGV4dCB3aWxsIHJldHVybiByZWxhdGVkIE5PX1BST1hZIGxpc3RcbiAgICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLmNocm9tZWRyaXZlcikpIHtcbiAgICAgIC8vIGlmIHRoZSBjdXJyZW50IGNvbnRleHQgaXMgd2VidmlldyhjaHJvbWVkcml2ZXIpLCB0aGVuIHJldHVybiBDSFJPTUVfTk9fUFJPWFkgbGlzdFxuICAgICAgdGhpcy5qd3BQcm94eUF2b2lkID0gQ0hST01FX05PX1BST1hZO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmp3cFByb3h5QXZvaWQgPSBOT19QUk9YWTtcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0cy5uYXRpdmVXZWJTY3JlZW5zaG90KSB7XG4gICAgICB0aGlzLmp3cFByb3h5QXZvaWQgPSBbLi4udGhpcy5qd3BQcm94eUF2b2lkLCBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9zY3JlZW5zaG90JyldXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5qd3BQcm94eUF2b2lkO1xuICB9XG5cbiAgZ2V0IGlzQ2hyb21lU2Vzc2lvbiAoKSB7XG4gICAgcmV0dXJuIGhlbHBlcnMuaXNDaHJvbWVCcm93c2VyKHRoaXMub3B0cy5icm93c2VyTmFtZSk7XG4gIH1cbn1cblxuLy8gZmlyc3QgYWRkIHRoZSBhbmRyb2lkLWRyaXZlciBjb21tYW5kcyB3aGljaCB3ZSB3aWxsIGZhbGwgYmFjayB0b1xuZm9yIChsZXQgW2NtZCwgZm5dIG9mIF8udG9QYWlycyhhbmRyb2lkQ29tbWFuZHMpKSB7XG4gIEFuZHJvaWRVaWF1dG9tYXRvcjJEcml2ZXIucHJvdG90eXBlW2NtZF0gPSBmbjtcbn1cblxuLy8gdGhlbiBvdmVyd3JpdGUgd2l0aCBhbnkgdWlhdXRvbWF0b3IyLXNwZWNpZmljIGNvbW1hbmRzXG5mb3IgKGxldCBbY21kLCBmbl0gb2YgXy50b1BhaXJzKGNvbW1hbmRzKSkge1xuICBBbmRyb2lkVWlhdXRvbWF0b3IyRHJpdmVyLnByb3RvdHlwZVtjbWRdID0gZm47XG59XG5cbmV4cG9ydCB7IEFuZHJvaWRVaWF1dG9tYXRvcjJEcml2ZXIgfTtcbmV4cG9ydCBkZWZhdWx0IEFuZHJvaWRVaWF1dG9tYXRvcjJEcml2ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQSxNQUFNQSxPQUFPLEdBQUdDLE1BQU0sQ0FBQ0Ms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
|
|
520
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJoZWxwZXJzIiwiT2JqZWN0IiwiYXNzaWduIiwidWlhdXRvbWF0b3IySGVscGVycyIsImFuZHJvaWRIZWxwZXJzIiwiREVWSUNFX1BPUlRfUkFOR0UiLCJERVZJQ0VfUE9SVF9BTExPQ0FUSU9OX0dVQVJEIiwidXRpbCIsImdldExvY2tGaWxlR3VhcmQiLCJwYXRoIiwicmVzb2x2ZSIsIm9zIiwidG1wZGlyIiwidGltZW91dCIsInRyeVJlY292ZXJ5IiwiREVWSUNFX1BPUlQiLCJNSlBFR19TRVJWRVJfREVWSUNFX1BPUlQiLCJMT0NBTEhPU1RfSVA0IiwiTk9fUFJPWFkiLCJSZWdFeHAiLCJDSFJPTUVfTk9fUFJPWFkiLCJNRU1PSVpFRF9GVU5DVElPTlMiLCJBbmRyb2lkVWlhdXRvbWF0b3IyRHJpdmVyIiwiQmFzZURyaXZlciIsIm5ld01ldGhvZE1hcCIsImNvbnN0cnVjdG9yIiwib3B0cyIsInNob3VsZFZhbGlkYXRlQ2FwcyIsInNoZWxsIiwibG9jYXRvclN0cmF0ZWdpZXMiLCJkZXNpcmVkQ2FwQ29uc3RyYWludHMiLCJ1aWF1dG9tYXRvcjIiLCJqd3BQcm94eUFjdGl2ZSIsImp3cFByb3h5QXZvaWQiLCJhcGtTdHJpbmdzIiwic2V0dGluZ3MiLCJEZXZpY2VTZXR0aW5ncyIsImlnbm9yZVVuaW1wb3J0YW50Vmlld3MiLCJhbGxvd0ludmlzaWJsZUVsZW1lbnRzIiwib25TZXR0aW5nc1VwZGF0ZSIsImJpbmQiLCJjaHJvbWVkcml2ZXIiLCJzZXNzaW9uQ2hyb21lZHJpdmVycyIsImZuIiwiXyIsIm1lbW9pemUiLCJ2YWxpZGF0ZURlc2lyZWRDYXBzIiwiY2FwcyIsImNyZWF0ZVNlc3Npb24iLCJhcmdzIiwic2Vzc2lvbklkIiwic2VydmVyRGV0YWlscyIsInBsYXRmb3JtIiwid2ViU3RvcmFnZUVuYWJsZWQiLCJ0YWtlc1NjcmVlbnNob3QiLCJqYXZhc2NyaXB0RW5hYmxlZCIsImRhdGFiYXNlRW5hYmxlZCIsIm5ldHdvcmtDb25uZWN0aW9uRW5hYmxlZCIsImxvY2F0aW9uQ29udGV4dEVuYWJsZWQiLCJ3YXJuaW5ncyIsImRlc2lyZWQiLCJjdXJDb250ZXh0IiwiZGVmYXVsdENvbnRleHROYW1lIiwiZGVmYXVsdE9wdHMiLCJmdWxsUmVzZXQiLCJhdXRvTGF1bmNoIiwiYWRiUG9ydCIsIkRFRkFVTFRfQURCX1BPUlQiLCJhbmRyb2lkSW5zdGFsbFRpbWVvdXQiLCJkZWZhdWx0cyIsImlzQ2hyb21lU2Vzc2lvbiIsImxvZyIsImluZm8iLCJwa2ciLCJhY3Rpdml0eSIsImdldENocm9tZVBrZyIsImJyb3dzZXJOYW1lIiwiYXBwUGFja2FnZSIsImFwcEFjdGl2aXR5IiwicmVib290Iiwic2V0QXZkRnJvbUNhcGFiaWxpdGllcyIsImFwcCIsImNvbmZpZ3VyZUFwcCIsIkFQS19FWFRFTlNJT04iLCJBUEtTX0VYVEVOU0lPTiIsImNoZWNrQXBwUHJlc2VudCIsInN0YXJ0VWlBdXRvbWF0b3IyU2Vzc2lvbiIsImZpbGxEZXZpY2VEZXRhaWxzIiwibWpwZWdTY3JlZW5zaG90VXJsIiwibWpwZWdTdHJlYW0iLCJtanBlZyIsIk1KcGVnU3RyZWFtIiwic3RhcnQiLCJlIiwiZGVsZXRlU2Vzc2lvbiIsInBpeGVsUmF0aW8iLCJnZXREZXZpY2VQaXhlbFJhdGlvIiwic3RhdEJhckhlaWdodCIsImdldFN0YXR1c0JhckhlaWdodCIsInZpZXdwb3J0UmVjdCIsImdldFZpZXdQb3J0UmVjdCIsImRyaXZlckRhdGEiLCJnZXRTZXNzaW9uIiwic2Vzc2lvbkRhdGEiLCJkZWJ1ZyIsInVpYTJEYXRhIiwiandwcm94eSIsImNvbW1hbmQiLCJpc0VtdWxhdG9yIiwiYWRiIiwiYXZkIiwiZGV2aWNlTmFtZSIsImVycm9yQW5kVGhyb3ciLCJwbGF0Zm9ybVZlcnNpb24iLCJhdmREZXZpY2UiLCJyZXBsYWNlIiwiYWxsb2NhdGVTeXN0ZW1Qb3J0IiwiZm9yd2FyZFBvcnQiLCJsb2NhbFBvcnQiLCJjaGVja1BvcnRTdGF0dXMiLCJzeXN0ZW1Qb3J0IiwiX2hhc1N5c3RlbVBvcnRJbkNhcHMiLCJzdGFydFBvcnQiLCJlbmRQb3J0IiwiZmluZEFQb3J0Tm90SW5Vc2UiLCJyZWxlYXNlU3lzdGVtUG9ydCIsInJlbW92ZVBvcnRGb3J3YXJkIiwiYWxsb2NhdGVNanBlZ1NlcnZlclBvcnQiLCJtanBlZ1NlcnZlclBvcnQiLCJyZWxlYXNlTWpwZWdTZXJ2ZXJQb3J0IiwidWRpZCIsImVtUG9ydCIsImdldERldmljZUluZm9Gcm9tQ2FwcyIsImNyZWF0ZUFEQiIsImFwaUxldmVsIiwiZ2V0QXBpTGV2ZWwiLCJzZXRIaWRkZW5BcGlQb2xpY3kiLCJpZ25vcmVIaWRkZW5BcGlQb2xpY3lFcnJvciIsImhhc1ZhbHVlIiwiZ3BzRW5hYmxlZCIsInRvZ2dsZUdQU0xvY2F0aW9uUHJvdmlkZXIiLCJ3YXJuIiwiYXBwSW5mbyIsImdldExhdW5jaEluZm8iLCJjdXJEZXZpY2VJZCIsImRldmljZVVESUQiLCJpbml0RGV2aWNlIiwiaW5pdFVpQXV0b21hdG9yMlNlcnZlciIsImRpc2FibGVXaW5kb3dBbmltYXRpb24iLCJpc0FuaW1hdGlvbk9uIiwic2V0QW5pbWF0aW9uU3RhdGUiLCJfd2FzV2luZG93QW5pbWF0aW9uRGlzYWJsZWQiLCJpbml0QVVUIiwic3RhcnRTZXNzaW9uIiwiYWRkRGV2aWNlSW5mb1RvQ2FwcyIsInNraXBVbmxvY2siLCJ1bmxvY2siLCJzdGFydENocm9tZVNlc3Npb24iLCJlbnN1cmVBcHBTdGFydHMiLCJvcmllbnRhdGlvbiIsInNldE9yaWVudGF0aW9uIiwiYXV0b1dlYnZpZXciLCJ2aWV3TmFtZSIsImRlZmF1bHRXZWJ2aWV3TmFtZSIsImF1dG9XZWJ2aWV3VGltZW91dCIsInJldHJ5SW50ZXJ2YWwiLCJzZXRDb250ZXh0IiwiYXBpVmVyc2lvbiIsIm1hbnVmYWN0dXJlciIsIm1vZGVsIiwicmVhbERpc3BsYXlTaXplIiwiZGlzcGxheURlbnNpdHkiLCJtb2JpbGVHZXREZXZpY2VJbmZvIiwiZGV2aWNlQXBpTGV2ZWwiLCJwYXJzZUludCIsImRldmljZVNjcmVlblNpemUiLCJkZXZpY2VTY3JlZW5EZW5zaXR5IiwiZGV2aWNlTW9kZWwiLCJkZXZpY2VNYW51ZmFjdHVyZXIiLCJ1aWF1dG9tYXRvcjJPcHRzIiwiaG9zdCIsInJlbW90ZUFkYkhvc3QiLCJkZXZpY2VQb3J0IiwiYXBrIiwidG1wRGlyIiwiZGlzYWJsZVN1cHByZXNzQWNjZXNzaWJpbGl0eVNlcnZpY2UiLCJyZWFkVGltZW91dCIsInVpYXV0b21hdG9yMlNlcnZlclJlYWRUaW1lb3V0IiwiVWlBdXRvbWF0b3IyU2VydmVyIiwicHJveHlSZXFSZXMiLCJwcm94eUNvbW1hbmQiLCJza2lwU2VydmVySW5zdGFsbGF0aW9uIiwiaW5zdGFsbFNlcnZlckFwayIsInVpYXV0b21hdG9yMlNlcnZlckluc3RhbGxUaW1lb3V0IiwiYWRkVG9EZXZpY2VJZGxlV2hpdGVsaXN0IiwiU0VUVElOR1NfSEVMUEVSX1BLR19JRCIsIlNFUlZFUl9QQUNLQUdFX0lEIiwiU0VSVkVSX1RFU1RfUEFDS0FHRV9JRCIsInN0ZGVyciIsIm1lc3NhZ2UiLCJ1bmluc3RhbGxPdGhlclBhY2thZ2VzIiwicGFyc2VBcnJheSIsIm90aGVyQXBwcyIsIkIiLCJhbGwiLCJtYXAiLCJpbnN0YWxsT3RoZXJBcGtzIiwibm9SZXNldCIsImlzQXBwSW5zdGFsbGVkIiwibm9TaWduIiwiY2hlY2tBcGtDZXJ0IiwicmVxdWlyZURlZmF1bHRDZXJ0Iiwic2lnbkFwcCIsInNraXBVbmluc3RhbGwiLCJ1bmluc3RhbGxBcGsiLCJpbnN0YWxsQXBrIiwiZmFzdFJlc2V0IiwicmVzZXRBcHAiLCJhcHBXYWl0UGFja2FnZSIsImFwcFdhaXRBY3Rpdml0eSIsImFuZHJvaWRDb3ZlcmFnZSIsImZvcmNlQXBwTGF1bmNoIiwicHJvY2Vzc0V4aXN0cyIsInN0YXJ0QXBwIiwiYWN0aW9uIiwiaW50ZW50QWN0aW9uIiwiY2F0ZWdvcnkiLCJpbnRlbnRDYXRlZ29yeSIsImZsYWdzIiwiaW50ZW50RmxhZ3MiLCJ3YWl0UGtnIiwid2FpdEFjdGl2aXR5Iiwid2FpdEZvckxhdW5jaCIsImFwcFdhaXRGb3JMYXVuY2giLCJ3YWl0RHVyYXRpb24iLCJhcHBXYWl0RHVyYXRpb24iLCJvcHRpb25hbEludGVudEFyZ3VtZW50cyIsInN0b3BBcHAiLCJkb250U3RvcEFwcE9uUmVzZXQiLCJyZXRyeSIsInVzZXIiLCJ1c2VyUHJvZmlsZSIsInNjcmVlblJlY29yZGluZ1N0b3BUYXNrcyIsImlzRW1wdHkiLCJfc2NyZWVuUmVjb3JkaW5nUHJvcGVydGllcyIsInN0b3BSZWNvcmRpbmdTY3JlZW4iLCJtb2JpbGVJc01lZGlhUHJvamVjdGlvblJlY29yZGluZ1J1bm5pbmciLCJtb2JpbGVTdG9wTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nIiwiX3NjcmVlblN0cmVhbWluZ1Byb3BzIiwibW9iaWxlU3RvcFNjcmVlblN0cmVhbWluZyIsInJlbW92ZUFsbFNlc3Npb25XZWJTb2NrZXRIYW5kbGVycyIsInNlcnZlciIsInN0b3BDaHJvbWVkcml2ZXJQcm94aWVzIiwiZXJyIiwidGFzayIsImlnbiIsImVuZEFuZHJvaWRDb3ZlcmFnZSIsImFuZHJvaWRDb3ZlcmFnZUVuZEludGVudCIsImJyb2FkY2FzdCIsImZvcmNlU3RvcCIsInN0b3BMb2djYXQiLCJlcnJvciIsInNldERlZmF1bHRIaWRkZW5BcGlQb2xpY3kiLCJhdmROYW1lIiwia2lsbEVtdWxhdG9yIiwic3RvcCIsImZzIiwiZXhpc3RzIiwid3JhcEJvb3RzdHJhcERpc2Nvbm5lY3QiLCJ3cmFwcGVkIiwicmVzdGFydCIsInByb3h5QWN0aXZlIiwiY2FuUHJveHkiLCJnZXRQcm94eUF2b2lkTGlzdCIsIm5hdGl2ZVdlYlNjcmVlbnNob3QiLCJpc0Nocm9tZUJyb3dzZXIiLCJjbWQiLCJ0b1BhaXJzIiwiYW5kcm9pZENvbW1hbmRzIiwicHJvdG90eXBlIiwiY29tbWFuZHMiXSwic291cmNlcyI6WyIuLi8uLi9saWIvZHJpdmVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBCYXNlRHJpdmVyLCBEZXZpY2VTZXR0aW5ncyB9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuaW1wb3J0IHtcbiAgVWlBdXRvbWF0b3IyU2VydmVyLCBTRVJWRVJfUEFDS0FHRV9JRCwgU0VSVkVSX1RFU1RfUEFDS0FHRV9JRFxufSBmcm9tICcuL3VpYXV0b21hdG9yMic7XG5pbXBvcnQgeyBuZXdNZXRob2RNYXAgfSBmcm9tICcuL21ldGhvZC1tYXAnO1xuaW1wb3J0IHsgZnMsIHV0aWwsIG1qcGVnIH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgcmV0cnlJbnRlcnZhbCB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBjb21tYW5kcyBmcm9tICcuL2NvbW1hbmRzL2luZGV4JztcbmltcG9ydCB7IERFRkFVTFRfQURCX1BPUlQgfSBmcm9tICdhcHBpdW0tYWRiJztcbmltcG9ydCB1aWF1dG9tYXRvcjJIZWxwZXJzIGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgeyBhbmRyb2lkSGVscGVycywgYW5kcm9pZENvbW1hbmRzLCBTRVRUSU5HU19IRUxQRVJfUEtHX0lELCB9IGZyb20gJ2FwcGl1bS1hbmRyb2lkLWRyaXZlcic7XG5pbXBvcnQgZGVzaXJlZENhcENvbnN0cmFpbnRzIGZyb20gJy4vZGVzaXJlZC1jYXBzJztcbmltcG9ydCB7IGZpbmRBUG9ydE5vdEluVXNlLCBjaGVja1BvcnRTdGF0dXMgfSBmcm9tICdwb3J0c2Nhbm5lcic7XG5pbXBvcnQgb3MgZnJvbSAnb3MnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBBUEtfRVhURU5TSU9OLCBBUEtTX0VYVEVOU0lPTiB9IGZyb20gJy4vZXh0ZW5zaW9ucyc7XG5cblxuY29uc3QgaGVscGVycyA9IE9iamVjdC5hc3NpZ24oe30sIHVpYXV0b21hdG9yMkhlbHBlcnMsIGFuZHJvaWRIZWxwZXJzKTtcblxuLy8gVGhlIHJhbmdlIG9mIHBvcnRzIHdlIGNhbiB1c2Ugb24gdGhlIHN5c3RlbSBmb3IgY29tbXVuaWNhdGluZyB0byB0aGVcbi8vIFVpQXV0b21hdG9yMiBIVFRQIHNlcnZlciBvbiB0aGUgZGV2aWNlXG5jb25zdCBERVZJQ0VfUE9SVF9SQU5HRSA9IFs4MjAwLCA4Mjk5XTtcblxuLy8gVGhlIGd1YXJkIGlzIG5lZWRlZCB0byBhdm9pZCBkeW5hbWljIHN5c3RlbSBwb3J0IGFsbG9jYXRpb24gY29uZmxpY3RzIGZvclxuLy8gcGFyYWxsZWwgZHJpdmVyIHNlc3Npb25zXG5jb25zdCBERVZJQ0VfUE9SVF9BTExPQ0FUSU9OX0dVQVJEID0gdXRpbC5nZXRMb2NrRmlsZUd1YXJkKFxuICBwYXRoLnJlc29sdmUob3MudG1wZGlyKCksICd1aWEyX2RldmljZV9wb3J0X2d1YXJkJyksXG4gIHt0aW1lb3V0OiAyNSwgdHJ5UmVjb3Zlcnk6IHRydWV9XG4pO1xuXG4vLyBUaGlzIGlzIHRoZSBwb3J0IHRoYXQgVWlBdXRvbWF0b3IyIGxpc3RlbnMgdG8gb24gdGhlIGRldmljZS4gV2Ugd2lsbCBmb3J3YXJkXG4vLyBvbmUgb2YgdGhlIHBvcnRzIGFib3ZlIG9uIHRoZSBzeXN0ZW0gdG8gdGhpcyBwb3J0IG9uIHRoZSBkZXZpY2UuXG5jb25zdCBERVZJQ0VfUE9SVCA9IDY3OTA7XG4vLyBUaGlzIGlzIHRoZSBwb3J0IHRoYXQgdGhlIFVpQXV0b21hdG9yMiBNSlBFRyBzZXJ2ZXIgbGlzdGVucyB0byBvbiB0aGUgZGV2aWNlLlxuLy8gV2Ugd2lsbCBmb3J3YXJkIG9uZSBvZiB0aGUgcG9ydHMgYWJvdmUgb24gdGhlIHN5c3RlbSB0byB0aGlzIHBvcnQgb24gdGhlXG4vLyBkZXZpY2UuXG5jb25zdCBNSlBFR19TRVJWRVJfREVWSUNFX1BPUlQgPSA3ODEwO1xuXG5jb25zdCBMT0NBTEhPU1RfSVA0ID0gJzEyNy4wLjAuMSc7XG5cbi8vIE5PX1BST1hZIGNvbnRhaW5zIHRoZSBwYXRocyB0aGF0IHdlIG5ldmVyIHdhbnQgdG8gcHJveHkgdG8gVWlBdXRvbWF0b3IyIHNlcnZlci5cbi8vIFRPRE86ICBBZGQgdGhlIGxpc3Qgb2YgcGF0aHMgdGhhdCB3ZSBuZXZlciB3YW50IHRvIHByb3h5IHRvIFVpQXV0b21hdG9yMiBzZXJ2ZXIuXG4vLyBUT0RPOiBOZWVkIHRvIHNlZ3JlZ2F0ZSB0aGUgcGF0aHMgYmV0dGVyIHdheSB1c2luZyByZWd1bGFyIGV4cHJlc3Npb25zIHdoZXJldmVyIGFwcGxpY2FibGUuXG4vLyAoTm90IHNlZ3JlZ2F0aW5nIHJpZ2h0IGF3YXkgYmVjYXVzZSBtb3JlIHBhdGhzIHRvIGJlIGFkZGVkIGluIHRoZSBOT19QUk9YWSBsaXN0KVxuY29uc3QgTk9fUFJPWFkgPSBbXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uLyg/IS4qLyknKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FsZXJ0X1teL10rJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hbGVydC9bXi9dKycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL1teL10rL2N1cnJlbnRfYWN0aXZpdHknKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9bXi9dKy9jdXJyZW50X3BhY2thZ2UnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9hcHAvW14vXSsnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvW14vXSsnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9zZXR0aW5ncycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvY29udGV4dCcpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvY29udGV4dHMnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2VsZW1lbnQvW14vXSsvYXR0cmlidXRlJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9lbGVtZW50L1teL10rL2Rpc3BsYXllZCcpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZWxlbWVudC9bXi9dKy9lbmFibGVkJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9lbGVtZW50L1teL10rL2xvY2F0aW9uX2luX3ZpZXcnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2VsZW1lbnQvW14vXSsvbmFtZScpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZWxlbWVudC9bXi9dKy9zY3JlZW5zaG90JyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9lbGVtZW50L1teL10rL3NlbGVjdGVkJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9pbWUvW14vXSsnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2xvY2F0aW9uJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9uZXR3b3JrX2Nvbm5lY3Rpb24nKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3NjcmVlbnNob3QnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3RpbWVvdXRzJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy91cmwnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9bXi9dK19hbGVydCQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hY3Rpb25zJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYWxlcnQvW14vXSsnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHAvW14vXScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9bXi9dKy9zdGFydF9hY3Rpdml0eScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9hcHAvW14vXSsnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vY29tcGFyZV9pbWFnZXMnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlLyg/IXNldF9jbGlwYm9hcmQpW14vXSsnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZWxlbWVudC9bXi9dKy9yZXBsYWNlX3ZhbHVlJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2VsZW1lbnQvW14vXSsvdmFsdWUnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZ2V0UGVyZm9ybWFuY2VEYXRhJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL3BlcmZvcm1hbmNlRGF0YS90eXBlcycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9zZXR0aW5ncycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9leGVjdXRlX2RyaXZlcicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9zdGFydF9yZWNvcmRpbmdfc2NyZWVuJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL3N0b3BfcmVjb3JkaW5nX3NjcmVlbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS8uKmV2ZW50JyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvY29udGV4dCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2VsZW1lbnQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9pbWUvW14vXSsnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9rZXlzJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbG9jYXRpb24nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9uZXR3b3JrX2Nvbm5lY3Rpb24nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy90aW1lb3V0cycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3RvdWNoL211bHRpL3BlcmZvcm0nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy90b3VjaC9wZXJmb3JtJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdXJsJyldLFxuXG4gIC8vIE1KU09OV1AgY29tbWFuZHNcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbG9nL3R5cGVzJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZXhlY3V0ZScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2V4ZWN1dGVfYXN5bmMnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9sb2cnKV0sXG4gIC8vIFczQyBjb21tYW5kc1xuICAvLyBGb3IgU2VsZW5pdW0gdjQgKFczQyBkb2VzIG5vdCBoYXZlIHRoaXMgcm91dGUpXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3NlL2xvZy90eXBlcycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvd2luZG93L3JlY3QnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlL2FzeW5jJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZXhlY3V0ZS9zeW5jJyldLFxuICAvLyBGb3IgU2VsZW5pdW0gdjQgKFczQyBkb2VzIG5vdCBoYXZlIHRoaXMgcm91dGUpXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9zZS9sb2cnKV0sXG5dO1xuXG4vLyBUaGlzIGlzIGEgc2V0IG9mIG1ldGhvZHMgYW5kIHBhdGhzIHRoYXQgd2UgbmV2ZXIgd2FudCB0byBwcm94eSB0byBDaHJvbWVkcml2ZXIuXG5jb25zdCBDSFJPTUVfTk9fUFJPWFkgPSBbXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bScpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvY29udGV4dCcpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZWxlbWVudC9bXi9dKy9yZWN0JyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9vcmllbnRhdGlvbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2NvbnRleHQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9vcmllbnRhdGlvbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3RvdWNoL211bHRpL3BlcmZvcm0nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy90b3VjaC9wZXJmb3JtJyldLFxuXG4gIC8vIHRoaXMgaXMgbmVlZGVkIHRvIG1ha2UgdGhlIG1vYmlsZTogY29tbWFuZHMgd29ya2luZyBpbiB3ZWIgY29udGV4dFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZXhlY3V0ZSQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlL3N5bmMnKV0sXG5cbiAgLy8gTUpTT05XUCBjb21tYW5kc1xuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9sb2cvdHlwZXMkJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbG9nJCcpXSxcbiAgLy8gVzNDIGNvbW1hbmRzXG4gIC8vIEZvciBTZWxlbml1bSB2NCAoVzNDIGRvZXMgbm90IGhhdmUgdGhpcyByb3V0ZSlcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvc2UvbG9nL3R5cGVzJCcpXSxcbiAgLy8gRm9yIFNlbGVuaXVtIHY0IChXM0MgZG9lcyBub3QgaGF2ZSB0aGlzIHJvdXRlKVxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvc2UvbG9nJCcpXSxcbl07XG5cbmNvbnN0IE1FTU9JWkVEX0ZVTkNUSU9OUyA9IFtcbiAgJ2dldFN0YXR1c0JhckhlaWdodCcsXG4gICdnZXREZXZpY2VQaXhlbFJhdGlvJyxcbl07XG5cbmNsYXNzIEFuZHJvaWRVaWF1dG9tYXRvcjJEcml2ZXIgZXh0ZW5kcyBCYXNlRHJpdmVyIHtcblxuICBzdGF0aWMgbmV3TWV0aG9kTWFwID0gbmV3TWV0aG9kTWFwO1xuXG4gIGNvbnN0cnVjdG9yIChvcHRzID0ge30sIHNob3VsZFZhbGlkYXRlQ2FwcyA9IHRydWUpIHtcbiAgICAvLyBgc2hlbGxgIG92ZXJ3cml0ZXMgYWRiLnNoZWxsLCBzbyByZW1vdmVcbiAgICBkZWxldGUgb3B0cy5zaGVsbDtcblxuICAgIHN1cGVyKG9wdHMsIHNob3VsZFZhbGlkYXRlQ2Fwcyk7XG4gICAgdGhpcy5sb2NhdG9yU3RyYXRlZ2llcyA9IFtcbiAgICAgICd4cGF0aCcsXG4gICAgICAnaWQnLFxuICAgICAgJ2NsYXNzIG5hbWUnLFxuICAgICAgJ2FjY2Vzc2liaWxpdHkgaWQnLFxuICAgICAgJ2NzcyBzZWxlY3RvcicsXG4gICAgICAnLWFuZHJvaWQgdWlhdXRvbWF0b3InXG4gICAgXTtcbiAgICB0aGlzLmRlc2lyZWRDYXBDb25zdHJhaW50cyA9IGRlc2lyZWRDYXBDb25zdHJhaW50cztcbiAgICB0aGlzLnVpYXV0b21hdG9yMiA9IG51bGw7XG4gICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuandwUHJveHlBdm9pZCA9IE5PX1BST1hZO1xuICAgIHRoaXMuYXBrU3RyaW5ncyA9IHt9OyAvLyBtYXAgb2YgbGFuZ3VhZ2UgLT4gc3RyaW5ncyBvYmpcblxuICAgIHRoaXMuc2V0dGluZ3MgPSBuZXcgRGV2aWNlU2V0dGluZ3Moe2lnbm9yZVVuaW1wb3J0YW50Vmlld3M6IGZhbHNlLCBhbGxvd0ludmlzaWJsZUVsZW1lbnRzOiBmYWxzZX0sXG4gICAgICAgIHRoaXMub25TZXR0aW5nc1VwZGF0ZS5iaW5kKHRoaXMpKTtcbiAgICAvLyBoYW5kbGUgd2VidmlldyBtZWNoYW5pY3MgZnJvbSBBbmRyb2lkRHJpdmVyXG4gICAgdGhpcy5jaHJvbWVkcml2ZXIgPSBudWxsO1xuICAgIHRoaXMuc2Vzc2lvbkNocm9tZWRyaXZlcnMgPSB7fTtcblxuICAgIC8vIG1lbW9pemUgZnVuY3Rpb25zIGhlcmUsIHNvIHRoYXQgdGhleSBhcmUgZG9uZSBvbiBhIHBlci1pbnN0YW5jZSBiYXNpc1xuICAgIGZvciAoY29uc3QgZm4gb2YgTUVNT0laRURfRlVOQ1RJT05TKSB7XG4gICAgICB0aGlzW2ZuXSA9IF8ubWVtb2l6ZSh0aGlzW2ZuXSk7XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGVEZXNpcmVkQ2FwcyAoY2Fwcykge1xuICAgIHJldHVybiBzdXBlci52YWxpZGF0ZURlc2lyZWRDYXBzKGNhcHMpICYmIGFuZHJvaWRIZWxwZXJzLnZhbGlkYXRlRGVzaXJlZENhcHMoY2Fwcyk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVTZXNzaW9uICguLi5hcmdzKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFRPRE8gaGFuZGxlIG90aGVyU2Vzc2lvbkRhdGEgZm9yIG11bHRpcGxlIHNlc3Npb25zXG4gICAgICBsZXQgW3Nlc3Npb25JZCwgY2Fwc10gPSBhd2FpdCBzdXBlci5jcmVhdGVTZXNzaW9uKC4uLmFyZ3MpO1xuXG4gICAgICBsZXQgc2VydmVyRGV0YWlscyA9IHtcbiAgICAgICAgcGxhdGZvcm06ICdMSU5VWCcsXG4gICAgICAgIHdlYlN0b3JhZ2VFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgdGFrZXNTY3JlZW5zaG90OiB0cnVlLFxuICAgICAgICBqYXZhc2NyaXB0RW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgZGF0YWJhc2VFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgbmV0d29ya0Nvbm5lY3Rpb25FbmFibGVkOiB0cnVlLFxuICAgICAgICBsb2NhdGlvbkNvbnRleHRFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgd2FybmluZ3M6IHt9LFxuICAgICAgICBkZXNpcmVkOiB0aGlzLmNhcHMsXG4gICAgICB9O1xuXG4gICAgICB0aGlzLmNhcHMgPSBPYmplY3QuYXNzaWduKHNlcnZlckRldGFpbHMsIHRoaXMuY2Fwcyk7XG5cbiAgICAgIHRoaXMuY3VyQ29udGV4dCA9IHRoaXMuZGVmYXVsdENvbnRleHROYW1lKCk7XG5cbiAgICAgIGxldCBkZWZhdWx0T3B0cyA9IHtcbiAgICAgICAgZnVsbFJlc2V0OiBmYWxzZSxcbiAgICAgICAgYXV0b0xhdW5jaDogdHJ1ZSxcbiAgICAgICAgYWRiUG9ydDogREVGQVVMVF9BREJfUE9SVCxcbiAgICAgICAgYW5kcm9pZEluc3RhbGxUaW1lb3V0OiA5MDAwMFxuICAgICAgfTtcbiAgICAgIF8uZGVmYXVsdHModGhpcy5vcHRzLCBkZWZhdWx0T3B0cyk7XG5cbiAgICAgIGlmICh0aGlzLmlzQ2hyb21lU2Vzc2lvbikge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKFwiV2UncmUgZ29pbmcgdG8gcnVuIGEgQ2hyb21lLWJhc2VkIHNlc3Npb25cIik7XG4gICAgICAgIGxldCB7cGtnLCBhY3Rpdml0eX0gPSBoZWxwZXJzLmdldENocm9tZVBrZyh0aGlzLm9wdHMuYnJvd3Nlck5hbWUpO1xuICAgICAgICB0aGlzLm9wdHMuYXBwUGFja2FnZSA9IHRoaXMuY2Fwcy5hcHBQYWNrYWdlID0gcGtnO1xuICAgICAgICB0aGlzLm9wdHMuYXBwQWN0aXZpdHkgPSB0aGlzLmNhcHMuYXBwQWN0aXZpdHkgPSBhY3Rpdml0eTtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgQ2hyb21lLXR5cGUgcGFja2FnZSBhbmQgYWN0aXZpdHkgYXJlICR7cGtnfSBhbmQgJHthY3Rpdml0eX1gKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0cy5yZWJvb3QpIHtcbiAgICAgICAgdGhpcy5zZXRBdmRGcm9tQ2FwYWJpbGl0aWVzKGNhcHMpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcHRzLmFwcCkge1xuICAgICAgICAvLyBmaW5kIGFuZCBjb3B5LCBvciBkb3dubG9hZCBhbmQgdW56aXAgYW4gYXBwIHVybCBvciBwYXRoXG4gICAgICAgIHRoaXMub3B0cy5hcHAgPSBhd2FpdCB0aGlzLmhlbHBlcnMuY29uZmlndXJlQXBwKHRoaXMub3B0cy5hcHAsIFtBUEtfRVhURU5TSU9OLCBBUEtTX0VYVEVOU0lPTl0pO1xuICAgICAgICBhd2FpdCB0aGlzLmNoZWNrQXBwUHJlc2VudCgpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLm9wdHMuYXBwUGFja2FnZSkge1xuICAgICAgICAvLyB0aGUgYXBwIGlzbid0IGFuIGFjdHVhbCBhcHAgZmlsZSBidXQgcmF0aGVyIHNvbWV0aGluZyB3ZSB3YW50IHRvXG4gICAgICAgIC8vIGFzc3VtZSBpcyBvbiB0aGUgZGV2aWNlIGFuZCBqdXN0IGxhdW5jaCB2aWEgdGhlIGFwcFBhY2thZ2VcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgU3RhcnRpbmcgJyR7dGhpcy5vcHRzLmFwcFBhY2thZ2V9JyBkaXJlY3RseSBvbiB0aGUgZGV2aWNlYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKGBOZWl0aGVyICdhcHAnIG5vciAnYXBwUGFja2FnZScgd2FzIHNldC4gU3RhcnRpbmcgVWlBdXRvbWF0b3IyIGAgK1xuICAgICAgICAgICd3aXRob3V0IHRoZSB0YXJnZXQgYXBwbGljYXRpb24nKTtcbiAgICAgIH1cbiAgICAgIHRoaXMub3B0cy5hZGJQb3J0ID0gdGhpcy5vcHRzLmFkYlBvcnQgfHwgREVGQVVMVF9BREJfUE9SVDtcblxuICAgICAgYXdhaXQgdGhpcy5zdGFydFVpQXV0b21hdG9yMlNlc3Npb24oKTtcbiAgICAgIGF3YWl0IHRoaXMuZmlsbERldmljZURldGFpbHMoKTtcbiAgICAgIGlmICh0aGlzLm9wdHMubWpwZWdTY3JlZW5zaG90VXJsKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYFN0YXJ0aW5nIE1KUEVHIHN0cmVhbSByZWFkaW5nIFVSTDogJyR7dGhpcy5vcHRzLm1qcGVnU2NyZWVuc2hvdFVybH0nYCk7XG4gICAgICAgIHRoaXMubWpwZWdTdHJlYW0gPSBuZXcgbWpwZWcuTUpwZWdTdHJlYW0odGhpcy5vcHRzLm1qcGVnU2NyZWVuc2hvdFVybCk7XG4gICAgICAgIGF3YWl0IHRoaXMubWpwZWdTdHJlYW0uc3RhcnQoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbc2Vzc2lvbklkLCB0aGlzLmNhcHNdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbigpO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmaWxsRGV2aWNlRGV0YWlscyAoKSB7XG4gICAgdGhpcy5jYXBzLnBpeGVsUmF0aW8gPSBhd2FpdCB0aGlzLmdldERldmljZVBpeGVsUmF0aW8oKTtcbiAgICB0aGlzLmNhcHMuc3RhdEJhckhlaWdodCA9IGF3YWl0IHRoaXMuZ2V0U3RhdHVzQmFySGVpZ2h0KCk7XG4gICAgdGhpcy5jYXBzLnZpZXdwb3J0UmVjdCA9IGF3YWl0IHRoaXMuZ2V0Vmlld1BvcnRSZWN0KCk7XG4gIH1cblxuICBnZXQgZHJpdmVyRGF0YSAoKSB7XG4gICAgLy8gVE9ETyBmaWxsIG91dCByZXNvdXJjZSBpbmZvIGhlcmVcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBhc3luYyBnZXRTZXNzaW9uICgpIHtcbiAgICBsZXQgc2Vzc2lvbkRhdGEgPSBhd2FpdCBzdXBlci5nZXRTZXNzaW9uKCk7XG4gICAgdGhpcy5sb2cuZGVidWcoJ0dldHRpbmcgc2Vzc2lvbiBkZXRhaWxzIGZyb20gc2VydmVyIHRvIG1peCBpbicpO1xuICAgIGxldCB1aWEyRGF0YSA9IGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnLycsICdHRVQnLCB7fSk7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHNlc3Npb25EYXRhLCB1aWEyRGF0YSk7XG4gIH1cblxuICBpc0VtdWxhdG9yICgpIHtcbiAgICByZXR1cm4gaGVscGVycy5pc0VtdWxhdG9yKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICB9XG5cbiAgc2V0QXZkRnJvbUNhcGFiaWxpdGllcyAoY2Fwcykge1xuICAgIGlmICh0aGlzLm9wdHMuYXZkKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKCdhdmQgbmFtZSBkZWZpbmVkLCBpZ25vcmluZyBkZXZpY2UgbmFtZSBhbmQgcGxhdGZvcm0gdmVyc2lvbicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWNhcHMuZGV2aWNlTmFtZSkge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdhdmQgb3IgZGV2aWNlTmFtZSBzaG91bGQgYmUgc3BlY2lmaWVkIHdoZW4gcmVib290IG9wdGlvbiBpcyBlbmFibGVzJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWNhcHMucGxhdGZvcm1WZXJzaW9uKSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ2F2ZCBvciBwbGF0Zm9ybVZlcnNpb24gc2hvdWxkIGJlIHNwZWNpZmllZCB3aGVuIHJlYm9vdCBvcHRpb24gaXMgZW5hYmxlZCcpO1xuICAgICAgfVxuICAgICAgbGV0IGF2ZERldmljZSA9IGNhcHMuZGV2aWNlTmFtZS5yZXBsYWNlKC9bXmEtekEtWjAtOV8uXS9nLCAnLScpO1xuICAgICAgdGhpcy5vcHRzLmF2ZCA9IGAke2F2ZERldmljZX1fXyR7Y2Fwcy5wbGF0Zm9ybVZlcnNpb259YDtcbiAgICB9XG4gIH1cblxuICBhc3luYyBhbGxvY2F0ZVN5c3RlbVBvcnQgKCkge1xuICAgIGNvbnN0IGZvcndhcmRQb3J0ID0gYXN5bmMgKGxvY2FsUG9ydCkgPT4ge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYEZvcndhcmRpbmcgVWlBdXRvbWF0b3IyIFNlcnZlciBwb3J0ICR7REVWSUNFX1BPUlR9IHRvIGxvY2FsIHBvcnQgJHtsb2NhbFBvcnR9YCk7XG4gICAgICBpZiAoKGF3YWl0IGNoZWNrUG9ydFN0YXR1cyhsb2NhbFBvcnQsIExPQ0FMSE9TVF9JUDQpKSA9PT0gJ29wZW4nKSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYFVpQXV0b21hdG9yMiBTZXJ2ZXIgY2Fubm90IHN0YXJ0IGJlY2F1c2UgdGhlIGxvY2FsIHBvcnQgIyR7bG9jYWxQb3J0fSBpcyBidXN5LiBgICtcbiAgICAgICAgICBgTWFrZSBzdXJlIHRoZSBwb3J0IHlvdSBwcm92aWRlIHZpYSAnc3lzdGVtUG9ydCcgY2FwYWJpbGl0eSBpcyBub3Qgb2NjdXBpZWQuIGAgK1xuICAgICAgICAgIGBUaGlzIHNpdHVhdGlvbiBtaWdodCBvZnRlbiBiZSBhIHJlc3VsdCBvZiBhbiBpbmFjY3VyYXRlIHNlc3Npb25zIG1hbmFnZW1lbnQsIGUuZy4gYCArXG4gICAgICAgICAgYG9sZCBhdXRvbWF0aW9uIHNlc3Npb25zIG9uIHRoZSBzYW1lIGRldmljZSBtdXN0IGFsd2F5cyBiZSBjbG9zZWQgYmVmb3JlIHN0YXJ0aW5nIG5ldyBvbmVzLmApO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5hZGIuZm9yd2FyZFBvcnQobG9jYWxQb3J0LCBERVZJQ0VfUE9SVCk7XG4gICAgfTtcblxuICAgIGlmICh0aGlzLm9wdHMuc3lzdGVtUG9ydCkge1xuICAgICAgdGhpcy5faGFzU3lzdGVtUG9ydEluQ2FwcyA9IHRydWU7XG4gICAgICByZXR1cm4gYXdhaXQgZm9yd2FyZFBvcnQodGhpcy5vcHRzLnN5c3RlbVBvcnQpO1xuICAgIH1cblxuICAgIGF3YWl0IERFVklDRV9QT1JUX0FMTE9DQVRJT05fR1VBUkQoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgW3N0YXJ0UG9ydCwgZW5kUG9ydF0gPSBERVZJQ0VfUE9SVF9SQU5HRTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMub3B0cy5zeXN0ZW1Qb3J0ID0gYXdhaXQgZmluZEFQb3J0Tm90SW5Vc2Uoc3RhcnRQb3J0LCBlbmRQb3J0KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhcbiAgICAgICAgICBgQ2Fubm90IGZpbmQgYW55IGZyZWUgcG9ydCBpbiByYW5nZSAke3N0YXJ0UG9ydH0uLiR7ZW5kUG9ydH19LiBgICtcbiAgICAgICAgICBgUGxlYXNlIHNldCB0aGUgYXZhaWxhYmxlIHBvcnQgbnVtYmVyIGJ5IHByb3ZpZGluZyB0aGUgc3lzdGVtUG9ydCBjYXBhYmlsaXR5IG9yIGAgK1xuICAgICAgICAgIGBkb3VibGUgY2hlY2sgdGhlIHByb2Nlc3NlcyB0aGF0IGFyZSBsb2NraW5nIHBvcnRzIHdpdGhpbiB0aGlzIHJhbmdlIGFuZCB0ZXJtaW5hdGUgYCArXG4gICAgICAgICAgYHRoZXNlIHdoaWNoIGFyZSBub3QgbmVlZGVkIGFueW1vcmVgKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IGZvcndhcmRQb3J0KHRoaXMub3B0cy5zeXN0ZW1Qb3J0KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHJlbGVhc2VTeXN0ZW1Qb3J0ICgpIHtcbiAgICBpZiAoIXRoaXMub3B0cy5zeXN0ZW1Qb3J0IHx8ICF0aGlzLmFkYikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9oYXNTeXN0ZW1Qb3J0SW5DYXBzKSB7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5yZW1vdmVQb3J0Rm9yd2FyZCh0aGlzLm9wdHMuc3lzdGVtUG9ydCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IERFVklDRV9QT1JUX0FMTE9DQVRJT05fR1VBUkQoYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5hZGIucmVtb3ZlUG9ydEZvcndhcmQodGhpcy5vcHRzLnN5c3RlbVBvcnQpKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBhbGxvY2F0ZU1qcGVnU2VydmVyUG9ydCAoKSB7XG4gICAgaWYgKHRoaXMub3B0cy5tanBlZ1NlcnZlclBvcnQpIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLmZvcndhcmRQb3J0KHRoaXMub3B0cy5tanBlZ1NlcnZlclBvcnQsIE1KUEVHX1NFUlZFUl9ERVZJQ0VfUE9SVCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcmVsZWFzZU1qcGVnU2VydmVyUG9ydCAoKSB7XG4gICAgaWYgKHRoaXMub3B0cy5tanBlZ1NlcnZlclBvcnQpIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnJlbW92ZVBvcnRGb3J3YXJkKHRoaXMub3B0cy5tanBlZ1NlcnZlclBvcnQpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0YXJ0VWlBdXRvbWF0b3IyU2Vzc2lvbiAoKSB7XG4gICAgLy8gZ2V0IGRldmljZSB1ZGlkIGZvciB0aGlzIHNlc3Npb25cbiAgICBsZXQge3VkaWQsIGVtUG9ydH0gPSBhd2FpdCBoZWxwZXJzLmdldERldmljZUluZm9Gcm9tQ2Fwcyh0aGlzLm9wdHMpO1xuICAgIHRoaXMub3B0cy51ZGlkID0gdWRpZDtcbiAgICB0aGlzLm9wdHMuZW1Qb3J0ID0gZW1Qb3J0O1xuXG4gICAgLy8gbm93IHRoYXQgd2Uga25vdyBvdXIgamF2YSB2ZXJzaW9uIGFuZCBkZXZpY2UgaW5mbywgd2UgY2FuIGNyZWF0ZSBvdXJcbiAgICAvLyBBREIgaW5zdGFuY2VcbiAgICB0aGlzLmFkYiA9IGF3YWl0IGFuZHJvaWRIZWxwZXJzLmNyZWF0ZUFEQih0aGlzLm9wdHMpO1xuXG4gICAgY29uc3QgYXBpTGV2ZWwgPSBhd2FpdCB0aGlzLmFkYi5nZXRBcGlMZXZlbCgpO1xuXG4gICAgaWYgKGFwaUxldmVsIDwgMjEpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ1VJQXV0b21hdG9yMiBpcyBvbmx5IHN1cHBvcnRlZCBzaW5jZSBBbmRyb2lkIDUuMCAoTG9sbGlwb3ApLiAnICtcbiAgICAgICAgJ1lvdSBjb3VsZCBzdGlsbCB1c2Ugb3RoZXIgc3VwcG9ydGVkIGJhY2tlbmRzIGluIG9yZGVyIHRvIGF1dG9tYXRlIG9sZGVyIEFuZHJvaWQgdmVyc2lvbnMuJyk7XG4gICAgfVxuXG4gICAgaWYgKGFwaUxldmVsID49IDI4KSB7IC8vIEFuZHJvaWQgUFxuICAgICAgdGhpcy5sb2cuaW5mbygnUmVsYXhpbmcgaGlkZGVuIGFwaSBwb2xpY3knKTtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnNldEhpZGRlbkFwaVBvbGljeSgnMScsICEhdGhpcy5vcHRzLmlnbm9yZUhpZGRlbkFwaVBvbGljeUVycm9yKTtcbiAgICB9XG5cbiAgICAvLyBjaGVjayBpZiB3ZSBoYXZlIHRvIGVuYWJsZS9kaXNhYmxlIGdwcyBiZWZvcmUgcnVubmluZyB0aGUgYXBwbGljYXRpb25cbiAgICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMuZ3BzRW5hYmxlZCkpIHtcbiAgICAgIGlmICh0aGlzLmlzRW11bGF0b3IoKSkge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKGBUcnlpbmcgdG8gJHt0aGlzLm9wdHMuZ3BzRW5hYmxlZCA/ICdlbmFibGUnIDogJ2Rpc2FibGUnfSBncHMgbG9jYXRpb24gcHJvdmlkZXJgKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIudG9nZ2xlR1BTTG9jYXRpb25Qcm92aWRlcih0aGlzLm9wdHMuZ3BzRW5hYmxlZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBTb3JyeSEgJ2dwc0VuYWJsZWQnIGNhcGFiaWxpdHkgaXMgb25seSBhdmFpbGFibGUgZm9yIGVtdWxhdG9yc2ApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGdldCBhcHBQYWNrYWdlIGV0IGFsIGZyb20gbWFuaWZlc3QgaWYgbmVjZXNzYXJ5XG4gICAgY29uc3QgYXBwSW5mbyA9IGF3YWl0IGhlbHBlcnMuZ2V0TGF1bmNoSW5mbyh0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICAvLyBhbmQgZ2V0IGl0IG9udG8gb3VyICdvcHRzJyBvYmplY3Qgc28gd2UgdXNlIGl0IGZyb20gbm93IG9uXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLm9wdHMsIGFwcEluZm8gfHwge30pO1xuXG4gICAgLy8gc2V0IGFjdHVhbCBkZXZpY2UgbmFtZSwgdWRpZCwgcGxhdGZvcm0gdmVyc2lvbiwgc2NyZWVuIHNpemUsIHNjcmVlbiBkZW5zaXR5LCBtb2RlbCBhbmQgbWFudWZhY3R1cmVyIGRldGFpbHNcbiAgICB0aGlzLmNhcHMuZGV2aWNlTmFtZSA9IHRoaXMuYWRiLmN1ckRldmljZUlkO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VVRElEID0gdGhpcy5vcHRzLnVkaWQ7XG5cbiAgICAvLyBzdGFydCBhbiBhdmQsIHNldCB0aGUgbGFuZ3VhZ2UvbG9jYWxlLCBwaWNrIGFuIGVtdWxhdG9yLCBldGMuLi5cbiAgICAvLyBUT0RPIHdpdGggbXVsdGlwbGUgZGV2aWNlcyB3ZSdsbCBuZWVkIHRvIHBhcmFtZXRlcml6ZSB0aGlzXG4gICAgYXdhaXQgaGVscGVycy5pbml0RGV2aWNlKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuXG4gICAgLy8gUHJlcGFyZSB0aGUgZGV2aWNlIGJ5IGZvcndhcmRpbmcgdGhlIFVpQXV0b21hdG9yMiBwb3J0XG4gICAgLy8gVGhpcyBjYWxsIG11dGF0ZXMgdGhpcy5vcHRzLnN5c3RlbVBvcnQgaWYgaXQgaXMgbm90IHNldCBleHBsaWNpdGx5XG4gICAgYXdhaXQgdGhpcy5hbGxvY2F0ZVN5c3RlbVBvcnQoKTtcblxuICAgIC8vIFByZXBhcmUgdGhlIGRldmljZSBieSBmb3J3YXJkaW5nIHRoZSBVaUF1dG9tYXRvcjIgTUpQRUcgc2VydmVyIHBvcnQgKGlmXG4gICAgLy8gYXBwbGljYWJsZSlcbiAgICBhd2FpdCB0aGlzLmFsbG9jYXRlTWpwZWdTZXJ2ZXJQb3J0KCk7XG5cbiAgICAvLyBzZXQgdXAgdGhlIG1vZGlmaWVkIFVpQXV0b21hdG9yMiBzZXJ2ZXIgZXRjXG4gICAgYXdhaXQgdGhpcy5pbml0VWlBdXRvbWF0b3IyU2VydmVyKCk7XG5cbiAgICAvLyBTaG91bGQgYmUgYWZ0ZXIgaW5zdGFsbGluZyBpby5hcHBpdW0uc2V0dGluZ3MgaW4gaGVscGVycy5pbml0RGV2aWNlXG4gICAgaWYgKHRoaXMub3B0cy5kaXNhYmxlV2luZG93QW5pbWF0aW9uICYmIChhd2FpdCB0aGlzLmFkYi5nZXRBcGlMZXZlbCgpIDwgMjYpKSB7IC8vIEFQSSBsZXZlbCAyNiBpcyBBbmRyb2lkIDguMC5cbiAgICAgIC8vIEdyYW50aW5nIGFuZHJvaWQucGVybWlzc2lvbi5TRVRfQU5JTUFUSU9OX1NDQUxFIGlzIG5lY2Vzc2FyeSB0byBoYW5kbGUgYW5pbWF0aW9ucyB1bmRlciBBUEkgbGV2ZWwgMjZcbiAgICAgIC8vIFJlYWQgaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vcHVsbC8xMTY0MCNpc3N1ZWNvbW1lbnQtNDM4MjYwNDc3XG4gICAgICAvLyBgLS1uby13aW5kb3ctYW5pbWF0aW9uYCB3b3JrcyBvdmVyIEFuZHJvaWQgOCB0byBkaXNhYmxlIGFsbCBvZiBhbmltYXRpb25zXG4gICAgICBpZiAoYXdhaXQgdGhpcy5hZGIuaXNBbmltYXRpb25PbigpKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oJ0Rpc2FibGluZyBhbmltYXRpb24gdmlhIGlvLmFwcGl1bS5zZXR0aW5ncycpO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5zZXRBbmltYXRpb25TdGF0ZShmYWxzZSk7XG4gICAgICAgIHRoaXMuX3dhc1dpbmRvd0FuaW1hdGlvbkRpc2FibGVkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oJ1dpbmRvdyBhbmltYXRpb24gaXMgYWxyZWFkeSBkaXNhYmxlZCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHNldCB1cCBhcHAgdW5kZXIgdGVzdFxuICAgIC8vIHByZXBhcmUgb3VyIGFjdHVhbCBBVVQsIGdldCBpdCBvbiB0aGUgZGV2aWNlLCBldGMuLi5cbiAgICBhd2FpdCB0aGlzLmluaXRBVVQoKTtcblxuICAgIC8vIEFkZGluZyBBVVQgcGFja2FnZSBuYW1lIGluIHRoZSBjYXBhYmlsaXRpZXMgaWYgcGFja2FnZSBuYW1lIG5vdCBleGlzdCBpbiBjYXBzXG4gICAgaWYgKCF0aGlzLmNhcHMuYXBwUGFja2FnZSAmJiBhcHBJbmZvKSB7XG4gICAgICB0aGlzLmNhcHMuYXBwUGFja2FnZSA9IGFwcEluZm8uYXBwUGFja2FnZTtcbiAgICB9XG5cbiAgICAvLyBsYXVuY2ggVWlBdXRvbWF0b3IyIGFuZCB3YWl0IHRpbGwgaXRzIG9ubGluZSBhbmQgd2UgaGF2ZSBhIHNlc3Npb25cbiAgICBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5zdGFydFNlc3Npb24odGhpcy5jYXBzKTtcblxuICAgIGF3YWl0IHRoaXMuYWRkRGV2aWNlSW5mb1RvQ2FwcygpO1xuXG4gICAgLy8gVW5sb2NrIHRoZSBkZXZpY2UgYWZ0ZXIgdGhlIHNlc3Npb24gaXMgc3RhcnRlZC5cbiAgICBpZiAoIXRoaXMub3B0cy5za2lwVW5sb2NrKSB7XG4gICAgICAvLyB1bmxvY2sgdGhlIGRldmljZSB0byBwcmVwYXJlIGl0IGZvciB0ZXN0aW5nXG4gICAgICBhd2FpdCBoZWxwZXJzLnVubG9jayh0aGlzLCB0aGlzLmFkYiwgdGhpcy5jYXBzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYCdza2lwVW5sb2NrJyBjYXBhYmlsaXR5IHNldCwgc28gc2tpcHBpbmcgZGV2aWNlIHVubG9ja2ApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzQ2hyb21lU2Vzc2lvbikgeyAvLyBzdGFydCBhIGNocm9tZWRyaXZlciBzZXNzaW9uXG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0Q2hyb21lU2Vzc2lvbih0aGlzKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMub3B0cy5hdXRvTGF1bmNoICYmIHRoaXMub3B0cy5hcHBQYWNrYWdlKSB7XG4gICAgICBhd2FpdCB0aGlzLmVuc3VyZUFwcFN0YXJ0cygpO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSBpbml0aWFsIG9yaWVudGF0aW9uIGlzIHJlcXVlc3RlZCwgc2V0IGl0XG4gICAgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLm9yaWVudGF0aW9uKSkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYFNldHRpbmcgaW5pdGlhbCBvcmllbnRhdGlvbiB0byAnJHt0aGlzLm9wdHMub3JpZW50YXRpb259J2ApO1xuICAgICAgYXdhaXQgdGhpcy5zZXRPcmllbnRhdGlvbih0aGlzLm9wdHMub3JpZW50YXRpb24pO1xuICAgIH1cblxuICAgIC8vIGlmIHdlIHdhbnQgdG8gaW1tZWRpYXRlbHkgZ2V0IGludG8gYSB3ZWJ2aWV3LCBzZXQgb3VyIGNvbnRleHRcbiAgICAvLyBhcHByb3ByaWF0ZWx5XG4gICAgaWYgKHRoaXMub3B0cy5hdXRvV2Vidmlldykge1xuICAgICAgY29uc3Qgdmlld05hbWUgPSB0aGlzLmRlZmF1bHRXZWJ2aWV3TmFtZSgpO1xuICAgICAgY29uc3QgdGltZW91dCA9IHRoaXMub3B0cy5hdXRvV2Vidmlld1RpbWVvdXQgfHwgMjAwMDtcbiAgICAgIHRoaXMubG9nLmluZm8oYFNldHRpbmcgYXV0byB3ZWJ2aWV3IHRvIGNvbnRleHQgJyR7dmlld05hbWV9JyB3aXRoIHRpbWVvdXQgJHt0aW1lb3V0fW1zYCk7XG4gICAgICBhd2FpdCByZXRyeUludGVydmFsKHRpbWVvdXQgLyA1MDAsIDUwMCwgdGhpcy5zZXRDb250ZXh0LmJpbmQodGhpcyksIHZpZXdOYW1lKTtcbiAgICB9XG5cbiAgICAvLyBub3cgdGhhdCBldmVyeXRoaW5nIGhhcyBzdGFydGVkIHN1Y2Nlc3NmdWxseSwgdHVybiBvbiBwcm94eWluZyBzbyBhbGxcbiAgICAvLyBzdWJzZXF1ZW50IHNlc3Npb24gcmVxdWVzdHMgZ28gc3RyYWlnaHQgdG8vZnJvbSB1aWF1dG9tYXRvcjJcbiAgICB0aGlzLmp3cFByb3h5QWN0aXZlID0gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIGFkZERldmljZUluZm9Ub0NhcHMgKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBwbGF0Zm9ybVZlcnNpb24sXG4gICAgICBtYW51ZmFjdHVyZXIsXG4gICAgICBtb2RlbCxcbiAgICAgIHJlYWxEaXNwbGF5U2l6ZSxcbiAgICAgIGRpc3BsYXlEZW5zaXR5LFxuICAgIH0gPSBhd2FpdCB0aGlzLm1vYmlsZUdldERldmljZUluZm8oKTtcbiAgICB0aGlzLmNhcHMuZGV2aWNlQXBpTGV2ZWwgPSBwYXJzZUludChhcGlWZXJzaW9uLCAxMCk7XG4gICAgdGhpcy5jYXBzLnBsYXRmb3JtVmVyc2lvbiA9IHBsYXRmb3JtVmVyc2lvbjtcbiAgICB0aGlzLmNhcHMuZGV2aWNlU2NyZWVuU2l6ZSA9IHJlYWxEaXNwbGF5U2l6ZTtcbiAgICB0aGlzLmNhcHMuZGV2aWNlU2NyZWVuRGVuc2l0eSA9IGRpc3BsYXlEZW5zaXR5O1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VNb2RlbCA9IG1vZGVsO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VNYW51ZmFjdHVyZXIgPSBtYW51ZmFjdHVyZXI7XG4gIH1cblxuICBhc3luYyBpbml0VWlBdXRvbWF0b3IyU2VydmVyICgpIHtcbiAgICAvLyBicm9rZW4gb3V0IGZvciByZWFkYWJpbGl0eVxuICAgIGNvbnN0IHVpYXV0b21hdG9yMk9wdHMgPSB7XG4gICAgICBob3N0OiB0aGlzLm9wdHMucmVtb3RlQWRiSG9zdCB8fCB0aGlzLm9wdHMuaG9zdCB8fCBMT0NBTEhPU1RfSVA0LFxuICAgICAgc3lzdGVtUG9ydDogdGhpcy5vcHRzLnN5c3RlbVBvcnQsXG4gICAgICBkZXZpY2VQb3J0OiBERVZJQ0VfUE9SVCxcbiAgICAgIGFkYjogdGhpcy5hZGIsXG4gICAgICBhcGs6IHRoaXMub3B0cy5hcHAsXG4gICAgICB0bXBEaXI6IHRoaXMub3B0cy50bXBEaXIsXG4gICAgICBhcHBQYWNrYWdlOiB0aGlzLm9wdHMuYXBwUGFja2FnZSxcbiAgICAgIGFwcEFjdGl2aXR5OiB0aGlzLm9wdHMuYXBwQWN0aXZpdHksXG4gICAgICBkaXNhYmxlV2luZG93QW5pbWF0aW9uOiAhIXRoaXMub3B0cy5kaXNhYmxlV2luZG93QW5pbWF0aW9uLFxuICAgICAgZGlzYWJsZVN1cHByZXNzQWNjZXNzaWJpbGl0eVNlcnZpY2U6IHRoaXMub3B0cy5kaXNhYmxlU3VwcHJlc3NBY2Nlc3NpYmlsaXR5U2VydmljZSxcbiAgICAgIHJlYWRUaW1lb3V0OiB0aGlzLm9wdHMudWlhdXRvbWF0b3IyU2VydmVyUmVhZFRpbWVvdXQsXG4gICAgfTtcbiAgICAvLyBub3cgdGhhdCB3ZSBoYXZlIHBhY2thZ2UgYW5kIGFjdGl2aXR5LCB3ZSBjYW4gY3JlYXRlIGFuIGluc3RhbmNlIG9mXG4gICAgLy8gdWlhdXRvbWF0b3IyIHdpdGggdGhlIGFwcHJvcHJpYXRlIG9wdGlvbnNcbiAgICB0aGlzLnVpYXV0b21hdG9yMiA9IG5ldyBVaUF1dG9tYXRvcjJTZXJ2ZXIodGhpcy5sb2csIHVpYXV0b21hdG9yMk9wdHMpO1xuICAgIHRoaXMucHJveHlSZXFSZXMgPSB0aGlzLnVpYXV0b21hdG9yMi5wcm94eVJlcVJlcy5iaW5kKHRoaXMudWlhdXRvbWF0b3IyKTtcbiAgICB0aGlzLnByb3h5Q29tbWFuZCA9IHRoaXMudWlhdXRvbWF0b3IyLnByb3h5Q29tbWFuZC5iaW5kKHRoaXMudWlhdXRvbWF0b3IyKTtcblxuICAgIGlmICh0aGlzLm9wdHMuc2tpcFNlcnZlckluc3RhbGxhdGlvbikge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgJ3NraXBTZXJ2ZXJJbnN0YWxsYXRpb24nIGlzIHNldC4gU2tpcHBpbmcgVUlBdXRvbWF0b3IyIHNlcnZlciBpbnN0YWxsYXRpb24uYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmluc3RhbGxTZXJ2ZXJBcGsodGhpcy5vcHRzLnVpYXV0b21hdG9yMlNlcnZlckluc3RhbGxUaW1lb3V0KTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLmFkZFRvRGV2aWNlSWRsZVdoaXRlbGlzdChcbiAgICAgICAgICBTRVRUSU5HU19IRUxQRVJfUEtHX0lELCBTRVJWRVJfUEFDS0FHRV9JRCwgU0VSVkVSX1RFU1RfUEFDS0FHRV9JRCxcbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgQ2Fubm90IGFkZCBzZXJ2ZXIgcGFja2FnZXMgdG8gdGhlIERvemUgd2hpdGVsaXN0LiBPcmlnaW5hbCBlcnJvcjogYCArXG4gICAgICAgICAgKGUuc3RkZXJyIHx8IGUubWVzc2FnZSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGluaXRBVVQgKCkge1xuICAgIC8vIFVuaW5zdGFsbCBhbnkgdW5pbnN0YWxsT3RoZXJQYWNrYWdlcyB3aGljaCB3ZXJlIHNwZWNpZmllZCBpbiBjYXBzXG4gICAgaWYgKHRoaXMub3B0cy51bmluc3RhbGxPdGhlclBhY2thZ2VzKSB7XG4gICAgICBhd2FpdCBoZWxwZXJzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMoXG4gICAgICAgIHRoaXMuYWRiLFxuICAgICAgICBoZWxwZXJzLnBhcnNlQXJyYXkodGhpcy5vcHRzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMpLFxuICAgICAgICBbU0VUVElOR1NfSEVMUEVSX1BLR19JRCwgU0VSVkVSX1BBQ0tBR0VfSUQsIFNFUlZFUl9URVNUX1BBQ0tBR0VfSURdXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEluc3RhbGwgYW55IFwib3RoZXJBcHBzXCIgdGhhdCB3ZXJlIHNwZWNpZmllZCBpbiBjYXBzXG4gICAgaWYgKHRoaXMub3B0cy5vdGhlckFwcHMpIHtcbiAgICAgIGxldCBvdGhlckFwcHM7XG4gICAgICB0cnkge1xuICAgICAgICBvdGhlckFwcHMgPSBoZWxwZXJzLnBhcnNlQXJyYXkodGhpcy5vcHRzLm90aGVyQXBwcyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBwYXJzZSBcIm90aGVyQXBwc1wiIGNhcGFiaWxpdHk6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgICAgb3RoZXJBcHBzID0gYXdhaXQgQi5hbGwob3RoZXJBcHBzXG4gICAgICAgIC5tYXAoKGFwcCkgPT4gdGhpcy5oZWxwZXJzLmNvbmZpZ3VyZUFwcChhcHAsIFtBUEtfRVhURU5TSU9OLCBBUEtTX0VYVEVOU0lPTl0pKSk7XG4gICAgICBhd2FpdCBoZWxwZXJzLmluc3RhbGxPdGhlckFwa3Mob3RoZXJBcHBzLCB0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRzLmFwcCkge1xuICAgICAgaWYgKHRoaXMub3B0cy5ub1Jlc2V0ICYmICEoYXdhaXQgdGhpcy5hZGIuaXNBcHBJbnN0YWxsZWQodGhpcy5vcHRzLmFwcFBhY2thZ2UpKVxuICAgICAgICAgIHx8ICF0aGlzLm9wdHMubm9SZXNldCkge1xuICAgICAgICBpZiAoIXRoaXMub3B0cy5ub1NpZ24gJiYgIWF3YWl0IHRoaXMuYWRiLmNoZWNrQXBrQ2VydCh0aGlzLm9wdHMuYXBwLCB0aGlzLm9wdHMuYXBwUGFja2FnZSwge1xuICAgICAgICAgIHJlcXVpcmVEZWZhdWx0Q2VydDogZmFsc2UsXG4gICAgICAgIH0pKSB7XG4gICAgICAgICAgYXdhaXQgaGVscGVycy5zaWduQXBwKHRoaXMuYWRiLCB0aGlzLm9wdHMuYXBwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMub3B0cy5za2lwVW5pbnN0YWxsKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5hZGIudW5pbnN0YWxsQXBrKHRoaXMub3B0cy5hcHBQYWNrYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBoZWxwZXJzLmluc3RhbGxBcGsodGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZy5kZWJ1Zygnbm9SZXNldCBoYXMgYmVlbiByZXF1ZXN0ZWQgYW5kIHRoZSBhcHAgaXMgYWxyZWFkeSBpbnN0YWxsZWQuIERvaW5nIG5vdGhpbmcnKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMub3B0cy5mdWxsUmVzZXQpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnRnVsbCByZXNldCByZXF1aXJlcyBhbiBhcHAgY2FwYWJpbGl0eSwgdXNlIGZhc3RSZXNldCBpZiBhcHAgaXMgbm90IHByb3ZpZGVkJyk7XG4gICAgICB9XG4gICAgICB0aGlzLmxvZy5kZWJ1ZygnTm8gYXBwIGNhcGFiaWxpdHkuIEFzc3VtaW5nIGl0IGlzIGFscmVhZHkgb24gdGhlIGRldmljZScpO1xuICAgICAgaWYgKHRoaXMub3B0cy5mYXN0UmVzZXQgJiYgdGhpcy5vcHRzLmFwcFBhY2thZ2UpIHtcbiAgICAgICAgYXdhaXQgaGVscGVycy5yZXNldEFwcCh0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBlbnN1cmVBcHBTdGFydHMgKCkge1xuICAgIC8vIG1ha2Ugc3VyZSB3ZSBoYXZlIGFuIGFjdGl2aXR5IGFuZCBwYWNrYWdlIHRvIHdhaXQgZm9yXG4gICAgY29uc3QgYXBwV2FpdFBhY2thZ2UgPSB0aGlzLm9wdHMuYXBwV2FpdFBhY2thZ2UgfHwgdGhpcy5vcHRzLmFwcFBhY2thZ2U7XG4gICAgY29uc3QgYXBwV2FpdEFjdGl2aXR5ID0gdGhpcy5vcHRzLmFwcFdhaXRBY3Rpdml0eSB8fCB0aGlzLm9wdHMuYXBwQWN0aXZpdHk7XG5cbiAgICB0aGlzLmxvZy5pbmZvKGBTdGFydGluZyAnJHt0aGlzLm9wdHMuYXBwUGFja2FnZX0vJHt0aGlzLm9wdHMuYXBwQWN0aXZpdHl9IGAgK1xuICAgICAgYGFuZCB3YWl0aW5nIGZvciAnJHthcHBXYWl0UGFja2FnZX0vJHthcHBXYWl0QWN0aXZpdHl9J2ApO1xuXG4gICAgaWYgKHRoaXMuY2Fwcy5hbmRyb2lkQ292ZXJhZ2UpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oYGFuZHJvaWRDb3ZlcmFnZSBpcyBjb25maWd1cmVkLiBgICtcbiAgICAgICAgYCBTdGFydGluZyBpbnN0cnVtZW50YXRpb24gb2YgJyR7dGhpcy5jYXBzLmFuZHJvaWRDb3ZlcmFnZX0nLi4uYCk7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5hbmRyb2lkQ292ZXJhZ2UodGhpcy5jYXBzLmFuZHJvaWRDb3ZlcmFnZSwgYXBwV2FpdFBhY2thZ2UsIGFwcFdhaXRBY3Rpdml0eSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdHMubm9SZXNldCAmJiAhdGhpcy5vcHRzLmZvcmNlQXBwTGF1bmNoXG4gICAgICAgICYmIGF3YWl0IHRoaXMuYWRiLnByb2Nlc3NFeGlzdHModGhpcy5vcHRzLmFwcFBhY2thZ2UpKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGAnJHt0aGlzLm9wdHMuYXBwUGFja2FnZX0nIGlzIGFscmVhZHkgcnVubmluZyBhbmQgbm9SZXNldCBpcyBlbmFibGVkLiBgICtcbiAgICAgICAgYFNldCBmb3JjZUFwcExhdW5jaCBjYXBhYmlsaXR5IHRvIHRydWUgaWYgdGhlIGFwcCBtdXN0IGJlIGZvcmNlZnVsbHkgcmVzdGFydGVkIG9uIHNlc3Npb24gc3RhcnR1cC5gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5hZGIuc3RhcnRBcHAoe1xuICAgICAgcGtnOiB0aGlzLm9wdHMuYXBwUGFja2FnZSxcbiAgICAgIGFjdGl2aXR5OiB0aGlzLm9wdHMuYXBwQWN0aXZpdHksXG4gICAgICBhY3Rpb246IHRoaXMub3B0cy5pbnRlbnRBY3Rpb24gfHwgJ2FuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOJyxcbiAgICAgIGNhdGVnb3J5OiB0aGlzLm9wdHMuaW50ZW50Q2F0ZWdvcnkgfHwgJ2FuZHJvaWQuaW50ZW50LmNhdGVnb3J5LkxBVU5DSEVSJyxcbiAgICAgIGZsYWdzOiB0aGlzLm9wdHMuaW50ZW50RmxhZ3MgfHwgJzB4MTAyMDAwMDAnLCAvLyBGTEFHX0FDVElWSVRZX05FV19UQVNLIHwgRkxBR19BQ1RJVklUWV9SRVNFVF9UQVNLX0lGX05FRURFRFxuICAgICAgd2FpdFBrZzogdGhpcy5vcHRzLmFwcFdhaXRQYWNrYWdlLFxuICAgICAgd2FpdEFjdGl2aXR5OiB0aGlzLm9wdHMuYXBwV2FpdEFjdGl2aXR5LFxuICAgICAgd2FpdEZvckxhdW5jaDogdGhpcy5vcHRzLmFwcFdhaXRGb3JMYXVuY2gsXG4gICAgICB3YWl0RHVyYXRpb246IHRoaXMub3B0cy5hcHBXYWl0RHVyYXRpb24sXG4gICAgICBvcHRpb25hbEludGVudEFyZ3VtZW50czogdGhpcy5vcHRzLm9wdGlvbmFsSW50ZW50QXJndW1lbnRzLFxuICAgICAgc3RvcEFwcDogdGhpcy5vcHRzLmZvcmNlQXBwTGF1bmNoIHx8ICF0aGlzLm9wdHMuZG9udFN0b3BBcHBPblJlc2V0LFxuICAgICAgcmV0cnk6IHRydWUsXG4gICAgICB1c2VyOiB0aGlzLm9wdHMudXNlclByb2ZpbGUsXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBkZWxldGVTZXNzaW9uICgpIHtcbiAgICB0aGlzLmxvZy5kZWJ1ZygnRGVsZXRpbmcgVWlBdXRvbWF0b3IyIHNlc3Npb24nKTtcblxuICAgIGNvbnN0IHNjcmVlblJlY29yZGluZ1N0b3BUYXNrcyA9IFthc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIV8uaXNFbXB0eSh0aGlzLl9zY3JlZW5SZWNvcmRpbmdQcm9wZXJ0aWVzKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnN0b3BSZWNvcmRpbmdTY3JlZW4oKTtcbiAgICAgIH1cbiAgICB9LCBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoYXdhaXQgdGhpcy5tb2JpbGVJc01lZGlhUHJvamVjdGlvblJlY29yZGluZ1J1bm5pbmcoKSkge1xuICAgICAgICBhd2FpdCB0aGlzLm1vYmlsZVN0b3BNZWRpYVByb2plY3Rpb25SZWNvcmRpbmcoKTtcbiAgICAgIH1cbiAgICB9LCBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIV8uaXNFbXB0eSh0aGlzLl9zY3JlZW5TdHJlYW1pbmdQcm9wcykpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5tb2JpbGVTdG9wU2NyZWVuU3RyZWFtaW5nKCk7XG4gICAgICB9XG4gICAgfV07XG5cbiAgICBhd2FpdCBhbmRyb2lkSGVscGVycy5yZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnModGhpcy5zZXJ2ZXIsIHRoaXMuc2Vzc2lvbklkKTtcblxuICAgIGlmICh0aGlzLnVpYXV0b21hdG9yMikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5zdG9wQ2hyb21lZHJpdmVyUHJveGllcygpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYFVuYWJsZSB0byBzdG9wIENocm9tZURyaXZlciBwcm94aWVzOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuandwUHJveHlBY3RpdmUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5kZWxldGVTZXNzaW9uKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRoaXMubG9nLndhcm4oYFVuYWJsZSB0byBwcm94eSBkZWxldGVTZXNzaW9uIHRvIFVpQXV0b21hdG9yMjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy51aWF1dG9tYXRvcjIgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLmp3cFByb3h5QWN0aXZlID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5hZGIpIHtcbiAgICAgIGF3YWl0IEIuYWxsKHNjcmVlblJlY29yZGluZ1N0b3BUYXNrcy5tYXAoKHRhc2spID0+IHtcbiAgICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGFzaygpO1xuICAgICAgICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICAgICAgfSkoKTtcbiAgICAgIH0pKTtcblxuICAgICAgaWYgKHRoaXMuY2Fwcy5hbmRyb2lkQ292ZXJhZ2UpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbygnU2h1dHRpbmcgZG93biB0aGUgYWRiIHByb2Nlc3Mgb2YgaW5zdHJ1bWVudGF0aW9uLi4uJyk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLmVuZEFuZHJvaWRDb3ZlcmFnZSgpO1xuICAgICAgICAvLyBVc2UgdGhpcyBicm9hZGNhc3QgaW50ZW50IHRvIG5vdGlmeSBpdCdzIHRpbWUgdG8gZHVtcCBjb3ZlcmFnZSB0byBmaWxlXG4gICAgICAgIGlmICh0aGlzLmNhcHMuYW5kcm9pZENvdmVyYWdlRW5kSW50ZW50KSB7XG4gICAgICAgICAgdGhpcy5sb2cuaW5mbyhgU2VuZGluZyBpbnRlbnQgYnJvYWRjYXN0ICcke3RoaXMuY2Fwcy5hbmRyb2lkQ292ZXJhZ2VFbmRJbnRlbnR9JyBhdCB0aGUgZW5kIG9mIGluc3RydW1lbnRpbmcuYCk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5hZGIuYnJvYWRjYXN0KHRoaXMuY2Fwcy5hbmRyb2lkQ292ZXJhZ2VFbmRJbnRlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubG9nLndhcm4oJ05vIGFuZHJvaWRDb3ZlcmFnZUVuZEludGVudCBpcyBjb25maWd1cmVkIGluIGNhcHMuIFBvc3NpYmx5IHlvdSBjYW5ub3QgZ2V0IGNvdmVyYWdlIGZpbGUuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdHMuYXBwUGFja2FnZSkge1xuICAgICAgICBpZiAoIXRoaXMuaXNDaHJvbWVTZXNzaW9uXG4gICAgICAgICAgICAmJiAhdGhpcy5vcHRzLmRvbnRTdG9wQXBwT25SZXNldFxuICAgICAgICAgICAgJiYgIXRoaXMub3B0cy5ub1Jlc2V0KSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYWRiLmZvcmNlU3RvcCh0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aGlzLmxvZy53YXJuKGBVbmFibGUgdG8gZm9yY2Ugc3RvcCBhcHA6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdHMuZnVsbFJlc2V0ICYmICF0aGlzLm9wdHMuc2tpcFVuaW5zdGFsbCkge1xuICAgICAgICAgIHRoaXMubG9nLmRlYnVnKGBDYXBhYmlsaXR5ICdmdWxsUmVzZXQnIHNldCB0byAndHJ1ZScsIFVuaW5zdGFsbGluZyAnJHt0aGlzLm9wdHMuYXBwUGFja2FnZX0nYCk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYWRiLnVuaW5zdGFsbEFwayh0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aGlzLmxvZy53YXJuKGBVbmFibGUgdG8gdW5pbnN0YWxsIGFwcDogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFRoaXMgdmFsdWUgY2FuIGJlIHRydWUgaWYgdGVzdCB0YXJnZXQgZGV2aWNlIGlzIDw9IDI2XG4gICAgICBpZiAodGhpcy5fd2FzV2luZG93QW5pbWF0aW9uRGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbygnUmVzdG9yaW5nIHdpbmRvdyBhbmltYXRpb24gc3RhdGUnKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0QW5pbWF0aW9uU3RhdGUodHJ1ZSk7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLmFkYi5zdG9wTG9nY2F0KCk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLnJlbGVhc2VTeXN0ZW1Qb3J0KCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBVbmFibGUgdG8gcmVtb3ZlIHN5c3RlbSBwb3J0IGZvcndhcmQ6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgICAgLy8gSWdub3JlLCB0aGlzIGJsb2NrIHdpbGwgYWxzbyBiZSBjYWxsZWQgd2hlbiB3ZSBmYWxsIGluIGNhdGNoIGJsb2NrXG4gICAgICAgIC8vIGFuZCBiZWZvcmUgZXZlbiBwb3J0IGZvcndhcmQuXG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLnJlbGVhc2VNanBlZ1NlcnZlclBvcnQoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYFVuYWJsZSB0byByZW1vdmUgTUpQRUcgc2VydmVyIHBvcnQgZm9yd2FyZDogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICAvLyBJZ25vcmUsIHRoaXMgYmxvY2sgd2lsbCBhbHNvIGJlIGNhbGxlZCB3aGVuIHdlIGZhbGwgaW4gY2F0Y2ggYmxvY2tcbiAgICAgICAgLy8gYW5kIGJlZm9yZSBldmVuIHBvcnQgZm9yd2FyZC5cbiAgICAgIH1cblxuICAgICAgaWYgKGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCkgPj0gMjgpIHsgLy8gQW5kcm9pZCBQXG4gICAgICAgIHRoaXMubG9nLmluZm8oJ1Jlc3RvcmluZyBoaWRkZW4gYXBpIHBvbGljeSB0byB0aGUgZGV2aWNlIGRlZmF1bHQgY29uZmlndXJhdGlvbicpO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5zZXREZWZhdWx0SGlkZGVuQXBpUG9saWN5KCEhdGhpcy5vcHRzLmlnbm9yZUhpZGRlbkFwaVBvbGljeUVycm9yKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0cy5yZWJvb3QpIHtcbiAgICAgICAgbGV0IGF2ZE5hbWUgPSB0aGlzLm9wdHMuYXZkLnJlcGxhY2UoJ0AnLCAnJyk7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKGBDbG9zaW5nIGVtdWxhdG9yICcke2F2ZE5hbWV9J2ApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuYWRiLmtpbGxFbXVsYXRvcihhdmROYW1lKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgdGhpcy5sb2cud2FybihgVW5hYmxlIHRvIGNsb3NlIGVtdWxhdG9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLm1qcGVnU3RyZWFtKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKCdDbG9zaW5nIE1KUEVHIHN0cmVhbScpO1xuICAgICAgdGhpcy5tanBlZ1N0cmVhbS5zdG9wKCk7XG4gICAgfVxuICAgIGF3YWl0IHN1cGVyLmRlbGV0ZVNlc3Npb24oKTtcbiAgfVxuXG4gIGFzeW5jIGNoZWNrQXBwUHJlc2VudCAoKSB7XG4gICAgdGhpcy5sb2cuZGVidWcoJ0NoZWNraW5nIHdoZXRoZXIgYXBwIGlzIGFjdHVhbGx5IHByZXNlbnQnKTtcbiAgICBpZiAoIShhd2FpdCBmcy5leGlzdHModGhpcy5vcHRzLmFwcCkpKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBDb3VsZCBub3QgZmluZCBhcHAgYXBrIGF0ICcke3RoaXMub3B0cy5hcHB9J2ApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9uU2V0dGluZ3NVcGRhdGUgKCkge1xuICAgIC8vIGludGVudGlvbmFsbHkgZG8gbm90aGluZyBoZXJlLCBzaW5jZSBjb21tYW5kcy51cGRhdGVTZXR0aW5ncyBwcm94aWVzXG4gICAgLy8gc2V0dGluZ3MgdG8gdGhlIHVpYXV0bzIgc2VydmVyIGFscmVhZHlcbiAgfVxuXG4gIC8vIE5lZWQgdG8gb3ZlcnJpZGUgYW5kcm9pZC1kcml2ZXIncyB2ZXJzaW9uIG9mIHRoaXMgc2luY2Ugd2UgZG9uJ3QgYWN0dWFsbHlcbiAgLy8gaGF2ZSBhIGJvb3RzdHJhcDsgaW5zdGVhZCB3ZSBqdXN0IHJlc3RhcnQgYWRiIGFuZCByZS1mb3J3YXJkIHRoZSBVaUF1dG9tYXRvcjJcbiAgLy8gcG9ydFxuICBhc3luYyB3cmFwQm9vdHN0cmFwRGlzY29ubmVjdCAod3JhcHBlZCkge1xuICAgIGF3YWl0IHdyYXBwZWQoKTtcbiAgICBhd2FpdCB0aGlzLmFkYi5yZXN0YXJ0KCk7XG4gICAgYXdhaXQgdGhpcy5hbGxvY2F0ZVN5c3RlbVBvcnQoKTtcbiAgICBhd2FpdCB0aGlzLmFsbG9jYXRlTWpwZWdTZXJ2ZXJQb3J0KCk7XG4gIH1cblxuICBwcm94eUFjdGl2ZSAoc2Vzc2lvbklkKSB7XG4gICAgc3VwZXIucHJveHlBY3RpdmUoc2Vzc2lvbklkKTtcblxuICAgIC8vIHdlIGFsd2F5cyBoYXZlIGFuIGFjdGl2ZSBwcm94eSB0byB0aGUgVWlBdXRvbWF0b3IyIHNlcnZlclxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY2FuUHJveHkgKHNlc3Npb25JZCkge1xuICAgIHN1cGVyLmNhblByb3h5KHNlc3Npb25JZCk7XG5cbiAgICAvLyB3ZSBjYW4gYWx3YXlzIHByb3h5IHRvIHRoZSB1aWF1dG9tYXRvcjIgc2VydmVyXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBnZXRQcm94eUF2b2lkTGlzdCAoc2Vzc2lvbklkKSB7XG4gICAgc3VwZXIuZ2V0UHJveHlBdm9pZExpc3Qoc2Vzc2lvbklkKTtcbiAgICAvLyB3ZSBhcmUgbWFpbnRhaW5pbmcgdHdvIHNldHMgb2YgTk9fUFJPWFkgbGlzdHMsIG9uZSBmb3IgY2hyb21lZHJpdmVyKENIUk9NRV9OT19QUk9YWSlcbiAgICAvLyBhbmQgb25lIGZvciB1aWF1dG9tYXRvcjIoTk9fUFJPWFkpLCBiYXNlZCBvbiBjdXJyZW50IGNvbnRleHQgd2lsbCByZXR1cm4gcmVsYXRlZCBOT19QUk9YWSBsaXN0XG4gICAgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy5jaHJvbWVkcml2ZXIpKSB7XG4gICAgICAvLyBpZiB0aGUgY3VycmVudCBjb250ZXh0IGlzIHdlYnZpZXcoY2hyb21lZHJpdmVyKSwgdGhlbiByZXR1cm4gQ0hST01FX05PX1BST1hZIGxpc3RcbiAgICAgIHRoaXMuandwUHJveHlBdm9pZCA9IENIUk9NRV9OT19QUk9YWTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5qd3BQcm94eUF2b2lkID0gTk9fUFJPWFk7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdHMubmF0aXZlV2ViU2NyZWVuc2hvdCkge1xuICAgICAgdGhpcy5qd3BQcm94eUF2b2lkID0gWy4uLnRoaXMuandwUHJveHlBdm9pZCwgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvc2NyZWVuc2hvdCcpXV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuandwUHJveHlBdm9pZDtcbiAgfVxuXG4gIGdldCBpc0Nocm9tZVNlc3Npb24gKCkge1xuICAgIHJldHVybiBoZWxwZXJzLmlzQ2hyb21lQnJvd3Nlcih0aGlzLm9wdHMuYnJvd3Nlck5hbWUpO1xuICB9XG59XG5cbi8vIGZpcnN0IGFkZCB0aGUgYW5kcm9pZC1kcml2ZXIgY29tbWFuZHMgd2hpY2ggd2Ugd2lsbCBmYWxsIGJhY2sgdG9cbmZvciAobGV0IFtjbWQsIGZuXSBvZiBfLnRvUGFpcnMoYW5kcm9pZENvbW1hbmRzKSkge1xuICBBbmRyb2lkVWlhdXRvbWF0b3IyRHJpdmVyLnByb3RvdHlwZVtjbWRdID0gZm47XG59XG5cbi8vIHRoZW4gb3ZlcndyaXRlIHdpdGggYW55IHVpYXV0b21hdG9yMi1zcGVjaWZpYyBjb21tYW5kc1xuZm9yIChsZXQgW2NtZCwgZm5dIG9mIF8udG9QYWlycyhjb21tYW5kcykpIHtcbiAgQW5kcm9pZFVpYXV0b21hdG9yMkRyaXZlci5wcm90b3R5cGVbY21kXSA9IGZuO1xufVxuXG5leHBvcnQgeyBBbmRyb2lkVWlhdXRvbWF0b3IyRHJpdmVyIH07XG5leHBvcnQgZGVmYXVsdCBBbmRyb2lkVWlhdXRvbWF0b3IyRHJpdmVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0EsTUFBTUEsT0FBTyxHQUFHQyxNQUFNLENBQUNDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRUMsZ0JBQW1CLEVBQUVDLG1DQUFjLENBQUM7QUFJdEUsTUFBTUMsaUJBQWlCLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO0FBSXRDLE1BQU1DLDRCQUE0QixHQUFHQyxhQUFJLENBQUNDLGdCQUFnQixDQUN4REMsYUFBSSxDQUFDQyxPQUFPLENBQUNDLFdBQUUsQ0FBQ0MsTUFBTSxFQUFFLEVBQUUsd0JBQXdCLENBQUMsRUFDbkQ7RUFBQ0MsT0FBTyxFQUFFLEVBQUU7RUFBRUMsV0FBVyxFQUFFO0FBQUksQ0FBQyxDQUNqQztBQUlELE1BQU1DLFdBQVcsR0FBRyxJQUFJO0FBSXhCLE1BQU1DLHdCQUF3QixHQUFHLElBQUk7QUFFckMsTUFBTUMsYUFBYSxHQUFHLFdBQVc7QUFNakMsTUFBTUMsUUFBUSxHQUFHLENBQ2YsQ0FBQyxLQUFLLEVBQUUsSUFBSUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUMsRUFDeEMs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SUEsTUFBTSxDQUFDLDhDQUE4QyxDQUFDLENBQUMsRUFDcEUsQ0FBQyxNQUFNLEVBQUUsSUFBSUEsTUFBTSxDQUFDLGlDQUFpQyxDQUFDLENBQUMsRUFDdkQsQ0FBQyxNQUFNLEVBQUUsSUFBSUEsTUFBTSxDQUFDLHVDQUF1QyxDQUFDLENBQUMsRUFDN0QsQ0FBQyxNQUFNLEVBQUUsSUFBSUEsTUFBTSxDQUFDLCtDQUErQyxDQUFDLENBQUMsRUFDckUsQ0FBQyxNQUFNLEVBQUUsSUFBSUEsTUFBTSxDQUFDLDhDQUE4QyxDQUFDLENBQUMsRUFDcEUsQ0FBQyxNQUFNLEVBQUUsSUFBSUEsTUFBTSxDQUFDLGdDQUFnQyxDQUFDLENBQUMsRUFDdEQsQ0FBQyxNQUFNLEVBQUUsSUFBSUEsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUMsRUFDL0MsQ0FBQyxNQUFNLEVBQUUsSUFBSUEsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUMsRUFDL0MsQ0FBQyxNQUFNLEVBQUUsSUFBSUEsTUFBTSxDQUFDLDJCQUEyQixDQUFDLENBQUMsRUFDakQsQ0FBQyxNQUFNLEVBQUUsSUFBSUEsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUMsRUFDNUMsQ0FBQyxNQUFNLEVBQUUsSUFBSUEsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUMsRUFDaEQsQ0FBQyxNQUFNLEVBQUUsSUFBSUEsTUFBTSxDQUFDLG9DQUFvQyxDQUFDLENBQUMsRUFDMUQsQ0FBQyxNQUFNLEVBQUUsSUFBSUEsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUMsRUFDaEQsQ0FBQyxNQUFNLEVBQUUsSUFBSUEsTUFBTSxDQUFDLHFDQUFxQyxDQUFDLENBQUMsRUFDM0QsQ0FBQyxNQUFNLEVBQUUsSUFBSUEsTUFBTSxDQUFDLCtCQUErQixDQUFDLENBQUMsRUFDckQsQ0FBQyxNQUFNLEVBQUUsSUFBSUEsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUMsRUFHM0MsQ0FBQyxLQUFLLEVBQUUsSUFBSUEsTUFBTSxDQUFDLDJCQUEyQixDQUFDLENBQUMsRUFDaEQs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
|