@ionic-native/background-geolocation
Version:
Ionic Native - Native plugins for ionic apps
105 lines • 42.8 kB
JavaScript
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
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 BackgroundGeolocationOriginal = /** @class */ (function (_super) {
__extends(BackgroundGeolocationOriginal, _super);
function BackgroundGeolocationOriginal() {
return _super !== null && _super.apply(this, arguments) || this;
}
BackgroundGeolocationOriginal.prototype.configure = function (options) { return cordova(this, "configure", {}, arguments); };
BackgroundGeolocationOriginal.prototype.start = function () { return cordova(this, "start", {}, arguments); };
BackgroundGeolocationOriginal.prototype.stop = function () { return cordova(this, "stop", {}, arguments); };
BackgroundGeolocationOriginal.prototype.finish = function () { return cordova(this, "finish", { "platforms": ["iOS"] }, arguments); };
BackgroundGeolocationOriginal.prototype.changePace = function (isMoving) { return cordova(this, "changePace", { "platforms": ["iOS"] }, arguments); };
BackgroundGeolocationOriginal.prototype.setConfig = function (options) { return cordova(this, "setConfig", { "callbackOrder": "reverse" }, arguments); };
BackgroundGeolocationOriginal.prototype.getStationaryLocation = function () { return cordova(this, "getStationaryLocation", { "platforms": ["iOS"] }, arguments); };
BackgroundGeolocationOriginal.prototype.onStationary = function () { return cordova(this, "onStationary", { "platforms": ["iOS"] }, arguments); };
BackgroundGeolocationOriginal.prototype.isLocationEnabled = function () { return cordova(this, "isLocationEnabled", { "platforms": ["Android"] }, arguments); };
BackgroundGeolocationOriginal.prototype.showAppSettings = function () { return cordova(this, "showAppSettings", { "sync": true }, arguments); };
BackgroundGeolocationOriginal.prototype.showLocationSettings = function () { return cordova(this, "showLocationSettings", { "sync": true }, arguments); };
BackgroundGeolocationOriginal.prototype.watchLocationMode = function () { return cordova(this, "watchLocationMode", { "platforms": ["Android"], "observable": true }, arguments); };
BackgroundGeolocationOriginal.prototype.stopWatchingLocationMode = function () { return cordova(this, "stopWatchingLocationMode", { "platforms": ["Android"] }, arguments); };
BackgroundGeolocationOriginal.prototype.getLocations = function () { return cordova(this, "getLocations", { "platforms": ["Android"] }, arguments); };
BackgroundGeolocationOriginal.prototype.getValidLocations = function () { return cordova(this, "getValidLocations", {}, arguments); };
BackgroundGeolocationOriginal.prototype.deleteLocation = function (locationId) { return cordova(this, "deleteLocation", { "platforms": ["Android"] }, arguments); };
BackgroundGeolocationOriginal.prototype.deleteAllLocations = function () { return cordova(this, "deleteAllLocations", { "platforms": ["Android"] }, arguments); };
BackgroundGeolocationOriginal.prototype.switchMode = function (modeId) { return cordova(this, "switchMode", { "platforms": ["iOS"] }, arguments); };
BackgroundGeolocationOriginal.prototype.getLogEntries = function (limit, fromId, minLevel) { return cordova(this, "getLogEntries", {}, arguments); };
BackgroundGeolocationOriginal.prototype.getConfig = function () { return cordova(this, "getConfig", {}, arguments); };
BackgroundGeolocationOriginal.prototype.getCurrentLocation = function (options) { return cordova(this, "getCurrentLocation", { "callbackOrder": "reverse" }, arguments); };
BackgroundGeolocationOriginal.prototype.checkStatus = function () { return cordova(this, "checkStatus", {}, arguments); };
BackgroundGeolocationOriginal.prototype.startTask = function () { return cordova(this, "startTask", { "platforms": ["IOS"] }, arguments); };
BackgroundGeolocationOriginal.prototype.endTask = function (taskKey) { return cordova(this, "endTask", { "platforms": ["IOS"] }, arguments); };
BackgroundGeolocationOriginal.prototype.headlessTask = function (func) { return cordova(this, "headlessTask", {}, arguments); };
BackgroundGeolocationOriginal.prototype.forceSync = function () { return cordova(this, "forceSync", {}, arguments); };
BackgroundGeolocationOriginal.prototype.on = function (event) { return cordova(this, "on", { "observable": true }, arguments); };
BackgroundGeolocationOriginal.prototype.removeAllListeners = function (event) { return cordova(this, "removeAllListeners", {}, arguments); };
BackgroundGeolocationOriginal.pluginName = "BackgroundGeolocation";
BackgroundGeolocationOriginal.plugin = "@mauron85/cordova-plugin-background-geolocation";
BackgroundGeolocationOriginal.pluginRef = "BackgroundGeolocation";
BackgroundGeolocationOriginal.repo = "https://github.com/mauron85/cordova-plugin-background-geolocation";
BackgroundGeolocationOriginal.platforms = ["Android", "iOS"];
return BackgroundGeolocationOriginal;
}(IonicNativePlugin));
var BackgroundGeolocation = new BackgroundGeolocationOriginal();
export { BackgroundGeolocation };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvQGlvbmljLW5hdGl2ZS9wbHVnaW5zL2JhY2tncm91bmQtZ2VvbG9jYXRpb24vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUNBLE9BQU8sOEJBQXNDLE1BQU0sb0JBQW9CLENBQUM7QUFDeEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVsQyxNQUFNLENBQU4sSUFBWSxpQ0FJWDtBQUpELFdBQVksaUNBQWlDO0lBQzNDLG1IQUFxQixDQUFBO0lBQ3JCLHlIQUF3QixDQUFBO0lBQ3hCLCtGQUFXLENBQUE7QUFDYixDQUFDLEVBSlcsaUNBQWlDLEtBQWpDLGlDQUFpQyxRQUk1QztBQUVELE1BQU0sQ0FBTixJQUFZLG1DQUtYO0FBTEQsV0FBWSxtQ0FBbUM7SUFDN0Msa0RBQVcsQ0FBQTtJQUNYLDBEQUFtQixDQUFBO0lBQ25CLDBEQUFtQixDQUFBO0lBQ25CLHNEQUFlLENBQUE7QUFDakIsQ0FBQyxFQUxXLG1DQUFtQyxLQUFuQyxtQ0FBbUMsUUFLOUM7QUFFRCxNQUFNLENBQU4sSUFBWSxxQ0FJWDtBQUpELFdBQVkscUNBQXFDO0lBQy9DLHlJQUE0QixDQUFBO0lBQzVCLDJIQUFxQixDQUFBO0lBQ3JCLGlIQUFnQixDQUFBO0FBQ2xCLENBQUMsRUFKVyxxQ0FBcUMsS0FBckMscUNBQXFDLFFBSWhEO0FBRUQsTUFBTSxDQUFOLElBQVksMkJBWVg7QUFaRCxXQUFZLDJCQUEyQjtJQUNyQyx3RUFBeUMsQ0FBQTtJQUN6QyxrRUFBbUMsQ0FBQTtJQUNuQyx3REFBeUIsQ0FBQTtJQUN6Qix3REFBeUIsQ0FBQTtJQUN6Qiw4REFBK0IsQ0FBQTtJQUMvQiw4Q0FBZSxDQUFBO0lBQ2YsNENBQWEsQ0FBQTtJQUNiLDhDQUFlLENBQUE7SUFDZixvREFBcUIsQ0FBQTtJQUNyQix3REFBeUIsQ0FBQTtJQUN6QixvREFBcUIsQ0FBQTtBQUN2QixDQUFDLEVBWlcsMkJBQTJCLEtBQTNCLDJCQUEyQixRQVl0QztBQUVELE1BQU0sQ0FBTixJQUFZLHdDQUlYO0FBSkQsV0FBWSx3Q0FBd0M7SUFDbEQsMkhBQWtCLENBQUE7SUFDbEIsbUhBQWMsQ0FBQTtJQUNkLHlJQUF5QixDQUFBO0FBQzNCLENBQUMsRUFKVyx3Q0FBd0MsS0FBeEMsd0NBQXdDLFFBSW5EO0FBRUQsTUFBTSxDQUFOLElBQVksNkJBTVg7QUFORCxXQUFZLDZCQUE2QjtJQUN2QyxnREFBZSxDQUFBO0lBQ2YsZ0RBQWUsQ0FBQTtJQUNmLDhDQUFhLENBQUE7SUFDYiw4Q0FBYSxDQUFBO0lBQ2IsZ0RBQWUsQ0FBQTtBQUNqQixDQUFDLEVBTlcsNkJBQTZCLEtBQTdCLDZCQUE2QixRQU14Qzs7SUFtZjBDLHlDQUFpQjs7OztJQVExRCx5Q0FBUyxhQUFDLE9BQW9DO0lBVTlDLHFDQUFLO0lBU0wsb0NBQUk7SUFXSixzQ0FBTTtJQVlOLDBDQUFVLGFBQUMsUUFBaUI7SUFZNUIseUNBQVMsYUFBQyxPQUFvQztJQVc5QyxxREFBcUI7SUFZckIsNENBQVk7SUFXWixpREFBaUI7SUFRakIsK0NBQWU7SUFNZixvREFBb0I7SUFZcEIsaURBQWlCO0lBV2pCLHdEQUF3QjtJQWdCeEIsNENBQVk7SUFTWixpREFBaUI7SUFZakIsOENBQWMsYUFBQyxVQUFrQjtJQVdqQyxrREFBa0I7SUFvQmxCLDBDQUFVLGFBQUMsTUFBYztJQVl6Qiw2Q0FBYSxhQUNYLEtBQWEsRUFDYixNQUFjLEVBQ2QsUUFBdUM7SUFZekMseUNBQVM7SUFnQlQsa0RBQWtCLGFBQUMsT0FBb0Q7SUFRdkUsMkNBQVc7SUFnQlgseUNBQVM7SUFVVCx1Q0FBTyxhQUFDLE9BQWU7SUEyQnZCLDRDQUFZLGFBQUMsSUFBUztJQVd0Qix5Q0FBUztJQWNULGtDQUFFLGFBQUMsS0FBa0M7SUFVckMsa0RBQWtCLGFBQUMsS0FBbUM7Ozs7OztnQ0F4M0J4RDtFQW9pQjJDLGlCQUFpQjtTQUEvQyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb3Jkb3ZhLCBJb25pY05hdGl2ZVBsdWdpbiwgUGx1Z2luIH0gZnJvbSAnQGlvbmljLW5hdGl2ZS9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IGVudW0gQmFja2dyb3VuZEdlb2xvY2F0aW9uTG9jYXRpb25Db2RlIHtcbiAgUEVSTUlTU0lPTl9ERU5JRUQgPSAxLFxuICBMT0NBVElPTl9VTkFWQUlMQUJMRSA9IDIsXG4gIFRJTUVPVVQgPSAzLFxufVxuXG5leHBvcnQgZW51bSBCYWNrZ3JvdW5kR2VvbG9jYXRpb25OYXRpdmVQcm92aWRlciB7XG4gIGdwcyA9ICdncHMnLFxuICBuZXR3b3JrID0gJ25ldHdvcmsnLFxuICBwYXNzaXZlID0gJ3Bhc3NpdmUnLFxuICBmdXNlZCA9ICdmdXNlZCcsXG59XG5cbmV4cG9ydCBlbnVtIEJhY2tncm91bmRHZW9sb2NhdGlvbkxvY2F0aW9uUHJvdmlkZXIge1xuICBESVNUQU5DRV9GSUxURVJfUFJPVklERVIgPSAwLFxuICBBQ1RJVklUWV9QUk9WSURFUiA9IDEsXG4gIFJBV19QUk9WSURFUiA9IDIsXG59XG5cbmV4cG9ydCBlbnVtIEJhY2tncm91bmRHZW9sb2NhdGlvbkV2ZW50cyB7XG4gIGh0dHBfYXV0aG9yaXphdGlvbiA9ICdodHRwX2F1dGhvcml6YXRpb24nLCAvLyBUcmlnZ2VyZWQgd2hlbiBzZXJ2ZXIgcmVzcG9uZGVkIHdpdGggXCI8Y29kZT40MDEgVW5hdXRob3JpemVkPC9jb2RlPlwiIHRvIHBvc3Qvc3luYyByZXF1ZXN0LlxuICBhYm9ydF9yZXF1ZXN0ZWQgPSAnYWJvcnRfcmVxdWVzdGVkJywgLy8gVHJpZ2dlcmVkIHdoZW4gc2VydmVyIHJlc3BvbmRlZCB3aXRoIFwiPGNvZGU+Mjg1IFVwZGF0ZXMgTm90IFJlcXVpcmVkPC9jb2RlPlwiIHRvIHBvc3Qvc3luYyByZXF1ZXN0LlxuICBiYWNrZ3JvdW5kID0gJ2JhY2tncm91bmQnLCAvLyBUcmlnZ2VyZWQgd2hlbiBhcHAgZW50ZXJlZCBiYWNrZ3JvdW5kIHN0YXRlIGFuZCAobm90IHZpc2libGUgdG8gdGhlIHVzZXIpLlxuICBmb3JlZ3JvdW5kID0gJ2ZvcmVncm91bmQnLCAvLyBUcmlnZ2VyZWQgd2hlbiBhcHAgZW50ZXJlZCBmb3JlZ3JvdW5kIHN0YXRlIGFuZCAodmlzaWJsZSB0byB0aGUgdXNlcikuXG4gIGF1dGhvcml6YXRpb24gPSAnYXV0aG9yaXphdGlvbicsIC8vIFRyaWdnZXJlZCB3aGVuIHVzZXIgY2hhbmdlcyBhdXRob3JpemF0aW9uL3Blcm1pc3Npb25zIGZvciB0aGUgYXBwIG9yIHRvZ2dsZXMgbG9jYXRpb24gc2VydmljZXMuXG4gIGVycm9yID0gJ2Vycm9yJywgLy8gUmVnaXN0ZXIgZXJyb3IgbGlzdGVuZXIuXG4gIHN0b3AgPSAnc3RvcCcsIC8vIFRyaWdnZXJlZCB3aGVuIGJhY2tncm91bmQgc2VydmljZSBoYXMgYmVlbiBzdG9wcGVkIHN1Y2Nlc2Z1bGx5LlxuICBzdGFydCA9ICdzdGFydCcsIC8vIEV2ZW50IGlzIHRyaWdnZXJlZCB3aGVuIGJhY2tncm91bmQgc2VydmljZSBoYXMgYmVlbiBzdGFydGVkIHN1Y2Nlc2Z1bGx5LlxuICBhY3Rpdml0eSA9ICdhY3Rpdml0eScsIC8vIFJlZ2lzdGVyIGFjdGl2aXR5IG1vbml0b3JpbmcgbGlzdGVuZXIuXG4gIHN0YXRpb25hcnkgPSAnc3RhdGlvbmFyeScsIC8vIFJlZ2lzdGVyIHN0YXRpb25hcnkgbG9jYXRpb24gZXZlbnQgbGlzdGVuZXIuXG4gIGxvY2F0aW9uID0gJ2xvY2F0aW9uJywgLy8gUmVnaXN0ZXIgbG9jYXRpb24gZXZlbnQgbGlzdGVuZXIuXG59XG5cbmV4cG9ydCBlbnVtIEJhY2tncm91bmRHZW9sb2NhdGlvbkF1dGhvcml6YXRpb25TdGF0dXMge1xuICBOT1RfQVVUSE9SSVpFRCA9IDAsXG4gIEFVVEhPUklaRUQgPSAxLFxuICBBVVRIT1JJWkVEX0ZPUkVHUk9VTkQgPSAyLFxufVxuXG5leHBvcnQgZW51bSBCYWNrZ3JvdW5kR2VvbG9jYXRpb25Mb2dMZXZlbCB7XG4gIFRSQUNFID0gJ1RSQUNFJyxcbiAgREVCVUcgPSAnREVCVUcnLFxuICBJTkZPID0gJ0lORk8nLFxuICBXQVJOID0gJ1dBUk4nLFxuICBFUlJPUiA9ICdFUlJPUicsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFja2dyb3VuZEdlb2xvY2F0aW9uTG9nRW50cnkge1xuICAvKiogSUQgb2YgbG9nIGVudHJ5IGFzIHN0b3JlZCBpbiBkYi4gKi9cbiAgaWQ6IG51bWJlcjtcblxuICAvKiogVGltZXN0YW1wIGluIG1pbGxpc2Vjb25kcyBzaW5jZSBiZWdpbm5pbmcgb2YgVU5JWCBlcG9jaC4gKi9cbiAgdGltZXN0YW1wOiBudW1iZXI7XG5cbiAgLyoqIExvZyBsZXZlbCAqL1xuICBsZXZlbDogQmFja2dyb3VuZEdlb2xvY2F0aW9uTG9nTGV2ZWw7XG5cbiAgLyoqIExvZyBtZXNzYWdlICovXG4gIG1lc3NhZ2U6IHN0cmluZztcblxuICAvKiogUmVjb3JkZWQgc3RhY2t0cmFjZS4gKEFuZHJvaWQgb25seSwgb24gaU9TIHBhcnQgb2YgbWVzc2FnZSkgKi9cbiAgc3RhY2tUcmFjZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VTdGF0dXMge1xuICAvKiogVFJVRSBpZiBzZXJ2aWNlIGlzIHJ1bm5pbmcuICovXG4gIGlzUnVubmluZzogYm9vbGVhbjtcblxuICAvKiogVFJVRSBpZiBsb2NhdGlvbiBzZXJ2aWNlcyBhcmUgZW5hYmxlZCAqL1xuICBsb2NhdGlvblNlcnZpY2VzRW5hYmxlZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogQXV0aG9yaXphdGlvbiBzdGF0dXMuXG4gICAqXG4gICAqIFBvc2libGUgdmFsdWVzOlxuICAgKiAgTk9UX0FVVEhPUklaRUQsIEFVVEhPUklaRUQsIEFVVEhPUklaRURfRk9SRUdST1VORFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBpZiAoYXV0aG9yaXphdGlvbiA9PSBCYWNrZ3JvdW5kR2VvbG9jYXRpb24uTk9UX0FVVEhPUklaRUQpIHsuLi59XG4gICAqL1xuICBhdXRob3JpemF0aW9uOiBCYWNrZ3JvdW5kR2VvbG9jYXRpb25BdXRob3JpemF0aW9uU3RhdHVzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhY2tncm91bmRHZW9sb2NhdGlvbiB7XG4gIGNvZGU6IEJhY2tncm91bmRHZW9sb2NhdGlvbkxvY2F0aW9uQ29kZTtcbiAgbWVzc2FnZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhY2tncm91bmRHZW9sb2NhdGlvbkN1cnJlbnRQb3NpdGlvbkNvbmZpZyB7XG4gIHRpbWVvdXQ6IG51bWJlcjtcbiAgbWF4aW11bUFnZTogbnVtYmVyO1xuICBlbmFibGVIaWdoQWNjdXJhY3k6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFja2dyb3VuZEdlb2xvY2F0aW9uUmVzcG9uc2Uge1xuICAvKiogSUQgb2YgbG9jYXRpb24gYXMgc3RvcmVkIGluIERCIChvciBudWxsKSAqL1xuICBpZDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBOYXRpdmUgcHJvdmlkZXIgcmVwb25zaWJsZSBmb3IgbG9jYXRpb24uXG4gICAqXG4gICAqIFBvc3NpYmxlIHZhbHVlczpcbiAgICogXCJncHNcIiwgXCJuZXR3b3JrXCIsIFwicGFzc2l2ZVwiIG9yIFwiZnVzZWRcIlxuICAgKi9cbiAgcHJvdmlkZXI6IEJhY2tncm91bmRHZW9sb2NhdGlvbk5hdGl2ZVByb3ZpZGVyO1xuXG4gIC8qKiBDb25maWd1cmVkIGxvY2F0aW9uIHByb3ZpZGVyLiAqL1xuICBsb2NhdGlvblByb3ZpZGVyOiBCYWNrZ3JvdW5kR2VvbG9jYXRpb25Mb2NhdGlvblByb3ZpZGVyO1xuXG4gIC8qKiBVVEMgdGltZSBvZiB0aGlzIGZpeCwgaW4gbWlsbGlzZWNvbmRzIHNpbmNlIEphbnVhcnkgMSwgMTk3MC4gKi9cbiAgdGltZTogbnVtYmVyO1xuXG4gIC8qKiBMYXRpdHVkZSwgaW4gZGVncmVlcy4gKi9cbiAgbGF0aXR1ZGU6IG51bWJlcjtcblxuICAvKiogTG9uZ2l0dWRlLCBpbiBkZWdyZWVzLiAqL1xuICBsb25naXR1ZGU6IG51bWJlcjtcblxuICAvKiogRXN0aW1hdGVkIGFjY3VyYWN5IG9mIHRoaXMgbG9jYXRpb24sIGluIG1ldGVycy4gKi9cbiAgYWNjdXJhY3k6IG51bWJlcjtcblxuICAvKipcbiAgICogU3BlZWQgaWYgaXQgaXMgYXZhaWxhYmxlLCBpbiBtZXRlcnMvc2Vjb25kIG92ZXIgZ3JvdW5kLlxuICAgKlxuICAgKiBOb3RlOiBOb3QgYWxsIHByb3ZpZGVycyBhcmUgY2FwYWJsZSBvZiBwcm92aWRpbmcgc3BlZWQuXG4gICAqIFR5cGljYWxseSBuZXR3b3JrIHByb3ZpZGVycyBhcmUgbm90IGFibGUgdG8gZG8gc28uXG4gICAqL1xuICBzcGVlZDogbnVtYmVyO1xuXG4gIC8qKiBBbHRpdHVkZSBpZiBhdmFpbGFibGUsIGluIG1ldGVycyBhYm92ZSB0aGUgV0dTIDg0IHJlZmVyZW5jZSBlbGxpcHNvaWQuICovXG4gIGFsdGl0dWRlOiBudW1iZXI7XG5cbiAgLyoqIEJlYXJpbmcsIGluIGRlZ3JlZXMuICovXG4gIGJlYXJpbmc6IG51bWJlcjtcblxuICAvKipcbiAgICogVHJ1ZSBpZiBsb2NhdGlvbiB3YXMgcmVjb3JkZWQgYnkgbW9jayBwcm92aWRlci4gKEFORFJPSUQgT05MWSlcbiAgICpcbiAgICogTm90ZTogdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW5hYmxlZCBieSBkZWZhdWx0IVxuICAgKiBZb3UgY2FuIGVuYWJsZSBpdCBcInBvc3RUZW1wbGF0ZVwiIGNvbmZpZ3VyZSBvcHRpb24uXG4gICAqL1xuICBpc0Zyb21Nb2NrUHJvdmlkZXI/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUcnVlIGlmIGRldmljZSBoYXMgbW9jayBsb2NhdGlvbnMgZW5hYmxlZC4gKEFORFJPSUQgT05MWSlcbiAgICpcbiAgICogTm90ZTogdGhpcyBwcm9wZXJ0eSBpcyBub3QgZW5hYmxlZCBieSBkZWZhdWx0IVxuICAgKiBZb3UgY2FuIGVuYWJsZSBpdCBcInBvc3RUZW1wbGF0ZVwiIGNvbmZpZ3VyZSBvcHRpb24uXG4gICAqL1xuICBtb2NrTG9jYXRpb25zRW5hYmxlZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFja2dyb3VuZEdlb2xvY2F0aW9uQ29uZmlnIHtcbiAgLyoqXG4gICAqIFNldCBsb2NhdGlvbiBwcm92aWRlclxuICAgKlxuICAgKiBQbGF0Zm9ybTogYWxsXG4gICAqIEF2YWlsYWJsZSBwcm92aWRlcnM6XG4gICAqICBESVNUQU5DRV9GSUxURVJfUFJPVklERVIsXG4gICAqICBBQ1RJVklUWV9QUk9WSURFUlxuICAgKiAgUkFXX1BST1ZJREVSXG4gICAqXG4gICAqIEBkZWZhdWx0IERJU1RBTkNFX0ZJTFRFUl9QUk9WSURFUlxuICAgKiBAZXhhbXBsZVxuICAgKiB7IGxvY2F0aW9uUHJvdmlkZXI6IExvY2F0aW9uUHJvdmlkZXIuUkFXX1BST1ZJREVSIH1cbiAgICovXG4gIGxvY2F0aW9uUHJvdmlkZXI/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIERlc2lyZWQgYWNjdXJhY3kgaW4gbWV0ZXJzLlxuICAgKlxuICAgKiBQbGF0Zm9ybTogYWxsXG4gICAqIFByb3ZpZGVyOiBhbGxcbiAgICogUG9zc2libGUgdmFsdWVzOlxuICAgKiAgSElHSF9BQ0NVUkFDWSxcbiAgICogIE1FRElVTV9BQ0NVUkFDWSxcbiAgICogIExPV19BQ0NVUkFDWSxcbiAgICogIFBBU1NJVkVfQUNDVVJBQ1lcbiAgICogTm90ZTogQWNjdXJhY3kgaGFzIGRpcmVjdCBlZmZlY3Qgb24gcG93ZXIgZHJhaW4uIExvd2VyIGFjY3VyYWN5ID0gbG93ZXIgcG93ZXIgZHJhaW4uXG4gICAqXG4gICAqIEBkZWZhdWx0IE1FRElVTV9BQ0NVUkFDWVxuICAgKiBAZXhhbXBsZVxuICAgKiB7IGRlc2lyZWRBY2N1cmFjeTogQmFja2dyb3VuZEdlb2xvY2F0aW9uQWNjdXJhY3kuTE9XIH1cbiAgICovXG4gIGRlc2lyZWRBY2N1cmFjeT86IG51bWJlcjtcblxuICAvKipcbiAgICogU3RhdGlvbmFyeSByYWRpdXMgaW4gbWV0ZXJzLlxuICAgKlxuICAgKiBXaGVuIHN0b3BwZWQsIHRoZSBtaW5pbXVtIGRpc3RhbmNlIHRoZSBkZXZpY2UgbXVzdCBtb3ZlIGJleW9uZCB0aGUgc3RhdGlvbmFyeSBsb2NhdGlvbiBmb3IgYWdncmVzc2l2ZSBiYWNrZ3JvdW5kLXRyYWNraW5nIHRvIGVuZ2FnZS5cbiAgICogUGxhdGZvcm06IGFsbFxuICAgKiBQcm92aWRlcjogRElTVEFOQ0VfRklMVEVSXG4gICAqXG4gICAqIEBkZWZhdWx0IDUwXG4gICAqL1xuICBzdGF0aW9uYXJ5UmFkaXVzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaGVuIGVuYWJsZWQsIHRoZSBwbHVnaW4gd2lsbCBlbWl0IHNvdW5kcyBmb3IgbGlmZS1jeWNsZSBldmVudHMgb2YgYmFja2dyb3VuZC1nZW9sb2NhdGlvbiEgU2VlIGRlYnVnZ2luZyBzb3VuZHMgdGFibGUuXG4gICAqXG4gICAqIFBsYXRmb3JtOiBhbGxcbiAgICogUHJvdmlkZXI6IGFsbFxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGVidWc/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgbWluaW11bSBkaXN0YW5jZSAobWVhc3VyZWQgaW4gbWV0ZXJzKSBhIGRldmljZSBtdXN0IG1vdmUgaG9yaXpvbnRhbGx5IGJlZm9yZSBhbiB1cGRhdGUgZXZlbnQgaXMgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBQbGF0Zm9ybTogYWxsXG4gICAqIFByb3ZpZGVyOiBESVNUQU5DRV9GSUxURVIsIFJBV1xuICAgKlxuICAgKiBAZGVmYXVsdCA1MDBcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9hcHBsZS5jby8yb0hvMkNWfEFwcGxlIGRvY3N9XG4gICAqL1xuICBkaXN0YW5jZUZpbHRlcj86IG51bWJlcjtcblxuICAvKipcbiAgICogRW5hYmxlIHRoaXMgaW4gb3JkZXIgdG8gZm9yY2UgYSBzdG9wKCkgd2hlbiB0aGUgYXBwbGljYXRpb24gdGVybWluYXRlZC5cbiAgICogRS5nLiBvbiBpT1MsIGRvdWJsZS10YXAgaG9tZSBidXR0b24sIHN3aXBlIGF3YXkgdGhlIGFwcC5cbiAgICpcbiAgICogUGxhdGZvcm06IGFsbFxuICAgKiBQcm92aWRlcjogYWxsXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHN0b3BPblRlcm1pbmF0ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGJhY2tncm91bmQgc2VydmljZSBvbiBkZXZpY2UgYm9vdC5cbiAgICpcbiAgICogUGxhdGZvcm06IEFuZHJvaWRcbiAgICogUHJvdmlkZXI6IGFsbFxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgc3RhcnRPbkJvb3Q/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgbWluaW11bSB0aW1lIGludGVydmFsIGJldHdlZW4gbG9jYXRpb24gdXBkYXRlcyBpbiBtaWxsaXNlY29uZHMuXG4gICAqXG4gICAqIFBsYXRmb3JtOiBBbmRyb2lkXG4gICAqIFByb3ZpZGVyOiBhbGxcbiAgICpcbiAgICogQGRlZmF1bHQgNjAwMDBcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iaXQubHkvMXgwMFJVdXxBbmRyb2lkIGRvY3N9XG4gICAqL1xuICBpbnRlcnZhbD86IG51bWJlcjtcblxuICAvKipcbiAgICogRmFzdGVzdCByYXRlIGluIG1pbGxpc2Vjb25kcyBhdCB3aGljaCB5b3VyIGFwcCBjYW4gaGFuZGxlIGxvY2F0aW9uIHVwZGF0ZXMuXG4gICAqXG4gICAqIFBsYXRmb3JtOiBBbmRyb2lkXG4gICAqIFByb3ZpZGVyOiBBQ1RJVklUWVxuICAgKlxuICAgKiBAZGVmYXVsdCAxMjAwMDBcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9iaXQubHkvMXgwMFJVdXxBbmRyb2lkIGRvY3N9XG4gICAqL1xuICBmYXN0ZXN0SW50ZXJ2YWw/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFJhdGUgaW4gbWlsbGlzZWNvbmRzIGF0IHdoaWNoIGFjdGl2aXR5IHJlY29nbml0aW9uIG9jY3Vycy5cbiAgICogTGFyZ2VyIHZhbHVlcyB3aWxsIHJlc3VsdCBpbiBmZXdlciBhY3Rpdml0eSBkZXRlY3Rpb25zIHdoaWxlIGltcHJvdmluZyBiYXR0ZXJ5IGxpZmUuXG4gICAqXG4gICAqIFBsYXRmb3JtOiBBbmRyb2lkXG4gICAqIFByb3ZpZGVyOiBBQ1RJVklUWVxuICAgKlxuICAgKiBAZGVmYXVsdCAxMDAwMFxuICAgKi9cbiAgYWN0aXZpdGllc0ludGVydmFsPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBTdG9wIGxvY2F0aW9uIHVwZGF0ZXMsIHdoZW4gdGhlIFNUSUxMIGFjdGl2aXR5IGlzIGRldGVjdGVkLlxuICAgKi9cbiAgc3RvcE9uU3RpbGxBY3Rpdml0eT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEVuYWJsZS9kaXNhYmxlIGxvY2FsIG5vdGlmaWNhdGlvbnMgd2hlbiB0cmFja2luZyBhbmQgc3luY2luZyBsb2NhdGlvbnMuXG4gICAqXG4gICAqIFBsYXRmb3JtOiBBbmRyb2lkXG4gICAqIFByb3ZpZGVyOiBhbGxcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgbm90aWZpY2F0aW9uc0VuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBbGxvdyBsb2NhdGlvbiBzeW5jIHNlcnZpY2UgdG8gcnVuIGluIGZvcmVncm91bmQgc3RhdGUuXG4gICAqIEZvcmVncm91bmQgc3RhdGUgYWxzbyByZXF1aXJlcyBhIG5vdGlmaWNhdGlvbiB0byBiZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIuXG4gICAqXG4gICAqIFBsYXRmb3JtOiBBbmRyb2lkXG4gICAqIFByb3ZpZGVyOiBhbGxcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHN0YXJ0Rm9yZWdyb3VuZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBub3RpZmljYXRpb24gdGl0bGUgaW4gdGhlIGRyYXdlci5cbiAgICpcbiAgICogUGxhdGZvcm06IEFuZHJvaWRcbiAgICogUHJvdmlkZXI6IGFsbFxuICAgKiBAZGVmYXVsdCBcIkJhY2tncm91bmQgdHJhY2tpbmdcIlxuICAgKi9cbiAgbm90aWZpY2F0aW9uVGl0bGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBub3RpZmljYXRpb24gdGV4dCBpbiB0aGUgZHJhd2VyLlxuICAgKlxuICAgKiBQbGF0Zm9ybTogQW5kcm9pZFxuICAgKiBQcm92aWRlcjogYWxsXG4gICAqXG4gICAqIEBkZWZhdWx0IFwiRU5BQkxFRFwiXG4gICAqL1xuICBub3RpZmljYXRpb25UZXh0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYWNjZW50IGNvbG9yIChoZXggdHJpcGxldCkgdG8gdXNlIGZvciBub3RpZmljYXRpb24uXG4gICAqIEVnLiA8Y29kZT4jNENBRjUwPC9jb2RlPi5cbiAgICpcbiAgICogUGxhdGZvcm06IEFuZHJvaWRcbiAgICogUHJvdmlkZXI6IGFsbFxuICAgKi9cbiAgbm90aWZpY2F0aW9uSWNvbkNvbG9yPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZmlsZW5hbWUgb2YgYSBjdXN0b20gbm90aWZpY2F0aW9uIGljb24uXG4gICAqXG4gICAqIFBsYXRmb3JtOiBBbmRyb2lkXG4gICAqIFByb3ZpZGVyOiBhbGxcbiAgICovXG4gIG5vdGlmaWNhdGlvbkljb25MYXJnZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGZpbGVuYW1lIG9mIGEgY3VzdG9tIG5vdGlmaWNhdGlvbiBpY29uLlxuICAgKlxuICAgKiBQbGF0Zm9ybTogQW5kcm9pZFxuICAgKiBQcm92aWRlcjogYWxsXG4gICAqL1xuICBub3RpZmljYXRpb25JY29uU21hbGw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFjdGl2aXR5IHR5cGUuXG4gICAqIFByZXN1bWFibHksIHRoaXMgYWZmZWN0cyBpT1MgR1BTIGFsZ29yaXRobS5cbiAgICpcbiAgICogUG9zc2libGUgdmFsdWVzOlxuICAgKiBcIkF1dG9tb3RpdmVOYXZpZ2F0aW9uXCIsIFwiT3RoZXJOYXZpZ2F0aW9uXCIsIFwiRml0bmVzc1wiLCBcIk90aGVyXCJcbiAgICpcbiAgICogUGxhdGZvcm06IGlPU1xuICAgKiBQcm92aWRlcjogYWxsXG4gICAqXG4gICAqIEBkZWZhdWx0IFwiT3RoZXJOYXZpZ2F0aW9uXCJcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9hcHBsZS5jby8yb0hvZnBIfEFwcGxlIGRvY3N9XG4gICAqL1xuICBhY3Rpdml0eVR5cGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdXNlcyBsb2NhdGlvbiB1cGRhdGVzIHdoZW4gYXBwIGlzIHBhdXNlZC5cbiAgICpcbiAgICogUGxhdGZvcm06IGlPU1xuICAgKiBQcm92aWRlcjogYWxsXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYXBwbGUuY28vMkNiakVXMnxBcHBsZSBkb2NzfVxuICAgKi9cbiAgcGF1c2VMb2NhdGlvblVwZGF0ZXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTd2l0Y2ggdG8gbGVzcyBhY2N1cmF0ZSBzaWduaWZpY2FudCBjaGFuZ2VzIGFuZCByZWdpb24gbW9uaXRvcnkgd2hlbiBpbiBiYWNrZ3JvdW5kLlxuICAgKlxuICAgKiBQbGF0Zm9ybTogaU9TXG4gICAqIFByb3ZpZGVyOiBhbGxcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHNhdmVCYXR0ZXJ5T25CYWNrZ3JvdW5kPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU2VydmVyIHVybCB3aGVyZSB0byBzZW5kIEhUVFAgUE9TVCB3aXRoIHJlY29yZGVkIGxvY2F0aW9uc1xuICAgKlxuICAgKiBQbGF0Zm9ybTogYWxsXG4gICAqIFByb3ZpZGVyOiBhbGxcbiAgICovXG4gIHVybD86IHN0cmluZztcblxuICAvKipcbiAgICogU2VydmVyIHVybCB3aGVyZSB0byBzZW5kIGZhaWwgdG8gcG9zdCBsb2NhdGlvbnNcbiAgICpcbiAgICogUGxhdGZvcm06IGFsbFxuICAgKiBQcm92aWRlcjogYWxsXG4gICAqL1xuICBzeW5jVXJsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgaG93IG1hbnkgcHJldmlvdXNseSBmYWlsZWQgbG9jYXRpb25zIHdpbGwgYmUgc2VudCB0byBzZXJ2ZXIgYXQgb25jZS5cbiAgICpcbiAgICogUGxhdGZvcm06IGFsbFxuICAgKiBQcm92aWRlcjogYWxsXG4gICAqXG4gICAqIEBkZWZhdWx0IDEwMFxuICAgKi9cbiAgc3luY1RocmVzaG9sZD86IG51bWJlcjtcblxuICAvKipcbiAgICogT3B0aW9uYWwgSFRUUCBoZWFkZXJzIHNlbnQgYWxvbmcgaW4gSFRUUCByZXF1ZXN0LlxuICAgKlxuICAgKiBQbGF0Zm9ybTogYWxsXG4gICAqIFByb3ZpZGVyOiBhbGxcbiAgICovXG4gIGh0dHBIZWFkZXJzPzogYW55O1xuXG4gIC8qKlxuICAgKiBMaW1pdCBtYXhpbXVtIG51bWJlciBvZiBsb2NhdGlvbnMgc3RvcmVkIGludG8gZGIuXG4gICAqXG4gICAqIFBsYXRmb3JtOiBhbGxcbiAgICogUHJvdmlkZXI6IGFsbFxuICAgKlxuICAgKiBAZGVmYXVsdCAxMDAwMFxuICAgKi9cbiAgbWF4TG9jYXRpb25zPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDdXN0b21pemF0aW9uIHBvc3QgdGVtcGxhdGUuXG4gICAqXG4gICAqIFBsYXRmb3JtOiBhbGxcbiAgICogUHJvdmlkZXI6IGFsbFxuICAgKi9cbiAgcG9zdFRlbXBsYXRlPzogYW55O1xufVxuXG4vKipcbiAqIFNldCBsb2NhdGlvbiBzZXJ2aWNlIHByb3ZpZGVyIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21hdXJvbjg1L2NvcmRvdmEtcGx1Z2luLWJhY2tncm91bmQtZ2VvbG9jYXRpb24vd2lraS9BbmRyb2lkLXByb3ZpZGVyc1xuICpcbiAqIFBvc3NpYmxlIHZhbHVlczpcbiAqICBBTkRST0lEX0RJU1RBTkNFX0ZJTFRFUl9QUk9WSURFUjogMCxcbiAqICBBTkRST0lEX0FDVElWSVRZX1BST1ZJREVSOiAxXG4gKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGRlY2xhcmUgZW51bSBCYWNrZ3JvdW5kR2VvbG9jYXRpb25Qcm92aWRlciB7XG4gIEFORFJPSURfRElTVEFOQ0VfRklMVEVSX1BST1ZJREVSID0gMCxcbiAgQU5EUk9JRF9BQ1RJVklUWV9QUk9WSURFUiA9IDEsXG59XG5cbi8qKlxuICogRGVzaXJlZCBhY2N1cmFjeSBpbiBtZXRlcnMuIFBvc3NpYmxlIHZhbHVlcyBbMCwgMTAsIDEwMCwgMTAwMF0uXG4gKiBUaGUgbG93ZXIgdGhlIG51bWJlciwgdGhlIG1vcmUgcG93ZXIgZGV2b3RlZCB0byBHZW9Mb2NhdGlvbiByZXN1bHRpbmcgaW4gaGlnaGVyIGFjY3VyYWN5IHJlYWRpbmdzLlxuICogMTAwMCByZXN1bHRzIGluIGxvd2VzdCBwb3dlciBkcmFpbiBhbmQgbGVhc3QgYWNjdXJhdGUgcmVhZGluZ3MuXG4gKlxuICogUG9zc2libGUgdmFsdWVzOlxuICogIEhJR0g6IDBcbiAqICBNRURJVU06IDEwXG4gKiAgTE9XOiAxMDBcbiAqICBQQVNTSVZFOiAxMDAwXG4gKlxuICogZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgZGVjbGFyZSBlbnVtIEJhY2tncm91bmRHZW9sb2NhdGlvbkFjY3VyYWN5IHtcbiAgSElHSCA9IDAsXG4gIE1FRElVTSA9IDEwLFxuICBMT1cgPSAxMDAsXG4gIFBBU1NJVkUgPSAxMDAwLFxufVxuXG4vKipcbiAqIFVzZWQgaW4gdGhlIHN3aXRjaE1vZGUgZnVuY3Rpb25cbiAqXG4gKiBQb3NzaWJsZSB2YWx1ZXM6XG4gKiAgQkFDS0dST1VORDogMFxuICogIEZPUkVHUk9VTkQ6IDFcbiAqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgZGVjbGFyZSBlbnVtIEJhY2tncm91bmRHZW9sb2NhdGlvbk1vZGUge1xuICBCQUNLR1JPVU5EID0gMCxcbiAgRk9SRUdST1VORCA9IDEsXG59XG5cbmV4cG9ydCBkZWNsYXJlIGVudW0gQmFja2dyb3VuZEdlb2xvY2F0aW9uSU9TQWN0aXZpdHkge1xuICBBdXRvbW90aXZlTmF2aWdhdGlvbiA9ICdBdXRvbW90aXZlTmF2aWdhdGlvbicsXG4gIE90aGVyTmF2aWdhdGlvbiA9ICdPdGhlck5hdmlnYXRpb24nLFxuICBGaXRuZXNzID0gJ0ZpdG5lc3MnLFxuICBPdGhlciA9ICdPdGhlcicsXG59XG5cbi8qKlxuICogQG5hbWUgQmFja2dyb3VuZCBHZW9sb2NhdGlvblxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGlzIHBsdWdpbiBwcm92aWRlcyBmb3JlZ3JvdW5kIGFuZCBiYWNrZ3JvdW5kIGdlb2xvY2F0aW9uIHdpdGggYmF0dGVyeS1zYXZpbmcgXCJjaXJjdWxhciByZWdpb24gbW9uaXRvcmluZ1wiIGFuZCBcInN0b3AgZGV0ZWN0aW9uXCIuIEZvclxuICogbW9yZSBkZXRhaWwsIHBsZWFzZSBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21hdXJvbjg1L2NvcmRvdmEtcGx1Z2luLWJhY2tncm91bmQtZ2VvbG9jYXRpb25cbiAqXG4gKiBAdXNhZ2VcbiAqXG4gKiBCYWNrZ3JvdW5kR2VvbG9jYXRpb24gbXVzdCBiZSBjYWxsZWQgd2l0aGluIGFwcC50cyBhbmQgb3IgYmVmb3JlIEdlb2xvY2F0aW9uLiBPdGhlcndpc2UgdGhlIHBsYXRmb3JtIHdpbGwgbm90IGFzayB5b3UgZm9yIGJhY2tncm91bmQgdHJhY2tpbmcgcGVybWlzc2lvbi5cbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBCYWNrZ3JvdW5kR2VvbG9jYXRpb24sIEJhY2tncm91bmRHZW9sb2NhdGlvbkNvbmZpZywgQmFja2dyb3VuZEdlb2xvY2F0aW9uRXZlbnRzLCBCYWNrZ3JvdW5kR2VvbG9jYXRpb25SZXNwb25zZSB9IGZyb20gJ0Bpb25pYy1uYXRpdmUvYmFja2dyb3VuZC1nZW9sb2NhdGlvbi9uZ3gnO1xuICpcbiAqIGNvbnN0cnVjdG9yKHByaXZhdGUgYmFja2dyb3VuZEdlb2xvY2F0aW9uOiBCYWNrZ3JvdW5kR2VvbG9jYXRpb24pIHsgfVxuICpcbiAqIC4uLlxuICpcbiAqIGNvbnN0IGNvbmZpZzogQmFja2dyb3VuZEdlb2xvY2F0aW9uQ29uZmlnID0ge1xuICogICAgICAgICAgICAgZGVzaXJlZEFjY3VyYWN5OiAxMCxcbiAqICAgICAgICAgICAgIHN0YXRpb25hcnlSYWRpdXM6IDIwLFxuICogICAgICAgICAgICAgZGlzdGFuY2VGaWx0ZXI6IDMwLFxuICogICAgICAgICAgICAgZGVidWc6IHRydWUsIC8vICBlbmFibGUgdGhpcyBoZWFyIHNvdW5kcyBmb3IgYmFja2dyb3VuZC1nZW9sb2NhdGlvbiBsaWZlLWN5Y2xlLlxuICogICAgICAgICAgICAgc3RvcE9uVGVybWluYXRlOiBmYWxzZSwgLy8gZW5hYmxlIHRoaXMgdG8gY2xlYXIgYmFja2dyb3VuZCBsb2NhdGlvbiBzZXR0aW5ncyB3aGVuIHRoZSBhcHAgdGVybWluYXRlc1xuICogICAgIH07XG4gKlxuICogdGhpcy5iYWNrZ3JvdW5kR2VvbG9jYXRpb24uY29uZmlndXJlKGNvbmZpZylcbiAqICAgLnRoZW4oKCkgPT4ge1xuICpcbiAqICAgICB0aGlzLmJhY2tncm91bmRHZW9sb2NhdGlvbi5vbihCYWNrZ3JvdW5kR2VvbG9jYXRpb25FdmVudHMubG9jYXRpb24pLnN1YnNjcmliZSgobG9jYXRpb246IEJhY2tncm91bmRHZW9sb2NhdGlvblJlc3BvbnNlKSA9PiB7XG4gKiAgICAgICBjb25zb2xlLmxvZyhsb2NhdGlvbik7XG4gKlxuICogICAgICAgLy8gSU1QT1JUQU5UOiAgWW91IG11c3QgZXhlY3V0ZSB0aGUgZmluaXNoIG1ldGhvZCBoZXJlIHRvIGluZm9ybSB0aGUgbmF0aXZlIHBsdWdpbiB0aGF0IHlvdSdyZSBmaW5pc2hlZCxcbiAqICAgICAgIC8vIGFuZCB0aGUgYmFja2dyb3VuZC10YXNrIG1heSBiZSBjb21wbGV0ZWQuICBZb3UgbXVzdCBkbyB0aGlzIHJlZ2FyZGxlc3MgaWYgeW91ciBvcGVyYXRpb25zIGFyZSBzdWNjZXNzZnVsIG9yIG5vdC5cbiAqICAgICAgIC8vIElGIFlPVSBET04nVCwgaW9zIHdpbGwgQ1JBU0ggWU9VUiBBUFAgZm9yIHNwZW5kaW5nIHRvbyBtdWNoIHRpbWUgaW4gdGhlIGJhY2tncm91bmQuXG4gKiAgICAgICB0aGlzLmJhY2tncm91bmRHZW9sb2NhdGlvbi5maW5pc2goKTsgLy8gRk9SIElPUyBPTkxZXG4gKiAgICAgfSk7XG4gKlxuICogICB9KTtcbiAqXG4gKiAvLyBzdGFydCByZWNvcmRpbmcgbG9jYXRpb25cbiAqIHRoaXMuYmFja2dyb3VuZEdlb2xvY2F0aW9uLnN0YXJ0KCk7XG4gKlxuICogLy8gSWYgeW91IHdpc2ggdG8gdHVybiBPRkYgYmFja2dyb3VuZC10cmFja2luZywgY2FsbCB0aGUgI3N0b3AgbWV0aG9kLlxuICogdGhpcy5iYWNrZ3JvdW5kR2VvbG9jYXRpb24uc3RvcCgpO1xuICpcbiAqIGBgYFxuICogQGludGVyZmFjZXNcbiAqIEJhY2tncm91bmRHZW9sb2NhdGlvblJlc3BvbnNlXG4gKiBCYWNrZ3JvdW5kR2VvbG9jYXRpb25Db25maWdcbiAqL1xuQFBsdWdpbih7XG4gIHBsdWdpbk5hbWU6ICdCYWNrZ3JvdW5kR2VvbG9jYXRpb24nLFxuICBwbHVnaW46ICdAbWF1cm9uODUvY29yZG92YS1wbHVnaW4tYmFja2dyb3VuZC1nZW9sb2NhdGlvbicsXG4gIHBsdWdpblJlZjogJ0JhY2tncm91bmRHZW9sb2NhdGlvbicsXG4gIHJlcG86ICdodHRwczovL2dpdGh1Yi5jb20vbWF1cm9uODUvY29yZG92YS1wbHVnaW4tYmFja2dyb3VuZC1nZW9sb2NhdGlvbicsXG4gIHBsYXRmb3JtczogWydBbmRyb2lkJywgJ2lPUyddLFxufSlcbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBCYWNrZ3JvdW5kR2VvbG9jYXRpb24gZXh0ZW5kcyBJb25pY05hdGl2ZVBsdWdpbiB7XG4gIC8qKlxuICAgKiBDb25maWd1cmUgdGhlIHBsdWdpbi5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMge0JhY2tncm91bmRHZW9sb2NhdGlvbkNvbmZpZ30gb3B0aW9ucyBBbiBvYmplY3Qgb2YgdHlwZSBDb25maWdcbiAgICogQHJldHVybiB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBjb25maWd1cmUob3B0aW9uczogQmFja2dyb3VuZEdlb2xvY2F0aW9uQ29uZmlnKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogVHVybiBPTiB0aGUgYmFja2dyb3VuZC1nZW9sb2NhdGlvbiBzeXN0ZW0uXG4gICAqIFRoZSB1c2VyIHdpbGwgYmUgdHJhY2tlZCB3aGVuZXZlciB0aGV5IHN1c3BlbmQgdGhlIGFwcC5cbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgc3RhcnQoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogVHVybiBPRkYgYmFja2dyb3VuZC10cmFja2luZ1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBzdG9wKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZm9ybSB0aGUgbmF0aXZlIHBsdWdpbiB0aGF0IHlvdSdyZSBmaW5pc2hlZCwgdGhlIGJhY2tncm91bmQtdGFzayBtYXkgYmUgY29tcGxldGVkXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgcGxhdGZvcm1zOiBbJ2lPUyddLFxuICB9KVxuICBmaW5pc2goKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogRm9yY2UgdGhlIHBsdWdpbiB0byBlbnRlciBcIm1vdmluZ1wiIG9yIFwic3RhdGlvbmFyeVwiIHN0YXRlXG4gICAqIEBwYXJhbSBpc01vdmluZyB7Ym9vbGVhbn1cbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBwbGF0Zm9ybXM6IFsnaU9TJ10sXG4gIH0pXG4gIGNoYW5nZVBhY2UoaXNNb3Zpbmc6IGJvb2xlYW4pOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXR1cCBjb25maWd1cmF0aW9uXG4gICAqIEBwYXJhbSBvcHRpb25zIHtCYWNrZ3JvdW5kR2VvbG9jYXRpb25Db25maWd9XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgY2FsbGJhY2tPcmRlcjogJ3JldmVyc2UnLFxuICB9KVxuICBzZXRDb25maWcob3B0aW9uczogQmFja2dyb3VuZEdlb2xvY2F0aW9uQ29uZmlnKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBjdXJyZW50IHN0YXRpb25hcnlMb2NhdGlvbiBpZiBhdmFpbGFibGUuIG51bGwgaWYgbm90XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExvY2F0aW9uPn1cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBwbGF0Zm9ybXM6IFsnaU9TJ10sXG4gIH0pXG4gIGdldFN0YXRpb25hcnlMb2NhdGlvbigpOiBQcm9taXNlPEJhY2tncm91bmRHZW9sb2NhdGlvblJlc3BvbnNlPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIHN0YXRpb25hcnktcmVnaW9uIGxpc3RlbmVyLiBXaGVuZXZlciB0aGUgZGV2aWNlcyBlbnRlcnMgXCJzdGF0aW9uYXJ5LW1vZGVcIixcbiAgICogeW91ciAjc3VjY2VzcyBjYWxsYmFjayB3aWxsIGJlIGV4ZWN1dGVkIHdpdGggI2xvY2F0aW9uIHBhcmFtIGNvbnRhaW5pbmcgI3JhZGl1cyBvZiByZWdpb25cbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBwbGF0Zm9ybXM6IFsnaU9TJ10sXG4gIH0pXG4gIG9uU3RhdGlvbmFyeSgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBsb2NhdGlvbiBpcyBlbmFibGVkIG9uIHRoZSBkZXZpY2VcbiAgICogQHJldHVybnMge1Byb21pc2U8bnVtYmVyPn0gUmV0dXJucyBhIHByb21pc2Ugd2l0aCBpbnQgYXJndW1lbnQgdGhhdCB0YWtlcyB2YWx1ZXMgMCwgMSAodHJ1ZSkuXG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgcGxhdGZvcm1zOiBbJ0FuZHJvaWQnXSxcbiAgfSlcbiAgaXNMb2NhdGlvbkVuYWJsZWQoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogRGlzcGxheSBhcHAgc2V0dGluZ3MgdG8gY2hhbmdlIHBlcm1pc3Npb25zXG4gICAqL1xuICBAQ29yZG92YSh7IHN5bmM6IHRydWUgfSlcbiAgc2hvd0FwcFNldHRpbmdzKCk6IHZvaWQge31cblxuICAvKipcbiAgICogRGlzcGxheSBkZXZpY2UgbG9jYXRpb24gc2V0dGluZ3NcbiAgICovXG4gIEBDb3Jkb3ZhKHsgc3luYzogdHJ1ZSB9KVxuICBzaG93TG9jYXRpb25TZXR0aW5ncygpOiB2b2lkIHt9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCBjYW4gYmUgdXNlZCB0byBkZXRlY3QgdXNlciBjaGFuZ2VzIGluIGxvY2F0aW9uIHNlcnZpY2VzIHNldHRpbmdzLlxuICAgKiBJZiB1c2VyIGVuYWJsZSBvciBkaXNhYmxlIGxvY2F0aW9uIHNlcnZpY2VzIHRoZW4gc3VjY2VzcyBjYWxsYmFjayB3aWxsIGJlIGV4ZWN1dGVkLlxuICAgKiBJbiBjYXNlIG9yICAoU2V0dGluZ05vdEZvdW5kRXhjZXB0aW9uKSBmYWlsIGNhbGxiYWNrIHdpbGwgYmUgZXhlY3V0ZWQuXG4gICAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPG51bWJlcj59XG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgcGxhdGZvcm1zOiBbJ0FuZHJvaWQnXSxcbiAgICBvYnNlcnZhYmxlOiB0cnVlLFxuICB9KVxuICB3YXRjaExvY2F0aW9uTW9kZSgpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wIHdhdGNoaW5nIGZvciBsb2NhdGlvbiBtb2RlIGNoYW5nZXMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgcGxhdGZvcm1zOiBbJ0FuZHJvaWQnXSxcbiAgfSlcbiAgc3RvcFdhdGNoaW5nTG9jYXRpb25Nb2RlKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB3aWxsIHJldHVybiBhbGwgc3RvcmVkIGxvY2F0aW9ucy5cbiAgICogTG9jYXRpb25zIGFyZSBzdG9yZWQgd2hlbjpcbiAgICogIC0gY29uZmlnLnN0b3BPblRlcm1pbmF0ZSBpcyBmYWxzZSBhbmQgbWFpbiBhY3Rpdml0eSB3YXMga2lsbGVkXG4gICAqICAgIGJ5IHRoZSBzeXN0ZW1cbiAgICogIG9yXG4gICAqICAtIG9wdGlvbi5kZWJ1ZyBpcyB0cnVlXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgcGxhdGZvcm1zOiBbJ0FuZHJvaWQnXSxcbiAgfSlcbiAgZ2V0TG9jYXRpb25zKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB3aWxsIHJldHVybiBsb2NhdGlvbnMsIHdoaWNoIGhhcyBub3QgYmVlbiB5ZXQgcG9zdGVkIHRvIHNlcnZlci4gTk9URTogTG9jYXRpb25zIGRvZXMgY29udGFpbiBsb2NhdGlvbklkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBnZXRWYWxpZExvY2F0aW9ucygpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgc3RvcmVkIGxvY2F0aW9uIGJ5IGdpdmVuIGxvY2F0aW9uSWQuXG4gICAqIEBwYXJhbSBsb2NhdGlvbklkIHtudW1iZXJ9XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBAQ29yZG92YSh7XG4gICAgcGxhdGZvcm1zOiBbJ0FuZHJvaWQnXSxcbiAgfSlcbiAgZGVsZXRlTG9jYXRpb24obG9jYXRpb25JZDogbnVtYmVyKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIGFsbCBzdG9yZWQgbG9jYXRpb25zLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIHBsYXRmb3JtczogWydBbmRyb2lkJ10sXG4gIH0pXG4gIGRlbGV0ZUFsbExvY2F0aW9ucygpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3JtYWxseSBwbHVnaW4gd2lsbCBoYW5kbGUgc3dpdGNoaW5nIGJldHdlZW4gQkFDS0dST1VORCBhbmQgRk9SRUdST1VORCBtb2RlIGl0c2VsZi5cbiAgICogQ2FsbGluZyBzd2l0Y2hNb2RlIHlvdSBjYW4gb3ZlcnJpZGUgcGx1Z2luIGJlaGF2aW9yIGFuZCBmb3JjZSBwbHVnaW4gdG8gc3dpdGNoIGludG8gb3RoZXIgbW9kZS5cbiAgICpcbiAgICogSW4gRk9SRUdST1VORCBtb2RlIHBsdWdpbiB1c2VzIGlPUyBsb2NhbCBtYW5hZ2VyIHRvIHJlY2VpdmUgbG9jYXRpb25zIGFuZCBiZWhhdmlvciBpcyBhZmZlY3RlZCBieSBvcHRpb24uZGVzaXJlZEFjY3VyYWN5IGFuZCBvcHRpb24uZGlzdGFuY2VGaWx0ZXIuXG4gICAqIEluIEJBQ0tHUk9VTkQgbW9kZSBwbHVnaW4gdXNlcyBzaWduaWZpY2FudCBjaGFuZ2VzIGFuZCByZWdpb24gbW9uaXRvcmluZyB0byByZWNlaXZlIGxvY2F0aW9ucyBhbmQgdXNlcyBvcHRpb24uc3RhdGlvbmFyeVJhZGl1cyBvbmx5LlxuICAgKlxuICAgKiBCYWNrZ3JvdW5kR2VvbG9jYXRpb24uTW9kZS5GT1JFR1JPVU5EXG4gICAqIEJhY2tncm91bmRHZW9sb2NhdGlvbi5Nb2RlLkJBQ0tHUk9VTkRcbiAgICpcbiAgICogQHBhcmFtIG1vZGVJZCB7bnVtYmVyfVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoe1xuICAgIHBsYXRmb3JtczogWydpT1MnXSxcbiAgfSlcbiAgc3dpdGNoTW9kZShtb2RlSWQ6IG51bWJlcik6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbGwgbG9nZ2VkIGV2ZW50cy4gVXNlZnVsIGZvciBwbHVnaW4gZGVidWdnaW5nLiBQYXJhbWV0ZXIgbGltaXQgbGltaXRzIG51bWJlciBvZiByZXR1cm5lZCBlbnRyaWVzLlxuICAgKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXVyb244NS9jb3Jkb3ZhLXBsdWdpbi1iYWNrZ3JvdW5kLWdlb2xvY2F0aW9uL3RyZWUvdjIuMi4xI2RlYnVnZ2luZyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIGxpbWl0IHtudW1iZXJ9IExpbWl0cyB0aGUgbnVtYmVyIG9mIGVudHJpZXNcbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgZ2V0TG9nRW50cmllcyhcbiAgICBsaW1pdDogbnVtYmVyLFxuICAgIGZyb21JZDogbnVtYmVyLFxuICAgIG1pbkxldmVsOiBCYWNrZ3JvdW5kR2VvbG9jYXRpb25Mb2dMZXZlbFxuICApOiBQcm9taXNlPEJhY2tncm91bmRHZW9sb2NhdGlvbkxvZ0VudHJ5W10+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFsbCBsb2dnZWQgZXZlbnRzLiBVc2VmdWwgZm9yIHBsdWdpbiBkZWJ1Z2dpbmcuIFBhcmFtZXRlciBsaW1pdCBsaW1pdHMgbnVtYmVyIG9mIHJldHVybmVkIGVudHJpZXMuXG4gICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21hdXJvbjg1L2NvcmRvdmEtcGx1Z2luLWJhY2tncm91bmQtZ2VvbG9jYXRpb24vdHJlZS92Mi4yLjEjZGVidWdnaW5nIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgQENvcmRvdmEoKVxuICBnZXRDb25maWcoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogT25lIHRpbWUgbG9jYXRpb24gY2hlY2sgdG8gZ2V0IGN1cnJlbnQgbG9jYXRpb24gb2YgdGhlIGRldmljZS5cbiAgICoge3RpbWVvdXQ6IE1heGltdW0gdGltZSBpbiBtaWxsaXNlY29uZHMgZGV2aWNlIHdpbGwgd2FpdCBmb3IgbG9jYXRpb24sXG4gICAqIG1heGltdW1BZ2U6IE1heGltdW0gYWdlIGluIG1pbGxpc2Vjb25kcyBvZiBhIHBvc3NpYmxlIGNhY2hlZCBsb2NhdGlvbiB0aGF0IGlzIGFjY2VwdGFibGUgdG8gcmV0dXJuO1xuICAgKiBlbmFibGVIaWdoQWNjdXJhY3k6IGlmIHRydWUgYW5kIGlmIHRoZSBkZXZpY2UgaXMgYWJsZSB0byBwcm92aWRlIGEgbW9yZSBhY2N1cmF0ZSBwb3NpdGlvbiwgaXQgd2lsbCBkbyBzb31cbiAgICpcbiAgICogQHBhcmFtIHtCYWNrZ3JvdW5kR2VvbG9jYXRpb25DdXJyZW50UG9zaXRpb25Db25maWd9IG9wdGlvbnNcbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBjYWxsYmFja09yZGVyOiAncmV2ZXJzZScsXG4gIH0pXG4gIGdldEN1cnJlbnRMb2NhdGlvbihvcHRpb25zPzogQmFja2dyb3VuZEdlb2xvY2F0aW9uQ3VycmVudFBvc2l0aW9uQ29uZmlnKTogUHJvbWlzZTxCYWNrZ3JvdW5kR2VvbG9jYXRpb25SZXNwb25zZT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBzdGF0dXMgb2YgdGhlIHNlcnZpY2VcbiAgICovXG4gIEBDb3Jkb3ZhKClcbiAgY2hlY2tTdGF0dXMoKTogUHJvbWlzZTxTZXJ2aWNlU3RhdHVzPiB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGJhY2tncm91bmQgdGFzayAoaU9TIG9ubHkpXG4gICAqXG4gICAqIFRvIHBlcmZvcm0gYW55IGxvbmcgcnVubmluZyBvcGVyYXRpb24gb24gaU9TXG4gICAqIHlvdSBuZWVkIHRvIGNyZWF0ZSBiYWNrZ3JvdW5kIHRhc2tcbiAgICogSU1QT1JUQU5UOiB0YXNrIGhhcyB0byBiZSBlbmRlZCBieSBlbmRUYXNrXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPG51bWJlcj59IHRhc2tLZXlcbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBwbGF0Zm9ybXM6IFsnSU9TJ10sXG4gIH0pXG4gIHN0YXJ0VGFzaygpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiAgRW5kIGJhY2tncm91bmQgdGFzayBpbmRlbnRpZmllZCBieSB0YXNrS2V5IChpT1Mgb25seSlcbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBwbGF0Zm9ybXM6IFsnSU9TJ10sXG4gIH0pXG4gIGVuZFRhc2sodGFza0tleTogbnVtYmVyKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQSBzcGVjaWFsIHRhc2sgdGhhdCBnZXRzIGV4ZWN1dGVkIHdoZW4gdGhlIGFwcCBpcyB0ZXJtaW5hdGVkLCBidXRcbiAgICogdGhlIHBsdWdpbiB3YXMgY29uZmlndXJlZCB0byBjb250aW51ZSBydW5uaW5nIGluIHRoZSBiYWNrZ3JvdW5kXG4gICAqIChvcHRpb24gPGNvZGU+c3RvcE9uVGVybWluYXRlOiBmYWxzZTwvY29kZT4pLlxuICAgKlxuICAgKiBJbiB0aGlzIHNjZW5hcmlvIHRoZSBBY3Rpdml0eSB3YXMga2lsbGVkIGJ5IHRoZSBzeXN0ZW0gYW5kIGFsbCByZWdpc3RlcmVkXG4gICAqIGV2ZW50IGxpc3RlbmVycyB3aWxsIG5vdCBiZSB0cmlnZ2VyZWQgdW50aWwgdGhlIGFwcCBpcyByZWxhdW5jaGVkLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAgQmFja2dyb3VuZEdlb2xvY2F0aW9uLmhlYWRsZXNzVGFzayhmdW5jdGlvbihldmVudCkge1xuICAgKlxuICAgKiAgICAgIGlmIChldmVudC5uYW1lID09PSAnbG9jYXRpb24nIHx8IGV2ZW50Lm5hbWUgPT09ICdzdGF0aW9uYXJ5Jykge1xuICAgKiAgICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAqICAgICAgICAgIHhoci5vcGVuKCdQT1NUJywgJ2h0dHA6Ly8xOTIuMTY4LjgxLjE0OjMwMDAvaGVhZGxlc3MnKTtcbiAgICogICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAqICAgICAgICAgIHhoci5zZW5kKEpTT04uc3RyaW5naWZ5KGV2ZW50LnBhcmFtcykpO1xuICAgKiAgICAgIH1cbiAgICpcbiAgICogICAgICByZXR1cm4gJ1Byb2Nlc3NpbmcgZXZlbnQ6ICcgKyBldmVudC5uYW1lOyAvLyB3aWxsIGJlIGxvZ2dlZFxuICAgKiAgfSk7XG4gICAqIEBwYXJhbSBmdW5jXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGhlYWRsZXNzVGFzayhmdW5jOiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JjZSBzeW5jIG9mIHBlbmRpbmcgbG9jYXRpb25zLlxuICAgKiBPcHRpb24gPGNvZGU+c3luY1RocmVzaG9sZDwvY29kZT4gd2lsbCBiZSBpZ25vcmVkIGFuZCBhbGwgcGVuZGluZyBsb2NhdGlvbnMgd2lsbCBiZSBpbW1lZGlhdGVseSBwb3N0ZWQgdG8gPGNvZGU+c3luY1VybDwvY29kZT4gaW4gc2luZ2xlIGJhdGNoLlxuICAgKlxuICAgKiBQbGF0Zm9ybTogQW5kcm9pZCwgaU9TXG4gICAqL1xuICBAQ29yZG92YSgpXG4gIGZvcmNlU3luYygpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBldmVudCBsaXN0ZW5lci5cbiAgICpcbiAgICogVHJpZ2dlcmVkIHdoZW4gc2VydmVyIHJlc3BvbmRlZCB3aXRoIFwiPGNvZGU+Mjg1IFVwZGF0ZXMgTm90IFJlcXVpcmVkPC9jb2RlPlwiIHRvIHBvc3Qvc3luYyByZXF1ZXN0LlxuICAgKiBAcGFyYW0gZXZlbnRcbiAgICogQHBhcmFtIGNhbGxiYWNrRm5cbiAgICovXG4gIEBDb3Jkb3ZhKHtcbiAgICBvYnNlcnZhYmxlOiB0cnVlLFxuICB9KVxuICBvbihldmVudDogQmFja2dyb3VuZEdlb2xvY2F0aW9uRXZlbnRzKTogT2JzZXJ2YWJsZTxCYWNrZ3JvdW5kR2VvbG9jYXRpb25SZXNwb25zZT4ge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbnJlZ2lzdGVyIGFsbCBldmVudCBsaXN0ZW5lcnMgZm9yIGdpdmVuIGV2ZW50LlxuICAgKlxuICAgKiBJZiBwYXJhbWV0ZXIgPGNvZGU+ZXZlbnQ8L2NvZGU+IGlzIG5vdCBwcm92aWRlZCB0aGVuIGFsbCBldmVudCBsaXN0ZW5lcnMgd2lsbCBiZSByZW1vdmVkLlxuICAgKi9cbiAgQENvcmRvdmEoKVxuICByZW1vdmVBbGxMaXN0ZW5lcnMoZXZlbnQ/OiBCYWNrZ3JvdW5kR2VvbG9jYXRpb25FdmVudHMpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybjtcbiAgfVxufVxuIl19