@ionic-native/background-geolocation
Version:
Ionic Native - Native plugins for ionic apps
96 lines • 42.1 kB
JavaScript
import { __extends } from "tslib";
import { Injectable } from '@angular/core';
import { IonicNativePlugin, cordova } from '@ionic-native/core';
import { Observable } from 'rxjs';
export var BackgroundGeolocationLocationCode;
(function (BackgroundGeolocationLocationCode) {
BackgroundGeolocationLocationCode[BackgroundGeolocationLocationCode["PERMISSION_DENIED"] = 1] = "PERMISSION_DENIED";
BackgroundGeolocationLocationCode[BackgroundGeolocationLocationCode["LOCATION_UNAVAILABLE"] = 2] = "LOCATION_UNAVAILABLE";
BackgroundGeolocationLocationCode[BackgroundGeolocationLocationCode["TIMEOUT"] = 3] = "TIMEOUT";
})(BackgroundGeolocationLocationCode || (BackgroundGeolocationLocationCode = {}));
export var BackgroundGeolocationNativeProvider;
(function (BackgroundGeolocationNativeProvider) {
BackgroundGeolocationNativeProvider["gps"] = "gps";
BackgroundGeolocationNativeProvider["network"] = "network";
BackgroundGeolocationNativeProvider["passive"] = "passive";
BackgroundGeolocationNativeProvider["fused"] = "fused";
})(BackgroundGeolocationNativeProvider || (BackgroundGeolocationNativeProvider = {}));
export var BackgroundGeolocationLocationProvider;
(function (BackgroundGeolocationLocationProvider) {
BackgroundGeolocationLocationProvider[BackgroundGeolocationLocationProvider["DISTANCE_FILTER_PROVIDER"] = 0] = "DISTANCE_FILTER_PROVIDER";
BackgroundGeolocationLocationProvider[BackgroundGeolocationLocationProvider["ACTIVITY_PROVIDER"] = 1] = "ACTIVITY_PROVIDER";
BackgroundGeolocationLocationProvider[BackgroundGeolocationLocationProvider["RAW_PROVIDER"] = 2] = "RAW_PROVIDER";
})(BackgroundGeolocationLocationProvider || (BackgroundGeolocationLocationProvider = {}));
export var BackgroundGeolocationEvents;
(function (BackgroundGeolocationEvents) {
BackgroundGeolocationEvents["http_authorization"] = "http_authorization";
BackgroundGeolocationEvents["abort_requested"] = "abort_requested";
BackgroundGeolocationEvents["background"] = "background";
BackgroundGeolocationEvents["foreground"] = "foreground";
BackgroundGeolocationEvents["authorization"] = "authorization";
BackgroundGeolocationEvents["error"] = "error";
BackgroundGeolocationEvents["stop"] = "stop";
BackgroundGeolocationEvents["start"] = "start";
BackgroundGeolocationEvents["activity"] = "activity";
BackgroundGeolocationEvents["stationary"] = "stationary";
BackgroundGeolocationEvents["location"] = "location";
})(BackgroundGeolocationEvents || (BackgroundGeolocationEvents = {}));
export var BackgroundGeolocationAuthorizationStatus;
(function (BackgroundGeolocationAuthorizationStatus) {
BackgroundGeolocationAuthorizationStatus[BackgroundGeolocationAuthorizationStatus["NOT_AUTHORIZED"] = 0] = "NOT_AUTHORIZED";
BackgroundGeolocationAuthorizationStatus[BackgroundGeolocationAuthorizationStatus["AUTHORIZED"] = 1] = "AUTHORIZED";
BackgroundGeolocationAuthorizationStatus[BackgroundGeolocationAuthorizationStatus["AUTHORIZED_FOREGROUND"] = 2] = "AUTHORIZED_FOREGROUND";
})(BackgroundGeolocationAuthorizationStatus || (BackgroundGeolocationAuthorizationStatus = {}));
export var BackgroundGeolocationLogLevel;
(function (BackgroundGeolocationLogLevel) {
BackgroundGeolocationLogLevel["TRACE"] = "TRACE";
BackgroundGeolocationLogLevel["DEBUG"] = "DEBUG";
BackgroundGeolocationLogLevel["INFO"] = "INFO";
BackgroundGeolocationLogLevel["WARN"] = "WARN";
BackgroundGeolocationLogLevel["ERROR"] = "ERROR";
})(BackgroundGeolocationLogLevel || (BackgroundGeolocationLogLevel = {}));
var BackgroundGeolocation = /** @class */ (function (_super) {
__extends(BackgroundGeolocation, _super);
function BackgroundGeolocation() {
return _super !== null && _super.apply(this, arguments) || this;
}
BackgroundGeolocation.prototype.configure = function (options) { return cordova(this, "configure", {}, arguments); };
BackgroundGeolocation.prototype.start = function () { return cordova(this, "start", {}, arguments); };
BackgroundGeolocation.prototype.stop = function () { return cordova(this, "stop", {}, arguments); };
BackgroundGeolocation.prototype.finish = function () { return cordova(this, "finish", { "platforms": ["iOS"] }, arguments); };
BackgroundGeolocation.prototype.changePace = function (isMoving) { return cordova(this, "changePace", { "platforms": ["iOS"] }, arguments); };
BackgroundGeolocation.prototype.setConfig = function (options) { return cordova(this, "setConfig", { "callbackOrder": "reverse" }, arguments); };
BackgroundGeolocation.prototype.getStationaryLocation = function () { return cordova(this, "getStationaryLocation", { "platforms": ["iOS"] }, arguments); };
BackgroundGeolocation.prototype.onStationary = function () { return cordova(this, "onStationary", { "platforms": ["iOS"] }, arguments); };
BackgroundGeolocation.prototype.isLocationEnabled = function () { return cordova(this, "isLocationEnabled", { "platforms": ["Android"] }, arguments); };
BackgroundGeolocation.prototype.showAppSettings = function () { return cordova(this, "showAppSettings", { "sync": true }, arguments); };
BackgroundGeolocation.prototype.showLocationSettings = function () { return cordova(this, "showLocationSettings", { "sync": true }, arguments); };
BackgroundGeolocation.prototype.watchLocationMode = function () { return cordova(this, "watchLocationMode", { "platforms": ["Android"], "observable": true }, arguments); };
BackgroundGeolocation.prototype.stopWatchingLocationMode = function () { return cordova(this, "stopWatchingLocationMode", { "platforms": ["Android"] }, arguments); };
BackgroundGeolocation.prototype.getLocations = function () { return cordova(this, "getLocations", { "platforms": ["Android"] }, arguments); };
BackgroundGeolocation.prototype.getValidLocations = function () { return cordova(this, "getValidLocations", {}, arguments); };
BackgroundGeolocation.prototype.deleteLocation = function (locationId) { return cordova(this, "deleteLocation", { "platforms": ["Android"] }, arguments); };
BackgroundGeolocation.prototype.deleteAllLocations = function () { return cordova(this, "deleteAllLocations", { "platforms": ["Android"] }, arguments); };
BackgroundGeolocation.prototype.switchMode = function (modeId) { return cordova(this, "switchMode", { "platforms": ["iOS"] }, arguments); };
BackgroundGeolocation.prototype.getLogEntries = function (limit, fromId, minLevel) { return cordova(this, "getLogEntries", {}, arguments); };
BackgroundGeolocation.prototype.getConfig = function () { return cordova(this, "getConfig", {}, arguments); };
BackgroundGeolocation.prototype.getCurrentLocation = function (options) { return cordova(this, "getCurrentLocation", { "callbackOrder": "reverse" }, arguments); };
BackgroundGeolocation.prototype.checkStatus = function () { return cordova(this, "checkStatus", {}, arguments); };
BackgroundGeolocation.prototype.startTask = function () { return cordova(this, "startTask", { "platforms": ["IOS"] }, arguments); };
BackgroundGeolocation.prototype.endTask = function (taskKey) { return cordova(this, "endTask", { "platforms": ["IOS"] }, arguments); };
BackgroundGeolocation.prototype.headlessTask = function (func) { return cordova(this, "headlessTask", {}, arguments); };
BackgroundGeolocation.prototype.forceSync = function () { return cordova(this, "forceSync", {}, arguments); };
BackgroundGeolocation.prototype.on = function (event) { return cordova(this, "on", { "observable": true }, arguments); };
BackgroundGeolocation.prototype.removeAllListeners = function (event) { return cordova(this, "removeAllListeners", {}, arguments); };
BackgroundGeolocation.pluginName = "BackgroundGeolocation";
BackgroundGeolocation.plugin = "@mauron85/cordova-plugin-background-geolocation";
BackgroundGeolocation.pluginRef = "BackgroundGeolocation";
BackgroundGeolocation.repo = "https://github.com/mauron85/cordova-plugin-background-geolocation";
BackgroundGeolocation.platforms = ["Android", "iOS"];
BackgroundGeolocation.decorators = [
{ type: Injectable }
];
return BackgroundGeolocation;
}(IonicNativePlugin));
export { BackgroundGeolocation };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvQGlvbmljLW5hdGl2ZS9wbHVnaW5zL2JhY2tncm91bmQtZ2VvbG9jYXRpb24vbmd4L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sOEJBQXNDLE1BQU0sb0JBQW9CLENBQUM7QUFDeEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVsQyxNQUFNLENBQU4sSUFBWSxpQ0FJWDtBQUpELFdBQVksaUNBQWlDO0lBQzNDLG1IQUFxQixDQUFBO0lBQ3JCLHlIQUF3QixDQUFBO0lBQ3hCLCtGQUFXLENBQUE7QUFDYixDQUFDLEVBSlcsaUNBQWlDLEtBQWpDLGlDQUFpQyxRQUk1QztBQUVELE1BQU0sQ0FBTixJQUFZLG1DQUtYO0FBTEQsV0FBWSxtQ0FBbUM7SUFDN0Msa0RBQVcsQ0FBQTtJQUNYLDBEQUFtQixDQUFBO0lBQ25CLDBEQUFtQixDQUFBO0lBQ25CLHNEQUFlLENBQUE7QUFDakIsQ0FBQyxFQUxXLG1DQUFtQyxLQUFuQyxtQ0FBbUMsUUFLOUM7QUFFRCxNQUFNLENBQU4sSUFBWSxxQ0FJWDtBQUpELFdBQVkscUNBQXFDO0lBQy9DLHlJQUE0QixDQUFBO0lBQzVCLDJIQUFxQixDQUFBO0lBQ3JCLGlIQUFnQixDQUFBO0FBQ2xCLENBQUMsRUFKVyxxQ0FBcUMsS0FBckMscUNBQXFDLFFBSWhEO0FBRUQsTUFBTSxDQUFOLElBQVksMkJBWVg7QUFaRCxXQUFZLDJCQUEyQjtJQUNyQyx3RUFBeUMsQ0FBQTtJQUN6QyxrRUFBbUMsQ0FBQTtJQUNuQyx3REFBeUIsQ0FBQTtJQUN6Qix3REFBeUIsQ0FBQTtJQUN6Qiw4REFBK0IsQ0FBQTtJQUMvQiw4Q0FBZSxDQUFBO0lBQ2YsNENBQWEsQ0FBQTtJQUNiLDhDQUFlLENBQUE7SUFDZixvREFBcUIsQ0FBQTtJQUNyQix3REFBeUIsQ0FBQTtJQUN6QixvREFBcUIsQ0FBQTtBQUN2QixDQUFDLEVBWlcsMkJBQTJCLEtBQTNCLDJCQUEyQixRQVl0QztBQUVELE1BQU0sQ0FBTixJQUFZLHdDQUlYO0FBSkQsV0FBWSx3Q0FBd0M7SUFDbEQsMkhBQWtCLENBQUE7SUFDbEIsbUhBQWMsQ0FBQTtJQUNkLHlJQUF5QixDQUFBO0FBQzNCLENBQUMsRUFKVyx3Q0FBd0MsS0FBeEMsd0NBQXdDLFFBSW5EO0FBRUQsTUFBTSxDQUFOLElBQVksNkJBTVg7QUFORCxXQUFZLDZCQUE2QjtJQUN2QyxnREFBZSxDQUFBO0lBQ2YsZ0RBQWUsQ0FBQTtJQUNmLDhDQUFhLENBQUE7SUFDYiw4Q0FBYSxDQUFBO0lBQ2IsZ0RBQWUsQ0FBQTtBQUNqQixDQUFDLEVBTlcsNkJBQTZCLEtBQTdCLDZCQUE2QixRQU14Qzs7SUFtZjBDLHlDQUFpQjs7OztJQVExRCx5Q0FBUyxhQUFDLE9BQW9DO0lBVTlDLHFDQUFLO0lBU0wsb0NBQUk7SUFXSixzQ0FBTTtJQVlOLDBDQUFVLGFBQUMsUUFBaUI7SUFZNUIseUNBQVMsYUFBQyxPQUFvQztJQVc5QyxxREFBcUI7SUFZckIsNENBQVk7SUFXWixpREFBaUI7SUFRakIsK0NBQWU7SUFNZixvREFBb0I7SUFZcEIsaURBQWlCO0lBV2pCLHdEQUF3QjtJQWdCeEIsNENBQVk7SUFTWixpREFBaUI7SUFZakIsOENBQWMsYUFBQyxVQUFrQjtJQVdqQyxrREFBa0I7SUFvQmxCLDBDQUFVLGFBQUMsTUFBYztJQVl6Qiw2Q0FBYSxhQUNYLEtBQWEsRUFDYixNQUFjLEVBQ2QsUUFBdUM7SUFZekMseUNBQVM7SUFnQlQsa0RBQWtCLGFBQUMsT0FBb0Q7SUFRdkUsMkNBQVc7SUFnQlgseUNBQVM7SUFVVCx1Q0FBTyxhQUFDLE9BQWU7SUEyQnZCLDRDQUFZLGFBQUMsSUFBUztJQVd0Qix5Q0FBUztJQWNULGtDQUFFLGFBQUMsS0FBa0M7SUFVckMsa0RBQWtCLGFBQUMsS0FBbUM7Ozs7Ozs7Z0JBclZ2RCxVQUFVOztnQ0FuaUJYO0VBb2lCMkMsaUJBQWlCO1NBQS9DLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvcmRvdmEsIElvbmljTmF0aXZlUGx1Z2luLCBQbHVnaW4gfSBmcm9tICdAaW9uaWMtbmF0aXZlL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgZW51bSBCYWNrZ3JvdW5kR2VvbG9jYXRpb25Mb2NhdGlvbkNvZGUge1xuICBQRVJNSVNTSU9OX0RFTklFRCA9IDEsXG4gIExPQ0FUSU9OX1VOQVZBSUxBQkxFID0gMixcbiAgVElNRU9VVCA9IDMsXG59XG5cbmV4cG9ydCBlbnVtIEJhY2tncm91bmRHZW9sb2NhdGlvbk5hdGl2ZVByb3ZpZGVyIHtcbiAgZ3BzID0gJ2dwcycsXG4gIG5ldHdvcmsgPSAnbmV0d29yaycsXG4gIHBhc3NpdmUgPSAncGFzc2l2ZScsXG4gIGZ1c2VkID0gJ2Z1c2VkJyxcbn1cblxuZXhwb3J0IGVudW0gQmFja2dyb3VuZEdlb2xvY2F0aW9uTG9jYXRpb25Qcm92aWRlciB7XG4gIERJU1RBTkNFX0ZJTFRFUl9QUk9WSURFUiA9IDAsXG4gIEFDVElWSVRZX1BST1ZJREVSID0gMSxcbiAgUkFXX1BST1ZJREVSID0gMixcbn1cblxuZXhwb3J0IGVudW0gQmFja2dyb3VuZEdlb2xvY2F0aW9uRXZlbnRzIHtcbiAgaHR0cF9hdXRob3JpemF0aW9uID0gJ2h0dHBfYXV0aG9yaXphdGlvbicsIC8vIFRyaWdnZXJlZCB3aGVuIHNlcnZlciByZXNwb25kZWQgd2l0aCBcIjxjb2RlPjQwMSBVbmF1dGhvcml6ZWQ8L2NvZGU+XCIgdG8gcG9zdC9zeW5jIHJlcXVlc3QuXG4gIGFib3J0X3JlcXVlc3RlZCA9ICdhYm9ydF9yZXF1ZXN0ZWQnLCAvLyBUcmlnZ2VyZWQgd2hlbiBzZXJ2ZXIgcmVzcG9uZGVkIHdpdGggXCI8Y29kZT4yODUgVXBkYXRlcyBOb3QgUmVxdWlyZWQ8L2NvZGU+XCIgdG8gcG9zdC9zeW5jIHJlcXVlc3QuXG4gIGJhY2tncm91bmQgPSAnYmFja2dyb3VuZCcsIC8vIFRyaWdnZXJlZCB3aGVuIGFwcCBlbnRlcmVkIGJhY2tncm91bmQgc3RhdGUgYW5kIChub3QgdmlzaWJsZSB0byB0aGUgdXNlcikuXG4gIGZvcmVncm91bmQgPSAnZm9yZWdyb3VuZCcsIC8vIFRyaWdnZXJlZCB3aGVuIGFwcCBlbnRlcmVkIGZvcmVncm91bmQgc3RhdGUgYW5kICh2aXNpYmxlIHRvIHRoZSB1c2VyKS5cbiAgYXV0aG9yaXphdGlvbiA9ICdhdXRob3JpemF0aW9uJywgLy8gVHJpZ2dlcmVkIHdoZW4gdXNlciBjaGFuZ2VzIGF1dGhvcml6YXRpb24vcGVybWlzc2lvbnMgZm9yIHRoZSBhcHAgb3IgdG9nZ2xlcyBsb2NhdGlvbiBzZXJ2aWNlcy5cbiAgZXJyb3IgPSAnZXJyb3InLCAvLyBSZWdpc3RlciBlcnJvciBsaXN0ZW5lci5cbiAgc3RvcCA9ICdzdG9wJywgLy8gVHJpZ2dlcmVkIHdoZW4gYmFja2dyb3VuZCBzZXJ2aWNlIGhhcyBiZWVuIHN0b3BwZWQgc3VjY2VzZnVsbHkuXG4gIHN0YXJ0ID0gJ3N0YXJ0JywgLy8gRXZlbnQgaXMgdHJpZ2dlcmVkIHdoZW4gYmFja2dyb3VuZCBzZXJ2aWNlIGhhcyBiZWVuIHN0YXJ0ZWQgc3VjY2VzZnVsbHkuXG4gIGFjdGl2aXR5ID0gJ2FjdGl2aXR5JywgLy8gUmVnaXN0ZXIgYWN0aXZpdHkgbW9uaXRvcmluZyBsaXN0ZW5lci5cbiAgc3RhdGlvbmFyeSA9ICdzdGF0aW9uYXJ5JywgLy8gUmVnaXN0ZXIgc3RhdGlvbmFyeSBsb2NhdGlvbiBldmVudCBsaXN0ZW5lci5cbiAgbG9jYXRpb24gPSAnbG9jYXRpb24nLCAvLyBSZWdpc3RlciBsb2NhdGlvbiBldmVudCBsaXN0ZW5lci5cbn1cblxuZXhwb3J0IGVudW0gQmFja2dyb3VuZEdlb2xvY2F0aW9uQXV0aG9yaXphdGlvblN0YXR1cyB7XG4gIE5PVF9BVVRIT1JJWkVEID0gMCxcbiAgQVVUSE9SSVpFRCA9IDEsXG4gIEFVVEhPUklaRURfRk9SRUdST1VORCA9IDIsXG59XG5cbmV4cG9ydCBlbnVtIEJhY2tncm91bmRHZW9sb2NhdGlvbkxvZ0xldmVsIHtcbiAgVFJBQ0UgPSAnVFJBQ0UnLFxuICBERUJVRyA9ICdERUJVRycsXG4gIElORk8gPSAnSU5GTycsXG4gIFdBUk4gPSAnV0FSTicsXG4gIEVSUk9SID0gJ0VSUk9SJyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYWNrZ3JvdW5kR2VvbG9jYXRpb25Mb2dFbnRyeSB7XG4gIC8qKiBJRCBvZiBsb2cgZW50cnkgYXMgc3RvcmVkIGluIGRiLiAqL1xuICBpZDogbnVtYmVyO1xuXG4gIC8qKiBUaW1lc3RhbXAgaW4gbWlsbGlzZWNvbmRzIHNpbmNlIGJlZ2lubmluZyBvZiBVTklYIGVwb2NoLiAqL1xuICB0aW1lc3RhbXA6IG51bWJlcjtcblxuICAvKiogTG9nIGxldmVsICovXG4gIGxldmVsOiBCYWNrZ3JvdW5kR2VvbG9jYXRpb25Mb2dMZXZlbDtcblxuICAvKiogTG9nIG1lc3NhZ2UgKi9cbiAgbWVzc2FnZTogc3RyaW5nO1xuXG4gIC8qKiBSZWNvcmRlZCBzdGFja3RyYWNlLiAoQW5kcm9pZCBvbmx5LCBvbiBpT1MgcGFydCBvZiBtZXNzYWdlKSAqL1xuICBzdGFja1RyYWNlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZVN0YXR1cyB7XG4gIC8qKiBUUlVFIGlmIHNlcnZpY2UgaXMgcnVubmluZy4gKi9cbiAgaXNSdW5uaW5nOiBib29sZWFuO1xuXG4gIC8qKiBUUlVFIGlmIGxvY2F0aW9uIHNlcnZpY2VzIGFyZSBlbmFibGVkICovXG4gIGxvY2F0aW9uU2VydmljZXNFbmFibGVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBdXRob3JpemF0aW9uIHN0YXR1cy5cbiAgICpcbiAgICogUG9zaWJsZSB2YWx1ZXM6XG4gICAqICBOT1RfQVVUSE9SSVpFRCwgQVVUSE9SSVpFRCwgQVVUSE9SSVpFRF9GT1JFR1JPVU5EXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGlmIChhdXRob3JpemF0aW9uID09IEJhY2tncm91bmRHZW9sb2NhdGlvbi5OT1RfQVVUSE9SSVpFRCkgey4uLn1cbiAgICovXG4gIGF1dGhvcml6YXRpb246IEJhY2tncm91bmRHZW9sb2NhdGlvbkF1dGhvcml6YXRpb25TdGF0dXM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFja2dyb3VuZEdlb2xvY2F0aW9uIHtcbiAgY29kZTogQmFja2dyb3VuZEdlb2xvY2F0aW9uTG9jYXRpb25Db2RlO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFja2dyb3VuZEdlb2xvY2F0aW9uQ3VycmVudFBvc2l0aW9uQ29uZmlnIHtcbiAgdGltZW91dDogbnVtYmVyO1xuICBtYXhpbXVtQWdlOiBudW1iZXI7XG4gIGVuYWJsZUhpZ2hBY2N1cmFjeTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYWNrZ3JvdW5kR2VvbG9jYXRpb25SZXNwb25zZSB7XG4gIC8qKiBJRCBvZiBsb2NhdGlvbiBhcyBzdG9yZWQgaW4gREIgKG9yIG51bGwpICovXG4gIGlkOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE5hdGl2ZSBwcm92aWRlciByZXBvbnNpYmxlIGZvciBsb2NhdGlvbi5cbiAgICpcbiAgICogUG9zc2libGUgdmFsdWVzOlxuICAgKiBcImdwc1wiLCBcIm5ldHdvcmtcIiwgXCJwYXNzaXZlXCIgb3IgXCJmdXNlZFwiXG4gICAqL1xuICBwcm92aWRlcjogQmFja2dyb3VuZEdlb2xvY2F0aW9uTmF0aXZlUHJvdmlkZXI7XG5cbiAgLyoqIENvbmZpZ3VyZWQgbG9jYXRpb24gcHJvdmlkZXIuICovXG4gIGxvY2F0aW9uUHJvdmlkZXI6IEJhY2tncm91bmRHZW9sb2NhdGlvbkxvY2F0aW9uUHJvdmlkZXI7XG5cbiAgLyoqIFVUQyB0aW1lIG9mIHRoaXMgZml4LCBpbiBtaWxsaXNlY29uZHMgc2luY2UgSmFudWFyeSAxLCAxOTcwLiAqL1xuICB0aW1lOiBudW1iZXI7XG5cbiAgLyoqIExhdGl0dWRlLCBpbiBkZWdyZWVzLiAqL1xuICBsYXRpdHVkZTogbnVtYmVyO1xuXG4gIC8qKiBMb25naXR1ZGUsIGluIGRlZ3JlZXMuICovXG4gIGxvbmdpdHVkZTogbnVtYmVyO1xuXG4gIC8qKiBFc3RpbWF0ZWQgYWNjdXJhY3kgb2YgdGhpcyBsb2NhdGlvbiwgaW4gbWV0ZXJzLiAqL1xuICBhY2N1cmFjeTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBTcGVlZCBpZiBpdCBpcyBhdmFpbGFibGUsIGluIG1ldGVycy9zZWNvbmQgb3ZlciBncm91bmQuXG4gICAqXG4gICAqIE5vdGU6IE5vdCBhbGwgcHJvdmlkZXJzIGFyZSBjYXBhYmxlIG9mIHByb3ZpZGluZyBzcGVlZC5cbiAgICogVHlwaWNhbGx5IG5ldHdvcmsgcHJvdmlkZXJzIGFyZSBub3QgYWJsZSB0byBkbyBzby5cbiAgICovXG4gIHNwZWVkOiBudW1iZXI7XG5cbiAgLyoqIEFsdGl0dWRlIGlmIGF2YWlsYWJsZSwgaW4gbWV0ZXJzIGFib3ZlIHRoZSBXR1MgODQgcmVmZXJlbmNlIGVsbGlwc29pZC4gKi9cbiAgYWx0aXR1ZGU6IG51bWJlcjtcblxuICAvKiogQmVhcmluZywgaW4gZGVncmVlcy4gKi9cbiAgYmVhcmluZzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUcnVlIGlmIGxvY2F0aW9uIHdhcyByZWNvcmRlZCBieSBtb2NrIHByb3ZpZGVyLiAoQU5EUk9JRCBPTkxZKVxuICAgKlxuICAgKiBOb3RlOiB0aGlzIHByb3BlcnR5IGlzIG5vdCBlbmFibGVkIGJ5IGRlZmF1bHQhXG4gICAqIFlvdSBjYW4gZW5hYmxlIGl0IFwicG9zdFRlbXBsYXRlXCIgY29uZmlndXJlIG9wdGlvbi5cbiAgICovXG4gIGlzRnJvbU1vY2tQcm92aWRlcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRydWUgaWYgZGV2aWNlIGhhcyBtb2NrIGxvY2F0aW9ucyBlbmFibGVkLiAoQU5EUk9JRCBPTkxZKVxuICAgKlxuICAgKiBOb3RlOiB0aGlzIHByb3BlcnR5IGlzIG5vdCBlbmFibGVkIGJ5IGRlZmF1bHQhXG4gICAqIFlvdSBjYW4gZW5hYmxlIGl0IFwicG9zdFRlbXBsYXRlXCIgY29uZmlndXJlIG9wdGlvbi5cbiAgICovXG4gIG1vY2tMb2NhdGlvbnNFbmFibGVkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYWNrZ3JvdW5kR2VvbG9jYXRpb25Db25maWcge1xuICAvKipcbiAgICogU2V0IGxvY2F0aW9uIHByb3ZpZGVyXG4gICAqXG4gICAqIFBsYXRmb3JtOiBhbGxcbiAgICogQXZhaWxhYmxlIHByb3ZpZGVyczpcbiAgICogIERJU1RBTkNFX0ZJTFRFUl9QUk9WSURFUixcbiAgICogIEFDVElWSVRZX1BST1ZJREVSXG4gICAqICBSQVdfUFJPVklERVJcbiAgICpcbiAgICogQGRlZmF1bHQgRElTVEFOQ0VfRklMVEVSX1BST1ZJREVSXG4gICAqIEBleGFtcGxlXG4gICAqIHsgbG9jYXRpb25Qcm92aWRlcjogTG9jYXRpb25Qcm92aWRlci5SQVdfUFJPVklERVIgfVxuICAgKi9cbiAgbG9jYXRpb25Qcm92aWRlcj86IG51bWJlcjtcblxuICAvKipcbiAgICogRGVzaXJlZCBhY2N1cmFjeSBpbiBtZXRlcnMuXG4gICAqXG4gICAqIFBsYXRmb3JtOiBhbGxcbiAgICogUHJvdmlkZXI6IGFsbFxuICAgKiBQb3NzaWJsZSB2YWx1ZXM6XG4gICAqICBISUdIX0FDQ1VSQUNZLFxuICAgKiAgTUVESVVNX0FDQ1VSQUNZLFxuICAgKiAgTE9XX0FDQ1VSQUNZLFxuICAgKiAgUEFTU0lWRV9BQ0NVUkFDWVxuICAgKiBOb3RlOiBBY2N1cmFjeSBoYXMgZGlyZWN0IGVmZmVjdCBvbiBwb3dlciBkcmFpbi4gTG93ZXIgYWNjdXJhY3kgPSBsb3dlciBwb3dlciBkcmFpbi5cbiAgICpcbiAgICogQGRlZmF1bHQgTUVESVVNX0FDQ1VSQUNZXG4gICAqIEBleGFtcGxlXG4gICAqIHsgZGVzaXJlZEFjY3VyYWN5OiBCYWNrZ3JvdW5kR2VvbG9jYXRpb25BY2N1cmFjeS5MT1cgfVxuICAgKi9cbiAgZGVzaXJlZEFjY3VyYWN5PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBTdGF0aW9uYXJ5IHJhZGl1cyBpbiBtZXRlcnMuXG4gICAqXG4gICAqIFdoZW4gc3RvcHBlZCwgdGhlIG1pbmltdW0gZGlzdGFuY2UgdGhlIGRldmljZSBtdXN0IG1vdmUgYmV5b25kIHRoZSBzdGF0aW9uYXJ5IGxvY2F0aW9uIGZvciBhZ2dyZXNzaXZlIGJhY2tncm91bmQtdHJhY2tpbmcgdG8gZW5nYWdlLlxuICAgKiBQbGF0Zm9ybTogYWxsXG4gICAqIFByb3ZpZGVyOiBESVNUQU5DRV9GSUxURVJcbiAgICpcbiAgICogQGRlZmF1bHQgNTBcbiAgICovXG4gIHN0YXRpb25hcnlSYWRpdXM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdoZW4gZW5hYmxlZCwgdGhlIHBsdWdpbiB3aWxsIGVtaXQgc291bmRzIGZvciBsaWZlLWN5Y2xlIGV2ZW50cyBvZiBiYWNrZ3JvdW5kLWdlb2xvY2F0aW9uISBTZWUgZGVidWdnaW5nIHNvdW5kcyB0YWJsZS5cbiAgICpcbiAgICogUGxhdGZvcm06IGFsbFxuICAgKiBQcm92aWRlcjogYWxsXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkZWJ1Zz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBtaW5pbXVtIGRpc3RhbmNlIChtZWFzdXJlZCBpbiBtZXRlcnMpIGEgZGV2aWNlIG11c3QgbW92ZSBob3Jpem9udGFsbHkgYmVmb3JlIGFuIHVwZGF0ZSBldmVudCBpcyBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIFBsYXRmb3JtOiBhbGxcbiAgICogUHJvdmlkZXI6IERJU1RBTkNFX0ZJTFRFUiwgUkFXXG4gICAqXG4gICAqIEBkZWZhdWx0IDUwMFxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2FwcGxlLmNvLzJvSG8yQ1Z8QXBwbGUgZG9jc31cbiAgICovXG4gIGRpc3RhbmNlRmlsdGVyPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgdGhpcyBpbiBvcmRlciB0byBmb3JjZSBhIHN0b3AoKSB3aGVuIHRoZSBhcHBsaWNhdGlvbiB0ZXJtaW5hdGVkLlxuICAgKiBFLmcuIG9uIGlPUywgZG91YmxlLXRhcCBob21lIGJ1dHRvbiwgc3dpcGUgYXdheSB0aGUgYXBwLlxuICAgKlxuICAgKiBQbGF0Zm9ybTogYWxsXG4gICAqIFByb3ZpZGVyOiBhbGxcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgc3RvcE9uVGVybWluYXRlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU3RhcnQgYmFja2dyb3VuZCBzZXJ2aWNlIG9uIGRldmljZSBib290LlxuICAgKlxuICAgKiBQbGF0Zm9ybTogQW5kcm9pZFxuICAgKiBQcm92aWRlcjogYWxsXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBzdGFydE9uQm9vdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBtaW5pbXVtIHRpbWUgaW50ZXJ2YWwgYmV0d2VlbiBsb2NhdGlvbiB1cGRhdGVzIGluIG1pbGxpc2Vjb25kcy5cbiAgICpcbiAgICogUGxhdGZvcm06IEFuZHJvaWRcbiAgICogUHJvdmlkZXI6IGFsbFxuICAgKlxuICAgKiBAZGVmYXVsdCA2MDAwMFxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2JpdC5seS8xeDAwUlV1fEFuZHJvaWQgZG9jc31cbiAgICovXG4gIGludGVydmFsPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBGYXN0ZXN0IHJhdGUgaW4gbWlsbGlzZWNvbmRzIGF0IHdoaWNoIHlvdXIgYXBwIGNhbiBoYW5kbGUgbG9jYXRpb24gdXBkYXRlcy5cbiAgICpcbiAgICogUGxhdGZvcm06IEFuZHJvaWRcbiAgICogUHJvdmlkZXI6IEFDVElWSVRZXG4gICAqXG4gICAqIEBkZWZhdWx0IDEyMDAwMFxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2JpdC5seS8xeDAwUlV1fEFuZHJvaWQgZG9jc31cbiAgICovXG4gIGZhc3Rlc3RJbnRlcnZhbD86IG51bWJlcjtcblxuICAvKipcbiAgICogUmF0ZSBpbiBtaWxsaXNlY29uZHMgYXQgd2hpY2ggYWN0aXZpdHkgcmVjb2duaXRpb24gb2NjdXJzLlxuICAgKiBMYXJnZXIgdmFsdWVzIHdpbGwgcmVzdWx0IGluIGZld2VyIGFjdGl2aXR5IGRldGVjdGlvbnMgd2hpbGUgaW1wcm92aW5nIGJhdHRlcnkgbGlmZS5cbiAgICpcbiAgICogUGxhdGZvcm06IEFuZHJvaWRcbiAgICogUHJvdmlkZXI6IEFDVElWSVRZXG4gICAqXG4gICAqIEBkZWZhdWx0IDEwMDAwXG4gICAqL1xuICBhY3Rpdml0aWVzSW50ZXJ2YWw/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFN0b3AgbG9jYXRpb24gdXBkYXRlcywgd2hlbiB0aGUgU1RJTEwgYWN0aXZpdHkgaXMgZGV0ZWN0ZWQuXG4gICAqL1xuICBzdG9wT25TdGlsbEFjdGl2aXR5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRW5hYmxlL2Rpc2FibGUgbG9jYWwgbm90aWZpY2F0aW9ucyB3aGVuIHRyYWNraW5nIGFuZCBzeW5jaW5nIGxvY2F0aW9ucy5cbiAgICpcbiAgICogUGxhdGZvcm06IEFuZHJvaWRcbiAgICogUHJvdmlkZXI6IGFsbFxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBub3RpZmljYXRpb25zRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEFsbG93IGxvY2F0aW9uIHN5bmMgc2VydmljZSB0byBydW4gaW4gZm9yZWdyb3VuZCBzdGF0ZS5cbiAgICogRm9yZWdyb3VuZCBzdGF0ZSBhbHNvIHJlcXVpcmVzIGEgbm90aWZpY2F0aW9uIHRvIGJlIHByZXNlbnRlZCB0byB0aGUgdXNlci5cbiAgICpcbiAgICogUGxhdGZvcm06IEFuZHJvaWRcbiAgICogUHJvdmlkZXI6IGFsbFxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgc3RhcnRGb3JlZ3JvdW5kPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ3VzdG9tIG5vdGlmaWNhdGlvbiB0aXRsZSBpbiB0aGUgZHJhd2VyLlxuICAgKlxuICAgKiBQbGF0Zm9ybTogQW5kcm9pZFxuICAgKiBQcm92aWRlcjogYWxsXG4gICAqIEBkZWZhdWx0IFwiQmFja2dyb3VuZCB0cmFja2luZ1wiXG4gICAqL1xuICBub3RpZmljYXRpb25UaXRsZT86IHN0cmluZztcblxuICAvKipcbiAgICogQ3VzdG9tIG5vdGlmaWNhdGlvbiB0ZXh0IGluIHRoZSBkcmF3ZXIuXG4gICAqXG4gICAqIFBsYXRmb3JtOiBBbmRyb2lkXG4gICAqIFByb3ZpZGVyOiBhbGxcbiAgICpcbiAgICogQGRlZmF1bHQgXCJFTkFCTEVEXCJcbiAgICovXG4gIG5vdGlmaWNhdGlvblRleHQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBhY2NlbnQgY29sb3IgKGhleCB0cmlwbGV0KSB0byB1c2UgZm9yIG5vdGlmaWNhdGlvbi5cbiAgICogRWcuIDxjb2RlPiM0Q0FGNTA8L2NvZGU+LlxuICAgKlxuICAgKiBQbGF0Zm9ybTogQW5kcm9pZFxuICAgKiBQcm92aWRlcjogYWxsXG4gICAqL1xuICBub3RpZmljYXRpb25JY29uQ29sb3I/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBmaWxlbmFtZSBvZiBhIGN1c3RvbSBub3RpZmljYXRpb24gaWNvbi5cbiAgICpcbiAgICogUGxhdGZvcm06IEFuZHJvaWRcbiAgICogUHJvdmlkZXI6IGFsbFxuICAgKi9cbiAgbm90aWZpY2F0aW9uSWNvbkxhcmdlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZmlsZW5hbWUgb2YgYSBjdXN0b20gbm90aWZpY2F0aW9uIGljb24uXG4gICAqXG4gICAqIFBsYXRmb3JtOiBBbmRyb2lkXG4gICAqIFByb3ZpZGVyOiBhbGxcbiAgICovXG4gIG5vdGlmaWNhdGlvbkljb25TbWFsbD86IHN0cmluZztcblxuICAvKipcbiAgICogQWN0aXZpdHkgdHlwZS5cbiAgICogUHJlc3VtYWJseSwgdGhpcyBhZmZlY3RzIGlPUyBHUFMgYWxnb3JpdGhtLlxuICAgKlxuICAgKiBQb3NzaWJsZSB2YWx1ZXM6XG4gICAqIFwiQXV0b21vdGl2ZU5hdmlnYXRpb25cIiwgXCJPdGhlck5hdmlnYXRpb25cIiwgXCJGaXRuZXNzXCIsIFwiT3RoZXJcIlxuICAgKlxuICAgKiBQbGF0Zm9ybTogaU9TXG4gICAqIFByb3ZpZGVyOiBhbGxcbiAgICpcbiAgICogQGRlZmF1bHQgXCJPdGhlck5hdmlnYXRpb25cIlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2FwcGxlLmNvLzJvSG9mcEh8QXBwbGUgZG9jc31cbiAgICovXG4gIGFjdGl2aXR5VHlwZT86IHN0cmluZztcblxuICAvKipcbiAgICogUGF1c2VzIGxvY2F0aW9uIHVwZGF0ZXMgd2hlbiBhcHAgaXMgcGF1c2VkLlxuICAgKlxuICAgKiBQbGF0Zm9ybTogaU9TXG4gICAqIFByb3ZpZGVyOiBhbGxcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9hcHBsZS5jby8yQ2JqRVcyfEFwcGxlIGRvY3N9XG4gICAqL1xuICBwYXVzZUxvY2F0aW9uVXBkYXRlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFN3aXRjaCB0byBsZXNzIGFjY3VyYXRlIHNpZ25pZmljYW50IGNoYW5nZXMgYW5kIHJlZ2lvbiBtb25pdG9yeSB3aGVuIGluIGJhY2tncm91bmQuXG4gICAqXG4gICAqIFBsYXRmb3JtOiBpT1NcbiAgICogUHJvdmlkZXI6IGFsbFxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgc2F2ZUJhdHRlcnlPbkJhY2tncm91bmQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTZXJ2ZXIgdXJsIHdoZXJlIHRvIHNlbmQgSFRUUCBQT1NUIHdpdGggcmVjb3JkZWQgbG9jYXRpb25zXG4gICAqXG4gICAqIFBsYXRmb3JtOiBhbGxcbiAgICogUHJvdmlkZXI6IGFsbFxuICAgKi9cbiAgdXJsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTZXJ2ZXIgdXJsIHdoZXJlIHRvIHNlbmQgZmFpbCB0byBwb3N0IGxvY2F0aW9uc1xuICAgKlxuICAgKiBQbGF0Zm9ybTogYWxsXG4gICAqIFByb3ZpZGVyOiBhbGxcbiAgICovXG4gIHN5bmNVcmw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyBob3cgbWFueSBwcmV2aW91c2x5IGZhaWxlZCBsb2NhdGlvbnMgd2lsbCBiZSBzZW50IHRvIHNlcnZlciBhdCBvbmNlLlxuICAgKlxuICAgKiBQbGF0Zm9ybTogYWxsXG4gICAqIFByb3ZpZGVyOiBhbGxcbiAgICpcbiAgICogQGRlZmF1bHQgMTAwXG4gICAqL1xuICBzeW5jVGhyZXNob2xkPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBIVFRQIGhlYWRlcnMgc2VudCBhbG9uZyBpbiBIVFRQIHJlcXVlc3QuXG4gICAqXG4gICAqIFBsYXRmb3JtOiBhbGxcbiAgICogUHJvdmlkZXI6IGFsbFxuICAgKi9cbiAgaHR0cEhlYWRlcnM/OiBhbnk7XG5cbiAgLyoqXG4gICAqIExpbWl0IG1heGltdW0gbnVtYmVyIG9mIGxvY2F0aW9ucyBzdG9yZWQgaW50byBkYi5cbiAgICpcbiAgICogUGxhdGZvcm06IGFsbFxuICAgKiBQcm92aWRlcjogYWxsXG4gICAqXG4gICAqIEBkZWZhdWx0IDEwMDAwXG4gICAqL1xuICBtYXhMb2NhdGlvbnM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEN1c3RvbWl6YXRpb24gcG9zdCB0ZW1wbGF0ZS5cbiAgICpcbiAgICogUGxhdGZvcm06IGFsbFxuICAgKiBQcm92aWRlcjogYWxsXG4gICAqL1xuICBwb3N0VGVtcGxhdGU/OiBhbnk7XG59XG5cbi8qKlxuICogU2V0IGxvY2F0aW9uIHNlcnZpY2UgcHJvdmlkZXIgQHNlZSBodHRwczovL2dpdGh1Yi5jb20vbWF1cm9uODUvY29yZG92YS1wbHVnaW4tYmFja2dyb3VuZC1nZW9sb2NhdGlvbi93aWtpL0FuZHJvaWQtcHJvdmlkZXJzXG4gKlxuICogUG9zc2libGUgdmFsdWVzOlxuICogIEFORFJPSURfRElTVEFOQ0VfRklMVEVSX1BST1ZJREVSOiAwLFxuICogIEFORFJPSURfQUNUSVZJVFlfUFJPVklERVI6IDFcbiAqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgZGVjbGFyZSBlbnVtIEJhY2tncm91bmRHZW9sb2NhdGlvblByb3ZpZGVyIHtcbiAgQU5EUk9JRF9ESVNUQU5DRV9GSUxURVJfUFJPVklERVIgPSAwLFxuICBBTkRST0lEX0FDVElWSVRZX1BST1ZJREVSID0gMSxcbn1cblxuLyoqXG4gKiBEZXNpcmVkIGFjY3VyYWN5IGluIG1ldGVycy4gUG9zc2libGUgdmFsdWVzIFswLCAxMCwgMTAwLCAxMDAwXS5cbiAqIFRoZSBsb3dlciB0aGUgbnVtYmVyLCB0aGUgbW9yZSBwb3dlciBkZXZvdGVkIHRvIEdlb0xvY2F0aW9uIHJlc3VsdGluZyBpbiBoaWdoZXIgYWNjdXJhY3kgcmVhZGluZ3MuXG4gKiAxMDAwIHJlc3VsdHMgaW4gbG93ZXN0IHBvd2VyIGRyYWluIGFuZCBsZWFzdCBhY2N1cmF0ZSByZWFkaW5ncy5cbiAqXG4gKiBQb3NzaWJsZSB2YWx1ZXM6XG4gKiAgSElHSDogMFxuICogIE1FRElVTTogMTBcbiAqICBMT1c6IDEwMFxuICogIFBBU1NJVkU6IDEwMDBcbiAqXG4gKiBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBkZWNsYXJlIGVudW0gQmFja2dyb3VuZEdlb2xvY2F0aW9uQWNjdXJhY3kge1xuICBISUdIID0gMCxcbiAgTUVESVVNID0gMTAsXG4gIExPVyA9IDEwMCxcbiAgUEFTU0lWRSA9IDEwMDAsXG59XG5cbi8qKlxuICogVXNlZCBpbiB0aGUgc3dpdGNoTW9kZSBmdW5jdGlvblxuICpcbiAqIFBvc3NpYmxlIHZhbHVlczpcbiAqICBCQUNLR1JPVU5EOiAwXG4gKiAgRk9SRUdST1VORDogMVxuICpcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBkZWNsYXJlIGVudW0gQmFja2dyb3VuZEdlb2xvY2F0aW9uTW9kZSB7XG4gIEJBQ0tHUk9VTkQgPSAwLFxuICBGT1JFR1JPVU5EID0gMSxcbn1cblxuZXhwb3J0IGRlY2xhcmUgZW51bSBCYWNrZ3JvdW5kR2VvbG9jYXRpb25JT1NBY3Rpdml0eSB7XG4gIEF1dG9tb3RpdmVOYXZpZ2F0aW9uID0gJ0F1dG9tb3RpdmVOYXZpZ2F0aW9uJyxcbiAgT3RoZXJOYXZpZ2F0aW9uID0gJ090aGVyTmF2aWdhdGlvbicsXG4gIEZpdG5lc3MgPSAnRml0bmVzcycsXG4gIE90aGVyID0gJ090aGVyJyxcbn1cblxuLyoqXG4gKiBAbmFtZSBCYWNrZ3JvdW5kIEdlb2xvY2F0aW9uXG4gKiBAZGVzY3JpcHRpb25cbiAqIFRoaXMgcGx1Z2luIHByb3ZpZGVzIGZvcmVncm91bmQgYW5kIGJhY2tncm91bmQgZ2VvbG9jYXRpb24gd2l0aCBiYXR0ZXJ5LXNhdmluZyBcImNpcmN1bGFyIHJlZ2lvbiBtb25pdG9yaW5nXCIgYW5kIFwic3RvcCBkZXRlY3Rpb25cIi4gRm9yXG4gKiBtb3JlIGRldGFpbCwgcGxlYXNlIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbWF1cm9uODUvY29yZG92YS1wbHVnaW4tYmFja2dyb3VuZC1nZW9sb2NhdGlvblxuICpcbiAqIEB1c2FnZVxuICpcbiAqIEJhY2tncm91bmRHZW9sb2NhdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoaW4gYXBwLnRzIGFuZCBvciBiZWZvcmUgR2VvbG9jYXRpb24uIE90aGVyd2lzZSB0aGUgcGxhdGZvcm0gd2lsbCBub3QgYXNrIHlvdSBmb3IgYmFja2dyb3VuZCB0cmFja2luZyBwZXJtaXNzaW9uLlxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IEJhY2tncm91bmRHZW9sb2NhdGlvbiwgQmFja2dyb3VuZEdlb2xvY2F0aW9uQ29uZmlnLCBCYWNrZ3JvdW5kR2VvbG9jYXRpb25FdmVudHMsIEJhY2tncm91bmRHZW9sb2NhdGlvblJlc3BvbnNlIH0gZnJvbSAnQGlvbmljLW5hdGl2ZS9iYWNrZ3JvdW5kLWdlb2xvY2F0aW9uL25neCc7XG4gKlxuICogY29uc3RydWN0b3IocHJpdmF0ZSBiYWNrZ3JvdW5kR2VvbG9jYXRpb246IEJhY2tncm91bmRHZW9sb2NhdGlvbikgeyB9XG4gKlxuICogLi4uXG4gKlxuICogY29uc3QgY29uZmlnOiBCYWNrZ3JvdW5kR2VvbG9jYXRpb25Db25maWcgPSB7XG4gKiAgICAgICAgICAgICBkZXNpcmVkQWNjdXJhY3k6IDEwLFxuICogICAgICAgICAgICAgc3RhdGlvbmFyeVJhZGl1czogMjAsXG4gKiAgICAgICAgICAgICBkaXN0YW5jZUZpbHRlcjogMzAsXG4gKiAgICAgICAgICAgICBkZWJ1ZzogdHJ1ZSwgLy8gIGVuYWJsZSB0aGlzIGhlYXIgc291bmRzIGZvciBiYWNrZ3JvdW5kLWdlb2xvY2F0aW9uIGxpZmUtY3ljbGUuXG4gKiAgICAgICAgICAgICBzdG9wT25UZXJtaW5hdGU6IGZhbHNlLCAvLyBlbmFibGUgdGhpcyB0byBjbGVhciBiYWNrZ3JvdW5kIGxvY2F0aW9uIHNldHRpbmdzIHdoZW4gdGhlIGFwcCB0ZXJtaW5hdGVzXG4gKiAgICAgfTtcbiAqXG4gKiB0aGlzLmJhY2tncm91bmRHZW9sb2NhdGlvbi5jb25maWd1cmUoY29uZmlnKVxuICogICAudGhlbigoKSA9PiB7XG4gKlxuICogICAgIHRoaXMuYmFja2dyb3VuZEdlb2xvY2F0aW9uLm9uKEJhY2tncm91bmRHZW9sb2NhdGlvbkV2ZW50cy5sb2NhdGlvbikuc3Vic2NyaWJlKChsb2NhdGlvbjogQmFja2dyb3VuZEdlb2xvY2F0aW9uUmVzcG9uc2UpID0+IHtcbiAqICAgICAgIGNvbnNvbGUubG9nKGxvY2F0aW9uKTtcbiAqXG4gKiAgICAgICAvLyBJTVBPUlRBTlQ6ICBZb3UgbXVzdCBleGVjdXRlIHRoZSBmaW5pc2ggbWV0aG9kIGhlcmUgdG8gaW5mb3JtIHRoZSBuYXRpdmUgcGx1Z2luIHRoYXQgeW91J3JlIGZpbmlzaGVkLFxuICogICAgICAgLy8gYW5kIHRoZSBiYWNrZ3JvdW5kLXRhc2sgbWF5IGJlIGNvbXBsZXRlZC4gIFlvdSBtdXN0IGRvIHRoaXMgcmVnYXJkbGVzcyBpZiB5b3VyIG9wZXJhdGlvbnMgYXJlIHN1Y2Nlc3NmdWwgb3Igbm90LlxuICogICAgICAgLy8gSUYgWU9VIERPTidULCBpb3Mgd2lsbCBDUkFTSCBZT1VSIEFQUCBmb3Igc3BlbmRpbmcgdG9vIG11Y2ggdGltZSBpbiB0aGUgYmFja2dyb3VuZC5cbiAqICAgICAgIHRoaXMuYmFja2dyb3VuZEdlb2xvY2F0aW9uLmZpbmlzaCgpOyAvLyBGT1IgSU9TIE9OTFlcbiAqICAgICB9KTtcbiAqXG4gKiAgIH0pO1xuICpcbiAqIC8vIHN0YXJ0IHJlY29yZGluZyBsb2NhdGlvblxuICogdGhpcy5iYWNrZ3JvdW5kR2VvbG9jYXRpb24uc3RhcnQoKTtcbiAqXG4gKiAvLyBJZiB5b3Ugd2lzaCB0byB0dXJuIE9GRiBiYWNrZ3JvdW5kLXRyYWNraW5nLCBjYWxsIHRoZSAjc3RvcCBtZXRob2QuXG4gKiB0aGlzLmJhY2tncm91bmRHZW9sb2NhdGlvbi5zdG9wKCk7XG4gKlxuICogYGBgXG4gKiBAaW50ZXJmYWNlc1xuICogQmFja2dyb3VuZEdlb2xvY2F0aW9uUmVzcG9uc2VcbiAqIEJhY2tncm91bmRHZW9sb2NhdGlvbkNvbmZpZ1xuICovXG5AUGx1Z2luKHtcbiAgcGx1Z2luTmFtZTogJ0JhY2tncm91bmRHZW9sb2NhdGlvbicsXG4gIHBsdWdpbjogJ0BtYXVyb244NS9jb3Jkb3ZhLXBsdWdpbi1iYWNrZ3JvdW5kLWdlb2xvY2F0aW9uJyxcbiAgcGx1Z2luUmVmOiAnQmFja2dyb3VuZEdlb2xvY2F0aW9uJyxcbiAgcmVwbzogJ2h0dHBzOi8vZ2l0aHViLmNvbS9tYXVyb244NS9jb3Jkb3ZhLXBsdWdpbi1iYWNrZ3JvdW5kLWdlb2xvY2F0aW9uJyxcbiAgcGxhdGZvcm1zOiBbJ0FuZHJvaWQnLCAnaU9TJ10sXG59KVxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEJhY2tncm91bmRHZW9sb2NhdGlvbiBleHRlbmRzIElvbmljTmF0aXZlUGx1Z2luIHtcbiAgLyoqXG4gICAqIENvbmZpZ3VyZSB0aGUgcGx1Z2luLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyB7QmFja2dyb3VuZEdlb2xvY2F0aW9uQ29uZmlnfSBvcHRpb25zIEFuIG9iamVjdCBvZiB0eXBlIENvbmZpZ1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGNvbmZpZ3VyZShvcHRpb25zOiBCYWNrZ3JvdW5kR2VvbG9jYXRpb25Db25maWcpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUdXJuIE9OIHRoZSBiYWNrZ3JvdW5kLWdlb2xvY2F0aW9uIHN5c3RlbS5cbiAgICogVGhlIHVzZXIgd2lsbCBiZSB0cmFja2VkIHdoZW5ldmVyIHRoZXkgc3VzcGVuZCB0aGUgYXBwLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBzdGFydCgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUdXJuIE9GRiBiYWNrZ3JvdW5kLXRyYWNraW5nXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSgpXG4gIHN0b3AoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogSW5mb3JtIHRoZSBuYXRpdmUgcGx1Z2luIHRoYXQgeW91J3JlIGZpbmlzaGVkLCB0aGUgYmFja2dyb3VuZC10YXNrIG1heSBiZSBjb21wbGV0ZWRcbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBwbGF0Zm9ybXM6IFsnaU9TJ10sXG4gIH0pXG4gIGZpbmlzaCgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JjZSB0aGUgcGx1Z2luIHRvIGVudGVyIFwibW92aW5nXCIgb3IgXCJzdGF0aW9uYXJ5XCIgc3RhdGVcbiAgICogQHBhcmFtIGlzTW92aW5nIHtib29sZWFufVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIHBsYXRmb3JtczogWydpT1MnXSxcbiAgfSlcbiAgY2hhbmdlUGFjZShpc01vdmluZzogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHVwIGNvbmZpZ3VyYXRpb25cbiAgICogQHBhcmFtIG9wdGlvbnMge0JhY2tncm91bmRHZW9sb2NhdGlvbkNvbmZpZ31cbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScsXG4gIH0pXG4gIHNldENvbmZpZyhvcHRpb25zOiBCYWNrZ3JvdW5kR2VvbG9jYXRpb25Db25maWcpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGN1cnJlbnQgc3RhdGlvbmFyeUxvY2F0aW9uIGlmIGF2YWlsYWJsZS4gbnVsbCBpZiBub3RcbiAgICogQHJldHVybnMge1Byb21pc2U8TG9jYXRpb24+fVxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIHBsYXRmb3JtczogWydpT1MnXSxcbiAgfSlcbiAgZ2V0U3RhdGlvbmFyeUxvY2F0aW9uKCk6IFByb21pc2U8QmFja2dyb3VuZEdlb2xvY2F0aW9uUmVzcG9uc2U+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgc3RhdGlvbmFyeS1yZWdpb24gbGlzdGVuZXIuIFdoZW5ldmVyIHRoZSBkZXZpY2VzIGVudGVycyBcInN0YXRpb25hcnktbW9kZVwiLFxuICAgKiB5b3VyICNzdWNjZXNzIGNhbGxiYWNrIHdpbGwgYmUgZXhlY3V0ZWQgd2l0aCAjbG9jYXRpb24gcGFyYW0gY29udGFpbmluZyAjcmFkaXVzIG9mIHJlZ2lvblxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIHBsYXRmb3JtczogWydpT1MnXSxcbiAgfSlcbiAgb25TdGF0aW9uYXJ5KCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGxvY2F0aW9uIGlzIGVuYWJsZWQgb24gdGhlIGRldmljZVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxudW1iZXI+fSBSZXR1cm5zIGEgcHJvbWlzZSB3aXRoIGludCBhcmd1bWVudCB0aGF0IHRha2VzIHZhbHVlcyAwLCAxICh0cnVlKS5cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBwbGF0Zm9ybXM6IFsnQW5kcm9pZCddLFxuICB9KVxuICBpc0xvY2F0aW9uRW5hYmxlZCgpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwbGF5IGFwcCBzZXR0aW5ncyB0byBjaGFuZ2UgcGVybWlzc2lvbnNcbiAgICovXG4gIEBDb3Jkb3ZhKHsgc3luYzogdHJ1ZSB9KVxuICBzaG93QXBwU2V0dGluZ3MoKTogdm9pZCB7fVxuXG4gIC8qKlxuICAgKiBEaXNwbGF5IGRldmljZSBsb2NhdGlvbiBzZXR0aW5nc1xuICAgKi9cbiAgQENvcmRvdmEoeyBzeW5jOiB0cnVlIH0pXG4gIHNob3dMb2NhdGlvblNldHRpbmdzKCk6IHZvaWQge31cblxuICAvKipcbiAgICogTWV0aG9kIGNhbiBiZSB1c2VkIHRvIGRldGVjdCB1c2VyIGNoYW5nZXMgaW4gbG9jYXRpb24gc2VydmljZXMgc2V0dGluZ3MuXG4gICAqIElmIHVzZXIgZW5hYmxlIG9yIGRpc2FibGUgbG9jYXRpb24gc2VydmljZXMgdGhlbiBzdWNjZXNzIGNhbGxiYWNrIHdpbGwgYmUgZXhlY3V0ZWQuXG4gICAqIEluIGNhc2Ugb3IgIChTZXR0aW5nTm90Rm91bmRFeGNlcHRpb24pIGZhaWwgY2FsbGJhY2sgd2lsbCBiZSBleGVjdXRlZC5cbiAgICogQHJldHVybnMge09ic2VydmFibGU8bnVtYmVyPn1cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBwbGF0Zm9ybXM6IFsnQW5kcm9pZCddLFxuICAgIG9ic2VydmFibGU6IHRydWUsXG4gIH0pXG4gIHdhdGNoTG9jYXRpb25Nb2RlKCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3Agd2F0Y2hpbmcgZm9yIGxvY2F0aW9uIG1vZGUgY2hhbmdlcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBwbGF0Zm9ybXM6IFsnQW5kcm9pZCddLFxuICB9KVxuICBzdG9wV2F0Y2hpbmdMb2NhdGlvbk1vZGUoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHdpbGwgcmV0dXJuIGFsbCBzdG9yZWQgbG9jYXRpb25zLlxuICAgKiBMb2NhdGlvbnMgYXJlIHN0b3JlZCB3aGVuOlxuICAgKiAgLSBjb25maWcuc3RvcE9uVGVybWluYXRlIGlzIGZhbHNlIGFuZCBtYWluIGFjdGl2aXR5IHdhcyBraWxsZWRcbiAgICogICAgYnkgdGhlIHN5c3RlbVxuICAgKiAgb3JcbiAgICogIC0gb3B0aW9uLmRlYnVnIGlzIHRydWVcbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBwbGF0Zm9ybXM6IFsnQW5kcm9pZCddLFxuICB9KVxuICBnZXRMb2NhdGlvbnMoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHdpbGwgcmV0dXJuIGxvY2F0aW9ucywgd2hpY2ggaGFzIG5vdCBiZWVuIHlldCBwb3N0ZWQgdG8gc2VydmVyLiBOT1RFOiBMb2NhdGlvbnMgZG9lcyBjb250YWluIGxvY2F0aW9uSWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGdldFZhbGlkTG9jYXRpb25zKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBzdG9yZWQgbG9jYXRpb24gYnkgZ2l2ZW4gbG9jYXRpb25JZC5cbiAgICogQHBhcmFtIGxvY2F0aW9uSWQge251bWJlcn1cbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBwbGF0Zm9ybXM6IFsnQW5kcm9pZCddLFxuICB9KVxuICBkZWxldGVMb2NhdGlvbihsb2NhdGlvbklkOiBudW1iZXIpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgYWxsIHN0b3JlZCBsb2NhdGlvbnMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgcGxhdGZvcm1zOiBbJ0FuZHJvaWQnXSxcbiAgfSlcbiAgZGVsZXRlQWxsTG9jYXRpb25zKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIE5vcm1hbGx5IHBsdWdpbiB3aWxsIGhhbmRsZSBzd2l0Y2hpbmcgYmV0d2VlbiBCQUNLR1JPVU5EIGFuZCBGT1JFR1JPVU5EIG1vZGUgaXRzZWxmLlxuICAgKiBDYWxsaW5nIHN3aXRjaE1vZGUgeW91IGNhbiBvdmVycmlkZSBwbHVnaW4gYmVoYXZpb3IgYW5kIGZvcmNlIHBsdWdpbiB0byBzd2l0Y2ggaW50byBvdGhlciBtb2RlLlxuICAgKlxuICAgKiBJbiBGT1JFR1JPVU5EIG1vZGUgcGx1Z2luIHVzZXMgaU9TIGxvY2FsIG1hbmFnZXIgdG8gcmVjZWl2ZSBsb2NhdGlvbnMgYW5kIGJlaGF2aW9yIGlzIGFmZmVjdGVkIGJ5IG9wdGlvbi5kZXNpcmVkQWNjdXJhY3kgYW5kIG9wdGlvbi5kaXN0YW5jZUZpbHRlci5cbiAgICogSW4gQkFDS0dST1VORCBtb2RlIHBsdWdpbiB1c2VzIHNpZ25pZmljYW50IGNoYW5nZXMgYW5kIHJlZ2lvbiBtb25pdG9yaW5nIHRvIHJlY2VpdmUgbG9jYXRpb25zIGFuZCB1c2VzIG9wdGlvbi5zdGF0aW9uYXJ5UmFkaXVzIG9ubHkuXG4gICAqXG4gICAqIEJhY2tncm91bmRHZW9sb2NhdGlvbi5Nb2RlLkZPUkVHUk9VTkRcbiAgICogQmFja2dyb3VuZEdlb2xvY2F0aW9uLk1vZGUuQkFDS0dST1VORFxuICAgKlxuICAgKiBAcGFyYW0gbW9kZUlkIHtudW1iZXJ9XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgcGxhdGZvcm1zOiBbJ2lPUyddLFxuICB9KVxuICBzd2l0Y2hNb2RlKG1vZGVJZDogbnVtYmVyKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFsbCBsb2dnZWQgZXZlbnRzLiBVc2VmdWwgZm9yIHBsdWdpbiBkZWJ1Z2dpbmcuIFBhcmFtZXRlciBsaW1pdCBsaW1pdHMgbnVtYmVyIG9mIHJldHVybmVkIGVudHJpZXMuXG4gICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21hdXJvbjg1L2NvcmRvdmEtcGx1Z2luLWJhY2tncm91bmQtZ2VvbG9jYXRpb24vdHJlZS92Mi4yLjEjZGVidWdnaW5nIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gbGltaXQge251bWJlcn0gTGltaXRzIHRoZSBudW1iZXIgb2YgZW50cmllc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBnZXRMb2dFbnRyaWVzKFxuICAgIGxpbWl0OiBudW1iZXIsXG4gICAgZnJvbUlkOiBudW1iZXIsXG4gICAgbWluTGV2ZWw6IEJhY2tncm91bmRHZW9sb2NhdGlvbkxvZ0xldmVsXG4gICk6IFByb21pc2U8QmFja2dyb3VuZEdlb2xvY2F0aW9uTG9nRW50cnlbXT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYWxsIGxvZ2dlZCBldmVudHMuIFVzZWZ1bCBmb3IgcGx1Z2luIGRlYnVnZ2luZy4gUGFyYW1ldGVyIGxpbWl0IGxpbWl0cyBudW1iZXIgb2YgcmV0dXJuZWQgZW50cmllcy5cbiAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vbWF1cm9uODUvY29yZG92YS1wbHVnaW4tYmFja2dyb3VuZC1nZW9sb2NhdGlvbi90cmVlL3YyLjIuMSNkZWJ1Z2dpbmcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGdldENvbmZpZygpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBPbmUgdGltZSBsb2NhdGlvbiBjaGVjayB0byBnZXQgY3VycmVudCBsb2NhdGlvbiBvZiB0aGUgZGV2aWNlLlxuICAgKiB7dGltZW91dDogTWF4aW11bSB0aW1lIGluIG1pbGxpc2Vjb25kcyBkZXZpY2Ugd2lsbCB3YWl0IGZvciBsb2NhdGlvbixcbiAgICogbWF4aW11bUFnZTogTWF4aW11bSBhZ2UgaW4gbWlsbGlzZWNvbmRzIG9mIGEgcG9zc2libGUgY2FjaGVkIGxvY2F0aW9uIHRoYXQgaXMgYWNjZXB0YWJsZSB0byByZXR1cm47XG4gICAqIGVuYWJsZUhpZ2hBY2N1cmFjeTogaWYgdHJ1ZSBhbmQgaWYgdGhlIGRldmljZSBpcyBhYmxlIHRvIHByb3ZpZGUgYSBtb3JlIGFjY3VyYXRlIHBvc2l0aW9uLCBpdCB3aWxsIGRvIHNvfVxuICAgKlxuICAgKiBAcGFyYW0ge0JhY2tncm91bmRHZW9sb2NhdGlvbkN1cnJlbnRQb3NpdGlvbkNvbmZpZ30gb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIGNhbGxiYWNrT3JkZXI6ICdyZXZlcnNlJyxcbiAgfSlcbiAgZ2V0Q3VycmVudExvY2F0aW9uKG9wdGlvbnM/OiBCYWNrZ3JvdW5kR2VvbG9jYXRpb25DdXJyZW50UG9zaXRpb25Db25maWcpOiBQcm9taXNlPEJhY2tncm91bmRHZW9sb2NhdGlvblJlc3BvbnNlPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHN0YXR1cyBvZiB0aGUgc2VydmljZVxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBjaGVja1N0YXR1cygpOiBQcm9taXNlPFNlcnZpY2VTdGF0dXM+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgYmFja2dyb3VuZCB0YXNrIChpT1Mgb25seSlcbiAgICpcbiAgICogVG8gcGVyZm9ybSBhbnkgbG9uZyBydW5uaW5nIG9wZXJhdGlvbiBvbiBpT1NcbiAgICogeW91IG5lZWQgdG8gY3JlYXRlIGJhY2tncm91bmQgdGFza1xuICAgKiBJTVBPUlRBTlQ6IHRhc2sgaGFzIHRvIGJlIGVuZGVkIGJ5IGVuZFRhc2tcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8bnVtYmVyPn0gdGFza0tleVxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIHBsYXRmb3JtczogWydJT1MnXSxcbiAgfSlcbiAgc3RhcnRUYXNrKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqICBFbmQgYmFja2dyb3VuZCB0YXNrIGluZGVudGlmaWVkIGJ5IHRhc2tLZXkgKGlPUyBvbmx5KVxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIHBsYXRmb3JtczogWydJT1MnXSxcbiAgfSlcbiAgZW5kVGFzayh0YXNrS2V5OiBudW1iZXIpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIHNwZWNpYWwgdGFzayB0aGF0IGdldHMgZXhlY3V0ZWQgd2hlbiB0aGUgYXBwIGlzIHRlcm1pbmF0ZWQsIGJ1dFxuICAgKiB0aGUgcGx1Z2luIHdhcyBjb25maWd1cmVkIHRvIGNvbnRpbnVlIHJ1bm5pbmcgaW4gdGhlIGJhY2tncm91bmRcbiAgICogKG9wdGlvbiA8Y29kZT5zdG9wT25UZXJtaW5hdGU6IGZhbHNlPC9jb2RlPikuXG4gICAqXG4gICAqIEluIHRoaXMgc2NlbmFyaW8gdGhlIEFjdGl2aXR5IHdhcyBraWxsZWQgYnkgdGhlIHN5c3RlbSBhbmQgYWxsIHJlZ2lzdGVyZWRcbiAgICogZXZlbnQgbGlzdGVuZXJzIHdpbGwgbm90IGJlIHRyaWdnZXJlZCB1bnRpbCB0aGUgYXBwIGlzIHJlbGF1bmNoZWQuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqICBCYWNrZ3JvdW5kR2VvbG9jYXRpb24uaGVhZGxlc3NUYXNrKGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAqXG4gICAqICAgICAgaWYgKGV2ZW50Lm5hbWUgPT09ICdsb2NhdGlvbicgfHwgZXZlbnQubmFtZSA9PT0gJ3N0YXRpb25hcnknKSB7XG4gICAqICAgICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICogICAgICAgICAgeGhyLm9wZW4oJ1BPU1QnLCAnaHR0cDovLzE5Mi4xNjguODEuMTQ6MzAwMC9oZWFkbGVzcycpO1xuICAgKiAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICogICAgICAgICAgeGhyLnNlbmQoSlNPTi5zdHJpbmdpZnkoZXZlbnQucGFyYW1zKSk7XG4gICAqICAgICAgfVxuICAgKlxuICAgKiAgICAgIHJldHVybiAnUHJvY2Vzc2luZyBldmVudDogJyArIGV2ZW50Lm5hbWU7IC8vIHdpbGwgYmUgbG9nZ2VkXG4gICAqICB9KTtcbiAgICogQHBhcmFtIGZ1bmNcbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgaGVhZGxlc3NUYXNrKGZ1bmM6IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcmNlIHN5bmMgb2YgcGVuZGluZyBsb2NhdGlvbnMuXG4gICAqIE9wdGlvbiA8Y29kZT5zeW5jVGhyZXNob2xkPC9jb2RlPiB3aWxsIGJlIGlnbm9yZWQgYW5kIGFsbCBwZW5kaW5nIGxvY2F0aW9ucyB3aWxsIGJlIGltbWVkaWF0ZWx5IHBvc3RlZCB0byA8Y29kZT5zeW5jVXJsPC9jb2RlPiBpbiBzaW5nbGUgYmF0Y2guXG4gICAqXG4gICAqIFBsYXRmb3JtOiBBbmRyb2lkLCBpT1NcbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgZm9yY2VTeW5jKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGV2ZW50IGxpc3RlbmVyLlxuICAgKlxuICAgKiBUcmlnZ2VyZWQgd2hlbiBzZXJ2ZXIgcmVzcG9uZGVkIHdpdGggXCI8Y29kZT4yODUgVXBkYXRlcyBOb3QgUmVxdWlyZWQ8L2NvZGU+XCIgdG8gcG9zdC9zeW5jIHJlcXVlc3QuXG4gICAqIEBwYXJhbSBldmVudFxuICAgKiBAcGFyYW0gY2FsbGJhY2tGblxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIG9ic2VydmFibGU6IHRydWUsXG4gIH0pXG4gIG9uKGV2ZW50OiBCYWNrZ3JvdW5kR2VvbG9jYXRpb25FdmVudHMpOiBPYnNlcnZhYmxlPEJhY2tncm91bmRHZW9sb2NhdGlvblJlc3BvbnNlPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFVucmVnaXN0ZXIgYWxsIGV2ZW50IGxpc3RlbmVycyBmb3IgZ2l2ZW4gZXZlbnQuXG4gICAqXG4gICAqIElmIHBhcmFtZXRlciA8Y29kZT5ldmVudDwvY29kZT4gaXMgbm90IHByb3ZpZGVkIHRoZW4gYWxsIGV2ZW50IGxpc3RlbmVycyB3aWxsIGJlIHJlbW92ZWQuXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIHJlbW92ZUFsbExpc3RlbmVycyhldmVudD86IEJhY2tncm91bmRHZW9sb2NhdGlvbkV2ZW50cyk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG59XG4iXX0=