appium-uiautomator2-driver 2.3.1 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +48 -0
- package/build/lib/commands/general.js +5 -2
- package/build/lib/driver.js +19 -6
- package/lib/commands/general.js +4 -0
- package/lib/driver.js +18 -4
- package/npm-shrinkwrap.json +17 -14
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -792,6 +792,54 @@ Name | Type | Required | Description | Example
|
|
|
792
792
|
--- | --- | --- | --- | ---
|
|
793
793
|
timeoutMs | number | no | The maximum number of milliseconds to block until GPS cache is refreshed. If the API call does not receive a confirmation about successful cache refresh within this timeout then an error is thrown. Providing zero or a negative value to it skips waiting completely and does not check for any errors. 20000 ms by default. | 60000
|
|
794
794
|
|
|
795
|
+
### mobile: startMediaProjectionRecording
|
|
796
|
+
|
|
797
|
+
Starts a new recording of the device activity using [Media Projection](https://developer.android.com/reference/android/media/projection/MediaProjection) API. This API is available since Android 10 (API level 29) and allows to record device screen and audio in high quality. Video and audio encoding is done by Android itself.
|
|
798
|
+
The recording is done by [Appium Settings helper](https://github.com/appium/io.appium.settings#internal-audio--video-recording).
|
|
799
|
+
|
|
800
|
+
#### Arguments
|
|
801
|
+
|
|
802
|
+
Name | Type | Required | Description | Example
|
|
803
|
+
--- | --- | --- | --- | ---
|
|
804
|
+
resolution | string | no | The resolution of the resulting video, which usually equals to Full HD 1920x1080 on most phones, however you could change it to one of the following supported resolutions: "1920x1080", "1280x720", "720x480", "320x240", "176x144" | 1280x720
|
|
805
|
+
maxDurationSec | number | no | The maximum number of seconds allowed for the recording to run. 900 seconds by default (15 minutes) | 300
|
|
806
|
+
priority | string | no | Recording thread priority is set to maximum (`high`) by default. However if you face performance drops during testing with recording enabled, you could reduce the recording priority to `normal` or `low`. | low
|
|
807
|
+
filename | string | no | You can type recording video file name as you want,
|
|
808
|
+
but recording currently supports only "mp4" format so your filename must end with ".mp4". An invalid file name will fail to start the recording. If not provided then the current timestamp will be used as file name. | screen.mp4
|
|
809
|
+
|
|
810
|
+
#### Returned Result
|
|
811
|
+
|
|
812
|
+
`true` if a new recording has successfully started. `false` if another recording is currently running.
|
|
813
|
+
|
|
814
|
+
### mobile: isMediaProjectionRecordingRunning
|
|
815
|
+
|
|
816
|
+
Check if a media projection recording is currently running
|
|
817
|
+
|
|
818
|
+
#### Returned Result
|
|
819
|
+
|
|
820
|
+
`true` if a recording is running.
|
|
821
|
+
|
|
822
|
+
### mobile: stopMediaProjectionRecording
|
|
823
|
+
|
|
824
|
+
Stops a recording and retrieves the recently recorded media. If no recording has been started before then an error is thrown. If the recording has been already finished before this API has been called then the most recent recorded media is returned.
|
|
825
|
+
|
|
826
|
+
#### Arguments
|
|
827
|
+
|
|
828
|
+
Name | Type | Required | Description | Example
|
|
829
|
+
--- | --- | --- | --- | ---
|
|
830
|
+
remotePath | string | no | The path to the remote location, where the resulting video should be uploaded. The following protocols are supported: http/https, ftp. Null or empty string value (the default setting) means the content of resulting file should be encoded as Base64 and passed as the endpoont response value. An exception will be thrown if the generated media file is too big to fit into the available process memory. | https://myserver.com/upload
|
|
831
|
+
user | string | no | The name of the user for the remote authentication. | admin
|
|
832
|
+
pass | string | no | The password for the remote authentication. | pa$$w0rd
|
|
833
|
+
method | string | no | The http multipart upload method name. The 'PUT' one is used by default. | POST
|
|
834
|
+
headers | Map<string, string> | no | Additional headers mapping for multipart http(s) uploads | {'Agent': '007'}
|
|
835
|
+
fileFieldName | string | no | The name of the form field, where the file content BLOB should be stored for http(s) uploads. `file` by default | blob
|
|
836
|
+
formFields | Map<string, string> or Array<Pair> | no | Additional form fields for multipart http(s) uploads. | {'name': 'yolo.mp4'}
|
|
837
|
+
|
|
838
|
+
#### Returned Result
|
|
839
|
+
|
|
840
|
+
Base64-encoded content of the recorded media file if `remotePath` argument is falsy or an empty string.
|
|
841
|
+
|
|
842
|
+
|
|
795
843
|
## Applications Management
|
|
796
844
|
|
|
797
845
|
UiAutomator2 driver supports Appium endpoints for applications management:
|
|
@@ -162,7 +162,10 @@ extensions.executeMobile = async function (mobileCommand, opts = {}) {
|
|
|
162
162
|
getContexts: 'mobileGetContexts',
|
|
163
163
|
installMultipleApks: 'mobileInstallMultipleApks',
|
|
164
164
|
unlock: 'mobileUnlock',
|
|
165
|
-
refreshGpsCache: 'mobileRefreshGpsCache'
|
|
165
|
+
refreshGpsCache: 'mobileRefreshGpsCache',
|
|
166
|
+
startMediaProjectionRecording: 'mobileStartMediaProjectionRecording',
|
|
167
|
+
isMediaProjectionRecordingRunning: 'mobileIsMediaProjectionRecordingRunning',
|
|
168
|
+
stopMediaProjectionRecording: 'mobileStopMediaProjectionRecording'
|
|
166
169
|
};
|
|
167
170
|
|
|
168
171
|
if (!_lodash.default.has(mobileCommandsMapping, mobileCommand)) {
|
|
@@ -255,4 +258,4 @@ var _default = extensions;
|
|
|
255
258
|
exports.default = _default;require('source-map-support').install();
|
|
256
259
|
|
|
257
260
|
|
|
258
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2NvbW1hbmRzL2dlbmVyYWwuanMiLCJuYW1lcyI6WyJleHRlbnNpb25zIiwiY29tbWFuZHMiLCJoZWxwZXJzIiwiZ2V0UGFnZVNvdXJjZSIsInVpYXV0b21hdG9yMiIsImp3cHJveHkiLCJjb21tYW5kIiwiZ2V0Q2xpcGJvYXJkIiwiYWRiIiwiZ2V0QXBpTGV2ZWwiLCJkb1NlbmRLZXlzIiwicGFyYW1zIiwia2V5ZXZlbnQiLCJrZXljb2RlIiwibWV0YXN0YXRlIiwibG9nIiwiZGVidWciLCJiYWNrIiwiZ2V0U3RyaW5ncyIsImxhbmd1YWdlIiwiZ2V0RGV2aWNlTGFuZ3VhZ2UiLCJpbmZvIiwicHJlcHJvY2Vzc1N0cmluZ3NNYXAiLCJtYXBwaW5nIiwicmVzdWx0Iiwia2V5IiwidmFsdWUiLCJfIiwidG9QYWlycyIsImlzU3RyaW5nIiwiSlNPTiIsInN0cmluZ2lmeSIsImFwa1N0cmluZ3MiLCJvcHRzIiwiYXBwIiwiYXBwUGFja2FnZSIsImVycm9yQW5kVGhyb3ciLCJ0bXBSb290IiwidGVtcERpciIsIm9wZW5EaXIiLCJwdWxsQXBrIiwiZXJyIiwibWVzc2FnZSIsImZzIiwiZXhpc3RzIiwiZXh0cmFjdFN0cmluZ3NGcm9tQXBrIiwicmltcmFmIiwiZ2V0RGlzcGxheURlbnNpdHkiLCJnZXRXaW5kb3dTaXplIiwiZ2V0V2luZG93UmVjdCIsIndpZHRoIiwiaGVpZ2h0IiwieCIsInkiLCJleGVjdXRlTW9iaWxlIiwibW9iaWxlQ29tbWFuZCIsIm1vYmlsZUNvbW1hbmRzTWFwcGluZyIsInNoZWxsIiwiZXhlY0VtdUNvbnNvbGVDb21tYW5kIiwiZHJhZ0dlc3R1cmUiLCJmbGluZ0dlc3R1cmUiLCJkb3VibGVDbGlja0dlc3R1cmUiLCJjbGlja0dlc3R1cmUiLCJsb25nQ2xpY2tHZXN0dXJlIiwicGluY2hDbG9zZUdlc3R1cmUiLCJwaW5jaE9wZW5HZXN0dXJlIiwic3dpcGVHZXN0dXJlIiwic2Nyb2xsR2VzdHVyZSIsInNjcm9sbEJhY2tUbyIsInNjcm9sbCIsInZpZXdwb3J0U2NyZWVuc2hvdCIsInZpZXdwb3J0UmVjdCIsImRlZXBMaW5rIiwic3RhcnRMb2dzQnJvYWRjYXN0Iiwic3RvcExvZ3NCcm9hZGNhc3QiLCJhY2NlcHRBbGVydCIsImRpc21pc3NBbGVydCIsImJhdHRlcnlJbmZvIiwiZGV2aWNlSW5mbyIsImdldERldmljZVRpbWUiLCJjaGFuZ2VQZXJtaXNzaW9ucyIsImdldFBlcm1pc3Npb25zIiwicGVyZm9ybUVkaXRvckFjdGlvbiIsInN0YXJ0U2NyZWVuU3RyZWFtaW5nIiwic3RvcFNjcmVlblN0cmVhbWluZyIsImdldE5vdGlmaWNhdGlvbnMiLCJsaXN0U21zIiwidHlwZSIsInNlbnNvclNldCIsImRlbGV0ZUZpbGUiLCJjbGVhckFwcCIsInN0YXJ0QWN0aXZpdHkiLCJzdGFydFNlcnZpY2UiLCJzdG9wU2VydmljZSIsImJyb2FkY2FzdCIsImdldENvbnRleHRzIiwiaW5zdGFsbE11bHRpcGxlQXBrcyIsInVubG9jayIsInJlZnJlc2hHcHNDYWNoZSIsImhhcyIsImVycm9ycyIsIlVua25vd25Db21tYW5kRXJyb3IiLCJrZXlzIiwibW9iaWxlVmlld3BvcnRTY3JlZW5zaG90IiwiZ2V0Vmlld3BvcnRTY3JlZW5zaG90IiwibW9iaWxlVmlld1BvcnRSZWN0IiwiZ2V0Vmlld1BvcnRSZWN0Iiwic2V0VXJsIiwidXJsIiwic3RhcnRVcmkiLCJtb2JpbGVEZWVwTGluayIsInBhY2thZ2UiLCJwa2ciLCJ3YWl0Rm9yTGF1bmNoIiwib3Blbk5vdGlmaWNhdGlvbnMiLCJ1cGRhdGVTZXR0aW5ncyIsInNldHRpbmdzIiwidXBkYXRlIiwiZ2V0U2V0dGluZ3MiLCJkcml2ZXJTZXR0aW5ncyIsInNlcnZlclNldHRpbmdzIiwid3JhcEJvb3RzdHJhcERpc2Nvbm5lY3QiLCJ3cmFwcGVkIiwic3VzcGVuZENocm9tZWRyaXZlclByb3h5IiwiY2hyb21lZHJpdmVyIiwicHJveHlSZXFSZXMiLCJiaW5kIiwicHJveHlDb21tYW5kIiwiandwUHJveHlBY3RpdmUiLCJtb2JpbGVHZXREZXZpY2VJbmZvIiwibW9iaWxlVHlwZSIsInRleHQiLCJpc1VuZGVmaW5lZCIsInR5cGVVbmljb2RlIiwibW9iaWxlSW5zdGFsbE11bHRpcGxlQXBrcyIsImlzQXJyYXkiLCJhcGtzIiwiaXNFbXB0eSIsIkludmFsaWRBcmd1bWVudEVycm9yIiwiQiIsImFsbCIsIm1hcCIsImNvbmZpZ3VyZUFwcCIsIkFQS19FWFRFTlNJT04iLCJvcHRpb25zIiwiT2JqZWN0IiwiYXNzaWduIl0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLiIsInNvdXJjZXMiOlsibGliL2NvbW1hbmRzL2dlbmVyYWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7IGVycm9ycyB9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuaW1wb3J0IHsgZnMsIHRlbXBEaXIgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBBUEtfRVhURU5TSU9OIH0gZnJvbSAnLi4vZXh0ZW5zaW9ucyc7XG5cbmxldCBleHRlbnNpb25zID0ge30sXG4gICAgY29tbWFuZHMgPSB7fSxcbiAgICBoZWxwZXJzID0ge307XG5cbmNvbW1hbmRzLmdldFBhZ2VTb3VyY2UgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9zb3VyY2UnLCAnR0VUJywge30pO1xufTtcblxuY29tbWFuZHMuZ2V0Q2xpcGJvYXJkID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gKGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCkgPCAyOSlcbiAgICA/IChhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL2dldF9jbGlwYm9hcmQnLCAnUE9TVCcsIHt9KSlcbiAgICA6IChhd2FpdCB0aGlzLmFkYi5nZXRDbGlwYm9hcmQoKSk7XG59O1xuXG4vLyBOZWVkIHRvIG92ZXJyaWRlIHRoaXMgZm9yIGNvcnJlY3QgdW5pY29kZSBzdXBwb3J0XG5jb21tYW5kcy5kb1NlbmRLZXlzID0gYXN5bmMgZnVuY3Rpb24gKHBhcmFtcykge1xuICBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9rZXlzJywgJ1BPU1QnLCBwYXJhbXMpO1xufTtcblxuLy8gdWlhdXRvbWF0b3IyIGRvZXNuJ3Qgc3VwcG9ydCBtZXRhc3RhdGUgZm9yIGtleWV2ZW50c1xuY29tbWFuZHMua2V5ZXZlbnQgPSBhc3luYyBmdW5jdGlvbiAoa2V5Y29kZSwgbWV0YXN0YXRlKSB7XG4gIHRoaXMubG9nLmRlYnVnKGBJZ25vcmluZyBtZXRhc3RhdGUgJHttZXRhc3RhdGV9YCk7XG4gIGF3YWl0IHRoaXMuYWRiLmtleWV2ZW50KGtleWNvZGUpO1xufTtcblxuLy8gVXNlIEFEQiBzaW5jZSB3ZSBkb24ndCBoYXZlIFVpQXV0b21hdG9yXG5jb21tYW5kcy5iYWNrID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICBhd2FpdCB0aGlzLmFkYi5rZXlldmVudCg0KTtcbn07XG5cbmNvbW1hbmRzLmdldFN0cmluZ3MgPSBhc3luYyBmdW5jdGlvbiAobGFuZ3VhZ2UpIHtcbiAgaWYgKCFsYW5ndWFnZSkge1xuICAgIGxhbmd1YWdlID0gYXdhaXQgdGhpcy5hZGIuZ2V0RGV2aWNlTGFuZ3VhZ2UoKTtcbiAgICB0aGlzLmxvZy5pbmZvKGBObyBsYW5ndWFnZSBzcGVjaWZpZWQsIHJldHVybmluZyBzdHJpbmdzIGZvcjogJHtsYW5ndWFnZX1gKTtcbiAgfVxuXG4gIC8vIENsaWVudHMgcmVxdWlyZSB0aGUgcmVzdWx0aW5nIG1hcHBpbmcgdG8gaGF2ZSBib3RoIGtleXNcbiAgLy8gYW5kIHZhbHVlcyBvZiB0eXBlIHN0cmluZ1xuICBjb25zdCBwcmVwcm9jZXNzU3RyaW5nc01hcCA9IGZ1bmN0aW9uIChtYXBwaW5nKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgXy50b1BhaXJzKG1hcHBpbmcpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IF8uaXNTdHJpbmcodmFsdWUpID8gdmFsdWUgOiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgaWYgKHRoaXMuYXBrU3RyaW5nc1tsYW5ndWFnZV0pIHtcbiAgICAvLyBSZXR1cm4gY2FjaGVkIHN0cmluZ3NcbiAgICByZXR1cm4gcHJlcHJvY2Vzc1N0cmluZ3NNYXAodGhpcy5hcGtTdHJpbmdzW2xhbmd1YWdlXSk7XG4gIH1cblxuICBpZiAoIXRoaXMub3B0cy5hcHAgJiYgIXRoaXMub3B0cy5hcHBQYWNrYWdlKSB7XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhcIk9uZSBvZiAnYXBwJyBvciAnYXBwUGFja2FnZScgY2FwYWJpbGl0aWVzIHNob3VsZCBtdXN0IGJlIHNwZWNpZmllZFwiKTtcbiAgfVxuXG4gIGxldCBhcHAgPSB0aGlzLm9wdHMuYXBwO1xuICBjb25zdCB0bXBSb290ID0gYXdhaXQgdGVtcERpci5vcGVuRGlyKCk7XG4gIHRyeSB7XG4gICAgaWYgKCFhcHApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGFwcCA9IGF3YWl0IHRoaXMuYWRiLnB1bGxBcGsodGhpcy5vcHRzLmFwcFBhY2thZ2UsIHRtcFJvb3QpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYEZhaWxlZCB0byBwdWxsIGFuIGFwayBmcm9tICcke3RoaXMub3B0cy5hcHBQYWNrYWdlfScuIE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghYXdhaXQgZnMuZXhpc3RzKGFwcCkpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYFRoZSBhcHAgYXQgJyR7YXBwfScgZG9lcyBub3QgZXhpc3RgKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qge2Fwa1N0cmluZ3N9ID0gYXdhaXQgdGhpcy5hZGIuZXh0cmFjdFN0cmluZ3NGcm9tQXBrKGFwcCwgbGFuZ3VhZ2UsIHRtcFJvb3QpO1xuICAgICAgdGhpcy5hcGtTdHJpbmdzW2xhbmd1YWdlXSA9IGFwa1N0cmluZ3M7XG4gICAgICByZXR1cm4gcHJlcHJvY2Vzc1N0cmluZ3NNYXAoYXBrU3RyaW5ncyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBDYW5ub3QgZXh0cmFjdCBzdHJpbmdzIGZyb20gJyR7YXBwfScuIE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBmcy5yaW1yYWYodG1wUm9vdCk7XG4gIH1cbn07XG5cbmNvbW1hbmRzLmdldERpc3BsYXlEZW5zaXR5ID0gYXN5bmMgZnVuY3Rpb24gZ2V0RGlzcGxheURlbnNpdHkgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2RldmljZS9kaXNwbGF5X2RlbnNpdHknLCAnR0VUJywge30pO1xufTtcblxuLy8gbWVtb2l6ZWQgaW4gY29uc3RydWN0b3JcbmNvbW1hbmRzLmdldFdpbmRvd1NpemUgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy93aW5kb3cvY3VycmVudC9zaXplJywgJ0dFVCcsIHt9KTtcbn07XG5cbi8vIEZvciBXM0NcbmNvbW1hbmRzLmdldFdpbmRvd1JlY3QgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IGF3YWl0IHRoaXMuZ2V0V2luZG93U2l6ZSgpO1xuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4OiAwLFxuICAgIHk6IDAsXG4gIH07XG59O1xuXG5leHRlbnNpb25zLmV4ZWN1dGVNb2JpbGUgPSBhc3luYyBmdW5jdGlvbiAobW9iaWxlQ29tbWFuZCwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IG1vYmlsZUNvbW1hbmRzTWFwcGluZyA9IHtcbiAgICBzaGVsbDogJ21vYmlsZVNoZWxsJyxcblxuICAgIGV4ZWNFbXVDb25zb2xlQ29tbWFuZDogJ21vYmlsZUV4ZWNFbXVDb25zb2xlQ29tbWFuZCcsXG5cbiAgICBkcmFnR2VzdHVyZTogJ21vYmlsZURyYWdHZXN0dXJlJyxcbiAgICBmbGluZ0dlc3R1cmU6ICdtb2JpbGVGbGluZ0dlc3R1cmUnLFxuICAgIGRvdWJsZUNsaWNrR2VzdHVyZTogJ21vYmlsZURvdWJsZUNsaWNrR2VzdHVyZScsXG4gICAgY2xpY2tHZXN0dXJlOiAnbW9iaWxlQ2xpY2tHZXN0dXJlJyxcbiAgICBsb25nQ2xpY2tHZXN0dXJlOiAnbW9iaWxlTG9uZ0NsaWNrR2VzdHVyZScsXG4gICAgcGluY2hDbG9zZUdlc3R1cmU6ICdtb2JpbGVQaW5jaENsb3NlR2VzdHVyZScsXG4gICAgcGluY2hPcGVuR2VzdHVyZTogJ21vYmlsZVBpbmNoT3Blbkdlc3R1cmUnLFxuICAgIHN3aXBlR2VzdHVyZTogJ21vYmlsZVN3aXBlR2VzdHVyZScsXG4gICAgc2Nyb2xsR2VzdHVyZTogJ21vYmlsZVNjcm9sbEdlc3R1cmUnLFxuICAgIHNjcm9sbEJhY2tUbzogJ21vYmlsZVNjcm9sbEJhY2tUbycsXG4gICAgc2Nyb2xsOiAnbW9iaWxlU2Nyb2xsJyxcbiAgICB2aWV3cG9ydFNjcmVlbnNob3Q6ICdtb2JpbGVWaWV3cG9ydFNjcmVlbnNob3QnLFxuICAgIHZpZXdwb3J0UmVjdDogJ21vYmlsZVZpZXdQb3J0UmVjdCcsXG5cbiAgICBkZWVwTGluazogJ21vYmlsZURlZXBMaW5rJyxcblxuICAgIHN0YXJ0TG9nc0Jyb2FkY2FzdDogJ21vYmlsZVN0YXJ0TG9nc0Jyb2FkY2FzdCcsXG4gICAgc3RvcExvZ3NCcm9hZGNhc3Q6ICdtb2JpbGVTdG9wTG9nc0Jyb2FkY2FzdCcsXG5cbiAgICBhY2NlcHRBbGVydDogJ21vYmlsZUFjY2VwdEFsZXJ0JyxcbiAgICBkaXNtaXNzQWxlcnQ6ICdtb2JpbGVEaXNtaXNzQWxlcnQnLFxuXG4gICAgYmF0dGVyeUluZm86ICdtb2JpbGVHZXRCYXR0ZXJ5SW5mbycsXG5cbiAgICBkZXZpY2VJbmZvOiAnbW9iaWxlR2V0RGV2aWNlSW5mbycsXG5cbiAgICBnZXREZXZpY2VUaW1lOiAnbW9iaWxlR2V0RGV2aWNlVGltZScsXG5cbiAgICBjaGFuZ2VQZXJtaXNzaW9uczogJ21vYmlsZUNoYW5nZVBlcm1pc3Npb25zJyxcbiAgICBnZXRQZXJtaXNzaW9uczogJ21vYmlsZUdldFBlcm1pc3Npb25zJyxcblxuICAgIHBlcmZvcm1FZGl0b3JBY3Rpb246ICdtb2JpbGVQZXJmb3JtRWRpdG9yQWN0aW9uJyxcblxuICAgIHN0YXJ0U2NyZWVuU3RyZWFtaW5nOiAnbW9iaWxlU3RhcnRTY3JlZW5TdHJlYW1pbmcnLFxuICAgIHN0b3BTY3JlZW5TdHJlYW1pbmc6ICdtb2JpbGVTdG9wU2NyZWVuU3RyZWFtaW5nJyxcblxuICAgIGdldE5vdGlmaWNhdGlvbnM6ICdtb2JpbGVHZXROb3RpZmljYXRpb25zJyxcblxuICAgIGxpc3RTbXM6ICdtb2JpbGVMaXN0U21zJyxcblxuICAgIHR5cGU6ICdtb2JpbGVUeXBlJyxcbiAgICBzZW5zb3JTZXQ6ICdzZW5zb3JTZXQnLFxuXG4gICAgZGVsZXRlRmlsZTogJ21vYmlsZURlbGV0ZUZpbGUnLFxuXG4gICAgY2xlYXJBcHA6ICdtb2JpbGVDbGVhckFwcCcsXG5cbiAgICBzdGFydEFjdGl2aXR5OiAnbW9iaWxlU3RhcnRBY3Rpdml0eScsXG4gICAgc3RhcnRTZXJ2aWNlOiAnbW9iaWxlU3RhcnRTZXJ2aWNlJyxcbiAgICBzdG9wU2VydmljZTogJ21vYmlsZVN0b3BTZXJ2aWNlJyxcbiAgICBicm9hZGNhc3Q6ICdtb2JpbGVCcm9hZGNhc3QnLFxuXG4gICAgZ2V0Q29udGV4dHM6ICdtb2JpbGVHZXRDb250ZXh0cycsXG5cbiAgICBpbnN0YWxsTXVsdGlwbGVBcGtzOiAnbW9iaWxlSW5zdGFsbE11bHRpcGxlQXBrcycsXG5cbiAgICB1bmxvY2s6ICdtb2JpbGVVbmxvY2snLFxuXG4gICAgcmVmcmVzaEdwc0NhY2hlOiAnbW9iaWxlUmVmcmVzaEdwc0NhY2hlJyxcbiAgfTtcblxuICBpZiAoIV8uaGFzKG1vYmlsZUNvbW1hbmRzTWFwcGluZywgbW9iaWxlQ29tbWFuZCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLlVua25vd25Db21tYW5kRXJyb3IoYFVua25vd24gbW9iaWxlIGNvbW1hbmQgXCIke21vYmlsZUNvbW1hbmR9XCIuIGAgK1xuICAgICAgYE9ubHkgJHtfLmtleXMobW9iaWxlQ29tbWFuZHNNYXBwaW5nKX0gY29tbWFuZHMgYXJlIHN1cHBvcnRlZC5gKTtcbiAgfVxuICByZXR1cm4gYXdhaXQgdGhpc1ttb2JpbGVDb21tYW5kc01hcHBpbmdbbW9iaWxlQ29tbWFuZF1dKG9wdHMpO1xufTtcblxuY29tbWFuZHMubW9iaWxlVmlld3BvcnRTY3JlZW5zaG90ID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5nZXRWaWV3cG9ydFNjcmVlbnNob3QoKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gUmVjdGFuZ2xlXG4gKiBAcHJvcGVydHkge251bWJlcn0gbGVmdCAtIFRoZSBsZWZ0IGNvb3JkaW5hdGUgb2YgdGhlIFJlY3RhbmdsZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0b3AgLSBUaGUgdG9wIGNvb3JkaW5hdGUgb2YgdGhlIFJlY3RhbmdsZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiBSZWN0YW5nbGUuXG4gKiBAcHJvcGVydHkge251bWJlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiBSZWN0YW5nbGUuXG4gKi9cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB2aWV3cG9ydCBjb29yZGluYXRlcy5cbiAqIEByZXR1cm5zIHtSZWN0YW5nbGV9IFRoZSB2aWV3cG9ydCBjb29yZGluYXRlcy5cbiAqL1xuY29tbWFuZHMubW9iaWxlVmlld1BvcnRSZWN0ID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlVmlld1BvcnRSZWN0ICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0Vmlld1BvcnRSZWN0KCk7XG59O1xuXG5jb21tYW5kcy5zZXRVcmwgPSBhc3luYyBmdW5jdGlvbiAodXJsKSB7XG4gIGF3YWl0IHRoaXMuYWRiLnN0YXJ0VXJpKHVybCwgdGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBEZWVwTGlua09wdHNcbiAqIEBwcm9wZXJ0eSB7IXN0cmluZ30gdXJsIC0gVGhlIG5hbWUgb2YgVVJMIHRvIHN0YXJ0LlxuICogQHByb3BlcnR5IHshc3RyaW5nfSBwYWNrYWdlIC0gVGhlIG5hbWUgb2YgdGhlIHBhY2thZ2UgdG8gc3RhcnQgdGhlIFVSSSB3aXRoLlxuICogQHByb3BlcnR5IHs/Ym9vbGVhbn0gd2FpdEZvckxhdW5jaCBbdHJ1ZV0gLSBpZiBgZmFsc2VgIHRoZW4gYWRiIHdvbid0IHdhaXRcbiAqIGZvciB0aGUgc3RhcnRlZCBhY3Rpdml0eSB0byByZXR1cm4gdGhlIGNvbnRyb2xcbiAqL1xuXG4vKipcbiAqIFN0YXJ0IFVSTCB0aGF0IHRha2UgdXNlcnMgZGlyZWN0bHkgdG8gc3BlY2lmaWMgY29udGVudCBpbiB0aGUgYXBwXG4gKiBAcGFyYW0ge0RlZXBMaW5rT3B0c30gb3B0c1xuICovXG5jb21tYW5kcy5tb2JpbGVEZWVwTGluayA9IGFzeW5jIGZ1bmN0aW9uIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHVybCxcbiAgICBwYWNrYWdlOiBwa2csXG4gICAgd2FpdEZvckxhdW5jaCxcbiAgfSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCB0aGlzLmFkYi5zdGFydFVyaSh1cmwsIHBrZywgeyB3YWl0Rm9yTGF1bmNoIH0pO1xufTtcblxuY29tbWFuZHMub3Blbk5vdGlmaWNhdGlvbnMgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL29wZW5fbm90aWZpY2F0aW9ucycsICdQT1NUJywge30pO1xufTtcblxuY29tbWFuZHMudXBkYXRlU2V0dGluZ3MgPSBhc3luYyBmdW5jdGlvbiAoc2V0dGluZ3MpIHtcbiAgYXdhaXQgdGhpcy5zZXR0aW5ncy51cGRhdGUoc2V0dGluZ3MpO1xuICBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vc2V0dGluZ3MnLCAnUE9TVCcsIHtzZXR0aW5nc30pO1xufTtcblxuY29tbWFuZHMuZ2V0U2V0dGluZ3MgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGRyaXZlclNldHRpbmdzID0gdGhpcy5zZXR0aW5ncy5nZXRTZXR0aW5ncygpO1xuICBjb25zdCBzZXJ2ZXJTZXR0aW5ncyA9IGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9zZXR0aW5ncycsICdHRVQnKTtcbiAgcmV0dXJuIHsuLi5kcml2ZXJTZXR0aW5ncywgLi4uc2VydmVyU2V0dGluZ3N9O1xufTtcblxuLyoqXG4gKiBPdmVycmlkaW5nIGFwcGl1bS1hbmRyb2lkLWRyaXZlcidzIHdyYXBCb290c3RyYXBEaXNjb25uZWN0LFxuICogdW5saWtlIGluIGFwcGl1bS1hbmRyb2lkLWRyaXZlciBhdm9pZGluZyBhZGIgcmVzdGFydGluZyBhcyBpdCBpbnRlcm5cbiAqIGtpbGxzIFVpQXV0b21hdG9yMiBzZXJ2ZXIgcnVubmluZyBpbiB0aGUgZGV2aWNlLlxuICoqL1xuaGVscGVycy53cmFwQm9vdHN0cmFwRGlzY29ubmVjdCA9IGFzeW5jIGZ1bmN0aW9uICh3cmFwcGVkKSB7XG4gIGF3YWl0IHdyYXBwZWQoKTtcbn07XG5cbi8vIFN0b3AgcHJveHlpbmcgdG8gYW55IENocm9tZWRyaXZlciBhbmQgcmVkaXJlY3QgdG8gdWlhdXRvbWF0b3IyXG5oZWxwZXJzLnN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5jaHJvbWVkcml2ZXIgPSBudWxsO1xuICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy51aWF1dG9tYXRvcjIucHJveHlSZXFSZXMuYmluZCh0aGlzLnVpYXV0b21hdG9yMik7XG4gIHRoaXMucHJveHlDb21tYW5kID0gdGhpcy51aWF1dG9tYXRvcjIucHJveHlDb21tYW5kLmJpbmQodGhpcy51aWF1dG9tYXRvcjIpO1xuICB0aGlzLmp3cFByb3h5QWN0aXZlID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogVGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGluZm8gZW50cmllcyBjYW4gYmUgZm91bmQgYXRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtLXVpYXV0b21hdG9yMi1zZXJ2ZXIvYmxvYi9tYXN0ZXIvYXBwL3NyYy9tYWluL2phdmEvaW8vYXBwaXVtL3VpYXV0b21hdG9yMi9oYW5kbGVyL0dldERldmljZUluZm8uamF2YVxuICovXG5jb21tYW5kcy5tb2JpbGVHZXREZXZpY2VJbmZvID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2RldmljZS9pbmZvJywgJ0dFVCcpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBUeXBpbmdPcHRpb25zXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd8bnVtYmVyfGJvb2xlYW59IHRleHQgLSBUaGUgdGV4dCB0byB0eXBlXG4gKi9cblxuLyoqXG4gKiBUeXBlcyB0aGUgZ2l2ZW4gVW5pY29kZSBzdHJpbmcuXG4gKiBJdCBpcyBleHBlY3RlZCB0aGF0IHRoZSBmb2N1cyBpcyBhbHJlYWR5IHB1dFxuICogdG8gdGhlIGRlc3RpbmF0aW9uIGlucHV0IGZpZWxkIGJlZm9yZSB0aGlzIG1ldGhvZCBpcyBjYWxsZWQuXG4gKlxuICogQHBhcmFtIHtUeXBpbmdPcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBpbnB1dCB0ZXh0IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBzZW50IHRvIGFkYlxuICogQHRocm93cyB7RXJyb3J9IGlmIGB0ZXh0YCBwcm9wZXJ0eSBoYXMgbm90IGJlZW4gcHJvdmlkZWRcbiAqL1xuY29tbWFuZHMubW9iaWxlVHlwZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVR5cGUgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdGV4dCxcbiAgfSA9IG9wdHM7XG4gIGlmIChfLmlzVW5kZWZpbmVkKHRleHQpKSB7XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgVGhlICd0ZXh0JyBhcmd1bWVudCBpcyBtYW5kYXRvcnlgKTtcbiAgfVxuICByZXR1cm4gYXdhaXQgdGhpcy5hZGIudHlwZVVuaWNvZGUodGV4dCk7XG59O1xuXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gSW5zdGFsbE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gYWxsb3dUZXN0UGFja2FnZXMgW2ZhbHNlXSAtIFNldCB0byB0cnVlIGluIG9yZGVyIHRvIGFsbG93IHRlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIGluc3RhbGxhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdXNlU2RjYXJkIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSB0byBpbnN0YWxsIHRoZSBhcHAgb24gc2RjYXJkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGVhZCBvZiB0aGUgZGV2aWNlIG1lbW9yeS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZ3JhbnRQZXJtaXNzaW9ucyBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8gZ3JhbnQgYWxsIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9ucyByZXF1ZXN0ZWQgaW4gdGhlIGFwcGxpY2F0aW9uJ3MgbWFuaWZlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b21hdGljYWxseSBhZnRlciB0aGUgaW5zdGFsbGF0aW9uIGlzIGNvbXBsZXRlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlciBBbmRyb2lkIDYrLlxuICogQHByb3BlcnR5IHtib29sZWFufSByZXBsYWNlIFt0cnVlXSAtIFNldCBpdCB0byBmYWxzZSBpZiB5b3UgZG9uJ3Qgd2FudFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhcHBsaWNhdGlvbiB0byBiZSB1cGdyYWRlZC9yZWluc3RhbGxlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGl0IGlzIGFscmVhZHkgcHJlc2VudCBvbiB0aGUgZGV2aWNlLlxuICogQHByb3BlcnR5IHtib29sZWFufSBwYXJ0aWFsSW5zdGFsbCBbZmFsc2VdIC0gSW5zdGFsbCBhcGtzIHBhcnRpYWxseS4gSXQgaXMgdXNlZCBmb3IgJ2luc3RhbGwtbXVsdGlwbGUnLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL2FuZHJvaWQuc3RhY2tleGNoYW5nZS5jb20vcXVlc3Rpb25zLzExMTA2NC93aGF0LWlzLWEtcGFydGlhbC1hcHBsaWNhdGlvbi1pbnN0YWxsLXZpYS1hZGJcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEluc3RhbGxNdWx0aXBsZUFwa3NPcHRpb25zXG4gKiBAcHJvcGVydHkge0FycmF5PHN0cmluZz59IGFwa3MgLSBUaGUgbGlzdCBvZiBBUEtzIHRvIGluc3RhbGwuIEVhY2ggQVBLIHNob3VsZCBiZSBhIHBhdGggdG8gYSBhcGtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGRvd25sb2FkYWJsZSBVUkwgYXMgSFRUUC9IVFRQUy5cbiAqIEBwcm9wZXJ0eSB7SW5zdGFsbE9wdGlvbnN9IG9wdGlvbnNcbiAqL1xuXG4vKipcbiAqIEluc3RhbGwgbXVsdGlwbGUgQVBLcyB3aXRoIGBpbnN0YWxsLW11bHRpcGxlYCBvcHRpb24uXG4gKlxuICogQHBhcmFtIHtJbnN0YWxsTXVsdGlwbGVBcGtzT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IGlmIGFuIGVycm9yIG9jY3VyZWQgd2hpbGUgaW5zdGFsbGluZyB0aGUgZ2l2ZW4gQVBLcy5cbiAqL1xuY29tbWFuZHMubW9iaWxlSW5zdGFsbE11bHRpcGxlQXBrcyA9IGFzeW5jIGZ1bmN0aW9uIChvcHRzID0ge30pIHtcbiAgaWYgKCFfLmlzQXJyYXkob3B0cy5hcGtzKSB8fCBfLmlzRW1wdHkob3B0cy5hcGtzKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoJ05vIGFwa3MgYXJlIGdpdmVuIHRvIGluc3RhbGwnKTtcbiAgfVxuICBjb25zdCBhcGtzID0gYXdhaXQgQi5hbGwob3B0cy5hcGtzXG4gICAgLm1hcCgoYXBwKSA9PiB0aGlzLmhlbHBlcnMuY29uZmlndXJlQXBwKGFwcCwgW0FQS19FWFRFTlNJT05dKSkpO1xuICBhd2FpdCB0aGlzLmFkYi5pbnN0YWxsTXVsdGlwbGVBcGtzKGFwa3MsIG9wdHMub3B0aW9ucyk7XG59O1xuXG5PYmplY3QuYXNzaWduKGV4dGVuc2lvbnMsIGNvbW1hbmRzLCBoZWxwZXJzKTtcblxuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxJQUFJQSxVQUFVLEdBQUcsRUFBakI7QUFBQSxJ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
|
|
261
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2NvbW1hbmRzL2dlbmVyYWwuanMiLCJuYW1lcyI6WyJleHRlbnNpb25zIiwiY29tbWFuZHMiLCJoZWxwZXJzIiwiZ2V0UGFnZVNvdXJjZSIsInVpYXV0b21hdG9yMiIsImp3cHJveHkiLCJjb21tYW5kIiwiZ2V0Q2xpcGJvYXJkIiwiYWRiIiwiZ2V0QXBpTGV2ZWwiLCJkb1NlbmRLZXlzIiwicGFyYW1zIiwia2V5ZXZlbnQiLCJrZXljb2RlIiwibWV0YXN0YXRlIiwibG9nIiwiZGVidWciLCJiYWNrIiwiZ2V0U3RyaW5ncyIsImxhbmd1YWdlIiwiZ2V0RGV2aWNlTGFuZ3VhZ2UiLCJpbmZvIiwicHJlcHJvY2Vzc1N0cmluZ3NNYXAiLCJtYXBwaW5nIiwicmVzdWx0Iiwia2V5IiwidmFsdWUiLCJfIiwidG9QYWlycyIsImlzU3RyaW5nIiwiSlNPTiIsInN0cmluZ2lmeSIsImFwa1N0cmluZ3MiLCJvcHRzIiwiYXBwIiwiYXBwUGFja2FnZSIsImVycm9yQW5kVGhyb3ciLCJ0bXBSb290IiwidGVtcERpciIsIm9wZW5EaXIiLCJwdWxsQXBrIiwiZXJyIiwibWVzc2FnZSIsImZzIiwiZXhpc3RzIiwiZXh0cmFjdFN0cmluZ3NGcm9tQXBrIiwicmltcmFmIiwiZ2V0RGlzcGxheURlbnNpdHkiLCJnZXRXaW5kb3dTaXplIiwiZ2V0V2luZG93UmVjdCIsIndpZHRoIiwiaGVpZ2h0IiwieCIsInkiLCJleGVjdXRlTW9iaWxlIiwibW9iaWxlQ29tbWFuZCIsIm1vYmlsZUNvbW1hbmRzTWFwcGluZyIsInNoZWxsIiwiZXhlY0VtdUNvbnNvbGVDb21tYW5kIiwiZHJhZ0dlc3R1cmUiLCJmbGluZ0dlc3R1cmUiLCJkb3VibGVDbGlja0dlc3R1cmUiLCJjbGlja0dlc3R1cmUiLCJsb25nQ2xpY2tHZXN0dXJlIiwicGluY2hDbG9zZUdlc3R1cmUiLCJwaW5jaE9wZW5HZXN0dXJlIiwic3dpcGVHZXN0dXJlIiwic2Nyb2xsR2VzdHVyZSIsInNjcm9sbEJhY2tUbyIsInNjcm9sbCIsInZpZXdwb3J0U2NyZWVuc2hvdCIsInZpZXdwb3J0UmVjdCIsImRlZXBMaW5rIiwic3RhcnRMb2dzQnJvYWRjYXN0Iiwic3RvcExvZ3NCcm9hZGNhc3QiLCJhY2NlcHRBbGVydCIsImRpc21pc3NBbGVydCIsImJhdHRlcnlJbmZvIiwiZGV2aWNlSW5mbyIsImdldERldmljZVRpbWUiLCJjaGFuZ2VQZXJtaXNzaW9ucyIsImdldFBlcm1pc3Npb25zIiwicGVyZm9ybUVkaXRvckFjdGlvbiIsInN0YXJ0U2NyZWVuU3RyZWFtaW5nIiwic3RvcFNjcmVlblN0cmVhbWluZyIsImdldE5vdGlmaWNhdGlvbnMiLCJsaXN0U21zIiwidHlwZSIsInNlbnNvclNldCIsImRlbGV0ZUZpbGUiLCJjbGVhckFwcCIsInN0YXJ0QWN0aXZpdHkiLCJzdGFydFNlcnZpY2UiLCJzdG9wU2VydmljZSIsImJyb2FkY2FzdCIsImdldENvbnRleHRzIiwiaW5zdGFsbE11bHRpcGxlQXBrcyIsInVubG9jayIsInJlZnJlc2hHcHNDYWNoZSIsInN0YXJ0TWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nIiwiaXNNZWRpYVByb2plY3Rpb25SZWNvcmRpbmdSdW5uaW5nIiwic3RvcE1lZGlhUHJvamVjdGlvblJlY29yZGluZyIsImhhcyIsImVycm9ycyIsIlVua25vd25Db21tYW5kRXJyb3IiLCJrZXlzIiwibW9iaWxlVmlld3BvcnRTY3JlZW5zaG90IiwiZ2V0Vmlld3BvcnRTY3JlZW5zaG90IiwibW9iaWxlVmlld1BvcnRSZWN0IiwiZ2V0Vmlld1BvcnRSZWN0Iiwic2V0VXJsIiwidXJsIiwic3RhcnRVcmkiLCJtb2JpbGVEZWVwTGluayIsInBhY2thZ2UiLCJwa2ciLCJ3YWl0Rm9yTGF1bmNoIiwib3Blbk5vdGlmaWNhdGlvbnMiLCJ1cGRhdGVTZXR0aW5ncyIsInNldHRpbmdzIiwidXBkYXRlIiwiZ2V0U2V0dGluZ3MiLCJkcml2ZXJTZXR0aW5ncyIsInNlcnZlclNldHRpbmdzIiwid3JhcEJvb3RzdHJhcERpc2Nvbm5lY3QiLCJ3cmFwcGVkIiwic3VzcGVuZENocm9tZWRyaXZlclByb3h5IiwiY2hyb21lZHJpdmVyIiwicHJveHlSZXFSZXMiLCJiaW5kIiwicHJveHlDb21tYW5kIiwiandwUHJveHlBY3RpdmUiLCJtb2JpbGVHZXREZXZpY2VJbmZvIiwibW9iaWxlVHlwZSIsInRleHQiLCJpc1VuZGVmaW5lZCIsInR5cGVVbmljb2RlIiwibW9iaWxlSW5zdGFsbE11bHRpcGxlQXBrcyIsImlzQXJyYXkiLCJhcGtzIiwiaXNFbXB0eSIsIkludmFsaWRBcmd1bWVudEVycm9yIiwiQiIsImFsbCIsIm1hcCIsImNvbmZpZ3VyZUFwcCIsIkFQS19FWFRFTlNJT04iLCJvcHRpb25zIiwiT2JqZWN0IiwiYXNzaWduIl0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLiIsInNvdXJjZXMiOlsibGliL2NvbW1hbmRzL2dlbmVyYWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7IGVycm9ycyB9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuaW1wb3J0IHsgZnMsIHRlbXBEaXIgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBBUEtfRVhURU5TSU9OIH0gZnJvbSAnLi4vZXh0ZW5zaW9ucyc7XG5cbmxldCBleHRlbnNpb25zID0ge30sXG4gICAgY29tbWFuZHMgPSB7fSxcbiAgICBoZWxwZXJzID0ge307XG5cbmNvbW1hbmRzLmdldFBhZ2VTb3VyY2UgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9zb3VyY2UnLCAnR0VUJywge30pO1xufTtcblxuY29tbWFuZHMuZ2V0Q2xpcGJvYXJkID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gKGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCkgPCAyOSlcbiAgICA/IChhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL2dldF9jbGlwYm9hcmQnLCAnUE9TVCcsIHt9KSlcbiAgICA6IChhd2FpdCB0aGlzLmFkYi5nZXRDbGlwYm9hcmQoKSk7XG59O1xuXG4vLyBOZWVkIHRvIG92ZXJyaWRlIHRoaXMgZm9yIGNvcnJlY3QgdW5pY29kZSBzdXBwb3J0XG5jb21tYW5kcy5kb1NlbmRLZXlzID0gYXN5bmMgZnVuY3Rpb24gKHBhcmFtcykge1xuICBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9rZXlzJywgJ1BPU1QnLCBwYXJhbXMpO1xufTtcblxuLy8gdWlhdXRvbWF0b3IyIGRvZXNuJ3Qgc3VwcG9ydCBtZXRhc3RhdGUgZm9yIGtleWV2ZW50c1xuY29tbWFuZHMua2V5ZXZlbnQgPSBhc3luYyBmdW5jdGlvbiAoa2V5Y29kZSwgbWV0YXN0YXRlKSB7XG4gIHRoaXMubG9nLmRlYnVnKGBJZ25vcmluZyBtZXRhc3RhdGUgJHttZXRhc3RhdGV9YCk7XG4gIGF3YWl0IHRoaXMuYWRiLmtleWV2ZW50KGtleWNvZGUpO1xufTtcblxuLy8gVXNlIEFEQiBzaW5jZSB3ZSBkb24ndCBoYXZlIFVpQXV0b21hdG9yXG5jb21tYW5kcy5iYWNrID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICBhd2FpdCB0aGlzLmFkYi5rZXlldmVudCg0KTtcbn07XG5cbmNvbW1hbmRzLmdldFN0cmluZ3MgPSBhc3luYyBmdW5jdGlvbiAobGFuZ3VhZ2UpIHtcbiAgaWYgKCFsYW5ndWFnZSkge1xuICAgIGxhbmd1YWdlID0gYXdhaXQgdGhpcy5hZGIuZ2V0RGV2aWNlTGFuZ3VhZ2UoKTtcbiAgICB0aGlzLmxvZy5pbmZvKGBObyBsYW5ndWFnZSBzcGVjaWZpZWQsIHJldHVybmluZyBzdHJpbmdzIGZvcjogJHtsYW5ndWFnZX1gKTtcbiAgfVxuXG4gIC8vIENsaWVudHMgcmVxdWlyZSB0aGUgcmVzdWx0aW5nIG1hcHBpbmcgdG8gaGF2ZSBib3RoIGtleXNcbiAgLy8gYW5kIHZhbHVlcyBvZiB0eXBlIHN0cmluZ1xuICBjb25zdCBwcmVwcm9jZXNzU3RyaW5nc01hcCA9IGZ1bmN0aW9uIChtYXBwaW5nKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgXy50b1BhaXJzKG1hcHBpbmcpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IF8uaXNTdHJpbmcodmFsdWUpID8gdmFsdWUgOiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgaWYgKHRoaXMuYXBrU3RyaW5nc1tsYW5ndWFnZV0pIHtcbiAgICAvLyBSZXR1cm4gY2FjaGVkIHN0cmluZ3NcbiAgICByZXR1cm4gcHJlcHJvY2Vzc1N0cmluZ3NNYXAodGhpcy5hcGtTdHJpbmdzW2xhbmd1YWdlXSk7XG4gIH1cblxuICBpZiAoIXRoaXMub3B0cy5hcHAgJiYgIXRoaXMub3B0cy5hcHBQYWNrYWdlKSB7XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhcIk9uZSBvZiAnYXBwJyBvciAnYXBwUGFja2FnZScgY2FwYWJpbGl0aWVzIHNob3VsZCBtdXN0IGJlIHNwZWNpZmllZFwiKTtcbiAgfVxuXG4gIGxldCBhcHAgPSB0aGlzLm9wdHMuYXBwO1xuICBjb25zdCB0bXBSb290ID0gYXdhaXQgdGVtcERpci5vcGVuRGlyKCk7XG4gIHRyeSB7XG4gICAgaWYgKCFhcHApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGFwcCA9IGF3YWl0IHRoaXMuYWRiLnB1bGxBcGsodGhpcy5vcHRzLmFwcFBhY2thZ2UsIHRtcFJvb3QpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYEZhaWxlZCB0byBwdWxsIGFuIGFwayBmcm9tICcke3RoaXMub3B0cy5hcHBQYWNrYWdlfScuIE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghYXdhaXQgZnMuZXhpc3RzKGFwcCkpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYFRoZSBhcHAgYXQgJyR7YXBwfScgZG9lcyBub3QgZXhpc3RgKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qge2Fwa1N0cmluZ3N9ID0gYXdhaXQgdGhpcy5hZGIuZXh0cmFjdFN0cmluZ3NGcm9tQXBrKGFwcCwgbGFuZ3VhZ2UsIHRtcFJvb3QpO1xuICAgICAgdGhpcy5hcGtTdHJpbmdzW2xhbmd1YWdlXSA9IGFwa1N0cmluZ3M7XG4gICAgICByZXR1cm4gcHJlcHJvY2Vzc1N0cmluZ3NNYXAoYXBrU3RyaW5ncyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBDYW5ub3QgZXh0cmFjdCBzdHJpbmdzIGZyb20gJyR7YXBwfScuIE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBmcy5yaW1yYWYodG1wUm9vdCk7XG4gIH1cbn07XG5cbmNvbW1hbmRzLmdldERpc3BsYXlEZW5zaXR5ID0gYXN5bmMgZnVuY3Rpb24gZ2V0RGlzcGxheURlbnNpdHkgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2RldmljZS9kaXNwbGF5X2RlbnNpdHknLCAnR0VUJywge30pO1xufTtcblxuLy8gbWVtb2l6ZWQgaW4gY29uc3RydWN0b3JcbmNvbW1hbmRzLmdldFdpbmRvd1NpemUgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy93aW5kb3cvY3VycmVudC9zaXplJywgJ0dFVCcsIHt9KTtcbn07XG5cbi8vIEZvciBXM0NcbmNvbW1hbmRzLmdldFdpbmRvd1JlY3QgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IGF3YWl0IHRoaXMuZ2V0V2luZG93U2l6ZSgpO1xuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4OiAwLFxuICAgIHk6IDAsXG4gIH07XG59O1xuXG5leHRlbnNpb25zLmV4ZWN1dGVNb2JpbGUgPSBhc3luYyBmdW5jdGlvbiAobW9iaWxlQ29tbWFuZCwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IG1vYmlsZUNvbW1hbmRzTWFwcGluZyA9IHtcbiAgICBzaGVsbDogJ21vYmlsZVNoZWxsJyxcblxuICAgIGV4ZWNFbXVDb25zb2xlQ29tbWFuZDogJ21vYmlsZUV4ZWNFbXVDb25zb2xlQ29tbWFuZCcsXG5cbiAgICBkcmFnR2VzdHVyZTogJ21vYmlsZURyYWdHZXN0dXJlJyxcbiAgICBmbGluZ0dlc3R1cmU6ICdtb2JpbGVGbGluZ0dlc3R1cmUnLFxuICAgIGRvdWJsZUNsaWNrR2VzdHVyZTogJ21vYmlsZURvdWJsZUNsaWNrR2VzdHVyZScsXG4gICAgY2xpY2tHZXN0dXJlOiAnbW9iaWxlQ2xpY2tHZXN0dXJlJyxcbiAgICBsb25nQ2xpY2tHZXN0dXJlOiAnbW9iaWxlTG9uZ0NsaWNrR2VzdHVyZScsXG4gICAgcGluY2hDbG9zZUdlc3R1cmU6ICdtb2JpbGVQaW5jaENsb3NlR2VzdHVyZScsXG4gICAgcGluY2hPcGVuR2VzdHVyZTogJ21vYmlsZVBpbmNoT3Blbkdlc3R1cmUnLFxuICAgIHN3aXBlR2VzdHVyZTogJ21vYmlsZVN3aXBlR2VzdHVyZScsXG4gICAgc2Nyb2xsR2VzdHVyZTogJ21vYmlsZVNjcm9sbEdlc3R1cmUnLFxuICAgIHNjcm9sbEJhY2tUbzogJ21vYmlsZVNjcm9sbEJhY2tUbycsXG4gICAgc2Nyb2xsOiAnbW9iaWxlU2Nyb2xsJyxcbiAgICB2aWV3cG9ydFNjcmVlbnNob3Q6ICdtb2JpbGVWaWV3cG9ydFNjcmVlbnNob3QnLFxuICAgIHZpZXdwb3J0UmVjdDogJ21vYmlsZVZpZXdQb3J0UmVjdCcsXG5cbiAgICBkZWVwTGluazogJ21vYmlsZURlZXBMaW5rJyxcblxuICAgIHN0YXJ0TG9nc0Jyb2FkY2FzdDogJ21vYmlsZVN0YXJ0TG9nc0Jyb2FkY2FzdCcsXG4gICAgc3RvcExvZ3NCcm9hZGNhc3Q6ICdtb2JpbGVTdG9wTG9nc0Jyb2FkY2FzdCcsXG5cbiAgICBhY2NlcHRBbGVydDogJ21vYmlsZUFjY2VwdEFsZXJ0JyxcbiAgICBkaXNtaXNzQWxlcnQ6ICdtb2JpbGVEaXNtaXNzQWxlcnQnLFxuXG4gICAgYmF0dGVyeUluZm86ICdtb2JpbGVHZXRCYXR0ZXJ5SW5mbycsXG5cbiAgICBkZXZpY2VJbmZvOiAnbW9iaWxlR2V0RGV2aWNlSW5mbycsXG5cbiAgICBnZXREZXZpY2VUaW1lOiAnbW9iaWxlR2V0RGV2aWNlVGltZScsXG5cbiAgICBjaGFuZ2VQZXJtaXNzaW9uczogJ21vYmlsZUNoYW5nZVBlcm1pc3Npb25zJyxcbiAgICBnZXRQZXJtaXNzaW9uczogJ21vYmlsZUdldFBlcm1pc3Npb25zJyxcblxuICAgIHBlcmZvcm1FZGl0b3JBY3Rpb246ICdtb2JpbGVQZXJmb3JtRWRpdG9yQWN0aW9uJyxcblxuICAgIHN0YXJ0U2NyZWVuU3RyZWFtaW5nOiAnbW9iaWxlU3RhcnRTY3JlZW5TdHJlYW1pbmcnLFxuICAgIHN0b3BTY3JlZW5TdHJlYW1pbmc6ICdtb2JpbGVTdG9wU2NyZWVuU3RyZWFtaW5nJyxcblxuICAgIGdldE5vdGlmaWNhdGlvbnM6ICdtb2JpbGVHZXROb3RpZmljYXRpb25zJyxcblxuICAgIGxpc3RTbXM6ICdtb2JpbGVMaXN0U21zJyxcblxuICAgIHR5cGU6ICdtb2JpbGVUeXBlJyxcbiAgICBzZW5zb3JTZXQ6ICdzZW5zb3JTZXQnLFxuXG4gICAgZGVsZXRlRmlsZTogJ21vYmlsZURlbGV0ZUZpbGUnLFxuXG4gICAgY2xlYXJBcHA6ICdtb2JpbGVDbGVhckFwcCcsXG5cbiAgICBzdGFydEFjdGl2aXR5OiAnbW9iaWxlU3RhcnRBY3Rpdml0eScsXG4gICAgc3RhcnRTZXJ2aWNlOiAnbW9iaWxlU3RhcnRTZXJ2aWNlJyxcbiAgICBzdG9wU2VydmljZTogJ21vYmlsZVN0b3BTZXJ2aWNlJyxcbiAgICBicm9hZGNhc3Q6ICdtb2JpbGVCcm9hZGNhc3QnLFxuXG4gICAgZ2V0Q29udGV4dHM6ICdtb2JpbGVHZXRDb250ZXh0cycsXG5cbiAgICBpbnN0YWxsTXVsdGlwbGVBcGtzOiAnbW9iaWxlSW5zdGFsbE11bHRpcGxlQXBrcycsXG5cbiAgICB1bmxvY2s6ICdtb2JpbGVVbmxvY2snLFxuXG4gICAgcmVmcmVzaEdwc0NhY2hlOiAnbW9iaWxlUmVmcmVzaEdwc0NhY2hlJyxcblxuICAgIHN0YXJ0TWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nOiAnbW9iaWxlU3RhcnRNZWRpYVByb2plY3Rpb25SZWNvcmRpbmcnLFxuICAgIGlzTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nUnVubmluZzogJ21vYmlsZUlzTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nUnVubmluZycsXG4gICAgc3RvcE1lZGlhUHJvamVjdGlvblJlY29yZGluZzogJ21vYmlsZVN0b3BNZWRpYVByb2plY3Rpb25SZWNvcmRpbmcnLFxuICB9O1xuXG4gIGlmICghXy5oYXMobW9iaWxlQ29tbWFuZHNNYXBwaW5nLCBtb2JpbGVDb21tYW5kKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuVW5rbm93bkNvbW1hbmRFcnJvcihgVW5rbm93biBtb2JpbGUgY29tbWFuZCBcIiR7bW9iaWxlQ29tbWFuZH1cIi4gYCArXG4gICAgICBgT25seSAke18ua2V5cyhtb2JpbGVDb21tYW5kc01hcHBpbmcpfSBjb21tYW5kcyBhcmUgc3VwcG9ydGVkLmApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzW21vYmlsZUNvbW1hbmRzTWFwcGluZ1ttb2JpbGVDb21tYW5kXV0ob3B0cyk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVWaWV3cG9ydFNjcmVlbnNob3QgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmdldFZpZXdwb3J0U2NyZWVuc2hvdCgpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBSZWN0YW5nbGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsZWZ0IC0gVGhlIGxlZnQgY29vcmRpbmF0ZSBvZiB0aGUgUmVjdGFuZ2xlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHRvcCAtIFRoZSB0b3AgY29vcmRpbmF0ZSBvZiB0aGUgUmVjdGFuZ2xlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIFJlY3RhbmdsZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIFJlY3RhbmdsZS5cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHZpZXdwb3J0IGNvb3JkaW5hdGVzLlxuICogQHJldHVybnMge1JlY3RhbmdsZX0gVGhlIHZpZXdwb3J0IGNvb3JkaW5hdGVzLlxuICovXG5jb21tYW5kcy5tb2JpbGVWaWV3UG9ydFJlY3QgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVWaWV3UG9ydFJlY3QgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5nZXRWaWV3UG9ydFJlY3QoKTtcbn07XG5cbmNvbW1hbmRzLnNldFVybCA9IGFzeW5jIGZ1bmN0aW9uICh1cmwpIHtcbiAgYXdhaXQgdGhpcy5hZGIuc3RhcnRVcmkodXJsLCB0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IERlZXBMaW5rT3B0c1xuICogQHByb3BlcnR5IHshc3RyaW5nfSB1cmwgLSBUaGUgbmFtZSBvZiBVUkwgdG8gc3RhcnQuXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IHBhY2thZ2UgLSBUaGUgbmFtZSBvZiB0aGUgcGFja2FnZSB0byBzdGFydCB0aGUgVVJJIHdpdGguXG4gKiBAcHJvcGVydHkgez9ib29sZWFufSB3YWl0Rm9yTGF1bmNoIFt0cnVlXSAtIGlmIGBmYWxzZWAgdGhlbiBhZGIgd29uJ3Qgd2FpdFxuICogZm9yIHRoZSBzdGFydGVkIGFjdGl2aXR5IHRvIHJldHVybiB0aGUgY29udHJvbFxuICovXG5cbi8qKlxuICogU3RhcnQgVVJMIHRoYXQgdGFrZSB1c2VycyBkaXJlY3RseSB0byBzcGVjaWZpYyBjb250ZW50IGluIHRoZSBhcHBcbiAqIEBwYXJhbSB7RGVlcExpbmtPcHRzfSBvcHRzXG4gKi9cbmNvbW1hbmRzLm1vYmlsZURlZXBMaW5rID0gYXN5bmMgZnVuY3Rpb24gKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdXJsLFxuICAgIHBhY2thZ2U6IHBrZyxcbiAgICB3YWl0Rm9yTGF1bmNoLFxuICB9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLnN0YXJ0VXJpKHVybCwgcGtnLCB7IHdhaXRGb3JMYXVuY2ggfSk7XG59O1xuXG5jb21tYW5kcy5vcGVuTm90aWZpY2F0aW9ucyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9kZXZpY2Uvb3Blbl9ub3RpZmljYXRpb25zJywgJ1BPU1QnLCB7fSk7XG59O1xuXG5jb21tYW5kcy51cGRhdGVTZXR0aW5ncyA9IGFzeW5jIGZ1bmN0aW9uIChzZXR0aW5ncykge1xuICBhd2FpdCB0aGlzLnNldHRpbmdzLnVwZGF0ZShzZXR0aW5ncyk7XG4gIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9zZXR0aW5ncycsICdQT1NUJywge3NldHRpbmdzfSk7XG59O1xuXG5jb21tYW5kcy5nZXRTZXR0aW5ncyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgZHJpdmVyU2V0dGluZ3MgPSB0aGlzLnNldHRpbmdzLmdldFNldHRpbmdzKCk7XG4gIGNvbnN0IHNlcnZlclNldHRpbmdzID0gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL3NldHRpbmdzJywgJ0dFVCcpO1xuICByZXR1cm4gey4uLmRyaXZlclNldHRpbmdzLCAuLi5zZXJ2ZXJTZXR0aW5nc307XG59O1xuXG4vKipcbiAqIE92ZXJyaWRpbmcgYXBwaXVtLWFuZHJvaWQtZHJpdmVyJ3Mgd3JhcEJvb3RzdHJhcERpc2Nvbm5lY3QsXG4gKiB1bmxpa2UgaW4gYXBwaXVtLWFuZHJvaWQtZHJpdmVyIGF2b2lkaW5nIGFkYiByZXN0YXJ0aW5nIGFzIGl0IGludGVyblxuICoga2lsbHMgVWlBdXRvbWF0b3IyIHNlcnZlciBydW5uaW5nIGluIHRoZSBkZXZpY2UuXG4gKiovXG5oZWxwZXJzLndyYXBCb290c3RyYXBEaXNjb25uZWN0ID0gYXN5bmMgZnVuY3Rpb24gKHdyYXBwZWQpIHtcbiAgYXdhaXQgd3JhcHBlZCgpO1xufTtcblxuLy8gU3RvcCBwcm94eWluZyB0byBhbnkgQ2hyb21lZHJpdmVyIGFuZCByZWRpcmVjdCB0byB1aWF1dG9tYXRvcjJcbmhlbHBlcnMuc3VzcGVuZENocm9tZWRyaXZlclByb3h5ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmNocm9tZWRyaXZlciA9IG51bGw7XG4gIHRoaXMucHJveHlSZXFSZXMgPSB0aGlzLnVpYXV0b21hdG9yMi5wcm94eVJlcVJlcy5iaW5kKHRoaXMudWlhdXRvbWF0b3IyKTtcbiAgdGhpcy5wcm94eUNvbW1hbmQgPSB0aGlzLnVpYXV0b21hdG9yMi5wcm94eUNvbW1hbmQuYmluZCh0aGlzLnVpYXV0b21hdG9yMik7XG4gIHRoaXMuandwUHJveHlBY3RpdmUgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBUaGUgbGlzdCBvZiBhdmFpbGFibGUgaW5mbyBlbnRyaWVzIGNhbiBiZSBmb3VuZCBhdFxuICogaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0tdWlhdXRvbWF0b3IyLXNlcnZlci9ibG9iL21hc3Rlci9hcHAvc3JjL21haW4vamF2YS9pby9hcHBpdW0vdWlhdXRvbWF0b3IyL2hhbmRsZXIvR2V0RGV2aWNlSW5mby5qYXZhXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUdldERldmljZUluZm8gPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL2luZm8nLCAnR0VUJyk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFR5cGluZ09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7IXN0cmluZ3xudW1iZXJ8Ym9vbGVhbn0gdGV4dCAtIFRoZSB0ZXh0IHRvIHR5cGVcbiAqL1xuXG4vKipcbiAqIFR5cGVzIHRoZSBnaXZlbiBVbmljb2RlIHN0cmluZy5cbiAqIEl0IGlzIGV4cGVjdGVkIHRoYXQgdGhlIGZvY3VzIGlzIGFscmVhZHkgcHV0XG4gKiB0byB0aGUgZGVzdGluYXRpb24gaW5wdXQgZmllbGQgYmVmb3JlIHRoaXMgbWV0aG9kIGlzIGNhbGxlZC5cbiAqXG4gKiBAcGFyYW0ge1R5cGluZ09wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGlucHV0IHRleHQgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHNlbnQgdG8gYWRiXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgYHRleHRgIHByb3BlcnR5IGhhcyBub3QgYmVlbiBwcm92aWRlZFxuICovXG5jb21tYW5kcy5tb2JpbGVUeXBlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlVHlwZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICB0ZXh0LFxuICB9ID0gb3B0cztcbiAgaWYgKF8uaXNVbmRlZmluZWQodGV4dCkpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBUaGUgJ3RleHQnIGFyZ3VtZW50IGlzIG1hbmRhdG9yeWApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLmFkYi50eXBlVW5pY29kZSh0ZXh0KTtcbn07XG5cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBJbnN0YWxsT3B0aW9uc1xuICogQHByb3BlcnR5IHtib29sZWFufSBhbGxvd1Rlc3RQYWNrYWdlcyBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8gYWxsb3cgdGVzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgaW5zdGFsbGF0aW9uLlxuICogQHByb3BlcnR5IHtib29sZWFufSB1c2VTZGNhcmQgW2ZhbHNlXSAtIFNldCB0byB0cnVlIHRvIGluc3RhbGwgdGhlIGFwcCBvbiBzZGNhcmRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIHRoZSBkZXZpY2UgbWVtb3J5LlxuICogQHByb3BlcnR5IHtib29sZWFufSBncmFudFBlcm1pc3Npb25zIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBncmFudCBhbGwgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zIHJlcXVlc3RlZCBpbiB0aGUgYXBwbGljYXRpb24ncyBtYW5pZmVzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGFmdGVyIHRoZSBpbnN0YWxsYXRpb24gaXMgY29tcGxldGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVyIEFuZHJvaWQgNisuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJlcGxhY2UgW3RydWVdIC0gU2V0IGl0IHRvIGZhbHNlIGlmIHlvdSBkb24ndCB3YW50XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGFwcGxpY2F0aW9uIHRvIGJlIHVwZ3JhZGVkL3JlaW5zdGFsbGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXQgaXMgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSBkZXZpY2UuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHBhcnRpYWxJbnN0YWxsIFtmYWxzZV0gLSBJbnN0YWxsIGFwa3MgcGFydGlhbGx5LiBJdCBpcyB1c2VkIGZvciAnaW5zdGFsbC1tdWx0aXBsZScuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBzOi8vYW5kcm9pZC5zdGFja2V4Y2hhbmdlLmNvbS9xdWVzdGlvbnMvMTExMDY0L3doYXQtaXMtYS1wYXJ0aWFsLWFwcGxpY2F0aW9uLWluc3RhbGwtdmlhLWFkYlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gSW5zdGFsbE11bHRpcGxlQXBrc09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nPn0gYXBrcyAtIFRoZSBsaXN0IG9mIEFQS3MgdG8gaW5zdGFsbC4gRWFjaCBBUEsgc2hvdWxkIGJlIGEgcGF0aCB0byBhIGFwa1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgZG93bmxvYWRhYmxlIFVSTCBhcyBIVFRQL0hUVFBTLlxuICogQHByb3BlcnR5IHtJbnN0YWxsT3B0aW9uc30gb3B0aW9uc1xuICovXG5cbi8qKlxuICogSW5zdGFsbCBtdWx0aXBsZSBBUEtzIHdpdGggYGluc3RhbGwtbXVsdGlwbGVgIG9wdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0luc3RhbGxNdWx0aXBsZUFwa3NPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgYW4gZXJyb3Igb2NjdXJlZCB3aGlsZSBpbnN0YWxsaW5nIHRoZSBnaXZlbiBBUEtzLlxuICovXG5jb21tYW5kcy5tb2JpbGVJbnN0YWxsTXVsdGlwbGVBcGtzID0gYXN5bmMgZnVuY3Rpb24gKG9wdHMgPSB7fSkge1xuICBpZiAoIV8uaXNBcnJheShvcHRzLmFwa3MpIHx8IF8uaXNFbXB0eShvcHRzLmFwa3MpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcignTm8gYXBrcyBhcmUgZ2l2ZW4gdG8gaW5zdGFsbCcpO1xuICB9XG4gIGNvbnN0IGFwa3MgPSBhd2FpdCBCLmFsbChvcHRzLmFwa3NcbiAgICAubWFwKChhcHApID0+IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAoYXBwLCBbQVBLX0VYVEVOU0lPTl0pKSk7XG4gIGF3YWl0IHRoaXMuYWRiLmluc3RhbGxNdWx0aXBsZUFwa3MoYXBrcywgb3B0cy5vcHRpb25zKTtcbn07XG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgY29tbWFuZHMsIGhlbHBlcnMpO1xuXG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLElBQUlBLFVBQVUsR0FBRyxFQUFqQjtBQUFBLElBQ0lDLFFBQVEsR0FBRyxFQURmO0FBQUEsSUFFSUMsT0FBTyxHQUFHLEVBRmQ7O0FBSUFELFFBQVEsQ0FBQ0UsYUFBVCxHQUF5QixrQkFBa0I7RUFDekMsT0FBTyxNQUFNLEtBQUtDLFlBQUwsQ0FBa0JDLE9BQWxCLENBQTBCQyxPQUExQixDQUFrQyxTQUFsQyxFQUE2QyxLQUE3QyxFQUFvRCxFQUFwRCxDQUFiO0FBQ0QsQ0FGRDs7QUFJQUwsUUFBUSxDQUFDTSxZQUFULEdBQXdCLGtCQUFrQjtFQUN4QyxPQUFRLE9BQU0sS0FBS0MsR0FBTCxDQUFTQyxXQUFULEVBQU4sSUFBK0IsRUFBaEMsR0FDRixNQUFNLEtBQUtMLFlBQUwsQ0FBa0JDLE9BQWxCLENBQTBCQyxPQUExQixDQUFrQyw4QkFBbEMsRUFBa0UsTUFBbEUsRUFBMEUsRUFBMUUsQ0FESixHQUVGLE1BQU0sS0FBS0UsR0FBTCxDQUFTRCxZQUFULEVBRlg7QUFHRCxDQUpEOztBQU9BTixRQUFRLENBQUNTLFVBQVQsR0FBc0IsZ0JBQWdCQyxNQUFoQixFQUF3QjtFQUM1QyxNQUFNLEtBQUtQLFlBQUwsQ0FBa0JDLE9BQWxCLENBQTBCQyxPQUExQixDQUFrQyxPQUFsQyxFQUEyQyxNQUEzQyxFQUFtREssTUFBbkQsQ0FBTjtBQUNELENBRkQ7O0FBS0FW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
|
package/build/lib/driver.js
CHANGED
|
@@ -445,15 +445,20 @@ class AndroidUiautomator2Driver extends _driver.BaseDriver {
|
|
|
445
445
|
|
|
446
446
|
async deleteSession() {
|
|
447
447
|
this.log.debug('Deleting UiAutomator2 session');
|
|
448
|
-
|
|
449
|
-
try {
|
|
448
|
+
const screenRecordingStopTasks = [async () => {
|
|
450
449
|
if (!_lodash.default.isEmpty(this._screenRecordingProperties)) {
|
|
451
450
|
await this.stopRecordingScreen();
|
|
452
451
|
}
|
|
453
|
-
}
|
|
454
|
-
|
|
452
|
+
}, async () => {
|
|
453
|
+
if (await this.mobileIsMediaProjectionRecordingRunning()) {
|
|
454
|
+
await this.mobileStopMediaProjectionRecording();
|
|
455
|
+
}
|
|
456
|
+
}, async () => {
|
|
457
|
+
if (!_lodash.default.isEmpty(this._screenStreamingProps)) {
|
|
458
|
+
await this.mobileStopScreenStreaming();
|
|
459
|
+
}
|
|
460
|
+
}];
|
|
455
461
|
await _appiumAndroidDriver.androidHelpers.removeAllSessionWebSocketHandlers(this.server, this.sessionId);
|
|
456
|
-
await this.mobileStopScreenStreaming();
|
|
457
462
|
|
|
458
463
|
if (this.uiautomator2) {
|
|
459
464
|
try {
|
|
@@ -476,6 +481,14 @@ class AndroidUiautomator2Driver extends _driver.BaseDriver {
|
|
|
476
481
|
this.jwpProxyActive = false;
|
|
477
482
|
|
|
478
483
|
if (this.adb) {
|
|
484
|
+
await _bluebird.default.all(screenRecordingStopTasks.map(task => {
|
|
485
|
+
(async () => {
|
|
486
|
+
try {
|
|
487
|
+
await task();
|
|
488
|
+
} catch (ign) {}
|
|
489
|
+
})();
|
|
490
|
+
}));
|
|
491
|
+
|
|
479
492
|
if (this.opts.unicodeKeyboard && this.opts.resetKeyboard && this.defaultIME) {
|
|
480
493
|
this.log.debug(`Resetting IME to '${this.defaultIME}'`);
|
|
481
494
|
|
|
@@ -625,4 +638,4 @@ var _default = AndroidUiautomator2Driver;
|
|
|
625
638
|
exports.default = _default;require('source-map-support').install();
|
|
626
639
|
|
|
627
640
|
|
|
628
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2RyaXZlci5qcyIsIm5hbWVzIjpbImhlbHBlcnMiLCJPYmplY3QiLCJhc3NpZ24iLCJ1aWF1dG9tYXRvcjJIZWxwZXJzIiwiYW5kcm9pZEhlbHBlcnMiLCJERVZJQ0VfUE9SVF9SQU5HRSIsIkRFVklDRV9QT1JUX0FMTE9DQVRJT05fR1VBUkQiLCJ1dGlsIiwiZ2V0TG9ja0ZpbGVHdWFyZCIsInBhdGgiLCJyZXNvbHZlIiwib3MiLCJ0bXBkaXIiLCJ0aW1lb3V0IiwidHJ5UmVjb3ZlcnkiLCJERVZJQ0VfUE9SVCIsIk1KUEVHX1NFUlZFUl9ERVZJQ0VfUE9SVCIsIkxPQ0FMSE9TVF9JUDQiLCJOT19QUk9YWSIsIlJlZ0V4cCIsIkNIUk9NRV9OT19QUk9YWSIsIk1FTU9JWkVEX0ZVTkNUSU9OUyIsIkFuZHJvaWRVaWF1dG9tYXRvcjJEcml2ZXIiLCJCYXNlRHJpdmVyIiwiY29uc3RydWN0b3IiLCJvcHRzIiwic2hvdWxkVmFsaWRhdGVDYXBzIiwic2hlbGwiLCJsb2NhdG9yU3RyYXRlZ2llcyIsImRlc2lyZWRDYXBDb25zdHJhaW50cyIsInVpYXV0b21hdG9yMiIsImp3cFByb3h5QWN0aXZlIiwiZGVmYXVsdElNRSIsImp3cFByb3h5QXZvaWQiLCJhcGtTdHJpbmdzIiwic2V0dGluZ3MiLCJEZXZpY2VTZXR0aW5ncyIsImlnbm9yZVVuaW1wb3J0YW50Vmlld3MiLCJhbGxvd0ludmlzaWJsZUVsZW1lbnRzIiwib25TZXR0aW5nc1VwZGF0ZSIsImJpbmQiLCJjaHJvbWVkcml2ZXIiLCJzZXNzaW9uQ2hyb21lZHJpdmVycyIsImZuIiwiXyIsIm1lbW9pemUiLCJ2YWxpZGF0ZURlc2lyZWRDYXBzIiwiY2FwcyIsImNyZWF0ZVNlc3Npb24iLCJhcmdzIiwic2Vzc2lvbklkIiwic2VydmVyRGV0YWlscyIsInBsYXRmb3JtIiwid2ViU3RvcmFnZUVuYWJsZWQiLCJ0YWtlc1NjcmVlbnNob3QiLCJqYXZhc2NyaXB0RW5hYmxlZCIsImRhdGFiYXNlRW5hYmxlZCIsIm5ldHdvcmtDb25uZWN0aW9uRW5hYmxlZCIsImxvY2F0aW9uQ29udGV4dEVuYWJsZWQiLCJ3YXJuaW5ncyIsImRlc2lyZWQiLCJjdXJDb250ZXh0IiwiZGVmYXVsdENvbnRleHROYW1lIiwiZGVmYXVsdE9wdHMiLCJmdWxsUmVzZXQiLCJhdXRvTGF1bmNoIiwiYWRiUG9ydCIsIkRFRkFVTFRfQURCX1BPUlQiLCJhbmRyb2lkSW5zdGFsbFRpbWVvdXQiLCJkZWZhdWx0cyIsImlzQ2hyb21lU2Vzc2lvbiIsImxvZyIsImluZm8iLCJwa2ciLCJhY3Rpdml0eSIsImdldENocm9tZVBrZyIsImJyb3dzZXJOYW1lIiwiYXBwUGFja2FnZSIsImFwcEFjdGl2aXR5IiwicmVib290Iiwic2V0QXZkRnJvbUNhcGFiaWxpdGllcyIsImFwcCIsImNvbmZpZ3VyZUFwcCIsIkFQS19FWFRFTlNJT04iLCJBUEtTX0VYVEVOU0lPTiIsImNoZWNrQXBwUHJlc2VudCIsInN0YXJ0VWlBdXRvbWF0b3IyU2Vzc2lvbiIsImZpbGxEZXZpY2VEZXRhaWxzIiwibWpwZWdTY3JlZW5zaG90VXJsIiwibWpwZWdTdHJlYW0iLCJtanBlZyIsIk1KcGVnU3RyZWFtIiwic3RhcnQiLCJlIiwiZGVsZXRlU2Vzc2lvbiIsInBpeGVsUmF0aW8iLCJnZXREZXZpY2VQaXhlbFJhdGlvIiwic3RhdEJhckhlaWdodCIsImdldFN0YXR1c0JhckhlaWdodCIsInZpZXdwb3J0UmVjdCIsImdldFZpZXdQb3J0UmVjdCIsImRyaXZlckRhdGEiLCJnZXRTZXNzaW9uIiwic2Vzc2lvbkRhdGEiLCJkZWJ1ZyIsInVpYTJEYXRhIiwiandwcm94eSIsImNvbW1hbmQiLCJpc0VtdWxhdG9yIiwiYWRiIiwiYXZkIiwiZGV2aWNlTmFtZSIsImVycm9yQW5kVGhyb3ciLCJwbGF0Zm9ybVZlcnNpb24iLCJhdmREZXZpY2UiLCJyZXBsYWNlIiwiYWxsb2NhdGVTeXN0ZW1Qb3J0IiwiZm9yd2FyZFBvcnQiLCJsb2NhbFBvcnQiLCJjaGVja1BvcnRTdGF0dXMiLCJzeXN0ZW1Qb3J0IiwiX2hhc1N5c3RlbVBvcnRJbkNhcHMiLCJzdGFydFBvcnQiLCJlbmRQb3J0IiwiZmluZEFQb3J0Tm90SW5Vc2UiLCJyZWxlYXNlU3lzdGVtUG9ydCIsInJlbW92ZVBvcnRGb3J3YXJkIiwiYWxsb2NhdGVNanBlZ1NlcnZlclBvcnQiLCJtanBlZ1NlcnZlclBvcnQiLCJyZWxlYXNlTWpwZWdTZXJ2ZXJQb3J0IiwidWRpZCIsImVtUG9ydCIsImdldERldmljZUluZm9Gcm9tQ2FwcyIsImNyZWF0ZUFEQiIsImFwaUxldmVsIiwiZ2V0QXBpTGV2ZWwiLCJzZXRIaWRkZW5BcGlQb2xpY3kiLCJpZ25vcmVIaWRkZW5BcGlQb2xpY3lFcnJvciIsImhhc1ZhbHVlIiwiZ3BzRW5hYmxlZCIsInRvZ2dsZUdQU0xvY2F0aW9uUHJvdmlkZXIiLCJ3YXJuIiwiYXBwSW5mbyIsImdldExhdW5jaEluZm8iLCJjdXJEZXZpY2VJZCIsImRldmljZVVESUQiLCJpbml0RGV2aWNlIiwiaW5pdFVpQXV0b21hdG9yMlNlcnZlciIsImRpc2FibGVXaW5kb3dBbmltYXRpb24iLCJpc0FuaW1hdGlvbk9uIiwic2V0QW5pbWF0aW9uU3RhdGUiLCJfd2FzV2luZG93QW5pbWF0aW9uRGlzYWJsZWQiLCJpbml0QVVUIiwic3RhcnRTZXNzaW9uIiwiYWRkRGV2aWNlSW5mb1RvQ2FwcyIsInNraXBVbmxvY2siLCJ1bmxvY2siLCJzdGFydENocm9tZVNlc3Npb24iLCJlbnN1cmVBcHBTdGFydHMiLCJvcmllbnRhdGlvbiIsInNldE9yaWVudGF0aW9uIiwiYXV0b1dlYnZpZXciLCJ2aWV3TmFtZSIsImRlZmF1bHRXZWJ2aWV3TmFtZSIsImF1dG9XZWJ2aWV3VGltZW91dCIsInJldHJ5SW50ZXJ2YWwiLCJzZXRDb250ZXh0IiwiYXBpVmVyc2lvbiIsIm1hbnVmYWN0dXJlciIsIm1vZGVsIiwicmVhbERpc3BsYXlTaXplIiwiZGlzcGxheURlbnNpdHkiLCJtb2JpbGVHZXREZXZpY2VJbmZvIiwiZGV2aWNlQXBpTGV2ZWwiLCJwYXJzZUludCIsImRldmljZVNjcmVlblNpemUiLCJkZXZpY2VTY3JlZW5EZW5zaXR5IiwiZGV2aWNlTW9kZWwiLCJkZXZpY2VNYW51ZmFjdHVyZXIiLCJ1aWF1dG9tYXRvcjJPcHRzIiwiaG9zdCIsInJlbW90ZUFkYkhvc3QiLCJkZXZpY2VQb3J0IiwiYXBrIiwidG1wRGlyIiwiZGlzYWJsZVN1cHByZXNzQWNjZXNzaWJpbGl0eVNlcnZpY2UiLCJyZWFkVGltZW91dCIsInVpYXV0b21hdG9yMlNlcnZlclJlYWRUaW1lb3V0IiwiVWlBdXRvbWF0b3IyU2VydmVyIiwicHJveHlSZXFSZXMiLCJwcm94eUNvbW1hbmQiLCJza2lwU2VydmVySW5zdGFsbGF0aW9uIiwiaW5zdGFsbFNlcnZlckFwayIsInVpYXV0b21hdG9yMlNlcnZlckluc3RhbGxUaW1lb3V0IiwiYWRkVG9EZXZpY2VJZGxlV2hpdGVsaXN0IiwiU0VUVElOR1NfSEVMUEVSX1BLR19JRCIsIlNFUlZFUl9QQUNLQUdFX0lEIiwiU0VSVkVSX1RFU1RfUEFDS0FHRV9JRCIsInN0ZGVyciIsIm1lc3NhZ2UiLCJ1bmluc3RhbGxPdGhlclBhY2thZ2VzIiwicGFyc2VBcnJheSIsIm90aGVyQXBwcyIsIkIiLCJhbGwiLCJtYXAiLCJpbnN0YWxsT3RoZXJBcGtzIiwibm9SZXNldCIsImlzQXBwSW5zdGFsbGVkIiwibm9TaWduIiwiY2hlY2tBcGtDZXJ0IiwicmVxdWlyZURlZmF1bHRDZXJ0Iiwic2lnbkFwcCIsInNraXBVbmluc3RhbGwiLCJ1bmluc3RhbGxBcGsiLCJpbnN0YWxsQXBrIiwiZmFzdFJlc2V0IiwicmVzZXRBcHAiLCJhcHBXYWl0UGFja2FnZSIsImFwcFdhaXRBY3Rpdml0eSIsImFuZHJvaWRDb3ZlcmFnZSIsInN0YXJ0QXBwIiwiYWN0aW9uIiwiaW50ZW50QWN0aW9uIiwiY2F0ZWdvcnkiLCJpbnRlbnRDYXRlZ29yeSIsImZsYWdzIiwiaW50ZW50RmxhZ3MiLCJ3YWl0UGtnIiwid2FpdEFjdGl2aXR5Iiwid2FpdEZvckxhdW5jaCIsImFwcFdhaXRGb3JMYXVuY2giLCJ3YWl0RHVyYXRpb24iLCJhcHBXYWl0RHVyYXRpb24iLCJvcHRpb25hbEludGVudEFyZ3VtZW50cyIsInN0b3BBcHAiLCJkb250U3RvcEFwcE9uUmVzZXQiLCJyZXRyeSIsInVzZXIiLCJ1c2VyUHJvZmlsZSIsImlzRW1wdHkiLCJfc2NyZWVuUmVjb3JkaW5nUHJvcGVydGllcyIsInN0b3BSZWNvcmRpbmdTY3JlZW4iLCJpZ24iLCJyZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnMiLCJzZXJ2ZXIiLCJtb2JpbGVTdG9wU2NyZWVuU3RyZWFtaW5nIiwic3RvcENocm9tZWRyaXZlclByb3hpZXMiLCJlcnIiLCJ1bmljb2RlS2V5Ym9hcmQiLCJyZXNldEtleWJvYXJkIiwic2V0SU1FIiwiZW5kQW5kcm9pZENvdmVyYWdlIiwiYW5kcm9pZENvdmVyYWdlRW5kSW50ZW50IiwiYnJvYWRjYXN0IiwiZm9yY2VTdG9wIiwic3RvcExvZ2NhdCIsImVycm9yIiwic2V0RGVmYXVsdEhpZGRlbkFwaVBvbGljeSIsImF2ZE5hbWUiLCJraWxsRW11bGF0b3IiLCJzdG9wIiwiZnMiLCJleGlzdHMiLCJ3cmFwQm9vdHN0cmFwRGlzY29ubmVjdCIsIndyYXBwZWQiLCJyZXN0YXJ0IiwicHJveHlBY3RpdmUiLCJjYW5Qcm94eSIsImdldFByb3h5QXZvaWRMaXN0IiwibmF0aXZlV2ViU2NyZWVuc2hvdCIsImlzQ2hyb21lQnJvd3NlciIsImNtZCIsInRvUGFpcnMiLCJhbmRyb2lkQ29tbWFuZHMiLCJwcm90b3R5cGUiLCJjb21tYW5kcyJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9kcml2ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IEJhc2VEcml2ZXIsIERldmljZVNldHRpbmdzIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQge1xuICBVaUF1dG9tYXRvcjJTZXJ2ZXIsIFNFUlZFUl9QQUNLQUdFX0lELCBTRVJWRVJfVEVTVF9QQUNLQUdFX0lEXG59IGZyb20gJy4vdWlhdXRvbWF0b3IyJztcbmltcG9ydCB7IGZzLCB1dGlsLCBtanBlZyB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IHJldHJ5SW50ZXJ2YWwgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgY29tbWFuZHMgZnJvbSAnLi9jb21tYW5kcy9pbmRleCc7XG5pbXBvcnQgeyBERUZBVUxUX0FEQl9QT1JUIH0gZnJvbSAnYXBwaXVtLWFkYic7XG5pbXBvcnQgdWlhdXRvbWF0b3IySGVscGVycyBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHtcbiAgYW5kcm9pZEhlbHBlcnMsIGFuZHJvaWRDb21tYW5kcywgU0VUVElOR1NfSEVMUEVSX1BLR19JRFxufSBmcm9tICdhcHBpdW0tYW5kcm9pZC1kcml2ZXInO1xuaW1wb3J0IGRlc2lyZWRDYXBDb25zdHJhaW50cyBmcm9tICcuL2Rlc2lyZWQtY2Fwcyc7XG5pbXBvcnQgeyBmaW5kQVBvcnROb3RJblVzZSwgY2hlY2tQb3J0U3RhdHVzIH0gZnJvbSAncG9ydHNjYW5uZXInO1xuaW1wb3J0IG9zIGZyb20gJ29zJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgQVBLX0VYVEVOU0lPTiwgQVBLU19FWFRFTlNJT04gfSBmcm9tICcuL2V4dGVuc2lvbnMnO1xuXG5cbmNvbnN0IGhlbHBlcnMgPSBPYmplY3QuYXNzaWduKHt9LCB1aWF1dG9tYXRvcjJIZWxwZXJzLCBhbmRyb2lkSGVscGVycyk7XG5cbi8vIFRoZSByYW5nZSBvZiBwb3J0cyB3ZSBjYW4gdXNlIG9uIHRoZSBzeXN0ZW0gZm9yIGNvbW11bmljYXRpbmcgdG8gdGhlXG4vLyBVaUF1dG9tYXRvcjIgSFRUUCBzZXJ2ZXIgb24gdGhlIGRldmljZVxuY29uc3QgREVWSUNFX1BPUlRfUkFOR0UgPSBbODIwMCwgODI5OV07XG5cbi8vIFRoZSBndWFyZCBpcyBuZWVkZWQgdG8gYXZvaWQgZHluYW1pYyBzeXN0ZW0gcG9ydCBhbGxvY2F0aW9uIGNvbmZsaWN0cyBmb3Jcbi8vIHBhcmFsbGVsIGRyaXZlciBzZXNzaW9uc1xuY29uc3QgREVWSUNFX1BPUlRfQUxMT0NBVElPTl9HVUFSRCA9IHV0aWwuZ2V0TG9ja0ZpbGVHdWFyZChcbiAgcGF0aC5yZXNvbHZlKG9zLnRtcGRpcigpLCAndWlhMl9kZXZpY2VfcG9ydF9ndWFyZCcpLFxuICB7dGltZW91dDogMjUsIHRyeVJlY292ZXJ5OiB0cnVlfVxuKTtcblxuLy8gVGhpcyBpcyB0aGUgcG9ydCB0aGF0IFVpQXV0b21hdG9yMiBsaXN0ZW5zIHRvIG9uIHRoZSBkZXZpY2UuIFdlIHdpbGwgZm9yd2FyZFxuLy8gb25lIG9mIHRoZSBwb3J0cyBhYm92ZSBvbiB0aGUgc3lzdGVtIHRvIHRoaXMgcG9ydCBvbiB0aGUgZGV2aWNlLlxuY29uc3QgREVWSUNFX1BPUlQgPSA2NzkwO1xuLy8gVGhpcyBpcyB0aGUgcG9ydCB0aGF0IHRoZSBVaUF1dG9tYXRvcjIgTUpQRUcgc2VydmVyIGxpc3RlbnMgdG8gb24gdGhlIGRldmljZS5cbi8vIFdlIHdpbGwgZm9yd2FyZCBvbmUgb2YgdGhlIHBvcnRzIGFib3ZlIG9uIHRoZSBzeXN0ZW0gdG8gdGhpcyBwb3J0IG9uIHRoZVxuLy8gZGV2aWNlLlxuY29uc3QgTUpQRUdfU0VSVkVSX0RFVklDRV9QT1JUID0gNzgxMDtcblxuY29uc3QgTE9DQUxIT1NUX0lQNCA9ICcxMjcuMC4wLjEnO1xuXG4vLyBOT19QUk9YWSBjb250YWlucyB0aGUgcGF0aHMgdGhhdCB3ZSBuZXZlciB3YW50IHRvIHByb3h5IHRvIFVpQXV0b21hdG9yMiBzZXJ2ZXIuXG4vLyBUT0RPOiAgQWRkIHRoZSBsaXN0IG9mIHBhdGhzIHRoYXQgd2UgbmV2ZXIgd2FudCB0byBwcm94eSB0byBVaUF1dG9tYXRvcjIgc2VydmVyLlxuLy8gVE9ETzogTmVlZCB0byBzZWdyZWdhdGUgdGhlIHBhdGhzIGJldHRlciB3YXkgdXNpbmcgcmVndWxhciBleHByZXNzaW9ucyB3aGVyZXZlciBhcHBsaWNhYmxlLlxuLy8gKE5vdCBzZWdyZWdhdGluZyByaWdodCBhd2F5IGJlY2F1c2UgbW9yZSBwYXRocyB0byBiZSBhZGRlZCBpbiB0aGUgTk9fUFJPWFkgbGlzdClcbmNvbnN0IE5PX1BST1hZID0gW1xuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi8oPyEuKi8pJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hbGVydF9bXi9dKycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYWxlcnQvW14vXSsnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9bXi9dKy9jdXJyZW50X2FjdGl2aXR5JyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vW14vXSsvY3VycmVudF9wYWNrYWdlJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vYXBwL1teL10rJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL1teL10rJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vc2V0dGluZ3MnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2NvbnRleHQnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2NvbnRleHRzJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9lbGVtZW50L1teL10rL2F0dHJpYnV0ZScpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZWxlbWVudC9bXi9dKy9kaXNwbGF5ZWQnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2VsZW1lbnQvW14vXSsvZW5hYmxlZCcpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZWxlbWVudC9bXi9dKy9sb2NhdGlvbl9pbl92aWV3JyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9lbGVtZW50L1teL10rL25hbWUnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2VsZW1lbnQvW14vXSsvc2NyZWVuc2hvdCcpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZWxlbWVudC9bXi9dKy9zZWxlY3RlZCcpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvaW1lL1teL10rJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9sb2NhdGlvbicpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbmV0d29ya19jb25uZWN0aW9uJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9zY3JlZW5zaG90JyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy90aW1lb3V0cycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdXJsJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvW14vXStfYWxlcnQkJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYWN0aW9ucycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FsZXJ0L1teL10rJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwL1teL10nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vW14vXSsvc3RhcnRfYWN0aXZpdHknKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vYXBwL1teL10rJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2NvbXBhcmVfaW1hZ2VzJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS8oPyFzZXRfY2xpcGJvYXJkKVteL10rJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2VsZW1lbnQvW14vXSsvcmVwbGFjZV92YWx1ZScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9lbGVtZW50L1teL10rL3ZhbHVlJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2dldFBlcmZvcm1hbmNlRGF0YScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9wZXJmb3JtYW5jZURhdGEvdHlwZXMnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vc2V0dGluZ3MnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZXhlY3V0ZV9kcml2ZXInKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vc3RhcnRfcmVjb3JkaW5nX3NjcmVlbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9zdG9wX3JlY29yZGluZ19zY3JlZW4nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vLipldmVudCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2NvbnRleHQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9lbGVtZW50JyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvaW1lL1teL10rJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsva2V5cycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2xvY2F0aW9uJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbmV0d29ya19jb25uZWN0aW9uJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdGltZW91dHMnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy90b3VjaC9tdWx0aS9wZXJmb3JtJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdG91Y2gvcGVyZm9ybScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3VybCcpXSxcblxuICAvLyBNSlNPTldQIGNvbW1hbmRzXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2xvZy90eXBlcycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2V4ZWN1dGUnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlX2FzeW5jJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbG9nJyldLFxuICAvLyBXM0MgY29tbWFuZHNcbiAgLy8gRm9yIFNlbGVuaXVtIHY0IChXM0MgZG9lcyBub3QgaGF2ZSB0aGlzIHJvdXRlKVxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9zZS9sb2cvdHlwZXMnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3dpbmRvdy9yZWN0JyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZXhlY3V0ZS9hc3luYycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2V4ZWN1dGUvc3luYycpXSxcbiAgLy8gRm9yIFNlbGVuaXVtIHY0IChXM0MgZG9lcyBub3QgaGF2ZSB0aGlzIHJvdXRlKVxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvc2UvbG9nJyldLFxuXTtcblxuLy8gVGhpcyBpcyBhIHNldCBvZiBtZXRob2RzIGFuZCBwYXRocyB0aGF0IHdlIG5ldmVyIHdhbnQgdG8gcHJveHkgdG8gQ2hyb21lZHJpdmVyLlxuY29uc3QgQ0hST01FX05PX1BST1hZID0gW1xuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0nKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2NvbnRleHQnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2VsZW1lbnQvW14vXSsvcmVjdCcpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvb3JpZW50YXRpb24nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0JyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvb3JpZW50YXRpb24nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy90b3VjaC9tdWx0aS9wZXJmb3JtJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdG91Y2gvcGVyZm9ybScpXSxcblxuICAvLyB0aGlzIGlzIG5lZWRlZCB0byBtYWtlIHRoZSBtb2JpbGU6IGNvbW1hbmRzIHdvcmtpbmcgaW4gd2ViIGNvbnRleHRcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2V4ZWN1dGUkJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZXhlY3V0ZS9zeW5jJyldLFxuXG4gIC8vIE1KU09OV1AgY29tbWFuZHNcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbG9nL3R5cGVzJCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2xvZyQnKV0sXG4gIC8vIFczQyBjb21tYW5kc1xuICAvLyBGb3IgU2VsZW5pdW0gdjQgKFczQyBkb2VzIG5vdCBoYXZlIHRoaXMgcm91dGUpXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3NlL2xvZy90eXBlcyQnKV0sXG4gIC8vIEZvciBTZWxlbml1bSB2NCAoVzNDIGRvZXMgbm90IGhhdmUgdGhpcyByb3V0ZSlcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3NlL2xvZyQnKV0sXG5dO1xuXG5jb25zdCBNRU1PSVpFRF9GVU5DVElPTlMgPSBbXG4gICdnZXRTdGF0dXNCYXJIZWlnaHQnLFxuICAnZ2V0RGV2aWNlUGl4ZWxSYXRpbycsXG5dO1xuXG5jbGFzcyBBbmRyb2lkVWlhdXRvbWF0b3IyRHJpdmVyIGV4dGVuZHMgQmFzZURyaXZlciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzID0ge30sIHNob3VsZFZhbGlkYXRlQ2FwcyA9IHRydWUpIHtcbiAgICAvLyBgc2hlbGxgIG92ZXJ3cml0ZXMgYWRiLnNoZWxsLCBzbyByZW1vdmVcbiAgICBkZWxldGUgb3B0cy5zaGVsbDtcblxuICAgIHN1cGVyKG9wdHMsIHNob3VsZFZhbGlkYXRlQ2Fwcyk7XG4gICAgdGhpcy5sb2NhdG9yU3RyYXRlZ2llcyA9IFtcbiAgICAgICd4cGF0aCcsXG4gICAgICAnaWQnLFxuICAgICAgJ2NsYXNzIG5hbWUnLFxuICAgICAgJ2FjY2Vzc2liaWxpdHkgaWQnLFxuICAgICAgJ2NzcyBzZWxlY3RvcicsXG4gICAgICAnLWFuZHJvaWQgdWlhdXRvbWF0b3InXG4gICAgXTtcbiAgICB0aGlzLmRlc2lyZWRDYXBDb25zdHJhaW50cyA9IGRlc2lyZWRDYXBDb25zdHJhaW50cztcbiAgICB0aGlzLnVpYXV0b21hdG9yMiA9IG51bGw7XG4gICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuZGVmYXVsdElNRSA9IG51bGw7XG4gICAgdGhpcy5qd3BQcm94eUF2b2lkID0gTk9fUFJPWFk7XG4gICAgdGhpcy5hcGtTdHJpbmdzID0ge307IC8vIG1hcCBvZiBsYW5ndWFnZSAtPiBzdHJpbmdzIG9ialxuXG4gICAgdGhpcy5zZXR0aW5ncyA9IG5ldyBEZXZpY2VTZXR0aW5ncyh7aWdub3JlVW5pbXBvcnRhbnRWaWV3czogZmFsc2UsIGFsbG93SW52aXNpYmxlRWxlbWVudHM6IGZhbHNlfSxcbiAgICAgICAgdGhpcy5vblNldHRpbmdzVXBkYXRlLmJpbmQodGhpcykpO1xuICAgIC8vIGhhbmRsZSB3ZWJ2aWV3IG1lY2hhbmljcyBmcm9tIEFuZHJvaWREcml2ZXJcbiAgICB0aGlzLmNocm9tZWRyaXZlciA9IG51bGw7XG4gICAgdGhpcy5zZXNzaW9uQ2hyb21lZHJpdmVycyA9IHt9O1xuXG4gICAgLy8gbWVtb2l6ZSBmdW5jdGlvbnMgaGVyZSwgc28gdGhhdCB0aGV5IGFyZSBkb25lIG9uIGEgcGVyLWluc3RhbmNlIGJhc2lzXG4gICAgZm9yIChjb25zdCBmbiBvZiBNRU1PSVpFRF9GVU5DVElPTlMpIHtcbiAgICAgIHRoaXNbZm5dID0gXy5tZW1vaXplKHRoaXNbZm5dKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZURlc2lyZWRDYXBzIChjYXBzKSB7XG4gICAgcmV0dXJuIHN1cGVyLnZhbGlkYXRlRGVzaXJlZENhcHMoY2FwcykgJiYgYW5kcm9pZEhlbHBlcnMudmFsaWRhdGVEZXNpcmVkQ2FwcyhjYXBzKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVNlc3Npb24gKC4uLmFyZ3MpIHtcbiAgICB0cnkge1xuICAgICAgLy8gVE9ETyBoYW5kbGUgb3RoZXJTZXNzaW9uRGF0YSBmb3IgbXVsdGlwbGUgc2Vzc2lvbnNcbiAgICAgIGxldCBbc2Vzc2lvbklkLCBjYXBzXSA9IGF3YWl0IHN1cGVyLmNyZWF0ZVNlc3Npb24oLi4uYXJncyk7XG5cbiAgICAgIGxldCBzZXJ2ZXJEZXRhaWxzID0ge1xuICAgICAgICBwbGF0Zm9ybTogJ0xJTlVYJyxcbiAgICAgICAgd2ViU3RvcmFnZUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICB0YWtlc1NjcmVlbnNob3Q6IHRydWUsXG4gICAgICAgIGphdmFzY3JpcHRFbmFibGVkOiB0cnVlLFxuICAgICAgICBkYXRhYmFzZUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICBuZXR3b3JrQ29ubmVjdGlvbkVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGxvY2F0aW9uQ29udGV4dEVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICB3YXJuaW5nczoge30sXG4gICAgICAgIGRlc2lyZWQ6IHRoaXMuY2FwcyxcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuY2FwcyA9IE9iamVjdC5hc3NpZ24oc2VydmVyRGV0YWlscywgdGhpcy5jYXBzKTtcblxuICAgICAgdGhpcy5jdXJDb250ZXh0ID0gdGhpcy5kZWZhdWx0Q29udGV4dE5hbWUoKTtcblxuICAgICAgbGV0IGRlZmF1bHRPcHRzID0ge1xuICAgICAgICBmdWxsUmVzZXQ6IGZhbHNlLFxuICAgICAgICBhdXRvTGF1bmNoOiB0cnVlLFxuICAgICAgICBhZGJQb3J0OiBERUZBVUxUX0FEQl9QT1JULFxuICAgICAgICBhbmRyb2lkSW5zdGFsbFRpbWVvdXQ6IDkwMDAwXG4gICAgICB9O1xuICAgICAgXy5kZWZhdWx0cyh0aGlzLm9wdHMsIGRlZmF1bHRPcHRzKTtcblxuICAgICAgaWYgKHRoaXMuaXNDaHJvbWVTZXNzaW9uKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oXCJXZSdyZSBnb2luZyB0byBydW4gYSBDaHJvbWUtYmFzZWQgc2Vzc2lvblwiKTtcbiAgICAgICAgbGV0IHtwa2csIGFjdGl2aXR5fSA9IGhlbHBlcnMuZ2V0Q2hyb21lUGtnKHRoaXMub3B0cy5icm93c2VyTmFtZSk7XG4gICAgICAgIHRoaXMub3B0cy5hcHBQYWNrYWdlID0gdGhpcy5jYXBzLmFwcFBhY2thZ2UgPSBwa2c7XG4gICAgICAgIHRoaXMub3B0cy5hcHBBY3Rpdml0eSA9IHRoaXMuY2Fwcy5hcHBBY3Rpdml0eSA9IGFjdGl2aXR5O1xuICAgICAgICB0aGlzLmxvZy5pbmZvKGBDaHJvbWUtdHlwZSBwYWNrYWdlIGFuZCBhY3Rpdml0eSBhcmUgJHtwa2d9IGFuZCAke2FjdGl2aXR5fWApO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcHRzLnJlYm9vdCkge1xuICAgICAgICB0aGlzLnNldEF2ZEZyb21DYXBhYmlsaXRpZXMoY2Fwcyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9wdHMuYXBwKSB7XG4gICAgICAgIC8vIGZpbmQgYW5kIGNvcHksIG9yIGRvd25sb2FkIGFuZCB1bnppcCBhbiBhcHAgdXJsIG9yIHBhdGhcbiAgICAgICAgdGhpcy5vcHRzLmFwcCA9IGF3YWl0IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAodGhpcy5vcHRzLmFwcCwgW0FQS19FWFRFTlNJT04sIEFQS1NfRVhURU5TSU9OXSk7XG4gICAgICAgIGF3YWl0IHRoaXMuY2hlY2tBcHBQcmVzZW50KCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMub3B0cy5hcHBQYWNrYWdlKSB7XG4gICAgICAgIC8vIHRoZSBhcHAgaXNuJ3QgYW4gYWN0dWFsIGFwcCBmaWxlIGJ1dCByYXRoZXIgc29tZXRoaW5nIHdlIHdhbnQgdG9cbiAgICAgICAgLy8gYXNzdW1lIGlzIG9uIHRoZSBkZXZpY2UgYW5kIGp1c3QgbGF1bmNoIHZpYSB0aGUgYXBwUGFja2FnZVxuICAgICAgICB0aGlzLmxvZy5pbmZvKGBTdGFydGluZyAnJHt0aGlzLm9wdHMuYXBwUGFja2FnZX0nIGRpcmVjdGx5IG9uIHRoZSBkZXZpY2VgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYE5laXRoZXIgJ2FwcCcgbm9yICdhcHBQYWNrYWdlJyB3YXMgc2V0LiBTdGFydGluZyBVaUF1dG9tYXRvcjIgYCArXG4gICAgICAgICAgJ3dpdGhvdXQgdGhlIHRhcmdldCBhcHBsaWNhdGlvbicpO1xuICAgICAgfVxuICAgICAgdGhpcy5vcHRzLmFkYlBvcnQgPSB0aGlzLm9wdHMuYWRiUG9ydCB8fCBERUZBVUxUX0FEQl9QT1JUO1xuXG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0VWlBdXRvbWF0b3IyU2Vzc2lvbigpO1xuICAgICAgYXdhaXQgdGhpcy5maWxsRGV2aWNlRGV0YWlscygpO1xuICAgICAgaWYgKHRoaXMub3B0cy5tanBlZ1NjcmVlbnNob3RVcmwpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgU3RhcnRpbmcgTUpQRUcgc3RyZWFtIHJlYWRpbmcgVVJMOiAnJHt0aGlzLm9wdHMubWpwZWdTY3JlZW5zaG90VXJsfSdgKTtcbiAgICAgICAgdGhpcy5tanBlZ1N0cmVhbSA9IG5ldyBtanBlZy5NSnBlZ1N0cmVhbSh0aGlzLm9wdHMubWpwZWdTY3JlZW5zaG90VXJsKTtcbiAgICAgICAgYXdhaXQgdGhpcy5tanBlZ1N0cmVhbS5zdGFydCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFtzZXNzaW9uSWQsIHRoaXMuY2Fwc107XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYXdhaXQgdGhpcy5kZWxldGVTZXNzaW9uKCk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZpbGxEZXZpY2VEZXRhaWxzICgpIHtcbiAgICB0aGlzLmNhcHMucGl4ZWxSYXRpbyA9IGF3YWl0IHRoaXMuZ2V0RGV2aWNlUGl4ZWxSYXRpbygpO1xuICAgIHRoaXMuY2Fwcy5zdGF0QmFySGVpZ2h0ID0gYXdhaXQgdGhpcy5nZXRTdGF0dXNCYXJIZWlnaHQoKTtcbiAgICB0aGlzLmNhcHMudmlld3BvcnRSZWN0ID0gYXdhaXQgdGhpcy5nZXRWaWV3UG9ydFJlY3QoKTtcbiAgfVxuXG4gIGdldCBkcml2ZXJEYXRhICgpIHtcbiAgICAvLyBUT0RPIGZpbGwgb3V0IHJlc291cmNlIGluZm8gaGVyZVxuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGFzeW5jIGdldFNlc3Npb24gKCkge1xuICAgIGxldCBzZXNzaW9uRGF0YSA9IGF3YWl0IHN1cGVyLmdldFNlc3Npb24oKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZygnR2V0dGluZyBzZXNzaW9uIGRldGFpbHMgZnJvbSBzZXJ2ZXIgdG8gbWl4IGluJyk7XG4gICAgbGV0IHVpYTJEYXRhID0gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvJywgJ0dFVCcsIHt9KTtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc2Vzc2lvbkRhdGEsIHVpYTJEYXRhKTtcbiAgfVxuXG4gIGlzRW11bGF0b3IgKCkge1xuICAgIHJldHVybiBoZWxwZXJzLmlzRW11bGF0b3IodGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gIH1cblxuICBzZXRBdmRGcm9tQ2FwYWJpbGl0aWVzIChjYXBzKSB7XG4gICAgaWYgKHRoaXMub3B0cy5hdmQpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oJ2F2ZCBuYW1lIGRlZmluZWQsIGlnbm9yaW5nIGRldmljZSBuYW1lIGFuZCBwbGF0Zm9ybSB2ZXJzaW9uJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghY2Fwcy5kZXZpY2VOYW1lKSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ2F2ZCBvciBkZXZpY2VOYW1lIHNob3VsZCBiZSBzcGVjaWZpZWQgd2hlbiByZWJvb3Qgb3B0aW9uIGlzIGVuYWJsZXMnKTtcbiAgICAgIH1cbiAgICAgIGlmICghY2Fwcy5wbGF0Zm9ybVZlcnNpb24pIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnYXZkIG9yIHBsYXRmb3JtVmVyc2lvbiBzaG91bGQgYmUgc3BlY2lmaWVkIHdoZW4gcmVib290IG9wdGlvbiBpcyBlbmFibGVkJyk7XG4gICAgICB9XG4gICAgICBsZXQgYXZkRGV2aWNlID0gY2Fwcy5kZXZpY2VOYW1lLnJlcGxhY2UoL1teYS16QS1aMC05Xy5dL2csICctJyk7XG4gICAgICB0aGlzLm9wdHMuYXZkID0gYCR7YXZkRGV2aWNlfV9fJHtjYXBzLnBsYXRmb3JtVmVyc2lvbn1gO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGFsbG9jYXRlU3lzdGVtUG9ydCAoKSB7XG4gICAgY29uc3QgZm9yd2FyZFBvcnQgPSBhc3luYyAobG9jYWxQb3J0KSA9PiB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgRm9yd2FyZGluZyBVaUF1dG9tYXRvcjIgU2VydmVyIHBvcnQgJHtERVZJQ0VfUE9SVH0gdG8gbG9jYWwgcG9ydCAke2xvY2FsUG9ydH1gKTtcbiAgICAgIGlmICgoYXdhaXQgY2hlY2tQb3J0U3RhdHVzKGxvY2FsUG9ydCwgTE9DQUxIT1NUX0lQNCkpID09PSAnb3BlbicpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgVWlBdXRvbWF0b3IyIFNlcnZlciBjYW5ub3Qgc3RhcnQgYmVjYXVzZSB0aGUgbG9jYWwgcG9ydCAjJHtsb2NhbFBvcnR9IGlzIGJ1c3kuIGAgK1xuICAgICAgICAgIGBNYWtlIHN1cmUgdGhlIHBvcnQgeW91IHByb3ZpZGUgdmlhICdzeXN0ZW1Qb3J0JyBjYXBhYmlsaXR5IGlzIG5vdCBvY2N1cGllZC4gYCArXG4gICAgICAgICAgYFRoaXMgc2l0dWF0aW9uIG1pZ2h0IG9mdGVuIGJlIGEgcmVzdWx0IG9mIGFuIGluYWNjdXJhdGUgc2Vzc2lvbnMgbWFuYWdlbWVudCwgZS5nLiBgICtcbiAgICAgICAgICBgb2xkIGF1dG9tYXRpb24gc2Vzc2lvbnMgb24gdGhlIHNhbWUgZGV2aWNlIG11c3QgYWx3YXlzIGJlIGNsb3NlZCBiZWZvcmUgc3RhcnRpbmcgbmV3IG9uZXMuYCk7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLmFkYi5mb3J3YXJkUG9ydChsb2NhbFBvcnQsIERFVklDRV9QT1JUKTtcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMub3B0cy5zeXN0ZW1Qb3J0KSB7XG4gICAgICB0aGlzLl9oYXNTeXN0ZW1Qb3J0SW5DYXBzID0gdHJ1ZTtcbiAgICAgIHJldHVybiBhd2FpdCBmb3J3YXJkUG9ydCh0aGlzLm9wdHMuc3lzdGVtUG9ydCk7XG4gICAgfVxuXG4gICAgYXdhaXQgREVWSUNFX1BPUlRfQUxMT0NBVElPTl9HVUFSRChhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBbc3RhcnRQb3J0LCBlbmRQb3J0XSA9IERFVklDRV9QT1JUX1JBTkdFO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5vcHRzLnN5c3RlbVBvcnQgPSBhd2FpdCBmaW5kQVBvcnROb3RJblVzZShzdGFydFBvcnQsIGVuZFBvcnQpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KFxuICAgICAgICAgIGBDYW5ub3QgZmluZCBhbnkgZnJlZSBwb3J0IGluIHJhbmdlICR7c3RhcnRQb3J0fS4uJHtlbmRQb3J0fX0uIGAgK1xuICAgICAgICAgIGBQbGVhc2Ugc2V0IHRoZSBhdmFpbGFibGUgcG9ydCBudW1iZXIgYnkgcHJvdmlkaW5nIHRoZSBzeXN0ZW1Qb3J0IGNhcGFiaWxpdHkgb3IgYCArXG4gICAgICAgICAgYGRvdWJsZSBjaGVjayB0aGUgcHJvY2Vzc2VzIHRoYXQgYXJlIGxvY2tpbmcgcG9ydHMgd2l0aGluIHRoaXMgcmFuZ2UgYW5kIHRlcm1pbmF0ZSBgICtcbiAgICAgICAgICBgdGhlc2Ugd2hpY2ggYXJlIG5vdCBuZWVkZWQgYW55bW9yZWApO1xuICAgICAgfVxuICAgICAgYXdhaXQgZm9yd2FyZFBvcnQodGhpcy5vcHRzLnN5c3RlbVBvcnQpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgcmVsZWFzZVN5c3RlbVBvcnQgKCkge1xuICAgIGlmICghdGhpcy5vcHRzLnN5c3RlbVBvcnQgfHwgIXRoaXMuYWRiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2hhc1N5c3RlbVBvcnRJbkNhcHMpIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnJlbW92ZVBvcnRGb3J3YXJkKHRoaXMub3B0cy5zeXN0ZW1Qb3J0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgREVWSUNFX1BPUlRfQUxMT0NBVElPTl9HVUFSRChhc3luYyAoKSA9PiBhd2FpdCB0aGlzLmFkYi5yZW1vdmVQb3J0Rm9yd2FyZCh0aGlzLm9wdHMuc3lzdGVtUG9ydCkpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGFsbG9jYXRlTWpwZWdTZXJ2ZXJQb3J0ICgpIHtcbiAgICBpZiAodGhpcy5vcHRzLm1qcGVnU2VydmVyUG9ydCkge1xuICAgICAgYXdhaXQgdGhpcy5hZGIuZm9yd2FyZFBvcnQodGhpcy5vcHRzLm1qcGVnU2VydmVyUG9ydCwgTUpQRUdfU0VSVkVSX0RFVklDRV9QT1JUKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyByZWxlYXNlTWpwZWdTZXJ2ZXJQb3J0ICgpIHtcbiAgICBpZiAodGhpcy5vcHRzLm1qcGVnU2VydmVyUG9ydCkge1xuICAgICAgYXdhaXQgdGhpcy5hZGIucmVtb3ZlUG9ydEZvcndhcmQodGhpcy5vcHRzLm1qcGVnU2VydmVyUG9ydCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3RhcnRVaUF1dG9tYXRvcjJTZXNzaW9uICgpIHtcbiAgICAvLyBnZXQgZGV2aWNlIHVkaWQgZm9yIHRoaXMgc2Vzc2lvblxuICAgIGxldCB7dWRpZCwgZW1Qb3J0fSA9IGF3YWl0IGhlbHBlcnMuZ2V0RGV2aWNlSW5mb0Zyb21DYXBzKHRoaXMub3B0cyk7XG4gICAgdGhpcy5vcHRzLnVkaWQgPSB1ZGlkO1xuICAgIHRoaXMub3B0cy5lbVBvcnQgPSBlbVBvcnQ7XG5cbiAgICAvLyBub3cgdGhhdCB3ZSBrbm93IG91ciBqYXZhIHZlcnNpb24gYW5kIGRldmljZSBpbmZvLCB3ZSBjYW4gY3JlYXRlIG91clxuICAgIC8vIEFEQiBpbnN0YW5jZVxuICAgIHRoaXMuYWRiID0gYXdhaXQgYW5kcm9pZEhlbHBlcnMuY3JlYXRlQURCKHRoaXMub3B0cyk7XG5cbiAgICBjb25zdCBhcGlMZXZlbCA9IGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCk7XG5cbiAgICBpZiAoYXBpTGV2ZWwgPCAyMSkge1xuICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnVUlBdXRvbWF0b3IyIGlzIG9ubHkgc3VwcG9ydGVkIHNpbmNlIEFuZHJvaWQgNS4wIChMb2xsaXBvcCkuICcgK1xuICAgICAgICAnWW91IGNvdWxkIHN0aWxsIHVzZSBvdGhlciBzdXBwb3J0ZWQgYmFja2VuZHMgaW4gb3JkZXIgdG8gYXV0b21hdGUgb2xkZXIgQW5kcm9pZCB2ZXJzaW9ucy4nKTtcbiAgICB9XG5cbiAgICBpZiAoYXBpTGV2ZWwgPj0gMjgpIHsgLy8gQW5kcm9pZCBQXG4gICAgICB0aGlzLmxvZy5pbmZvKCdSZWxheGluZyBoaWRkZW4gYXBpIHBvbGljeScpO1xuICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0SGlkZGVuQXBpUG9saWN5KCcxJywgISF0aGlzLm9wdHMuaWdub3JlSGlkZGVuQXBpUG9saWN5RXJyb3IpO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHdlIGhhdmUgdG8gZW5hYmxlL2Rpc2FibGUgZ3BzIGJlZm9yZSBydW5uaW5nIHRoZSBhcHBsaWNhdGlvblxuICAgIGlmICh1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy5ncHNFbmFibGVkKSkge1xuICAgICAgaWYgKHRoaXMuaXNFbXVsYXRvcigpKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYFRyeWluZyB0byAke3RoaXMub3B0cy5ncHNFbmFibGVkID8gJ2VuYWJsZScgOiAnZGlzYWJsZSd9IGdwcyBsb2NhdGlvbiBwcm92aWRlcmApO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi50b2dnbGVHUFNMb2NhdGlvblByb3ZpZGVyKHRoaXMub3B0cy5ncHNFbmFibGVkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYFNvcnJ5ISAnZ3BzRW5hYmxlZCcgY2FwYWJpbGl0eSBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgZW11bGF0b3JzYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZ2V0IGFwcFBhY2thZ2UgZXQgYWwgZnJvbSBtYW5pZmVzdCBpZiBuZWNlc3NhcnlcbiAgICBjb25zdCBhcHBJbmZvID0gYXdhaXQgaGVscGVycy5nZXRMYXVuY2hJbmZvKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgIC8vIGFuZCBnZXQgaXQgb250byBvdXIgJ29wdHMnIG9iamVjdCBzbyB3ZSB1c2UgaXQgZnJvbSBub3cgb25cbiAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0cywgYXBwSW5mbyB8fCB7fSk7XG5cbiAgICAvLyBzZXQgYWN0dWFsIGRldmljZSBuYW1lLCB1ZGlkLCBwbGF0Zm9ybSB2ZXJzaW9uLCBzY3JlZW4gc2l6ZSwgc2NyZWVuIGRlbnNpdHksIG1vZGVsIGFuZCBtYW51ZmFjdHVyZXIgZGV0YWlsc1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VOYW1lID0gdGhpcy5hZGIuY3VyRGV2aWNlSWQ7XG4gICAgdGhpcy5jYXBzLmRldmljZVVESUQgPSB0aGlzLm9wdHMudWRpZDtcblxuICAgIC8vIHN0YXJ0IGFuIGF2ZCwgc2V0IHRoZSBsYW5ndWFnZS9sb2NhbGUsIHBpY2sgYW4gZW11bGF0b3IsIGV0Yy4uLlxuICAgIC8vIFRPRE8gd2l0aCBtdWx0aXBsZSBkZXZpY2VzIHdlJ2xsIG5lZWQgdG8gcGFyYW1ldGVyaXplIHRoaXNcbiAgICB0aGlzLmRlZmF1bHRJTUUgPSBhd2FpdCBoZWxwZXJzLmluaXREZXZpY2UodGhpcy5hZGIsIHRoaXMub3B0cyk7XG5cbiAgICAvLyBQcmVwYXJlIHRoZSBkZXZpY2UgYnkgZm9yd2FyZGluZyB0aGUgVWlBdXRvbWF0b3IyIHBvcnRcbiAgICAvLyBUaGlzIGNhbGwgbXV0YXRlcyB0aGlzLm9wdHMuc3lzdGVtUG9ydCBpZiBpdCBpcyBub3Qgc2V0IGV4cGxpY2l0bHlcbiAgICBhd2FpdCB0aGlzLmFsbG9jYXRlU3lzdGVtUG9ydCgpO1xuXG4gICAgLy8gUHJlcGFyZSB0aGUgZGV2aWNlIGJ5IGZvcndhcmRpbmcgdGhlIFVpQXV0b21hdG9yMiBNSlBFRyBzZXJ2ZXIgcG9ydCAoaWZcbiAgICAvLyBhcHBsaWNhYmxlKVxuICAgIGF3YWl0IHRoaXMuYWxsb2NhdGVNanBlZ1NlcnZlclBvcnQoKTtcblxuICAgIC8vIHNldCB1cCB0aGUgbW9kaWZpZWQgVWlBdXRvbWF0b3IyIHNlcnZlciBldGNcbiAgICBhd2FpdCB0aGlzLmluaXRVaUF1dG9tYXRvcjJTZXJ2ZXIoKTtcblxuICAgIC8vIFNob3VsZCBiZSBhZnRlciBpbnN0YWxsaW5nIGlvLmFwcGl1bS5zZXR0aW5ncyBpbiBoZWxwZXJzLmluaXREZXZpY2VcbiAgICBpZiAodGhpcy5vcHRzLmRpc2FibGVXaW5kb3dBbmltYXRpb24gJiYgKGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCkgPCAyNikpIHsgLy8gQVBJIGxldmVsIDI2IGlzIEFuZHJvaWQgOC4wLlxuICAgICAgLy8gR3JhbnRpbmcgYW5kcm9pZC5wZXJtaXNzaW9uLlNFVF9BTklNQVRJT05fU0NBTEUgaXMgbmVjZXNzYXJ5IHRvIGhhbmRsZSBhbmltYXRpb25zIHVuZGVyIEFQSSBsZXZlbCAyNlxuICAgICAgLy8gUmVhZCBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9wdWxsLzExNjQwI2lzc3VlY29tbWVudC00MzgyNjA0NzdcbiAgICAgIC8vIGAtLW5vLXdpbmRvdy1hbmltYXRpb25gIHdvcmtzIG92ZXIgQW5kcm9pZCA4IHRvIGRpc2FibGUgYWxsIG9mIGFuaW1hdGlvbnNcbiAgICAgIGlmIChhd2FpdCB0aGlzLmFkYi5pc0FuaW1hdGlvbk9uKCkpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbygnRGlzYWJsaW5nIGFuaW1hdGlvbiB2aWEgaW8uYXBwaXVtLnNldHRpbmdzJyk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnNldEFuaW1hdGlvblN0YXRlKGZhbHNlKTtcbiAgICAgICAgdGhpcy5fd2FzV2luZG93QW5pbWF0aW9uRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbygnV2luZG93IGFuaW1hdGlvbiBpcyBhbHJlYWR5IGRpc2FibGVkJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gc2V0IHVwIGFwcCB1bmRlciB0ZXN0XG4gICAgLy8gcHJlcGFyZSBvdXIgYWN0dWFsIEFVVCwgZ2V0IGl0IG9uIHRoZSBkZXZpY2UsIGV0Yy4uLlxuICAgIGF3YWl0IHRoaXMuaW5pdEFVVCgpO1xuXG4gICAgLy8gQWRkaW5nIEFVVCBwYWNrYWdlIG5hbWUgaW4gdGhlIGNhcGFiaWxpdGllcyBpZiBwYWNrYWdlIG5hbWUgbm90IGV4aXN0IGluIGNhcHNcbiAgICBpZiAoIXRoaXMuY2Fwcy5hcHBQYWNrYWdlICYmIGFwcEluZm8pIHtcbiAgICAgIHRoaXMuY2Fwcy5hcHBQYWNrYWdlID0gYXBwSW5mby5hcHBQYWNrYWdlO1xuICAgIH1cblxuICAgIC8vIGxhdW5jaCBVaUF1dG9tYXRvcjIgYW5kIHdhaXQgdGlsbCBpdHMgb25saW5lIGFuZCB3ZSBoYXZlIGEgc2Vzc2lvblxuICAgIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLnN0YXJ0U2Vzc2lvbih0aGlzLmNhcHMpO1xuXG4gICAgYXdhaXQgdGhpcy5hZGREZXZpY2VJbmZvVG9DYXBzKCk7XG5cbiAgICAvLyBVbmxvY2sgdGhlIGRldmljZSBhZnRlciB0aGUgc2Vzc2lvbiBpcyBzdGFydGVkLlxuICAgIGlmICghdGhpcy5vcHRzLnNraXBVbmxvY2spIHtcbiAgICAgIC8vIHVubG9jayB0aGUgZGV2aWNlIHRvIHByZXBhcmUgaXQgZm9yIHRlc3RpbmdcbiAgICAgIGF3YWl0IGhlbHBlcnMudW5sb2NrKHRoaXMsIHRoaXMuYWRiLCB0aGlzLmNhcHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgJ3NraXBVbmxvY2snIGNhcGFiaWxpdHkgc2V0LCBzbyBza2lwcGluZyBkZXZpY2UgdW5sb2NrYCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNDaHJvbWVTZXNzaW9uKSB7IC8vIHN0YXJ0IGEgY2hyb21lZHJpdmVyIHNlc3Npb25cbiAgICAgIGF3YWl0IHRoaXMuc3RhcnRDaHJvbWVTZXNzaW9uKHRoaXMpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRzLmF1dG9MYXVuY2ggJiYgdGhpcy5vcHRzLmFwcFBhY2thZ2UpIHtcbiAgICAgIGF3YWl0IHRoaXMuZW5zdXJlQXBwU3RhcnRzKCk7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIGluaXRpYWwgb3JpZW50YXRpb24gaXMgcmVxdWVzdGVkLCBzZXQgaXRcbiAgICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMub3JpZW50YXRpb24pKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgU2V0dGluZyBpbml0aWFsIG9yaWVudGF0aW9uIHRvICcke3RoaXMub3B0cy5vcmllbnRhdGlvbn0nYCk7XG4gICAgICBhd2FpdCB0aGlzLnNldE9yaWVudGF0aW9uKHRoaXMub3B0cy5vcmllbnRhdGlvbik7XG4gICAgfVxuXG4gICAgLy8gaWYgd2Ugd2FudCB0byBpbW1lZGlhdGVseSBnZXQgaW50byBhIHdlYnZpZXcsIHNldCBvdXIgY29udGV4dFxuICAgIC8vIGFwcHJvcHJpYXRlbHlcbiAgICBpZiAodGhpcy5vcHRzLmF1dG9XZWJ2aWV3KSB7XG4gICAgICBjb25zdCB2aWV3TmFtZSA9IHRoaXMuZGVmYXVsdFdlYnZpZXdOYW1lKCk7XG4gICAgICBjb25zdCB0aW1lb3V0ID0gdGhpcy5vcHRzLmF1dG9XZWJ2aWV3VGltZW91dCB8fCAyMDAwO1xuICAgICAgdGhpcy5sb2cuaW5mbyhgU2V0dGluZyBhdXRvIHdlYnZpZXcgdG8gY29udGV4dCAnJHt2aWV3TmFtZX0nIHdpdGggdGltZW91dCAke3RpbWVvdXR9bXNgKTtcbiAgICAgIGF3YWl0IHJldHJ5SW50ZXJ2YWwodGltZW91dCAvIDUwMCwgNTAwLCB0aGlzLnNldENvbnRleHQuYmluZCh0aGlzKSwgdmlld05hbWUpO1xuICAgIH1cblxuICAgIC8vIG5vdyB0aGF0IGV2ZXJ5dGhpbmcgaGFzIHN0YXJ0ZWQgc3VjY2Vzc2Z1bGx5LCB0dXJuIG9uIHByb3h5aW5nIHNvIGFsbFxuICAgIC8vIHN1YnNlcXVlbnQgc2Vzc2lvbiByZXF1ZXN0cyBnbyBzdHJhaWdodCB0by9mcm9tIHVpYXV0b21hdG9yMlxuICAgIHRoaXMuandwUHJveHlBY3RpdmUgPSB0cnVlO1xuICB9XG5cbiAgYXN5bmMgYWRkRGV2aWNlSW5mb1RvQ2FwcyAoKSB7XG4gICAgY29uc3Qge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHBsYXRmb3JtVmVyc2lvbixcbiAgICAgIG1hbnVmYWN0dXJlcixcbiAgICAgIG1vZGVsLFxuICAgICAgcmVhbERpc3BsYXlTaXplLFxuICAgICAgZGlzcGxheURlbnNpdHksXG4gICAgfSA9IGF3YWl0IHRoaXMubW9iaWxlR2V0RGV2aWNlSW5mbygpO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VBcGlMZXZlbCA9IHBhcnNlSW50KGFwaVZlcnNpb24sIDEwKTtcbiAgICB0aGlzLmNhcHMucGxhdGZvcm1WZXJzaW9uID0gcGxhdGZvcm1WZXJzaW9uO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VTY3JlZW5TaXplID0gcmVhbERpc3BsYXlTaXplO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VTY3JlZW5EZW5zaXR5ID0gZGlzcGxheURlbnNpdHk7XG4gICAgdGhpcy5jYXBzLmRldmljZU1vZGVsID0gbW9kZWw7XG4gICAgdGhpcy5jYXBzLmRldmljZU1hbnVmYWN0dXJlciA9IG1hbnVmYWN0dXJlcjtcbiAgfVxuXG4gIGFzeW5jIGluaXRVaUF1dG9tYXRvcjJTZXJ2ZXIgKCkge1xuICAgIC8vIGJyb2tlbiBvdXQgZm9yIHJlYWRhYmlsaXR5XG4gICAgY29uc3QgdWlhdXRvbWF0b3IyT3B0cyA9IHtcbiAgICAgIGhvc3Q6IHRoaXMub3B0cy5yZW1vdGVBZGJIb3N0IHx8IHRoaXMub3B0cy5ob3N0IHx8IExPQ0FMSE9TVF9JUDQsXG4gICAgICBzeXN0ZW1Qb3J0OiB0aGlzLm9wdHMuc3lzdGVtUG9ydCxcbiAgICAgIGRldmljZVBvcnQ6IERFVklDRV9QT1JULFxuICAgICAgYWRiOiB0aGlzLmFkYixcbiAgICAgIGFwazogdGhpcy5vcHRzLmFwcCxcbiAgICAgIHRtcERpcjogdGhpcy5vcHRzLnRtcERpcixcbiAgICAgIGFwcFBhY2thZ2U6IHRoaXMub3B0cy5hcHBQYWNrYWdlLFxuICAgICAgYXBwQWN0aXZpdHk6IHRoaXMub3B0cy5hcHBBY3Rpdml0eSxcbiAgICAgIGRpc2FibGVXaW5kb3dBbmltYXRpb246ICEhdGhpcy5vcHRzLmRpc2FibGVXaW5kb3dBbmltYXRpb24sXG4gICAgICBkaXNhYmxlU3VwcHJlc3NBY2Nlc3NpYmlsaXR5U2VydmljZTogdGhpcy5vcHRzLmRpc2FibGVTdXBwcmVzc0FjY2Vzc2liaWxpdHlTZXJ2aWNlLFxuICAgICAgcmVhZFRpbWVvdXQ6IHRoaXMub3B0cy51aWF1dG9tYXRvcjJTZXJ2ZXJSZWFkVGltZW91dCxcbiAgICB9O1xuICAgIC8vIG5vdyB0aGF0IHdlIGhhdmUgcGFja2FnZSBhbmQgYWN0aXZpdHksIHdlIGNhbiBjcmVhdGUgYW4gaW5zdGFuY2Ugb2ZcbiAgICAvLyB1aWF1dG9tYXRvcjIgd2l0aCB0aGUgYXBwcm9wcmlhdGUgb3B0aW9uc1xuICAgIHRoaXMudWlhdXRvbWF0b3IyID0gbmV3IFVpQXV0b21hdG9yMlNlcnZlcih0aGlzLmxvZywgdWlhdXRvbWF0b3IyT3B0cyk7XG4gICAgdGhpcy5wcm94eVJlcVJlcyA9IHRoaXMudWlhdXRvbWF0b3IyLnByb3h5UmVxUmVzLmJpbmQodGhpcy51aWF1dG9tYXRvcjIpO1xuICAgIHRoaXMucHJveHlDb21tYW5kID0gdGhpcy51aWF1dG9tYXRvcjIucHJveHlDb21tYW5kLmJpbmQodGhpcy51aWF1dG9tYXRvcjIpO1xuXG4gICAgaWYgKHRoaXMub3B0cy5za2lwU2VydmVySW5zdGFsbGF0aW9uKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGAnc2tpcFNlcnZlckluc3RhbGxhdGlvbicgaXMgc2V0LiBTa2lwcGluZyBVSUF1dG9tYXRvcjIgc2VydmVyIGluc3RhbGxhdGlvbi5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuaW5zdGFsbFNlcnZlckFwayh0aGlzLm9wdHMudWlhdXRvbWF0b3IyU2VydmVySW5zdGFsbFRpbWVvdXQpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuYWRkVG9EZXZpY2VJZGxlV2hpdGVsaXN0KFxuICAgICAgICAgIFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQsIFNFUlZFUl9QQUNLQUdFX0lELCBTRVJWRVJfVEVTVF9QQUNLQUdFX0lELFxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBDYW5ub3QgYWRkIHNlcnZlciBwYWNrYWdlcyB0byB0aGUgRG96ZSB3aGl0ZWxpc3QuIE9yaWdpbmFsIGVycm9yOiBgICtcbiAgICAgICAgICAoZS5zdGRlcnIgfHwgZS5tZXNzYWdlKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaW5pdEFVVCAoKSB7XG4gICAgLy8gVW5pbnN0YWxsIGFueSB1bmluc3RhbGxPdGhlclBhY2thZ2VzIHdoaWNoIHdlcmUgc3BlY2lmaWVkIGluIGNhcHNcbiAgICBpZiAodGhpcy5vcHRzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMpIHtcbiAgICAgIGF3YWl0IGhlbHBlcnMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcyhcbiAgICAgICAgdGhpcy5hZGIsXG4gICAgICAgIGhlbHBlcnMucGFyc2VBcnJheSh0aGlzLm9wdHMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcyksXG4gICAgICAgIFtTRVRUSU5HU19IRUxQRVJfUEtHX0lELCBTRVJWRVJfUEFDS0FHRV9JRCwgU0VSVkVSX1RFU1RfUEFDS0FHRV9JRF1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gSW5zdGFsbCBhbnkgXCJvdGhlckFwcHNcIiB0aGF0IHdlcmUgc3BlY2lmaWVkIGluIGNhcHNcbiAgICBpZiAodGhpcy5vcHRzLm90aGVyQXBwcykge1xuICAgICAgbGV0IG90aGVyQXBwcztcbiAgICAgIHRyeSB7XG4gICAgICAgIG90aGVyQXBwcyA9IGhlbHBlcnMucGFyc2VBcnJheSh0aGlzLm9wdHMub3RoZXJBcHBzKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgQ291bGQgbm90IHBhcnNlIFwib3RoZXJBcHBzXCIgY2FwYWJpbGl0eTogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgICBvdGhlckFwcHMgPSBhd2FpdCBCLmFsbChvdGhlckFwcHNcbiAgICAgICAgLm1hcCgoYXBwKSA9PiB0aGlzLmhlbHBlcnMuY29uZmlndXJlQXBwKGFwcCwgW0FQS19FWFRFTlNJT04sIEFQS1NfRVhURU5TSU9OXSkpKTtcbiAgICAgIGF3YWl0IGhlbHBlcnMuaW5zdGFsbE90aGVyQXBrcyhvdGhlckFwcHMsIHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdHMuYXBwKSB7XG4gICAgICBpZiAodGhpcy5vcHRzLm5vUmVzZXQgJiYgIShhd2FpdCB0aGlzLmFkYi5pc0FwcEluc3RhbGxlZCh0aGlzLm9wdHMuYXBwUGFja2FnZSkpXG4gICAgICAgICAgfHwgIXRoaXMub3B0cy5ub1Jlc2V0KSB7XG4gICAgICAgIGlmICghdGhpcy5vcHRzLm5vU2lnbiAmJiAhYXdhaXQgdGhpcy5hZGIuY2hlY2tBcGtDZXJ0KHRoaXMub3B0cy5hcHAsIHRoaXMub3B0cy5hcHBQYWNrYWdlLCB7XG4gICAgICAgICAgcmVxdWlyZURlZmF1bHRDZXJ0OiBmYWxzZSxcbiAgICAgICAgfSkpIHtcbiAgICAgICAgICBhd2FpdCBoZWxwZXJzLnNpZ25BcHAodGhpcy5hZGIsIHRoaXMub3B0cy5hcHApO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5vcHRzLnNraXBVbmluc3RhbGwpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmFkYi51bmluc3RhbGxBcGsodGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IGhlbHBlcnMuaW5zdGFsbEFwayh0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKCdub1Jlc2V0IGhhcyBiZWVuIHJlcXVlc3RlZCBhbmQgdGhlIGFwcCBpcyBhbHJlYWR5IGluc3RhbGxlZC4gRG9pbmcgbm90aGluZycpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5vcHRzLmZ1bGxSZXNldCkge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdGdWxsIHJlc2V0IHJlcXVpcmVzIGFuIGFwcCBjYXBhYmlsaXR5LCB1c2UgZmFzdFJlc2V0IGlmIGFwcCBpcyBub3QgcHJvdmlkZWQnKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubG9nLmRlYnVnKCdObyBhcHAgY2FwYWJpbGl0eS4gQXNzdW1pbmcgaXQgaXMgYWxyZWFkeSBvbiB0aGUgZGV2aWNlJyk7XG4gICAgICBpZiAodGhpcy5vcHRzLmZhc3RSZXNldCAmJiB0aGlzLm9wdHMuYXBwUGFja2FnZSkge1xuICAgICAgICBhd2FpdCBoZWxwZXJzLnJlc2V0QXBwKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGVuc3VyZUFwcFN0YXJ0cyAoKSB7XG4gICAgLy8gbWFrZSBzdXJlIHdlIGhhdmUgYW4gYWN0aXZpdHkgYW5kIHBhY2thZ2UgdG8gd2FpdCBmb3JcbiAgICBjb25zdCBhcHBXYWl0UGFja2FnZSA9IHRoaXMub3B0cy5hcHBXYWl0UGFja2FnZSB8fCB0aGlzLm9wdHMuYXBwUGFja2FnZTtcbiAgICBjb25zdCBhcHBXYWl0QWN0aXZpdHkgPSB0aGlzLm9wdHMuYXBwV2FpdEFjdGl2aXR5IHx8IHRoaXMub3B0cy5hcHBBY3Rpdml0eTtcblxuICAgIHRoaXMubG9nLmluZm8oYFN0YXJ0aW5nICcke3RoaXMub3B0cy5hcHBQYWNrYWdlfS8ke3RoaXMub3B0cy5hcHBBY3Rpdml0eX0gYCArXG4gICAgICBgYW5kIHdhaXRpbmcgZm9yICcke2FwcFdhaXRQYWNrYWdlfS8ke2FwcFdhaXRBY3Rpdml0eX0nYCk7XG5cbiAgICBpZiAodGhpcy5jYXBzLmFuZHJvaWRDb3ZlcmFnZSkge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgYW5kcm9pZENvdmVyYWdlIGlzIGNvbmZpZ3VyZWQuIGAgK1xuICAgICAgICBgIFN0YXJ0aW5nIGluc3RydW1lbnRhdGlvbiBvZiAnJHt0aGlzLmNhcHMuYW5kcm9pZENvdmVyYWdlfScuLi5gKTtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLmFuZHJvaWRDb3ZlcmFnZSh0aGlzLmNhcHMuYW5kcm9pZENvdmVyYWdlLCBhcHBXYWl0UGFja2FnZSwgYXBwV2FpdEFjdGl2aXR5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy5hZGIuc3RhcnRBcHAoe1xuICAgICAgICBwa2c6IHRoaXMub3B0cy5hcHBQYWNrYWdlLFxuICAgICAgICBhY3Rpdml0eTogdGhpcy5vcHRzLmFwcEFjdGl2aXR5LFxuICAgICAgICBhY3Rpb246IHRoaXMub3B0cy5pbnRlbnRBY3Rpb24gfHwgJ2FuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOJyxcbiAgICAgICAgY2F0ZWdvcnk6IHRoaXMub3B0cy5pbnRlbnRDYXRlZ29yeSB8fCAnYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVInLFxuICAgICAgICBmbGFnczogdGhpcy5vcHRzLmludGVudEZsYWdzIHx8ICcweDEwMjAwMDAwJywgLy8gRkxBR19BQ1RJVklUWV9ORVdfVEFTSyB8IEZMQUdfQUNUSVZJVFlfUkVTRVRfVEFTS19JRl9ORUVERURcbiAgICAgICAgd2FpdFBrZzogdGhpcy5vcHRzLmFwcFdhaXRQYWNrYWdlLFxuICAgICAgICB3YWl0QWN0aXZpdHk6IHRoaXMub3B0cy5hcHBXYWl0QWN0aXZpdHksXG4gICAgICAgIHdhaXRGb3JMYXVuY2g6IHRoaXMub3B0cy5hcHBXYWl0Rm9yTGF1bmNoLFxuICAgICAgICB3YWl0RHVyYXRpb246IHRoaXMub3B0cy5hcHBXYWl0RHVyYXRpb24sXG4gICAgICAgIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzOiB0aGlzLm9wdHMub3B0aW9uYWxJbnRlbnRBcmd1bWVudHMsXG4gICAgICAgIHN0b3BBcHA6ICF0aGlzLm9wdHMuZG9udFN0b3BBcHBPblJlc2V0LFxuICAgICAgICByZXRyeTogdHJ1ZSxcbiAgICAgICAgdXNlcjogdGhpcy5vcHRzLnVzZXJQcm9maWxlLFxuICAgICAgfSk7XG4gICAgfVxuXG4gIH1cblxuICBhc3luYyBkZWxldGVTZXNzaW9uICgpIHtcbiAgICB0aGlzLmxvZy5kZWJ1ZygnRGVsZXRpbmcgVWlBdXRvbWF0b3IyIHNlc3Npb24nKTtcblxuICAgIHRyeSB7XG4gICAgICBpZiAoIV8uaXNFbXB0eSh0aGlzLl9zY3JlZW5SZWNvcmRpbmdQcm9wZXJ0aWVzKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnN0b3BSZWNvcmRpbmdTY3JlZW4oKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChpZ24pIHt9XG5cbiAgICBhd2FpdCBhbmRyb2lkSGVscGVycy5yZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnModGhpcy5zZXJ2ZXIsIHRoaXMuc2Vzc2lvbklkKTtcblxuICAgIGF3YWl0IHRoaXMubW9iaWxlU3RvcFNjcmVlblN0cmVhbWluZygpO1xuXG4gICAgaWYgKHRoaXMudWlhdXRvbWF0b3IyKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLnN0b3BDaHJvbWVkcml2ZXJQcm94aWVzKCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgVW5hYmxlIHRvIHN0b3AgQ2hyb21lRHJpdmVyIHByb3hpZXM6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5qd3BQcm94eUFjdGl2ZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmRlbGV0ZVNlc3Npb24oKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgdGhpcy5sb2cud2FybihgVW5hYmxlIHRvIHByb3h5IGRlbGV0ZVNlc3Npb24gdG8gVWlBdXRvbWF0b3IyOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnVpYXV0b21hdG9yMiA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuandwUHJveHlBY3RpdmUgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLmFkYikge1xuICAgICAgaWYgKHRoaXMub3B0cy51bmljb2RlS2V5Ym9hcmQgJiYgdGhpcy5vcHRzLnJlc2V0S2V5Ym9hcmQgJiYgdGhpcy5kZWZhdWx0SU1FKSB7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKGBSZXNldHRpbmcgSU1FIHRvICcke3RoaXMuZGVmYXVsdElNRX0nYCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0SU1FKHRoaXMuZGVmYXVsdElNRSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRoaXMubG9nLndhcm4oYFVuYWJsZSB0byByZXNldCBJTUU6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNhcHMuYW5kcm9pZENvdmVyYWdlKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oJ1NodXR0aW5nIGRvd24gdGhlIGFkYiBwcm9jZXNzIG9mIGluc3RydW1lbnRhdGlvbi4uLicpO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5lbmRBbmRyb2lkQ292ZXJhZ2UoKTtcbiAgICAgICAgLy8gVXNlIHRoaXMgYnJvYWRjYXN0IGludGVudCB0byBub3RpZnkgaXQncyB0aW1lIHRvIGR1bXAgY292ZXJhZ2UgdG8gZmlsZVxuICAgICAgICBpZiAodGhpcy5jYXBzLmFuZHJvaWRDb3ZlcmFnZUVuZEludGVudCkge1xuICAgICAgICAgIHRoaXMubG9nLmluZm8oYFNlbmRpbmcgaW50ZW50IGJyb2FkY2FzdCAnJHt0aGlzLmNhcHMuYW5kcm9pZENvdmVyYWdlRW5kSW50ZW50fScgYXQgdGhlIGVuZCBvZiBpbnN0cnVtZW50aW5nLmApO1xuICAgICAgICAgIGF3YWl0IHRoaXMuYWRiLmJyb2FkY2FzdCh0aGlzLmNhcHMuYW5kcm9pZENvdmVyYWdlRW5kSW50ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvZy53YXJuKCdObyBhbmRyb2lkQ292ZXJhZ2VFbmRJbnRlbnQgaXMgY29uZmlndXJlZCBpbiBjYXBzLiBQb3NzaWJseSB5b3UgY2Fubm90IGdldCBjb3ZlcmFnZSBmaWxlLicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRzLmFwcFBhY2thZ2UpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzQ2hyb21lU2Vzc2lvblxuICAgICAgICAgICAgJiYgIXRoaXMub3B0cy5kb250U3RvcEFwcE9uUmVzZXRcbiAgICAgICAgICAgICYmICF0aGlzLm9wdHMubm9SZXNldCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmFkYi5mb3JjZVN0b3AodGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgdGhpcy5sb2cud2FybihgVW5hYmxlIHRvIGZvcmNlIHN0b3AgYXBwOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRzLmZ1bGxSZXNldCAmJiAhdGhpcy5vcHRzLnNraXBVbmluc3RhbGwpIHtcbiAgICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgQ2FwYWJpbGl0eSAnZnVsbFJlc2V0JyBzZXQgdG8gJ3RydWUnLCBVbmluc3RhbGxpbmcgJyR7dGhpcy5vcHRzLmFwcFBhY2thZ2V9J2ApO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmFkYi51bmluc3RhbGxBcGsodGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgdGhpcy5sb2cud2FybihgVW5hYmxlIHRvIHVuaW5zdGFsbCBhcHA6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBUaGlzIHZhbHVlIGNhbiBiZSB0cnVlIGlmIHRlc3QgdGFyZ2V0IGRldmljZSBpcyA8PSAyNlxuICAgICAgaWYgKHRoaXMuX3dhc1dpbmRvd0FuaW1hdGlvbkRpc2FibGVkKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oJ1Jlc3RvcmluZyB3aW5kb3cgYW5pbWF0aW9uIHN0YXRlJyk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnNldEFuaW1hdGlvblN0YXRlKHRydWUpO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5hZGIuc3RvcExvZ2NhdCgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5yZWxlYXNlU3lzdGVtUG9ydCgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgVW5hYmxlIHRvIHJlbW92ZSBzeXN0ZW0gcG9ydCBmb3J3YXJkOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgIC8vIElnbm9yZSwgdGhpcyBibG9jayB3aWxsIGFsc28gYmUgY2FsbGVkIHdoZW4gd2UgZmFsbCBpbiBjYXRjaCBibG9ja1xuICAgICAgICAvLyBhbmQgYmVmb3JlIGV2ZW4gcG9ydCBmb3J3YXJkLlxuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5yZWxlYXNlTWpwZWdTZXJ2ZXJQb3J0KCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBVbmFibGUgdG8gcmVtb3ZlIE1KUEVHIHNlcnZlciBwb3J0IGZvcndhcmQ6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgICAgLy8gSWdub3JlLCB0aGlzIGJsb2NrIHdpbGwgYWxzbyBiZSBjYWxsZWQgd2hlbiB3ZSBmYWxsIGluIGNhdGNoIGJsb2NrXG4gICAgICAgIC8vIGFuZCBiZWZvcmUgZXZlbiBwb3J0IGZvcndhcmQuXG4gICAgICB9XG5cbiAgICAgIGlmIChhd2FpdCB0aGlzLmFkYi5nZXRBcGlMZXZlbCgpID49IDI4KSB7IC8vIEFuZHJvaWQgUFxuICAgICAgICB0aGlzLmxvZy5pbmZvKCdSZXN0b3JpbmcgaGlkZGVuIGFwaSBwb2xpY3kgdG8gdGhlIGRldmljZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24nKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0RGVmYXVsdEhpZGRlbkFwaVBvbGljeSghIXRoaXMub3B0cy5pZ25vcmVIaWRkZW5BcGlQb2xpY3lFcnJvcik7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9wdHMucmVib290KSB7XG4gICAgICAgIGxldCBhdmROYW1lID0gdGhpcy5vcHRzLmF2ZC5yZXBsYWNlKCdAJywgJycpO1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgQ2xvc2luZyBlbXVsYXRvciAnJHthdmROYW1lfSdgKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmFkYi5raWxsRW11bGF0b3IoYXZkTmFtZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRoaXMubG9nLndhcm4oYFVuYWJsZSB0byBjbG9zZSBlbXVsYXRvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5tanBlZ1N0cmVhbSkge1xuICAgICAgdGhpcy5sb2cuaW5mbygnQ2xvc2luZyBNSlBFRyBzdHJlYW0nKTtcbiAgICAgIHRoaXMubWpwZWdTdHJlYW0uc3RvcCgpO1xuICAgIH1cbiAgICBhd2FpdCBzdXBlci5kZWxldGVTZXNzaW9uKCk7XG4gIH1cblxuICBhc3luYyBjaGVja0FwcFByZXNlbnQgKCkge1xuICAgIHRoaXMubG9nLmRlYnVnKCdDaGVja2luZyB3aGV0aGVyIGFwcCBpcyBhY3R1YWxseSBwcmVzZW50Jyk7XG4gICAgaWYgKCEoYXdhaXQgZnMuZXhpc3RzKHRoaXMub3B0cy5hcHApKSkge1xuICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgQ291bGQgbm90IGZpbmQgYXBwIGFwayBhdCAnJHt0aGlzLm9wdHMuYXBwfSdgKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBvblNldHRpbmdzVXBkYXRlICgpIHtcbiAgICAvLyBpbnRlbnRpb25hbGx5IGRvIG5vdGhpbmcgaGVyZSwgc2luY2UgY29tbWFuZHMudXBkYXRlU2V0dGluZ3MgcHJveGllc1xuICAgIC8vIHNldHRpbmdzIHRvIHRoZSB1aWF1dG8yIHNlcnZlciBhbHJlYWR5XG4gIH1cblxuICAvLyBOZWVkIHRvIG92ZXJyaWRlIGFuZHJvaWQtZHJpdmVyJ3MgdmVyc2lvbiBvZiB0aGlzIHNpbmNlIHdlIGRvbid0IGFjdHVhbGx5XG4gIC8vIGhhdmUgYSBib290c3RyYXA7IGluc3RlYWQgd2UganVzdCByZXN0YXJ0IGFkYiBhbmQgcmUtZm9yd2FyZCB0aGUgVWlBdXRvbWF0b3IyXG4gIC8vIHBvcnRcbiAgYXN5bmMgd3JhcEJvb3RzdHJhcERpc2Nvbm5lY3QgKHdyYXBwZWQpIHtcbiAgICBhd2FpdCB3cmFwcGVkKCk7XG4gICAgYXdhaXQgdGhpcy5hZGIucmVzdGFydCgpO1xuICAgIGF3YWl0IHRoaXMuYWxsb2NhdGVTeXN0ZW1Qb3J0KCk7XG4gICAgYXdhaXQgdGhpcy5hbGxvY2F0ZU1qcGVnU2VydmVyUG9ydCgpO1xuICB9XG5cbiAgcHJveHlBY3RpdmUgKHNlc3Npb25JZCkge1xuICAgIHN1cGVyLnByb3h5QWN0aXZlKHNlc3Npb25JZCk7XG5cbiAgICAvLyB3ZSBhbHdheXMgaGF2ZSBhbiBhY3RpdmUgcHJveHkgdG8gdGhlIFVpQXV0b21hdG9yMiBzZXJ2ZXJcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNhblByb3h5IChzZXNzaW9uSWQpIHtcbiAgICBzdXBlci5jYW5Qcm94eShzZXNzaW9uSWQpO1xuXG4gICAgLy8gd2UgY2FuIGFsd2F5cyBwcm94eSB0byB0aGUgdWlhdXRvbWF0b3IyIHNlcnZlclxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZ2V0UHJveHlBdm9pZExpc3QgKHNlc3Npb25JZCkge1xuICAgIHN1cGVyLmdldFByb3h5QXZvaWRMaXN0KHNlc3Npb25JZCk7XG4gICAgLy8gd2UgYXJlIG1haW50YWluaW5nIHR3byBzZXRzIG9mIE5PX1BST1hZIGxpc3RzLCBvbmUgZm9yIGNocm9tZWRyaXZlcihDSFJPTUVfTk9fUFJPWFkpXG4gICAgLy8gYW5kIG9uZSBmb3IgdWlhdXRvbWF0b3IyKE5PX1BST1hZKSwgYmFzZWQgb24gY3VycmVudCBjb250ZXh0IHdpbGwgcmV0dXJuIHJlbGF0ZWQgTk9fUFJPWFkgbGlzdFxuICAgIGlmICh1dGlsLmhhc1ZhbHVlKHRoaXMuY2hyb21lZHJpdmVyKSkge1xuICAgICAgLy8gaWYgdGhlIGN1cnJlbnQgY29udGV4dCBpcyB3ZWJ2aWV3KGNocm9tZWRyaXZlciksIHRoZW4gcmV0dXJuIENIUk9NRV9OT19QUk9YWSBsaXN0XG4gICAgICB0aGlzLmp3cFByb3h5QXZvaWQgPSBDSFJPTUVfTk9fUFJPWFk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuandwUHJveHlBdm9pZCA9IE5PX1BST1hZO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRzLm5hdGl2ZVdlYlNjcmVlbnNob3QpIHtcbiAgICAgIHRoaXMuandwUHJveHlBdm9pZCA9IFsuLi50aGlzLmp3cFByb3h5QXZvaWQsIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3NjcmVlbnNob3QnKV1dO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmp3cFByb3h5QXZvaWQ7XG4gIH1cblxuICBnZXQgaXNDaHJvbWVTZXNzaW9uICgpIHtcbiAgICByZXR1cm4gaGVscGVycy5pc0Nocm9tZUJyb3dzZXIodGhpcy5vcHRzLmJyb3dzZXJOYW1lKTtcbiAgfVxufVxuXG4vLyBmaXJzdCBhZGQgdGhlIGFuZHJvaWQtZHJpdmVyIGNvbW1hbmRzIHdoaWNoIHdlIHdpbGwgZmFsbCBiYWNrIHRvXG5mb3IgKGxldCBbY21kLCBmbl0gb2YgXy50b1BhaXJzKGFuZHJvaWRDb21tYW5kcykpIHtcbiAgQW5kcm9pZFVpYXV0b21hdG9yMkRyaXZlci5wcm90b3R5cGVbY21kXSA9IGZuO1xufVxuXG4vLyB0aGVuIG92ZXJ3cml0ZSB3aXRoIGFueSB1aWF1dG9tYXRvcjItc3BlY2lmaWMgY29tbWFuZHNcbmZvciAobGV0IFtjbWQsIGZuXSBvZiBfLnRvUGFpcnMoY29tbWFuZHMpKSB7XG4gIEFuZHJvaWRVaWF1dG9tYXRvcjJEcml2ZXIucHJvdG90eXBlW2NtZF0gPSBmbjtcbn1cblxuZXhwb3J0IHsgQW5kcm9pZFVpYXV0b21hdG9yMkRyaXZlciB9O1xuZXhwb3J0IGRlZmF1bHQgQW5kcm9pZFVpYXV0b21hdG9yMkRyaXZlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFHQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQSxNQUFNQSxPQUFPLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjLEVBQWQsRUFBa0JDLGdCQUFsQixFQUF1Q0MsbUNBQXZDLENBQWhCO0FBSUEsTUFBTUMsaUJBQWlCLEdBQUcsQ0FBQyxJQUFELEVBQU8sSUFBUCxDQUExQjs7QUFJQSxNQUFNQyw0QkFBNEIsR0FBR0Ms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
|
|
641
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2RyaXZlci5qcyIsIm5hbWVzIjpbImhlbHBlcnMiLCJPYmplY3QiLCJhc3NpZ24iLCJ1aWF1dG9tYXRvcjJIZWxwZXJzIiwiYW5kcm9pZEhlbHBlcnMiLCJERVZJQ0VfUE9SVF9SQU5HRSIsIkRFVklDRV9QT1JUX0FMTE9DQVRJT05fR1VBUkQiLCJ1dGlsIiwiZ2V0TG9ja0ZpbGVHdWFyZCIsInBhdGgiLCJyZXNvbHZlIiwib3MiLCJ0bXBkaXIiLCJ0aW1lb3V0IiwidHJ5UmVjb3ZlcnkiLCJERVZJQ0VfUE9SVCIsIk1KUEVHX1NFUlZFUl9ERVZJQ0VfUE9SVCIsIkxPQ0FMSE9TVF9JUDQiLCJOT19QUk9YWSIsIlJlZ0V4cCIsIkNIUk9NRV9OT19QUk9YWSIsIk1FTU9JWkVEX0ZVTkNUSU9OUyIsIkFuZHJvaWRVaWF1dG9tYXRvcjJEcml2ZXIiLCJCYXNlRHJpdmVyIiwiY29uc3RydWN0b3IiLCJvcHRzIiwic2hvdWxkVmFsaWRhdGVDYXBzIiwic2hlbGwiLCJsb2NhdG9yU3RyYXRlZ2llcyIsImRlc2lyZWRDYXBDb25zdHJhaW50cyIsInVpYXV0b21hdG9yMiIsImp3cFByb3h5QWN0aXZlIiwiZGVmYXVsdElNRSIsImp3cFByb3h5QXZvaWQiLCJhcGtTdHJpbmdzIiwic2V0dGluZ3MiLCJEZXZpY2VTZXR0aW5ncyIsImlnbm9yZVVuaW1wb3J0YW50Vmlld3MiLCJhbGxvd0ludmlzaWJsZUVsZW1lbnRzIiwib25TZXR0aW5nc1VwZGF0ZSIsImJpbmQiLCJjaHJvbWVkcml2ZXIiLCJzZXNzaW9uQ2hyb21lZHJpdmVycyIsImZuIiwiXyIsIm1lbW9pemUiLCJ2YWxpZGF0ZURlc2lyZWRDYXBzIiwiY2FwcyIsImNyZWF0ZVNlc3Npb24iLCJhcmdzIiwic2Vzc2lvbklkIiwic2VydmVyRGV0YWlscyIsInBsYXRmb3JtIiwid2ViU3RvcmFnZUVuYWJsZWQiLCJ0YWtlc1NjcmVlbnNob3QiLCJqYXZhc2NyaXB0RW5hYmxlZCIsImRhdGFiYXNlRW5hYmxlZCIsIm5ldHdvcmtDb25uZWN0aW9uRW5hYmxlZCIsImxvY2F0aW9uQ29udGV4dEVuYWJsZWQiLCJ3YXJuaW5ncyIsImRlc2lyZWQiLCJjdXJDb250ZXh0IiwiZGVmYXVsdENvbnRleHROYW1lIiwiZGVmYXVsdE9wdHMiLCJmdWxsUmVzZXQiLCJhdXRvTGF1bmNoIiwiYWRiUG9ydCIsIkRFRkFVTFRfQURCX1BPUlQiLCJhbmRyb2lkSW5zdGFsbFRpbWVvdXQiLCJkZWZhdWx0cyIsImlzQ2hyb21lU2Vzc2lvbiIsImxvZyIsImluZm8iLCJwa2ciLCJhY3Rpdml0eSIsImdldENocm9tZVBrZyIsImJyb3dzZXJOYW1lIiwiYXBwUGFja2FnZSIsImFwcEFjdGl2aXR5IiwicmVib290Iiwic2V0QXZkRnJvbUNhcGFiaWxpdGllcyIsImFwcCIsImNvbmZpZ3VyZUFwcCIsIkFQS19FWFRFTlNJT04iLCJBUEtTX0VYVEVOU0lPTiIsImNoZWNrQXBwUHJlc2VudCIsInN0YXJ0VWlBdXRvbWF0b3IyU2Vzc2lvbiIsImZpbGxEZXZpY2VEZXRhaWxzIiwibWpwZWdTY3JlZW5zaG90VXJsIiwibWpwZWdTdHJlYW0iLCJtanBlZyIsIk1KcGVnU3RyZWFtIiwic3RhcnQiLCJlIiwiZGVsZXRlU2Vzc2lvbiIsInBpeGVsUmF0aW8iLCJnZXREZXZpY2VQaXhlbFJhdGlvIiwic3RhdEJhckhlaWdodCIsImdldFN0YXR1c0JhckhlaWdodCIsInZpZXdwb3J0UmVjdCIsImdldFZpZXdQb3J0UmVjdCIsImRyaXZlckRhdGEiLCJnZXRTZXNzaW9uIiwic2Vzc2lvbkRhdGEiLCJkZWJ1ZyIsInVpYTJEYXRhIiwiandwcm94eSIsImNvbW1hbmQiLCJpc0VtdWxhdG9yIiwiYWRiIiwiYXZkIiwiZGV2aWNlTmFtZSIsImVycm9yQW5kVGhyb3ciLCJwbGF0Zm9ybVZlcnNpb24iLCJhdmREZXZpY2UiLCJyZXBsYWNlIiwiYWxsb2NhdGVTeXN0ZW1Qb3J0IiwiZm9yd2FyZFBvcnQiLCJsb2NhbFBvcnQiLCJjaGVja1BvcnRTdGF0dXMiLCJzeXN0ZW1Qb3J0IiwiX2hhc1N5c3RlbVBvcnRJbkNhcHMiLCJzdGFydFBvcnQiLCJlbmRQb3J0IiwiZmluZEFQb3J0Tm90SW5Vc2UiLCJyZWxlYXNlU3lzdGVtUG9ydCIsInJlbW92ZVBvcnRGb3J3YXJkIiwiYWxsb2NhdGVNanBlZ1NlcnZlclBvcnQiLCJtanBlZ1NlcnZlclBvcnQiLCJyZWxlYXNlTWpwZWdTZXJ2ZXJQb3J0IiwidWRpZCIsImVtUG9ydCIsImdldERldmljZUluZm9Gcm9tQ2FwcyIsImNyZWF0ZUFEQiIsImFwaUxldmVsIiwiZ2V0QXBpTGV2ZWwiLCJzZXRIaWRkZW5BcGlQb2xpY3kiLCJpZ25vcmVIaWRkZW5BcGlQb2xpY3lFcnJvciIsImhhc1ZhbHVlIiwiZ3BzRW5hYmxlZCIsInRvZ2dsZUdQU0xvY2F0aW9uUHJvdmlkZXIiLCJ3YXJuIiwiYXBwSW5mbyIsImdldExhdW5jaEluZm8iLCJjdXJEZXZpY2VJZCIsImRldmljZVVESUQiLCJpbml0RGV2aWNlIiwiaW5pdFVpQXV0b21hdG9yMlNlcnZlciIsImRpc2FibGVXaW5kb3dBbmltYXRpb24iLCJpc0FuaW1hdGlvbk9uIiwic2V0QW5pbWF0aW9uU3RhdGUiLCJfd2FzV2luZG93QW5pbWF0aW9uRGlzYWJsZWQiLCJpbml0QVVUIiwic3RhcnRTZXNzaW9uIiwiYWRkRGV2aWNlSW5mb1RvQ2FwcyIsInNraXBVbmxvY2siLCJ1bmxvY2siLCJzdGFydENocm9tZVNlc3Npb24iLCJlbnN1cmVBcHBTdGFydHMiLCJvcmllbnRhdGlvbiIsInNldE9yaWVudGF0aW9uIiwiYXV0b1dlYnZpZXciLCJ2aWV3TmFtZSIsImRlZmF1bHRXZWJ2aWV3TmFtZSIsImF1dG9XZWJ2aWV3VGltZW91dCIsInJldHJ5SW50ZXJ2YWwiLCJzZXRDb250ZXh0IiwiYXBpVmVyc2lvbiIsIm1hbnVmYWN0dXJlciIsIm1vZGVsIiwicmVhbERpc3BsYXlTaXplIiwiZGlzcGxheURlbnNpdHkiLCJtb2JpbGVHZXREZXZpY2VJbmZvIiwiZGV2aWNlQXBpTGV2ZWwiLCJwYXJzZUludCIsImRldmljZVNjcmVlblNpemUiLCJkZXZpY2VTY3JlZW5EZW5zaXR5IiwiZGV2aWNlTW9kZWwiLCJkZXZpY2VNYW51ZmFjdHVyZXIiLCJ1aWF1dG9tYXRvcjJPcHRzIiwiaG9zdCIsInJlbW90ZUFkYkhvc3QiLCJkZXZpY2VQb3J0IiwiYXBrIiwidG1wRGlyIiwiZGlzYWJsZVN1cHByZXNzQWNjZXNzaWJpbGl0eVNlcnZpY2UiLCJyZWFkVGltZW91dCIsInVpYXV0b21hdG9yMlNlcnZlclJlYWRUaW1lb3V0IiwiVWlBdXRvbWF0b3IyU2VydmVyIiwicHJveHlSZXFSZXMiLCJwcm94eUNvbW1hbmQiLCJza2lwU2VydmVySW5zdGFsbGF0aW9uIiwiaW5zdGFsbFNlcnZlckFwayIsInVpYXV0b21hdG9yMlNlcnZlckluc3RhbGxUaW1lb3V0IiwiYWRkVG9EZXZpY2VJZGxlV2hpdGVsaXN0IiwiU0VUVElOR1NfSEVMUEVSX1BLR19JRCIsIlNFUlZFUl9QQUNLQUdFX0lEIiwiU0VSVkVSX1RFU1RfUEFDS0FHRV9JRCIsInN0ZGVyciIsIm1lc3NhZ2UiLCJ1bmluc3RhbGxPdGhlclBhY2thZ2VzIiwicGFyc2VBcnJheSIsIm90aGVyQXBwcyIsIkIiLCJhbGwiLCJtYXAiLCJpbnN0YWxsT3RoZXJBcGtzIiwibm9SZXNldCIsImlzQXBwSW5zdGFsbGVkIiwibm9TaWduIiwiY2hlY2tBcGtDZXJ0IiwicmVxdWlyZURlZmF1bHRDZXJ0Iiwic2lnbkFwcCIsInNraXBVbmluc3RhbGwiLCJ1bmluc3RhbGxBcGsiLCJpbnN0YWxsQXBrIiwiZmFzdFJlc2V0IiwicmVzZXRBcHAiLCJhcHBXYWl0UGFja2FnZSIsImFwcFdhaXRBY3Rpdml0eSIsImFuZHJvaWRDb3ZlcmFnZSIsInN0YXJ0QXBwIiwiYWN0aW9uIiwiaW50ZW50QWN0aW9uIiwiY2F0ZWdvcnkiLCJpbnRlbnRDYXRlZ29yeSIsImZsYWdzIiwiaW50ZW50RmxhZ3MiLCJ3YWl0UGtnIiwid2FpdEFjdGl2aXR5Iiwid2FpdEZvckxhdW5jaCIsImFwcFdhaXRGb3JMYXVuY2giLCJ3YWl0RHVyYXRpb24iLCJhcHBXYWl0RHVyYXRpb24iLCJvcHRpb25hbEludGVudEFyZ3VtZW50cyIsInN0b3BBcHAiLCJkb250U3RvcEFwcE9uUmVzZXQiLCJyZXRyeSIsInVzZXIiLCJ1c2VyUHJvZmlsZSIsInNjcmVlblJlY29yZGluZ1N0b3BUYXNrcyIsImlzRW1wdHkiLCJfc2NyZWVuUmVjb3JkaW5nUHJvcGVydGllcyIsInN0b3BSZWNvcmRpbmdTY3JlZW4iLCJtb2JpbGVJc01lZGlhUHJvamVjdGlvblJlY29yZGluZ1J1bm5pbmciLCJtb2JpbGVTdG9wTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nIiwiX3NjcmVlblN0cmVhbWluZ1Byb3BzIiwibW9iaWxlU3RvcFNjcmVlblN0cmVhbWluZyIsInJlbW92ZUFsbFNlc3Npb25XZWJTb2NrZXRIYW5kbGVycyIsInNlcnZlciIsInN0b3BDaHJvbWVkcml2ZXJQcm94aWVzIiwiZXJyIiwidGFzayIsImlnbiIsInVuaWNvZGVLZXlib2FyZCIsInJlc2V0S2V5Ym9hcmQiLCJzZXRJTUUiLCJlbmRBbmRyb2lkQ292ZXJhZ2UiLCJhbmRyb2lkQ292ZXJhZ2VFbmRJbnRlbnQiLCJicm9hZGNhc3QiLCJmb3JjZVN0b3AiLCJzdG9wTG9nY2F0IiwiZXJyb3IiLCJzZXREZWZhdWx0SGlkZGVuQXBpUG9saWN5IiwiYXZkTmFtZSIsImtpbGxFbXVsYXRvciIsInN0b3AiLCJmcyIsImV4aXN0cyIsIndyYXBCb290c3RyYXBEaXNjb25uZWN0Iiwid3JhcHBlZCIsInJlc3RhcnQiLCJwcm94eUFjdGl2ZSIsImNhblByb3h5IiwiZ2V0UHJveHlBdm9pZExpc3QiLCJuYXRpdmVXZWJTY3JlZW5zaG90IiwiaXNDaHJvbWVCcm93c2VyIiwiY21kIiwidG9QYWlycyIsImFuZHJvaWRDb21tYW5kcyIsInByb3RvdHlwZSIsImNvbW1hbmRzIl0sInNvdXJjZVJvb3QiOiIuLi8uLiIsInNvdXJjZXMiOlsibGliL2RyaXZlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgQmFzZURyaXZlciwgRGV2aWNlU2V0dGluZ3MgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcbmltcG9ydCB7XG4gIFVpQXV0b21hdG9yMlNlcnZlciwgU0VSVkVSX1BBQ0tBR0VfSUQsIFNFUlZFUl9URVNUX1BBQ0tBR0VfSURcbn0gZnJvbSAnLi91aWF1dG9tYXRvcjInO1xuaW1wb3J0IHsgZnMsIHV0aWwsIG1qcGVnIH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgcmV0cnlJbnRlcnZhbCB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBjb21tYW5kcyBmcm9tICcuL2NvbW1hbmRzL2luZGV4JztcbmltcG9ydCB7IERFRkFVTFRfQURCX1BPUlQgfSBmcm9tICdhcHBpdW0tYWRiJztcbmltcG9ydCB1aWF1dG9tYXRvcjJIZWxwZXJzIGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQge1xuICBhbmRyb2lkSGVscGVycywgYW5kcm9pZENvbW1hbmRzLCBTRVRUSU5HU19IRUxQRVJfUEtHX0lEXG59IGZyb20gJ2FwcGl1bS1hbmRyb2lkLWRyaXZlcic7XG5pbXBvcnQgZGVzaXJlZENhcENvbnN0cmFpbnRzIGZyb20gJy4vZGVzaXJlZC1jYXBzJztcbmltcG9ydCB7IGZpbmRBUG9ydE5vdEluVXNlLCBjaGVja1BvcnRTdGF0dXMgfSBmcm9tICdwb3J0c2Nhbm5lcic7XG5pbXBvcnQgb3MgZnJvbSAnb3MnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBBUEtfRVhURU5TSU9OLCBBUEtTX0VYVEVOU0lPTiB9IGZyb20gJy4vZXh0ZW5zaW9ucyc7XG5cblxuY29uc3QgaGVscGVycyA9IE9iamVjdC5hc3NpZ24oe30sIHVpYXV0b21hdG9yMkhlbHBlcnMsIGFuZHJvaWRIZWxwZXJzKTtcblxuLy8gVGhlIHJhbmdlIG9mIHBvcnRzIHdlIGNhbiB1c2Ugb24gdGhlIHN5c3RlbSBmb3IgY29tbXVuaWNhdGluZyB0byB0aGVcbi8vIFVpQXV0b21hdG9yMiBIVFRQIHNlcnZlciBvbiB0aGUgZGV2aWNlXG5jb25zdCBERVZJQ0VfUE9SVF9SQU5HRSA9IFs4MjAwLCA4Mjk5XTtcblxuLy8gVGhlIGd1YXJkIGlzIG5lZWRlZCB0byBhdm9pZCBkeW5hbWljIHN5c3RlbSBwb3J0IGFsbG9jYXRpb24gY29uZmxpY3RzIGZvclxuLy8gcGFyYWxsZWwgZHJpdmVyIHNlc3Npb25zXG5jb25zdCBERVZJQ0VfUE9SVF9BTExPQ0FUSU9OX0dVQVJEID0gdXRpbC5nZXRMb2NrRmlsZUd1YXJkKFxuICBwYXRoLnJlc29sdmUob3MudG1wZGlyKCksICd1aWEyX2RldmljZV9wb3J0X2d1YXJkJyksXG4gIHt0aW1lb3V0OiAyNSwgdHJ5UmVjb3Zlcnk6IHRydWV9XG4pO1xuXG4vLyBUaGlzIGlzIHRoZSBwb3J0IHRoYXQgVWlBdXRvbWF0b3IyIGxpc3RlbnMgdG8gb24gdGhlIGRldmljZS4gV2Ugd2lsbCBmb3J3YXJkXG4vLyBvbmUgb2YgdGhlIHBvcnRzIGFib3ZlIG9uIHRoZSBzeXN0ZW0gdG8gdGhpcyBwb3J0IG9uIHRoZSBkZXZpY2UuXG5jb25zdCBERVZJQ0VfUE9SVCA9IDY3OTA7XG4vLyBUaGlzIGlzIHRoZSBwb3J0IHRoYXQgdGhlIFVpQXV0b21hdG9yMiBNSlBFRyBzZXJ2ZXIgbGlzdGVucyB0byBvbiB0aGUgZGV2aWNlLlxuLy8gV2Ugd2lsbCBmb3J3YXJkIG9uZSBvZiB0aGUgcG9ydHMgYWJvdmUgb24gdGhlIHN5c3RlbSB0byB0aGlzIHBvcnQgb24gdGhlXG4vLyBkZXZpY2UuXG5jb25zdCBNSlBFR19TRVJWRVJfREVWSUNFX1BPUlQgPSA3ODEwO1xuXG5jb25zdCBMT0NBTEhPU1RfSVA0ID0gJzEyNy4wLjAuMSc7XG5cbi8vIE5PX1BST1hZIGNvbnRhaW5zIHRoZSBwYXRocyB0aGF0IHdlIG5ldmVyIHdhbnQgdG8gcHJveHkgdG8gVWlBdXRvbWF0b3IyIHNlcnZlci5cbi8vIFRPRE86ICBBZGQgdGhlIGxpc3Qgb2YgcGF0aHMgdGhhdCB3ZSBuZXZlciB3YW50IHRvIHByb3h5IHRvIFVpQXV0b21hdG9yMiBzZXJ2ZXIuXG4vLyBUT0RPOiBOZWVkIHRvIHNlZ3JlZ2F0ZSB0aGUgcGF0aHMgYmV0dGVyIHdheSB1c2luZyByZWd1bGFyIGV4cHJlc3Npb25zIHdoZXJldmVyIGFwcGxpY2FibGUuXG4vLyAoTm90IHNlZ3JlZ2F0aW5nIHJpZ2h0IGF3YXkgYmVjYXVzZSBtb3JlIHBhdGhzIHRvIGJlIGFkZGVkIGluIHRoZSBOT19QUk9YWSBsaXN0KVxuY29uc3QgTk9fUFJPWFkgPSBbXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uLyg/IS4qLyknKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FsZXJ0X1teL10rJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hbGVydC9bXi9dKycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL1teL10rL2N1cnJlbnRfYWN0aXZpdHknKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9bXi9dKy9jdXJyZW50X3BhY2thZ2UnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9hcHAvW14vXSsnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvW14vXSsnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9zZXR0aW5ncycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvY29udGV4dCcpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvY29udGV4dHMnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2VsZW1lbnQvW14vXSsvYXR0cmlidXRlJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9lbGVtZW50L1teL10rL2Rpc3BsYXllZCcpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZWxlbWVudC9bXi9dKy9lbmFibGVkJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9lbGVtZW50L1teL10rL2xvY2F0aW9uX2luX3ZpZXcnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2VsZW1lbnQvW14vXSsvbmFtZScpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZWxlbWVudC9bXi9dKy9zY3JlZW5zaG90JyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9lbGVtZW50L1teL10rL3NlbGVjdGVkJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9pbWUvW14vXSsnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2xvY2F0aW9uJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9uZXR3b3JrX2Nvbm5lY3Rpb24nKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3NjcmVlbnNob3QnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3RpbWVvdXRzJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy91cmwnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9bXi9dK19hbGVydCQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hY3Rpb25zJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYWxlcnQvW14vXSsnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHAvW14vXScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9bXi9dKy9zdGFydF9hY3Rpdml0eScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9hcHAvW14vXSsnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vY29tcGFyZV9pbWFnZXMnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlLyg/IXNldF9jbGlwYm9hcmQpW14vXSsnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZWxlbWVudC9bXi9dKy9yZXBsYWNlX3ZhbHVlJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2VsZW1lbnQvW14vXSsvdmFsdWUnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZ2V0UGVyZm9ybWFuY2VEYXRhJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL3BlcmZvcm1hbmNlRGF0YS90eXBlcycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9zZXR0aW5ncycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9leGVjdXRlX2RyaXZlcicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9zdGFydF9yZWNvcmRpbmdfc2NyZWVuJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL3N0b3BfcmVjb3JkaW5nX3NjcmVlbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS8uKmV2ZW50JyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvY29udGV4dCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2VsZW1lbnQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9pbWUvW14vXSsnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9rZXlzJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbG9jYXRpb24nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9uZXR3b3JrX2Nvbm5lY3Rpb24nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy90aW1lb3V0cycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3RvdWNoL211bHRpL3BlcmZvcm0nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy90b3VjaC9wZXJmb3JtJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdXJsJyldLFxuXG4gIC8vIE1KU09OV1AgY29tbWFuZHNcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbG9nL3R5cGVzJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZXhlY3V0ZScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2V4ZWN1dGVfYXN5bmMnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9sb2cnKV0sXG4gIC8vIFczQyBjb21tYW5kc1xuICAvLyBGb3IgU2VsZW5pdW0gdjQgKFczQyBkb2VzIG5vdCBoYXZlIHRoaXMgcm91dGUpXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3NlL2xvZy90eXBlcycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvd2luZG93L3JlY3QnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlL2FzeW5jJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZXhlY3V0ZS9zeW5jJyldLFxuICAvLyBGb3IgU2VsZW5pdW0gdjQgKFczQyBkb2VzIG5vdCBoYXZlIHRoaXMgcm91dGUpXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9zZS9sb2cnKV0sXG5dO1xuXG4vLyBUaGlzIGlzIGEgc2V0IG9mIG1ldGhvZHMgYW5kIHBhdGhzIHRoYXQgd2UgbmV2ZXIgd2FudCB0byBwcm94eSB0byBDaHJvbWVkcml2ZXIuXG5jb25zdCBDSFJPTUVfTk9fUFJPWFkgPSBbXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bScpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvY29udGV4dCcpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZWxlbWVudC9bXi9dKy9yZWN0JyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9vcmllbnRhdGlvbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2NvbnRleHQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9vcmllbnRhdGlvbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3RvdWNoL211bHRpL3BlcmZvcm0nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy90b3VjaC9wZXJmb3JtJyldLFxuXG4gIC8vIHRoaXMgaXMgbmVlZGVkIHRvIG1ha2UgdGhlIG1vYmlsZTogY29tbWFuZHMgd29ya2luZyBpbiB3ZWIgY29udGV4dFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZXhlY3V0ZSQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlL3N5bmMnKV0sXG5cbiAgLy8gTUpTT05XUCBjb21tYW5kc1xuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9sb2cvdHlwZXMkJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbG9nJCcpXSxcbiAgLy8gVzNDIGNvbW1hbmRzXG4gIC8vIEZvciBTZWxlbml1bSB2NCAoVzNDIGRvZXMgbm90IGhhdmUgdGhpcyByb3V0ZSlcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvc2UvbG9nL3R5cGVzJCcpXSxcbiAgLy8gRm9yIFNlbGVuaXVtIHY0IChXM0MgZG9lcyBub3QgaGF2ZSB0aGlzIHJvdXRlKVxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvc2UvbG9nJCcpXSxcbl07XG5cbmNvbnN0IE1FTU9JWkVEX0ZVTkNUSU9OUyA9IFtcbiAgJ2dldFN0YXR1c0JhckhlaWdodCcsXG4gICdnZXREZXZpY2VQaXhlbFJhdGlvJyxcbl07XG5cbmNsYXNzIEFuZHJvaWRVaWF1dG9tYXRvcjJEcml2ZXIgZXh0ZW5kcyBCYXNlRHJpdmVyIHtcbiAgY29uc3RydWN0b3IgKG9wdHMgPSB7fSwgc2hvdWxkVmFsaWRhdGVDYXBzID0gdHJ1ZSkge1xuICAgIC8vIGBzaGVsbGAgb3ZlcndyaXRlcyBhZGIuc2hlbGwsIHNvIHJlbW92ZVxuICAgIGRlbGV0ZSBvcHRzLnNoZWxsO1xuXG4gICAgc3VwZXIob3B0cywgc2hvdWxkVmFsaWRhdGVDYXBzKTtcbiAgICB0aGlzLmxvY2F0b3JTdHJhdGVnaWVzID0gW1xuICAgICAgJ3hwYXRoJyxcbiAgICAgICdpZCcsXG4gICAgICAnY2xhc3MgbmFtZScsXG4gICAgICAnYWNjZXNzaWJpbGl0eSBpZCcsXG4gICAgICAnY3NzIHNlbGVjdG9yJyxcbiAgICAgICctYW5kcm9pZCB1aWF1dG9tYXRvcidcbiAgICBdO1xuICAgIHRoaXMuZGVzaXJlZENhcENvbnN0cmFpbnRzID0gZGVzaXJlZENhcENvbnN0cmFpbnRzO1xuICAgIHRoaXMudWlhdXRvbWF0b3IyID0gbnVsbDtcbiAgICB0aGlzLmp3cFByb3h5QWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5kZWZhdWx0SU1FID0gbnVsbDtcbiAgICB0aGlzLmp3cFByb3h5QXZvaWQgPSBOT19QUk9YWTtcbiAgICB0aGlzLmFwa1N0cmluZ3MgPSB7fTsgLy8gbWFwIG9mIGxhbmd1YWdlIC0+IHN0cmluZ3Mgb2JqXG5cbiAgICB0aGlzLnNldHRpbmdzID0gbmV3IERldmljZVNldHRpbmdzKHtpZ25vcmVVbmltcG9ydGFudFZpZXdzOiBmYWxzZSwgYWxsb3dJbnZpc2libGVFbGVtZW50czogZmFsc2V9LFxuICAgICAgICB0aGlzLm9uU2V0dGluZ3NVcGRhdGUuYmluZCh0aGlzKSk7XG4gICAgLy8gaGFuZGxlIHdlYnZpZXcgbWVjaGFuaWNzIGZyb20gQW5kcm9pZERyaXZlclxuICAgIHRoaXMuY2hyb21lZHJpdmVyID0gbnVsbDtcbiAgICB0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzID0ge307XG5cbiAgICAvLyBtZW1vaXplIGZ1bmN0aW9ucyBoZXJlLCBzbyB0aGF0IHRoZXkgYXJlIGRvbmUgb24gYSBwZXItaW5zdGFuY2UgYmFzaXNcbiAgICBmb3IgKGNvbnN0IGZuIG9mIE1FTU9JWkVEX0ZVTkNUSU9OUykge1xuICAgICAgdGhpc1tmbl0gPSBfLm1lbW9pemUodGhpc1tmbl0pO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlRGVzaXJlZENhcHMgKGNhcHMpIHtcbiAgICByZXR1cm4gc3VwZXIudmFsaWRhdGVEZXNpcmVkQ2FwcyhjYXBzKSAmJiBhbmRyb2lkSGVscGVycy52YWxpZGF0ZURlc2lyZWRDYXBzKGNhcHMpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlU2Vzc2lvbiAoLi4uYXJncykge1xuICAgIHRyeSB7XG4gICAgICAvLyBUT0RPIGhhbmRsZSBvdGhlclNlc3Npb25EYXRhIGZvciBtdWx0aXBsZSBzZXNzaW9uc1xuICAgICAgbGV0IFtzZXNzaW9uSWQsIGNhcHNdID0gYXdhaXQgc3VwZXIuY3JlYXRlU2Vzc2lvbiguLi5hcmdzKTtcblxuICAgICAgbGV0IHNlcnZlckRldGFpbHMgPSB7XG4gICAgICAgIHBsYXRmb3JtOiAnTElOVVgnLFxuICAgICAgICB3ZWJTdG9yYWdlRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHRha2VzU2NyZWVuc2hvdDogdHJ1ZSxcbiAgICAgICAgamF2YXNjcmlwdEVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGRhdGFiYXNlRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIG5ldHdvcmtDb25uZWN0aW9uRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgbG9jYXRpb25Db250ZXh0RW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHdhcm5pbmdzOiB7fSxcbiAgICAgICAgZGVzaXJlZDogdGhpcy5jYXBzLFxuICAgICAgfTtcblxuICAgICAgdGhpcy5jYXBzID0gT2JqZWN0LmFzc2lnbihzZXJ2ZXJEZXRhaWxzLCB0aGlzLmNhcHMpO1xuXG4gICAgICB0aGlzLmN1ckNvbnRleHQgPSB0aGlzLmRlZmF1bHRDb250ZXh0TmFtZSgpO1xuXG4gICAgICBsZXQgZGVmYXVsdE9wdHMgPSB7XG4gICAgICAgIGZ1bGxSZXNldDogZmFsc2UsXG4gICAgICAgIGF1dG9MYXVuY2g6IHRydWUsXG4gICAgICAgIGFkYlBvcnQ6IERFRkFVTFRfQURCX1BPUlQsXG4gICAgICAgIGFuZHJvaWRJbnN0YWxsVGltZW91dDogOTAwMDBcbiAgICAgIH07XG4gICAgICBfLmRlZmF1bHRzKHRoaXMub3B0cywgZGVmYXVsdE9wdHMpO1xuXG4gICAgICBpZiAodGhpcy5pc0Nocm9tZVNlc3Npb24pIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhcIldlJ3JlIGdvaW5nIHRvIHJ1biBhIENocm9tZS1iYXNlZCBzZXNzaW9uXCIpO1xuICAgICAgICBsZXQge3BrZywgYWN0aXZpdHl9ID0gaGVscGVycy5nZXRDaHJvbWVQa2codGhpcy5vcHRzLmJyb3dzZXJOYW1lKTtcbiAgICAgICAgdGhpcy5vcHRzLmFwcFBhY2thZ2UgPSB0aGlzLmNhcHMuYXBwUGFja2FnZSA9IHBrZztcbiAgICAgICAgdGhpcy5vcHRzLmFwcEFjdGl2aXR5ID0gdGhpcy5jYXBzLmFwcEFjdGl2aXR5ID0gYWN0aXZpdHk7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYENocm9tZS10eXBlIHBhY2thZ2UgYW5kIGFjdGl2aXR5IGFyZSAke3BrZ30gYW5kICR7YWN0aXZpdHl9YCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9wdHMucmVib290KSB7XG4gICAgICAgIHRoaXMuc2V0QXZkRnJvbUNhcGFiaWxpdGllcyhjYXBzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0cy5hcHApIHtcbiAgICAgICAgLy8gZmluZCBhbmQgY29weSwgb3IgZG93bmxvYWQgYW5kIHVuemlwIGFuIGFwcCB1cmwgb3IgcGF0aFxuICAgICAgICB0aGlzLm9wdHMuYXBwID0gYXdhaXQgdGhpcy5oZWxwZXJzLmNvbmZpZ3VyZUFwcCh0aGlzLm9wdHMuYXBwLCBbQVBLX0VYVEVOU0lPTiwgQVBLU19FWFRFTlNJT05dKTtcbiAgICAgICAgYXdhaXQgdGhpcy5jaGVja0FwcFByZXNlbnQoKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5vcHRzLmFwcFBhY2thZ2UpIHtcbiAgICAgICAgLy8gdGhlIGFwcCBpc24ndCBhbiBhY3R1YWwgYXBwIGZpbGUgYnV0IHJhdGhlciBzb21ldGhpbmcgd2Ugd2FudCB0b1xuICAgICAgICAvLyBhc3N1bWUgaXMgb24gdGhlIGRldmljZSBhbmQganVzdCBsYXVuY2ggdmlhIHRoZSBhcHBQYWNrYWdlXG4gICAgICAgIHRoaXMubG9nLmluZm8oYFN0YXJ0aW5nICcke3RoaXMub3B0cy5hcHBQYWNrYWdlfScgZGlyZWN0bHkgb24gdGhlIGRldmljZWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgTmVpdGhlciAnYXBwJyBub3IgJ2FwcFBhY2thZ2UnIHdhcyBzZXQuIFN0YXJ0aW5nIFVpQXV0b21hdG9yMiBgICtcbiAgICAgICAgICAnd2l0aG91dCB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uJyk7XG4gICAgICB9XG4gICAgICB0aGlzLm9wdHMuYWRiUG9ydCA9IHRoaXMub3B0cy5hZGJQb3J0IHx8IERFRkFVTFRfQURCX1BPUlQ7XG5cbiAgICAgIGF3YWl0IHRoaXMuc3RhcnRVaUF1dG9tYXRvcjJTZXNzaW9uKCk7XG4gICAgICBhd2FpdCB0aGlzLmZpbGxEZXZpY2VEZXRhaWxzKCk7XG4gICAgICBpZiAodGhpcy5vcHRzLm1qcGVnU2NyZWVuc2hvdFVybCkge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKGBTdGFydGluZyBNSlBFRyBzdHJlYW0gcmVhZGluZyBVUkw6ICcke3RoaXMub3B0cy5tanBlZ1NjcmVlbnNob3RVcmx9J2ApO1xuICAgICAgICB0aGlzLm1qcGVnU3RyZWFtID0gbmV3IG1qcGVnLk1KcGVnU3RyZWFtKHRoaXMub3B0cy5tanBlZ1NjcmVlbnNob3RVcmwpO1xuICAgICAgICBhd2FpdCB0aGlzLm1qcGVnU3RyZWFtLnN0YXJ0KCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gW3Nlc3Npb25JZCwgdGhpcy5jYXBzXTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24oKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZmlsbERldmljZURldGFpbHMgKCkge1xuICAgIHRoaXMuY2Fwcy5waXhlbFJhdGlvID0gYXdhaXQgdGhpcy5nZXREZXZpY2VQaXhlbFJhdGlvKCk7XG4gICAgdGhpcy5jYXBzLnN0YXRCYXJIZWlnaHQgPSBhd2FpdCB0aGlzLmdldFN0YXR1c0JhckhlaWdodCgpO1xuICAgIHRoaXMuY2Fwcy52aWV3cG9ydFJlY3QgPSBhd2FpdCB0aGlzLmdldFZpZXdQb3J0UmVjdCgpO1xuICB9XG5cbiAgZ2V0IGRyaXZlckRhdGEgKCkge1xuICAgIC8vIFRPRE8gZmlsbCBvdXQgcmVzb3VyY2UgaW5mbyBoZXJlXG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgYXN5bmMgZ2V0U2Vzc2lvbiAoKSB7XG4gICAgbGV0IHNlc3Npb25EYXRhID0gYXdhaXQgc3VwZXIuZ2V0U2Vzc2lvbigpO1xuICAgIHRoaXMubG9nLmRlYnVnKCdHZXR0aW5nIHNlc3Npb24gZGV0YWlscyBmcm9tIHNlcnZlciB0byBtaXggaW4nKTtcbiAgICBsZXQgdWlhMkRhdGEgPSBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy8nLCAnR0VUJywge30pO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzZXNzaW9uRGF0YSwgdWlhMkRhdGEpO1xuICB9XG5cbiAgaXNFbXVsYXRvciAoKSB7XG4gICAgcmV0dXJuIGhlbHBlcnMuaXNFbXVsYXRvcih0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgfVxuXG4gIHNldEF2ZEZyb21DYXBhYmlsaXRpZXMgKGNhcHMpIHtcbiAgICBpZiAodGhpcy5vcHRzLmF2ZCkge1xuICAgICAgdGhpcy5sb2cuaW5mbygnYXZkIG5hbWUgZGVmaW5lZCwgaWdub3JpbmcgZGV2aWNlIG5hbWUgYW5kIHBsYXRmb3JtIHZlcnNpb24nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFjYXBzLmRldmljZU5hbWUpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnYXZkIG9yIGRldmljZU5hbWUgc2hvdWxkIGJlIHNwZWNpZmllZCB3aGVuIHJlYm9vdCBvcHRpb24gaXMgZW5hYmxlcycpO1xuICAgICAgfVxuICAgICAgaWYgKCFjYXBzLnBsYXRmb3JtVmVyc2lvbikge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdhdmQgb3IgcGxhdGZvcm1WZXJzaW9uIHNob3VsZCBiZSBzcGVjaWZpZWQgd2hlbiByZWJvb3Qgb3B0aW9uIGlzIGVuYWJsZWQnKTtcbiAgICAgIH1cbiAgICAgIGxldCBhdmREZXZpY2UgPSBjYXBzLmRldmljZU5hbWUucmVwbGFjZSgvW15hLXpBLVowLTlfLl0vZywgJy0nKTtcbiAgICAgIHRoaXMub3B0cy5hdmQgPSBgJHthdmREZXZpY2V9X18ke2NhcHMucGxhdGZvcm1WZXJzaW9ufWA7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgYWxsb2NhdGVTeXN0ZW1Qb3J0ICgpIHtcbiAgICBjb25zdCBmb3J3YXJkUG9ydCA9IGFzeW5jIChsb2NhbFBvcnQpID0+IHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBGb3J3YXJkaW5nIFVpQXV0b21hdG9yMiBTZXJ2ZXIgcG9ydCAke0RFVklDRV9QT1JUfSB0byBsb2NhbCBwb3J0ICR7bG9jYWxQb3J0fWApO1xuICAgICAgaWYgKChhd2FpdCBjaGVja1BvcnRTdGF0dXMobG9jYWxQb3J0LCBMT0NBTEhPU1RfSVA0KSkgPT09ICdvcGVuJykge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBVaUF1dG9tYXRvcjIgU2VydmVyIGNhbm5vdCBzdGFydCBiZWNhdXNlIHRoZSBsb2NhbCBwb3J0ICMke2xvY2FsUG9ydH0gaXMgYnVzeS4gYCArXG4gICAgICAgICAgYE1ha2Ugc3VyZSB0aGUgcG9ydCB5b3UgcHJvdmlkZSB2aWEgJ3N5c3RlbVBvcnQnIGNhcGFiaWxpdHkgaXMgbm90IG9jY3VwaWVkLiBgICtcbiAgICAgICAgICBgVGhpcyBzaXR1YXRpb24gbWlnaHQgb2Z0ZW4gYmUgYSByZXN1bHQgb2YgYW4gaW5hY2N1cmF0ZSBzZXNzaW9ucyBtYW5hZ2VtZW50LCBlLmcuIGAgK1xuICAgICAgICAgIGBvbGQgYXV0b21hdGlvbiBzZXNzaW9ucyBvbiB0aGUgc2FtZSBkZXZpY2UgbXVzdCBhbHdheXMgYmUgY2xvc2VkIGJlZm9yZSBzdGFydGluZyBuZXcgb25lcy5gKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuYWRiLmZvcndhcmRQb3J0KGxvY2FsUG9ydCwgREVWSUNFX1BPUlQpO1xuICAgIH07XG5cbiAgICBpZiAodGhpcy5vcHRzLnN5c3RlbVBvcnQpIHtcbiAgICAgIHRoaXMuX2hhc1N5c3RlbVBvcnRJbkNhcHMgPSB0cnVlO1xuICAgICAgcmV0dXJuIGF3YWl0IGZvcndhcmRQb3J0KHRoaXMub3B0cy5zeXN0ZW1Qb3J0KTtcbiAgICB9XG5cbiAgICBhd2FpdCBERVZJQ0VfUE9SVF9BTExPQ0FUSU9OX0dVQVJEKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IFtzdGFydFBvcnQsIGVuZFBvcnRdID0gREVWSUNFX1BPUlRfUkFOR0U7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLm9wdHMuc3lzdGVtUG9ydCA9IGF3YWl0IGZpbmRBUG9ydE5vdEluVXNlKHN0YXJ0UG9ydCwgZW5kUG9ydCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coXG4gICAgICAgICAgYENhbm5vdCBmaW5kIGFueSBmcmVlIHBvcnQgaW4gcmFuZ2UgJHtzdGFydFBvcnR9Li4ke2VuZFBvcnR9fS4gYCArXG4gICAgICAgICAgYFBsZWFzZSBzZXQgdGhlIGF2YWlsYWJsZSBwb3J0IG51bWJlciBieSBwcm92aWRpbmcgdGhlIHN5c3RlbVBvcnQgY2FwYWJpbGl0eSBvciBgICtcbiAgICAgICAgICBgZG91YmxlIGNoZWNrIHRoZSBwcm9jZXNzZXMgdGhhdCBhcmUgbG9ja2luZyBwb3J0cyB3aXRoaW4gdGhpcyByYW5nZSBhbmQgdGVybWluYXRlIGAgK1xuICAgICAgICAgIGB0aGVzZSB3aGljaCBhcmUgbm90IG5lZWRlZCBhbnltb3JlYCk7XG4gICAgICB9XG4gICAgICBhd2FpdCBmb3J3YXJkUG9ydCh0aGlzLm9wdHMuc3lzdGVtUG9ydCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyByZWxlYXNlU3lzdGVtUG9ydCAoKSB7XG4gICAgaWYgKCF0aGlzLm9wdHMuc3lzdGVtUG9ydCB8fCAhdGhpcy5hZGIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faGFzU3lzdGVtUG9ydEluQ2Fwcykge1xuICAgICAgYXdhaXQgdGhpcy5hZGIucmVtb3ZlUG9ydEZvcndhcmQodGhpcy5vcHRzLnN5c3RlbVBvcnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBERVZJQ0VfUE9SVF9BTExPQ0FUSU9OX0dVQVJEKGFzeW5jICgpID0+IGF3YWl0IHRoaXMuYWRiLnJlbW92ZVBvcnRGb3J3YXJkKHRoaXMub3B0cy5zeXN0ZW1Qb3J0KSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgYWxsb2NhdGVNanBlZ1NlcnZlclBvcnQgKCkge1xuICAgIGlmICh0aGlzLm9wdHMubWpwZWdTZXJ2ZXJQb3J0KSB7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5mb3J3YXJkUG9ydCh0aGlzLm9wdHMubWpwZWdTZXJ2ZXJQb3J0LCBNSlBFR19TRVJWRVJfREVWSUNFX1BPUlQpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJlbGVhc2VNanBlZ1NlcnZlclBvcnQgKCkge1xuICAgIGlmICh0aGlzLm9wdHMubWpwZWdTZXJ2ZXJQb3J0KSB7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5yZW1vdmVQb3J0Rm9yd2FyZCh0aGlzLm9wdHMubWpwZWdTZXJ2ZXJQb3J0KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzdGFydFVpQXV0b21hdG9yMlNlc3Npb24gKCkge1xuICAgIC8vIGdldCBkZXZpY2UgdWRpZCBmb3IgdGhpcyBzZXNzaW9uXG4gICAgbGV0IHt1ZGlkLCBlbVBvcnR9ID0gYXdhaXQgaGVscGVycy5nZXREZXZpY2VJbmZvRnJvbUNhcHModGhpcy5vcHRzKTtcbiAgICB0aGlzLm9wdHMudWRpZCA9IHVkaWQ7XG4gICAgdGhpcy5vcHRzLmVtUG9ydCA9IGVtUG9ydDtcblxuICAgIC8vIG5vdyB0aGF0IHdlIGtub3cgb3VyIGphdmEgdmVyc2lvbiBhbmQgZGV2aWNlIGluZm8sIHdlIGNhbiBjcmVhdGUgb3VyXG4gICAgLy8gQURCIGluc3RhbmNlXG4gICAgdGhpcy5hZGIgPSBhd2FpdCBhbmRyb2lkSGVscGVycy5jcmVhdGVBREIodGhpcy5vcHRzKTtcblxuICAgIGNvbnN0IGFwaUxldmVsID0gYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKTtcblxuICAgIGlmIChhcGlMZXZlbCA8IDIxKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdVSUF1dG9tYXRvcjIgaXMgb25seSBzdXBwb3J0ZWQgc2luY2UgQW5kcm9pZCA1LjAgKExvbGxpcG9wKS4gJyArXG4gICAgICAgICdZb3UgY291bGQgc3RpbGwgdXNlIG90aGVyIHN1cHBvcnRlZCBiYWNrZW5kcyBpbiBvcmRlciB0byBhdXRvbWF0ZSBvbGRlciBBbmRyb2lkIHZlcnNpb25zLicpO1xuICAgIH1cblxuICAgIGlmIChhcGlMZXZlbCA+PSAyOCkgeyAvLyBBbmRyb2lkIFBcbiAgICAgIHRoaXMubG9nLmluZm8oJ1JlbGF4aW5nIGhpZGRlbiBhcGkgcG9saWN5Jyk7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5zZXRIaWRkZW5BcGlQb2xpY3koJzEnLCAhIXRoaXMub3B0cy5pZ25vcmVIaWRkZW5BcGlQb2xpY3lFcnJvcik7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgd2UgaGF2ZSB0byBlbmFibGUvZGlzYWJsZSBncHMgYmVmb3JlIHJ1bm5pbmcgdGhlIGFwcGxpY2F0aW9uXG4gICAgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLmdwc0VuYWJsZWQpKSB7XG4gICAgICBpZiAodGhpcy5pc0VtdWxhdG9yKCkpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgVHJ5aW5nIHRvICR7dGhpcy5vcHRzLmdwc0VuYWJsZWQgPyAnZW5hYmxlJyA6ICdkaXNhYmxlJ30gZ3BzIGxvY2F0aW9uIHByb3ZpZGVyYCk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnRvZ2dsZUdQU0xvY2F0aW9uUHJvdmlkZXIodGhpcy5vcHRzLmdwc0VuYWJsZWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgU29ycnkhICdncHNFbmFibGVkJyBjYXBhYmlsaXR5IGlzIG9ubHkgYXZhaWxhYmxlIGZvciBlbXVsYXRvcnNgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBnZXQgYXBwUGFja2FnZSBldCBhbCBmcm9tIG1hbmlmZXN0IGlmIG5lY2Vzc2FyeVxuICAgIGNvbnN0IGFwcEluZm8gPSBhd2FpdCBoZWxwZXJzLmdldExhdW5jaEluZm8odGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gICAgLy8gYW5kIGdldCBpdCBvbnRvIG91ciAnb3B0cycgb2JqZWN0IHNvIHdlIHVzZSBpdCBmcm9tIG5vdyBvblxuICAgIE9iamVjdC5hc3NpZ24odGhpcy5vcHRzLCBhcHBJbmZvIHx8IHt9KTtcblxuICAgIC8vIHNldCBhY3R1YWwgZGV2aWNlIG5hbWUsIHVkaWQsIHBsYXRmb3JtIHZlcnNpb24sIHNjcmVlbiBzaXplLCBzY3JlZW4gZGVuc2l0eSwgbW9kZWwgYW5kIG1hbnVmYWN0dXJlciBkZXRhaWxzXG4gICAgdGhpcy5jYXBzLmRldmljZU5hbWUgPSB0aGlzLmFkYi5jdXJEZXZpY2VJZDtcbiAgICB0aGlzLmNhcHMuZGV2aWNlVURJRCA9IHRoaXMub3B0cy51ZGlkO1xuXG4gICAgLy8gc3RhcnQgYW4gYXZkLCBzZXQgdGhlIGxhbmd1YWdlL2xvY2FsZSwgcGljayBhbiBlbXVsYXRvciwgZXRjLi4uXG4gICAgLy8gVE9ETyB3aXRoIG11bHRpcGxlIGRldmljZXMgd2UnbGwgbmVlZCB0byBwYXJhbWV0ZXJpemUgdGhpc1xuICAgIHRoaXMuZGVmYXVsdElNRSA9IGF3YWl0IGhlbHBlcnMuaW5pdERldmljZSh0aGlzLmFkYiwgdGhpcy5vcHRzKTtcblxuICAgIC8vIFByZXBhcmUgdGhlIGRldmljZSBieSBmb3J3YXJkaW5nIHRoZSBVaUF1dG9tYXRvcjIgcG9ydFxuICAgIC8vIFRoaXMgY2FsbCBtdXRhdGVzIHRoaXMub3B0cy5zeXN0ZW1Qb3J0IGlmIGl0IGlzIG5vdCBzZXQgZXhwbGljaXRseVxuICAgIGF3YWl0IHRoaXMuYWxsb2NhdGVTeXN0ZW1Qb3J0KCk7XG5cbiAgICAvLyBQcmVwYXJlIHRoZSBkZXZpY2UgYnkgZm9yd2FyZGluZyB0aGUgVWlBdXRvbWF0b3IyIE1KUEVHIHNlcnZlciBwb3J0IChpZlxuICAgIC8vIGFwcGxpY2FibGUpXG4gICAgYXdhaXQgdGhpcy5hbGxvY2F0ZU1qcGVnU2VydmVyUG9ydCgpO1xuXG4gICAgLy8gc2V0IHVwIHRoZSBtb2RpZmllZCBVaUF1dG9tYXRvcjIgc2VydmVyIGV0Y1xuICAgIGF3YWl0IHRoaXMuaW5pdFVpQXV0b21hdG9yMlNlcnZlcigpO1xuXG4gICAgLy8gU2hvdWxkIGJlIGFmdGVyIGluc3RhbGxpbmcgaW8uYXBwaXVtLnNldHRpbmdzIGluIGhlbHBlcnMuaW5pdERldmljZVxuICAgIGlmICh0aGlzLm9wdHMuZGlzYWJsZVdpbmRvd0FuaW1hdGlvbiAmJiAoYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKSA8IDI2KSkgeyAvLyBBUEkgbGV2ZWwgMjYgaXMgQW5kcm9pZCA4LjAuXG4gICAgICAvLyBHcmFudGluZyBhbmRyb2lkLnBlcm1pc3Npb24uU0VUX0FOSU1BVElPTl9TQ0FMRSBpcyBuZWNlc3NhcnkgdG8gaGFuZGxlIGFuaW1hdGlvbnMgdW5kZXIgQVBJIGxldmVsIDI2XG4gICAgICAvLyBSZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL3B1bGwvMTE2NDAjaXNzdWVjb21tZW50LTQzODI2MDQ3N1xuICAgICAgLy8gYC0tbm8td2luZG93LWFuaW1hdGlvbmAgd29ya3Mgb3ZlciBBbmRyb2lkIDggdG8gZGlzYWJsZSBhbGwgb2YgYW5pbWF0aW9uc1xuICAgICAgaWYgKGF3YWl0IHRoaXMuYWRiLmlzQW5pbWF0aW9uT24oKSkge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKCdEaXNhYmxpbmcgYW5pbWF0aW9uIHZpYSBpby5hcHBpdW0uc2V0dGluZ3MnKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0QW5pbWF0aW9uU3RhdGUoZmFsc2UpO1xuICAgICAgICB0aGlzLl93YXNXaW5kb3dBbmltYXRpb25EaXNhYmxlZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKCdXaW5kb3cgYW5pbWF0aW9uIGlzIGFscmVhZHkgZGlzYWJsZWQnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzZXQgdXAgYXBwIHVuZGVyIHRlc3RcbiAgICAvLyBwcmVwYXJlIG91ciBhY3R1YWwgQVVULCBnZXQgaXQgb24gdGhlIGRldmljZSwgZXRjLi4uXG4gICAgYXdhaXQgdGhpcy5pbml0QVVUKCk7XG5cbiAgICAvLyBBZGRpbmcgQVVUIHBhY2thZ2UgbmFtZSBpbiB0aGUgY2FwYWJpbGl0aWVzIGlmIHBhY2thZ2UgbmFtZSBub3QgZXhpc3QgaW4gY2Fwc1xuICAgIGlmICghdGhpcy5jYXBzLmFwcFBhY2thZ2UgJiYgYXBwSW5mbykge1xuICAgICAgdGhpcy5jYXBzLmFwcFBhY2thZ2UgPSBhcHBJbmZvLmFwcFBhY2thZ2U7XG4gICAgfVxuXG4gICAgLy8gbGF1bmNoIFVpQXV0b21hdG9yMiBhbmQgd2FpdCB0aWxsIGl0cyBvbmxpbmUgYW5kIHdlIGhhdmUgYSBzZXNzaW9uXG4gICAgYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuc3RhcnRTZXNzaW9uKHRoaXMuY2Fwcyk7XG5cbiAgICBhd2FpdCB0aGlzLmFkZERldmljZUluZm9Ub0NhcHMoKTtcblxuICAgIC8vIFVubG9jayB0aGUgZGV2aWNlIGFmdGVyIHRoZSBzZXNzaW9uIGlzIHN0YXJ0ZWQuXG4gICAgaWYgKCF0aGlzLm9wdHMuc2tpcFVubG9jaykge1xuICAgICAgLy8gdW5sb2NrIHRoZSBkZXZpY2UgdG8gcHJlcGFyZSBpdCBmb3IgdGVzdGluZ1xuICAgICAgYXdhaXQgaGVscGVycy51bmxvY2sodGhpcywgdGhpcy5hZGIsIHRoaXMuY2Fwcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGAnc2tpcFVubG9jaycgY2FwYWJpbGl0eSBzZXQsIHNvIHNraXBwaW5nIGRldmljZSB1bmxvY2tgKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0Nocm9tZVNlc3Npb24pIHsgLy8gc3RhcnQgYSBjaHJvbWVkcml2ZXIgc2Vzc2lvblxuICAgICAgYXdhaXQgdGhpcy5zdGFydENocm9tZVNlc3Npb24odGhpcyk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdHMuYXV0b0xhdW5jaCAmJiB0aGlzLm9wdHMuYXBwUGFja2FnZSkge1xuICAgICAgYXdhaXQgdGhpcy5lbnN1cmVBcHBTdGFydHMoKTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgaW5pdGlhbCBvcmllbnRhdGlvbiBpcyByZXF1ZXN0ZWQsIHNldCBpdFxuICAgIGlmICh1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy5vcmllbnRhdGlvbikpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBTZXR0aW5nIGluaXRpYWwgb3JpZW50YXRpb24gdG8gJyR7dGhpcy5vcHRzLm9yaWVudGF0aW9ufSdgKTtcbiAgICAgIGF3YWl0IHRoaXMuc2V0T3JpZW50YXRpb24odGhpcy5vcHRzLm9yaWVudGF0aW9uKTtcbiAgICB9XG5cbiAgICAvLyBpZiB3ZSB3YW50IHRvIGltbWVkaWF0ZWx5IGdldCBpbnRvIGEgd2Vidmlldywgc2V0IG91ciBjb250ZXh0XG4gICAgLy8gYXBwcm9wcmlhdGVseVxuICAgIGlmICh0aGlzLm9wdHMuYXV0b1dlYnZpZXcpIHtcbiAgICAgIGNvbnN0IHZpZXdOYW1lID0gdGhpcy5kZWZhdWx0V2Vidmlld05hbWUoKTtcbiAgICAgIGNvbnN0IHRpbWVvdXQgPSB0aGlzLm9wdHMuYXV0b1dlYnZpZXdUaW1lb3V0IHx8IDIwMDA7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBTZXR0aW5nIGF1dG8gd2VidmlldyB0byBjb250ZXh0ICcke3ZpZXdOYW1lfScgd2l0aCB0aW1lb3V0ICR7dGltZW91dH1tc2ApO1xuICAgICAgYXdhaXQgcmV0cnlJbnRlcnZhbCh0aW1lb3V0IC8gNTAwLCA1MDAsIHRoaXMuc2V0Q29udGV4dC5iaW5kKHRoaXMpLCB2aWV3TmFtZSk7XG4gICAgfVxuXG4gICAgLy8gbm93IHRoYXQgZXZlcnl0aGluZyBoYXMgc3RhcnRlZCBzdWNjZXNzZnVsbHksIHR1cm4gb24gcHJveHlpbmcgc28gYWxsXG4gICAgLy8gc3Vic2VxdWVudCBzZXNzaW9uIHJlcXVlc3RzIGdvIHN0cmFpZ2h0IHRvL2Zyb20gdWlhdXRvbWF0b3IyXG4gICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IHRydWU7XG4gIH1cblxuICBhc3luYyBhZGREZXZpY2VJbmZvVG9DYXBzICgpIHtcbiAgICBjb25zdCB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgcGxhdGZvcm1WZXJzaW9uLFxuICAgICAgbWFudWZhY3R1cmVyLFxuICAgICAgbW9kZWwsXG4gICAgICByZWFsRGlzcGxheVNpemUsXG4gICAgICBkaXNwbGF5RGVuc2l0eSxcbiAgICB9ID0gYXdhaXQgdGhpcy5tb2JpbGVHZXREZXZpY2VJbmZvKCk7XG4gICAgdGhpcy5jYXBzLmRldmljZUFwaUxldmVsID0gcGFyc2VJbnQoYXBpVmVyc2lvbiwgMTApO1xuICAgIHRoaXMuY2Fwcy5wbGF0Zm9ybVZlcnNpb24gPSBwbGF0Zm9ybVZlcnNpb247XG4gICAgdGhpcy5jYXBzLmRldmljZVNjcmVlblNpemUgPSByZWFsRGlzcGxheVNpemU7XG4gICAgdGhpcy5jYXBzLmRldmljZVNjcmVlbkRlbnNpdHkgPSBkaXNwbGF5RGVuc2l0eTtcbiAgICB0aGlzLmNhcHMuZGV2aWNlTW9kZWwgPSBtb2RlbDtcbiAgICB0aGlzLmNhcHMuZGV2aWNlTWFudWZhY3R1cmVyID0gbWFudWZhY3R1cmVyO1xuICB9XG5cbiAgYXN5bmMgaW5pdFVpQXV0b21hdG9yMlNlcnZlciAoKSB7XG4gICAgLy8gYnJva2VuIG91dCBmb3IgcmVhZGFiaWxpdHlcbiAgICBjb25zdCB1aWF1dG9tYXRvcjJPcHRzID0ge1xuICAgICAgaG9zdDogdGhpcy5vcHRzLnJlbW90ZUFkYkhvc3QgfHwgdGhpcy5vcHRzLmhvc3QgfHwgTE9DQUxIT1NUX0lQNCxcbiAgICAgIHN5c3RlbVBvcnQ6IHRoaXMub3B0cy5zeXN0ZW1Qb3J0LFxuICAgICAgZGV2aWNlUG9ydDogREVWSUNFX1BPUlQsXG4gICAgICBhZGI6IHRoaXMuYWRiLFxuICAgICAgYXBrOiB0aGlzLm9wdHMuYXBwLFxuICAgICAgdG1wRGlyOiB0aGlzLm9wdHMudG1wRGlyLFxuICAgICAgYXBwUGFja2FnZTogdGhpcy5vcHRzLmFwcFBhY2thZ2UsXG4gICAgICBhcHBBY3Rpdml0eTogdGhpcy5vcHRzLmFwcEFjdGl2aXR5LFxuICAgICAgZGlzYWJsZVdpbmRvd0FuaW1hdGlvbjogISF0aGlzLm9wdHMuZGlzYWJsZVdpbmRvd0FuaW1hdGlvbixcbiAgICAgIGRpc2FibGVTdXBwcmVzc0FjY2Vzc2liaWxpdHlTZXJ2aWNlOiB0aGlzLm9wdHMuZGlzYWJsZVN1cHByZXNzQWNjZXNzaWJpbGl0eVNlcnZpY2UsXG4gICAgICByZWFkVGltZW91dDogdGhpcy5vcHRzLnVpYXV0b21hdG9yMlNlcnZlclJlYWRUaW1lb3V0LFxuICAgIH07XG4gICAgLy8gbm93IHRoYXQgd2UgaGF2ZSBwYWNrYWdlIGFuZCBhY3Rpdml0eSwgd2UgY2FuIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZlxuICAgIC8vIHVpYXV0b21hdG9yMiB3aXRoIHRoZSBhcHByb3ByaWF0ZSBvcHRpb25zXG4gICAgdGhpcy51aWF1dG9tYXRvcjIgPSBuZXcgVWlBdXRvbWF0b3IyU2VydmVyKHRoaXMubG9nLCB1aWF1dG9tYXRvcjJPcHRzKTtcbiAgICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy51aWF1dG9tYXRvcjIucHJveHlSZXFSZXMuYmluZCh0aGlzLnVpYXV0b21hdG9yMik7XG4gICAgdGhpcy5wcm94eUNvbW1hbmQgPSB0aGlzLnVpYXV0b21hdG9yMi5wcm94eUNvbW1hbmQuYmluZCh0aGlzLnVpYXV0b21hdG9yMik7XG5cbiAgICBpZiAodGhpcy5vcHRzLnNraXBTZXJ2ZXJJbnN0YWxsYXRpb24pIHtcbiAgICAgIHRoaXMubG9nLmluZm8oYCdza2lwU2VydmVySW5zdGFsbGF0aW9uJyBpcyBzZXQuIFNraXBwaW5nIFVJQXV0b21hdG9yMiBzZXJ2ZXIgaW5zdGFsbGF0aW9uLmApO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5pbnN0YWxsU2VydmVyQXBrKHRoaXMub3B0cy51aWF1dG9tYXRvcjJTZXJ2ZXJJbnN0YWxsVGltZW91dCk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5hZGRUb0RldmljZUlkbGVXaGl0ZWxpc3QoXG4gICAgICAgICAgU0VUVElOR1NfSEVMUEVSX1BLR19JRCwgU0VSVkVSX1BBQ0tBR0VfSUQsIFNFUlZFUl9URVNUX1BBQ0tBR0VfSUQsXG4gICAgICAgICk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYENhbm5vdCBhZGQgc2VydmVyIHBhY2thZ2VzIHRvIHRoZSBEb3plIHdoaXRlbGlzdC4gT3JpZ2luYWwgZXJyb3I6IGAgK1xuICAgICAgICAgIChlLnN0ZGVyciB8fCBlLm1lc3NhZ2UpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBpbml0QVVUICgpIHtcbiAgICAvLyBVbmluc3RhbGwgYW55IHVuaW5zdGFsbE90aGVyUGFja2FnZXMgd2hpY2ggd2VyZSBzcGVjaWZpZWQgaW4gY2Fwc1xuICAgIGlmICh0aGlzLm9wdHMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcykge1xuICAgICAgYXdhaXQgaGVscGVycy51bmluc3RhbGxPdGhlclBhY2thZ2VzKFxuICAgICAgICB0aGlzLmFkYixcbiAgICAgICAgaGVscGVycy5wYXJzZUFycmF5KHRoaXMub3B0cy51bmluc3RhbGxPdGhlclBhY2thZ2VzKSxcbiAgICAgICAgW1NFVFRJTkdTX0hFTFBFUl9QS0dfSUQsIFNFUlZFUl9QQUNLQUdFX0lELCBTRVJWRVJfVEVTVF9QQUNLQUdFX0lEXVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBJbnN0YWxsIGFueSBcIm90aGVyQXBwc1wiIHRoYXQgd2VyZSBzcGVjaWZpZWQgaW4gY2Fwc1xuICAgIGlmICh0aGlzLm9wdHMub3RoZXJBcHBzKSB7XG4gICAgICBsZXQgb3RoZXJBcHBzO1xuICAgICAgdHJ5IHtcbiAgICAgICAgb3RoZXJBcHBzID0gaGVscGVycy5wYXJzZUFycmF5KHRoaXMub3B0cy5vdGhlckFwcHMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBDb3VsZCBub3QgcGFyc2UgXCJvdGhlckFwcHNcIiBjYXBhYmlsaXR5OiAke2UubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICAgIG90aGVyQXBwcyA9IGF3YWl0IEIuYWxsKG90aGVyQXBwc1xuICAgICAgICAubWFwKChhcHApID0+IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAoYXBwLCBbQVBLX0VYVEVOU0lPTiwgQVBLU19FWFRFTlNJT05dKSkpO1xuICAgICAgYXdhaXQgaGVscGVycy5pbnN0YWxsT3RoZXJBcGtzKG90aGVyQXBwcywgdGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0cy5hcHApIHtcbiAgICAgIGlmICh0aGlzLm9wdHMubm9SZXNldCAmJiAhKGF3YWl0IHRoaXMuYWRiLmlzQXBwSW5zdGFsbGVkKHRoaXMub3B0cy5hcHBQYWNrYWdlKSlcbiAgICAgICAgICB8fCAhdGhpcy5vcHRzLm5vUmVzZXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLm9wdHMubm9TaWduICYmICFhd2FpdCB0aGlzLmFkYi5jaGVja0Fwa0NlcnQodGhpcy5vcHRzLmFwcCwgdGhpcy5vcHRzLmFwcFBhY2thZ2UsIHtcbiAgICAgICAgICByZXF1aXJlRGVmYXVsdENlcnQ6IGZhbHNlLFxuICAgICAgICB9KSkge1xuICAgICAgICAgIGF3YWl0IGhlbHBlcnMuc2lnbkFwcCh0aGlzLmFkYiwgdGhpcy5vcHRzLmFwcCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLm9wdHMuc2tpcFVuaW5zdGFsbCkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuYWRiLnVuaW5zdGFsbEFwayh0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgaGVscGVycy5pbnN0YWxsQXBrKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoJ25vUmVzZXQgaGFzIGJlZW4gcmVxdWVzdGVkIGFuZCB0aGUgYXBwIGlzIGFscmVhZHkgaW5zdGFsbGVkLiBEb2luZyBub3RoaW5nJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLm9wdHMuZnVsbFJlc2V0KSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ0Z1bGwgcmVzZXQgcmVxdWlyZXMgYW4gYXBwIGNhcGFiaWxpdHksIHVzZSBmYXN0UmVzZXQgaWYgYXBwIGlzIG5vdCBwcm92aWRlZCcpO1xuICAgICAgfVxuICAgICAgdGhpcy5sb2cuZGVidWcoJ05vIGFwcCBjYXBhYmlsaXR5LiBBc3N1bWluZyBpdCBpcyBhbHJlYWR5IG9uIHRoZSBkZXZpY2UnKTtcbiAgICAgIGlmICh0aGlzLm9wdHMuZmFzdFJlc2V0ICYmIHRoaXMub3B0cy5hcHBQYWNrYWdlKSB7XG4gICAgICAgIGF3YWl0IGhlbHBlcnMucmVzZXRBcHAodGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZW5zdXJlQXBwU3RhcnRzICgpIHtcbiAgICAvLyBtYWtlIHN1cmUgd2UgaGF2ZSBhbiBhY3Rpdml0eSBhbmQgcGFja2FnZSB0byB3YWl0IGZvclxuICAgIGNvbnN0IGFwcFdhaXRQYWNrYWdlID0gdGhpcy5vcHRzLmFwcFdhaXRQYWNrYWdlIHx8IHRoaXMub3B0cy5hcHBQYWNrYWdlO1xuICAgIGNvbnN0IGFwcFdhaXRBY3Rpdml0eSA9IHRoaXMub3B0cy5hcHBXYWl0QWN0aXZpdHkgfHwgdGhpcy5vcHRzLmFwcEFjdGl2aXR5O1xuXG4gICAgdGhpcy5sb2cuaW5mbyhgU3RhcnRpbmcgJyR7dGhpcy5vcHRzLmFwcFBhY2thZ2V9LyR7dGhpcy5vcHRzLmFwcEFjdGl2aXR5fSBgICtcbiAgICAgIGBhbmQgd2FpdGluZyBmb3IgJyR7YXBwV2FpdFBhY2thZ2V9LyR7YXBwV2FpdEFjdGl2aXR5fSdgKTtcblxuICAgIGlmICh0aGlzLmNhcHMuYW5kcm9pZENvdmVyYWdlKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBhbmRyb2lkQ292ZXJhZ2UgaXMgY29uZmlndXJlZC4gYCArXG4gICAgICAgIGAgU3RhcnRpbmcgaW5zdHJ1bWVudGF0aW9uIG9mICcke3RoaXMuY2Fwcy5hbmRyb2lkQ292ZXJhZ2V9Jy4uLmApO1xuICAgICAgYXdhaXQgdGhpcy5hZGIuYW5kcm9pZENvdmVyYWdlKHRoaXMuY2Fwcy5hbmRyb2lkQ292ZXJhZ2UsIGFwcFdhaXRQYWNrYWdlLCBhcHBXYWl0QWN0aXZpdHkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5zdGFydEFwcCh7XG4gICAgICAgIHBrZzogdGhpcy5vcHRzLmFwcFBhY2thZ2UsXG4gICAgICAgIGFjdGl2aXR5OiB0aGlzLm9wdHMuYXBwQWN0aXZpdHksXG4gICAgICAgIGFjdGlvbjogdGhpcy5vcHRzLmludGVudEFjdGlvbiB8fCAnYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4nLFxuICAgICAgICBjYXRlZ29yeTogdGhpcy5vcHRzLmludGVudENhdGVnb3J5IHx8ICdhbmRyb2lkLmludGVudC5jYXRlZ29yeS5MQVVOQ0hFUicsXG4gICAgICAgIGZsYWdzOiB0aGlzLm9wdHMuaW50ZW50RmxhZ3MgfHwgJzB4MTAyMDAwMDAnLCAvLyBGTEFHX0FDVElWSVRZX05FV19UQVNLIHwgRkxBR19BQ1RJVklUWV9SRVNFVF9UQVNLX0lGX05FRURFRFxuICAgICAgICB3YWl0UGtnOiB0aGlzLm9wdHMuYXBwV2FpdFBhY2thZ2UsXG4gICAgICAgIHdhaXRBY3Rpdml0eTogdGhpcy5vcHRzLmFwcFdhaXRBY3Rpdml0eSxcbiAgICAgICAgd2FpdEZvckxhdW5jaDogdGhpcy5vcHRzLmFwcFdhaXRGb3JMYXVuY2gsXG4gICAgICAgIHdhaXREdXJhdGlvbjogdGhpcy5vcHRzLmFwcFdhaXREdXJhdGlvbixcbiAgICAgICAgb3B0aW9uYWxJbnRlbnRBcmd1bWVudHM6IHRoaXMub3B0cy5vcHRpb25hbEludGVudEFyZ3VtZW50cyxcbiAgICAgICAgc3RvcEFwcDogIXRoaXMub3B0cy5kb250U3RvcEFwcE9uUmVzZXQsXG4gICAgICAgIHJldHJ5OiB0cnVlLFxuICAgICAgICB1c2VyOiB0aGlzLm9wdHMudXNlclByb2ZpbGUsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVNlc3Npb24gKCkge1xuICAgIHRoaXMubG9nLmRlYnVnKCdEZWxldGluZyBVaUF1dG9tYXRvcjIgc2Vzc2lvbicpO1xuXG4gICAgY29uc3Qgc2NyZWVuUmVjb3JkaW5nU3RvcFRhc2tzID0gW2FzeW5jICgpID0+IHtcbiAgICAgIGlmICghXy5pc0VtcHR5KHRoaXMuX3NjcmVlblJlY29yZGluZ1Byb3BlcnRpZXMpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc3RvcFJlY29yZGluZ1NjcmVlbigpO1xuICAgICAgfVxuICAgIH0sIGFzeW5jICgpID0+IHtcbiAgICAgIGlmIChhd2FpdCB0aGlzLm1vYmlsZUlzTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nUnVubmluZygpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubW9iaWxlU3RvcE1lZGlhUHJvamVjdGlvblJlY29yZGluZygpO1xuICAgICAgfVxuICAgIH0sIGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghXy5pc0VtcHR5KHRoaXMuX3NjcmVlblN0cmVhbWluZ1Byb3BzKSkge1xuICAgICAgICBhd2FpdCB0aGlzLm1vYmlsZVN0b3BTY3JlZW5TdHJlYW1pbmcoKTtcbiAgICAgIH1cbiAgICB9XTtcblxuICAgIGF3YWl0IGFuZHJvaWRIZWxwZXJzLnJlbW92ZUFsbFNlc3Npb25XZWJTb2NrZXRIYW5kbGVycyh0aGlzLnNlcnZlciwgdGhpcy5zZXNzaW9uSWQpO1xuXG4gICAgaWYgKHRoaXMudWlhdXRvbWF0b3IyKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLnN0b3BDaHJvbWVkcml2ZXJQcm94aWVzKCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgVW5hYmxlIHRvIHN0b3AgQ2hyb21lRHJpdmVyIHByb3hpZXM6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5qd3BQcm94eUFjdGl2ZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmRlbGV0ZVNlc3Npb24oKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgdGhpcy5sb2cud2FybihgVW5hYmxlIHRvIHByb3h5IGRlbGV0ZVNlc3Npb24gdG8gVWlBdXRvbWF0b3IyOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnVpYXV0b21hdG9yMiA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuandwUHJveHlBY3RpdmUgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLmFkYikge1xuICAgICAgYXdhaXQgQi5hbGwoc2NyZWVuUmVjb3JkaW5nU3RvcFRhc2tzLm1hcCgodGFzaykgPT4ge1xuICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0YXNrKCk7XG4gICAgICAgICAgfSBjYXRjaCAoaWduKSB7fVxuICAgICAgICB9KSgpO1xuICAgICAgfSkpO1xuXG4gICAgICBpZiAodGhpcy5vcHRzLnVuaWNvZGVLZXlib2FyZCAmJiB0aGlzLm9wdHMucmVzZXRLZXlib2FyZCAmJiB0aGlzLmRlZmF1bHRJTUUpIHtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoYFJlc2V0dGluZyBJTUUgdG8gJyR7dGhpcy5kZWZhdWx0SU1FfSdgKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmFkYi5zZXRJTUUodGhpcy5kZWZhdWx0SU1FKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgdGhpcy5sb2cud2FybihgVW5hYmxlIHRvIHJlc2V0IElNRTogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY2Fwcy5hbmRyb2lkQ292ZXJhZ2UpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbygnU2h1dHRpbmcgZG93biB0aGUgYWRiIHByb2Nlc3Mgb2YgaW5zdHJ1bWVudGF0aW9uLi4uJyk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLmVuZEFuZHJvaWRDb3ZlcmFnZSgpO1xuICAgICAgICAvLyBVc2UgdGhpcyBicm9hZGNhc3QgaW50ZW50IHRvIG5vdGlmeSBpdCdzIHRpbWUgdG8gZHVtcCBjb3ZlcmFnZSB0byBmaWxlXG4gICAgICAgIGlmICh0aGlzLmNhcHMuYW5kcm9pZENvdmVyYWdlRW5kSW50ZW50KSB7XG4gICAgICAgICAgdGhpcy5sb2cuaW5mbyhgU2VuZGluZyBpbnRlbnQgYnJvYWRjYXN0ICcke3RoaXMuY2Fwcy5hbmRyb2lkQ292ZXJhZ2VFbmRJbnRlbnR9JyBhdCB0aGUgZW5kIG9mIGluc3RydW1lbnRpbmcuYCk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5hZGIuYnJvYWRjYXN0KHRoaXMuY2Fwcy5hbmRyb2lkQ292ZXJhZ2VFbmRJbnRlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubG9nLndhcm4oJ05vIGFuZHJvaWRDb3ZlcmFnZUVuZEludGVudCBpcyBjb25maWd1cmVkIGluIGNhcHMuIFBvc3NpYmx5IHlvdSBjYW5ub3QgZ2V0IGNvdmVyYWdlIGZpbGUuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdHMuYXBwUGFja2FnZSkge1xuICAgICAgICBpZiAoIXRoaXMuaXNDaHJvbWVTZXNzaW9uXG4gICAgICAgICAgICAmJiAhdGhpcy5vcHRzLmRvbnRTdG9wQXBwT25SZXNldFxuICAgICAgICAgICAgJiYgIXRoaXMub3B0cy5ub1Jlc2V0KSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYWRiLmZvcmNlU3RvcCh0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aGlzLmxvZy53YXJuKGBVbmFibGUgdG8gZm9yY2Ugc3RvcCBhcHA6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdHMuZnVsbFJlc2V0ICYmICF0aGlzLm9wdHMuc2tpcFVuaW5zdGFsbCkge1xuICAgICAgICAgIHRoaXMubG9nLmRlYnVnKGBDYXBhYmlsaXR5ICdmdWxsUmVzZXQnIHNldCB0byAndHJ1ZScsIFVuaW5zdGFsbGluZyAnJHt0aGlzLm9wdHMuYXBwUGFja2FnZX0nYCk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYWRiLnVuaW5zdGFsbEFwayh0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aGlzLmxvZy53YXJuKGBVbmFibGUgdG8gdW5pbnN0YWxsIGFwcDogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFRoaXMgdmFsdWUgY2FuIGJlIHRydWUgaWYgdGVzdCB0YXJnZXQgZGV2aWNlIGlzIDw9IDI2XG4gICAgICBpZiAodGhpcy5fd2FzV2luZG93QW5pbWF0aW9uRGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbygnUmVzdG9yaW5nIHdpbmRvdyBhbmltYXRpb24gc3RhdGUnKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0QW5pbWF0aW9uU3RhdGUodHJ1ZSk7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLmFkYi5zdG9wTG9nY2F0KCk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLnJlbGVhc2VTeXN0ZW1Qb3J0KCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBVbmFibGUgdG8gcmVtb3ZlIHN5c3RlbSBwb3J0IGZvcndhcmQ6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgICAgLy8gSWdub3JlLCB0aGlzIGJsb2NrIHdpbGwgYWxzbyBiZSBjYWxsZWQgd2hlbiB3ZSBmYWxsIGluIGNhdGNoIGJsb2NrXG4gICAgICAgIC8vIGFuZCBiZWZvcmUgZXZlbiBwb3J0IGZvcndhcmQuXG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLnJlbGVhc2VNanBlZ1NlcnZlclBvcnQoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYFVuYWJsZSB0byByZW1vdmUgTUpQRUcgc2VydmVyIHBvcnQgZm9yd2FyZDogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICAvLyBJZ25vcmUsIHRoaXMgYmxvY2sgd2lsbCBhbHNvIGJlIGNhbGxlZCB3aGVuIHdlIGZhbGwgaW4gY2F0Y2ggYmxvY2tcbiAgICAgICAgLy8gYW5kIGJlZm9yZSBldmVuIHBvcnQgZm9yd2FyZC5cbiAgICAgIH1cblxuICAgICAgaWYgKGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCkgPj0gMjgpIHsgLy8gQW5kcm9pZCBQXG4gICAgICAgIHRoaXMubG9nLmluZm8oJ1Jlc3RvcmluZyBoaWRkZW4gYXBpIHBvbGljeSB0byB0aGUgZGV2aWNlIGRlZmF1bHQgY29uZmlndXJhdGlvbicpO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5zZXREZWZhdWx0SGlkZGVuQXBpUG9saWN5KCEhdGhpcy5vcHRzLmlnbm9yZUhpZGRlbkFwaVBvbGljeUVycm9yKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0cy5yZWJvb3QpIHtcbiAgICAgICAgbGV0IGF2ZE5hbWUgPSB0aGlzLm9wdHMuYXZkLnJlcGxhY2UoJ0AnLCAnJyk7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKGBDbG9zaW5nIGVtdWxhdG9yICcke2F2ZE5hbWV9J2ApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuYWRiLmtpbGxFbXVsYXRvcihhdmROYW1lKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgdGhpcy5sb2cud2FybihgVW5hYmxlIHRvIGNsb3NlIGVtdWxhdG9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLm1qcGVnU3RyZWFtKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKCdDbG9zaW5nIE1KUEVHIHN0cmVhbScpO1xuICAgICAgdGhpcy5tanBlZ1N0cmVhbS5zdG9wKCk7XG4gICAgfVxuICAgIGF3YWl0IHN1cGVyLmRlbGV0ZVNlc3Npb24oKTtcbiAgfVxuXG4gIGFzeW5jIGNoZWNrQXBwUHJlc2VudCAoKSB7XG4gICAgdGhpcy5sb2cuZGVidWcoJ0NoZWNraW5nIHdoZXRoZXIgYXBwIGlzIGFjdHVhbGx5IHByZXNlbnQnKTtcbiAgICBpZiAoIShhd2FpdCBmcy5leGlzdHModGhpcy5vcHRzLmFwcCkpKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBDb3VsZCBub3QgZmluZCBhcHAgYXBrIGF0ICcke3RoaXMub3B0cy5hcHB9J2ApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9uU2V0dGluZ3NVcGRhdGUgKCkge1xuICAgIC8vIGludGVudGlvbmFsbHkgZG8gbm90aGluZyBoZXJlLCBzaW5jZSBjb21tYW5kcy51cGRhdGVTZXR0aW5ncyBwcm94aWVzXG4gICAgLy8gc2V0dGluZ3MgdG8gdGhlIHVpYXV0bzIgc2VydmVyIGFscmVhZHlcbiAgfVxuXG4gIC8vIE5lZWQgdG8gb3ZlcnJpZGUgYW5kcm9pZC1kcml2ZXIncyB2ZXJzaW9uIG9mIHRoaXMgc2luY2Ugd2UgZG9uJ3QgYWN0dWFsbHlcbiAgLy8gaGF2ZSBhIGJvb3RzdHJhcDsgaW5zdGVhZCB3ZSBqdXN0IHJlc3RhcnQgYWRiIGFuZCByZS1mb3J3YXJkIHRoZSBVaUF1dG9tYXRvcjJcbiAgLy8gcG9ydFxuICBhc3luYyB3cmFwQm9vdHN0cmFwRGlzY29ubmVjdCAod3JhcHBlZCkge1xuICAgIGF3YWl0IHdyYXBwZWQoKTtcbiAgICBhd2FpdCB0aGlzLmFkYi5yZXN0YXJ0KCk7XG4gICAgYXdhaXQgdGhpcy5hbGxvY2F0ZVN5c3RlbVBvcnQoKTtcbiAgICBhd2FpdCB0aGlzLmFsbG9jYXRlTWpwZWdTZXJ2ZXJQb3J0KCk7XG4gIH1cblxuICBwcm94eUFjdGl2ZSAoc2Vzc2lvbklkKSB7XG4gICAgc3VwZXIucHJveHlBY3RpdmUoc2Vzc2lvbklkKTtcblxuICAgIC8vIHdlIGFsd2F5cyBoYXZlIGFuIGFjdGl2ZSBwcm94eSB0byB0aGUgVWlBdXRvbWF0b3IyIHNlcnZlclxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY2FuUHJveHkgKHNlc3Npb25JZCkge1xuICAgIHN1cGVyLmNhblByb3h5KHNlc3Npb25JZCk7XG5cbiAgICAvLyB3ZSBjYW4gYWx3YXlzIHByb3h5IHRvIHRoZSB1aWF1dG9tYXRvcjIgc2VydmVyXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBnZXRQcm94eUF2b2lkTGlzdCAoc2Vzc2lvbklkKSB7XG4gICAgc3VwZXIuZ2V0UHJveHlBdm9pZExpc3Qoc2Vzc2lvbklkKTtcbiAgICAvLyB3ZSBhcmUgbWFpbnRhaW5pbmcgdHdvIHNldHMgb2YgTk9fUFJPWFkgbGlzdHMsIG9uZSBmb3IgY2hyb21lZHJpdmVyKENIUk9NRV9OT19QUk9YWSlcbiAgICAvLyBhbmQgb25lIGZvciB1aWF1dG9tYXRvcjIoTk9fUFJPWFkpLCBiYXNlZCBvbiBjdXJyZW50IGNvbnRleHQgd2lsbCByZXR1cm4gcmVsYXRlZCBOT19QUk9YWSBsaXN0XG4gICAgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy5jaHJvbWVkcml2ZXIpKSB7XG4gICAgICAvLyBpZiB0aGUgY3VycmVudCBjb250ZXh0IGlzIHdlYnZpZXcoY2hyb21lZHJpdmVyKSwgdGhlbiByZXR1cm4gQ0hST01FX05PX1BST1hZIGxpc3RcbiAgICAgIHRoaXMuandwUHJveHlBdm9pZCA9IENIUk9NRV9OT19QUk9YWTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5qd3BQcm94eUF2b2lkID0gTk9fUFJPWFk7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdHMubmF0aXZlV2ViU2NyZWVuc2hvdCkge1xuICAgICAgdGhpcy5qd3BQcm94eUF2b2lkID0gWy4uLnRoaXMuandwUHJveHlBdm9pZCwgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvc2NyZWVuc2hvdCcpXV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuandwUHJveHlBdm9pZDtcbiAgfVxuXG4gIGdldCBpc0Nocm9tZVNlc3Npb24gKCkge1xuICAgIHJldHVybiBoZWxwZXJzLmlzQ2hyb21lQnJvd3Nlcih0aGlzLm9wdHMuYnJvd3Nlck5hbWUpO1xuICB9XG59XG5cbi8vIGZpcnN0IGFkZCB0aGUgYW5kcm9pZC1kcml2ZXIgY29tbWFuZHMgd2hpY2ggd2Ugd2lsbCBmYWxsIGJhY2sgdG9cbmZvciAobGV0IFtjbWQsIGZuXSBvZiBfLnRvUGFpcnMoYW5kcm9pZENvbW1hbmRzKSkge1xuICBBbmRyb2lkVWlhdXRvbWF0b3IyRHJpdmVyLnByb3RvdHlwZVtjbWRdID0gZm47XG59XG5cbi8vIHRoZW4gb3ZlcndyaXRlIHdpdGggYW55IHVpYXV0b21hdG9yMi1zcGVjaWZpYyBjb21tYW5kc1xuZm9yIChsZXQgW2NtZCwgZm5dIG9mIF8udG9QYWlycyhjb21tYW5kcykpIHtcbiAgQW5kcm9pZFVpYXV0b21hdG9yMkRyaXZlci5wcm90b3R5cGVbY21kXSA9IGZuO1xufVxuXG5leHBvcnQgeyBBbmRyb2lkVWlhdXRvbWF0b3IyRHJpdmVyIH07XG5leHBvcnQgZGVmYXVsdCBBbmRyb2lkVWlhdXRvbWF0b3IyRHJpdmVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUdBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBLE1BQU1BLE9BQU8sR0FBR0MsTUFBTSxDQUFDQyxNQUFQLENBQWMsRUFBZCxFQUFrQkMsZ0JBQWxCLEVBQXVDQyxtQ0FBdkMsQ0FBaEI7QUFJQSxNQUFNQyxpQkFBaUIsR0FBRyxDQUFDLElBQUQsRUFBTyxJQUFQLENBQTFCOztBQUlBLE1BQU1DLDRCQUE0QixHQUFHQyxhQUFBLENBQUtDLGdCQUFMLENBQ25DQyxhQUFBLENBQUtDLE9BQUwsQ0FBYUMsV0FBQSxDQUFHQyxNQUFILEVBQWIsRUFBMEIsd0JBQTFCLENBRG1DLEVBRW5DO0VBQUNDLE9BQU8sRUFBRSxFQUFWO0VBQWNDLFdBQVcsRUFBRTtBQUEzQixDQUZtQyxDQUFyQzs7QUFPQSxNQUFNQyxXQUFXLEdBQUcsSUFBcEI7QUFJQSxNQUFNQyx3QkFBd0IsR0FBRyxJQUFqQztBQUVBLE1BQU1DLGFBQWEsR0FBRyxXQUF0QjtBQU1BLE1BQU1DLFFBQVEsR0FBRyxDQUNmLENBQUMsS0FBRCxFQUFRLElBQUlDLE1BQUosQ0FBVyxtQkFBWCxDQUFSLENBRGUsRUFFZixDQUFDLEtBQUQsRUFBUSxJQUFJQSxNQUFKLENBQVcsNkJBQVgsQ0FBUixDQUZlLEVBR2YsQ0FBQyxLQUFELEVBQVEsSUFBSUEsTUFBSixDQUFXLDZCQUFYLENBQVIsQ0FIZSxFQUlmLENBQUMsS0FBRCxFQUFRLElBQUlBLE1BQUosQ0FBVywrQ0FBWCxDQUFSLENBSmUsRUFLZixDQUFDLEtBQUQsRUFBUSxJQUFJQSxNQUFKLENBQVcsOENBQVgsQ0FBUixDQUxlLEVBTWYsQ0FBQyxLQUFELEVBQVEsSUFBSUEsTUFBSixDQUFXLGtDQUFYLENBQVIsQ0FOZSxFQU9mLENBQUMsS0FBRCxFQUFRLElBQUlBLE1BQUosQ0FBVyxxQ0FBWCxDQUFSLENBUGUsRUFRZixDQUFDLEtBQUQsRUFBUSxJQUFJQSxNQUFKLENBQVcsaUNBQVgsQ0FBUixDQVJlLEVBU2YsQ0FBQyxLQUFELEVBQVEsSUFBSUEsTUFBSixDQUFXLHlCQUFYLENBQVIsQ0FUZSxFQVVmLENBQUMsS0FBRCxFQUFRLElBQUlBLE1BQUosQ0FBVywwQkFBWCxDQUFSLENBVmUsRUFXZixDQUFDLEtBQUQsRUFBUSxJQUFJQSxNQUFKLENBQVcseUNBQVgsQ0FBUixDQVhlLEVBWWYsQ0FBQyxLQUFELEVBQVEsSUFBSUEsTUFBSixDQUFXLHlDQUFYLENBQVIsQ0FaZSxFQWFmLENBQUMsS0FBRCxFQUFRLElBQUlBLE1BQUosQ0FBVyx1Q0FBWCxDQUFSLENBYmUsRUFjZixDQUFDLEtBQUQsRUFBUSxJQUFJQSxNQUFKLENBQVcsZ0RBQVgsQ0FBUixDQWRlLEVBZWYsQ0FBQyxLQUFELEVBQVEsSUFBSUEsTUFBSixDQUFXLG9DQUFYLENBQVIsQ0FmZSxFQWdCZixDQUFDLEtBQUQsRUFBUSxJQUFJQSxNQUFKLENBQVcsMENBQVgsQ0FBUixDQWhCZSxFQWlCZixDQUFDLEtBQUQsRUFBUSxJQUFJQSxNQUFKLENBQVcsd0NBQVgsQ0FBUixDQWpCZSxFQWtCZixDQUFDLEtBQUQsRUFBUSxJQUFJQSxNQUFKLENBQVcsMkJBQVgsQ0FBUixDQWxCZSxFQW1CZixDQUFDLEtBQUQsRUFBUSxJQUFJQSxNQUFKLENBQVcsMEJBQVgsQ0FBUixDQW5CZSxFQW9CZixDQUFDLEtBQUQsRUFBUSxJQUFJQSxNQUFKLENBQVcsb0NBQVgsQ0FBUixDQXBCZSxFQXFCZixDQUFDLEtBQUQsRUFBUSxJQUFJQSxNQUFKLENBQVcsNEJBQVgsQ0FBUixDQXJCZSxFQXNCZixDQUFDLEtBQUQsRUFBUSxJQUFJQSxNQUFKLENBQVcsMEJBQVgsQ0FBUixDQXRCZSxFQXVCZixDQUFDLEtBQUQsRUFBUSxJQUFJQSxNQUFKLENBQVcscUJBQVgsQ0FBUixDQXZCZSxFQXdCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsOEJBQVgsQ0FBVCxDQXhCZSxFQXlCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcseUJBQVgsQ0FBVCxDQXpCZSxFQTBCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsNkJBQVgsQ0FBVCxDQTFCZSxFQTJCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsMEJBQVgsQ0FBVCxDQTNCZSxFQTRCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsNkNBQVgsQ0FBVCxDQTVCZSxFQTZCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsa0NBQVgsQ0FBVCxDQTdCZSxFQThCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsdUNBQVgsQ0FBVCxDQTlCZSxFQStCZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsc0RBQVgsQ0FBVCxDQS9CZSxFQWdDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsb0RBQVgsQ0FBVCxDQWhDZSxFQWlDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsNENBQVgsQ0FBVCxDQWpDZSxFQWtDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsMkNBQVgsQ0FBVCxDQWxDZSxFQW1DZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsOENBQVgsQ0FBVCxDQW5DZSxFQW9DZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsaUNBQVgsQ0FBVCxDQXBDZSxFQXFDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsdUNBQVgsQ0FBVCxDQXJDZSxFQXNDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsK0NBQVgsQ0FBVCxDQXRDZSxFQXVDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsOENBQVgsQ0FBVCxDQXZDZSxFQXdDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsZ0NBQVgsQ0FBVCxDQXhDZSxFQXlDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcseUJBQVgsQ0FBVCxDQXpDZSxFQTBDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcseUJBQVgsQ0FBVCxDQTFDZSxFQTJDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsMkJBQVgsQ0FBVCxDQTNDZSxFQTRDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsc0JBQVgsQ0FBVCxDQTVDZSxFQTZDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsMEJBQVgsQ0FBVCxDQTdDZSxFQThDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsb0NBQVgsQ0FBVCxDQTlDZSxFQStDZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsMEJBQVgsQ0FBVCxDQS9DZSxFQWdEZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcscUNBQVgsQ0FBVCxDQWhEZSxFQWlEZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcsK0JBQVgsQ0FBVCxDQWpEZSxFQWtEZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFKLENBQVcscUJBQVgsQ0FBVCxDQWxEZSxFQXFEZixDQUFDLEtBQUQsRUFBUSxJQUFJQSxNQUFKLENBQVcsMkJBQVgsQ0FBUixDQXJEZSxFQXNEZixDQUFDLE1BQUQsRUFBUyxJQUFJQSxNQUFK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
|
package/lib/commands/general.js
CHANGED
|
@@ -171,6 +171,10 @@ extensions.executeMobile = async function (mobileCommand, opts = {}) {
|
|
|
171
171
|
unlock: 'mobileUnlock',
|
|
172
172
|
|
|
173
173
|
refreshGpsCache: 'mobileRefreshGpsCache',
|
|
174
|
+
|
|
175
|
+
startMediaProjectionRecording: 'mobileStartMediaProjectionRecording',
|
|
176
|
+
isMediaProjectionRecordingRunning: 'mobileIsMediaProjectionRecordingRunning',
|
|
177
|
+
stopMediaProjectionRecording: 'mobileStopMediaProjectionRecording',
|
|
174
178
|
};
|
|
175
179
|
|
|
176
180
|
if (!_.has(mobileCommandsMapping, mobileCommand)) {
|
package/lib/driver.js
CHANGED
|
@@ -598,16 +598,22 @@ class AndroidUiautomator2Driver extends BaseDriver {
|
|
|
598
598
|
async deleteSession () {
|
|
599
599
|
this.log.debug('Deleting UiAutomator2 session');
|
|
600
600
|
|
|
601
|
-
|
|
601
|
+
const screenRecordingStopTasks = [async () => {
|
|
602
602
|
if (!_.isEmpty(this._screenRecordingProperties)) {
|
|
603
603
|
await this.stopRecordingScreen();
|
|
604
604
|
}
|
|
605
|
-
}
|
|
605
|
+
}, async () => {
|
|
606
|
+
if (await this.mobileIsMediaProjectionRecordingRunning()) {
|
|
607
|
+
await this.mobileStopMediaProjectionRecording();
|
|
608
|
+
}
|
|
609
|
+
}, async () => {
|
|
610
|
+
if (!_.isEmpty(this._screenStreamingProps)) {
|
|
611
|
+
await this.mobileStopScreenStreaming();
|
|
612
|
+
}
|
|
613
|
+
}];
|
|
606
614
|
|
|
607
615
|
await androidHelpers.removeAllSessionWebSocketHandlers(this.server, this.sessionId);
|
|
608
616
|
|
|
609
|
-
await this.mobileStopScreenStreaming();
|
|
610
|
-
|
|
611
617
|
if (this.uiautomator2) {
|
|
612
618
|
try {
|
|
613
619
|
await this.stopChromedriverProxies();
|
|
@@ -626,6 +632,14 @@ class AndroidUiautomator2Driver extends BaseDriver {
|
|
|
626
632
|
this.jwpProxyActive = false;
|
|
627
633
|
|
|
628
634
|
if (this.adb) {
|
|
635
|
+
await B.all(screenRecordingStopTasks.map((task) => {
|
|
636
|
+
(async () => {
|
|
637
|
+
try {
|
|
638
|
+
await task();
|
|
639
|
+
} catch (ign) {}
|
|
640
|
+
})();
|
|
641
|
+
}));
|
|
642
|
+
|
|
629
643
|
if (this.opts.unicodeKeyboard && this.opts.resetKeyboard && this.defaultIME) {
|
|
630
644
|
this.log.debug(`Resetting IME to '${this.defaultIME}'`);
|
|
631
645
|
try {
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "appium-uiautomator2-driver",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.4.0",
|
|
4
4
|
"lockfileVersion": 2,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "appium-uiautomator2-driver",
|
|
9
|
-
"version": "2.
|
|
9
|
+
"version": "2.4.0",
|
|
10
10
|
"engines": [
|
|
11
11
|
"node"
|
|
12
12
|
],
|
|
@@ -6558,9 +6558,9 @@
|
|
|
6558
6558
|
"peer": true
|
|
6559
6559
|
},
|
|
6560
6560
|
"node_modules/electron-to-chromium": {
|
|
6561
|
-
"version": "1.4.
|
|
6562
|
-
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.
|
|
6563
|
-
"integrity": "sha512-
|
|
6561
|
+
"version": "1.4.165",
|
|
6562
|
+
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.165.tgz",
|
|
6563
|
+
"integrity": "sha512-DKQW1lqUSAYQvn9dnpK7mWaDpWbNOXQLXhfCi7Iwx0BKxdZOxkKcCyKw1l3ihWWW5iWSxKKbhEUoNRoHvl/hbA==",
|
|
6564
6564
|
"dev": true
|
|
6565
6565
|
},
|
|
6566
6566
|
"node_modules/emoji-regex": {
|
|
@@ -21579,9 +21579,9 @@
|
|
|
21579
21579
|
}
|
|
21580
21580
|
},
|
|
21581
21581
|
"node_modules/update-browserslist-db": {
|
|
21582
|
-
"version": "1.0.
|
|
21583
|
-
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.
|
|
21584
|
-
"integrity": "sha512-
|
|
21582
|
+
"version": "1.0.3",
|
|
21583
|
+
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.3.tgz",
|
|
21584
|
+
"integrity": "sha512-ufSazemeh9Gty0qiWtoRpJ9F5Q5W3xdIPm1UZQqYQv/q0Nyb9EMHUB2lu+O9x1re9WsorpMAUu4Y6Lxcs5n+XQ==",
|
|
21585
21585
|
"dev": true,
|
|
21586
21586
|
"funding": [
|
|
21587
21587
|
{
|
|
@@ -21599,6 +21599,9 @@
|
|
|
21599
21599
|
},
|
|
21600
21600
|
"bin": {
|
|
21601
21601
|
"browserslist-lint": "cli.js"
|
|
21602
|
+
},
|
|
21603
|
+
"peerDependencies": {
|
|
21604
|
+
"browserslist": ">= 4.21.0"
|
|
21602
21605
|
}
|
|
21603
21606
|
},
|
|
21604
21607
|
"node_modules/update-browserslist-db/node_modules/picocolors": {
|
|
@@ -27423,9 +27426,9 @@
|
|
|
27423
27426
|
"peer": true
|
|
27424
27427
|
},
|
|
27425
27428
|
"electron-to-chromium": {
|
|
27426
|
-
"version": "1.4.
|
|
27427
|
-
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.
|
|
27428
|
-
"integrity": "sha512-
|
|
27429
|
+
"version": "1.4.165",
|
|
27430
|
+
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.165.tgz",
|
|
27431
|
+
"integrity": "sha512-DKQW1lqUSAYQvn9dnpK7mWaDpWbNOXQLXhfCi7Iwx0BKxdZOxkKcCyKw1l3ihWWW5iWSxKKbhEUoNRoHvl/hbA==",
|
|
27429
27432
|
"dev": true
|
|
27430
27433
|
},
|
|
27431
27434
|
"emoji-regex": {
|
|
@@ -39092,9 +39095,9 @@
|
|
|
39092
39095
|
"dev": true
|
|
39093
39096
|
},
|
|
39094
39097
|
"update-browserslist-db": {
|
|
39095
|
-
"version": "1.0.
|
|
39096
|
-
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.
|
|
39097
|
-
"integrity": "sha512-
|
|
39098
|
+
"version": "1.0.3",
|
|
39099
|
+
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.3.tgz",
|
|
39100
|
+
"integrity": "sha512-ufSazemeh9Gty0qiWtoRpJ9F5Q5W3xdIPm1UZQqYQv/q0Nyb9EMHUB2lu+O9x1re9WsorpMAUu4Y6Lxcs5n+XQ==",
|
|
39098
39101
|
"dev": true,
|
|
39099
39102
|
"requires": {
|
|
39100
39103
|
"escalade": "^3.1.1",
|