Socket
Socket
Sign inDemoInstall

@ionic-native/bluetooth-le

Package Overview
Dependencies
Maintainers
6
Versions
76
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@ionic-native/bluetooth-le - npm Package Compare versions

Comparing version 5.22.0-beta-1 to 5.22.0

README.md

8

ngx/index.js

@@ -1,2 +0,2 @@

import * as tslib_1 from "tslib";
import { __decorate, __extends } from "tslib";
import { Injectable } from '@angular/core';

@@ -30,3 +30,3 @@ import { IonicNativePlugin, cordovaPropertyGet, cordovaPropertySet, cordova } from '@ionic-native/core';

var BluetoothLE = /** @class */ (function (_super) {
tslib_1.__extends(BluetoothLE, _super);
__extends(BluetoothLE, _super);
function BluetoothLE() {

@@ -165,3 +165,3 @@ return _super !== null && _super.apply(this, arguments) || this;

BluetoothLE.platforms = ["Android", "iOS"];
BluetoothLE = tslib_1.__decorate([
BluetoothLE = __decorate([
Injectable()

@@ -172,2 +172,2 @@ ], BluetoothLE);

export { BluetoothLE };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvQGlvbmljLW5hdGl2ZS9wbHVnaW5zL2JsdWV0b290aC1sZS9uZ3gvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxzRUFLTixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUEyVmxDLE1BQU0sQ0FBTixJQUFZLGlCQUtYO0FBTEQsV0FBWSxpQkFBaUI7SUFDM0IsZ0dBQTRCLENBQUE7SUFDNUIsdUZBQXVCLENBQUE7SUFDdkIscUZBQXNCLENBQUE7SUFDdEIsMkZBQXlCLENBQUE7QUFDM0IsQ0FBQyxFQUxXLGlCQUFpQixLQUFqQixpQkFBaUIsUUFLNUI7QUFFRCxNQUFNLENBQU4sSUFBWSxrQkFHWDtBQUhELFdBQVksa0JBQWtCO0lBQzVCLDJGQUF3QixDQUFBO0lBQ3hCLHFGQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFIVyxrQkFBa0IsS0FBbEIsa0JBQWtCLFFBRzdCO0FBRUQsTUFBTSxDQUFOLElBQVksaUJBSVg7QUFKRCxXQUFZLGlCQUFpQjtJQUMzQix1R0FBK0IsQ0FBQTtJQUMvQix1R0FBK0IsQ0FBQTtJQUMvQix1R0FBK0IsQ0FBQTtBQUNqQyxDQUFDLEVBSlcsaUJBQWlCLEtBQWpCLGlCQUFpQixRQUk1QjtBQUVELE1BQU0sQ0FBTixJQUFZLHFCQUlYO0FBSkQsV0FBWSxxQkFBcUI7SUFDL0IsMkdBQTZCLENBQUE7SUFDN0IsMkdBQTZCLENBQUE7SUFDN0IseUdBQTRCLENBQUE7QUFDOUIsQ0FBQyxFQUpXLHFCQUFxQixLQUFyQixxQkFBcUIsUUFJaEM7O0lBc0RnQyx1Q0FBaUI7Ozs7SUFRaEQsZ0NBQVUsYUFBQyxNQUFtQjtJQVU5Qiw0QkFBTTtJQVVOLDZCQUFPO0lBYVAsb0NBQWM7SUFnQmQsK0JBQVMsYUFBQyxNQUFrQjtJQVc1Qiw4QkFBUTtJQVlSLHVDQUFpQixhQUFDLE1BRWpCO0lBa0JELDBCQUFJLGFBQUMsTUFBMkI7SUFhaEMsNEJBQU0sYUFBQyxNQUEyQjtJQWlCbEMsNkJBQU8sYUFBQyxNQUdQO0lBV0QsK0JBQVMsYUFBQyxNQUEyQjtJQVlyQyxnQ0FBVSxhQUFDLE1BQTJCO0lBYXRDLDJCQUFLLGFBQUMsTUFBMkI7SUFtQmpDLDhCQUFRLGFBQUMsTUFHUjtJQVlELDhCQUFRLGFBQUMsTUFHUjtJQVlELHFDQUFlLGFBQ2IsTUFBNEI7SUFZOUIsaUNBQVcsYUFBQyxNQUF3QjtJQVdwQywwQkFBSSxhQUFDLE1BQXdCO0lBYTdCLCtCQUFTLGFBQUMsTUFBd0I7SUFXbEMsaUNBQVcsYUFBQyxNQUF3QjtJQVlwQywyQkFBSyxhQUFDLE1BQWlDO0lBWXZDLDRCQUFNLGFBQUMsTUFBaUM7SUFXeEMsb0NBQWMsYUFBQyxNQUFpQztJQVloRCxxQ0FBZSxhQUFDLE1BQTZCO0lBVzdDLDBCQUFJLGFBQUMsTUFBMkI7SUFXaEMseUJBQUcsYUFBQyxNQUF5QztJQVk3QywrQ0FBeUIsYUFBQyxNQUd6QjtJQVVELG1DQUFhO0lBVWIsK0JBQVM7SUFVVCxnQ0FBVTtJQVdWLDhCQUFRLGFBQUMsTUFBMkI7SUFXcEMsa0NBQVksYUFBQyxNQUEyQjtJQVd4QyxpQ0FBVyxhQUFDLE1BQTJCO0lBV3ZDLGtDQUFZLGFBQUMsTUFBMkI7SUFVeEMsbUNBQWE7SUFXYix1Q0FBaUI7SUFVakIsdUNBQWlCO0lBV2pCLHFDQUFlO0lBWWYsMENBQW9CLGFBQ2xCLE1BQTZCO0lBWS9CLGdDQUFVLGFBQUMsTUFHVjtJQVdELG1DQUFhLGFBQUMsTUFFYjtJQVVELHVDQUFpQjtJQWFqQixzQ0FBZ0IsYUFBQyxNQUF5QjtJQVUxQyxxQ0FBZTtJQVVmLG1DQUFhO0lBV2IsNkJBQU8sYUFBQyxNQUFxQjtJQWE3Qiw0QkFBTSxhQUFDLE1BQW9CO0lBVzNCLDBDQUFvQixhQUFDLEtBQWE7SUFXbEMsMENBQW9CLGFBQUMsS0FBaUI7SUFXdEMsbUNBQWEsYUFBQyxLQUFhO0lBVzNCLG1DQUFhLGFBQUMsS0FBaUI7MEJBSy9CLGdEQUF1Qjs7Ozs7OzBCQUV2Qiw0Q0FBbUI7Ozs7OzswQkFFbkIsMkNBQWtCOzs7Ozs7MEJBRWxCLDhDQUFxQjs7Ozs7OzBCQUVyQiw4Q0FBcUI7Ozs7OzswQkFFckIsMENBQWlCOzs7Ozs7MEJBRWpCLG9EQUEyQjs7Ozs7OzBCQUUzQixvREFBMkI7Ozs7OzswQkFFM0Isb0RBQTJCOzs7Ozs7MEJBRTNCLGtEQUF5Qjs7Ozs7OzBCQUV6QixrREFBeUI7Ozs7OzswQkFFekIsaURBQXdCOzs7Ozs7Ozs7Ozs7O0lBcm9CYixXQUFXO1FBRHZCLFVBQVUsRUFBRTtPQUNBLFdBQVc7c0JBOWF4QjtFQThhaUMsaUJBQWlCO1NBQXJDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDb3Jkb3ZhLFxuICBDb3Jkb3ZhUHJvcGVydHksXG4gIElvbmljTmF0aXZlUGx1Z2luLFxuICBQbHVnaW5cbn0gZnJvbSAnQGlvbmljLW5hdGl2ZS9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuLyogQXZhaWxhYmxlIHN0YXR1cyBvZiBkZXZpY2UgKi9cbmV4cG9ydCB0eXBlIFN0YXR1cyA9XG4gIHwgJ3NjYW5TdGFydGVkJ1xuICB8ICdzY2FuU3RvcHBlZCdcbiAgfCAnc2NhblJlc3VsdCdcbiAgfCAnY29ubmVjdGVkJ1xuICB8ICdkaXNjb25uZWN0ZWQnXG4gIHwgJ2JvbmRpbmcnXG4gIHwgJ2JvbmRlZCdcbiAgfCAndW5ib25kZWQnXG4gIHwgJ2Nsb3NlZCdcbiAgfCAnc2VydmljZXMnXG4gIHwgJ2Rpc2NvdmVyZWQnXG4gIHwgJ2NoYXJhY3RlcmlzdGljcydcbiAgfCAnZGVzY3JpcHRvcnMnXG4gIHwgJ3JlYWQnXG4gIHwgJ3N1YnNjcmliZWQnXG4gIHwgJ3Vuc3Vic2NyaWJlZCdcbiAgfCAnc3Vic2NyaWJlZFJlc3VsdCdcbiAgfCAnd3JpdHRlbidcbiAgfCAncmVhZERlc2NyaXB0b3InXG4gIHwgJ3dyaXRlRGVzY3JpcHRvcidcbiAgfCAncnNzaSdcbiAgfCAnbXR1J1xuICB8ICdjb25uZWN0aW9uUHJpb3JpdHlSZXF1ZXN0ZWQnXG4gIHwgJ2VuYWJsZWQnXG4gIHwgJ2Rpc2FibGVkJ1xuICB8ICdyZWFkUmVxdWVzdGVkJ1xuICB8ICd3cml0ZVJlcXVlc3RlZCdcbiAgfCAnbXR1Q2hhbmdlZCdcbiAgfCAnbm90aWZ5UmVhZHknXG4gIHwgJ25vdGlmeVNlbnQnXG4gIHwgJ3NlcnZpY2VBZGRlZCdcbiAgfCAnc2VydmljZVJlbW92ZWQnXG4gIHwgJ2FsbFNlcnZpY2VzUmVtb3ZlZCdcbiAgfCAnYWR2ZXJ0aXNpbmdTdGFydGVkJ1xuICB8ICdhZHZlcnRpc2luZ1N0b3BwZWQnXG4gIHwgJ3Jlc3BvbmRlZCdcbiAgfCAnbm90aWZpZWQnO1xuXG4vKiogQXZhaWxhYmxlIGNvbm5lY3Rpb24gcHJpb3JpdGllcyAqL1xuZXhwb3J0IHR5cGUgQ29ubmVjdGlvblByaW9yaXR5ID0gJ2xvdycgfCAnYmFsYW5jZWQnIHwgJ2hpZ2gnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBhcmFtcyB7XG4gIC8qKiBUaGUgYWRkcmVzcy9pZGVudGlmaWVyIHByb3ZpZGVkIGJ5IHRoZSBzY2FuJ3MgcmV0dXJuIG9iamVjdCAqL1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIC8qKiBUaGUgc2VydmljZSdzIElEICovXG4gIHNlcnZpY2U6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbml0UGVyaXBoZXJhbFBhcmFtcyB7XG4gIC8qKiBTaG91bGQgdXNlciBiZSBwcm9tcHRlZCB0byBlbmFibGUgQmx1ZXRvb3RoICovXG4gIHJlcXVlc3Q/OiBib29sZWFuO1xuICAvKiBBIHVuaXF1ZSBzdHJpbmcgdG8gaWRlbnRpZnkgeW91ciBhcHAuIEJsdWV0b290aCBDZW50cmFsIGJhY2tncm91bmQgbW9kZSBpcyByZXF1aXJlZCB0byB1c2UgdGhpcywgYnV0IGJhY2tncm91bmQgbW9kZSBkb2Vzbid0IHNlZW0gdG8gcmVxdWlyZSBzcGVjaWZ5aW5nIHRoZSByZXN0b3JlS2V5ICovXG4gIHJlc3RvcmVLZXk/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5pdFBhcmFtcyBleHRlbmRzIEluaXRQZXJpcGhlcmFsUGFyYW1zIHtcbiAgLyoqIFNob3VsZCBjaGFuZ2UgaW4gQmx1ZXRvb3RoIHN0YXR1cyBub3RpZmljYXRpb25zIGJlIHNlbnQgKi9cbiAgc3RhdHVzUmVjZWl2ZXI/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNjYW5QYXJhbXMge1xuICAvKiBBbiBhcnJheSBvZiBzZXJ2aWNlIElEcyB0byBmaWx0ZXIgdGhlIHNjYW4gb3IgZW1wdHkgYXJyYXkgLyBudWxsLiBUaGlzIHBhcmFtZXRlciBpcyBub3Qgc3VwcG9ydGVkIG9uIFdpbmRvd3MgcGxhdGZvcm0geWV0ICovXG4gIHNlcnZpY2VzPzogc3RyaW5nW107XG4gIC8qIFRydWUvZmFsc2UgdG8gYWxsb3cgZHVwbGljYXRlIGFkdmVydGlzZW1lbnQgcGFja2V0cywgZGVmYXVsdHMgdG8gZmFsc2UgKGlPUykqL1xuICBhbGxvd0R1cGxpY2F0ZXM/OiBib29sZWFuO1xuICAvKiogRGVmYXVsdHMgdG8gTG93IFBvd2VyLiBBdmFpbGFibGUgZnJvbSBBUEkyMSAvIEFQSSAyMyAoQW5kcm9pZCkgKi9cbiAgc2Nhbk1vZGU/OiBCbHVldG9vdGhTY2FuTW9kZTtcbiAgLyoqIERlZmF1bHRzIHRvIEFnZ3Jlc3NpdmUuIEF2YWlsYWJsZSBmcm9tIEFQSTIzIChBbmRyb2lkKSAqL1xuICBtYXRjaE1vZGU/OiBCbHVldG9vdGhNYXRjaE1vZGU7XG4gIC8qKiBEZWZhdWx0cyB0byBPbmUgQWR2ZXJ0aXNlbWVudC4gQXZhaWxhYmxlIGZyb20gQVBJMjMgKEFuZHJvaWQpICovXG4gIG1hdGNoTnVtPzogQmx1ZXRvb3RoTWF0Y2hOdW07XG4gIC8qKiBEZWZhdWx0cyB0byBBbGwgTWF0Y2hlcy4gQXZhaWxhYmxlIGZyb20gQVBJMjEgLyBBUEkgMjMuIChBbmRyb2lkKSAqL1xuICBjYWxsYmFja1R5cGU/OiBCbHVldG9vdGhDYWxsYmFja1R5cGU7XG4gIC8qKiBUcnVlL2ZhbHNlIHRvIHNob3cgb25seSBjb25uZWN0YWJsZSBkZXZpY2VzLCByYXRoZXIgdGhhbiBhbGwgZGV2aWNlcyBldmVyIHNlZW4sIGRlZmF1bHRzIHRvIGZhbHNlIChXaW5kb3dzKSAqL1xuICBpc0Nvbm5lY3RhYmxlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOb3RpZnlQYXJhbXMge1xuICAvKiogU2VydmljZSdzIFVVSUQgKi9cbiAgc2VydmljZTogc3RyaW5nO1xuICAvKiogQ2hhcmFjdGVyaXN0aWMncyBVVUlEICovXG4gIGNoYXJhY3RlcmlzdGljOiBzdHJpbmc7XG4gIC8qKiBCYXNlNjQgZW5jb2RlZCBzdHJpbmcsIG51bWJlciBvciBzdHJpbmcgKi9cbiAgdmFsdWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXNwb25kUGFyYW1zIHtcbiAgLyoqIFRoaXMgaW50ZWdlciB2YWx1ZSB3aWxsIGJlIGluY3JlbWVudGVkIGV2ZXJ5IHJlYWQvd3JpdGVSZXF1ZXN0ZWQgKi9cbiAgcmVxdWVzdElkOiBudW1iZXI7XG4gIC8qKiBiYXNlNjQgc3RyaW5nICovXG4gIHZhbHVlOiBzdHJpbmc7XG4gIC8qKiBub3QgZG9jdW1lbnRlZCAqL1xuICBvZmZzZXQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhcmFjdGVyaXN0aWNQYXJhbXMgZXh0ZW5kcyBQYXJhbXMge1xuICAvKiogQW4gYXJyYXkgb2YgY2hhcmFjdGVyaXN0aWMgSURzIHRvIGRpc2NvdmVyIG9yIGVtcHR5IGFycmF5IC8gbnVsbCAqL1xuICBjaGFyYWN0ZXJpc3RpY3M/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZXNjcmlwdG9yUGFyYW1zIGV4dGVuZHMgUGFyYW1zIHtcbiAgLyoqIFRoZSBjaGFyYWN0ZXJpc3RpYydzIElEICovXG4gIGNoYXJhY3RlcmlzdGljOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3BlcmF0aW9uRGVzY3JpcHRvclBhcmFtcyBleHRlbmRzIERlc2NyaXB0b3JQYXJhbXMge1xuICAvKiogVGhlIGRlc2NyaXB0b3IncyBJRCAqL1xuICBkZXNjcmlwdG9yOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV3JpdGVDaGFyYWN0ZXJpc3RpY1BhcmFtcyBleHRlbmRzIERlc2NyaXB0b3JQYXJhbXMge1xuICAvKiBCYXNlNjQgZW5jb2RlZCBzdHJpbmcgKi9cbiAgdmFsdWU6IHN0cmluZztcbiAgLyogU2V0IHRvIFwibm9SZXNwb25zZVwiIHRvIGVuYWJsZSB3cml0ZSB3aXRob3V0IHJlc3BvbnNlLCBhbGwgb3RoZXIgdmFsdWVzIHdpbGwgd3JpdGUgbm9ybWFsbHkuICovXG4gIHR5cGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV3JpdGVEZXNjcmlwdG9yUGFyYW1zIGV4dGVuZHMgRGVzY3JpcHRvclBhcmFtcyB7XG4gIC8qKiBUaGUgZGVzY3JpcHRvcidzIElEICovXG4gIGRlc2NyaXB0b3I6IHN0cmluZztcbiAgLyoqIEJhc2U2NCBlbmNvZGVkIHN0cmluZywgbnVtYmVyIG9yIHN0cmluZyAqL1xuICB2YWx1ZTogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBBZHZlcnRpc2luZ1BhcmFtcyA9IEFkdmVydGlzaW5nUGFyYW1zQW5kcm9pZCB8IEFkdmVydGlzaW5nUGFyYW1zSU9TO1xuZXhwb3J0IHR5cGUgQWR2ZXJ0aXNlTW9kZSA9ICdiYWxhbmNlZCcgfCAnbG93TGF0ZW5jeScgfCAnbG93UG93ZXInO1xuZXhwb3J0IHR5cGUgVHhQb3dlckxldmVsID0gJ2hpZ2gnIHwgJ2xvdycgfCAndWx0cmFsb3cnIHwgJ21lZGl1bSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWR2ZXJ0aXNpbmdQYXJhbXNBbmRyb2lkIHtcbiAgLyoqIFNlcnZpY2UgVVVJRCBvbiBBbmRyb2lkICovXG4gIHNlcnZpY2U6IHN0cmluZztcbiAgLyoqIG5vdCBkb2N1bWVudGVkICovXG4gIG1vZGU/OiBBZHZlcnRpc2VNb2RlO1xuICAvKiogbm90IGRvY3VtZW50ZWQgKi9cbiAgY29ubmVjdGFibGU/OiBib29sZWFuO1xuICAvKiogbm90IGRvY3VtZW50ZWQgKi9cbiAgdGltZW91dD86IG51bWJlcjtcbiAgLyoqIG5vdCBkb2N1bWVudGVkICovXG4gIHR4UG93ZXJMZXZlbD86IFR4UG93ZXJMZXZlbDtcbiAgLyoqIG5vdCBkb2N1bWVudGVkICovXG4gIG1hbnVmYWN0dXJlcklkPzogbnVtYmVyO1xuICAvKiogbm90IGRvY3VtZW50ZWQgKi9cbiAgbWFudWZhY3R1cmVyU3BlY2lmaWNEYXRhPzogYW55O1xuICAvKiogbm90IGRvY3VtZW50ZWQgKi9cbiAgaW5jbHVkZURldmljZU5hbWU6IGJvb2xlYW47XG4gIC8qKiBub3QgZG9jdW1lbnRlZCAqL1xuICBpbmNsdWRlVHhQb3dlckxldmVsOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFkdmVydGlzaW5nUGFyYW1zSU9TIHtcbiAgLyoqIEFycmF5IG9mIHNlcnZpY2UgVVVJRHMgb24gaU9TICovXG4gIHNlcnZpY2VzOiBzdHJpbmdbXTtcbiAgLyoqIGRldmljZSdzIG5hbWUgKi9cbiAgbmFtZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21tb25JbmZvIHtcbiAgLyoqIFRoZSBkZXZpY2UncyBkaXNwbGF5IG5hbWUgKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKiogVGhlIGRldmljZSdzIGFkZHJlc3MgLyBpZGVudGlmaWVyIGZvciBjb25uZWN0aW5nIHRvIHRoZSBvYmplY3QgKi9cbiAgYWRkcmVzczogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERldmljZUluZm8gZXh0ZW5kcyBDb21tb25JbmZvIHtcbiAgLyoqIERldmljZSdzIHN0YXR1cyAqL1xuICBzdGF0dXM6IFN0YXR1cztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSU1NJIGV4dGVuZHMgRGV2aWNlSW5mbyB7XG4gIC8qKiBzaWduYWwgc3RyZW5ndGggKi9cbiAgcnNzaTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1UVSBleHRlbmRzIERldmljZUluZm8ge1xuICAvKiBtdHUgdmFsdWUgKi9cbiAgbXR1OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQm9uZGVkU3RhdHVzIGV4dGVuZHMgQ29tbW9uSW5mbyB7XG4gIC8qIEJvbmRlZCBzdGF0dXMqL1xuICBpc0JvbmRlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcmV2Q29ubmVjdGlvblN0YXR1cyBleHRlbmRzIENvbW1vbkluZm8ge1xuICAvKiogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGRldmljZSB3YXMgY29ubmVjdGVkICovXG4gIHdhc0Nvbm5lY3RlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDdXJyQ29ubmVjdGlvblN0YXR1cyBleHRlbmRzIENvbW1vbkluZm8ge1xuICAvKiogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGRldmljZSBpcyBjb25uZWN0ZWQgKi9cbiAgaXNDb25uZWN0ZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlzY292ZXJTdGF0dXMgZXh0ZW5kcyBDb21tb25JbmZvIHtcbiAgLyoqIERldGVybWluZSB3aGV0aGVyIHRoZSBkZXZpY2UncyBjaGFyYWN0ZXJpc3RpY3MgYW5kIGRlc2NyaXB0b3JzIGhhdmUgYmVlbiBkaXNjb3ZlcmVkICovXG4gIGlzRGlzY292ZXJlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTY2FuU3RhdHVzIGV4dGVuZHMgRGV2aWNlSW5mbyB7XG4gIC8qKiBzaWduYWwgc3RyZW5ndGggKi9cbiAgcnNzaTogbnVtYmVyO1xuICAvKipcbiAgICogYWR2ZXJ0aXNlbWVudCBkYXRhIGluIGVuY29kZWQgc3RyaW5nIG9mIGJ5dGVzLCB1c2UgYmx1ZXRvb3RobGUuZW5jb2RlZFN0cmluZ1RvQnl0ZXMoKSAoQW5kcm9pZClcbiAgICogYWR2ZXJ0aXNlbWVudCBoYXNoIHdpdGggdGhlIGtleXMgKGlPUylcbiAgICogZW1wdHkgKFdpbmRvd3MpXG4gICAqL1xuICBhZHZlcnRpc2VtZW50OlxuICAgIHwge1xuICAgICAgICAvKiogQW4gYXJyYXkgb2Ygc2VydmljZSBVVUlEcyAqL1xuICAgICAgICBzZXJ2aWNlVXVpZHM6IHN0cmluZ1tdO1xuICAgICAgICAvKiogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBuYW1lIG9mIHRoZSBtYW51ZmFjdHVyZXIgb2YgdGhlIGRldmljZSAqL1xuICAgICAgICBtYW51ZmFjdHVyZXJEYXRhOiBzdHJpbmc7XG4gICAgICAgIC8qKiBBIG51bWJlciBjb250YWluaW5nIHRoZSB0cmFuc21pdCBwb3dlciBvZiBhIHBlcmlwaGVyYWwgKi9cbiAgICAgICAgdHhQb3dlckxldmVsOiBudW1iZXI7XG4gICAgICAgIC8qKiBBbiBhcnJheSBvZiBvbmUgb3IgbW9yZSBDQlVVSUQgb2JqZWN0cywgcmVwcmVzZW50aW5nIENCU2VydmljZSBVVUlEcyB0aGF0IHdlcmUgZm91bmQgaW4gdGhlIOKAnG92ZXJmbG934oCdIGFyZWEgb2YgdGhlIGFkdmVydGlzZW1lbnQgZGF0YSAqL1xuICAgICAgICBvdmVyZmxvd1NlcnZpY2VVdWlkczogc3RyaW5nW107XG4gICAgICAgIC8qKiBBIGJvb2xlYW4gdmFsdWUgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgYWR2ZXJ0aXNpbmcgZXZlbnQgdHlwZSBpcyBjb25uZWN0YWJsZSAqL1xuICAgICAgICBpc0Nvbm5lY3RhYmxlOiBib29sZWFuO1xuICAgICAgICAvKiogQW4gYXJyYXkgb2Ygb25lIG9yIG1vcmUgQ0JVVUlEIG9iamVjdHMsIHJlcHJlc2VudGluZyBDQlNlcnZpY2UgVVVJRHMgKi9cbiAgICAgICAgc29saWNpdGVkU2VydmljZVV1aWRzOiBzdHJpbmdbXTtcbiAgICAgICAgLyogQSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgc2VydmljZS1zcGVjaWZpYyBhZHZlcnRpc2VtZW50IGRhdGEgKi9cbiAgICAgICAgc2VydmljZURhdGE6IGFueTtcbiAgICAgICAgLyogQSBzdHJpbmcgY29udGFpbmluZyB0aGUgbG9jYWwgbmFtZSBvZiBhIHBlcmlwaGVyYWwgKi9cbiAgICAgICAgbG9jYWxOYW1lOiBzdHJpbmc7XG4gICAgICB9XG4gICAgfCBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZSB7XG4gIC8qKiBTZXJ2aWNlJ3MgdXVpZCAqL1xuICB1dWlkOiBzdHJpbmc7XG4gIC8qKiBBcnJheSBvZiBjaGFyYWN0ZXJpc3RpY3MgKi9cbiAgY2hhcmFjdGVyaXN0aWNzOiBDaGFyYWN0ZXJpc3RpY1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENoYXJhY3RlcmlzdGljIHtcbiAgLyogQXJyYXkgb2YgZGVzY3JpcHRvcnMgKi9cbiAgZGVzY3JpcHRvcnM/OiBEZXNjcmlwdG9yW107XG4gIC8qKiAgQ2hhcmFjdGVyaXN0aWMncyB1dWlkICovXG4gIHV1aWQ6IHN0cmluZztcbiAgLyoqXG4gICAqICBDaGFyYWN0ZXJpc3RpYydzIHByb3BlcnRpZXNcbiAgICogIElmIHRoZSBwcm9wZXJ0eSBpcyBkZWZpbmVkIGFzIGEga2V5LCB0aGUgY2hhcmFjdGVyaXN0aWMgaGFzIHRoYXQgcHJvcGVydHlcbiAgICovXG4gIHByb3BlcnRpZXM/OiB7XG4gICAgd3JpdGU/OiBib29sZWFuO1xuICAgIGJyb2FkY2FzdD86IGJvb2xlYW47XG4gICAgZXh0ZW5kZWRQcm9wcz86IGJvb2xlYW47XG4gICAgd3JpdGVXaXRob3V0UmVzcG9uc2U/OiBib29sZWFuO1xuICAgIHdyaXRlTm9SZXNwb25zZT86IGJvb2xlYW47XG4gICAgc2lnbmVkV3JpdGU/OiBib29sZWFuO1xuICAgIHJlYWQ/OiBib29sZWFuO1xuICAgIG5vdGlmeT86IGJvb2xlYW47XG4gICAgaW5kaWNhdGU/OiBib29sZWFuO1xuICAgIGF1dGhlbnRpY2F0ZWRTaWduZWRXcml0ZXM/OiBib29sZWFuO1xuICAgIG5vdGlmeUVuY3J5cHRpb25SZXF1aXJlZD86IGJvb2xlYW47XG4gICAgaW5kaWNhdGVFbmNyeXB0aW9uUmVxdWlyZWQ/OiBib29sZWFuO1xuICB9O1xuICAvKipcbiAgICogIElmIHRoZSBwZXJtaXNzaW9uIGlzIGRlZmluZWQgYXMgYSBrZXksIHRoZSBjaGFyYWN0ZXIgaGFzIHRoYXQgcGVybWlzc2lvblxuICAgKi9cbiAgcGVybWlzc2lvbnM/OiB7XG4gICAgcmVhZD86IGJvb2xlYW47XG4gICAgcmVhZEVuY3J5cHRlZD86IGJvb2xlYW47XG4gICAgcmVhZEVuY3J5cHRlZE1JVE0/OiBib29sZWFuO1xuICAgIHdyaXRlPzogYm9vbGVhbjtcbiAgICB3cml0ZVNpZ25lZD86IGJvb2xlYW47XG4gICAgd3JpdGVTaWduZWRNSVRNPzogYm9vbGVhbjtcbiAgICB3cml0ZUVuY3J5cHRlZE1JVE0/OiBib29sZWFuO1xuICAgIHJlYWRFbmNyeXB0aW9uUmVxdWlyZWQ/OiBib29sZWFuO1xuICAgIHdyaXRlRW5jcnlwdGlvblJlcXVpcmVkPzogYm9vbGVhbjtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZXNjcmlwdG9yIHtcbiAgdXVpZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERldmljZSBleHRlbmRzIERldmljZUluZm8ge1xuICAvKiogRGV2aWNlJ3Mgc2VydmljZXMgKi9cbiAgc2VydmljZXM6IFNlcnZpY2VbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlcyBleHRlbmRzIERldmljZUluZm8ge1xuICAvKiogQXJyYXkgb2Ygc2VydmljZSBVVUlEUyAqL1xuICBzZXJ2aWNlczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVzY3JpcHRvcnMgZXh0ZW5kcyBEZXZpY2VJbmZvIHtcbiAgLyoqIENoYXJhY3RlcmlzdGljJ3MgVVVJRCAqL1xuICBjaGFyYWN0ZXJpc3RpYzogc3RyaW5nO1xuICAvKiogU2VydmljZSdzIFVVSUQgKi9cbiAgc2VydmljZTogc3RyaW5nO1xuICAvKiBBcnJheSBvZiBkZXNjcmlwdG9yIFVVSURzICovXG4gIGRlc2NyaXB0b3JzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcGVyYXRpb25SZXN1bHQgZXh0ZW5kcyBEZXZpY2VJbmZvIHtcbiAgLyoqIENoYXJhY3RlcmlzdGljIFVVSUQgKi9cbiAgY2hhcmFjdGVyaXN0aWM6IHN0cmluZztcbiAgLyoqIFNlcnZpY2UncyBVVUlEICovXG4gIHNlcnZpY2U6IHN0cmluZztcbiAgLyoqIEJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiBieXRlcyAqL1xuICB2YWx1ZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVuc3Vic2NyaWJlUmVzdWx0IGV4dGVuZHMgRGV2aWNlSW5mbyB7XG4gIC8qKiBDaGFyYWN0ZXJpc3RpYyBVVUlEICovXG4gIGNoYXJhY3RlcmlzdGljOiBzdHJpbmc7XG4gIC8qKiBTZXJ2aWNlJ3MgVVVJRCAqL1xuICBzZXJ2aWNlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVzY3JpcHRvclJlc3VsdCBleHRlbmRzIE9wZXJhdGlvblJlc3VsdCB7XG4gIGRlc2NyaXB0b3I6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDaGFyYWN0ZXJpc3RpY3MgZXh0ZW5kcyBEZXZpY2VJbmZvIHtcbiAgLyoqIFNlcnZpY2UncyBpZCAqL1xuICBzZXJ2aWNlOiBzdHJpbmc7XG4gIC8qIEFycmF5IG9mIGNoYXJhY3RlcmlzdGljIG9iamVjdHMqL1xuICBjaGFyYWN0ZXJpc3RpY3M6IENoYXJhY3RlcmlzdGljW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5pdGlhbGl6ZVJlc3VsdCB7XG4gIC8qKiBEZXZpY2UncyBzdGF0dXMgKi9cbiAgc3RhdHVzOiBTdGF0dXM7XG4gIC8qKiBUaGUgYWRkcmVzcy9pZGVudGlmaWVyIHByb3ZpZGVkIGJ5IHRoZSBzY2FuJ3MgcmV0dXJuIG9iamVjdCAqL1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIC8qKiBTZXJ2aWNlJ3MgVVVJRCAqL1xuICBzZXJ2aWNlOiBzdHJpbmc7XG4gIC8qKiBDaGFyYWN0ZXJpc3RpYyBVVUlEICovXG4gIGNoYXJhY3RlcmlzdGljOiBzdHJpbmc7XG4gIC8qKiBUaGlzIGludGVnZXIgdmFsdWUgd2lsbCBiZSBpbmNyZW1lbnRlZCBldmVyeSByZWFkL3dyaXRlUmVxdWVzdGVkICovXG4gIHJlcXVlc3RJZDogbnVtYmVyO1xuICAvKiogT2Zmc2V0IHZhbHVlICovXG4gIG9mZnNldDogbnVtYmVyO1xuICAvKiogbXR1IHZhbHVlICovXG4gIG10dTogbnVtYmVyO1xuICAvKiogQmFzZTY0IGVuY29kZWQgc3RyaW5nIG9mIGJ5dGVzICovXG4gIHZhbHVlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBlbnVtIEJsdWV0b290aFNjYW5Nb2RlIHtcbiAgU0NBTl9NT0RFX09QUE9SVFVOSVNUSUMgPSAtMSxcbiAgU0NBTl9NT0RFX0xPV19QT1dFUiA9IDAsXG4gIFNDQU5fTU9ERV9CQUxBTkNFRCA9IDEsXG4gIFNDQU5fTU9ERV9MT1dfTEFURU5DWSA9IDJcbn1cblxuZXhwb3J0IGVudW0gQmx1ZXRvb3RoTWF0Y2hNb2RlIHtcbiAgTUFUQ0hfTU9ERV9BR1JFU1NJVkUgPSAxLFxuICBNQVRDSF9NT0RFX1NUSUNLWSA9IDJcbn1cblxuZXhwb3J0IGVudW0gQmx1ZXRvb3RoTWF0Y2hOdW0ge1xuICBNQVRDSF9OVU1fT05FX0FEVkVSVElTRU1FTlQgPSAxLFxuICBNQVRDSF9OVU1fRkVXX0FEVkVSVElTRU1FTlQgPSAyLFxuICBNQVRDSF9OVU1fTUFYX0FEVkVSVElTRU1FTlQgPSAzXG59XG5cbmV4cG9ydCBlbnVtIEJsdWV0b290aENhbGxiYWNrVHlwZSB7XG4gIENBTExCQUNLX1RZUEVfQUxMX01BVENIRVMgPSAxLFxuICBDQUxMQkFDS19UWVBFX0ZJUlNUX01BVENIID0gMixcbiAgQ0FMTEJBQ0tfVFlQRV9NQVRDSF9MT1NUID0gNFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVycm9yIHtcbiAgY29kZTogbnVtYmVyO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRhcHRlckluZm8ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgaXNJbml0aWFsaXplZDogYm9vbGVhbjtcbiAgaXNFbmFibGVkOiBib29sZWFuO1xuICBpc1NjYW5uaW5nOiBib29sZWFuO1xuICBpc0Rpc2NvdmVyYWJsZTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBAbmFtZSBCbHVldG9vdGhMRVxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGlzIHBsdWdpbiBoYXMgdGhlIG1vc3QgY29tcGxldGUgaW1wbGVtZW50YXRpb24gZm9yIGludGVyYWN0aW5nIHdpdGggQmx1ZXRvb3RoIExFIGRldmljZXMgb24gQW5kcm9pZCwgaU9TIGFuZCBwYXJ0aWFsbHkgV2luZG93cy5cbiAqIEl0J3MgYSB3cmFwIGFyb3VuZCBbcmFuZGR1c2luZy9jb3Jkb3ZhLXBsdWdpbi1ibHVldG9vdGhsZV0oaHR0cHM6Ly9naXRodWIuY29tL3JhbmRkdXNpbmcvY29yZG92YS1wbHVnaW4tYmx1ZXRvb3RobGUvYmxvYi9tYXN0ZXIvcmVhZG1lLm1kKSBjb3Jkb3ZhIHBsdWdpbiBmb3IgSW9uaWMuXG4gKiBJdCBzdXBwb3J0cyBwZXJpcGhlcmFsICoqYW5kKiogY2VudHJhbCBtb2RlcyBhbmQgY292ZXJzIG1vc3Qgb2YgdGhlIEFQSSBtZXRob2RzIGF2YWlsYWJsZSBvbiBBbmRyb2lkIGFuZCBpT1MuXG4gKlxuICogQHVzYWdlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBCbHVldG9vdGhMRSB9IGZyb20gJ0Bpb25pYy1uYXRpdmUvYmx1ZXRvb3RoLWxlL25neCc7XG4gKlxuICpcbiAqIGNvbnN0cnVjdG9yKHB1YmxpYyBibHVldG9vdGhsZTogQmx1ZXRvb3RoTEUsIHB1YmxpYyBwbHQ6IFBsYXRmb3JtKSB7XG4gKlxuICogIHRoaXMucGx0LnJlYWR5KCkudGhlbigocmVhZHlTb3VyY2UpID0+IHtcbiAqXG4gKiAgICBjb25zb2xlLmxvZygnUGxhdGZvcm0gcmVhZHkgZnJvbScsIHJlYWR5U291cmNlKTtcbiAqXG4gKiAgICB0aGlzLmJsdWV0b290aGxlLmluaXRpYWxpemUoKS50aGVuKGJsZSA9PiB7XG4gKiAgICAgIGNvbnNvbGUubG9nKCdibGUnLCBibGUuc3RhdHVzKSAvLyBsb2dzICdlbmFibGVkJ1xuICogICAgfSk7XG4gKlxuICogICB9KTtcbiAqIH1cbiAqXG4gKiBgYGBcbiAqXG4gKi9cbkBQbHVnaW4oe1xuICBwbHVnaW5OYW1lOiAnQmx1ZXRvb3RoTEUnLFxuICBwbHVnaW46ICdjb3Jkb3ZhLXBsdWdpbi1ibHVldG9vdGhsZScsIC8vIG5wbSBwYWNrYWdlIG5hbWUsIGV4YW1wbGU6IGNvcmRvdmEtcGx1Z2luLWNhbWVyYVxuICBwbHVnaW5SZWY6ICdibHVldG9vdGhsZScsIC8vIHRoZSB2YXJpYWJsZSByZWZlcmVuY2UgdG8gY2FsbCB0aGUgcGx1Z2luLCBleGFtcGxlOiBuYXZpZ2F0b3IuZ2VvbG9jYXRpb25cbiAgcmVwbzogJ2h0dHBzOi8vZ2l0aHViLmNvbS9yYW5kZHVzaW5nL2NvcmRvdmEtcGx1Z2luLWJsdWV0b290aGxlJywgLy8gdGhlIGdpdGh1YiByZXBvc2l0b3J5IFVSTCBmb3IgdGhlIHBsdWdpblxuICBpbnN0YWxsOiAnaW9uaWMgY29yZG92YSBwbHVnaW4gYWRkIGNvcmRvdmEtcGx1Z2luLWJsdWV0b290aGxlJywgLy8gT1BUSU9OQUwgaW5zdGFsbCBjb21tYW5kLCBpbiBjYXNlIHRoZSBwbHVnaW4gcmVxdWlyZXMgdmFyaWFibGVzXG4gIGluc3RhbGxWYXJpYWJsZXM6IFtdLCAvLyBPUFRJT05BTCB0aGUgcGx1Z2luIHJlcXVpcmVzIHZhcmlhYmxlc1xuICBwbGF0Zm9ybXM6IFsnQW5kcm9pZCcsICdpT1MnXSAvLyBBcnJheSBvZiBwbGF0Zm9ybXMgc3VwcG9ydGVkLCBleGFtcGxlOiBbJ0FuZHJvaWQnLCAnaU9TJ11cbn0pXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQmx1ZXRvb3RoTEUgZXh0ZW5kcyBJb25pY05hdGl2ZVBsdWdpbiB7XG4gIC8qKlxuICAgKiBAbmFtZSBpbml0aWFsaXplXG4gICAqIEluaXRpYWxpemUgQmx1ZXRvb3RoIG9uIHRoZSBkZXZpY2VcbiAgICogQHBhcmFtIHtJbml0UGFyYW1zfSBbcGFyYW1zXVxuICAgKiBAcmV0dXJucyB7KE9ic2VydmFibGU8eyBzdGF0dXM6ICdlbmFibGVkJyB8ICdkaXNhYmxlZCd9Pil9IFRoZSBjYWxsYmFjayB0aGF0IGlzIHBhc3NlZCBpbml0aWFsaXplIHN0YXR1cyAoZW5hYmxlZC9kaXNhYmxlZClcbiAgICovXG4gIEBDb3Jkb3ZhKHsgc3VjY2Vzc0luZGV4OiAwLCBlcnJvckluZGV4OiAyLCBvYnNlcnZhYmxlOiB0cnVlIH0pXG4gIGluaXRpYWxpemUocGFyYW1zPzogSW5pdFBhcmFtcyk6IE9ic2VydmFibGU8eyBzdGF0dXM6ICdlbmFibGVkJyB8ICdkaXNhYmxlZCcgfT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSBlbmFibGUgKEFuZHJvaWQpXG4gICAqIEVuYWJsZSBCbHVldG9vdGggb24gdGhlIGRldmljZS4gQW5kcm9pZCBzdXBwb3J0IG9ubHlcbiAgICogQHJldHVybnMgdm9pZFxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScsIHN5bmM6IHRydWUgfSlcbiAgZW5hYmxlKCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSBkaXNhYmxlIChBbmRyb2lkKVxuICAgKiBEaXNhYmxlIEJsdWV0b290aCBvbiB0aGUgZGV2aWNlLiBBbmRyb2lkIHN1cHBvcnQgb25seVxuICAgKiBAcmV0dXJucyB2b2lkXG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJywgc3luYzogdHJ1ZSB9KVxuICBkaXNhYmxlKCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSBnZXRBZGFwdGVySW5mbyAoQW5kcm9pZClcbiAgICogUmV0cmlldmUgdXNlZnVsIGluZm9ybWF0aW9uIHN1Y2ggYXMgdGhlIGFkZHJlc3MsIG5hbWUsIGFuZCB2YXJpb3VzIHN0YXRlcyAoaW5pdGlhbGl6ZWQsIGVuYWJsZWQsIHNjYW5uaW5nLCBkaXNjb3ZlcmFibGUpLlxuICAgKiBUaGlzIGNhbiBiZSB2ZXJ5IHVzZWZ1bCB3aGVuIHRoZSBnZW5lcmFsIHN0YXRlIG9mIHRoZSBhZGFwdGVyIGhhcyBiZWVuIGxvc3QsIGFuZCB3ZSB3b3VsZCBvdGhlcndpc2UgbmVlZCB0byBnbyB0aHJvdWdoIGEgc2VyaWVzIG9mIGNhbGxiYWNrcyB0byBnZXQgdGhlIGNvcnJlY3Qgc3RhdGUgKGZpcnN0IGluaXRpYWxpemVkLCB0aGVuIGVuYWJsZWQsIHRoZW4gaXNTY2FubmluZywgYW5kIHNvIGZvcnRoKS5cbiAgICogVGhlIHJlc3VsdCBvZiB0aGlzIG1ldGhvZCBhbGxvd3MgdXMgdG8gdGFrZSBidXNpbmVzcyBsb2dpYyBkZWNpc2lvbnMgd2hpbGUgYXZvaWRpbmcgYSBsYXJnZSBwYXJ0IG9mIHRoZSBjYWxsYmFjayBoZWxsLlxuICAgKiBDdXJyZW50bHkgdGhlIGRpc2NvdmVyYWJsZSBzdGF0ZSBkb2VzIG5vdCBoYXZlIGFueSByZWxldmFuY2UgYmVjYXVzZSB0aGVyZSBpcyBubyBcInNldERpc2NvdmVyYWJsZVwiIGZ1bmN0aW9uYWxpdHkgaW4gcGxhY2UuIFRoYXQgbWF5IGNoYW5nZSBpbiB0aGUgZnV0dXJlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxBZGFwdGVySW5mbz59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICBnZXRBZGFwdGVySW5mbygpOiBQcm9taXNlPEFkYXB0ZXJJbmZvPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIHN0YXJ0U2NhblxuICAgKiBTY2FuIGZvciBCbHVldG9vdGggTEUgZGV2aWNlcy5cbiAgICogU2luY2Ugc2Nhbm5pbmcgaXMgZXhwZW5zaXZlLCBzdG9wIGFzIHNvb24gYXMgcG9zc2libGUuIFRoZSBDb3Jkb3ZhIGFwcCBzaG91bGQgdXNlIGEgdGltZXIgdG8gbGltaXQgdGhlIHNjYW4gaW50ZXJ2YWwuXG4gICAqIEFuZHJvaWQgQVBJID49IDIzIHJlcXVpcmVzIEFDQ0VTU19DT0FSU0VfTE9DQVRJT04gcGVybWlzc2lvbnMgdG8gZmluZCB1bnBhaXJlZCBkZXZpY2VzLlxuICAgKiBQZXJtaXNzaW9ucyBjYW4gYmUgcmVxdWVzdGVkIGJ5IHVzaW5nIHRoZSBoYXNQZXJtaXNzaW9uIGFuZCByZXF1ZXN0UGVybWlzc2lvbiBmdW5jdGlvbnMuXG4gICAqIEFuZHJvaWQgQVBJID49IDIzIGFsc28gcmVxdWlyZXMgbG9jYXRpb24gc2VydmljZXMgdG8gYmUgZW5hYmxlZC4gVXNlIGlzTG9jYXRpb25FbmFibGVkIHRvIGRldGVybWluZSB3aGV0aGVyIGxvY2F0aW9uIHNlcnZpY2VzIGFyZSBlbmFibGVkLlxuICAgKiBJZiBub3QgZW5hYmxlZCwgdXNlIHJlcXVlc3RMb2NhdGlvbiB0byBwcm9tcHQgdGhlIGxvY2F0aW9uIHNlcnZpY2VzIHNldHRpbmdzIHBhZ2UuXG4gICAqIEBwYXJhbSB7U2NhblBhcmFtc30gcGFyYW1zIFNjYW4gcGFyYW1zXG4gICAqIEByZXR1cm5zIHsoT2JzZXJ2YWJsZTwgU2NhblN0YXR1cyA+KX1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnLCBvYnNlcnZhYmxlOiB0cnVlIH0pXG4gIHN0YXJ0U2NhbihwYXJhbXM6IFNjYW5QYXJhbXMpOiBPYnNlcnZhYmxlPCBTY2FuU3RhdHVzID4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSBzdG9wU2NhblxuICAgKiBTdG9wIHNjYW4gZm9yIEJsdWV0b290aCBMRSBkZXZpY2VzLiBTaW5jZSBzY2FubmluZyBpcyBleHBlbnNpdmUsIHN0b3AgYXMgc29vbiBhcyBwb3NzaWJsZVxuICAgKiBUaGUgYXBwIHNob3VsZCB1c2UgYSB0aW1lciB0byBsaW1pdCB0aGUgc2Nhbm5pbmcgdGltZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8e3N0YXR1czogJ3NjYW5TdG9wcGVkJ30+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgc3RvcFNjYW4oKTogUHJvbWlzZTx7IHN0YXR1czogJ3NjYW5TdG9wcGVkJyB9PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIHJldHJpZXZlQ29ubmVjdGVkXG4gICAqIFJldHJpZXZlZCBwYWlyZWQgQmx1ZXRvb3RoIExFIGRldmljZXMuIEluIGlPUywgZGV2aWNlcyB0aGF0IGFyZSBcInBhaXJlZFwiIHRvIHdpbGwgbm90IHJldHVybiBkdXJpbmcgYSBub3JtYWwgc2Nhbi5cbiAgICogQ2FsbGJhY2sgaXMgXCJpbnN0YW50XCIgY29tcGFyZWQgdG8gYSBzY2FuLlxuICAgKiBAcGFyYW0ge3sgc2VydmljZXM6IHN0cmluZ1tdIH19IEFuIGFycmF5IG9mIHNlcnZpY2UgSURzIHRvIGZpbHRlciB0aGUgcmV0cmlldmFsIGJ5LiBJZiBubyBzZXJ2aWNlIElEcyBhcmUgc3BlY2lmaWVkLCBubyBkZXZpY2VzIHdpbGwgYmUgcmV0dXJuZWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHsgZGV2aWNlczogRGV2aWNlSW5mb1tdIH0+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgcmV0cmlldmVDb25uZWN0ZWQocGFyYW1zPzoge1xuICAgIHNlcnZpY2VzPzogc3RyaW5nW107XG4gIH0pOiBQcm9taXNlPHsgZGV2aWNlczogRGV2aWNlSW5mb1tdIH0+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgYm9uZCAoQW5kcm9pZClcbiAgICogQm9uZCB3aXRoIGEgZGV2aWNlLlxuICAgKiBUaGUgZGV2aWNlIGRvZXNuJ3QgbmVlZCB0byBiZSBjb25uZWN0ZWQgdG8gaW5pdGlhdGUgYm9uZGluZy4gQW5kcm9pZCBzdXBwb3J0IG9ubHkuXG4gICAqIEBwYXJhbSB7eyBhZGRyZXNzOiBzdHJpbmcgfX0gcGFyYW1zIFRoZSBhZGRyZXNzL2lkZW50aWZpZXIgcHJvdmlkZWQgYnkgdGhlIHNjYW4ncyByZXR1cm4gb2JqZWN0XG4gICAqIEByZXR1cm5zIHsoT2JzZXJ2YWJsZTx7IHN0YXR1czogRGV2aWNlSW5mbyB9Pil9XG4gICAqIHN1Y2Nlc3M6XG4gICAqICAgIFRoZSBmaXJzdCBzdWNjZXNzIGNhbGxiYWNrIHNob3VsZCBhbHdheXMgcmV0dXJuIHdpdGggc3RhdHVzID09IGJvbmRpbmcuXG4gICAqICAgIElmIHRoZSBib25kIGlzIGNyZWF0ZWQsIHRoZSBjYWxsYmFjayB3aWxsIHJldHVybiBhZ2FpbiB3aXRoIHN0YXR1cyA9PSBib25kZWQuXG4gICAqICAgIElmIHRoZSBib25kaW5nIHBvcHVwIGlzIGNhbmNlbGVkIG9yIHRoZSB3cm9uZyBjb2RlIGlzIGVudGVyZWQsIHRoZSBjYWxsYmFjayB3aWxsIHJldHVybiBhZ2FpbiB3aXRoIHN0YXR1cyA9PSB1bmJvbmRlZC5cbiAgICogZXJyb3I6XG4gICAqICAgIFRoZSBjYWxsYmFjayB0aGF0IHdpbGwgYmUgdHJpZ2dlcmVkIHdoZW4gdGhlIGJvbmQgb3BlcmF0aW9uIGZhaWxzXG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJywgb2JzZXJ2YWJsZTogdHJ1ZSB9KVxuICBib25kKHBhcmFtczogeyBhZGRyZXNzOiBzdHJpbmcgfSk6IE9ic2VydmFibGU8eyBzdGF0dXM6IERldmljZUluZm8gfT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSB1bmJvbmQgKEFuZHJvaWQpXG4gICAqIFVuYm9uZCB3aXRoIGEgZGV2aWNlLiBUaGUgZGV2aWNlIGRvZXNuJ3QgbmVlZCB0byBiZSBjb25uZWN0ZWQgdG8gaW5pdGlhdGUgYm9uZGluZy4gQW5kcm9pZCBzdXBwb3J0IG9ubHkuXG4gICAqIEBwYXJhbSB7e2FkZHJlc3M6IHN0cmluZ319IHBhcmFtcyBUaGUgYWRkcmVzcy9pZGVudGlmaWVyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHsgc3RhdHVzOiBEZXZpY2VJbmZvIH0+fVxuICAgKiAgICBzdWNjZXNzOiBUaGUgc3VjY2VzcyBjYWxsYmFjayBzaG91bGQgYWx3YXlzIHJldHVybiB3aXRoIHN0YXR1cyA9PSB1bmJvbmRlZCwgdGhhdCBpcyBwYXNzZWQgd2l0aCBkZXZpY2Ugb2JqZWN0XG4gICAqICAgIGVycm9yOiBUaGUgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIHRyaWdnZXJlZCB3aGVuIHRoZSB1bmJvbmQgb3BlcmF0aW9uIGZhaWxzXG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICB1bmJvbmQocGFyYW1zOiB7IGFkZHJlc3M6IHN0cmluZyB9KTogUHJvbWlzZTx7IHN0YXR1czogRGV2aWNlSW5mbyB9PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIGNvbm5lY3RcbiAgICogQ29ubmVjdCB0byBhIEJsdWV0b290aCBMRSBkZXZpY2VcbiAgICogQHBhcmFtIGNvbm5lY3RTdWNjZXNzIFRoZSBzdWNjZXNzIGNhbGxiYWNrIHRoYXQgaXMgcGFzc2VkIHdpdGggZGV2aWNlIG9iamVjdFxuICAgKiBAcGFyYW0gY29ubmVjdEVycm9yICAgVGhlIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSB0cmlnZ2VyZWQgd2hlbiB0aGUgY29ubmVjdCBvcGVyYXRpb24gZmFpbHNcbiAgICogQHBhcmFtIHBhcmFtcyAgICAgICAgIFRoZSBhZGRyZXNzL2lkZW50aWZpZXJcbiAgICpcbiAgICogQHBhcmFtIHt7YWRkcmVzczogc3RyaW5nLCBhdXRvQ29ubmVjdDogYm9vbGVhbn19IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7KE9ic2VydmFibGU8eyBzdGF0dXM6IERldmljZUluZm8gfT4pfVxuICAgKiAgICBzdWNjZXNzOiBkZXZpY2Ugb2JqZWN0IHdpdGggc3RhdHVzXG4gICAqICAgIGVycm9yOiBUaGUgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIHRyaWdnZXJlZCB3aGVuIHRoZSB1bmJvbmQgb3BlcmF0aW9uIGZhaWxzXG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJywgb2JzZXJ2YWJsZTogdHJ1ZSB9KVxuICBjb25uZWN0KHBhcmFtczoge1xuICAgIGFkZHJlc3M6IHN0cmluZztcbiAgICBhdXRvQ29ubmVjdD86IGJvb2xlYW47XG4gIH0pOiBPYnNlcnZhYmxlPCBEZXZpY2VJbmZvID4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSByZWNvbm5lY3RcbiAgICogUmVjb25uZWN0IHRvIGEgcHJldmlvdXNseSBjb25uZWN0ZWQgQmx1ZXRvb3RoIGRldmljZVxuICAgKiBAcGFyYW0ge3thZGRyZXNzOiBzdHJpbmd9fSBwYXJhbXMgVGhlIGFkZHJlc3MvaWRlbnRpZmllclxuICAgKiBAcmV0dXJucyB7KE9ic2VydmFibGU8eyBzdGF0dXM6IERldmljZUluZm8gfT4pfVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScsIG9ic2VydmFibGU6IHRydWUgfSlcbiAgcmVjb25uZWN0KHBhcmFtczogeyBhZGRyZXNzOiBzdHJpbmcgfSk6IE9ic2VydmFibGU8eyBzdGF0dXM6IERldmljZUluZm8gfT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSBkaXNjb25uZWN0XG4gICAqIERpc2Nvbm5lY3QgZnJvbSBhIEJsdWV0b290aCBMRSBkZXZpY2UuXG4gICAqICAgICAgICAgICAgICBOb3RlOiBJdCdzIHNpbXBsZXIgdG8ganVzdCBjYWxsIGNsb3NlKCkuIFN0YXJ0aW5nIHdpdGggaU9TIDEwLCBkaXNjb25uZWN0aW5nIGJlZm9yZSBjbG9zaW5nIHNlZW1zIHJlcXVpcmVkIVxuICAgKiBAcGFyYW0ge3thZGRyZXNzOiBzdHJpbmd9fSBwYXJhbXMgVGhlIGFkZHJlc3MvaWRlbnRpZmllclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxEZXZpY2VJbmZvPn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIGRpc2Nvbm5lY3QocGFyYW1zOiB7IGFkZHJlc3M6IHN0cmluZyB9KTogUHJvbWlzZTxEZXZpY2VJbmZvPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIGNsb3NlXG4gICAqIENsb3NlL2Rpc3Bvc2UgYSBCbHVldG9vdGggTEUgZGV2aWNlLlxuICAgKiBQcmlvciB0byAyLjcuMCwgeW91IG5lZWRlZCB0byBkaXNjb25uZWN0IHRvIHRoZSBkZXZpY2UgYmVmb3JlIGNsb3NpbmcsIGJ1dCB0aGlzIGlzIG5vIGxvbmdlciB0aGUgY2FzZS5cbiAgICogU3RhcnRpbmcgd2l0aCBpT1MgMTAsIGRpc2Nvbm5lY3RpbmcgYmVmb3JlIGNsb3Npbmcgc2VlbXMgcmVxdWlyZWQhXG4gICAqIEBwYXJhbSB7eyBhZGRyZXNzOiBzdHJpbmcgfX0gcGFyYW1zIFRoZSBhZGRyZXNzL2lkZW50aWZpZXJcbiAgICogQHJldHVybnMge1Byb21pc2U8RGV2aWNlSW5mbz59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICBjbG9zZShwYXJhbXM6IHsgYWRkcmVzczogc3RyaW5nIH0pOiBQcm9taXNlPERldmljZUluZm8+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgZGlzY292ZXJcbiAgICogRGlzY292ZXIgYWxsIHRoZSBkZXZpY2VzIHNlcnZpY2VzLCBjaGFyYWN0ZXJpc3RpY3MgYW5kIGRlc2NyaXB0b3JzLlxuICAgKiBEb2Vzbid0IG5lZWQgdG8gYmUgY2FsbGVkIGFnYWluIGFmdGVyIGRpc2Nvbm5lY3RpbmcgYW5kIHRoZW4gcmVjb25uZWN0aW5nLlxuICAgKiBJZiB1c2luZyBpT1MsIHlvdSBzaG91bGRuJ3QgdXNlIGRpc2NvdmVyIGFuZCBzZXJ2aWNlcy9jaGFyYWN0ZXJpc3RpY3MvZGVzY3JpcHRvcnMgb24gdGhlIHNhbWUgZGV2aWNlLlxuICAgKiBUaGVyZSBzZWVtcyB0byBiZSBhbiBpc3N1ZSB3aXRoIGNhbGxpbmcgZGlzY292ZXIgb24gaU9TOCBkZXZpY2VzLCBzbyB1c2Ugd2l0aCBjYXV0aW9uLlxuICAgKiBPbiBzb21lIEFuZHJvaWQgdmVyc2lvbnMsIHRoZSBkaXNjb3ZlcmVkIHNlcnZpY2VzIG1heSBiZSBjYWNoZWQgZm9yIGEgZGV2aWNlLlxuICAgKiBTdWJzZXF1ZW50IGRpc2NvdmVyIGV2ZW50cyB3aWxsIG1ha2UgdXNlIG9mIHRoaXMgY2FjaGUuXG4gICAqIElmIHlvdXIgZGV2aWNlJ3Mgc2VydmljZXMgY2hhbmdlLCBzZXQgdGhlIGNsZWFyQ2FjaGUgcGFyYW1ldGVyIHRvIGZvcmNlIEFuZHJvaWQgdG8gcmUtZGlzY292ZXIgc2VydmljZXMuXG4gICAqIEBwYXJhbSB7eyBhZGRyZXNzOiBzdHJpbmcsIGNsZWFyQ2FjaGU6IGJvb2xlYW4gfX0gcGFyYW1zIFRoZSBhZGRyZXNzL2lkZW50aWZpZXJcbiAgICogQHJldHVybnMge1Byb21pc2U8RGV2aWNlPn1cbiAgICogICAgc3VjY2VzczogZGV2aWNlIG9iamVjdCAoY29udGFpbnMgYXJyYXkgb2Ygc2VydmljZSBvYmplY3RzKVxuICAgKiAgICBlcnJvcjogVGhlIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSB0cmlnZ2VyZWQgd2hlbiB0aGUgdW5ib25kIG9wZXJhdGlvbiBmYWlsc1xuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgZGlzY292ZXIocGFyYW1zOiB7XG4gICAgYWRkcmVzczogc3RyaW5nO1xuICAgIGNsZWFyQ2FjaGU/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTxEZXZpY2U+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgc2VydmljZXMgKGlPUylcbiAgICogRGlzY292ZXIgdGhlIGRldmljZSdzIHNlcnZpY2VzLlxuICAgKiBOb3QgcHJvdmlkaW5nIGFuIGFycmF5IG9mIHNlcnZpY2VzIHdpbGwgcmV0dXJuIGFsbCBzZXJ2aWNlcyBhbmQgdGFrZSBsb25nZXIgdG8gZGlzY292ZXIuIGlPUyBzdXBwb3J0IG9ubHkuXG4gICAqIEBwYXJhbSB7e2FkZHJlc3M6IHN0cmluZywgc2VydmljZXM6IHN0cmluZ1tdfX0gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFNlcnZpY2VzPn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIHNlcnZpY2VzKHBhcmFtczoge1xuICAgIGFkZHJlc3M6IHN0cmluZztcbiAgICBzZXJ2aWNlcz86IHN0cmluZ1tdO1xuICB9KTogUHJvbWlzZTxTZXJ2aWNlcz4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSBjaGFyYWN0ZXJpc3RpY3MgKGlPUylcbiAgICogRGlzY292ZXIgdGhlIHNlcnZpY2UncyBjaGFyYWN0ZXJpc3RpY3MuXG4gICAqIE5vdCBwcm92aWRpbmcgYW4gYXJyYXkgb2YgY2hhcmFjdGVyaXN0aWNzIHdpbGwgcmV0dXJuIGFsbCBjaGFyYWN0ZXJpc3RpY3MgYW5kIHRha2UgbG9uZ2VyIHRvIGRpc2NvdmVyLiBpT1Mgc3VwcG9ydCBvbmx5LlxuICAgKiBAcGFyYW0ge0NoYXJhY3RlcmlzdGljUGFyYW1zfSBwYXJhbXMgQ2hhcmFjdGVyaXN0aWMgcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHsgY2hhcmFjdGVyaXN0aWNzOiBDaGFyYWN0ZXJpc3RpY3MgfT59IFRoZSBzZXJ2aWNlIGlkIGFuZCBhbiBBcnJheSBvZiBjaGFyYWN0ZXJpc3RpY3NcbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIGNoYXJhY3RlcmlzdGljcyhcbiAgICBwYXJhbXM6IENoYXJhY3RlcmlzdGljUGFyYW1zXG4gICk6IFByb21pc2U8eyBjaGFyYWN0ZXJpc3RpY3M6IENoYXJhY3RlcmlzdGljcyB9PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIGRlc2NyaXB0b3JzIChpT1MpXG4gICAqIERpc2NvdmVyIHRoZSBjaGFyYWN0ZXJpc3RpYydzIGRlc2NyaXB0b3JzLiBpT1Mgc3VwcG9ydCBvbmx5LlxuICAgKiBAcGFyYW0ge0Rlc2NyaXB0b3JQYXJhbXN9IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7IGRlc2NyaXB0b3JzOiBEZXNjcmlwdG9ycyB9Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIGRlc2NyaXB0b3JzKHBhcmFtczogRGVzY3JpcHRvclBhcmFtcyk6IFByb21pc2U8eyBkZXNjcmlwdG9yczogRGVzY3JpcHRvcnMgfT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSByZWFkXG4gICAqIFJlYWQgYSBwYXJ0aWN1bGFyIHNlcnZpY2UncyBjaGFyYWN0ZXJpc3RpYyBvbmNlXG4gICAqIEBwYXJhbSB7RGVzY3JpcHRvclBhcmFtc30gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPE9wZXJhdGlvblJlc3VsdD59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICByZWFkKHBhcmFtczogRGVzY3JpcHRvclBhcmFtcyk6IFByb21pc2U8T3BlcmF0aW9uUmVzdWx0PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIHN1YnNjcmliZVxuICAgKiBTdWJzY3JpYmUgdG8gYSBwYXJ0aWN1bGFyIHNlcnZpY2UncyBjaGFyYWN0ZXJpc3RpYy5cbiAgICogT25jZSBhIHN1YnNjcmlwdGlvbiBpcyBubyBsb25nZXIgbmVlZGVkLCBleGVjdXRlIHVuc3Vic2NyaWJlIGluIGEgc2ltaWxhciBmYXNoaW9uLlxuICAgKiBUaGUgQ2xpZW50IENvbmZpZ3VyYXRpb24gZGVzY3JpcHRvciB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgd3JpdHRlbiB0byBlbmFibGUgbm90aWZpY2F0aW9uL2luZGljYXRpb24gYmFzZWQgb24gdGhlIGNoYXJhY3RlcmlzdGljJ3MgcHJvcGVydGllcy5cbiAgICogQHBhcmFtIHtEZXNjcmlwdG9yUGFyYW1zfSBwYXJhbXNcbiAgICogQHJldHVybnMge09ic2VydmFibGU8T3BlcmF0aW9uUmVzdWx0Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnLCBvYnNlcnZhYmxlOiB0cnVlIH0pXG4gIHN1YnNjcmliZShwYXJhbXM6IERlc2NyaXB0b3JQYXJhbXMpOiBPYnNlcnZhYmxlPE9wZXJhdGlvblJlc3VsdD4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSB1bnN1YnNjcmliZVxuICAgKiBVbnN1YnNjcmliZSB0byBhIHBhcnRpY3VsYXIgc2VydmljZSdzIGNoYXJhY3RlcmlzdGljLlxuICAgKiBAcGFyYW0ge0Rlc2NyaXB0b3JQYXJhbXN9IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxVbnN1YnNjcmliZVJlc3VsdD59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICB1bnN1YnNjcmliZShwYXJhbXM6IERlc2NyaXB0b3JQYXJhbXMpOiBQcm9taXNlPFVuc3Vic2NyaWJlUmVzdWx0PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIHdyaXRlIChsaW1pdGF0aW9uIG9uIGlPUywgcmVhZCBiZWxvdylcbiAgICogV3JpdGUgYSBwYXJ0aWN1bGFyIHNlcnZpY2UncyBjaGFyYWN0ZXJpc3RpY1xuICAgKiBOb3RlOiBubyBjYWxsYmFjayB3aWxsIG9jY3VyIG9uIHdyaXRlIHdpdGhvdXQgcmVzcG9uc2Ugb24gaU9TLlxuICAgKiBAcGFyYW0ge1dyaXRlQ2hhcmFjdGVyaXN0aWNQYXJhbXN9IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxPcGVyYXRpb25SZXN1bHQ+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgd3JpdGUocGFyYW1zOiBXcml0ZUNoYXJhY3RlcmlzdGljUGFyYW1zKTogUHJvbWlzZTxPcGVyYXRpb25SZXN1bHQ+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgd3JpdGUgKGxpbWl0YXRpb24gb24gaU9TLCByZWFkIGJlbG93KVxuICAgKiBXcml0ZSBRdWljayAvIFF1ZXVlLCB1c2UgdGhpcyBtZXRob2QgdG8gcXVpY2tseSBleGVjdXRlIHdyaXRlIHdpdGhvdXQgcmVzcG9uc2UgY29tbWFuZHMgd2hlbiB3cml0aW5nIG1vcmUgdGhhbiAyMCBieXRlcyBhdCBhIHRpbWUuXG4gICAqIE5vdGU6IG5vIGNhbGxiYWNrIHdpbGwgb2NjdXIgb24gd3JpdGUgd2l0aG91dCByZXNwb25zZSBvbiBpT1MuXG4gICAqIEBwYXJhbSB7V3JpdGVDaGFyYWN0ZXJpc3RpY1BhcmFtc30gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPE9wZXJhdGlvblJlc3VsdD59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICB3cml0ZVEocGFyYW1zOiBXcml0ZUNoYXJhY3RlcmlzdGljUGFyYW1zKTogUHJvbWlzZTxPcGVyYXRpb25SZXN1bHQ+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgcmVhZERlc2NyaXB0b3JcbiAgICogUmVhZCBhIHBhcnRpY3VsYXIgY2hhcmFjdGVyaXN0J3MgZGVzY3JpcHRvclxuICAgKiBAcGFyYW0ge09wZXJhdGlvbkRlc2NyaXB0b3JQYXJhbXN9IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxEZXNjcmlwdG9yUmVzdWx0Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIHJlYWREZXNjcmlwdG9yKHBhcmFtczogT3BlcmF0aW9uRGVzY3JpcHRvclBhcmFtcyk6IFByb21pc2U8RGVzY3JpcHRvclJlc3VsdD4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSB3cml0ZURlc2NyaXB0b3JcbiAgICogV3JpdGUgYSBwYXJ0aWN1bGFyIGNoYXJhY3RlcmlzdGljJ3MgZGVzY3JpcHRvci4gVW5hYmxlIHRvIHdyaXRlIGNoYXJhY3RlcmlzdGljIGNvbmZpZ3VyYXRpb24gZGlyZWN0bHkgdG8ga2VlcCBpbiBsaW5lIHdpdGggaU9TIGltcGxlbWVudGF0aW9uLlxuICAgKiBJbnN0ZWFkIHVzZSBzdWJzY3JpYmUvdW5zdWJzY3JpYmUsIHdoaWNoIHdpbGwgYXV0b21hdGljYWxseSBlbmFibGUvZGlzYWJsZSBub3RpZmljYXRpb24uXG4gICAqIEBwYXJhbSB7V3JpdGVEZXNjcmlwdG9yUGFyYW1zfSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8RGVzY3JpcHRvclJlc3VsdD59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICB3cml0ZURlc2NyaXB0b3IocGFyYW1zOiBXcml0ZURlc2NyaXB0b3JQYXJhbXMpOiBQcm9taXNlPERlc2NyaXB0b3JSZXN1bHQ+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgcnNzaVxuICAgKiBSZWFkIFJTU0kgb2YgYSBjb25uZWN0ZWQgZGV2aWNlLiBSU1NJIGlzIGFsc28gcmV0dXJuZWQgd2l0aCBzY2FubmluZy5cbiAgICogQHBhcmFtIHt7IGFkZHJlc3M6IHN0cmluZyB9fSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8IFJTU0kgPn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIHJzc2kocGFyYW1zOiB7IGFkZHJlc3M6IHN0cmluZyB9KTogUHJvbWlzZTwgUlNTSSA+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgbXR1IChBbmRyb2lkLCBBbmRyb2lkIDUrKVxuICAgKiBTZXQgTVRVIG9mIGEgY29ubmVjdGVkIGRldmljZS4gQW5kcm9pZCBvbmx5LlxuICAgKiBAcGFyYW0ge3sgYWRkcmVzczogc3RyaW5nLCBtdHU6IG51bWJlciB9fSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8IE1UVSA+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgbXR1KHBhcmFtczogeyBhZGRyZXNzOiBzdHJpbmc7IG10dT86IG51bWJlciB9KTogUHJvbWlzZTwgTVRVID4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSByZXF1ZXN0Q29ubmVjdGlvblByaW9yaXR5IChBbmRyb2lkLCBBbmRyb2lkIDUrKVxuICAgKiBSZXF1ZXN0IGEgY2hhbmdlIGluIHRoZSBjb25uZWN0aW9uIHByaW9yaXR5IHRvIGltcHJvdmUgdGhyb3VnaHB1dCB3aGVuIHRyYW5zZmVyIGxhcmdlIGFtb3VudHMgb2YgZGF0YSB2aWEgQkxFLlxuICAgKiBBbmRyb2lkIHN1cHBvcnQgb25seS4gaU9TIHdpbGwgcmV0dXJuIGVycm9yLlxuICAgKiBAcGFyYW0ge3sgYWRkcmVzczogc3RyaW5nLCBjb25uZWN0aW9uUHJpb3JpdHk6IENvbm5lY3Rpb25Qcmlvcml0eSB9fSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8RGV2aWNlSW5mbz59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICByZXF1ZXN0Q29ubmVjdGlvblByaW9yaXR5KHBhcmFtczoge1xuICAgIGFkZHJlc3M6IHN0cmluZztcbiAgICBjb25uZWN0aW9uUHJpb3JpdHk6IENvbm5lY3Rpb25Qcmlvcml0eTtcbiAgfSk6IFByb21pc2U8RGV2aWNlSW5mbz4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSBpc0luaXRpYWxpemVkXG4gICAqIERldGVybWluZSB3aGV0aGVyIHRoZSBhZGFwdGVyIGlzIGluaXRpYWxpemVkLiBObyBlcnJvciBjYWxsYmFjay4gUmV0dXJucyB0cnVlIG9yIGZhbHNlXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHsgaXNJbml0aWFsaXplZDogYm9vbGVhbiB9Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIGlzSW5pdGlhbGl6ZWQoKTogUHJvbWlzZTx7IGlzSW5pdGlhbGl6ZWQ6IGJvb2xlYW4gfT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSBpc0VuYWJsZWRcbiAgICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGFkYXB0ZXIgaXMgZW5hYmxlZC4gTm8gZXJyb3IgY2FsbGJhY2tcbiAgICogQHJldHVybnMge1Byb21pc2U8eyBpc0VuYWJsZWQ6IGJvb2xlYW4gfT59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICBpc0VuYWJsZWQoKTogUHJvbWlzZTx7IGlzRW5hYmxlZDogYm9vbGVhbiB9PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIGlzU2Nhbm5pbmdcbiAgICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGFkYXB0ZXIgaXMgc2Nhbm5pbmcuIE5vIGVycm9yIGNhbGxiYWNrLiBSZXR1cm5zIHRydWUgb3IgZmFsc2VcbiAgICogQHJldHVybnMge1Byb21pc2U8eyBpc1NjYW5uaW5nOiBib29sZWFuIH0+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgaXNTY2FubmluZygpOiBQcm9taXNlPHsgaXNTY2FubmluZzogYm9vbGVhbiB9PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIGlzQm9uZGVkIChBbmRyb2lkKVxuICAgKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgZGV2aWNlIGlzIGJvbmRlZCBvciBub3QsIG9yIGVycm9yIGlmIG5vdCBpbml0aWFsaXplZC4gQW5kcm9pZCBzdXBwb3J0IG9ubHkuXG4gICAqIEBwYXJhbSB7eyBhZGRyZXNzOiBzdHJpbmcgfX0gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEJvbmRlZFN0YXR1cz59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICBpc0JvbmRlZChwYXJhbXM6IHsgYWRkcmVzczogc3RyaW5nIH0pOiBQcm9taXNlPEJvbmRlZFN0YXR1cz4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSB3YXNDb25uZWN0ZWRcbiAgICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGRldmljZSB3YXMgY29ubmVjdGVkLCBvciBlcnJvciBpZiBub3QgaW5pdGlhbGl6ZWQuXG4gICAqIEBwYXJhbSB7eyBhZGRyZXNzOiBzdHJpbmcgfX0gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFByZXZDb25uZWN0aW9uU3RhdHVzPn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIHdhc0Nvbm5lY3RlZChwYXJhbXM6IHsgYWRkcmVzczogc3RyaW5nIH0pOiBQcm9taXNlPFByZXZDb25uZWN0aW9uU3RhdHVzPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIGlzQ29ubmVjdGVkXG4gICAqIERldGVybWluZSB3aGV0aGVyIHRoZSBkZXZpY2UgaXMgY29ubmVjdGVkLCBvciBlcnJvciBpZiBub3QgaW5pdGlhbGl6ZWQgb3IgbmV2ZXIgY29ubmVjdGVkIHRvIGRldmljZVxuICAgKiBAcGFyYW0ge3sgYWRkcmVzczogc3RyaW5nIH19IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDdXJyQ29ubmVjdGlvblN0YXR1cz59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICBpc0Nvbm5lY3RlZChwYXJhbXM6IHsgYWRkcmVzczogc3RyaW5nIH0pOiBQcm9taXNlPEN1cnJDb25uZWN0aW9uU3RhdHVzPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIGlzRGlzY292ZXJlZFxuICAgKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgZGV2aWNlJ3MgY2hhcmFjdGVyaXN0aWNzIGFuZCBkZXNjcmlwdG9ycyBoYXZlIGJlZW4gZGlzY292ZXJlZCwgb3IgZXJyb3IgaWYgbm90IGluaXRpYWxpemVkIG9yIG5vdCBjb25uZWN0ZWQgdG8gZGV2aWNlLlxuICAgKiBAcGFyYW0ge3sgYWRkcmVzczogc3RyaW5nIH19IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxEaXNjb3ZlclN0YXR1cz59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICBpc0Rpc2NvdmVyZWQocGFyYW1zOiB7IGFkZHJlc3M6IHN0cmluZyB9KTogUHJvbWlzZTxEaXNjb3ZlclN0YXR1cz4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSBoYXNQZXJtaXNzaW9uICh1c2VmdWwgb25seSBmb3IgQW5kcm9pZCA2KyAvIEFQSSAyMylcbiAgICogRGV0ZXJtaW5lIHdoZXRoZXIgY29hcnNlIGxvY2F0aW9uIHByaXZpbGVnZXMgYXJlIGdyYW50ZWQgc2luY2Ugc2Nhbm5pbmcgZm9yIHVucGFpcmVkIGRldmljZXMgcmVxdWlyZXMgaXQgaW4gQW5kcm9pZCBBUEkgMjNcbiAgICogQHJldHVybnMge1Byb21pc2U8eyBoYXNQZXJtaXNzaW9uOiBib29sZWFuIH0+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgaGFzUGVybWlzc2lvbigpOiBQcm9taXNlPHsgaGFzUGVybWlzc2lvbjogYm9vbGVhbiB9PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIHJlcXVlc3RQZXJtaXNzaW9uICh1c2VmdWwgb25seSBmb3IgQW5kcm9pZCA2KyAvIEFQSSAyMylcbiAgICogUmVxdWVzdCBjb2Fyc2UgbG9jYXRpb24gcHJpdmlsZWdlcyBzaW5jZSBzY2FubmluZyBmb3IgdW5wYWlyZWQgZGV2aWNlcyByZXF1aXJlcyBpdCBpbiBBbmRyb2lkIEFQSSAyMy5cbiAgICogV2lsbCByZXR1cm4gYW4gZXJyb3IgaWYgY2FsbGVkIG9uIGlPUyBvciBBbmRyb2lkIHZlcnNpb25zIHByaW9yIHRvIDYuMC5cbiAgICogQHJldHVybnMge1Byb21pc2U8eyByZXF1ZXN0UGVybWlzc2lvbjogYm9vbGVhbiB9Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIHJlcXVlc3RQZXJtaXNzaW9uKCk6IFByb21pc2U8eyByZXF1ZXN0UGVybWlzc2lvbjogYm9vbGVhbiB9PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIGlzTG9jYXRpb25FbmFibGVkICh1c2VmdWwgb25seSBmb3IgQW5kcm9pZCA2KyAvIEFQSSAyMylcbiAgICogRGV0ZXJtaW5lIGlmIGxvY2F0aW9uIHNlcnZpY2VzIGFyZSBlbmFibGVkIG9yIG5vdC4gTG9jYXRpb24gU2VydmljZXMgYXJlIHJlcXVpcmVkIHRvIGZpbmQgZGV2aWNlcyBpbiBBbmRyb2lkIEFQSSAyM1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7IGlzTG9jYXRpb25FbmFibGVkOiBib29sZWFuIH0+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgaXNMb2NhdGlvbkVuYWJsZWQoKTogUHJvbWlzZTx7IGlzTG9jYXRpb25FbmFibGVkOiBib29sZWFuIH0+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgcmVxdWVzdExvY2F0aW9uICh1c2VmdWwgb25seSBmb3IgQW5kcm9pZCA2KyAvIEFQSSAyMylcbiAgICogUHJvbXB0IGxvY2F0aW9uIHNlcnZpY2VzIHNldHRpbmdzIHBhZ2VzLiByZXF1ZXN0TG9jYXRpb24gcHJvcGVydHkgcmV0dXJucyB3aGV0aGVyIGxvY2F0aW9uIHNlcnZpY2VzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkLlxuICAgKiBMb2NhdGlvbiBTZXJ2aWNlcyBhcmUgcmVxdWlyZWQgdG8gZmluZCBkZXZpY2VzIGluIEFuZHJvaWQgQVBJIDIzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7IHJlcXVlc3RMb2NhdGlvbjogYm9vbGVhbiB9Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIHJlcXVlc3RMb2NhdGlvbigpOiBQcm9taXNlPHsgcmVxdWVzdExvY2F0aW9uOiBib29sZWFuIH0+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgaW5pdGlhbGl6ZVBlcmlwaGVyYWxcbiAgICogSW5pdGlhbGl6ZSBCbHVldG9vdGggb24gdGhlIGRldmljZS4gTXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueXRoaW5nIGVsc2UuXG4gICAqIENhbGxiYWNrIHdpbGwgY29udGludW91c2x5IGJlIHVzZWQgd2hlbmV2ZXIgQmx1ZXRvb3RoIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuXG4gICAqIEBwYXJhbSB7SW5pdFBlcmlwaGVyYWxQYXJhbXN9IFtwYXJhbXNdXG4gICAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPEluaXRpYWxpemVSZXN1bHQ+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScsIG9ic2VydmFibGU6IHRydWUgfSlcbiAgaW5pdGlhbGl6ZVBlcmlwaGVyYWwoXG4gICAgcGFyYW1zPzogSW5pdFBlcmlwaGVyYWxQYXJhbXNcbiAgKTogT2JzZXJ2YWJsZTxJbml0aWFsaXplUmVzdWx0PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIGFkZFNlcnZpY2VcbiAgICogQWRkIGEgc2VydmljZSB3aXRoIGNoYXJhY3RlcmlzdGljcyBhbmQgZGVzY3JpcHRvcnMuIElmIG1vcmUgdGhhbiBvbmUgc2VydmljZSBpcyBhZGRlZCwgYWRkIHRoZW0gc2VxdWVudGlhbGx5XG4gICAqIEBwYXJhbSB7eyBzZXJ2aWNlOiBzdHJpbmcsIGNoYXJhY3RlcmlzdGljczogQ2hhcmFjdGVyaXN0aWNbXSB9fSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8eyBzZXJ2aWNlOiBzdHJpbmcsIHN0YXR1czogU3RhdHVzIH0+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgYWRkU2VydmljZShwYXJhbXM6IHtcbiAgICBzZXJ2aWNlOiBzdHJpbmc7XG4gICAgY2hhcmFjdGVyaXN0aWNzOiBDaGFyYWN0ZXJpc3RpY1tdO1xuICB9KTogUHJvbWlzZTx7IHNlcnZpY2U6IHN0cmluZzsgc3RhdHVzOiBTdGF0dXMgfT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSByZW1vdmVTZXJ2aWNlXG4gICAqIFJlbW92ZSBhIHNlcnZpY2VcbiAgICogQHBhcmFtIHt7IHNlcnZpY2U6IHN0cmluZyB9fSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8eyBzZXJ2aWNlOiBzdHJpbmcsIHN0YXR1czogU3RhdHVzIH0+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgcmVtb3ZlU2VydmljZShwYXJhbXM6IHtcbiAgICBzZXJ2aWNlOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPHsgc2VydmljZTogc3RyaW5nOyBzdGF0dXM6IFN0YXR1cyB9PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIHJlbW92ZUFsbFNlcnZpY2VzXG4gICAqIFJlbW92ZSBhbGwgc2VydmljZXNcbiAgICogQHJldHVybnMge1Byb21pc2U8eyBzdGF0dXM6IFN0YXR1cyB9Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIHJlbW92ZUFsbFNlcnZpY2VzKCk6IFByb21pc2U8eyBzdGF0dXM6IFN0YXR1cyB9PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIHN0YXJ0QWR2ZXJ0aXNpbmcgKGRpZmZlcmVudCBiZWhhdmlvciBvbiBBbmRyb2lkL2lPUywgcmVhZCBiZWxvdylcbiAgICogU3RhcnQgYWR2ZXJ0aXNpbmcgYXMgYSBCTEUgZGV2aWNlLlxuICAgKiBOb3RlOiBUaGlzIG5lZWRzIHRvIGJlIGltcHJvdmVkIHNvIHNlcnZpY2VzIGNhbiBiZSB1c2VkIGZvciBib3RoIEFuZHJvaWQgYW5kIGlPUy5cbiAgICogT24gaU9TLCB0aGUgYWR2ZXJ0aXNpbmcgZGV2aWNlcyBsaWtlcyB0byByZW5hbWUgaXRzZWxmIGJhY2sgdG8gdGhlIG5hbWUgb2YgdGhlIGRldmljZSwgaS5lLiBSYW5kJyBpUGhvbmVcbiAgICogQHBhcmFtIHtBZHZlcnRpc2luZ1BhcmFtc30gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHsgc3RhdHVzOiBTdGF0dXMgfT59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICBzdGFydEFkdmVydGlzaW5nKHBhcmFtczogQWR2ZXJ0aXNpbmdQYXJhbXMpOiBQcm9taXNlPHsgc3RhdHVzOiBTdGF0dXMgfT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSBzdG9wQWR2ZXJ0aXNpbmdcbiAgICogU3RvcCBhZHZlcnRpc2luZ1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7IHN0YXR1czogU3RhdHVzIH0+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgc3RvcEFkdmVydGlzaW5nKCk6IFByb21pc2U8eyBzdGF0dXM6IFN0YXR1cyB9PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIGlzQWR2ZXJ0aXNpbmdcbiAgICogRGV0ZXJtaW5lIGlmIGFwcCBpcyBhZHZlcnRpc2luZyBvciBub3QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHsgc3RhdHVzOiBib29sZWFuIH0+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgaXNBZHZlcnRpc2luZygpOiBQcm9taXNlPHsgc3RhdHVzOiBib29sZWFuIH0+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgcmVzcG9uZFxuICAgKiBSZXNwb25kIHRvIGEgcmVhZCBvciB3cml0ZSByZXF1ZXN0XG4gICAqIEBwYXJhbSB7UmVzcG9uZFBhcmFtc30gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHsgc3RhdHVzOiBTdGF0dXMgfT59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICByZXNwb25kKHBhcmFtczogUmVzcG9uZFBhcmFtcyk6IFByb21pc2U8eyBzdGF0dXM6IFN0YXR1cyB9PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIG5vdGlmeVxuICAgKiBVcGRhdGUgYSB2YWx1ZSBmb3IgYSBzdWJzY3JpcHRpb24uIEN1cnJlbnRseSBhbGwgc3Vic2NyaWJlZCBkZXZpY2VzIHdpbGwgcmVjZWl2ZSB1cGRhdGUuXG4gICAqIERldmljZSBzcGVjaWZpYyB1cGRhdGVzIHdpbGwgYmUgYWRkZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICogSWYgc2VudCBlcXVhbHMgZmFsc2UgaW4gdGhlIHJldHVybiB2YWx1ZSwgeW91IG11c3Qgd2FpdCBmb3IgdGhlIHBlcmlwaGVyYWxNYW5hZ2VySXNSZWFkeVRvVXBkYXRlU3Vic2NyaWJlcnMgZXZlbnQgYmVmb3JlIHNlbmRpbmcgbW9yZSB1cGRhdGVzLlxuICAgKiBAcGFyYW0ge05vdGlmeVBhcmFtc30gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHsgc3RhdHVzOiBTdGF0dXMsIHNlbnQ6IGJvb2xlYW4gfT59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICBub3RpZnkocGFyYW1zOiBOb3RpZnlQYXJhbXMpOiBQcm9taXNlPHsgc3RhdHVzOiBTdGF0dXM7IHNlbnQ6IGJvb2xlYW4gfT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSBlbmNvZGVkU3RyaW5nVG9CeXRlc1xuICAgKiBIZWxwZXIgZnVuY3Rpb24gdG8gY29udmVydCBhIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBmcm9tIGEgY2hhcmFjdGVyaXN0aWMgb3IgZGVzY3JpcHRvciB2YWx1ZSBpbnRvIGEgdWludDhBcnJheSBvYmplY3RcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcmV0dXJucyB7VWludDhBcnJheX1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgc3luYzogdHJ1ZSB9KVxuICBlbmNvZGVkU3RyaW5nVG9CeXRlcyh2YWx1ZTogc3RyaW5nKTogVWludDhBcnJheSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIGJ5dGVzVG9FbmNvZGVkU3RyaW5nXG4gICAqIEhlbHBlciBmdW5jdGlvbiB0byBjb252ZXJ0IGEgdW5pdDhBcnJheSB0byBhIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBmb3IgYSBjaGFyYWN0ZXJpYyBvciBkZXNjcmlwdG9yIHdyaXRlXG4gICAqIEBwYXJhbSB7VWludDhBcnJheX0gYnl0ZXNcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIEBDb3Jkb3ZhKHsgc3luYzogdHJ1ZSB9KVxuICBieXRlc1RvRW5jb2RlZFN0cmluZyh2YWx1ZTogVWludDhBcnJheSk6IHN0cmluZyB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIHN0cmluZ1RvQnl0ZXNcbiAgICogSGVscGVyIGZ1bmN0aW9uIHRvIGNvbnZlcnQgYSBzdHJpbmcgdG8gYnl0ZXNcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gICAqIEByZXR1cm5zIHtVaW50OEFycmF5fVxuICAgKi9cbiAgQENvcmRvdmEoeyBzeW5jOiB0cnVlIH0pXG4gIHN0cmluZ1RvQnl0ZXModmFsdWU6IHN0cmluZyk6IFVpbnQ4QXJyYXkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSBieXRlc1RvU3RyaW5nXG4gICAqIEhlbHBlciBmdW5jdGlvbiB0byBjb252ZXJ0IGJ5dGVzIHRvIGEgc3RyaW5nLlxuICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IHZhbHVlXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBAQ29yZG92YSh7IHN5bmM6IHRydWUgfSlcbiAgYnl0ZXNUb1N0cmluZyh2YWx1ZTogVWludDhBcnJheSk6IHN0cmluZyB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgQENvcmRvdmFQcm9wZXJ0eSgpXG4gIFNDQU5fTU9ERV9PUFBPUlRVTklTVElDOiBudW1iZXI7XG4gIEBDb3Jkb3ZhUHJvcGVydHkoKVxuICBTQ0FOX01PREVfTE9XX1BPV0VSOiBudW1iZXI7XG4gIEBDb3Jkb3ZhUHJvcGVydHkoKVxuICBTQ0FOX01PREVfQkFMQU5DRUQ6IG51bWJlcjtcbiAgQENvcmRvdmFQcm9wZXJ0eSgpXG4gIFNDQU5fTU9ERV9MT1dfTEFURU5DWTogbnVtYmVyO1xuICBAQ29yZG92YVByb3BlcnR5KClcbiAgTUFUQ0hfTU9ERV9BR0dSRVNTSVZFOiBudW1iZXI7XG4gIEBDb3Jkb3ZhUHJvcGVydHkoKVxuICBNQVRDSF9NT0RFX1NUSUNLWTogbnVtYmVyO1xuICBAQ29yZG92YVByb3BlcnR5KClcbiAgTUFUQ0hfTlVNX09ORV9BRFZFUlRJU0VNRU5UOiBudW1iZXI7XG4gIEBDb3Jkb3ZhUHJvcGVydHkoKVxuICBNQVRDSF9OVU1fRkVXX0FEVkVSVElTRU1FTlQ6IG51bWJlcjtcbiAgQENvcmRvdmFQcm9wZXJ0eSgpXG4gIE1BVENIX05VTV9NQVhfQURWRVJUSVNFTUVOVDogbnVtYmVyO1xuICBAQ29yZG92YVByb3BlcnR5KClcbiAgQ0FMTEJBQ0tfVFlQRV9BTExfTUFUQ0hFUzogbnVtYmVyO1xuICBAQ29yZG92YVByb3BlcnR5KClcbiAgQ0FMTEJBQ0tfVFlQRV9GSVJTVF9NQVRDSDogbnVtYmVyO1xuICBAQ29yZG92YVByb3BlcnR5KClcbiAgQ0FMTEJBQ0tfVFlQRV9NQVRDSF9MT1NUOiBudW1iZXI7XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvQGlvbmljLW5hdGl2ZS9wbHVnaW5zL2JsdWV0b290aC1sZS9uZ3gvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxzRUFLTixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUEyVmxDLE1BQU0sQ0FBTixJQUFZLGlCQUtYO0FBTEQsV0FBWSxpQkFBaUI7SUFDM0IsZ0dBQTRCLENBQUE7SUFDNUIsdUZBQXVCLENBQUE7SUFDdkIscUZBQXNCLENBQUE7SUFDdEIsMkZBQXlCLENBQUE7QUFDM0IsQ0FBQyxFQUxXLGlCQUFpQixLQUFqQixpQkFBaUIsUUFLNUI7QUFFRCxNQUFNLENBQU4sSUFBWSxrQkFHWDtBQUhELFdBQVksa0JBQWtCO0lBQzVCLDJGQUF3QixDQUFBO0lBQ3hCLHFGQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFIVyxrQkFBa0IsS0FBbEIsa0JBQWtCLFFBRzdCO0FBRUQsTUFBTSxDQUFOLElBQVksaUJBSVg7QUFKRCxXQUFZLGlCQUFpQjtJQUMzQix1R0FBK0IsQ0FBQTtJQUMvQix1R0FBK0IsQ0FBQTtJQUMvQix1R0FBK0IsQ0FBQTtBQUNqQyxDQUFDLEVBSlcsaUJBQWlCLEtBQWpCLGlCQUFpQixRQUk1QjtBQUVELE1BQU0sQ0FBTixJQUFZLHFCQUlYO0FBSkQsV0FBWSxxQkFBcUI7SUFDL0IsMkdBQTZCLENBQUE7SUFDN0IsMkdBQTZCLENBQUE7SUFDN0IseUdBQTRCLENBQUE7QUFDOUIsQ0FBQyxFQUpXLHFCQUFxQixLQUFyQixxQkFBcUIsUUFJaEM7O0lBc0RnQywrQkFBaUI7Ozs7SUFRaEQsZ0NBQVUsYUFBQyxNQUFtQjtJQVU5Qiw0QkFBTTtJQVVOLDZCQUFPO0lBYVAsb0NBQWM7SUFnQmQsK0JBQVMsYUFBQyxNQUFrQjtJQVc1Qiw4QkFBUTtJQVlSLHVDQUFpQixhQUFDLE1BRWpCO0lBa0JELDBCQUFJLGFBQUMsTUFBMkI7SUFhaEMsNEJBQU0sYUFBQyxNQUEyQjtJQWlCbEMsNkJBQU8sYUFBQyxNQUdQO0lBV0QsK0JBQVMsYUFBQyxNQUEyQjtJQVlyQyxnQ0FBVSxhQUFDLE1BQTJCO0lBYXRDLDJCQUFLLGFBQUMsTUFBMkI7SUFtQmpDLDhCQUFRLGFBQUMsTUFHUjtJQVlELDhCQUFRLGFBQUMsTUFHUjtJQVlELHFDQUFlLGFBQ2IsTUFBNEI7SUFZOUIsaUNBQVcsYUFBQyxNQUF3QjtJQVdwQywwQkFBSSxhQUFDLE1BQXdCO0lBYTdCLCtCQUFTLGFBQUMsTUFBd0I7SUFXbEMsaUNBQVcsYUFBQyxNQUF3QjtJQVlwQywyQkFBSyxhQUFDLE1BQWlDO0lBWXZDLDRCQUFNLGFBQUMsTUFBaUM7SUFXeEMsb0NBQWMsYUFBQyxNQUFpQztJQVloRCxxQ0FBZSxhQUFDLE1BQTZCO0lBVzdDLDBCQUFJLGFBQUMsTUFBMkI7SUFXaEMseUJBQUcsYUFBQyxNQUF5QztJQVk3QywrQ0FBeUIsYUFBQyxNQUd6QjtJQVVELG1DQUFhO0lBVWIsK0JBQVM7SUFVVCxnQ0FBVTtJQVdWLDhCQUFRLGFBQUMsTUFBMkI7SUFXcEMsa0NBQVksYUFBQyxNQUEyQjtJQVd4QyxpQ0FBVyxhQUFDLE1BQTJCO0lBV3ZDLGtDQUFZLGFBQUMsTUFBMkI7SUFVeEMsbUNBQWE7SUFXYix1Q0FBaUI7SUFVakIsdUNBQWlCO0lBV2pCLHFDQUFlO0lBWWYsMENBQW9CLGFBQ2xCLE1BQTZCO0lBWS9CLGdDQUFVLGFBQUMsTUFHVjtJQVdELG1DQUFhLGFBQUMsTUFFYjtJQVVELHVDQUFpQjtJQWFqQixzQ0FBZ0IsYUFBQyxNQUF5QjtJQVUxQyxxQ0FBZTtJQVVmLG1DQUFhO0lBV2IsNkJBQU8sYUFBQyxNQUFxQjtJQWE3Qiw0QkFBTSxhQUFDLE1BQW9CO0lBVzNCLDBDQUFvQixhQUFDLEtBQWE7SUFXbEMsMENBQW9CLGFBQUMsS0FBaUI7SUFXdEMsbUNBQWEsYUFBQyxLQUFhO0lBVzNCLG1DQUFhLGFBQUMsS0FBaUI7MEJBSy9CLGdEQUF1Qjs7Ozs7OzBCQUV2Qiw0Q0FBbUI7Ozs7OzswQkFFbkIsMkNBQWtCOzs7Ozs7MEJBRWxCLDhDQUFxQjs7Ozs7OzBCQUVyQiw4Q0FBcUI7Ozs7OzswQkFFckIsMENBQWlCOzs7Ozs7MEJBRWpCLG9EQUEyQjs7Ozs7OzBCQUUzQixvREFBMkI7Ozs7OzswQkFFM0Isb0RBQTJCOzs7Ozs7MEJBRTNCLGtEQUF5Qjs7Ozs7OzBCQUV6QixrREFBeUI7Ozs7OzswQkFFekIsaURBQXdCOzs7Ozs7Ozs7Ozs7O0lBcm9CYixXQUFXO1FBRHZCLFVBQVUsRUFBRTtPQUNBLFdBQVc7c0JBOWF4QjtFQThhaUMsaUJBQWlCO1NBQXJDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDb3Jkb3ZhLFxuICBDb3Jkb3ZhUHJvcGVydHksXG4gIElvbmljTmF0aXZlUGx1Z2luLFxuICBQbHVnaW5cbn0gZnJvbSAnQGlvbmljLW5hdGl2ZS9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuLyogQXZhaWxhYmxlIHN0YXR1cyBvZiBkZXZpY2UgKi9cbmV4cG9ydCB0eXBlIFN0YXR1cyA9XG4gIHwgJ3NjYW5TdGFydGVkJ1xuICB8ICdzY2FuU3RvcHBlZCdcbiAgfCAnc2NhblJlc3VsdCdcbiAgfCAnY29ubmVjdGVkJ1xuICB8ICdkaXNjb25uZWN0ZWQnXG4gIHwgJ2JvbmRpbmcnXG4gIHwgJ2JvbmRlZCdcbiAgfCAndW5ib25kZWQnXG4gIHwgJ2Nsb3NlZCdcbiAgfCAnc2VydmljZXMnXG4gIHwgJ2Rpc2NvdmVyZWQnXG4gIHwgJ2NoYXJhY3RlcmlzdGljcydcbiAgfCAnZGVzY3JpcHRvcnMnXG4gIHwgJ3JlYWQnXG4gIHwgJ3N1YnNjcmliZWQnXG4gIHwgJ3Vuc3Vic2NyaWJlZCdcbiAgfCAnc3Vic2NyaWJlZFJlc3VsdCdcbiAgfCAnd3JpdHRlbidcbiAgfCAncmVhZERlc2NyaXB0b3InXG4gIHwgJ3dyaXRlRGVzY3JpcHRvcidcbiAgfCAncnNzaSdcbiAgfCAnbXR1J1xuICB8ICdjb25uZWN0aW9uUHJpb3JpdHlSZXF1ZXN0ZWQnXG4gIHwgJ2VuYWJsZWQnXG4gIHwgJ2Rpc2FibGVkJ1xuICB8ICdyZWFkUmVxdWVzdGVkJ1xuICB8ICd3cml0ZVJlcXVlc3RlZCdcbiAgfCAnbXR1Q2hhbmdlZCdcbiAgfCAnbm90aWZ5UmVhZHknXG4gIHwgJ25vdGlmeVNlbnQnXG4gIHwgJ3NlcnZpY2VBZGRlZCdcbiAgfCAnc2VydmljZVJlbW92ZWQnXG4gIHwgJ2FsbFNlcnZpY2VzUmVtb3ZlZCdcbiAgfCAnYWR2ZXJ0aXNpbmdTdGFydGVkJ1xuICB8ICdhZHZlcnRpc2luZ1N0b3BwZWQnXG4gIHwgJ3Jlc3BvbmRlZCdcbiAgfCAnbm90aWZpZWQnO1xuXG4vKiogQXZhaWxhYmxlIGNvbm5lY3Rpb24gcHJpb3JpdGllcyAqL1xuZXhwb3J0IHR5cGUgQ29ubmVjdGlvblByaW9yaXR5ID0gJ2xvdycgfCAnYmFsYW5jZWQnIHwgJ2hpZ2gnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBhcmFtcyB7XG4gIC8qKiBUaGUgYWRkcmVzcy9pZGVudGlmaWVyIHByb3ZpZGVkIGJ5IHRoZSBzY2FuJ3MgcmV0dXJuIG9iamVjdCAqL1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIC8qKiBUaGUgc2VydmljZSdzIElEICovXG4gIHNlcnZpY2U6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbml0UGVyaXBoZXJhbFBhcmFtcyB7XG4gIC8qKiBTaG91bGQgdXNlciBiZSBwcm9tcHRlZCB0byBlbmFibGUgQmx1ZXRvb3RoICovXG4gIHJlcXVlc3Q/OiBib29sZWFuO1xuICAvKiBBIHVuaXF1ZSBzdHJpbmcgdG8gaWRlbnRpZnkgeW91ciBhcHAuIEJsdWV0b290aCBDZW50cmFsIGJhY2tncm91bmQgbW9kZSBpcyByZXF1aXJlZCB0byB1c2UgdGhpcywgYnV0IGJhY2tncm91bmQgbW9kZSBkb2Vzbid0IHNlZW0gdG8gcmVxdWlyZSBzcGVjaWZ5aW5nIHRoZSByZXN0b3JlS2V5ICovXG4gIHJlc3RvcmVLZXk/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5pdFBhcmFtcyBleHRlbmRzIEluaXRQZXJpcGhlcmFsUGFyYW1zIHtcbiAgLyoqIFNob3VsZCBjaGFuZ2UgaW4gQmx1ZXRvb3RoIHN0YXR1cyBub3RpZmljYXRpb25zIGJlIHNlbnQgKi9cbiAgc3RhdHVzUmVjZWl2ZXI/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNjYW5QYXJhbXMge1xuICAvKiBBbiBhcnJheSBvZiBzZXJ2aWNlIElEcyB0byBmaWx0ZXIgdGhlIHNjYW4gb3IgZW1wdHkgYXJyYXkgLyBudWxsLiBUaGlzIHBhcmFtZXRlciBpcyBub3Qgc3VwcG9ydGVkIG9uIFdpbmRvd3MgcGxhdGZvcm0geWV0ICovXG4gIHNlcnZpY2VzPzogc3RyaW5nW107XG4gIC8qIFRydWUvZmFsc2UgdG8gYWxsb3cgZHVwbGljYXRlIGFkdmVydGlzZW1lbnQgcGFja2V0cywgZGVmYXVsdHMgdG8gZmFsc2UgKGlPUykqL1xuICBhbGxvd0R1cGxpY2F0ZXM/OiBib29sZWFuO1xuICAvKiogRGVmYXVsdHMgdG8gTG93IFBvd2VyLiBBdmFpbGFibGUgZnJvbSBBUEkyMSAvIEFQSSAyMyAoQW5kcm9pZCkgKi9cbiAgc2Nhbk1vZGU/OiBCbHVldG9vdGhTY2FuTW9kZTtcbiAgLyoqIERlZmF1bHRzIHRvIEFnZ3Jlc3NpdmUuIEF2YWlsYWJsZSBmcm9tIEFQSTIzIChBbmRyb2lkKSAqL1xuICBtYXRjaE1vZGU/OiBCbHVldG9vdGhNYXRjaE1vZGU7XG4gIC8qKiBEZWZhdWx0cyB0byBPbmUgQWR2ZXJ0aXNlbWVudC4gQXZhaWxhYmxlIGZyb20gQVBJMjMgKEFuZHJvaWQpICovXG4gIG1hdGNoTnVtPzogQmx1ZXRvb3RoTWF0Y2hOdW07XG4gIC8qKiBEZWZhdWx0cyB0byBBbGwgTWF0Y2hlcy4gQXZhaWxhYmxlIGZyb20gQVBJMjEgLyBBUEkgMjMuIChBbmRyb2lkKSAqL1xuICBjYWxsYmFja1R5cGU/OiBCbHVldG9vdGhDYWxsYmFja1R5cGU7XG4gIC8qKiBUcnVlL2ZhbHNlIHRvIHNob3cgb25seSBjb25uZWN0YWJsZSBkZXZpY2VzLCByYXRoZXIgdGhhbiBhbGwgZGV2aWNlcyBldmVyIHNlZW4sIGRlZmF1bHRzIHRvIGZhbHNlIChXaW5kb3dzKSAqL1xuICBpc0Nvbm5lY3RhYmxlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOb3RpZnlQYXJhbXMge1xuICAvKiogU2VydmljZSdzIFVVSUQgKi9cbiAgc2VydmljZTogc3RyaW5nO1xuICAvKiogQ2hhcmFjdGVyaXN0aWMncyBVVUlEICovXG4gIGNoYXJhY3RlcmlzdGljOiBzdHJpbmc7XG4gIC8qKiBCYXNlNjQgZW5jb2RlZCBzdHJpbmcsIG51bWJlciBvciBzdHJpbmcgKi9cbiAgdmFsdWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXNwb25kUGFyYW1zIHtcbiAgLyoqIFRoaXMgaW50ZWdlciB2YWx1ZSB3aWxsIGJlIGluY3JlbWVudGVkIGV2ZXJ5IHJlYWQvd3JpdGVSZXF1ZXN0ZWQgKi9cbiAgcmVxdWVzdElkOiBudW1iZXI7XG4gIC8qKiBiYXNlNjQgc3RyaW5nICovXG4gIHZhbHVlOiBzdHJpbmc7XG4gIC8qKiBub3QgZG9jdW1lbnRlZCAqL1xuICBvZmZzZXQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhcmFjdGVyaXN0aWNQYXJhbXMgZXh0ZW5kcyBQYXJhbXMge1xuICAvKiogQW4gYXJyYXkgb2YgY2hhcmFjdGVyaXN0aWMgSURzIHRvIGRpc2NvdmVyIG9yIGVtcHR5IGFycmF5IC8gbnVsbCAqL1xuICBjaGFyYWN0ZXJpc3RpY3M/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZXNjcmlwdG9yUGFyYW1zIGV4dGVuZHMgUGFyYW1zIHtcbiAgLyoqIFRoZSBjaGFyYWN0ZXJpc3RpYydzIElEICovXG4gIGNoYXJhY3RlcmlzdGljOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3BlcmF0aW9uRGVzY3JpcHRvclBhcmFtcyBleHRlbmRzIERlc2NyaXB0b3JQYXJhbXMge1xuICAvKiogVGhlIGRlc2NyaXB0b3IncyBJRCAqL1xuICBkZXNjcmlwdG9yOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV3JpdGVDaGFyYWN0ZXJpc3RpY1BhcmFtcyBleHRlbmRzIERlc2NyaXB0b3JQYXJhbXMge1xuICAvKiBCYXNlNjQgZW5jb2RlZCBzdHJpbmcgKi9cbiAgdmFsdWU6IHN0cmluZztcbiAgLyogU2V0IHRvIFwibm9SZXNwb25zZVwiIHRvIGVuYWJsZSB3cml0ZSB3aXRob3V0IHJlc3BvbnNlLCBhbGwgb3RoZXIgdmFsdWVzIHdpbGwgd3JpdGUgbm9ybWFsbHkuICovXG4gIHR5cGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV3JpdGVEZXNjcmlwdG9yUGFyYW1zIGV4dGVuZHMgRGVzY3JpcHRvclBhcmFtcyB7XG4gIC8qKiBUaGUgZGVzY3JpcHRvcidzIElEICovXG4gIGRlc2NyaXB0b3I6IHN0cmluZztcbiAgLyoqIEJhc2U2NCBlbmNvZGVkIHN0cmluZywgbnVtYmVyIG9yIHN0cmluZyAqL1xuICB2YWx1ZTogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBBZHZlcnRpc2luZ1BhcmFtcyA9IEFkdmVydGlzaW5nUGFyYW1zQW5kcm9pZCB8IEFkdmVydGlzaW5nUGFyYW1zSU9TO1xuZXhwb3J0IHR5cGUgQWR2ZXJ0aXNlTW9kZSA9ICdiYWxhbmNlZCcgfCAnbG93TGF0ZW5jeScgfCAnbG93UG93ZXInO1xuZXhwb3J0IHR5cGUgVHhQb3dlckxldmVsID0gJ2hpZ2gnIHwgJ2xvdycgfCAndWx0cmFsb3cnIHwgJ21lZGl1bSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWR2ZXJ0aXNpbmdQYXJhbXNBbmRyb2lkIHtcbiAgLyoqIFNlcnZpY2UgVVVJRCBvbiBBbmRyb2lkICovXG4gIHNlcnZpY2U6IHN0cmluZztcbiAgLyoqIG5vdCBkb2N1bWVudGVkICovXG4gIG1vZGU/OiBBZHZlcnRpc2VNb2RlO1xuICAvKiogbm90IGRvY3VtZW50ZWQgKi9cbiAgY29ubmVjdGFibGU/OiBib29sZWFuO1xuICAvKiogbm90IGRvY3VtZW50ZWQgKi9cbiAgdGltZW91dD86IG51bWJlcjtcbiAgLyoqIG5vdCBkb2N1bWVudGVkICovXG4gIHR4UG93ZXJMZXZlbD86IFR4UG93ZXJMZXZlbDtcbiAgLyoqIG5vdCBkb2N1bWVudGVkICovXG4gIG1hbnVmYWN0dXJlcklkPzogbnVtYmVyO1xuICAvKiogbm90IGRvY3VtZW50ZWQgKi9cbiAgbWFudWZhY3R1cmVyU3BlY2lmaWNEYXRhPzogYW55O1xuICAvKiogbm90IGRvY3VtZW50ZWQgKi9cbiAgaW5jbHVkZURldmljZU5hbWU6IGJvb2xlYW47XG4gIC8qKiBub3QgZG9jdW1lbnRlZCAqL1xuICBpbmNsdWRlVHhQb3dlckxldmVsOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFkdmVydGlzaW5nUGFyYW1zSU9TIHtcbiAgLyoqIEFycmF5IG9mIHNlcnZpY2UgVVVJRHMgb24gaU9TICovXG4gIHNlcnZpY2VzOiBzdHJpbmdbXTtcbiAgLyoqIGRldmljZSdzIG5hbWUgKi9cbiAgbmFtZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21tb25JbmZvIHtcbiAgLyoqIFRoZSBkZXZpY2UncyBkaXNwbGF5IG5hbWUgKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKiogVGhlIGRldmljZSdzIGFkZHJlc3MgLyBpZGVudGlmaWVyIGZvciBjb25uZWN0aW5nIHRvIHRoZSBvYmplY3QgKi9cbiAgYWRkcmVzczogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERldmljZUluZm8gZXh0ZW5kcyBDb21tb25JbmZvIHtcbiAgLyoqIERldmljZSdzIHN0YXR1cyAqL1xuICBzdGF0dXM6IFN0YXR1cztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSU1NJIGV4dGVuZHMgRGV2aWNlSW5mbyB7XG4gIC8qKiBzaWduYWwgc3RyZW5ndGggKi9cbiAgcnNzaTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1UVSBleHRlbmRzIERldmljZUluZm8ge1xuICAvKiBtdHUgdmFsdWUgKi9cbiAgbXR1OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQm9uZGVkU3RhdHVzIGV4dGVuZHMgQ29tbW9uSW5mbyB7XG4gIC8qIEJvbmRlZCBzdGF0dXMqL1xuICBpc0JvbmRlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcmV2Q29ubmVjdGlvblN0YXR1cyBleHRlbmRzIENvbW1vbkluZm8ge1xuICAvKiogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGRldmljZSB3YXMgY29ubmVjdGVkICovXG4gIHdhc0Nvbm5lY3RlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDdXJyQ29ubmVjdGlvblN0YXR1cyBleHRlbmRzIENvbW1vbkluZm8ge1xuICAvKiogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGRldmljZSBpcyBjb25uZWN0ZWQgKi9cbiAgaXNDb25uZWN0ZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlzY292ZXJTdGF0dXMgZXh0ZW5kcyBDb21tb25JbmZvIHtcbiAgLyoqIERldGVybWluZSB3aGV0aGVyIHRoZSBkZXZpY2UncyBjaGFyYWN0ZXJpc3RpY3MgYW5kIGRlc2NyaXB0b3JzIGhhdmUgYmVlbiBkaXNjb3ZlcmVkICovXG4gIGlzRGlzY292ZXJlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTY2FuU3RhdHVzIGV4dGVuZHMgRGV2aWNlSW5mbyB7XG4gIC8qKiBzaWduYWwgc3RyZW5ndGggKi9cbiAgcnNzaTogbnVtYmVyO1xuICAvKipcbiAgICogYWR2ZXJ0aXNlbWVudCBkYXRhIGluIGVuY29kZWQgc3RyaW5nIG9mIGJ5dGVzLCB1c2UgYmx1ZXRvb3RobGUuZW5jb2RlZFN0cmluZ1RvQnl0ZXMoKSAoQW5kcm9pZClcbiAgICogYWR2ZXJ0aXNlbWVudCBoYXNoIHdpdGggdGhlIGtleXMgKGlPUylcbiAgICogZW1wdHkgKFdpbmRvd3MpXG4gICAqL1xuICBhZHZlcnRpc2VtZW50OlxuICAgIHwge1xuICAgICAgICAvKiogQW4gYXJyYXkgb2Ygc2VydmljZSBVVUlEcyAqL1xuICAgICAgICBzZXJ2aWNlVXVpZHM6IHN0cmluZ1tdO1xuICAgICAgICAvKiogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBuYW1lIG9mIHRoZSBtYW51ZmFjdHVyZXIgb2YgdGhlIGRldmljZSAqL1xuICAgICAgICBtYW51ZmFjdHVyZXJEYXRhOiBzdHJpbmc7XG4gICAgICAgIC8qKiBBIG51bWJlciBjb250YWluaW5nIHRoZSB0cmFuc21pdCBwb3dlciBvZiBhIHBlcmlwaGVyYWwgKi9cbiAgICAgICAgdHhQb3dlckxldmVsOiBudW1iZXI7XG4gICAgICAgIC8qKiBBbiBhcnJheSBvZiBvbmUgb3IgbW9yZSBDQlVVSUQgb2JqZWN0cywgcmVwcmVzZW50aW5nIENCU2VydmljZSBVVUlEcyB0aGF0IHdlcmUgZm91bmQgaW4gdGhlIOKAnG92ZXJmbG934oCdIGFyZWEgb2YgdGhlIGFkdmVydGlzZW1lbnQgZGF0YSAqL1xuICAgICAgICBvdmVyZmxvd1NlcnZpY2VVdWlkczogc3RyaW5nW107XG4gICAgICAgIC8qKiBBIGJvb2xlYW4gdmFsdWUgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgYWR2ZXJ0aXNpbmcgZXZlbnQgdHlwZSBpcyBjb25uZWN0YWJsZSAqL1xuICAgICAgICBpc0Nvbm5lY3RhYmxlOiBib29sZWFuO1xuICAgICAgICAvKiogQW4gYXJyYXkgb2Ygb25lIG9yIG1vcmUgQ0JVVUlEIG9iamVjdHMsIHJlcHJlc2VudGluZyBDQlNlcnZpY2UgVVVJRHMgKi9cbiAgICAgICAgc29saWNpdGVkU2VydmljZVV1aWRzOiBzdHJpbmdbXTtcbiAgICAgICAgLyogQSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgc2VydmljZS1zcGVjaWZpYyBhZHZlcnRpc2VtZW50IGRhdGEgKi9cbiAgICAgICAgc2VydmljZURhdGE6IGFueTtcbiAgICAgICAgLyogQSBzdHJpbmcgY29udGFpbmluZyB0aGUgbG9jYWwgbmFtZSBvZiBhIHBlcmlwaGVyYWwgKi9cbiAgICAgICAgbG9jYWxOYW1lOiBzdHJpbmc7XG4gICAgICB9XG4gICAgfCBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZSB7XG4gIC8qKiBTZXJ2aWNlJ3MgdXVpZCAqL1xuICB1dWlkOiBzdHJpbmc7XG4gIC8qKiBBcnJheSBvZiBjaGFyYWN0ZXJpc3RpY3MgKi9cbiAgY2hhcmFjdGVyaXN0aWNzOiBDaGFyYWN0ZXJpc3RpY1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENoYXJhY3RlcmlzdGljIHtcbiAgLyogQXJyYXkgb2YgZGVzY3JpcHRvcnMgKi9cbiAgZGVzY3JpcHRvcnM/OiBEZXNjcmlwdG9yW107XG4gIC8qKiAgQ2hhcmFjdGVyaXN0aWMncyB1dWlkICovXG4gIHV1aWQ6IHN0cmluZztcbiAgLyoqXG4gICAqICBDaGFyYWN0ZXJpc3RpYydzIHByb3BlcnRpZXNcbiAgICogIElmIHRoZSBwcm9wZXJ0eSBpcyBkZWZpbmVkIGFzIGEga2V5LCB0aGUgY2hhcmFjdGVyaXN0aWMgaGFzIHRoYXQgcHJvcGVydHlcbiAgICovXG4gIHByb3BlcnRpZXM/OiB7XG4gICAgd3JpdGU/OiBib29sZWFuO1xuICAgIGJyb2FkY2FzdD86IGJvb2xlYW47XG4gICAgZXh0ZW5kZWRQcm9wcz86IGJvb2xlYW47XG4gICAgd3JpdGVXaXRob3V0UmVzcG9uc2U/OiBib29sZWFuO1xuICAgIHdyaXRlTm9SZXNwb25zZT86IGJvb2xlYW47XG4gICAgc2lnbmVkV3JpdGU/OiBib29sZWFuO1xuICAgIHJlYWQ/OiBib29sZWFuO1xuICAgIG5vdGlmeT86IGJvb2xlYW47XG4gICAgaW5kaWNhdGU/OiBib29sZWFuO1xuICAgIGF1dGhlbnRpY2F0ZWRTaWduZWRXcml0ZXM/OiBib29sZWFuO1xuICAgIG5vdGlmeUVuY3J5cHRpb25SZXF1aXJlZD86IGJvb2xlYW47XG4gICAgaW5kaWNhdGVFbmNyeXB0aW9uUmVxdWlyZWQ/OiBib29sZWFuO1xuICB9O1xuICAvKipcbiAgICogIElmIHRoZSBwZXJtaXNzaW9uIGlzIGRlZmluZWQgYXMgYSBrZXksIHRoZSBjaGFyYWN0ZXIgaGFzIHRoYXQgcGVybWlzc2lvblxuICAgKi9cbiAgcGVybWlzc2lvbnM/OiB7XG4gICAgcmVhZD86IGJvb2xlYW47XG4gICAgcmVhZEVuY3J5cHRlZD86IGJvb2xlYW47XG4gICAgcmVhZEVuY3J5cHRlZE1JVE0/OiBib29sZWFuO1xuICAgIHdyaXRlPzogYm9vbGVhbjtcbiAgICB3cml0ZVNpZ25lZD86IGJvb2xlYW47XG4gICAgd3JpdGVTaWduZWRNSVRNPzogYm9vbGVhbjtcbiAgICB3cml0ZUVuY3J5cHRlZE1JVE0/OiBib29sZWFuO1xuICAgIHJlYWRFbmNyeXB0aW9uUmVxdWlyZWQ/OiBib29sZWFuO1xuICAgIHdyaXRlRW5jcnlwdGlvblJlcXVpcmVkPzogYm9vbGVhbjtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZXNjcmlwdG9yIHtcbiAgdXVpZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERldmljZSBleHRlbmRzIERldmljZUluZm8ge1xuICAvKiogRGV2aWNlJ3Mgc2VydmljZXMgKi9cbiAgc2VydmljZXM6IFNlcnZpY2VbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlcyBleHRlbmRzIERldmljZUluZm8ge1xuICAvKiogQXJyYXkgb2Ygc2VydmljZSBVVUlEUyAqL1xuICBzZXJ2aWNlczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVzY3JpcHRvcnMgZXh0ZW5kcyBEZXZpY2VJbmZvIHtcbiAgLyoqIENoYXJhY3RlcmlzdGljJ3MgVVVJRCAqL1xuICBjaGFyYWN0ZXJpc3RpYzogc3RyaW5nO1xuICAvKiogU2VydmljZSdzIFVVSUQgKi9cbiAgc2VydmljZTogc3RyaW5nO1xuICAvKiBBcnJheSBvZiBkZXNjcmlwdG9yIFVVSURzICovXG4gIGRlc2NyaXB0b3JzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcGVyYXRpb25SZXN1bHQgZXh0ZW5kcyBEZXZpY2VJbmZvIHtcbiAgLyoqIENoYXJhY3RlcmlzdGljIFVVSUQgKi9cbiAgY2hhcmFjdGVyaXN0aWM6IHN0cmluZztcbiAgLyoqIFNlcnZpY2UncyBVVUlEICovXG4gIHNlcnZpY2U6IHN0cmluZztcbiAgLyoqIEJhc2U2NCBlbmNvZGVkIHN0cmluZyBvZiBieXRlcyAqL1xuICB2YWx1ZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVuc3Vic2NyaWJlUmVzdWx0IGV4dGVuZHMgRGV2aWNlSW5mbyB7XG4gIC8qKiBDaGFyYWN0ZXJpc3RpYyBVVUlEICovXG4gIGNoYXJhY3RlcmlzdGljOiBzdHJpbmc7XG4gIC8qKiBTZXJ2aWNlJ3MgVVVJRCAqL1xuICBzZXJ2aWNlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVzY3JpcHRvclJlc3VsdCBleHRlbmRzIE9wZXJhdGlvblJlc3VsdCB7XG4gIGRlc2NyaXB0b3I6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDaGFyYWN0ZXJpc3RpY3MgZXh0ZW5kcyBEZXZpY2VJbmZvIHtcbiAgLyoqIFNlcnZpY2UncyBpZCAqL1xuICBzZXJ2aWNlOiBzdHJpbmc7XG4gIC8qIEFycmF5IG9mIGNoYXJhY3RlcmlzdGljIG9iamVjdHMqL1xuICBjaGFyYWN0ZXJpc3RpY3M6IENoYXJhY3RlcmlzdGljW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5pdGlhbGl6ZVJlc3VsdCB7XG4gIC8qKiBEZXZpY2UncyBzdGF0dXMgKi9cbiAgc3RhdHVzOiBTdGF0dXM7XG4gIC8qKiBUaGUgYWRkcmVzcy9pZGVudGlmaWVyIHByb3ZpZGVkIGJ5IHRoZSBzY2FuJ3MgcmV0dXJuIG9iamVjdCAqL1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIC8qKiBTZXJ2aWNlJ3MgVVVJRCAqL1xuICBzZXJ2aWNlOiBzdHJpbmc7XG4gIC8qKiBDaGFyYWN0ZXJpc3RpYyBVVUlEICovXG4gIGNoYXJhY3RlcmlzdGljOiBzdHJpbmc7XG4gIC8qKiBUaGlzIGludGVnZXIgdmFsdWUgd2lsbCBiZSBpbmNyZW1lbnRlZCBldmVyeSByZWFkL3dyaXRlUmVxdWVzdGVkICovXG4gIHJlcXVlc3RJZDogbnVtYmVyO1xuICAvKiogT2Zmc2V0IHZhbHVlICovXG4gIG9mZnNldDogbnVtYmVyO1xuICAvKiogbXR1IHZhbHVlICovXG4gIG10dTogbnVtYmVyO1xuICAvKiogQmFzZTY0IGVuY29kZWQgc3RyaW5nIG9mIGJ5dGVzICovXG4gIHZhbHVlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBlbnVtIEJsdWV0b290aFNjYW5Nb2RlIHtcbiAgU0NBTl9NT0RFX09QUE9SVFVOSVNUSUMgPSAtMSxcbiAgU0NBTl9NT0RFX0xPV19QT1dFUiA9IDAsXG4gIFNDQU5fTU9ERV9CQUxBTkNFRCA9IDEsXG4gIFNDQU5fTU9ERV9MT1dfTEFURU5DWSA9IDJcbn1cblxuZXhwb3J0IGVudW0gQmx1ZXRvb3RoTWF0Y2hNb2RlIHtcbiAgTUFUQ0hfTU9ERV9BR1JFU1NJVkUgPSAxLFxuICBNQVRDSF9NT0RFX1NUSUNLWSA9IDJcbn1cblxuZXhwb3J0IGVudW0gQmx1ZXRvb3RoTWF0Y2hOdW0ge1xuICBNQVRDSF9OVU1fT05FX0FEVkVSVElTRU1FTlQgPSAxLFxuICBNQVRDSF9OVU1fRkVXX0FEVkVSVElTRU1FTlQgPSAyLFxuICBNQVRDSF9OVU1fTUFYX0FEVkVSVElTRU1FTlQgPSAzXG59XG5cbmV4cG9ydCBlbnVtIEJsdWV0b290aENhbGxiYWNrVHlwZSB7XG4gIENBTExCQUNLX1RZUEVfQUxMX01BVENIRVMgPSAxLFxuICBDQUxMQkFDS19UWVBFX0ZJUlNUX01BVENIID0gMixcbiAgQ0FMTEJBQ0tfVFlQRV9NQVRDSF9MT1NUID0gNFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVycm9yIHtcbiAgY29kZTogbnVtYmVyO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRhcHRlckluZm8ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgaXNJbml0aWFsaXplZDogYm9vbGVhbjtcbiAgaXNFbmFibGVkOiBib29sZWFuO1xuICBpc1NjYW5uaW5nOiBib29sZWFuO1xuICBpc0Rpc2NvdmVyYWJsZTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBAbmFtZSBCbHVldG9vdGhMRVxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGlzIHBsdWdpbiBoYXMgdGhlIG1vc3QgY29tcGxldGUgaW1wbGVtZW50YXRpb24gZm9yIGludGVyYWN0aW5nIHdpdGggQmx1ZXRvb3RoIExFIGRldmljZXMgb24gQW5kcm9pZCwgaU9TIGFuZCBwYXJ0aWFsbHkgV2luZG93cy5cbiAqIEl0J3MgYSB3cmFwIGFyb3VuZCBbcmFuZGR1c2luZy9jb3Jkb3ZhLXBsdWdpbi1ibHVldG9vdGhsZV0oaHR0cHM6Ly9naXRodWIuY29tL3JhbmRkdXNpbmcvY29yZG92YS1wbHVnaW4tYmx1ZXRvb3RobGUvYmxvYi9tYXN0ZXIvcmVhZG1lLm1kKSBjb3Jkb3ZhIHBsdWdpbiBmb3IgSW9uaWMuXG4gKiBJdCBzdXBwb3J0cyBwZXJpcGhlcmFsICoqYW5kKiogY2VudHJhbCBtb2RlcyBhbmQgY292ZXJzIG1vc3Qgb2YgdGhlIEFQSSBtZXRob2RzIGF2YWlsYWJsZSBvbiBBbmRyb2lkIGFuZCBpT1MuXG4gKlxuICogQHVzYWdlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBCbHVldG9vdGhMRSB9IGZyb20gJ0Bpb25pYy1uYXRpdmUvYmx1ZXRvb3RoLWxlL25neCc7XG4gKlxuICpcbiAqIGNvbnN0cnVjdG9yKHB1YmxpYyBibHVldG9vdGhsZTogQmx1ZXRvb3RoTEUsIHB1YmxpYyBwbHQ6IFBsYXRmb3JtKSB7XG4gKlxuICogIHRoaXMucGx0LnJlYWR5KCkudGhlbigocmVhZHlTb3VyY2UpID0+IHtcbiAqXG4gKiAgICBjb25zb2xlLmxvZygnUGxhdGZvcm0gcmVhZHkgZnJvbScsIHJlYWR5U291cmNlKTtcbiAqXG4gKiAgICB0aGlzLmJsdWV0b290aGxlLmluaXRpYWxpemUoKS50aGVuKGJsZSA9PiB7XG4gKiAgICAgIGNvbnNvbGUubG9nKCdibGUnLCBibGUuc3RhdHVzKSAvLyBsb2dzICdlbmFibGVkJ1xuICogICAgfSk7XG4gKlxuICogICB9KTtcbiAqIH1cbiAqXG4gKiBgYGBcbiAqXG4gKi9cbkBQbHVnaW4oe1xuICBwbHVnaW5OYW1lOiAnQmx1ZXRvb3RoTEUnLFxuICBwbHVnaW46ICdjb3Jkb3ZhLXBsdWdpbi1ibHVldG9vdGhsZScsIC8vIG5wbSBwYWNrYWdlIG5hbWUsIGV4YW1wbGU6IGNvcmRvdmEtcGx1Z2luLWNhbWVyYVxuICBwbHVnaW5SZWY6ICdibHVldG9vdGhsZScsIC8vIHRoZSB2YXJpYWJsZSByZWZlcmVuY2UgdG8gY2FsbCB0aGUgcGx1Z2luLCBleGFtcGxlOiBuYXZpZ2F0b3IuZ2VvbG9jYXRpb25cbiAgcmVwbzogJ2h0dHBzOi8vZ2l0aHViLmNvbS9yYW5kZHVzaW5nL2NvcmRvdmEtcGx1Z2luLWJsdWV0b290aGxlJywgLy8gdGhlIGdpdGh1YiByZXBvc2l0b3J5IFVSTCBmb3IgdGhlIHBsdWdpblxuICBpbnN0YWxsOiAnaW9uaWMgY29yZG92YSBwbHVnaW4gYWRkIGNvcmRvdmEtcGx1Z2luLWJsdWV0b290aGxlJywgLy8gT1BUSU9OQUwgaW5zdGFsbCBjb21tYW5kLCBpbiBjYXNlIHRoZSBwbHVnaW4gcmVxdWlyZXMgdmFyaWFibGVzXG4gIGluc3RhbGxWYXJpYWJsZXM6IFtdLCAvLyBPUFRJT05BTCB0aGUgcGx1Z2luIHJlcXVpcmVzIHZhcmlhYmxlc1xuICBwbGF0Zm9ybXM6IFsnQW5kcm9pZCcsICdpT1MnXSAvLyBBcnJheSBvZiBwbGF0Zm9ybXMgc3VwcG9ydGVkLCBleGFtcGxlOiBbJ0FuZHJvaWQnLCAnaU9TJ11cbn0pXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQmx1ZXRvb3RoTEUgZXh0ZW5kcyBJb25pY05hdGl2ZVBsdWdpbiB7XG4gIC8qKlxuICAgKiBAbmFtZSBpbml0aWFsaXplXG4gICAqIEluaXRpYWxpemUgQmx1ZXRvb3RoIG9uIHRoZSBkZXZpY2VcbiAgICogQHBhcmFtIHtJbml0UGFyYW1zfSBbcGFyYW1zXVxuICAgKiBAcmV0dXJucyB7KE9ic2VydmFibGU8eyBzdGF0dXM6ICdlbmFibGVkJyB8ICdkaXNhYmxlZCd9Pil9IFRoZSBjYWxsYmFjayB0aGF0IGlzIHBhc3NlZCBpbml0aWFsaXplIHN0YXR1cyAoZW5hYmxlZC9kaXNhYmxlZClcbiAgICovXG4gIEBDb3Jkb3ZhKHsgc3VjY2Vzc0luZGV4OiAwLCBlcnJvckluZGV4OiAyLCBvYnNlcnZhYmxlOiB0cnVlIH0pXG4gIGluaXRpYWxpemUocGFyYW1zPzogSW5pdFBhcmFtcyk6IE9ic2VydmFibGU8eyBzdGF0dXM6ICdlbmFibGVkJyB8ICdkaXNhYmxlZCcgfT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSBlbmFibGUgKEFuZHJvaWQpXG4gICAqIEVuYWJsZSBCbHVldG9vdGggb24gdGhlIGRldmljZS4gQW5kcm9pZCBzdXBwb3J0IG9ubHlcbiAgICogQHJldHVybnMgdm9pZFxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScsIHN5bmM6IHRydWUgfSlcbiAgZW5hYmxlKCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSBkaXNhYmxlIChBbmRyb2lkKVxuICAgKiBEaXNhYmxlIEJsdWV0b290aCBvbiB0aGUgZGV2aWNlLiBBbmRyb2lkIHN1cHBvcnQgb25seVxuICAgKiBAcmV0dXJucyB2b2lkXG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJywgc3luYzogdHJ1ZSB9KVxuICBkaXNhYmxlKCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSBnZXRBZGFwdGVySW5mbyAoQW5kcm9pZClcbiAgICogUmV0cmlldmUgdXNlZnVsIGluZm9ybWF0aW9uIHN1Y2ggYXMgdGhlIGFkZHJlc3MsIG5hbWUsIGFuZCB2YXJpb3VzIHN0YXRlcyAoaW5pdGlhbGl6ZWQsIGVuYWJsZWQsIHNjYW5uaW5nLCBkaXNjb3ZlcmFibGUpLlxuICAgKiBUaGlzIGNhbiBiZSB2ZXJ5IHVzZWZ1bCB3aGVuIHRoZSBnZW5lcmFsIHN0YXRlIG9mIHRoZSBhZGFwdGVyIGhhcyBiZWVuIGxvc3QsIGFuZCB3ZSB3b3VsZCBvdGhlcndpc2UgbmVlZCB0byBnbyB0aHJvdWdoIGEgc2VyaWVzIG9mIGNhbGxiYWNrcyB0byBnZXQgdGhlIGNvcnJlY3Qgc3RhdGUgKGZpcnN0IGluaXRpYWxpemVkLCB0aGVuIGVuYWJsZWQsIHRoZW4gaXNTY2FubmluZywgYW5kIHNvIGZvcnRoKS5cbiAgICogVGhlIHJlc3VsdCBvZiB0aGlzIG1ldGhvZCBhbGxvd3MgdXMgdG8gdGFrZSBidXNpbmVzcyBsb2dpYyBkZWNpc2lvbnMgd2hpbGUgYXZvaWRpbmcgYSBsYXJnZSBwYXJ0IG9mIHRoZSBjYWxsYmFjayBoZWxsLlxuICAgKiBDdXJyZW50bHkgdGhlIGRpc2NvdmVyYWJsZSBzdGF0ZSBkb2VzIG5vdCBoYXZlIGFueSByZWxldmFuY2UgYmVjYXVzZSB0aGVyZSBpcyBubyBcInNldERpc2NvdmVyYWJsZVwiIGZ1bmN0aW9uYWxpdHkgaW4gcGxhY2UuIFRoYXQgbWF5IGNoYW5nZSBpbiB0aGUgZnV0dXJlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxBZGFwdGVySW5mbz59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICBnZXRBZGFwdGVySW5mbygpOiBQcm9taXNlPEFkYXB0ZXJJbmZvPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIHN0YXJ0U2NhblxuICAgKiBTY2FuIGZvciBCbHVldG9vdGggTEUgZGV2aWNlcy5cbiAgICogU2luY2Ugc2Nhbm5pbmcgaXMgZXhwZW5zaXZlLCBzdG9wIGFzIHNvb24gYXMgcG9zc2libGUuIFRoZSBDb3Jkb3ZhIGFwcCBzaG91bGQgdXNlIGEgdGltZXIgdG8gbGltaXQgdGhlIHNjYW4gaW50ZXJ2YWwuXG4gICAqIEFuZHJvaWQgQVBJID49IDIzIHJlcXVpcmVzIEFDQ0VTU19DT0FSU0VfTE9DQVRJT04gcGVybWlzc2lvbnMgdG8gZmluZCB1bnBhaXJlZCBkZXZpY2VzLlxuICAgKiBQZXJtaXNzaW9ucyBjYW4gYmUgcmVxdWVzdGVkIGJ5IHVzaW5nIHRoZSBoYXNQZXJtaXNzaW9uIGFuZCByZXF1ZXN0UGVybWlzc2lvbiBmdW5jdGlvbnMuXG4gICAqIEFuZHJvaWQgQVBJID49IDIzIGFsc28gcmVxdWlyZXMgbG9jYXRpb24gc2VydmljZXMgdG8gYmUgZW5hYmxlZC4gVXNlIGlzTG9jYXRpb25FbmFibGVkIHRvIGRldGVybWluZSB3aGV0aGVyIGxvY2F0aW9uIHNlcnZpY2VzIGFyZSBlbmFibGVkLlxuICAgKiBJZiBub3QgZW5hYmxlZCwgdXNlIHJlcXVlc3RMb2NhdGlvbiB0byBwcm9tcHQgdGhlIGxvY2F0aW9uIHNlcnZpY2VzIHNldHRpbmdzIHBhZ2UuXG4gICAqIEBwYXJhbSB7U2NhblBhcmFtc30gcGFyYW1zIFNjYW4gcGFyYW1zXG4gICAqIEByZXR1cm5zIHsoT2JzZXJ2YWJsZTwgU2NhblN0YXR1cyA+KX1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnLCBvYnNlcnZhYmxlOiB0cnVlIH0pXG4gIHN0YXJ0U2NhbihwYXJhbXM6IFNjYW5QYXJhbXMpOiBPYnNlcnZhYmxlPCBTY2FuU3RhdHVzID4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSBzdG9wU2NhblxuICAgKiBTdG9wIHNjYW4gZm9yIEJsdWV0b290aCBMRSBkZXZpY2VzLiBTaW5jZSBzY2FubmluZyBpcyBleHBlbnNpdmUsIHN0b3AgYXMgc29vbiBhcyBwb3NzaWJsZVxuICAgKiBUaGUgYXBwIHNob3VsZCB1c2UgYSB0aW1lciB0byBsaW1pdCB0aGUgc2Nhbm5pbmcgdGltZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8e3N0YXR1czogJ3NjYW5TdG9wcGVkJ30+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgc3RvcFNjYW4oKTogUHJvbWlzZTx7IHN0YXR1czogJ3NjYW5TdG9wcGVkJyB9PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIHJldHJpZXZlQ29ubmVjdGVkXG4gICAqIFJldHJpZXZlZCBwYWlyZWQgQmx1ZXRvb3RoIExFIGRldmljZXMuIEluIGlPUywgZGV2aWNlcyB0aGF0IGFyZSBcInBhaXJlZFwiIHRvIHdpbGwgbm90IHJldHVybiBkdXJpbmcgYSBub3JtYWwgc2Nhbi5cbiAgICogQ2FsbGJhY2sgaXMgXCJpbnN0YW50XCIgY29tcGFyZWQgdG8gYSBzY2FuLlxuICAgKiBAcGFyYW0ge3sgc2VydmljZXM6IHN0cmluZ1tdIH19IEFuIGFycmF5IG9mIHNlcnZpY2UgSURzIHRvIGZpbHRlciB0aGUgcmV0cmlldmFsIGJ5LiBJZiBubyBzZXJ2aWNlIElEcyBhcmUgc3BlY2lmaWVkLCBubyBkZXZpY2VzIHdpbGwgYmUgcmV0dXJuZWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHsgZGV2aWNlczogRGV2aWNlSW5mb1tdIH0+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgcmV0cmlldmVDb25uZWN0ZWQocGFyYW1zPzoge1xuICAgIHNlcnZpY2VzPzogc3RyaW5nW107XG4gIH0pOiBQcm9taXNlPHsgZGV2aWNlczogRGV2aWNlSW5mb1tdIH0+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgYm9uZCAoQW5kcm9pZClcbiAgICogQm9uZCB3aXRoIGEgZGV2aWNlLlxuICAgKiBUaGUgZGV2aWNlIGRvZXNuJ3QgbmVlZCB0byBiZSBjb25uZWN0ZWQgdG8gaW5pdGlhdGUgYm9uZGluZy4gQW5kcm9pZCBzdXBwb3J0IG9ubHkuXG4gICAqIEBwYXJhbSB7eyBhZGRyZXNzOiBzdHJpbmcgfX0gcGFyYW1zIFRoZSBhZGRyZXNzL2lkZW50aWZpZXIgcHJvdmlkZWQgYnkgdGhlIHNjYW4ncyByZXR1cm4gb2JqZWN0XG4gICAqIEByZXR1cm5zIHsoT2JzZXJ2YWJsZTx7IHN0YXR1czogRGV2aWNlSW5mbyB9Pil9XG4gICAqIHN1Y2Nlc3M6XG4gICAqICAgIFRoZSBmaXJzdCBzdWNjZXNzIGNhbGxiYWNrIHNob3VsZCBhbHdheXMgcmV0dXJuIHdpdGggc3RhdHVzID09IGJvbmRpbmcuXG4gICAqICAgIElmIHRoZSBib25kIGlzIGNyZWF0ZWQsIHRoZSBjYWxsYmFjayB3aWxsIHJldHVybiBhZ2FpbiB3aXRoIHN0YXR1cyA9PSBib25kZWQuXG4gICAqICAgIElmIHRoZSBib25kaW5nIHBvcHVwIGlzIGNhbmNlbGVkIG9yIHRoZSB3cm9uZyBjb2RlIGlzIGVudGVyZWQsIHRoZSBjYWxsYmFjayB3aWxsIHJldHVybiBhZ2FpbiB3aXRoIHN0YXR1cyA9PSB1bmJvbmRlZC5cbiAgICogZXJyb3I6XG4gICAqICAgIFRoZSBjYWxsYmFjayB0aGF0IHdpbGwgYmUgdHJpZ2dlcmVkIHdoZW4gdGhlIGJvbmQgb3BlcmF0aW9uIGZhaWxzXG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJywgb2JzZXJ2YWJsZTogdHJ1ZSB9KVxuICBib25kKHBhcmFtczogeyBhZGRyZXNzOiBzdHJpbmcgfSk6IE9ic2VydmFibGU8eyBzdGF0dXM6IERldmljZUluZm8gfT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSB1bmJvbmQgKEFuZHJvaWQpXG4gICAqIFVuYm9uZCB3aXRoIGEgZGV2aWNlLiBUaGUgZGV2aWNlIGRvZXNuJ3QgbmVlZCB0byBiZSBjb25uZWN0ZWQgdG8gaW5pdGlhdGUgYm9uZGluZy4gQW5kcm9pZCBzdXBwb3J0IG9ubHkuXG4gICAqIEBwYXJhbSB7e2FkZHJlc3M6IHN0cmluZ319IHBhcmFtcyBUaGUgYWRkcmVzcy9pZGVudGlmaWVyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHsgc3RhdHVzOiBEZXZpY2VJbmZvIH0+fVxuICAgKiAgICBzdWNjZXNzOiBUaGUgc3VjY2VzcyBjYWxsYmFjayBzaG91bGQgYWx3YXlzIHJldHVybiB3aXRoIHN0YXR1cyA9PSB1bmJvbmRlZCwgdGhhdCBpcyBwYXNzZWQgd2l0aCBkZXZpY2Ugb2JqZWN0XG4gICAqICAgIGVycm9yOiBUaGUgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIHRyaWdnZXJlZCB3aGVuIHRoZSB1bmJvbmQgb3BlcmF0aW9uIGZhaWxzXG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICB1bmJvbmQocGFyYW1zOiB7IGFkZHJlc3M6IHN0cmluZyB9KTogUHJvbWlzZTx7IHN0YXR1czogRGV2aWNlSW5mbyB9PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIGNvbm5lY3RcbiAgICogQ29ubmVjdCB0byBhIEJsdWV0b290aCBMRSBkZXZpY2VcbiAgICogQHBhcmFtIGNvbm5lY3RTdWNjZXNzIFRoZSBzdWNjZXNzIGNhbGxiYWNrIHRoYXQgaXMgcGFzc2VkIHdpdGggZGV2aWNlIG9iamVjdFxuICAgKiBAcGFyYW0gY29ubmVjdEVycm9yICAgVGhlIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSB0cmlnZ2VyZWQgd2hlbiB0aGUgY29ubmVjdCBvcGVyYXRpb24gZmFpbHNcbiAgICogQHBhcmFtIHBhcmFtcyAgICAgICAgIFRoZSBhZGRyZXNzL2lkZW50aWZpZXJcbiAgICpcbiAgICogQHBhcmFtIHt7YWRkcmVzczogc3RyaW5nLCBhdXRvQ29ubmVjdDogYm9vbGVhbn19IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7KE9ic2VydmFibGU8eyBzdGF0dXM6IERldmljZUluZm8gfT4pfVxuICAgKiAgICBzdWNjZXNzOiBkZXZpY2Ugb2JqZWN0IHdpdGggc3RhdHVzXG4gICAqICAgIGVycm9yOiBUaGUgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIHRyaWdnZXJlZCB3aGVuIHRoZSB1bmJvbmQgb3BlcmF0aW9uIGZhaWxzXG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJywgb2JzZXJ2YWJsZTogdHJ1ZSB9KVxuICBjb25uZWN0KHBhcmFtczoge1xuICAgIGFkZHJlc3M6IHN0cmluZztcbiAgICBhdXRvQ29ubmVjdD86IGJvb2xlYW47XG4gIH0pOiBPYnNlcnZhYmxlPCBEZXZpY2VJbmZvID4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSByZWNvbm5lY3RcbiAgICogUmVjb25uZWN0IHRvIGEgcHJldmlvdXNseSBjb25uZWN0ZWQgQmx1ZXRvb3RoIGRldmljZVxuICAgKiBAcGFyYW0ge3thZGRyZXNzOiBzdHJpbmd9fSBwYXJhbXMgVGhlIGFkZHJlc3MvaWRlbnRpZmllclxuICAgKiBAcmV0dXJucyB7KE9ic2VydmFibGU8eyBzdGF0dXM6IERldmljZUluZm8gfT4pfVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScsIG9ic2VydmFibGU6IHRydWUgfSlcbiAgcmVjb25uZWN0KHBhcmFtczogeyBhZGRyZXNzOiBzdHJpbmcgfSk6IE9ic2VydmFibGU8eyBzdGF0dXM6IERldmljZUluZm8gfT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSBkaXNjb25uZWN0XG4gICAqIERpc2Nvbm5lY3QgZnJvbSBhIEJsdWV0b290aCBMRSBkZXZpY2UuXG4gICAqICAgICAgICAgICAgICBOb3RlOiBJdCdzIHNpbXBsZXIgdG8ganVzdCBjYWxsIGNsb3NlKCkuIFN0YXJ0aW5nIHdpdGggaU9TIDEwLCBkaXNjb25uZWN0aW5nIGJlZm9yZSBjbG9zaW5nIHNlZW1zIHJlcXVpcmVkIVxuICAgKiBAcGFyYW0ge3thZGRyZXNzOiBzdHJpbmd9fSBwYXJhbXMgVGhlIGFkZHJlc3MvaWRlbnRpZmllclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxEZXZpY2VJbmZvPn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIGRpc2Nvbm5lY3QocGFyYW1zOiB7IGFkZHJlc3M6IHN0cmluZyB9KTogUHJvbWlzZTxEZXZpY2VJbmZvPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIGNsb3NlXG4gICAqIENsb3NlL2Rpc3Bvc2UgYSBCbHVldG9vdGggTEUgZGV2aWNlLlxuICAgKiBQcmlvciB0byAyLjcuMCwgeW91IG5lZWRlZCB0byBkaXNjb25uZWN0IHRvIHRoZSBkZXZpY2UgYmVmb3JlIGNsb3NpbmcsIGJ1dCB0aGlzIGlzIG5vIGxvbmdlciB0aGUgY2FzZS5cbiAgICogU3RhcnRpbmcgd2l0aCBpT1MgMTAsIGRpc2Nvbm5lY3RpbmcgYmVmb3JlIGNsb3Npbmcgc2VlbXMgcmVxdWlyZWQhXG4gICAqIEBwYXJhbSB7eyBhZGRyZXNzOiBzdHJpbmcgfX0gcGFyYW1zIFRoZSBhZGRyZXNzL2lkZW50aWZpZXJcbiAgICogQHJldHVybnMge1Byb21pc2U8RGV2aWNlSW5mbz59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICBjbG9zZShwYXJhbXM6IHsgYWRkcmVzczogc3RyaW5nIH0pOiBQcm9taXNlPERldmljZUluZm8+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgZGlzY292ZXJcbiAgICogRGlzY292ZXIgYWxsIHRoZSBkZXZpY2VzIHNlcnZpY2VzLCBjaGFyYWN0ZXJpc3RpY3MgYW5kIGRlc2NyaXB0b3JzLlxuICAgKiBEb2Vzbid0IG5lZWQgdG8gYmUgY2FsbGVkIGFnYWluIGFmdGVyIGRpc2Nvbm5lY3RpbmcgYW5kIHRoZW4gcmVjb25uZWN0aW5nLlxuICAgKiBJZiB1c2luZyBpT1MsIHlvdSBzaG91bGRuJ3QgdXNlIGRpc2NvdmVyIGFuZCBzZXJ2aWNlcy9jaGFyYWN0ZXJpc3RpY3MvZGVzY3JpcHRvcnMgb24gdGhlIHNhbWUgZGV2aWNlLlxuICAgKiBUaGVyZSBzZWVtcyB0byBiZSBhbiBpc3N1ZSB3aXRoIGNhbGxpbmcgZGlzY292ZXIgb24gaU9TOCBkZXZpY2VzLCBzbyB1c2Ugd2l0aCBjYXV0aW9uLlxuICAgKiBPbiBzb21lIEFuZHJvaWQgdmVyc2lvbnMsIHRoZSBkaXNjb3ZlcmVkIHNlcnZpY2VzIG1heSBiZSBjYWNoZWQgZm9yIGEgZGV2aWNlLlxuICAgKiBTdWJzZXF1ZW50IGRpc2NvdmVyIGV2ZW50cyB3aWxsIG1ha2UgdXNlIG9mIHRoaXMgY2FjaGUuXG4gICAqIElmIHlvdXIgZGV2aWNlJ3Mgc2VydmljZXMgY2hhbmdlLCBzZXQgdGhlIGNsZWFyQ2FjaGUgcGFyYW1ldGVyIHRvIGZvcmNlIEFuZHJvaWQgdG8gcmUtZGlzY292ZXIgc2VydmljZXMuXG4gICAqIEBwYXJhbSB7eyBhZGRyZXNzOiBzdHJpbmcsIGNsZWFyQ2FjaGU6IGJvb2xlYW4gfX0gcGFyYW1zIFRoZSBhZGRyZXNzL2lkZW50aWZpZXJcbiAgICogQHJldHVybnMge1Byb21pc2U8RGV2aWNlPn1cbiAgICogICAgc3VjY2VzczogZGV2aWNlIG9iamVjdCAoY29udGFpbnMgYXJyYXkgb2Ygc2VydmljZSBvYmplY3RzKVxuICAgKiAgICBlcnJvcjogVGhlIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSB0cmlnZ2VyZWQgd2hlbiB0aGUgdW5ib25kIG9wZXJhdGlvbiBmYWlsc1xuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgZGlzY292ZXIocGFyYW1zOiB7XG4gICAgYWRkcmVzczogc3RyaW5nO1xuICAgIGNsZWFyQ2FjaGU/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTxEZXZpY2U+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgc2VydmljZXMgKGlPUylcbiAgICogRGlzY292ZXIgdGhlIGRldmljZSdzIHNlcnZpY2VzLlxuICAgKiBOb3QgcHJvdmlkaW5nIGFuIGFycmF5IG9mIHNlcnZpY2VzIHdpbGwgcmV0dXJuIGFsbCBzZXJ2aWNlcyBhbmQgdGFrZSBsb25nZXIgdG8gZGlzY292ZXIuIGlPUyBzdXBwb3J0IG9ubHkuXG4gICAqIEBwYXJhbSB7e2FkZHJlc3M6IHN0cmluZywgc2VydmljZXM6IHN0cmluZ1tdfX0gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFNlcnZpY2VzPn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIHNlcnZpY2VzKHBhcmFtczoge1xuICAgIGFkZHJlc3M6IHN0cmluZztcbiAgICBzZXJ2aWNlcz86IHN0cmluZ1tdO1xuICB9KTogUHJvbWlzZTxTZXJ2aWNlcz4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSBjaGFyYWN0ZXJpc3RpY3MgKGlPUylcbiAgICogRGlzY292ZXIgdGhlIHNlcnZpY2UncyBjaGFyYWN0ZXJpc3RpY3MuXG4gICAqIE5vdCBwcm92aWRpbmcgYW4gYXJyYXkgb2YgY2hhcmFjdGVyaXN0aWNzIHdpbGwgcmV0dXJuIGFsbCBjaGFyYWN0ZXJpc3RpY3MgYW5kIHRha2UgbG9uZ2VyIHRvIGRpc2NvdmVyLiBpT1Mgc3VwcG9ydCBvbmx5LlxuICAgKiBAcGFyYW0ge0NoYXJhY3RlcmlzdGljUGFyYW1zfSBwYXJhbXMgQ2hhcmFjdGVyaXN0aWMgcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHsgY2hhcmFjdGVyaXN0aWNzOiBDaGFyYWN0ZXJpc3RpY3MgfT59IFRoZSBzZXJ2aWNlIGlkIGFuZCBhbiBBcnJheSBvZiBjaGFyYWN0ZXJpc3RpY3NcbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIGNoYXJhY3RlcmlzdGljcyhcbiAgICBwYXJhbXM6IENoYXJhY3RlcmlzdGljUGFyYW1zXG4gICk6IFByb21pc2U8eyBjaGFyYWN0ZXJpc3RpY3M6IENoYXJhY3RlcmlzdGljcyB9PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIGRlc2NyaXB0b3JzIChpT1MpXG4gICAqIERpc2NvdmVyIHRoZSBjaGFyYWN0ZXJpc3RpYydzIGRlc2NyaXB0b3JzLiBpT1Mgc3VwcG9ydCBvbmx5LlxuICAgKiBAcGFyYW0ge0Rlc2NyaXB0b3JQYXJhbXN9IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7IGRlc2NyaXB0b3JzOiBEZXNjcmlwdG9ycyB9Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIGRlc2NyaXB0b3JzKHBhcmFtczogRGVzY3JpcHRvclBhcmFtcyk6IFByb21pc2U8eyBkZXNjcmlwdG9yczogRGVzY3JpcHRvcnMgfT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSByZWFkXG4gICAqIFJlYWQgYSBwYXJ0aWN1bGFyIHNlcnZpY2UncyBjaGFyYWN0ZXJpc3RpYyBvbmNlXG4gICAqIEBwYXJhbSB7RGVzY3JpcHRvclBhcmFtc30gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPE9wZXJhdGlvblJlc3VsdD59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICByZWFkKHBhcmFtczogRGVzY3JpcHRvclBhcmFtcyk6IFByb21pc2U8T3BlcmF0aW9uUmVzdWx0PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIHN1YnNjcmliZVxuICAgKiBTdWJzY3JpYmUgdG8gYSBwYXJ0aWN1bGFyIHNlcnZpY2UncyBjaGFyYWN0ZXJpc3RpYy5cbiAgICogT25jZSBhIHN1YnNjcmlwdGlvbiBpcyBubyBsb25nZXIgbmVlZGVkLCBleGVjdXRlIHVuc3Vic2NyaWJlIGluIGEgc2ltaWxhciBmYXNoaW9uLlxuICAgKiBUaGUgQ2xpZW50IENvbmZpZ3VyYXRpb24gZGVzY3JpcHRvciB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgd3JpdHRlbiB0byBlbmFibGUgbm90aWZpY2F0aW9uL2luZGljYXRpb24gYmFzZWQgb24gdGhlIGNoYXJhY3RlcmlzdGljJ3MgcHJvcGVydGllcy5cbiAgICogQHBhcmFtIHtEZXNjcmlwdG9yUGFyYW1zfSBwYXJhbXNcbiAgICogQHJldHVybnMge09ic2VydmFibGU8T3BlcmF0aW9uUmVzdWx0Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnLCBvYnNlcnZhYmxlOiB0cnVlIH0pXG4gIHN1YnNjcmliZShwYXJhbXM6IERlc2NyaXB0b3JQYXJhbXMpOiBPYnNlcnZhYmxlPE9wZXJhdGlvblJlc3VsdD4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSB1bnN1YnNjcmliZVxuICAgKiBVbnN1YnNjcmliZSB0byBhIHBhcnRpY3VsYXIgc2VydmljZSdzIGNoYXJhY3RlcmlzdGljLlxuICAgKiBAcGFyYW0ge0Rlc2NyaXB0b3JQYXJhbXN9IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxVbnN1YnNjcmliZVJlc3VsdD59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICB1bnN1YnNjcmliZShwYXJhbXM6IERlc2NyaXB0b3JQYXJhbXMpOiBQcm9taXNlPFVuc3Vic2NyaWJlUmVzdWx0PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIHdyaXRlIChsaW1pdGF0aW9uIG9uIGlPUywgcmVhZCBiZWxvdylcbiAgICogV3JpdGUgYSBwYXJ0aWN1bGFyIHNlcnZpY2UncyBjaGFyYWN0ZXJpc3RpY1xuICAgKiBOb3RlOiBubyBjYWxsYmFjayB3aWxsIG9jY3VyIG9uIHdyaXRlIHdpdGhvdXQgcmVzcG9uc2Ugb24gaU9TLlxuICAgKiBAcGFyYW0ge1dyaXRlQ2hhcmFjdGVyaXN0aWNQYXJhbXN9IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxPcGVyYXRpb25SZXN1bHQ+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgd3JpdGUocGFyYW1zOiBXcml0ZUNoYXJhY3RlcmlzdGljUGFyYW1zKTogUHJvbWlzZTxPcGVyYXRpb25SZXN1bHQ+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgd3JpdGUgKGxpbWl0YXRpb24gb24gaU9TLCByZWFkIGJlbG93KVxuICAgKiBXcml0ZSBRdWljayAvIFF1ZXVlLCB1c2UgdGhpcyBtZXRob2QgdG8gcXVpY2tseSBleGVjdXRlIHdyaXRlIHdpdGhvdXQgcmVzcG9uc2UgY29tbWFuZHMgd2hlbiB3cml0aW5nIG1vcmUgdGhhbiAyMCBieXRlcyBhdCBhIHRpbWUuXG4gICAqIE5vdGU6IG5vIGNhbGxiYWNrIHdpbGwgb2NjdXIgb24gd3JpdGUgd2l0aG91dCByZXNwb25zZSBvbiBpT1MuXG4gICAqIEBwYXJhbSB7V3JpdGVDaGFyYWN0ZXJpc3RpY1BhcmFtc30gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPE9wZXJhdGlvblJlc3VsdD59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICB3cml0ZVEocGFyYW1zOiBXcml0ZUNoYXJhY3RlcmlzdGljUGFyYW1zKTogUHJvbWlzZTxPcGVyYXRpb25SZXN1bHQ+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgcmVhZERlc2NyaXB0b3JcbiAgICogUmVhZCBhIHBhcnRpY3VsYXIgY2hhcmFjdGVyaXN0J3MgZGVzY3JpcHRvclxuICAgKiBAcGFyYW0ge09wZXJhdGlvbkRlc2NyaXB0b3JQYXJhbXN9IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxEZXNjcmlwdG9yUmVzdWx0Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIHJlYWREZXNjcmlwdG9yKHBhcmFtczogT3BlcmF0aW9uRGVzY3JpcHRvclBhcmFtcyk6IFByb21pc2U8RGVzY3JpcHRvclJlc3VsdD4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSB3cml0ZURlc2NyaXB0b3JcbiAgICogV3JpdGUgYSBwYXJ0aWN1bGFyIGNoYXJhY3RlcmlzdGljJ3MgZGVzY3JpcHRvci4gVW5hYmxlIHRvIHdyaXRlIGNoYXJhY3RlcmlzdGljIGNvbmZpZ3VyYXRpb24gZGlyZWN0bHkgdG8ga2VlcCBpbiBsaW5lIHdpdGggaU9TIGltcGxlbWVudGF0aW9uLlxuICAgKiBJbnN0ZWFkIHVzZSBzdWJzY3JpYmUvdW5zdWJzY3JpYmUsIHdoaWNoIHdpbGwgYXV0b21hdGljYWxseSBlbmFibGUvZGlzYWJsZSBub3RpZmljYXRpb24uXG4gICAqIEBwYXJhbSB7V3JpdGVEZXNjcmlwdG9yUGFyYW1zfSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8RGVzY3JpcHRvclJlc3VsdD59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICB3cml0ZURlc2NyaXB0b3IocGFyYW1zOiBXcml0ZURlc2NyaXB0b3JQYXJhbXMpOiBQcm9taXNlPERlc2NyaXB0b3JSZXN1bHQ+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgcnNzaVxuICAgKiBSZWFkIFJTU0kgb2YgYSBjb25uZWN0ZWQgZGV2aWNlLiBSU1NJIGlzIGFsc28gcmV0dXJuZWQgd2l0aCBzY2FubmluZy5cbiAgICogQHBhcmFtIHt7IGFkZHJlc3M6IHN0cmluZyB9fSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8IFJTU0kgPn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIHJzc2kocGFyYW1zOiB7IGFkZHJlc3M6IHN0cmluZyB9KTogUHJvbWlzZTwgUlNTSSA+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgbXR1IChBbmRyb2lkLCBBbmRyb2lkIDUrKVxuICAgKiBTZXQgTVRVIG9mIGEgY29ubmVjdGVkIGRldmljZS4gQW5kcm9pZCBvbmx5LlxuICAgKiBAcGFyYW0ge3sgYWRkcmVzczogc3RyaW5nLCBtdHU6IG51bWJlciB9fSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8IE1UVSA+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgbXR1KHBhcmFtczogeyBhZGRyZXNzOiBzdHJpbmc7IG10dT86IG51bWJlciB9KTogUHJvbWlzZTwgTVRVID4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSByZXF1ZXN0Q29ubmVjdGlvblByaW9yaXR5IChBbmRyb2lkLCBBbmRyb2lkIDUrKVxuICAgKiBSZXF1ZXN0IGEgY2hhbmdlIGluIHRoZSBjb25uZWN0aW9uIHByaW9yaXR5IHRvIGltcHJvdmUgdGhyb3VnaHB1dCB3aGVuIHRyYW5zZmVyIGxhcmdlIGFtb3VudHMgb2YgZGF0YSB2aWEgQkxFLlxuICAgKiBBbmRyb2lkIHN1cHBvcnQgb25seS4gaU9TIHdpbGwgcmV0dXJuIGVycm9yLlxuICAgKiBAcGFyYW0ge3sgYWRkcmVzczogc3RyaW5nLCBjb25uZWN0aW9uUHJpb3JpdHk6IENvbm5lY3Rpb25Qcmlvcml0eSB9fSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8RGV2aWNlSW5mbz59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICByZXF1ZXN0Q29ubmVjdGlvblByaW9yaXR5KHBhcmFtczoge1xuICAgIGFkZHJlc3M6IHN0cmluZztcbiAgICBjb25uZWN0aW9uUHJpb3JpdHk6IENvbm5lY3Rpb25Qcmlvcml0eTtcbiAgfSk6IFByb21pc2U8RGV2aWNlSW5mbz4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSBpc0luaXRpYWxpemVkXG4gICAqIERldGVybWluZSB3aGV0aGVyIHRoZSBhZGFwdGVyIGlzIGluaXRpYWxpemVkLiBObyBlcnJvciBjYWxsYmFjay4gUmV0dXJucyB0cnVlIG9yIGZhbHNlXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHsgaXNJbml0aWFsaXplZDogYm9vbGVhbiB9Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIGlzSW5pdGlhbGl6ZWQoKTogUHJvbWlzZTx7IGlzSW5pdGlhbGl6ZWQ6IGJvb2xlYW4gfT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSBpc0VuYWJsZWRcbiAgICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGFkYXB0ZXIgaXMgZW5hYmxlZC4gTm8gZXJyb3IgY2FsbGJhY2tcbiAgICogQHJldHVybnMge1Byb21pc2U8eyBpc0VuYWJsZWQ6IGJvb2xlYW4gfT59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICBpc0VuYWJsZWQoKTogUHJvbWlzZTx7IGlzRW5hYmxlZDogYm9vbGVhbiB9PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIGlzU2Nhbm5pbmdcbiAgICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGFkYXB0ZXIgaXMgc2Nhbm5pbmcuIE5vIGVycm9yIGNhbGxiYWNrLiBSZXR1cm5zIHRydWUgb3IgZmFsc2VcbiAgICogQHJldHVybnMge1Byb21pc2U8eyBpc1NjYW5uaW5nOiBib29sZWFuIH0+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgaXNTY2FubmluZygpOiBQcm9taXNlPHsgaXNTY2FubmluZzogYm9vbGVhbiB9PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIGlzQm9uZGVkIChBbmRyb2lkKVxuICAgKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgZGV2aWNlIGlzIGJvbmRlZCBvciBub3QsIG9yIGVycm9yIGlmIG5vdCBpbml0aWFsaXplZC4gQW5kcm9pZCBzdXBwb3J0IG9ubHkuXG4gICAqIEBwYXJhbSB7eyBhZGRyZXNzOiBzdHJpbmcgfX0gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEJvbmRlZFN0YXR1cz59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICBpc0JvbmRlZChwYXJhbXM6IHsgYWRkcmVzczogc3RyaW5nIH0pOiBQcm9taXNlPEJvbmRlZFN0YXR1cz4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSB3YXNDb25uZWN0ZWRcbiAgICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGRldmljZSB3YXMgY29ubmVjdGVkLCBvciBlcnJvciBpZiBub3QgaW5pdGlhbGl6ZWQuXG4gICAqIEBwYXJhbSB7eyBhZGRyZXNzOiBzdHJpbmcgfX0gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFByZXZDb25uZWN0aW9uU3RhdHVzPn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIHdhc0Nvbm5lY3RlZChwYXJhbXM6IHsgYWRkcmVzczogc3RyaW5nIH0pOiBQcm9taXNlPFByZXZDb25uZWN0aW9uU3RhdHVzPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIGlzQ29ubmVjdGVkXG4gICAqIERldGVybWluZSB3aGV0aGVyIHRoZSBkZXZpY2UgaXMgY29ubmVjdGVkLCBvciBlcnJvciBpZiBub3QgaW5pdGlhbGl6ZWQgb3IgbmV2ZXIgY29ubmVjdGVkIHRvIGRldmljZVxuICAgKiBAcGFyYW0ge3sgYWRkcmVzczogc3RyaW5nIH19IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDdXJyQ29ubmVjdGlvblN0YXR1cz59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICBpc0Nvbm5lY3RlZChwYXJhbXM6IHsgYWRkcmVzczogc3RyaW5nIH0pOiBQcm9taXNlPEN1cnJDb25uZWN0aW9uU3RhdHVzPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIGlzRGlzY292ZXJlZFxuICAgKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgZGV2aWNlJ3MgY2hhcmFjdGVyaXN0aWNzIGFuZCBkZXNjcmlwdG9ycyBoYXZlIGJlZW4gZGlzY292ZXJlZCwgb3IgZXJyb3IgaWYgbm90IGluaXRpYWxpemVkIG9yIG5vdCBjb25uZWN0ZWQgdG8gZGV2aWNlLlxuICAgKiBAcGFyYW0ge3sgYWRkcmVzczogc3RyaW5nIH19IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxEaXNjb3ZlclN0YXR1cz59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICBpc0Rpc2NvdmVyZWQocGFyYW1zOiB7IGFkZHJlc3M6IHN0cmluZyB9KTogUHJvbWlzZTxEaXNjb3ZlclN0YXR1cz4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSBoYXNQZXJtaXNzaW9uICh1c2VmdWwgb25seSBmb3IgQW5kcm9pZCA2KyAvIEFQSSAyMylcbiAgICogRGV0ZXJtaW5lIHdoZXRoZXIgY29hcnNlIGxvY2F0aW9uIHByaXZpbGVnZXMgYXJlIGdyYW50ZWQgc2luY2Ugc2Nhbm5pbmcgZm9yIHVucGFpcmVkIGRldmljZXMgcmVxdWlyZXMgaXQgaW4gQW5kcm9pZCBBUEkgMjNcbiAgICogQHJldHVybnMge1Byb21pc2U8eyBoYXNQZXJtaXNzaW9uOiBib29sZWFuIH0+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgaGFzUGVybWlzc2lvbigpOiBQcm9taXNlPHsgaGFzUGVybWlzc2lvbjogYm9vbGVhbiB9PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIHJlcXVlc3RQZXJtaXNzaW9uICh1c2VmdWwgb25seSBmb3IgQW5kcm9pZCA2KyAvIEFQSSAyMylcbiAgICogUmVxdWVzdCBjb2Fyc2UgbG9jYXRpb24gcHJpdmlsZWdlcyBzaW5jZSBzY2FubmluZyBmb3IgdW5wYWlyZWQgZGV2aWNlcyByZXF1aXJlcyBpdCBpbiBBbmRyb2lkIEFQSSAyMy5cbiAgICogV2lsbCByZXR1cm4gYW4gZXJyb3IgaWYgY2FsbGVkIG9uIGlPUyBvciBBbmRyb2lkIHZlcnNpb25zIHByaW9yIHRvIDYuMC5cbiAgICogQHJldHVybnMge1Byb21pc2U8eyByZXF1ZXN0UGVybWlzc2lvbjogYm9vbGVhbiB9Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIHJlcXVlc3RQZXJtaXNzaW9uKCk6IFByb21pc2U8eyByZXF1ZXN0UGVybWlzc2lvbjogYm9vbGVhbiB9PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIGlzTG9jYXRpb25FbmFibGVkICh1c2VmdWwgb25seSBmb3IgQW5kcm9pZCA2KyAvIEFQSSAyMylcbiAgICogRGV0ZXJtaW5lIGlmIGxvY2F0aW9uIHNlcnZpY2VzIGFyZSBlbmFibGVkIG9yIG5vdC4gTG9jYXRpb24gU2VydmljZXMgYXJlIHJlcXVpcmVkIHRvIGZpbmQgZGV2aWNlcyBpbiBBbmRyb2lkIEFQSSAyM1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7IGlzTG9jYXRpb25FbmFibGVkOiBib29sZWFuIH0+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgaXNMb2NhdGlvbkVuYWJsZWQoKTogUHJvbWlzZTx7IGlzTG9jYXRpb25FbmFibGVkOiBib29sZWFuIH0+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgcmVxdWVzdExvY2F0aW9uICh1c2VmdWwgb25seSBmb3IgQW5kcm9pZCA2KyAvIEFQSSAyMylcbiAgICogUHJvbXB0IGxvY2F0aW9uIHNlcnZpY2VzIHNldHRpbmdzIHBhZ2VzLiByZXF1ZXN0TG9jYXRpb24gcHJvcGVydHkgcmV0dXJucyB3aGV0aGVyIGxvY2F0aW9uIHNlcnZpY2VzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkLlxuICAgKiBMb2NhdGlvbiBTZXJ2aWNlcyBhcmUgcmVxdWlyZWQgdG8gZmluZCBkZXZpY2VzIGluIEFuZHJvaWQgQVBJIDIzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7IHJlcXVlc3RMb2NhdGlvbjogYm9vbGVhbiB9Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIHJlcXVlc3RMb2NhdGlvbigpOiBQcm9taXNlPHsgcmVxdWVzdExvY2F0aW9uOiBib29sZWFuIH0+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgaW5pdGlhbGl6ZVBlcmlwaGVyYWxcbiAgICogSW5pdGlhbGl6ZSBCbHVldG9vdGggb24gdGhlIGRldmljZS4gTXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueXRoaW5nIGVsc2UuXG4gICAqIENhbGxiYWNrIHdpbGwgY29udGludW91c2x5IGJlIHVzZWQgd2hlbmV2ZXIgQmx1ZXRvb3RoIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuXG4gICAqIEBwYXJhbSB7SW5pdFBlcmlwaGVyYWxQYXJhbXN9IFtwYXJhbXNdXG4gICAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPEluaXRpYWxpemVSZXN1bHQ+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScsIG9ic2VydmFibGU6IHRydWUgfSlcbiAgaW5pdGlhbGl6ZVBlcmlwaGVyYWwoXG4gICAgcGFyYW1zPzogSW5pdFBlcmlwaGVyYWxQYXJhbXNcbiAgKTogT2JzZXJ2YWJsZTxJbml0aWFsaXplUmVzdWx0PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIGFkZFNlcnZpY2VcbiAgICogQWRkIGEgc2VydmljZSB3aXRoIGNoYXJhY3RlcmlzdGljcyBhbmQgZGVzY3JpcHRvcnMuIElmIG1vcmUgdGhhbiBvbmUgc2VydmljZSBpcyBhZGRlZCwgYWRkIHRoZW0gc2VxdWVudGlhbGx5XG4gICAqIEBwYXJhbSB7eyBzZXJ2aWNlOiBzdHJpbmcsIGNoYXJhY3RlcmlzdGljczogQ2hhcmFjdGVyaXN0aWNbXSB9fSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8eyBzZXJ2aWNlOiBzdHJpbmcsIHN0YXR1czogU3RhdHVzIH0+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgYWRkU2VydmljZShwYXJhbXM6IHtcbiAgICBzZXJ2aWNlOiBzdHJpbmc7XG4gICAgY2hhcmFjdGVyaXN0aWNzOiBDaGFyYWN0ZXJpc3RpY1tdO1xuICB9KTogUHJvbWlzZTx7IHNlcnZpY2U6IHN0cmluZzsgc3RhdHVzOiBTdGF0dXMgfT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSByZW1vdmVTZXJ2aWNlXG4gICAqIFJlbW92ZSBhIHNlcnZpY2VcbiAgICogQHBhcmFtIHt7IHNlcnZpY2U6IHN0cmluZyB9fSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8eyBzZXJ2aWNlOiBzdHJpbmcsIHN0YXR1czogU3RhdHVzIH0+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgcmVtb3ZlU2VydmljZShwYXJhbXM6IHtcbiAgICBzZXJ2aWNlOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPHsgc2VydmljZTogc3RyaW5nOyBzdGF0dXM6IFN0YXR1cyB9PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIHJlbW92ZUFsbFNlcnZpY2VzXG4gICAqIFJlbW92ZSBhbGwgc2VydmljZXNcbiAgICogQHJldHVybnMge1Byb21pc2U8eyBzdGF0dXM6IFN0YXR1cyB9Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnIH0pXG4gIHJlbW92ZUFsbFNlcnZpY2VzKCk6IFByb21pc2U8eyBzdGF0dXM6IFN0YXR1cyB9PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIHN0YXJ0QWR2ZXJ0aXNpbmcgKGRpZmZlcmVudCBiZWhhdmlvciBvbiBBbmRyb2lkL2lPUywgcmVhZCBiZWxvdylcbiAgICogU3RhcnQgYWR2ZXJ0aXNpbmcgYXMgYSBCTEUgZGV2aWNlLlxuICAgKiBOb3RlOiBUaGlzIG5lZWRzIHRvIGJlIGltcHJvdmVkIHNvIHNlcnZpY2VzIGNhbiBiZSB1c2VkIGZvciBib3RoIEFuZHJvaWQgYW5kIGlPUy5cbiAgICogT24gaU9TLCB0aGUgYWR2ZXJ0aXNpbmcgZGV2aWNlcyBsaWtlcyB0byByZW5hbWUgaXRzZWxmIGJhY2sgdG8gdGhlIG5hbWUgb2YgdGhlIGRldmljZSwgaS5lLiBSYW5kJyBpUGhvbmVcbiAgICogQHBhcmFtIHtBZHZlcnRpc2luZ1BhcmFtc30gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHsgc3RhdHVzOiBTdGF0dXMgfT59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICBzdGFydEFkdmVydGlzaW5nKHBhcmFtczogQWR2ZXJ0aXNpbmdQYXJhbXMpOiBQcm9taXNlPHsgc3RhdHVzOiBTdGF0dXMgfT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSBzdG9wQWR2ZXJ0aXNpbmdcbiAgICogU3RvcCBhZHZlcnRpc2luZ1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7IHN0YXR1czogU3RhdHVzIH0+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgc3RvcEFkdmVydGlzaW5nKCk6IFByb21pc2U8eyBzdGF0dXM6IFN0YXR1cyB9PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIGlzQWR2ZXJ0aXNpbmdcbiAgICogRGV0ZXJtaW5lIGlmIGFwcCBpcyBhZHZlcnRpc2luZyBvciBub3QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHsgc3RhdHVzOiBib29sZWFuIH0+fVxuICAgKi9cbiAgQENvcmRvdmEoeyBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScgfSlcbiAgaXNBZHZlcnRpc2luZygpOiBQcm9taXNlPHsgc3RhdHVzOiBib29sZWFuIH0+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQG5hbWUgcmVzcG9uZFxuICAgKiBSZXNwb25kIHRvIGEgcmVhZCBvciB3cml0ZSByZXF1ZXN0XG4gICAqIEBwYXJhbSB7UmVzcG9uZFBhcmFtc30gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHsgc3RhdHVzOiBTdGF0dXMgfT59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICByZXNwb25kKHBhcmFtczogUmVzcG9uZFBhcmFtcyk6IFByb21pc2U8eyBzdGF0dXM6IFN0YXR1cyB9PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIG5vdGlmeVxuICAgKiBVcGRhdGUgYSB2YWx1ZSBmb3IgYSBzdWJzY3JpcHRpb24uIEN1cnJlbnRseSBhbGwgc3Vic2NyaWJlZCBkZXZpY2VzIHdpbGwgcmVjZWl2ZSB1cGRhdGUuXG4gICAqIERldmljZSBzcGVjaWZpYyB1cGRhdGVzIHdpbGwgYmUgYWRkZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICogSWYgc2VudCBlcXVhbHMgZmFsc2UgaW4gdGhlIHJldHVybiB2YWx1ZSwgeW91IG11c3Qgd2FpdCBmb3IgdGhlIHBlcmlwaGVyYWxNYW5hZ2VySXNSZWFkeVRvVXBkYXRlU3Vic2NyaWJlcnMgZXZlbnQgYmVmb3JlIHNlbmRpbmcgbW9yZSB1cGRhdGVzLlxuICAgKiBAcGFyYW0ge05vdGlmeVBhcmFtc30gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHsgc3RhdHVzOiBTdGF0dXMsIHNlbnQ6IGJvb2xlYW4gfT59XG4gICAqL1xuICBAQ29yZG92YSh7IGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyB9KVxuICBub3RpZnkocGFyYW1zOiBOb3RpZnlQYXJhbXMpOiBQcm9taXNlPHsgc3RhdHVzOiBTdGF0dXM7IHNlbnQ6IGJvb2xlYW4gfT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSBlbmNvZGVkU3RyaW5nVG9CeXRlc1xuICAgKiBIZWxwZXIgZnVuY3Rpb24gdG8gY29udmVydCBhIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBmcm9tIGEgY2hhcmFjdGVyaXN0aWMgb3IgZGVzY3JpcHRvciB2YWx1ZSBpbnRvIGEgdWludDhBcnJheSBvYmplY3RcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcmV0dXJucyB7VWludDhBcnJheX1cbiAgICovXG4gIEBDb3Jkb3ZhKHsgc3luYzogdHJ1ZSB9KVxuICBlbmNvZGVkU3RyaW5nVG9CeXRlcyh2YWx1ZTogc3RyaW5nKTogVWludDhBcnJheSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIGJ5dGVzVG9FbmNvZGVkU3RyaW5nXG4gICAqIEhlbHBlciBmdW5jdGlvbiB0byBjb252ZXJ0IGEgdW5pdDhBcnJheSB0byBhIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBmb3IgYSBjaGFyYWN0ZXJpYyBvciBkZXNjcmlwdG9yIHdyaXRlXG4gICAqIEBwYXJhbSB7VWludDhBcnJheX0gYnl0ZXNcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIEBDb3Jkb3ZhKHsgc3luYzogdHJ1ZSB9KVxuICBieXRlc1RvRW5jb2RlZFN0cmluZyh2YWx1ZTogVWludDhBcnJheSk6IHN0cmluZyB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBuYW1lIHN0cmluZ1RvQnl0ZXNcbiAgICogSGVscGVyIGZ1bmN0aW9uIHRvIGNvbnZlcnQgYSBzdHJpbmcgdG8gYnl0ZXNcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gICAqIEByZXR1cm5zIHtVaW50OEFycmF5fVxuICAgKi9cbiAgQENvcmRvdmEoeyBzeW5jOiB0cnVlIH0pXG4gIHN0cmluZ1RvQnl0ZXModmFsdWU6IHN0cmluZyk6IFVpbnQ4QXJyYXkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbmFtZSBieXRlc1RvU3RyaW5nXG4gICAqIEhlbHBlciBmdW5jdGlvbiB0byBjb252ZXJ0IGJ5dGVzIHRvIGEgc3RyaW5nLlxuICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IHZhbHVlXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBAQ29yZG92YSh7IHN5bmM6IHRydWUgfSlcbiAgYnl0ZXNUb1N0cmluZyh2YWx1ZTogVWludDhBcnJheSk6IHN0cmluZyB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgQENvcmRvdmFQcm9wZXJ0eSgpXG4gIFNDQU5fTU9ERV9PUFBPUlRVTklTVElDOiBudW1iZXI7XG4gIEBDb3Jkb3ZhUHJvcGVydHkoKVxuICBTQ0FOX01PREVfTE9XX1BPV0VSOiBudW1iZXI7XG4gIEBDb3Jkb3ZhUHJvcGVydHkoKVxuICBTQ0FOX01PREVfQkFMQU5DRUQ6IG51bWJlcjtcbiAgQENvcmRvdmFQcm9wZXJ0eSgpXG4gIFNDQU5fTU9ERV9MT1dfTEFURU5DWTogbnVtYmVyO1xuICBAQ29yZG92YVByb3BlcnR5KClcbiAgTUFUQ0hfTU9ERV9BR0dSRVNTSVZFOiBudW1iZXI7XG4gIEBDb3Jkb3ZhUHJvcGVydHkoKVxuICBNQVRDSF9NT0RFX1NUSUNLWTogbnVtYmVyO1xuICBAQ29yZG92YVByb3BlcnR5KClcbiAgTUFUQ0hfTlVNX09ORV9BRFZFUlRJU0VNRU5UOiBudW1iZXI7XG4gIEBDb3Jkb3ZhUHJvcGVydHkoKVxuICBNQVRDSF9OVU1fRkVXX0FEVkVSVElTRU1FTlQ6IG51bWJlcjtcbiAgQENvcmRvdmFQcm9wZXJ0eSgpXG4gIE1BVENIX05VTV9NQVhfQURWRVJUSVNFTUVOVDogbnVtYmVyO1xuICBAQ29yZG92YVByb3BlcnR5KClcbiAgQ0FMTEJBQ0tfVFlQRV9BTExfTUFUQ0hFUzogbnVtYmVyO1xuICBAQ29yZG92YVByb3BlcnR5KClcbiAgQ0FMTEJBQ0tfVFlQRV9GSVJTVF9NQVRDSDogbnVtYmVyO1xuICBAQ29yZG92YVByb3BlcnR5KClcbiAgQ0FMTEJBQ0tfVFlQRV9NQVRDSF9MT1NUOiBudW1iZXI7XG59XG4iXX0=

@@ -1,1 +0,1 @@

{"description":"Ionic Native - Native plugins for ionic apps","module":"index.js","typings":"index.d.ts","author":"ionic","license":"MIT","repository":{"type":"git","url":"https://github.com/ionic-team/ionic-native.git"},"name":"@ionic-native/bluetooth-le","dependencies":{"@types/cordova":"latest"},"peerDependencies":{"rxjs":"^5.5.0 || ^6.5.0","@ionic-native/core":"^5.1.0"},"version":"5.22.0-beta-1"}
{"description":"Ionic Native - Native plugins for ionic apps","module":"index.js","typings":"index.d.ts","author":"ionic","license":"MIT","repository":{"type":"git","url":"https://github.com/ionic-team/ionic-native.git"},"name":"@ionic-native/bluetooth-le","dependencies":{"@types/cordova":"latest"},"peerDependencies":{"rxjs":"^5.5.0 || ^6.5.0","@ionic-native/core":"^5.1.0"},"version":"5.22.0"}

@@ -1,1 +0,1 @@

{"description":"Ionic Native - Native plugins for ionic apps","module":"index.js","typings":"index.d.ts","author":"ionic","license":"MIT","repository":{"type":"git","url":"https://github.com/ionic-team/ionic-native.git"},"name":"@ionic-native/bluetooth-le","dependencies":{"@types/cordova":"latest"},"peerDependencies":{"rxjs":"^5.5.0 || ^6.5.0","@ionic-native/core":"^5.1.0"},"version":"5.22.0-beta-1"}
{"description":"Ionic Native - Native plugins for ionic apps","module":"index.js","typings":"index.d.ts","author":"ionic","license":"MIT","repository":{"type":"git","url":"https://github.com/ionic-team/ionic-native.git"},"name":"@ionic-native/bluetooth-le","dependencies":{"@types/cordova":"latest"},"peerDependencies":{"rxjs":"^5.5.0 || ^6.5.0","@ionic-native/core":"^5.1.0"},"version":"5.22.0"}
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc