Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@haventech/semotus

Package Overview
Dependencies
Maintainers
5
Versions
45
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@haventech/semotus - npm Package Compare versions

Comparing version 6.0.1 to 6.1.0-beta.0

123

dist/helpers/ProcessCall.js

@@ -41,2 +41,3 @@ "use strict";

var Utilities_1 = require("./Utilities");
var moduleName = 'ProcessCall';
/**

@@ -122,14 +123,16 @@ * We process the call the remote method in stages starting by letting the controller examine the

return __awaiter(this, void 0, void 0, function () {
var semotus, remoteCall, session, callContext, HTTPObjs, changes, objId, remoteObject, remoteTemplate, isPublic;
var semotus, remoteCall, session, callContext, HTTPObjs, functionName, changes, objId, remoteObject, remoteTemplate, isPublic;
return __generator(this, function (_a) {
semotus = payload.semotus, remoteCall = payload.remoteCall, session = payload.session, callContext = payload.callContext, HTTPObjs = payload.HTTPObjs;
functionName = preCallHook.name;
semotus.logger.info({
component: 'semotus',
module: 'processCall',
activity: 'preServerCall',
module: moduleName,
function: functionName,
category: 'milestone',
data: {
activity: 'preServerCall',
call: remoteCall.name,
sequence: remoteCall.sequence
}
}, remoteCall.name);
});
if (semotus.controller && semotus.controller.preServerCall) {

@@ -152,10 +155,12 @@ changes = {};

semotus.logger.error({
component: 'semotus',
module: 'processCall',
activity: 'preServerCall',
module: moduleName,
function: functionName,
category: 'milestone',
message: 'Could not find template for ' + objId,
data: {
activity: 'preServerCall',
call: remoteCall.name,
sequence: remoteCall.sequence
}
}, 'Could not find template for ' + objId);
});
}

@@ -178,7 +183,9 @@ return [2 /*return*/, semotus.controller.preServerCall.call(semotus.controller, remoteCall.changes.length > 2, changes, callContext, forceupdate, remoteCall.name, remoteCall, isPublic, HTTPObjs)];

var semotus = payload.semotus, remoteCall = payload.remoteCall, callContext = payload.callContext, session = payload.session, subscriptionId = payload.subscriptionId, remoteCallId = payload.remoteCallId, restoreSessionCallback = payload.restoreSessionCallback;
var functionName = applyChangesAndValidateCall.name;
semotus.logger.info({
component: 'semotus',
module: 'processCall',
activity: 'applyChangesAndValidateCall',
module: moduleName,
function: functionName,
category: 'milestone',
data: {
activity: 'applyChangesAndValidateCall',
call: remoteCall.name,

@@ -188,3 +195,3 @@ sequence: remoteCall.sequence,

}
}, remoteCall.name);
});
var changes = JSON.parse(remoteCall.changes);

@@ -221,7 +228,9 @@ var res = semotus._applyChanges(changes, semotus.role === 'client', subscriptionId, callContext);

var semotus = payload.semotus, remoteCall = payload.remoteCall, callContext = payload.callContext, session = payload.session, subscriptionId = payload.subscriptionId, remoteCallId = payload.remoteCallId, restoreSessionCallback = payload.restoreSessionCallback;
var functionName = customValidation.name;
var loggerObject = {
component: 'semotus',
module: 'processCall',
activity: 'customValidation',
module: moduleName,
function: functionName,
category: 'milestone',
data: {
activity: 'customValidation',
call: remoteCall.name,

@@ -233,3 +242,3 @@ sequence: remoteCall.sequence,

var remoteObject = session.objects[remoteCall.id];
semotus.logger.info(loggerObject, remoteCall.name);
semotus.logger.info(loggerObject);
if (!isValid) {

@@ -260,10 +269,12 @@ return false;

return __awaiter(this, void 0, void 0, function () {
var semotus, remoteCall, callContext, session, subscriptionId, remoteCallId, restoreSessionCallback, loggerObject, obj, args;
var semotus, remoteCall, callContext, session, subscriptionId, remoteCallId, restoreSessionCallback, functionName, loggerObject, obj, args;
return __generator(this, function (_a) {
semotus = payload.semotus, remoteCall = payload.remoteCall, callContext = payload.callContext, session = payload.session, subscriptionId = payload.subscriptionId, remoteCallId = payload.remoteCallId, restoreSessionCallback = payload.restoreSessionCallback;
functionName = callIfValid.name;
loggerObject = {
component: 'semotus',
module: 'processCall',
activity: 'callIfValid',
module: moduleName,
function: functionName,
category: 'milestone',
data: {
activity: 'callIfValid',
call: remoteCall.name,

@@ -274,3 +285,3 @@ sequence: remoteCall.sequence,

};
semotus.logger.info(loggerObject, remoteCall.name);
semotus.logger.info(loggerObject);
obj = session.objects[remoteCall.id];

@@ -325,7 +336,9 @@ if (!obj[remoteCall.name]) {

var semotus = payload.semotus, remoteCall = payload.remoteCall, callContext = payload.callContext, session = payload.session, remoteCallId = payload.remoteCallId;
var functionName = postCallSuccess.name;
semotus.logger.info({
component: 'semotus',
module: 'processCall',
activity: 'postCall.success',
module: moduleName,
function: functionName,
category: 'milestone',
data: {
activity: 'postCall.success',
call: remoteCall.name,

@@ -335,3 +348,3 @@ callTime: Utilities_1.logTime(callContext),

}
}, remoteCall.name);
});
packageChanges(semotus, session, {

@@ -359,9 +372,10 @@ type: 'response',

return __awaiter(this, void 0, void 0, function () {
var errorType, functionName, obj, logBody, error_1;
var functionName, errorType, remoteCallName, obj, error_1, logBody;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
functionName = resolveErrorHandler.name;
if (!(controller && controller.postServerErrorHandler)) return [3 /*break*/, 4];
errorType = type;
functionName = remoteCall.name;
remoteCallName = remoteCall.name;
obj = undefined;

@@ -371,15 +385,6 @@ if (session.objects[remoteCall.id]) {

}
logBody = {
component: 'semotus',
module: 'processCall.failure',
activity: 'postCall.resolveErrorHandler',
data: {
call: remoteCall.name,
message: undefined
}
};
_a.label = 1;
case 1:
_a.trys.push([1, 3, , 4]);
return [4 /*yield*/, controller.postServerErrorHandler.call(controller, errorType, remoteCallId, obj, functionName, callContext, changeString)];
return [4 /*yield*/, controller.postServerErrorHandler.call(controller, errorType, remoteCallId, obj, remoteCallName, callContext, changeString)];
case 2:

@@ -390,10 +395,15 @@ _a.sent();

error_1 = _a.sent();
if (error_1.message) {
logBody.data.message = error_1.message;
logger.error(error_1.message);
}
else {
logBody.data.message = JSON.stringify(error_1);
}
logger.error(logBody, 'User defined postServerErrorHandler threw an error');
logBody = {
module: moduleName,
function: functionName,
category: 'milestone',
error: error_1,
message: 'User defined postServerErrorHandler threw an error',
data: {
activity: 'postCall.resolveErrorHandler',
call: remoteCall.name,
message: error_1.message ? error_1.message : JSON.stringify(error_1)
}
};
logger.error(logBody);
return [3 /*break*/, 4];

@@ -521,20 +531,19 @@ case 4: return [2 /*return*/];

function postCallErrorLog(logger, activity, message, logType, logString, remoteCall, callContext) {
var functionName = processCall.name;
var logBody = {
component: 'semotus',
module: 'processCall.failure',
module: moduleName,
function: functionName,
category: 'milestone',
message: logString,
data: {
message: message,
activity: activity,
call: remoteCall.name,
callTime: Utilities_1.logTime(callContext),
sequence: remoteCall.sequence,
message: undefined
},
activity: undefined
}
};
logBody.activity = activity;
if (logger.data) {
logBody.data.message = message;
}
logger[logType](logBody, logString);
logger[logType](logBody);
}
exports.postCallErrorLog = postCallErrorLog;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvY2Vzc0NhbGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaGVscGVycy9Qcm9jZXNzQ2FsbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx5Q0FBcUQ7QUFHckQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFzQixXQUFXLENBQUMsT0FBMkIsRUFBRSxXQUFxQjs7Ozs7OztvQkFHOUQscUJBQU0sT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBQTs7b0JBQWhELFdBQVcsR0FBRyxTQUFrQyxDQUFDO29CQUNqRCxxQkFBTSxXQUFXLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxFQUFBOztvQkFBdkMsU0FBdUMsQ0FBQztvQkFDdkIscUJBQU0sMkJBQTJCLENBQUMsT0FBTyxDQUFDLEVBQUE7O29CQUF2RCxVQUFVLEdBQUcsU0FBMEM7b0JBQzlDLHFCQUFNLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsRUFBQTs7b0JBQXhELFVBQVUsR0FBRyxTQUEyQyxDQUFDO29CQUMxQyxxQkFBTSxXQUFXLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFBOztvQkFBL0MsTUFBTSxHQUFHLFNBQXNDO29CQUNyRCxxQkFBTSxZQUFZLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxFQUFBOztvQkFBbkMsU0FBbUMsQ0FBQztvQkFDcEMscUJBQU0sZUFBZSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsRUFBQTs7b0JBQXRDLFNBQXNDLENBQUM7Ozs7b0JBRXZDLHFCQUFNLGVBQWUsQ0FBQyxPQUFPLEVBQUUsS0FBRyxDQUFDLEVBQUE7O29CQUFuQyxTQUFtQyxDQUFDOzs7Ozs7Q0FFM0M7QUFiRCxrQ0FhQztBQUdEOzs7O0dBSUc7QUFDSCxTQUFlLFNBQVMsQ0FBQyxPQUEyQjs7OztZQUN6QyxPQUFPLEdBQTRGLE9BQU8sUUFBbkcsRUFBRSxVQUFVLEdBQWdGLE9BQU8sV0FBdkYsRUFBRSxXQUFXLEdBQW1FLE9BQU8sWUFBMUUsRUFBRSxPQUFPLEdBQTBELE9BQU8sUUFBakUsRUFBRSxjQUFjLEdBQTBDLE9BQU8sZUFBakQsRUFBRSxZQUFZLEdBQTRCLE9BQU8sYUFBbkMsRUFBRSxzQkFBc0IsR0FBSSxPQUFPLHVCQUFYLENBQVk7WUFFbEgsSUFBSSxzQkFBc0IsRUFBRTtnQkFDeEIsc0JBQXNCLEVBQUUsQ0FBQzthQUM1QjtZQUVELHNCQUFPLFdBQVcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUM7OztDQUNyQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxTQUFlLFdBQVcsQ0FBQyxPQUEyQixFQUFFLFdBQXFCOzs7O1lBQ2xFLE9BQU8sR0FBZ0QsT0FBTyxRQUF2RCxFQUFFLFVBQVUsR0FBb0MsT0FBTyxXQUEzQyxFQUFFLE9BQU8sR0FBMkIsT0FBTyxRQUFsQyxFQUFFLFdBQVcsR0FBYyxPQUFPLFlBQXJCLEVBQUUsUUFBUSxHQUFJLE9BQU8sU0FBWCxDQUFZO1lBQ3RFLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNmO2dCQUNJLFNBQVMsRUFBRSxTQUFTO2dCQUNwQixNQUFNLEVBQUUsYUFBYTtnQkFDckIsUUFBUSxFQUFFLGVBQWU7Z0JBQ3pCLElBQUksRUFBRTtvQkFDRixJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUk7b0JBQ3JCLFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUTtpQkFDaEM7YUFDSixFQUNELFVBQVUsQ0FBQyxJQUFJLENBQ2xCLENBQUM7WUFFRixJQUFJLE9BQU8sQ0FBQyxVQUFVLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUU7Z0JBQ3BELE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBRWpCLEtBQVMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUM5QyxPQUFPLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDO2lCQUNuRztnQkFFRyxZQUFZLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBRzlDLGNBQWMsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hHLFFBQVEsR0FBRyxLQUFLLENBQUM7Z0JBRXJCLElBQUksWUFBWSxFQUFFO29CQUNkLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxLQUFLLFFBQVEsSUFBSSxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxDQUFDO2lCQUN2SDtxQkFDSSxJQUFJLGNBQWMsRUFBRTtvQkFDckIsbUZBQW1GO29CQUNuRixRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksY0FBYyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksY0FBYyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxDQUFDO2lCQUMvSTtxQkFDSTtvQkFDRCxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQzt3QkFDakIsU0FBUyxFQUFFLFNBQVM7d0JBQ3BCLE1BQU0sRUFBRSxhQUFhO3dCQUNyQixRQUFRLEVBQUUsZUFBZTt3QkFDekIsSUFBSSxFQUFFOzRCQUNGLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSTs0QkFDckIsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRO3lCQUNoQztxQkFDSixFQUFHLDhCQUE4QixHQUFHLEtBQUssQ0FBQyxDQUFDO2lCQUMvQztnQkFFRCxzQkFBTyxPQUFPLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ3hDLE9BQU8sQ0FBQyxVQUFVLEVBQ2xCLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDN0IsT0FBTyxFQUNQLFdBQVcsRUFDWCxXQUFXLEVBQ1gsVUFBVSxDQUFDLElBQUksRUFDZixVQUFVLEVBQ1YsUUFBUSxFQUNSLFFBQVEsQ0FDWCxFQUFDO2FBQ0w7aUJBQU07Z0JBQ0gsc0JBQU8sSUFBSSxFQUFDO2FBQ2Y7Ozs7Q0FDSjtBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLDJCQUEyQixDQUFDLE9BQTJCO0lBQ3JELElBQUEsT0FBTyxHQUE0RixPQUFPLFFBQW5HLEVBQUUsVUFBVSxHQUFnRixPQUFPLFdBQXZGLEVBQUUsV0FBVyxHQUFtRSxPQUFPLFlBQTFFLEVBQUUsT0FBTyxHQUEwRCxPQUFPLFFBQWpFLEVBQUUsY0FBYyxHQUEwQyxPQUFPLGVBQWpELEVBQUUsWUFBWSxHQUE0QixPQUFPLGFBQW5DLEVBQUUsc0JBQXNCLEdBQUksT0FBTyx1QkFBWCxDQUFZO0lBRWxILE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNmO1FBQ0ksU0FBUyxFQUFFLFNBQVM7UUFDcEIsTUFBTSxFQUFFLGFBQWE7UUFDckIsUUFBUSxFQUFFLDZCQUE2QjtRQUN2QyxJQUFJLEVBQUU7WUFDRixJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUk7WUFDckIsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRO1lBQzdCLFlBQVksRUFBRSxVQUFVLENBQUMsRUFBRTtTQUM5QjtLQUNKLEVBQ0QsVUFBVSxDQUFDLElBQUksQ0FDbEIsQ0FBQztJQUVGLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRTdDLElBQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLGNBQWMsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNuRyxJQUFJLEdBQUcsRUFBRTtRQUNMLElBQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRTNDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDTixNQUFNLElBQUksS0FBSyxDQUFDLHdDQUFzQyxVQUFVLENBQUMsRUFBSSxDQUFDLENBQUM7U0FDMUU7UUFFRCw4RUFBOEU7UUFDOUUsSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssUUFBUSxFQUFFO1lBQ3BELE1BQU0sNENBQTRDLENBQUM7U0FDdEQ7UUFFRCxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssUUFBUSxJQUFJLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRTtZQUNyRCxPQUFPLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7U0FDekU7UUFFRCxPQUFPLElBQUksQ0FBQztLQUNmO1NBQU07UUFDSCxNQUFNLFlBQVksQ0FBQztLQUN0QjtBQUNMLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsZ0JBQWdCLENBQUMsT0FBMkIsRUFBRSxPQUFnQjtJQUM1RCxJQUFBLE9BQU8sR0FBNEYsT0FBTyxRQUFuRyxFQUFFLFVBQVUsR0FBZ0YsT0FBTyxXQUF2RixFQUFFLFdBQVcsR0FBbUUsT0FBTyxZQUExRSxFQUFFLE9BQU8sR0FBMEQsT0FBTyxRQUFqRSxFQUFFLGNBQWMsR0FBMEMsT0FBTyxlQUFqRCxFQUFFLFlBQVksR0FBNEIsT0FBTyxhQUFuQyxFQUFFLHNCQUFzQixHQUFJLE9BQU8sdUJBQVgsQ0FBWTtJQUVsSCxJQUFJLFlBQVksR0FBRztRQUNmLFNBQVMsRUFBRSxTQUFTO1FBQ3BCLE1BQU0sRUFBRSxhQUFhO1FBQ3JCLFFBQVEsRUFBRSxrQkFBa0I7UUFDNUIsSUFBSSxFQUFFO1lBQ0YsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJO1lBQ3JCLFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUTtZQUM3QixZQUFZLEVBQUUsVUFBVSxDQUFDLEVBQUU7U0FDOUI7S0FDSixDQUFDO0lBRUYsSUFBSSxZQUFZLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFbEQsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVuRCxJQUFJLENBQUMsT0FBTyxFQUFFO1FBQ1YsT0FBTyxLQUFLLENBQUM7S0FDaEI7U0FBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssUUFBUSxJQUFJLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsZ0JBQWdCLEVBQUU7UUFDcEYsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFM0IsT0FBTyxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDM0U7U0FBTTtRQUNILE9BQU8sSUFBSSxDQUFDO0tBQ2Y7QUFDTCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQWUsV0FBVyxDQUFDLE9BQTJCLEVBQUUsT0FBZ0I7Ozs7WUFDN0QsT0FBTyxHQUE0RixPQUFPLFFBQW5HLEVBQUUsVUFBVSxHQUFnRixPQUFPLFdBQXZGLEVBQUUsV0FBVyxHQUFtRSxPQUFPLFlBQTFFLEVBQUUsT0FBTyxHQUEwRCxPQUFPLFFBQWpFLEVBQUUsY0FBYyxHQUEwQyxPQUFPLGVBQWpELEVBQUUsWUFBWSxHQUE0QixPQUFPLGFBQW5DLEVBQUUsc0JBQXNCLEdBQUksT0FBTyx1QkFBWCxDQUFZO1lBRTlHLFlBQVksR0FBRztnQkFDZixTQUFTLEVBQUUsU0FBUztnQkFDcEIsTUFBTSxFQUFFLGFBQWE7Z0JBQ3JCLFFBQVEsRUFBRSxhQUFhO2dCQUN2QixJQUFJLEVBQUU7b0JBQ0YsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJO29CQUNyQixRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVE7b0JBQzdCLFlBQVksRUFBRSxVQUFVLENBQUMsRUFBRTtpQkFDOUI7YUFDSixDQUFDO1lBRUYsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUUvQyxHQUFHLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7WUFFekMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRywyQkFBMkIsQ0FBQyxDQUFDO2FBQ2xFO1lBRUQsSUFBSSxDQUFDLE9BQU8sSUFBSSxVQUFVLElBQUksVUFBVSxDQUFDLElBQUksRUFBRTtnQkFDM0MsTUFBTSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxDQUFDO2FBQ2pEO1lBRUcsSUFBSSxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUVqRCxzQkFBTyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUM7OztDQUNoRDtBQUVEOzs7Ozs7O0dBT0c7QUFDSCxTQUFlLFlBQVksQ0FBQyxPQUEyQixFQUFFLFdBQVc7Ozs7OztvQkFDekQsT0FBTyxHQUF1QyxPQUFPLFFBQTlDLEVBQUUsVUFBVSxHQUEyQixPQUFPLFdBQWxDLEVBQUUsV0FBVyxHQUFjLE9BQU8sWUFBckIsRUFBRSxRQUFRLEdBQUksT0FBTyxTQUFYLENBQVk7eUJBRXpELENBQUEsT0FBTyxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQSxFQUF2RCx3QkFBdUQ7b0JBQ2pELFVBQVUsR0FBWSxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7b0JBQzFELHFCQUFNLE9BQU8sQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsRUFBQTs7b0JBQXpILFNBQXlILENBQUM7O3dCQUU5SCxzQkFBTyxXQUFXLEVBQUM7Ozs7Q0FDdEI7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsZUFBZSxDQUFDLE9BQTJCLEVBQUUsR0FBRztJQUM5QyxJQUFBLE9BQU8sR0FBb0QsT0FBTyxRQUEzRCxFQUFFLFVBQVUsR0FBd0MsT0FBTyxXQUEvQyxFQUFFLFdBQVcsR0FBMkIsT0FBTyxZQUFsQyxFQUFFLE9BQU8sR0FBa0IsT0FBTyxRQUF6QixFQUFFLFlBQVksR0FBSSxPQUFPLGFBQVgsQ0FBWTtJQUUxRSxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDZjtRQUNJLFNBQVMsRUFBRSxTQUFTO1FBQ3BCLE1BQU0sRUFBRSxhQUFhO1FBQ3JCLFFBQVEsRUFBRSxrQkFBa0I7UUFDNUIsSUFBSSxFQUFFO1lBQ0YsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJO1lBQ3JCLFFBQVEsRUFBRSxtQkFBTyxDQUFDLFdBQVcsQ0FBQztZQUM5QixRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVE7U0FDaEM7S0FDSixFQUNELFVBQVUsQ0FBQyxJQUFJLENBQ2xCLENBQUM7SUFFRixjQUFjLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBQztRQUM1QixJQUFJLEVBQUUsVUFBVTtRQUNoQixJQUFJLEVBQUUsSUFBSTtRQUNWLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEQsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJO1FBQ3JCLFlBQVksRUFBRSxZQUFZO0tBQzdCLENBQUMsQ0FBQztBQUNQLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILFNBQWUsbUJBQW1CLENBQUMsTUFBTSxFQUFFLFVBQWUsRUFBRSxJQUFJLEVBQUUsVUFBc0IsRUFBRSxZQUFZLEVBQUUsV0FBd0IsRUFBRSxZQUFZLEVBQUUsT0FBZ0I7Ozs7Ozt5QkFFeEosQ0FBQSxVQUFVLElBQUksVUFBVSxDQUFDLHNCQUFzQixDQUFBLEVBQS9DLHdCQUErQztvQkFDM0MsU0FBUyxHQUFHLElBQUksQ0FBQztvQkFDakIsWUFBWSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7b0JBQy9CLEdBQUcsR0FBRyxTQUFTLENBQUM7b0JBQ3BCLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUU7d0JBQ2hDLEdBQUcsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztxQkFDeEM7b0JBQ0csT0FBTyxHQUFHO3dCQUNWLFNBQVMsRUFBRSxTQUFTO3dCQUNwQixNQUFNLEVBQUUscUJBQXFCO3dCQUM3QixRQUFRLEVBQUUsOEJBQThCO3dCQUN4QyxJQUFJLEVBQUU7NEJBQ0YsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJOzRCQUNyQixPQUFPLEVBQUUsU0FBUzt5QkFDckI7cUJBQ0osQ0FBQzs7OztvQkFHRSxxQkFBTSxVQUFVLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFlBQVksQ0FBQyxFQUFBOztvQkFBL0gsU0FBK0gsQ0FBQzs7OztvQkFFaEksSUFBSSxPQUFLLENBQUMsT0FBTyxFQUFFO3dCQUNmLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQUssQ0FBQyxPQUFPLENBQUM7d0JBQ3JDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO3FCQUMvQjt5QkFBTTt3QkFDSCxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQUssQ0FBQyxDQUFDO3FCQUNoRDtvQkFFRCxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxvREFBb0QsQ0FBQyxDQUFDOzs7Ozs7Q0FHdkY7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsU0FBZSxlQUFlLENBQUMsT0FBMkIsRUFBRSxHQUFHOzs7Ozs7b0JBQ3BELE9BQU8sR0FBNEYsT0FBTyxRQUFuRyxFQUFFLFVBQVUsR0FBZ0YsT0FBTyxXQUF2RixFQUFFLFdBQVcsR0FBbUUsT0FBTyxZQUExRSxFQUFFLE9BQU8sR0FBMEQsT0FBTyxRQUFqRSxFQUFFLGNBQWMsR0FBMEMsT0FBTyxlQUFqRCxFQUFFLFlBQVksR0FBNEIsT0FBTyxhQUFuQyxFQUFFLHNCQUFzQixHQUFJLE9BQU8sdUJBQVgsQ0FBWTtvQkFFOUcsU0FBUyxHQUFHLEVBQUUsQ0FBQztvQkFFZixxQkFBcUIsR0FBRyxFQUFFLENBQUM7b0JBRTNCLG1CQUFtQixHQUFHLEtBQUssQ0FBQztvQkFFaEMsSUFBSSxHQUFHLEtBQUssWUFBWSxFQUFFO3dCQUN0QixnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUM7d0JBQ3JILHFCQUFxQixHQUFHOzRCQUNwQixJQUFJLEVBQUUsVUFBVTs0QkFDaEIsSUFBSSxFQUFFLEtBQUs7NEJBQ1gsT0FBTyxFQUFFLEVBQUU7eUJBQ2QsQ0FBQztxQkFDTDt5QkFBTSxJQUFJLEdBQUcsQ0FBQyxPQUFPLElBQUksaUJBQWlCLEVBQUU7d0JBQ3pDLHVFQUF1RTt3QkFFdkUsNkVBQTZFO3dCQUM3RSxJQUFJLFdBQVcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEVBQUU7NEJBQzNCLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUseUJBQXlCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQzs0QkFDekgsbUJBQW1CLEdBQUcsSUFBSSxDQUFDOzRCQUMzQiw4REFBOEQ7NEJBQzlELHFCQUFxQixHQUFHO2dDQUNwQixJQUFJLEVBQUUsT0FBTzs2QkFDaEIsQ0FBQzt5QkFDTDs2QkFBTTs0QkFDSCxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLHlCQUF5QixFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUM7NEJBQzFILHFCQUFxQixHQUFHO2dDQUNwQixJQUFJLEVBQUUsT0FBTztnQ0FDYixJQUFJLEVBQUUsS0FBSzs2QkFDZCxDQUFDO3lCQUNMO3FCQUNKO3lCQUFNO3dCQUNILElBQUksQ0FBQyxDQUFDLEdBQUcsWUFBWSxLQUFLLENBQUMsRUFBRTs0QkFDekIsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQzt5QkFDN0g7NkJBQU07NEJBQ0gsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFO2dDQUNYLFNBQVMsR0FBRyxlQUFlLEdBQUcsVUFBVSxDQUFDLElBQUksR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDLE9BQU8sR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7NkJBQzNGO2lDQUFNO2dDQUNILFNBQVMsR0FBRyxlQUFlLEdBQUcsVUFBVSxDQUFDLElBQUksR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQzs2QkFDdkU7NEJBRUQsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO3lCQUNwSDt3QkFFRCxxQkFBcUIsR0FBRzs0QkFDcEIsSUFBSSxFQUFFLE9BQU87NEJBQ2IsSUFBSSxFQUFFLElBQUk7NEJBQ1YsS0FBSyxFQUFFLG9CQUFRLENBQUMsR0FBRyxDQUFDOzRCQUNwQixJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUk7eUJBQ3hCLENBQUM7cUJBQ0w7b0JBRUQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxFQUFDLFlBQVksRUFBRSxZQUFZLEVBQUMsQ0FBQyxDQUFDO29CQUVuRSxxQkFBTSxtQkFBbUIsQ0FDckIsT0FBTyxDQUFDLE1BQU0sRUFDZCxPQUFPLENBQUMsVUFBVTt3QkFDbEIsYUFBYTt3QkFDYixxQkFBcUIsQ0FBQyxJQUFJLEVBQzFCLFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLE9BQU8sQ0FBQyxZQUFZLEVBQ3BCLE9BQU8sQ0FDVixFQUFBOztvQkFWRCxTQVVDLENBQUM7eUJBRUUsbUJBQW1CLEVBQW5CLHdCQUFtQjtvQkFDbkIscUJBQU0saUJBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFBOztvQkFBdkMsU0FBdUMsQ0FBQztvQkFDeEMsc0JBQU8sU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFDO3dCQUUxQixzQkFBTyxjQUFjLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxxQkFBcUIsQ0FBQyxFQUFDOzs7O0NBRXRFO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyxjQUFjLENBQUMsT0FBZ0IsRUFBRSxPQUFnQixFQUFFLE9BQU87SUFDL0QsT0FBTyxDQUFDLGdDQUFnQyxFQUFFLENBQUM7SUFDM0MsT0FBTyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBRXZELElBQUksT0FBTyxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUU7UUFDOUYsT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQztLQUNoRDtJQUVELDRGQUE0RjtJQUM1RixJQUFJLE9BQU8sQ0FBQyxVQUFVLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUU7UUFDekQsT0FBTyxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztLQUNqRTtJQUVELE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDN0IsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3pCLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztBQUM1QixDQUFDO0FBR0Q7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBZ0IsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFzQixFQUFFLFdBQXdCO0lBQzVILElBQUksT0FBTyxHQUFHO1FBQ1YsU0FBUyxFQUFFLFNBQVM7UUFDcEIsTUFBTSxFQUFFLHFCQUFxQjtRQUM3QixJQUFJLEVBQUU7WUFDRixJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUk7WUFDckIsUUFBUSxFQUFFLG1CQUFPLENBQUMsV0FBVyxDQUFDO1lBQzlCLFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUTtZQUM3QixPQUFPLEVBQUUsU0FBUztTQUNyQjtRQUNELFFBQVEsRUFBRSxTQUFTO0tBQ3RCLENBQUM7SUFFRixPQUFPLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUU1QixJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUU7UUFDYixPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7S0FDbEM7SUFFRCxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFwQkQsNENBb0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtkZWxheSwgZ2V0RXJyb3IsIGxvZ1RpbWV9IGZyb20gJy4vVXRpbGl0aWVzJztcbmltcG9ydCB7Q2FsbENvbnRleHQsIFByb2Nlc3NDYWxsUGF5bG9hZCwgUmVtb3RlQ2FsbCwgU2Vtb3R1cywgU2Vzc2lvbn0gZnJvbSAnLi9UeXBlcyc7XG5cbi8qKlxuICogV2UgcHJvY2VzcyB0aGUgY2FsbCB0aGUgcmVtb3RlIG1ldGhvZCBpbiBzdGFnZXMgc3RhcnRpbmcgYnkgbGV0dGluZyB0aGUgY29udHJvbGxlciBleGFtaW5lIHRoZVxuICogY2hhbmdlcyAocHJlQ2FsbEhvb2spIGFuZCBnaXZpbmcgaXQgYSBjaGFuY2UgdG8gcmVmcmVzaCBkYXRhIGlmIGl0IG5lZWRzIHRvLiAgVGhlbiB3ZSBhcHBseSBhbnlcbiAqIGNoYW5nZXMgaW4gdGhlIG1lc3NhZ2VzIGFuZCBnaXZlIHRoZSBvYmplY3Qgb3duaW5nIHRoZSBtZXRob2QgYSBjaGFuY2UgdG8gdmFsaWRhdGUgdGhhdCB0aGVcbiAqIGNhbGwgaXMgdmFsaWQgYW5kIHRha2UgY2FyZSBvZiBhbnkgYXV0aG9yaXphdGlvbiBjb25jZXJucy4gIEZpbmFsbHkgd2UgbGV0IHRoZSBjb250cm9sbGVyIHBlcmZvcm1cbiAqIGFueSBwb3N0LWNhbGwgcHJvY2Vzc2luZyBzdWNoIGFzIGNvbW1pdGluZyBkYXRhIGFuZCB0aGVuIHdlIGRlYWwgd2l0aCBhIGZhaWx1cmUgb3Igc3VjY2Vzcy5cbiAqXG4gKiBAcGFyYW0gcGF5bG9hZFxuICogQHBhcmFtIHt1bmtub3dufSBmb3JjZXVwZGF0ZSB1bmtub3duXG4gKlxuICogQHJldHVybnMge3Vua25vd259IHVua25vd25cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NDYWxsKHBheWxvYWQ6IFByb2Nlc3NDYWxsUGF5bG9hZCwgZm9yY2V1cGRhdGU/OiBib29sZWFuKSB7XG5cbiAgICB0cnkge1xuICAgICAgICBmb3JjZXVwZGF0ZSA9IGF3YWl0IFByb21pc2UucmVzb2x2ZShmb3JjZXVwZGF0ZSk7XG4gICAgICAgIGF3YWl0IHByZUNhbGxIb29rKHBheWxvYWQsIGZvcmNldXBkYXRlKTtcbiAgICAgICAgbGV0IHZhbGlkYXRpb24gPSBhd2FpdCBhcHBseUNoYW5nZXNBbmRWYWxpZGF0ZUNhbGwocGF5bG9hZCk7XG4gICAgICAgIHZhbGlkYXRpb24gPSBhd2FpdCBjdXN0b21WYWxpZGF0aW9uKHBheWxvYWQsIHZhbGlkYXRpb24pO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjYWxsSWZWYWxpZChwYXlsb2FkLCB2YWxpZGF0aW9uKTtcbiAgICAgICAgYXdhaXQgcG9zdENhbGxIb29rKHBheWxvYWQsIHJlc3VsdCk7XG4gICAgICAgIGF3YWl0IHBvc3RDYWxsU3VjY2VzcyhwYXlsb2FkLCByZXN1bHQpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBhd2FpdCBwb3N0Q2FsbEZhaWx1cmUocGF5bG9hZCwgZXJyKTtcbiAgICB9XG59XG5cblxuLyoqXG4gKiBJZiB0aGVyZSBpcyBhbiB1cGRhdGUgY29uZmxpY3Qgd2Ugd2FudCB0byByZXRyeSBhZnRlciByZXN0b3JpbmcgdGhlIHNlc3Npb25cbiAqXG4gKiBAcmV0dXJucyB7Kn0gdW5rbm93blxuICovXG5hc3luYyBmdW5jdGlvbiByZXRyeUNhbGwocGF5bG9hZDogUHJvY2Vzc0NhbGxQYXlsb2FkKSB7XG4gICAgY29uc3Qge3NlbW90dXMsIHJlbW90ZUNhbGwsIGNhbGxDb250ZXh0LCBzZXNzaW9uLCBzdWJzY3JpcHRpb25JZCwgcmVtb3RlQ2FsbElkLCByZXN0b3JlU2Vzc2lvbkNhbGxiYWNrfSA9IHBheWxvYWQ7XG5cbiAgICBpZiAocmVzdG9yZVNlc3Npb25DYWxsYmFjaykge1xuICAgICAgICByZXN0b3JlU2Vzc2lvbkNhbGxiYWNrKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2Nlc3NDYWxsKHBheWxvYWQsIHRydWUpO1xufVxuXG4vKipcbiAqIERldGVybWluZSB3aGF0IG9iamVjdHMgY2hhbmdlZCBhbmQgcGFzcyB0aGlzIHRvIHRoZSBwcmVTZXJ2ZXJDYWxsIG1ldGhvZCBvbiB0aGUgY29udHJvbGxlclxuICpcbiAqIEBwYXJhbSBwYXlsb2FkXG4gKiBAcGFyYW0gIGZvcmNldXBkYXRlIHVua25vd25cbiAqXG4gKiBAcmV0dXJucyAgdW5rbm93blxuICovXG5hc3luYyBmdW5jdGlvbiBwcmVDYWxsSG9vayhwYXlsb2FkOiBQcm9jZXNzQ2FsbFBheWxvYWQsIGZvcmNldXBkYXRlPzogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3Qge3NlbW90dXMsIHJlbW90ZUNhbGwsIHNlc3Npb24sIGNhbGxDb250ZXh0LCBIVFRQT2Jqc30gPSBwYXlsb2FkO1xuICAgIHNlbW90dXMubG9nZ2VyLmluZm8oXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbXBvbmVudDogJ3NlbW90dXMnLFxuICAgICAgICAgICAgbW9kdWxlOiAncHJvY2Vzc0NhbGwnLFxuICAgICAgICAgICAgYWN0aXZpdHk6ICdwcmVTZXJ2ZXJDYWxsJyxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBjYWxsOiByZW1vdGVDYWxsLm5hbWUsXG4gICAgICAgICAgICAgICAgc2VxdWVuY2U6IHJlbW90ZUNhbGwuc2VxdWVuY2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcmVtb3RlQ2FsbC5uYW1lXG4gICAgKTtcblxuICAgIGlmIChzZW1vdHVzLmNvbnRyb2xsZXIgJiYgc2Vtb3R1cy5jb250cm9sbGVyLnByZVNlcnZlckNhbGwpIHtcbiAgICAgICAgbGV0IGNoYW5nZXMgPSB7fTtcblxuICAgICAgICBmb3IgKHZhciBvYmpJZCBpbiBKU09OLnBhcnNlKHJlbW90ZUNhbGwuY2hhbmdlcykpIHtcbiAgICAgICAgICAgIGNoYW5nZXNbc2Vtb3R1cy5fX2RpY3Rpb25hcnlfX1tvYmpJZC5yZXBsYWNlKC9bXi1dKi0vLCAnJykucmVwbGFjZSgvLS4qLywgJycpXS5fX25hbWVfX10gPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlbW90ZU9iamVjdCA9IHNlc3Npb24ub2JqZWN0c1tyZW1vdGVDYWxsLmlkXTtcblxuICAgICAgICAvLyBOZWVkIHRvIGRvdWJsZSBjaGVjayBpZiBub3QgaW4gc2Vzc2lvbiwgd2hhdCB0aGUgdGVtcGxhdGUgaXMuXG4gICAgICAgIGxldCByZW1vdGVUZW1wbGF0ZSA9IHNlbW90dXMuX19kaWN0aW9uYXJ5X19bcmVtb3RlQ2FsbC5pZC5yZXBsYWNlKC9bXi1dKi0vLCAnJykucmVwbGFjZSgvLS4qLywgJycpXTtcbiAgICAgICAgbGV0IGlzUHVibGljID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHJlbW90ZU9iamVjdCkge1xuICAgICAgICAgICAgaXNQdWJsaWMgPSBzZW1vdHVzLnJvbGUgPT09ICdzZXJ2ZXInICYmIHJlbW90ZU9iamVjdFtyZW1vdGVDYWxsLm5hbWVdICYmIHJlbW90ZU9iamVjdFtyZW1vdGVDYWxsLm5hbWVdLnJlbW90ZVB1YmxpYztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChyZW1vdGVUZW1wbGF0ZSkge1xuICAgICAgICAgICAgLy8gSWYgdGhlIGNsYXNzIGRvZXNuJ3QgZXhpc3QsIHdlIHNob3VsZCBnZXQgdGhlIHJlbW90ZSBmdW5jdGlvbiBmcm9tIHRoZSBwcm90b3R5cGVcbiAgICAgICAgICAgIGlzUHVibGljID0gc2Vtb3R1cy5yb2xlID09PSAnc2VydmVyJyAmJiByZW1vdGVUZW1wbGF0ZS5wcm90b3R5cGVbcmVtb3RlQ2FsbC5uYW1lXSAmJiByZW1vdGVUZW1wbGF0ZS5wcm90b3R5cGVbcmVtb3RlQ2FsbC5uYW1lXS5yZW1vdGVQdWJsaWM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzZW1vdHVzLmxvZ2dlci5lcnJvcih7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50OiAnc2Vtb3R1cycsXG4gICAgICAgICAgICAgICAgbW9kdWxlOiAncHJvY2Vzc0NhbGwnLFxuICAgICAgICAgICAgICAgIGFjdGl2aXR5OiAncHJlU2VydmVyQ2FsbCcsXG4gICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICBjYWxsOiByZW1vdGVDYWxsLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHNlcXVlbmNlOiByZW1vdGVDYWxsLnNlcXVlbmNlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgXHQnQ291bGQgbm90IGZpbmQgdGVtcGxhdGUgZm9yICcgKyBvYmpJZCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2Vtb3R1cy5jb250cm9sbGVyLnByZVNlcnZlckNhbGwuY2FsbChcbiAgICAgICAgICAgIHNlbW90dXMuY29udHJvbGxlcixcbiAgICAgICAgICAgIHJlbW90ZUNhbGwuY2hhbmdlcy5sZW5ndGggPiAyLFxuICAgICAgICAgICAgY2hhbmdlcyxcbiAgICAgICAgICAgIGNhbGxDb250ZXh0LFxuICAgICAgICAgICAgZm9yY2V1cGRhdGUsXG4gICAgICAgICAgICByZW1vdGVDYWxsLm5hbWUsXG4gICAgICAgICAgICByZW1vdGVDYWxsLFxuICAgICAgICAgICAgaXNQdWJsaWMsXG4gICAgICAgICAgICBIVFRQT2Jqc1xuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cblxuLyoqXG4gKiBBcHBseSBjaGFuZ2VzIGluIHRoZSBtZXNzYWdlIGFuZCB0aGVuIHZhbGlkYXRlIHRoZSBjYWxsLiAgVGhyb3cgXCJTeW5jIEVycm9yXCIgaWYgY2hhbmdlcyBjYW4ndCBiZSBhcHBsaWVkXG4gKlxuICogQHJldHVybnMge3Vua25vd259IHVua25vd25cbiAqL1xuZnVuY3Rpb24gYXBwbHlDaGFuZ2VzQW5kVmFsaWRhdGVDYWxsKHBheWxvYWQ6IFByb2Nlc3NDYWxsUGF5bG9hZCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHtzZW1vdHVzLCByZW1vdGVDYWxsLCBjYWxsQ29udGV4dCwgc2Vzc2lvbiwgc3Vic2NyaXB0aW9uSWQsIHJlbW90ZUNhbGxJZCwgcmVzdG9yZVNlc3Npb25DYWxsYmFja30gPSBwYXlsb2FkO1xuXG4gICAgc2Vtb3R1cy5sb2dnZXIuaW5mbyhcbiAgICAgICAge1xuICAgICAgICAgICAgY29tcG9uZW50OiAnc2Vtb3R1cycsXG4gICAgICAgICAgICBtb2R1bGU6ICdwcm9jZXNzQ2FsbCcsXG4gICAgICAgICAgICBhY3Rpdml0eTogJ2FwcGx5Q2hhbmdlc0FuZFZhbGlkYXRlQ2FsbCcsXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgY2FsbDogcmVtb3RlQ2FsbC5uYW1lLFxuICAgICAgICAgICAgICAgIHNlcXVlbmNlOiByZW1vdGVDYWxsLnNlcXVlbmNlLFxuICAgICAgICAgICAgICAgIHJlbW90ZUNhbGxJZDogcmVtb3RlQ2FsbC5pZFxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICByZW1vdGVDYWxsLm5hbWVcbiAgICApO1xuXG4gICAgbGV0IGNoYW5nZXMgPSBKU09OLnBhcnNlKHJlbW90ZUNhbGwuY2hhbmdlcyk7XG5cbiAgICBjb25zdCByZXMgPSBzZW1vdHVzLl9hcHBseUNoYW5nZXMoY2hhbmdlcywgc2Vtb3R1cy5yb2xlID09PSAnY2xpZW50Jywgc3Vic2NyaXB0aW9uSWQsIGNhbGxDb250ZXh0KTtcbiAgICBpZiAocmVzKSB7XG4gICAgICAgIGNvbnN0IG9iaiA9IHNlc3Npb24ub2JqZWN0c1tyZW1vdGVDYWxsLmlkXTtcblxuICAgICAgICBpZiAoIW9iaikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCBvYmplY3QgZm9yIHJlbW90ZSBjYWxsICR7cmVtb3RlQ2FsbC5pZH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNoZWNrIHRvIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIHN1cHBvc2VkIHRvIGJlIGNhbGxlZCBkaXJlY3RseSBmcm9tIGNsaWVudFxuICAgICAgICBpZiAob2JqLl9fcHJvdG9fX1tyZW1vdGVDYWxsLm5hbWVdLl9fb25fXyAhPT0gJ3NlcnZlcicpIHtcbiAgICAgICAgICAgIHRocm93ICdJbnZhbGlkIEZ1bmN0aW9uIENhbGw7IG5vdCBhbiBBUEkgZnVuY3Rpb24nO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNlbW90dXMucm9sZSA9PT0gJ3NlcnZlcicgJiYgb2JqLnZhbGlkYXRlU2VydmVyQ2FsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG9iai52YWxpZGF0ZVNlcnZlckNhbGwuY2FsbChvYmosIHJlbW90ZUNhbGwubmFtZSwgY2FsbENvbnRleHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgJ1N5bmMgRXJyb3InO1xuICAgIH1cbn1cblxuLyoqXG4gKiBBcHBseSBmdW5jdGlvbiBzcGVjaWZpYyBjdXN0b20gc2VydmVyU2lkZSB2YWxpZGF0aW9uIGZ1bmN0aW9uc1xuICpcbiAqIEBwYXJhbSBzZW1vdHVzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzVmFsaWQgLSBSZXN1bHQgb2YgcHJldmlvdXMgdmFsaWRhdGlvbiBzdGVwIChhcHBseUNoYW5nZXNBbmRWYWxpZGF0ZUNhbGwpXG4gKiBAcGFyYW0gc2Vzc2lvblxuICogQHBhcmFtIHJlbW90ZUNhbGxcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHBhc3NlZCBmdW5jdGlvblxuICovXG5mdW5jdGlvbiBjdXN0b21WYWxpZGF0aW9uKHBheWxvYWQ6IFByb2Nlc3NDYWxsUGF5bG9hZCwgaXNWYWxpZDogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHtzZW1vdHVzLCByZW1vdGVDYWxsLCBjYWxsQ29udGV4dCwgc2Vzc2lvbiwgc3Vic2NyaXB0aW9uSWQsIHJlbW90ZUNhbGxJZCwgcmVzdG9yZVNlc3Npb25DYWxsYmFja30gPSBwYXlsb2FkO1xuXG4gICAgbGV0IGxvZ2dlck9iamVjdCA9IHtcbiAgICAgICAgY29tcG9uZW50OiAnc2Vtb3R1cycsXG4gICAgICAgIG1vZHVsZTogJ3Byb2Nlc3NDYWxsJyxcbiAgICAgICAgYWN0aXZpdHk6ICdjdXN0b21WYWxpZGF0aW9uJyxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgY2FsbDogcmVtb3RlQ2FsbC5uYW1lLFxuICAgICAgICAgICAgc2VxdWVuY2U6IHJlbW90ZUNhbGwuc2VxdWVuY2UsXG4gICAgICAgICAgICByZW1vdGVDYWxsSWQ6IHJlbW90ZUNhbGwuaWRcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBsZXQgcmVtb3RlT2JqZWN0ID0gc2Vzc2lvbi5vYmplY3RzW3JlbW90ZUNhbGwuaWRdO1xuXG4gICAgc2Vtb3R1cy5sb2dnZXIuaW5mbyhsb2dnZXJPYmplY3QsIHJlbW90ZUNhbGwubmFtZSk7XG5cbiAgICBpZiAoIWlzVmFsaWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoc2Vtb3R1cy5yb2xlID09PSAnc2VydmVyJyAmJiByZW1vdGVPYmplY3RbcmVtb3RlQ2FsbC5uYW1lXS5zZXJ2ZXJWYWxpZGF0aW9uKSB7XG4gICAgICAgIGxldCBhcmdzID0gc2Vtb3R1cy5fZXh0cmFjdEFyZ3VtZW50cyhyZW1vdGVDYWxsKTtcbiAgICAgICAgYXJncy51bnNoaWZ0KHJlbW90ZU9iamVjdCk7XG5cbiAgICAgICAgcmV0dXJuIHJlbW90ZU9iamVjdFtyZW1vdGVDYWxsLm5hbWVdLnNlcnZlclZhbGlkYXRpb24uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxufVxuXG4vKipcbiAqIElmIHRoZSBjaGFuZ2VzIGNvdWxkIGJlIGFwcGxpZWQgYW5kIHRoZSB2YWxpZGF0aW9uIHdhcyBzdWNjZXNzZnVsIGNhbGwgdGhlIG1ldGhvZFxuICpcbiAqIEBwYXJhbSBzZW1vdHVzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzVmFsaWQgLSB0YWtlcyBhIGZsYWcgaWYgdGhlIGNhbGwgaXMgdmFsaWQgb3Igbm90LCBpZiBpdCBpcyB0aGVuIHdlIHByb2NlZWQgbm9ybWFsbHksXG4gKiBvdGhlcndpc2UsIHdlIHRocm93IGFuIGVycm9yIGFuZCBzdG9wIGV4ZWN1dGlvblxuICpcbiAqIEBwYXJhbSBzZXNzaW9uXG4gKiBAcGFyYW0gcmVtb3RlQ2FsbFxuICogQHJldHVybnMge3Vua25vd259IHVua25vd25cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY2FsbElmVmFsaWQocGF5bG9hZDogUHJvY2Vzc0NhbGxQYXlsb2FkLCBpc1ZhbGlkOiBib29sZWFuKSB7XG4gICAgY29uc3Qge3NlbW90dXMsIHJlbW90ZUNhbGwsIGNhbGxDb250ZXh0LCBzZXNzaW9uLCBzdWJzY3JpcHRpb25JZCwgcmVtb3RlQ2FsbElkLCByZXN0b3JlU2Vzc2lvbkNhbGxiYWNrfSA9IHBheWxvYWQ7XG5cbiAgICBsZXQgbG9nZ2VyT2JqZWN0ID0ge1xuICAgICAgICBjb21wb25lbnQ6ICdzZW1vdHVzJyxcbiAgICAgICAgbW9kdWxlOiAncHJvY2Vzc0NhbGwnLFxuICAgICAgICBhY3Rpdml0eTogJ2NhbGxJZlZhbGlkJyxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgY2FsbDogcmVtb3RlQ2FsbC5uYW1lLFxuICAgICAgICAgICAgc2VxdWVuY2U6IHJlbW90ZUNhbGwuc2VxdWVuY2UsXG4gICAgICAgICAgICByZW1vdGVDYWxsSWQ6IHJlbW90ZUNhbGwuaWRcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBzZW1vdHVzLmxvZ2dlci5pbmZvKGxvZ2dlck9iamVjdCwgcmVtb3RlQ2FsbC5uYW1lKTtcblxuICAgIGxldCBvYmogPSBzZXNzaW9uLm9iamVjdHNbcmVtb3RlQ2FsbC5pZF07XG5cbiAgICBpZiAoIW9ialtyZW1vdGVDYWxsLm5hbWVdKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihyZW1vdGVDYWxsLm5hbWUgKyAnIGZ1bmN0aW9uIGRvZXMgbm90IGV4aXN0LicpO1xuICAgIH1cblxuICAgIGlmICghaXNWYWxpZCAmJiByZW1vdGVDYWxsICYmIHJlbW90ZUNhbGwubmFtZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocmVtb3RlQ2FsbC5uYW1lICsgJyByZWZ1c2VkJyk7XG4gICAgfVxuXG4gICAgbGV0IGFyZ3MgPSBzZW1vdHVzLl9leHRyYWN0QXJndW1lbnRzKHJlbW90ZUNhbGwpO1xuXG4gICAgcmV0dXJuIG9ialtyZW1vdGVDYWxsLm5hbWVdLmFwcGx5KG9iaiwgYXJncyk7XG59XG5cbi8qKlxuICogTGV0IHRoZSBjb250cm9sbGVyIGtub3cgdGhhdCB0aGUgbWV0aG9kIHdhcyBjb21wbGV0ZWQgYW5kIGdpdmUgaXQgYSBjaGFuY2UgdG8gY29tbWl0IGNoYW5nZXNcbiAqXG4gKiBAcGFyYW0gcGF5bG9hZFxuICogQHBhcmFtICByZXR1cm5WYWx1ZSB1bmtub3duXG4gKlxuICogQHJldHVybnNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcG9zdENhbGxIb29rKHBheWxvYWQ6IFByb2Nlc3NDYWxsUGF5bG9hZCwgcmV0dXJuVmFsdWUpIHtcbiAgICBjb25zdCB7c2Vtb3R1cywgcmVtb3RlQ2FsbCwgY2FsbENvbnRleHQsIEhUVFBPYmpzfSA9IHBheWxvYWQ7XG5cbiAgICBpZiAoc2Vtb3R1cy5jb250cm9sbGVyICYmIHNlbW90dXMuY29udHJvbGxlci5wb3N0U2VydmVyQ2FsbCkge1xuICAgICAgICBjb25zdCBoYXNDaGFuZ2VzOiBib29sZWFuID0gcmVtb3RlQ2FsbC5jaGFuZ2VzLmxlbmd0aCA+IDI7XG4gICAgICAgIGF3YWl0IHNlbW90dXMuY29udHJvbGxlci5wb3N0U2VydmVyQ2FsbC5jYWxsKHNlbW90dXMuY29udHJvbGxlciwgaGFzQ2hhbmdlcywgY2FsbENvbnRleHQsIHNlbW90dXMuY2hhbmdlU3RyaW5nLCBIVFRQT2Jqcyk7XG4gICAgfVxuICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbn1cblxuLyoqXG4gKiBQYWNrYWdlIHVwIGFueSBjaGFuZ2VzIHJlc3VsdGluZyBmcm9tIHRoZSBleGVjdXRpb24gYW5kIHNlbmQgdGhlbSBiYWNrIGluIHRoZSBtZXNzYWdlLCBjbGVhcmluZ1xuICogb3VyIGNoYW5nZSBxdWV1ZSB0byBhY2N1bXVsYXRlIG1vcmUgY2hhbmdlcyBmb3IgdGhlIG5leHQgY2FsbFxuICpcbiAqIEBwYXJhbSBzZW1vdHVzXG4gKiBAcGFyYW0gcmVtb3RlQ2FsbFxuICogQHBhcmFtIHJlbW90ZUNhbGxJZFxuICogQHBhcmFtIHt1bmtub3dufSByZXQgdW5rbm93blxuICovXG5mdW5jdGlvbiBwb3N0Q2FsbFN1Y2Nlc3MocGF5bG9hZDogUHJvY2Vzc0NhbGxQYXlsb2FkLCByZXQpOiB2b2lkIHtcbiAgICBjb25zdCB7c2Vtb3R1cywgcmVtb3RlQ2FsbCwgY2FsbENvbnRleHQsIHNlc3Npb24sIHJlbW90ZUNhbGxJZH0gPSBwYXlsb2FkO1xuXG4gICAgc2Vtb3R1cy5sb2dnZXIuaW5mbyhcbiAgICAgICAge1xuICAgICAgICAgICAgY29tcG9uZW50OiAnc2Vtb3R1cycsXG4gICAgICAgICAgICBtb2R1bGU6ICdwcm9jZXNzQ2FsbCcsXG4gICAgICAgICAgICBhY3Rpdml0eTogJ3Bvc3RDYWxsLnN1Y2Nlc3MnLFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIGNhbGw6IHJlbW90ZUNhbGwubmFtZSxcbiAgICAgICAgICAgICAgICBjYWxsVGltZTogbG9nVGltZShjYWxsQ29udGV4dCksXG4gICAgICAgICAgICAgICAgc2VxdWVuY2U6IHJlbW90ZUNhbGwuc2VxdWVuY2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcmVtb3RlQ2FsbC5uYW1lXG4gICAgKTtcblxuICAgIHBhY2thZ2VDaGFuZ2VzKHNlbW90dXMsIHNlc3Npb24se1xuICAgICAgICB0eXBlOiAncmVzcG9uc2UnLFxuICAgICAgICBzeW5jOiB0cnVlLFxuICAgICAgICB2YWx1ZTogSlNPTi5zdHJpbmdpZnkoc2Vtb3R1cy5fdG9UcmFuc3BvcnQocmV0KSksXG4gICAgICAgIG5hbWU6IHJlbW90ZUNhbGwubmFtZSxcbiAgICAgICAgcmVtb3RlQ2FsbElkOiByZW1vdGVDYWxsSWRcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gaWRlbnRpZnkgaWYgdGhlcmUncyBhIHBvc3RTZXJ2ZXJFcnJvckhhbmRsZXIgY2FsbGJhY2sgb24gdGhlIGJhc2UgY29udHJvbGxlclxuICogSWYgdGhlcmUgaXMsIHdlIGV4ZWN1dGUgdGhlIGhhbmRsZXIsIGFuZCBpZiB3ZSBjYXRjaCBhbiBlcnJvciBpbiB0aGUgaGFuZGxlciwgd2UgcHJvcG9nYXRlIGl0IHVwIHRvIHRoZSBsb2dnZXIuXG4gKiBAcGFyYW0gbG9nZ2VyXG4gKiBAcGFyYW0geyp9IGNvbnRyb2xsZXJcbiAqIEBwYXJhbSB0eXBlXG4gKiBAcGFyYW0gcmVtb3RlQ2FsbFxuICogQHBhcmFtIHJlbW90ZUNhbGxJZFxuICogQHBhcmFtIGNhbGxDb250ZXh0XG4gKiBAcGFyYW0gY2hhbmdlU3RyaW5nXG4gKiBAcGFyYW0gc2Vzc2lvblxuICovXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlRXJyb3JIYW5kbGVyKGxvZ2dlciwgY29udHJvbGxlcjogYW55LCB0eXBlLCByZW1vdGVDYWxsOiBSZW1vdGVDYWxsLCByZW1vdGVDYWxsSWQsIGNhbGxDb250ZXh0OiBDYWxsQ29udGV4dCwgY2hhbmdlU3RyaW5nLCBzZXNzaW9uOiBTZXNzaW9uKSB7XG5cbiAgICBpZiAoY29udHJvbGxlciAmJiBjb250cm9sbGVyLnBvc3RTZXJ2ZXJFcnJvckhhbmRsZXIpIHtcbiAgICAgICAgbGV0IGVycm9yVHlwZSA9IHR5cGU7XG4gICAgICAgIGxldCBmdW5jdGlvbk5hbWUgPSByZW1vdGVDYWxsLm5hbWU7XG4gICAgICAgIGxldCBvYmogPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChzZXNzaW9uLm9iamVjdHNbcmVtb3RlQ2FsbC5pZF0pIHtcbiAgICAgICAgICAgIG9iaiA9IHNlc3Npb24ub2JqZWN0c1tyZW1vdGVDYWxsLmlkXTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbG9nQm9keSA9IHtcbiAgICAgICAgICAgIGNvbXBvbmVudDogJ3NlbW90dXMnLFxuICAgICAgICAgICAgbW9kdWxlOiAncHJvY2Vzc0NhbGwuZmFpbHVyZScsXG4gICAgICAgICAgICBhY3Rpdml0eTogJ3Bvc3RDYWxsLnJlc29sdmVFcnJvckhhbmRsZXInLFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIGNhbGw6IHJlbW90ZUNhbGwubmFtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiB1bmRlZmluZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgY29udHJvbGxlci5wb3N0U2VydmVyRXJyb3JIYW5kbGVyLmNhbGwoY29udHJvbGxlciwgZXJyb3JUeXBlLCByZW1vdGVDYWxsSWQsIG9iaiwgZnVuY3Rpb25OYW1lLCBjYWxsQ29udGV4dCwgY2hhbmdlU3RyaW5nKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChlcnJvci5tZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgbG9nQm9keS5kYXRhLm1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlO1xuICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbG9nQm9keS5kYXRhLm1lc3NhZ2UgPSBKU09OLnN0cmluZ2lmeShlcnJvcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihsb2dCb2R5LCAnVXNlciBkZWZpbmVkIHBvc3RTZXJ2ZXJFcnJvckhhbmRsZXIgdGhyZXcgYW4gZXJyb3InKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBIYW5kbGUgZXJyb3JzIGJ5IHJldHVybmluZyBhbiBhcHJvcHJpYXRlIG1lc3NhZ2UuICBJbiBhbGwgY2FzZXMgY2hhbmdlcyBzZW50IGJhY2sgdGhvdWdoIHRoZXlcbiAqXG4gKiBAcGFyYW0gc2Vtb3R1c1xuICogQHBhcmFtIHJlbW90ZUNhbGxcbiAqIEBwYXJhbSBjYWxsQ29udGV4dFxuICogQHBhcmFtIHNlc3Npb25cbiAqIEBwYXJhbSB7dW5rbm93bn0gZXJyIHVua25vd25cbiAqXG4gKiBAcmV0dXJucyB7dW5rbm93bn0gQSBQcm9taXNlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHBvc3RDYWxsRmFpbHVyZShwYXlsb2FkOiBQcm9jZXNzQ2FsbFBheWxvYWQsIGVycikge1xuICAgIGNvbnN0IHtzZW1vdHVzLCByZW1vdGVDYWxsLCBjYWxsQ29udGV4dCwgc2Vzc2lvbiwgc3Vic2NyaXB0aW9uSWQsIHJlbW90ZUNhbGxJZCwgcmVzdG9yZVNlc3Npb25DYWxsYmFja30gPSBwYXlsb2FkO1xuXG4gICAgbGV0IGxvZ1N0cmluZyA9ICcnO1xuXG4gICAgbGV0IHBhY2thZ2VDaGFuZ2VzUGF5bG9hZCA9IHt9O1xuXG4gICAgbGV0IHVwZGF0ZUNvbmZsaWN0UmV0cnkgPSBmYWxzZTtcblxuICAgIGlmIChlcnIgPT09ICdTeW5jIEVycm9yJykge1xuICAgICAgICBwb3N0Q2FsbEVycm9yTG9nKHNlbW90dXMubG9nZ2VyLCAncG9zdENhbGwuc3luY0Vycm9yJywgdW5kZWZpbmVkLCAnZXJyb3InLCByZW1vdGVDYWxsLm5hbWUsIHJlbW90ZUNhbGwsIGNhbGxDb250ZXh0KTtcbiAgICAgICAgcGFja2FnZUNoYW5nZXNQYXlsb2FkID0ge1xuICAgICAgICAgICAgdHlwZTogJ3Jlc3BvbnNlJyxcbiAgICAgICAgICAgIHN5bmM6IGZhbHNlLFxuICAgICAgICAgICAgY2hhbmdlczogJydcbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGVyci5tZXNzYWdlID09ICdVcGRhdGUgQ29uZmxpY3QnKSB7XG4gICAgICAgIC8vIE5vdCB0aGlzIG1heSBiZSBjYXVnaHQgaW4gdGhlIHRyYW5zcG9ydCAoZS5nLiBBbW9ycGhpYykgYW5kIHJldHJpZWQpXG5cbiAgICAgICAgLy8gaW5jcmVtZW50IGNhbGxDb250ZXh0LnJldHJpZXMgYWZ0ZXIgY2hlY2tpbmcgaWYgPCAzLiBTaG91bGQgcmV0cnkgMyB0aW1lcy5cbiAgICAgICAgaWYgKGNhbGxDb250ZXh0LnJldHJpZXMrKyA8IDMpIHtcbiAgICAgICAgICAgIHBvc3RDYWxsRXJyb3JMb2coc2Vtb3R1cy5sb2dnZXIsICdwb3N0Q2FsbC51cGRhdGVDb25mbGljdCcsIHVuZGVmaW5lZCwgJ3dhcm4nLCByZW1vdGVDYWxsLm5hbWUsIHJlbW90ZUNhbGwsIGNhbGxDb250ZXh0KTtcbiAgICAgICAgICAgIHVwZGF0ZUNvbmZsaWN0UmV0cnkgPSB0cnVlO1xuICAgICAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBhc3NpZ25tZW50IGlzIG9ubHkgdXNlZCBmb3IgdGhlIGVycm9yIGhhbmRsZXJcbiAgICAgICAgICAgIHBhY2thZ2VDaGFuZ2VzUGF5bG9hZCA9IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAncmV0cnknXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcG9zdENhbGxFcnJvckxvZyhzZW1vdHVzLmxvZ2dlciwgJ3Bvc3RDYWxsLnVwZGF0ZUNvbmZsaWN0JywgdW5kZWZpbmVkLCAnZXJyb3InLCByZW1vdGVDYWxsLm5hbWUsIHJlbW90ZUNhbGwsIGNhbGxDb250ZXh0KTtcbiAgICAgICAgICAgIHBhY2thZ2VDaGFuZ2VzUGF5bG9hZCA9IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAncmV0cnknLFxuICAgICAgICAgICAgICAgIHN5bmM6IGZhbHNlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCEoZXJyIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgICAgICBwb3N0Q2FsbEVycm9yTG9nKHNlbW90dXMubG9nZ2VyLCAncG9zdENhbGwuZXJyb3InLCBKU09OLnN0cmluZ2lmeShlcnIpLCAnaW5mbycsIHJlbW90ZUNhbGwubmFtZSwgcmVtb3RlQ2FsbCwgY2FsbENvbnRleHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGVyci5zdGFjaykge1xuICAgICAgICAgICAgICAgIGxvZ1N0cmluZyA9ICdFeGNlcHRpb24gaW4gJyArIHJlbW90ZUNhbGwubmFtZSArICcgLSAnICsgZXJyLm1lc3NhZ2UgKyAoJyAnICsgZXJyLnN0YWNrKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbG9nU3RyaW5nID0gJ0V4Y2VwdGlvbiBpbiAnICsgcmVtb3RlQ2FsbC5uYW1lICsgJyAtICcgKyBlcnIubWVzc2FnZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcG9zdENhbGxFcnJvckxvZyhzZW1vdHVzLmxvZ2dlciwgJ3Bvc3RDYWxsLmV4Y2VwdGlvbicsIGVyci5tZXNzYWdlLCAnZXJyb3InLCBsb2dTdHJpbmcsIHJlbW90ZUNhbGwsIGNhbGxDb250ZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhY2thZ2VDaGFuZ2VzUGF5bG9hZCA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICBzeW5jOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IGdldEVycm9yKGVyciksXG4gICAgICAgICAgICBuYW1lOiByZW1vdGVDYWxsLm5hbWVcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBPYmplY3QuYXNzaWduKHBhY2thZ2VDaGFuZ2VzUGF5bG9hZCwge3JlbW90ZUNhbGxJZDogcmVtb3RlQ2FsbElkfSk7XG5cbiAgICBhd2FpdCByZXNvbHZlRXJyb3JIYW5kbGVyKFxuICAgICAgICBzZW1vdHVzLmxvZ2dlcixcbiAgICAgICAgc2Vtb3R1cy5jb250cm9sbGVyLFxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHBhY2thZ2VDaGFuZ2VzUGF5bG9hZC50eXBlLFxuICAgICAgICByZW1vdGVDYWxsLFxuICAgICAgICByZW1vdGVDYWxsSWQsXG4gICAgICAgIGNhbGxDb250ZXh0LFxuICAgICAgICBzZW1vdHVzLmNoYW5nZVN0cmluZyxcbiAgICAgICAgc2Vzc2lvblxuICAgICk7XG5cbiAgICBpZiAodXBkYXRlQ29uZmxpY3RSZXRyeSkge1xuICAgICAgICBhd2FpdCBkZWxheShjYWxsQ29udGV4dC5yZXRyaWVzICogMTAwMCk7XG4gICAgICAgIHJldHVybiByZXRyeUNhbGwocGF5bG9hZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHBhY2thZ2VDaGFuZ2VzKHNlbW90dXMsIHNlc3Npb24sIHBhY2thZ2VDaGFuZ2VzUGF5bG9hZCk7XG4gICAgfVxufVxuXG4vKipcbiAqIERlYWwgd2l0aCBjaGFuZ2VzIGdvaW5nIGJhY2sgdG8gdGhlIGNhbGxlciAtIEFjdHVhbGx5IG5vdCBBc3luYyFcbiAqXG4gKiBAcGFyYW0gc2Vtb3R1c1xuICogQHBhcmFtIHNlc3Npb25cbiAqIEBwYXJhbSB7dW5rbm93bn0gbWVzc2FnZSB1bmtub3duXG4gKi9cbmZ1bmN0aW9uIHBhY2thZ2VDaGFuZ2VzKHNlbW90dXM6IFNlbW90dXMsIHNlc3Npb246IFNlc3Npb24sIG1lc3NhZ2UpIHtcbiAgICBzZW1vdHVzLl9jb252ZXJ0QXJyYXlSZWZlcmVuY2VzVG9DaGFuZ2VzKCk7XG4gICAgbWVzc2FnZS5jaGFuZ2VzID0gSlNPTi5zdHJpbmdpZnkoc2Vtb3R1cy5nZXRDaGFuZ2VzKCkpO1xuXG4gICAgaWYgKHNlbW90dXMubWVtU2Vzc2lvbiAmJiBzZW1vdHVzLm1lbVNlc3Npb24uc2Vtb3R1cyAmJiBzZW1vdHVzLm1lbVNlc3Npb24uc2Vtb3R1cy5jYWxsU3RhcnRUaW1lKSB7XG4gICAgICAgIHNlbW90dXMubWVtU2Vzc2lvbi5zZW1vdHVzLmNhbGxTdGFydFRpbWUgPSAwO1xuICAgIH1cblxuICAgIC8vIEluc3BlY3QgYSBjb3B5IG9mIHRoZSBtZXNzYWdlIG9uIHRoZSBzZXJ2ZXIgb25seSBiZWZvcmUgc2VudCBvdXQuIE9ubHkgZm9yIGRlYnVnIHB1cnBvc2VzXG4gICAgaWYgKHNlbW90dXMuY29udHJvbGxlciAmJiBzZW1vdHVzLmNvbnRyb2xsZXIuaW5zcGVjdE1lc3NhZ2UpIHtcbiAgICAgICAgc2Vtb3R1cy5jb250cm9sbGVyLmluc3BlY3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oe30sIG1lc3NhZ2UpKTtcbiAgICB9XG5cbiAgICBzZXNzaW9uLnNlbmRNZXNzYWdlKG1lc3NhZ2UpO1xuICAgIHNlbW90dXMuX2RlbGV0ZUNoYW5nZXMoKTtcbiAgICBzZW1vdHVzLl9wcm9jZXNzUXVldWUoKTtcbn1cblxuXG4vKipcbiAqICBIZWxwZXIgZnVuY3Rpb24gdG8gbG9nIGFtb3JwaGljIGVycm9ycy5cbiAqIEBwYXJhbSB7Kn0gbG9nZ2VyXG4gKiBAcGFyYW0geyp9IGFjdGl2aXR5XG4gKiBAcGFyYW0geyp9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7Kn0gbG9nVHlwZVxuICogQHBhcmFtIHsqfSBsb2dTdHJpbmdcbiAqIEBwYXJhbSByZW1vdGVDYWxsXG4gKiBAcGFyYW0gY2FsbENvbnRleHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBvc3RDYWxsRXJyb3JMb2cobG9nZ2VyLCBhY3Rpdml0eSwgbWVzc2FnZSwgbG9nVHlwZSwgbG9nU3RyaW5nLCByZW1vdGVDYWxsOiBSZW1vdGVDYWxsLCBjYWxsQ29udGV4dDogQ2FsbENvbnRleHQpIHtcbiAgICBsZXQgbG9nQm9keSA9IHtcbiAgICAgICAgY29tcG9uZW50OiAnc2Vtb3R1cycsXG4gICAgICAgIG1vZHVsZTogJ3Byb2Nlc3NDYWxsLmZhaWx1cmUnLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBjYWxsOiByZW1vdGVDYWxsLm5hbWUsXG4gICAgICAgICAgICBjYWxsVGltZTogbG9nVGltZShjYWxsQ29udGV4dCksXG4gICAgICAgICAgICBzZXF1ZW5jZTogcmVtb3RlQ2FsbC5zZXF1ZW5jZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHVuZGVmaW5lZFxuICAgICAgICB9LFxuICAgICAgICBhY3Rpdml0eTogdW5kZWZpbmVkXG4gICAgfTtcblxuICAgIGxvZ0JvZHkuYWN0aXZpdHkgPSBhY3Rpdml0eTtcblxuICAgIGlmIChsb2dnZXIuZGF0YSkge1xuICAgICAgICBsb2dCb2R5LmRhdGEubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgfVxuXG4gICAgbG9nZ2VyW2xvZ1R5cGVdKGxvZ0JvZHksIGxvZ1N0cmluZyk7XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvY2Vzc0NhbGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaGVscGVycy9Qcm9jZXNzQ2FsbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx5Q0FBcUQ7QUFHckQsSUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDO0FBRWpDOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsU0FBc0IsV0FBVyxDQUFDLE9BQTJCLEVBQUUsV0FBcUI7Ozs7Ozs7b0JBRzlELHFCQUFNLE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUE7O29CQUFoRCxXQUFXLEdBQUcsU0FBa0MsQ0FBQztvQkFDakQscUJBQU0sV0FBVyxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsRUFBQTs7b0JBQXZDLFNBQXVDLENBQUM7b0JBQ3ZCLHFCQUFNLDJCQUEyQixDQUFDLE9BQU8sQ0FBQyxFQUFBOztvQkFBdkQsVUFBVSxHQUFHLFNBQTBDO29CQUM5QyxxQkFBTSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLEVBQUE7O29CQUF4RCxVQUFVLEdBQUcsU0FBMkMsQ0FBQztvQkFDMUMscUJBQU0sV0FBVyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsRUFBQTs7b0JBQS9DLE1BQU0sR0FBRyxTQUFzQztvQkFDckQscUJBQU0sWUFBWSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsRUFBQTs7b0JBQW5DLFNBQW1DLENBQUM7b0JBQ3BDLHFCQUFNLGVBQWUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEVBQUE7O29CQUF0QyxTQUFzQyxDQUFDOzs7O29CQUV2QyxxQkFBTSxlQUFlLENBQUMsT0FBTyxFQUFFLEtBQUcsQ0FBQyxFQUFBOztvQkFBbkMsU0FBbUMsQ0FBQzs7Ozs7O0NBRTNDO0FBYkQsa0NBYUM7QUFHRDs7OztHQUlHO0FBQ0gsU0FBZSxTQUFTLENBQUMsT0FBMkI7Ozs7WUFD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QUFFLFFBQVE7WUFDbEIsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJO1lBQ3JCLFFBQVEsRUFBRSxtQkFBTyxDQUFDLFdBQVcsQ0FBQztZQUM5QixRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVE7U0FDaEM7S0FDSixDQUFDO0lBRUYsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzdCLENBQUM7QUFsQkQsNENBa0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtkZWxheSwgZ2V0RXJyb3IsIGxvZ1RpbWV9IGZyb20gJy4vVXRpbGl0aWVzJztcbmltcG9ydCB7Q2FsbENvbnRleHQsIFByb2Nlc3NDYWxsUGF5bG9hZCwgUmVtb3RlQ2FsbCwgU2Vtb3R1cywgU2Vzc2lvbn0gZnJvbSAnLi9UeXBlcyc7XG5cbmNvbnN0IG1vZHVsZU5hbWUgPSAnUHJvY2Vzc0NhbGwnO1xuXG4vKipcbiAqIFdlIHByb2Nlc3MgdGhlIGNhbGwgdGhlIHJlbW90ZSBtZXRob2QgaW4gc3RhZ2VzIHN0YXJ0aW5nIGJ5IGxldHRpbmcgdGhlIGNvbnRyb2xsZXIgZXhhbWluZSB0aGVcbiAqIGNoYW5nZXMgKHByZUNhbGxIb29rKSBhbmQgZ2l2aW5nIGl0IGEgY2hhbmNlIHRvIHJlZnJlc2ggZGF0YSBpZiBpdCBuZWVkcyB0by4gIFRoZW4gd2UgYXBwbHkgYW55XG4gKiBjaGFuZ2VzIGluIHRoZSBtZXNzYWdlcyBhbmQgZ2l2ZSB0aGUgb2JqZWN0IG93bmluZyB0aGUgbWV0aG9kIGEgY2hhbmNlIHRvIHZhbGlkYXRlIHRoYXQgdGhlXG4gKiBjYWxsIGlzIHZhbGlkIGFuZCB0YWtlIGNhcmUgb2YgYW55IGF1dGhvcml6YXRpb24gY29uY2VybnMuICBGaW5hbGx5IHdlIGxldCB0aGUgY29udHJvbGxlciBwZXJmb3JtXG4gKiBhbnkgcG9zdC1jYWxsIHByb2Nlc3Npbmcgc3VjaCBhcyBjb21taXRpbmcgZGF0YSBhbmQgdGhlbiB3ZSBkZWFsIHdpdGggYSBmYWlsdXJlIG9yIHN1Y2Nlc3MuXG4gKlxuICogQHBhcmFtIHBheWxvYWRcbiAqIEBwYXJhbSB7dW5rbm93bn0gZm9yY2V1cGRhdGUgdW5rbm93blxuICpcbiAqIEByZXR1cm5zIHt1bmtub3dufSB1bmtub3duXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzQ2FsbChwYXlsb2FkOiBQcm9jZXNzQ2FsbFBheWxvYWQsIGZvcmNldXBkYXRlPzogYm9vbGVhbikge1xuXG4gICAgdHJ5IHtcbiAgICAgICAgZm9yY2V1cGRhdGUgPSBhd2FpdCBQcm9taXNlLnJlc29sdmUoZm9yY2V1cGRhdGUpO1xuICAgICAgICBhd2FpdCBwcmVDYWxsSG9vayhwYXlsb2FkLCBmb3JjZXVwZGF0ZSk7XG4gICAgICAgIGxldCB2YWxpZGF0aW9uID0gYXdhaXQgYXBwbHlDaGFuZ2VzQW5kVmFsaWRhdGVDYWxsKHBheWxvYWQpO1xuICAgICAgICB2YWxpZGF0aW9uID0gYXdhaXQgY3VzdG9tVmFsaWRhdGlvbihwYXlsb2FkLCB2YWxpZGF0aW9uKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2FsbElmVmFsaWQocGF5bG9hZCwgdmFsaWRhdGlvbik7XG4gICAgICAgIGF3YWl0IHBvc3RDYWxsSG9vayhwYXlsb2FkLCByZXN1bHQpO1xuICAgICAgICBhd2FpdCBwb3N0Q2FsbFN1Y2Nlc3MocGF5bG9hZCwgcmVzdWx0KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgYXdhaXQgcG9zdENhbGxGYWlsdXJlKHBheWxvYWQsIGVycik7XG4gICAgfVxufVxuXG5cbi8qKlxuICogSWYgdGhlcmUgaXMgYW4gdXBkYXRlIGNvbmZsaWN0IHdlIHdhbnQgdG8gcmV0cnkgYWZ0ZXIgcmVzdG9yaW5nIHRoZSBzZXNzaW9uXG4gKlxuICogQHJldHVybnMgeyp9IHVua25vd25cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmV0cnlDYWxsKHBheWxvYWQ6IFByb2Nlc3NDYWxsUGF5bG9hZCkge1xuICAgIGNvbnN0IHtzZW1vdHVzLCByZW1vdGVDYWxsLCBjYWxsQ29udGV4dCwgc2Vzc2lvbiwgc3Vic2NyaXB0aW9uSWQsIHJlbW90ZUNhbGxJZCwgcmVzdG9yZVNlc3Npb25DYWxsYmFja30gPSBwYXlsb2FkO1xuXG4gICAgaWYgKHJlc3RvcmVTZXNzaW9uQ2FsbGJhY2spIHtcbiAgICAgICAgcmVzdG9yZVNlc3Npb25DYWxsYmFjaygpO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9jZXNzQ2FsbChwYXlsb2FkLCB0cnVlKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgd2hhdCBvYmplY3RzIGNoYW5nZWQgYW5kIHBhc3MgdGhpcyB0byB0aGUgcHJlU2VydmVyQ2FsbCBtZXRob2Qgb24gdGhlIGNvbnRyb2xsZXJcbiAqXG4gKiBAcGFyYW0gcGF5bG9hZFxuICogQHBhcmFtICBmb3JjZXVwZGF0ZSB1bmtub3duXG4gKlxuICogQHJldHVybnMgIHVua25vd25cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcHJlQ2FsbEhvb2socGF5bG9hZDogUHJvY2Vzc0NhbGxQYXlsb2FkLCBmb3JjZXVwZGF0ZT86IGJvb2xlYW4pOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHtzZW1vdHVzLCByZW1vdGVDYWxsLCBzZXNzaW9uLCBjYWxsQ29udGV4dCwgSFRUUE9ianN9ID0gcGF5bG9hZDtcbiAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSBwcmVDYWxsSG9vay5uYW1lO1xuICAgIHNlbW90dXMubG9nZ2VyLmluZm8oXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1vZHVsZTogbW9kdWxlTmFtZSxcbiAgICAgICAgICAgIGZ1bmN0aW9uOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICBjYXRlZ29yeTogJ21pbGVzdG9uZScsXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgYWN0aXZpdHk6ICdwcmVTZXJ2ZXJDYWxsJyxcbiAgICAgICAgICAgICAgICBjYWxsOiByZW1vdGVDYWxsLm5hbWUsXG4gICAgICAgICAgICAgICAgc2VxdWVuY2U6IHJlbW90ZUNhbGwuc2VxdWVuY2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICBpZiAoc2Vtb3R1cy5jb250cm9sbGVyICYmIHNlbW90dXMuY29udHJvbGxlci5wcmVTZXJ2ZXJDYWxsKSB7XG4gICAgICAgIGxldCBjaGFuZ2VzID0ge307XG5cbiAgICAgICAgZm9yICh2YXIgb2JqSWQgaW4gSlNPTi5wYXJzZShyZW1vdGVDYWxsLmNoYW5nZXMpKSB7XG4gICAgICAgICAgICBjaGFuZ2VzW3NlbW90dXMuX19kaWN0aW9uYXJ5X19bb2JqSWQucmVwbGFjZSgvW14tXSotLywgJycpLnJlcGxhY2UoLy0uKi8sICcnKV0uX19uYW1lX19dID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZW1vdGVPYmplY3QgPSBzZXNzaW9uLm9iamVjdHNbcmVtb3RlQ2FsbC5pZF07XG5cbiAgICAgICAgLy8gTmVlZCB0byBkb3VibGUgY2hlY2sgaWYgbm90IGluIHNlc3Npb24sIHdoYXQgdGhlIHRlbXBsYXRlIGlzLlxuICAgICAgICBsZXQgcmVtb3RlVGVtcGxhdGUgPSBzZW1vdHVzLl9fZGljdGlvbmFyeV9fW3JlbW90ZUNhbGwuaWQucmVwbGFjZSgvW14tXSotLywgJycpLnJlcGxhY2UoLy0uKi8sICcnKV07XG4gICAgICAgIGxldCBpc1B1YmxpYyA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChyZW1vdGVPYmplY3QpIHtcbiAgICAgICAgICAgIGlzUHVibGljID0gc2Vtb3R1cy5yb2xlID09PSAnc2VydmVyJyAmJiByZW1vdGVPYmplY3RbcmVtb3RlQ2FsbC5uYW1lXSAmJiByZW1vdGVPYmplY3RbcmVtb3RlQ2FsbC5uYW1lXS5yZW1vdGVQdWJsaWM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocmVtb3RlVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSBjbGFzcyBkb2Vzbid0IGV4aXN0LCB3ZSBzaG91bGQgZ2V0IHRoZSByZW1vdGUgZnVuY3Rpb24gZnJvbSB0aGUgcHJvdG90eXBlXG4gICAgICAgICAgICBpc1B1YmxpYyA9IHNlbW90dXMucm9sZSA9PT0gJ3NlcnZlcicgJiYgcmVtb3RlVGVtcGxhdGUucHJvdG90eXBlW3JlbW90ZUNhbGwubmFtZV0gJiYgcmVtb3RlVGVtcGxhdGUucHJvdG90eXBlW3JlbW90ZUNhbGwubmFtZV0ucmVtb3RlUHVibGljO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2Vtb3R1cy5sb2dnZXIuZXJyb3Ioe1xuICAgICAgICAgICAgICAgIG1vZHVsZTogbW9kdWxlTmFtZSxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbjogZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgIGNhdGVnb3J5OiAnbWlsZXN0b25lJyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnQ291bGQgbm90IGZpbmQgdGVtcGxhdGUgZm9yICcgKyBvYmpJZCxcbiAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGl2aXR5OiAncHJlU2VydmVyQ2FsbCcsXG4gICAgICAgICAgICAgICAgICAgIGNhbGw6IHJlbW90ZUNhbGwubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgc2VxdWVuY2U6IHJlbW90ZUNhbGwuc2VxdWVuY2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzZW1vdHVzLmNvbnRyb2xsZXIucHJlU2VydmVyQ2FsbC5jYWxsKFxuICAgICAgICAgICAgc2Vtb3R1cy5jb250cm9sbGVyLFxuICAgICAgICAgICAgcmVtb3RlQ2FsbC5jaGFuZ2VzLmxlbmd0aCA+IDIsXG4gICAgICAgICAgICBjaGFuZ2VzLFxuICAgICAgICAgICAgY2FsbENvbnRleHQsXG4gICAgICAgICAgICBmb3JjZXVwZGF0ZSxcbiAgICAgICAgICAgIHJlbW90ZUNhbGwubmFtZSxcbiAgICAgICAgICAgIHJlbW90ZUNhbGwsXG4gICAgICAgICAgICBpc1B1YmxpYyxcbiAgICAgICAgICAgIEhUVFBPYmpzXG4gICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxufVxuXG4vKipcbiAqIEFwcGx5IGNoYW5nZXMgaW4gdGhlIG1lc3NhZ2UgYW5kIHRoZW4gdmFsaWRhdGUgdGhlIGNhbGwuICBUaHJvdyBcIlN5bmMgRXJyb3JcIiBpZiBjaGFuZ2VzIGNhbid0IGJlIGFwcGxpZWRcbiAqXG4gKiBAcmV0dXJucyB7dW5rbm93bn0gdW5rbm93blxuICovXG5mdW5jdGlvbiBhcHBseUNoYW5nZXNBbmRWYWxpZGF0ZUNhbGwocGF5bG9hZDogUHJvY2Vzc0NhbGxQYXlsb2FkKTogYm9vbGVhbiB7XG4gICAgY29uc3Qge3NlbW90dXMsIHJlbW90ZUNhbGwsIGNhbGxDb250ZXh0LCBzZXNzaW9uLCBzdWJzY3JpcHRpb25JZCwgcmVtb3RlQ2FsbElkLCByZXN0b3JlU2Vzc2lvbkNhbGxiYWNrfSA9IHBheWxvYWQ7XG4gICAgY29uc3QgZnVuY3Rpb25OYW1lID0gYXBwbHlDaGFuZ2VzQW5kVmFsaWRhdGVDYWxsLm5hbWU7XG5cbiAgICBzZW1vdHVzLmxvZ2dlci5pbmZvKFxuICAgICAgICB7XG4gICAgICAgICAgICBtb2R1bGU6IG1vZHVsZU5hbWUsXG4gICAgICAgICAgICBmdW5jdGlvbjogZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgY2F0ZWdvcnk6ICdtaWxlc3RvbmUnLFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIGFjdGl2aXR5OiAnYXBwbHlDaGFuZ2VzQW5kVmFsaWRhdGVDYWxsJyxcbiAgICAgICAgICAgICAgICBjYWxsOiByZW1vdGVDYWxsLm5hbWUsXG4gICAgICAgICAgICAgICAgc2VxdWVuY2U6IHJlbW90ZUNhbGwuc2VxdWVuY2UsXG4gICAgICAgICAgICAgICAgcmVtb3RlQ2FsbElkOiByZW1vdGVDYWxsLmlkXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgbGV0IGNoYW5nZXMgPSBKU09OLnBhcnNlKHJlbW90ZUNhbGwuY2hhbmdlcyk7XG5cbiAgICBjb25zdCByZXMgPSBzZW1vdHVzLl9hcHBseUNoYW5nZXMoY2hhbmdlcywgc2Vtb3R1cy5yb2xlID09PSAnY2xpZW50Jywgc3Vic2NyaXB0aW9uSWQsIGNhbGxDb250ZXh0KTtcbiAgICBpZiAocmVzKSB7XG4gICAgICAgIGNvbnN0IG9iaiA9IHNlc3Npb24ub2JqZWN0c1tyZW1vdGVDYWxsLmlkXTtcblxuICAgICAgICBpZiAoIW9iaikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCBvYmplY3QgZm9yIHJlbW90ZSBjYWxsICR7cmVtb3RlQ2FsbC5pZH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNoZWNrIHRvIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIHN1cHBvc2VkIHRvIGJlIGNhbGxlZCBkaXJlY3RseSBmcm9tIGNsaWVudFxuICAgICAgICBpZiAob2JqLl9fcHJvdG9fX1tyZW1vdGVDYWxsLm5hbWVdLl9fb25fXyAhPT0gJ3NlcnZlcicpIHtcbiAgICAgICAgICAgIHRocm93ICdJbnZhbGlkIEZ1bmN0aW9uIENhbGw7IG5vdCBhbiBBUEkgZnVuY3Rpb24nO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNlbW90dXMucm9sZSA9PT0gJ3NlcnZlcicgJiYgb2JqLnZhbGlkYXRlU2VydmVyQ2FsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG9iai52YWxpZGF0ZVNlcnZlckNhbGwuY2FsbChvYmosIHJlbW90ZUNhbGwubmFtZSwgY2FsbENvbnRleHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgJ1N5bmMgRXJyb3InO1xuICAgIH1cbn1cblxuLyoqXG4gKiBBcHBseSBmdW5jdGlvbiBzcGVjaWZpYyBjdXN0b20gc2VydmVyU2lkZSB2YWxpZGF0aW9uIGZ1bmN0aW9uc1xuICpcbiAqIEBwYXJhbSBzZW1vdHVzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzVmFsaWQgLSBSZXN1bHQgb2YgcHJldmlvdXMgdmFsaWRhdGlvbiBzdGVwIChhcHBseUNoYW5nZXNBbmRWYWxpZGF0ZUNhbGwpXG4gKiBAcGFyYW0gc2Vzc2lvblxuICogQHBhcmFtIHJlbW90ZUNhbGxcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHBhc3NlZCBmdW5jdGlvblxuICovXG5mdW5jdGlvbiBjdXN0b21WYWxpZGF0aW9uKHBheWxvYWQ6IFByb2Nlc3NDYWxsUGF5bG9hZCwgaXNWYWxpZDogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHtzZW1vdHVzLCByZW1vdGVDYWxsLCBjYWxsQ29udGV4dCwgc2Vzc2lvbiwgc3Vic2NyaXB0aW9uSWQsIHJlbW90ZUNhbGxJZCwgcmVzdG9yZVNlc3Npb25DYWxsYmFja30gPSBwYXlsb2FkO1xuICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IGN1c3RvbVZhbGlkYXRpb24ubmFtZTtcblxuICAgIGxldCBsb2dnZXJPYmplY3QgPSB7XG4gICAgICAgIG1vZHVsZTogbW9kdWxlTmFtZSxcbiAgICAgICAgZnVuY3Rpb246IGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgY2F0ZWdvcnk6ICdtaWxlc3RvbmUnLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBhY3Rpdml0eTogJ2N1c3RvbVZhbGlkYXRpb24nLFxuICAgICAgICAgICAgY2FsbDogcmVtb3RlQ2FsbC5uYW1lLFxuICAgICAgICAgICAgc2VxdWVuY2U6IHJlbW90ZUNhbGwuc2VxdWVuY2UsXG4gICAgICAgICAgICByZW1vdGVDYWxsSWQ6IHJlbW90ZUNhbGwuaWRcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBsZXQgcmVtb3RlT2JqZWN0ID0gc2Vzc2lvbi5vYmplY3RzW3JlbW90ZUNhbGwuaWRdO1xuXG4gICAgc2Vtb3R1cy5sb2dnZXIuaW5mbyhsb2dnZXJPYmplY3QpO1xuXG4gICAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKHNlbW90dXMucm9sZSA9PT0gJ3NlcnZlcicgJiYgcmVtb3RlT2JqZWN0W3JlbW90ZUNhbGwubmFtZV0uc2VydmVyVmFsaWRhdGlvbikge1xuICAgICAgICBsZXQgYXJncyA9IHNlbW90dXMuX2V4dHJhY3RBcmd1bWVudHMocmVtb3RlQ2FsbCk7XG4gICAgICAgIGFyZ3MudW5zaGlmdChyZW1vdGVPYmplY3QpO1xuXG4gICAgICAgIHJldHVybiByZW1vdGVPYmplY3RbcmVtb3RlQ2FsbC5uYW1lXS5zZXJ2ZXJWYWxpZGF0aW9uLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cblxuLyoqXG4gKiBJZiB0aGUgY2hhbmdlcyBjb3VsZCBiZSBhcHBsaWVkIGFuZCB0aGUgdmFsaWRhdGlvbiB3YXMgc3VjY2Vzc2Z1bCBjYWxsIHRoZSBtZXRob2RcbiAqXG4gKiBAcGFyYW0gc2Vtb3R1c1xuICogQHBhcmFtIHtib29sZWFufSBpc1ZhbGlkIC0gdGFrZXMgYSBmbGFnIGlmIHRoZSBjYWxsIGlzIHZhbGlkIG9yIG5vdCwgaWYgaXQgaXMgdGhlbiB3ZSBwcm9jZWVkIG5vcm1hbGx5LFxuICogb3RoZXJ3aXNlLCB3ZSB0aHJvdyBhbiBlcnJvciBhbmQgc3RvcCBleGVjdXRpb25cbiAqXG4gKiBAcGFyYW0gc2Vzc2lvblxuICogQHBhcmFtIHJlbW90ZUNhbGxcbiAqIEByZXR1cm5zIHt1bmtub3dufSB1bmtub3duXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNhbGxJZlZhbGlkKHBheWxvYWQ6IFByb2Nlc3NDYWxsUGF5bG9hZCwgaXNWYWxpZDogYm9vbGVhbikge1xuICAgIGNvbnN0IHtzZW1vdHVzLCByZW1vdGVDYWxsLCBjYWxsQ29udGV4dCwgc2Vzc2lvbiwgc3Vic2NyaXB0aW9uSWQsIHJlbW90ZUNhbGxJZCwgcmVzdG9yZVNlc3Npb25DYWxsYmFja30gPSBwYXlsb2FkO1xuICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IGNhbGxJZlZhbGlkLm5hbWU7XG5cbiAgICBsZXQgbG9nZ2VyT2JqZWN0ID0ge1xuICAgICAgICBtb2R1bGU6IG1vZHVsZU5hbWUsXG4gICAgICAgIGZ1bmN0aW9uOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgIGNhdGVnb3J5OiAnbWlsZXN0b25lJyxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgYWN0aXZpdHk6ICdjYWxsSWZWYWxpZCcsXG4gICAgICAgICAgICBjYWxsOiByZW1vdGVDYWxsLm5hbWUsXG4gICAgICAgICAgICBzZXF1ZW5jZTogcmVtb3RlQ2FsbC5zZXF1ZW5jZSxcbiAgICAgICAgICAgIHJlbW90ZUNhbGxJZDogcmVtb3RlQ2FsbC5pZFxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHNlbW90dXMubG9nZ2VyLmluZm8obG9nZ2VyT2JqZWN0KTtcblxuICAgIGxldCBvYmogPSBzZXNzaW9uLm9iamVjdHNbcmVtb3RlQ2FsbC5pZF07XG5cbiAgICBpZiAoIW9ialtyZW1vdGVDYWxsLm5hbWVdKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihyZW1vdGVDYWxsLm5hbWUgKyAnIGZ1bmN0aW9uIGRvZXMgbm90IGV4aXN0LicpO1xuICAgIH1cblxuICAgIGlmICghaXNWYWxpZCAmJiByZW1vdGVDYWxsICYmIHJlbW90ZUNhbGwubmFtZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocmVtb3RlQ2FsbC5uYW1lICsgJyByZWZ1c2VkJyk7XG4gICAgfVxuXG4gICAgbGV0IGFyZ3MgPSBzZW1vdHVzLl9leHRyYWN0QXJndW1lbnRzKHJlbW90ZUNhbGwpO1xuXG4gICAgcmV0dXJuIG9ialtyZW1vdGVDYWxsLm5hbWVdLmFwcGx5KG9iaiwgYXJncyk7XG59XG5cbi8qKlxuICogTGV0IHRoZSBjb250cm9sbGVyIGtub3cgdGhhdCB0aGUgbWV0aG9kIHdhcyBjb21wbGV0ZWQgYW5kIGdpdmUgaXQgYSBjaGFuY2UgdG8gY29tbWl0IGNoYW5nZXNcbiAqXG4gKiBAcGFyYW0gcGF5bG9hZFxuICogQHBhcmFtICByZXR1cm5WYWx1ZSB1bmtub3duXG4gKlxuICogQHJldHVybnNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcG9zdENhbGxIb29rKHBheWxvYWQ6IFByb2Nlc3NDYWxsUGF5bG9hZCwgcmV0dXJuVmFsdWUpIHtcbiAgICBjb25zdCB7c2Vtb3R1cywgcmVtb3RlQ2FsbCwgY2FsbENvbnRleHQsIEhUVFBPYmpzfSA9IHBheWxvYWQ7XG5cbiAgICBpZiAoc2Vtb3R1cy5jb250cm9sbGVyICYmIHNlbW90dXMuY29udHJvbGxlci5wb3N0U2VydmVyQ2FsbCkge1xuICAgICAgICBjb25zdCBoYXNDaGFuZ2VzOiBib29sZWFuID0gcmVtb3RlQ2FsbC5jaGFuZ2VzLmxlbmd0aCA+IDI7XG4gICAgICAgIGF3YWl0IHNlbW90dXMuY29udHJvbGxlci5wb3N0U2VydmVyQ2FsbC5jYWxsKHNlbW90dXMuY29udHJvbGxlciwgaGFzQ2hhbmdlcywgY2FsbENvbnRleHQsIHNlbW90dXMuY2hhbmdlU3RyaW5nLCBIVFRQT2Jqcyk7XG4gICAgfVxuICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbn1cblxuLyoqXG4gKiBQYWNrYWdlIHVwIGFueSBjaGFuZ2VzIHJlc3VsdGluZyBmcm9tIHRoZSBleGVjdXRpb24gYW5kIHNlbmQgdGhlbSBiYWNrIGluIHRoZSBtZXNzYWdlLCBjbGVhcmluZ1xuICogb3VyIGNoYW5nZSBxdWV1ZSB0byBhY2N1bXVsYXRlIG1vcmUgY2hhbmdlcyBmb3IgdGhlIG5leHQgY2FsbFxuICpcbiAqIEBwYXJhbSBzZW1vdHVzXG4gKiBAcGFyYW0gcmVtb3RlQ2FsbFxuICogQHBhcmFtIHJlbW90ZUNhbGxJZFxuICogQHBhcmFtIHt1bmtub3dufSByZXQgdW5rbm93blxuICovXG5mdW5jdGlvbiBwb3N0Q2FsbFN1Y2Nlc3MocGF5bG9hZDogUHJvY2Vzc0NhbGxQYXlsb2FkLCByZXQpOiB2b2lkIHtcbiAgICBjb25zdCB7c2Vtb3R1cywgcmVtb3RlQ2FsbCwgY2FsbENvbnRleHQsIHNlc3Npb24sIHJlbW90ZUNhbGxJZH0gPSBwYXlsb2FkO1xuICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IHBvc3RDYWxsU3VjY2Vzcy5uYW1lO1xuXG4gICAgc2Vtb3R1cy5sb2dnZXIuaW5mbyhcbiAgICAgICAge1xuICAgICAgICAgICAgbW9kdWxlOiBtb2R1bGVOYW1lLFxuICAgICAgICAgICAgZnVuY3Rpb246IGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgIGNhdGVnb3J5OiAnbWlsZXN0b25lJyxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBhY3Rpdml0eTogJ3Bvc3RDYWxsLnN1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgIGNhbGw6IHJlbW90ZUNhbGwubmFtZSxcbiAgICAgICAgICAgICAgICBjYWxsVGltZTogbG9nVGltZShjYWxsQ29udGV4dCksXG4gICAgICAgICAgICAgICAgc2VxdWVuY2U6IHJlbW90ZUNhbGwuc2VxdWVuY2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICBwYWNrYWdlQ2hhbmdlcyhzZW1vdHVzLCBzZXNzaW9uLHtcbiAgICAgICAgdHlwZTogJ3Jlc3BvbnNlJyxcbiAgICAgICAgc3luYzogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IEpTT04uc3RyaW5naWZ5KHNlbW90dXMuX3RvVHJhbnNwb3J0KHJldCkpLFxuICAgICAgICBuYW1lOiByZW1vdGVDYWxsLm5hbWUsXG4gICAgICAgIHJlbW90ZUNhbGxJZDogcmVtb3RlQ2FsbElkXG4gICAgfSk7XG59XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIGlkZW50aWZ5IGlmIHRoZXJlJ3MgYSBwb3N0U2VydmVyRXJyb3JIYW5kbGVyIGNhbGxiYWNrIG9uIHRoZSBiYXNlIGNvbnRyb2xsZXJcbiAqIElmIHRoZXJlIGlzLCB3ZSBleGVjdXRlIHRoZSBoYW5kbGVyLCBhbmQgaWYgd2UgY2F0Y2ggYW4gZXJyb3IgaW4gdGhlIGhhbmRsZXIsIHdlIHByb3BvZ2F0ZSBpdCB1cCB0byB0aGUgbG9nZ2VyLlxuICogQHBhcmFtIGxvZ2dlclxuICogQHBhcmFtIHsqfSBjb250cm9sbGVyXG4gKiBAcGFyYW0gdHlwZVxuICogQHBhcmFtIHJlbW90ZUNhbGxcbiAqIEBwYXJhbSByZW1vdGVDYWxsSWRcbiAqIEBwYXJhbSBjYWxsQ29udGV4dFxuICogQHBhcmFtIGNoYW5nZVN0cmluZ1xuICogQHBhcmFtIHNlc3Npb25cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUVycm9ySGFuZGxlcihsb2dnZXIsIGNvbnRyb2xsZXI6IGFueSwgdHlwZSwgcmVtb3RlQ2FsbDogUmVtb3RlQ2FsbCwgcmVtb3RlQ2FsbElkLCBjYWxsQ29udGV4dDogQ2FsbENvbnRleHQsIGNoYW5nZVN0cmluZywgc2Vzc2lvbjogU2Vzc2lvbikge1xuICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IHJlc29sdmVFcnJvckhhbmRsZXIubmFtZTtcbiAgICBpZiAoY29udHJvbGxlciAmJiBjb250cm9sbGVyLnBvc3RTZXJ2ZXJFcnJvckhhbmRsZXIpIHtcbiAgICAgICAgbGV0IGVycm9yVHlwZSA9IHR5cGU7XG4gICAgICAgIGxldCByZW1vdGVDYWxsTmFtZSA9IHJlbW90ZUNhbGwubmFtZTtcbiAgICAgICAgbGV0IG9iaiA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHNlc3Npb24ub2JqZWN0c1tyZW1vdGVDYWxsLmlkXSkge1xuICAgICAgICAgICAgb2JqID0gc2Vzc2lvbi5vYmplY3RzW3JlbW90ZUNhbGwuaWRdO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBjb250cm9sbGVyLnBvc3RTZXJ2ZXJFcnJvckhhbmRsZXIuY2FsbChjb250cm9sbGVyLCBlcnJvclR5cGUsIHJlbW90ZUNhbGxJZCwgb2JqLCByZW1vdGVDYWxsTmFtZSwgY2FsbENvbnRleHQsIGNoYW5nZVN0cmluZyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBsZXQgbG9nQm9keSA9IHtcbiAgICAgICAgICAgICAgICBtb2R1bGU6IG1vZHVsZU5hbWUsXG4gICAgICAgICAgICAgICAgZnVuY3Rpb246IGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICBjYXRlZ29yeTogJ21pbGVzdG9uZScsXG4gICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdVc2VyIGRlZmluZWQgcG9zdFNlcnZlckVycm9ySGFuZGxlciB0aHJldyBhbiBlcnJvcicsXG4gICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICBhY3Rpdml0eTogJ3Bvc3RDYWxsLnJlc29sdmVFcnJvckhhbmRsZXInLFxuICAgICAgICAgICAgICAgICAgICBjYWxsOiByZW1vdGVDYWxsLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UgPyBlcnJvci5tZXNzYWdlIDogSlNPTi5zdHJpbmdpZnkoZXJyb3IpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihsb2dCb2R5KTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBIYW5kbGUgZXJyb3JzIGJ5IHJldHVybmluZyBhbiBhcHJvcHJpYXRlIG1lc3NhZ2UuICBJbiBhbGwgY2FzZXMgY2hhbmdlcyBzZW50IGJhY2sgdGhvdWdoIHRoZXlcbiAqXG4gKiBAcGFyYW0gc2Vtb3R1c1xuICogQHBhcmFtIHJlbW90ZUNhbGxcbiAqIEBwYXJhbSBjYWxsQ29udGV4dFxuICogQHBhcmFtIHNlc3Npb25cbiAqIEBwYXJhbSB7dW5rbm93bn0gZXJyIHVua25vd25cbiAqXG4gKiBAcmV0dXJucyB7dW5rbm93bn0gQSBQcm9taXNlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHBvc3RDYWxsRmFpbHVyZShwYXlsb2FkOiBQcm9jZXNzQ2FsbFBheWxvYWQsIGVycikge1xuICAgIGNvbnN0IHtzZW1vdHVzLCByZW1vdGVDYWxsLCBjYWxsQ29udGV4dCwgc2Vzc2lvbiwgc3Vic2NyaXB0aW9uSWQsIHJlbW90ZUNhbGxJZCwgcmVzdG9yZVNlc3Npb25DYWxsYmFja30gPSBwYXlsb2FkO1xuXG4gICAgbGV0IGxvZ1N0cmluZyA9ICcnO1xuXG4gICAgbGV0IHBhY2thZ2VDaGFuZ2VzUGF5bG9hZCA9IHt9O1xuXG4gICAgbGV0IHVwZGF0ZUNvbmZsaWN0UmV0cnkgPSBmYWxzZTtcblxuICAgIGlmIChlcnIgPT09ICdTeW5jIEVycm9yJykge1xuICAgICAgICBwb3N0Q2FsbEVycm9yTG9nKHNlbW90dXMubG9nZ2VyLCAncG9zdENhbGwuc3luY0Vycm9yJywgdW5kZWZpbmVkLCAnZXJyb3InLCByZW1vdGVDYWxsLm5hbWUsIHJlbW90ZUNhbGwsIGNhbGxDb250ZXh0KTtcbiAgICAgICAgcGFja2FnZUNoYW5nZXNQYXlsb2FkID0ge1xuICAgICAgICAgICAgdHlwZTogJ3Jlc3BvbnNlJyxcbiAgICAgICAgICAgIHN5bmM6IGZhbHNlLFxuICAgICAgICAgICAgY2hhbmdlczogJydcbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGVyci5tZXNzYWdlID09ICdVcGRhdGUgQ29uZmxpY3QnKSB7XG4gICAgICAgIC8vIE5vdCB0aGlzIG1heSBiZSBjYXVnaHQgaW4gdGhlIHRyYW5zcG9ydCAoZS5nLiBBbW9ycGhpYykgYW5kIHJldHJpZWQpXG5cbiAgICAgICAgLy8gaW5jcmVtZW50IGNhbGxDb250ZXh0LnJldHJpZXMgYWZ0ZXIgY2hlY2tpbmcgaWYgPCAzLiBTaG91bGQgcmV0cnkgMyB0aW1lcy5cbiAgICAgICAgaWYgKGNhbGxDb250ZXh0LnJldHJpZXMrKyA8IDMpIHtcbiAgICAgICAgICAgIHBvc3RDYWxsRXJyb3JMb2coc2Vtb3R1cy5sb2dnZXIsICdwb3N0Q2FsbC51cGRhdGVDb25mbGljdCcsIHVuZGVmaW5lZCwgJ3dhcm4nLCByZW1vdGVDYWxsLm5hbWUsIHJlbW90ZUNhbGwsIGNhbGxDb250ZXh0KTtcbiAgICAgICAgICAgIHVwZGF0ZUNvbmZsaWN0UmV0cnkgPSB0cnVlO1xuICAgICAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBhc3NpZ25tZW50IGlzIG9ubHkgdXNlZCBmb3IgdGhlIGVycm9yIGhhbmRsZXJcbiAgICAgICAgICAgIHBhY2thZ2VDaGFuZ2VzUGF5bG9hZCA9IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAncmV0cnknXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcG9zdENhbGxFcnJvckxvZyhzZW1vdHVzLmxvZ2dlciwgJ3Bvc3RDYWxsLnVwZGF0ZUNvbmZsaWN0JywgdW5kZWZpbmVkLCAnZXJyb3InLCByZW1vdGVDYWxsLm5hbWUsIHJlbW90ZUNhbGwsIGNhbGxDb250ZXh0KTtcbiAgICAgICAgICAgIHBhY2thZ2VDaGFuZ2VzUGF5bG9hZCA9IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAncmV0cnknLFxuICAgICAgICAgICAgICAgIHN5bmM6IGZhbHNlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCEoZXJyIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgICAgICBwb3N0Q2FsbEVycm9yTG9nKHNlbW90dXMubG9nZ2VyLCAncG9zdENhbGwuZXJyb3InLCBKU09OLnN0cmluZ2lmeShlcnIpLCAnaW5mbycsIHJlbW90ZUNhbGwubmFtZSwgcmVtb3RlQ2FsbCwgY2FsbENvbnRleHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGVyci5zdGFjaykge1xuICAgICAgICAgICAgICAgIGxvZ1N0cmluZyA9ICdFeGNlcHRpb24gaW4gJyArIHJlbW90ZUNhbGwubmFtZSArICcgLSAnICsgZXJyLm1lc3NhZ2UgKyAoJyAnICsgZXJyLnN0YWNrKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbG9nU3RyaW5nID0gJ0V4Y2VwdGlvbiBpbiAnICsgcmVtb3RlQ2FsbC5uYW1lICsgJyAtICcgKyBlcnIubWVzc2FnZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcG9zdENhbGxFcnJvckxvZyhzZW1vdHVzLmxvZ2dlciwgJ3Bvc3RDYWxsLmV4Y2VwdGlvbicsIGVyci5tZXNzYWdlLCAnZXJyb3InLCBsb2dTdHJpbmcsIHJlbW90ZUNhbGwsIGNhbGxDb250ZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhY2thZ2VDaGFuZ2VzUGF5bG9hZCA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICBzeW5jOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IGdldEVycm9yKGVyciksXG4gICAgICAgICAgICBuYW1lOiByZW1vdGVDYWxsLm5hbWVcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBPYmplY3QuYXNzaWduKHBhY2thZ2VDaGFuZ2VzUGF5bG9hZCwge3JlbW90ZUNhbGxJZDogcmVtb3RlQ2FsbElkfSk7XG5cbiAgICBhd2FpdCByZXNvbHZlRXJyb3JIYW5kbGVyKFxuICAgICAgICBzZW1vdHVzLmxvZ2dlcixcbiAgICAgICAgc2Vtb3R1cy5jb250cm9sbGVyLFxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHBhY2thZ2VDaGFuZ2VzUGF5bG9hZC50eXBlLFxuICAgICAgICByZW1vdGVDYWxsLFxuICAgICAgICByZW1vdGVDYWxsSWQsXG4gICAgICAgIGNhbGxDb250ZXh0LFxuICAgICAgICBzZW1vdHVzLmNoYW5nZVN0cmluZyxcbiAgICAgICAgc2Vzc2lvblxuICAgICk7XG5cbiAgICBpZiAodXBkYXRlQ29uZmxpY3RSZXRyeSkge1xuICAgICAgICBhd2FpdCBkZWxheShjYWxsQ29udGV4dC5yZXRyaWVzICogMTAwMCk7XG4gICAgICAgIHJldHVybiByZXRyeUNhbGwocGF5bG9hZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHBhY2thZ2VDaGFuZ2VzKHNlbW90dXMsIHNlc3Npb24sIHBhY2thZ2VDaGFuZ2VzUGF5bG9hZCk7XG4gICAgfVxufVxuXG4vKipcbiAqIERlYWwgd2l0aCBjaGFuZ2VzIGdvaW5nIGJhY2sgdG8gdGhlIGNhbGxlciAtIEFjdHVhbGx5IG5vdCBBc3luYyFcbiAqXG4gKiBAcGFyYW0gc2Vtb3R1c1xuICogQHBhcmFtIHNlc3Npb25cbiAqIEBwYXJhbSB7dW5rbm93bn0gbWVzc2FnZSB1bmtub3duXG4gKi9cbmZ1bmN0aW9uIHBhY2thZ2VDaGFuZ2VzKHNlbW90dXM6IFNlbW90dXMsIHNlc3Npb246IFNlc3Npb24sIG1lc3NhZ2UpIHtcbiAgICBzZW1vdHVzLl9jb252ZXJ0QXJyYXlSZWZlcmVuY2VzVG9DaGFuZ2VzKCk7XG4gICAgbWVzc2FnZS5jaGFuZ2VzID0gSlNPTi5zdHJpbmdpZnkoc2Vtb3R1cy5nZXRDaGFuZ2VzKCkpO1xuXG4gICAgaWYgKHNlbW90dXMubWVtU2Vzc2lvbiAmJiBzZW1vdHVzLm1lbVNlc3Npb24uc2Vtb3R1cyAmJiBzZW1vdHVzLm1lbVNlc3Npb24uc2Vtb3R1cy5jYWxsU3RhcnRUaW1lKSB7XG4gICAgICAgIHNlbW90dXMubWVtU2Vzc2lvbi5zZW1vdHVzLmNhbGxTdGFydFRpbWUgPSAwO1xuICAgIH1cblxuICAgIC8vIEluc3BlY3QgYSBjb3B5IG9mIHRoZSBtZXNzYWdlIG9uIHRoZSBzZXJ2ZXIgb25seSBiZWZvcmUgc2VudCBvdXQuIE9ubHkgZm9yIGRlYnVnIHB1cnBvc2VzXG4gICAgaWYgKHNlbW90dXMuY29udHJvbGxlciAmJiBzZW1vdHVzLmNvbnRyb2xsZXIuaW5zcGVjdE1lc3NhZ2UpIHtcbiAgICAgICAgc2Vtb3R1cy5jb250cm9sbGVyLmluc3BlY3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oe30sIG1lc3NhZ2UpKTtcbiAgICB9XG5cbiAgICBzZXNzaW9uLnNlbmRNZXNzYWdlKG1lc3NhZ2UpO1xuICAgIHNlbW90dXMuX2RlbGV0ZUNoYW5nZXMoKTtcbiAgICBzZW1vdHVzLl9wcm9jZXNzUXVldWUoKTtcbn1cblxuXG4vKipcbiAqICBIZWxwZXIgZnVuY3Rpb24gdG8gbG9nIGFtb3JwaGljIGVycm9ycy5cbiAqIEBwYXJhbSB7Kn0gbG9nZ2VyXG4gKiBAcGFyYW0geyp9IGFjdGl2aXR5XG4gKiBAcGFyYW0geyp9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7Kn0gbG9nVHlwZVxuICogQHBhcmFtIHsqfSBsb2dTdHJpbmdcbiAqIEBwYXJhbSByZW1vdGVDYWxsXG4gKiBAcGFyYW0gY2FsbENvbnRleHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBvc3RDYWxsRXJyb3JMb2cobG9nZ2VyLCBhY3Rpdml0eSwgbWVzc2FnZSwgbG9nVHlwZSwgbG9nU3RyaW5nLCByZW1vdGVDYWxsOiBSZW1vdGVDYWxsLCBjYWxsQ29udGV4dDogQ2FsbENvbnRleHQpIHtcbiAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSBwcm9jZXNzQ2FsbC5uYW1lO1xuICAgIFxuICAgIGxldCBsb2dCb2R5ID0ge1xuICAgICAgICBtb2R1bGU6IG1vZHVsZU5hbWUsXG4gICAgICAgIGZ1bmN0aW9uOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgIGNhdGVnb3J5OiAnbWlsZXN0b25lJyxcbiAgICAgICAgbWVzc2FnZTogbG9nU3RyaW5nLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgICAgICAgYWN0aXZpdHk6IGFjdGl2aXR5LFxuICAgICAgICAgICAgY2FsbDogcmVtb3RlQ2FsbC5uYW1lLFxuICAgICAgICAgICAgY2FsbFRpbWU6IGxvZ1RpbWUoY2FsbENvbnRleHQpLFxuICAgICAgICAgICAgc2VxdWVuY2U6IHJlbW90ZUNhbGwuc2VxdWVuY2UsXG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgbG9nZ2VyW2xvZ1R5cGVdKGxvZ0JvZHkpO1xufVxuIl19

@@ -5,2 +5,2 @@ "use strict";

exports.Change = 'change';
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaGVscGVycy9UeXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFhYSxRQUFBLE1BQU0sR0FBRyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1N1cGVydHlwZX0gZnJvbSAnQGhhdmVudGVjaC9zdXBlcnR5cGUnO1xuaW1wb3J0IHtSZXF1ZXN0LCBSZXNwb25zZX0gZnJvbSAnZXhwcmVzcyc7XG5leHBvcnQgdHlwZSBIVFRQT2JqcyA9IHtyZXF1ZXN0OiBSZXF1ZXN0LCByZXNwb25zZTogUmVzcG9uc2V9O1xuXG5leHBvcnQgdHlwZSBTdWJzY3JpcHRpb24gPSB7XG4gICAgcm9sZTogc3RyaW5nO1xuICAgIGxvZzoge1xuICAgICAgICBhcnJheTogQXJyYXlHcm91cDtcbiAgICAgICAgYXJyYXlEaXJ0eTogQXJyYXlHcm91cDtcbiAgICAgICAgY2hhbmdlOiBDaGFuZ2VHcm91cDtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBDaGFuZ2UgPSAnY2hhbmdlJztcbmV4cG9ydCB0eXBlIEFycmF5VHlwZXMgPSAnYXJyYXknIHwgJ2FycmF5RGlydHknO1xuZXhwb3J0IHR5cGUgRXJyb3JUeXBlID0gJ2Vycm9yJyB8ICdyZXRyeScgfCAncmVzcG9uc2UnO1xuXG5leHBvcnQgdHlwZSBDYWxsQ29udGV4dCA9IHsgcmV0cmllczogbnVtYmVyOyBzdGFydFRpbWU6IERhdGUgfTtcblxuZXhwb3J0IHR5cGUgUHJvY2Vzc0NhbGxQYXlsb2FkID0ge1xuICAgIHNlbW90dXM6IFNlbW90dXM7XG4gICAgcmVtb3RlQ2FsbDogUmVtb3RlQ2FsbDtcbiAgICBjYWxsQ29udGV4dDogQ2FsbENvbnRleHQ7XG4gICAgc2Vzc2lvbjogU2Vzc2lvbjtcbiAgICBzdWJzY3JpcHRpb25JZDogYW55O1xuICAgIHJlbW90ZUNhbGxJZDogYW55O1xuICAgIHJlc3RvcmVTZXNzaW9uQ2FsbGJhY2s/OiBGdW5jdGlvbjtcbiAgICBIVFRQT2Jqcz86IEhUVFBPYmpzO1xufVxuXG4vKipcbiAqICBpZCBpcyB0aGUgaWQgb2YgdGhlIG9iamVjdCArICcvJyArIHByb3BlcnR5LlxuICogIEV4OiB0aGVyZSBhcmUgMSBTY2hvb2wgdG8gTWFueSBTdHVkZW50c1xuICpcbiAqICBTY2hvb2wge1xuICogICAgICBzdHVkZW50czogQXJyYXk8U3R1ZGVudHM+XG4gKiAgfVxuICpcbiAqICBJbiB0aGlzIGNhc2UsIG9uZSBlbnRyeSB3aXRoaW4gdGhpcyBBcnJheUdyb3VwIG1heSBiZSAnc2VydmVyLVNjaG9vbC0xL3N0dWRlbnRzJzogW1wic2VydmVyLVN0dWRlbnQtM1wiLCBcInNlcnZlci1TdHVkZW50LTVcIl1cbiAqXG4gKiAgSWYgdGhhdCdzIGFsbCB0aGUgY2hhbmdlcyB0aGVuIHRoZSBBcnJheUdyb3VwIHdvdWxkIGJlIHsnc2VydmVyLVNjaG9vbC0xL3N0dWRlbnRzJzogW1wic2VydmVyLVN0dWRlbnQtM1wiLCBcInNlcnZlci1TdHVkZW50LTVcIl19XG4gKi9cbmV4cG9ydCB0eXBlIEFycmF5R3JvdXAgPSB7IFtpZDogc3RyaW5nXTogQXJyYXlDaGFuZ2VzIH07XG5cbi8qKlxuICogQW4gYXJyYXkgb2YgSWQgcmVmZXJlbmNlcyB0byBTdXBlcnR5cGUgT2JqZWN0cyBvciBwcmltaXRpdmUgdmFsdWVzXG4gKi9cbnR5cGUgQXJyYXlDaGFuZ2VzID0gQXJyYXk8YW55PjtcbmV4cG9ydCB0eXBlIENoYW5nZUdyb3VwID0geyBbb2JqSWQ6IHN0cmluZ106IFByb3BDaGFuZ2VzIH07XG50eXBlIFByb3BDaGFuZ2VzID0geyBbcHJvcDogc3RyaW5nXTogQ2hhbmdlcyB9O1xuXG4vLyBDaGFuZ2VzWzBdIGlzIG9sZFZhbHVlLCBDaGFuZ2VzWzFdIGlzIG5ld1ZhbHVlXG50eXBlIG9sZFZhbCA9IGFueTtcbnR5cGUgbmV3VmFsID0gYW55O1xudHlwZSBDaGFuZ2VzID0gW29sZFZhbCwgbmV3VmFsXVtdO1xuXG5leHBvcnQgdHlwZSBTdWJzY3JpcHRpb25zID0geyBba2V5OiBzdHJpbmddOiBTdWJzY3JpcHRpb24gfTtcblxuZXhwb3J0IHR5cGUgUmVtb3RlQ2FsbCA9IHtcbiAgICByZW1vdGVDYWxsSWQ6IGFueTtcbiAgICBpZDogYW55O1xuICAgIGNoYW5nZXM6IHN0cmluZzsgLy8gVGhlIHN0cmluZyBpcyBvZiB0eXBlIENoYW5nZUdyb3VwXG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHNlcXVlbmNlOiBhbnk7XG4gICAgdHlwZTogYW55O1xuICAgIHN5bmM6IGFueTtcbiAgICB2YWx1ZTogYW55O1xufVxuXG5leHBvcnQgdHlwZSBTZXNzaW9uID0ge1xuICAgIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbnM7XG4gICAgc2VuZE1lc3NhZ2U6IFNlbmRNZXNzYWdlO1xuICAgIHNlbmRNZXNzYWdlRW5hYmxlZDogYm9vbGVhbjtcbiAgICByZW1vdGVDYWxsczogQXJyYXk8YW55PjtcbiAgICBwZW5kaW5nUmVtb3RlQ2FsbHM6IGFueTtcbiAgICBuZXh0UGVuZGluZ1JlbW90ZUNhbGxJZDogbnVtYmVyO1xuICAgIG5leHRTYXZlU2Vzc2lvbklkOiBudW1iZXI7XG4gICAgc2F2ZWRTZXNzaW9uSWQ6IG51bWJlcjtcbiAgICBuZXh0U3Vic2NyaXB0aW9uSWQ6IG51bWJlcjtcbiAgICBvYmplY3RzOiBhbnk7XG4gICAgbmV4dE9iaklkOiBudW1iZXI7XG4gICAgZGlzcGVuc2VOZXh0SWQ6IG51bGw7IC8vIG5vdCB1c2VkIGFueXdoZXJlXG59XG5cblxuZXhwb3J0IHR5cGUgU2Vzc2lvbnMgPSB7IFtzZXNzaW9uSWQ6IG51bWJlcl06IFNlc3Npb24gfTtcblxuZXhwb3J0IHR5cGUgU2VuZE1lc3NhZ2UgPSAobWVzc2FnZTogYW55KSA9PiB2b2lkO1xuXG5leHBvcnQgdHlwZSBTYXZlZFNlc3Npb24gPSB7XG4gICAgcmV2aXNpb246IG51bWJlcjtcbiAgICBkYXRhOiBzdHJpbmc7IC8vIFNlcmlhbGl6ZWQgU2Vzc2lvbiBkYXRhXG4gICAgY2FsbENvdW50OiBudW1iZXI7XG4gICAgcmVmZXJlbmNlZDogbnVtYmVyO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBSZW1vdGVhYmxlQ2xhc3MgZXh0ZW5kcyBTdXBlcnR5cGUge1xuICAgIHN5bmNTdGF0ZXM6IEFycmF5PHN0cmluZz47XG4gICAgX190b0NsaWVudF9fOiBib29sZWFuO1xuICAgIF9fdG9TZXJ2ZXJfXzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgQ2hhbmdlU3RyaW5nID0geyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbnR5cGUgUHJlU2VydmVyQ2FsbENoYW5nZXMgPSB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfTtcblxuZXhwb3J0IHR5cGUgQ29udHJvbGxlclN5bmNTdGF0ZSA9IHtcbiAgICBzY29wZTogJysnIHwgJyonIHwgJy0nXG4gICAgc3RhdGU6IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTZW1vdHVzQ29udHJvbGxlciB7XG4gICAgX190ZW1wbGF0ZV9fOiBhbnk7XG4gICAgc3luY1N0YXRlPzogQ29udHJvbGxlclN5bmNTdGF0ZVxuXG4gICAgLyoqXG4gICAgICogQHNlcnZlclxuICAgICAqXG4gICAgICogQ2FsbGJhY2sgYWZ0ZXIgYSBzdWNjZXNzZnVsIHJlbW90ZSBmdW5jdGlvbiBjYWxsIChqdXN0IHRoZSBhcHBsaWNhdGlvbiBvZiBjaGFuZ2VzIGFuZCB0aGUgZXhlY3V0aW9uIG9mIHRoZSBmdW5jdGlvbiBjYWxsKVxuICAgICAqIE5vdGUgdGhhdCB0aGlzIGRvZXNuJ3QgbWVhbiB3ZSBjYW4ndCBlcnJvciBvdXQgb24gdGhpcyBvciBzdWJzZXF1ZW50IHN0ZXBzIG9mIGEgcmVtb3RlIGNhbGwuXG4gICAgICpcbiAgICAgKiBXZSBjYW4gdXRpbGl6ZSB0aGlzIGZ1bmN0aW9uIGFzIGEgZ2VuZXJpYyBmdW5jdGlvbiBoYW5kbGVyIHRvIHJ1biBhZnRlciB3ZSBoYXZlIHN1Y2Nlc3NmdWxseSBjYWxsZWQgYSByZW1vdGUgZnVuY3Rpb24uXG4gICAgICogT25lIHN1Y2ggdXNlIG1heSBiZSB0byBzZWUgdGhlIGNoYW5nZXMgdGhhdCB3ZXJlIGFwcGxpZWQgZnJvbSB0aGUgY2xpZW50XG4gICAgICpcbiAgICAgKiBOT1RFIFRIQVQgVEhFIENIQU5HRVNUUklORyBET0VTIE5PVCBJTkNMVURFIENIQU5HRVMgRE9ORSBXSVRISU4gVEhFIFJFTU9URSBGVU5DVElPTiBDQUxMIElUU0VMRiwgT05MWSBDSEFOR0VTIEZST00gVEhFIENMSUVOVFxuICAgICAqXG4gICAgICogU2VlIHJlbW90ZSBjYWxsIGRvY3VtZW50YXRpb24gdG8ga25vdyB3aGVyZSB0aGlzIGV4ZWN1dGVzIGluIHRoZSBsaWZlY3ljbGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaGFzQ2hhbmdlcyAtIFdoZXRoZXIgb3Igbm90IHdlIGhhdmUgYXBwbGllZCBjbGllbnQgY2hhbmdlcyBvbnRvIHRoZSBzZXJ2ZXIncyBvYmplY3QgZ3JhcGhcbiAgICAgKiBAcGFyYW0ge0NhbGxDb250ZXh0fSBjYWxsQ29udGV4dCAtIENvbnRleHQgKG51bWJlciBvZiByZXRyaWVzIGV0YylcbiAgICAgKiBAcGFyYW0ge2NoYW5nZVN0cmluZ30gY2hhbmdlU3RyaW5nIC0gT2JqZWN0IG9mIENoYW5nZXMgLSBLZXkgaXMgW0NsYXNzTmFtZV0uW3Byb3BlcnR5TmFtZV0sIFZhbHVlIGlzIFtjaGFuZ2VkVmFsdWVdIGV4YW1wbGU6IHsnQ3VzdG9tZXIubWlkZGxlbmFtZSc6ICdLYXJlbid9LCBTZWUgYWJvdmUgbm90ZVxuICAgICAqIEBwYXJhbSBIVFRQT2Jqc1xuICAgICAqXG4gICAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAgICogQG1lbWJlcm9mIENvbnRyb2xsZXJcbiAgICAgKi9cbiAgICBwb3N0U2VydmVyQ2FsbD8oaGFzQ2hhbmdlczogYm9vbGVhbiwgY2FsbENvbnRleHQ6IENhbGxDb250ZXh0LCBjaGFuZ2VTdHJpbmc6IENoYW5nZVN0cmluZywgSFRUUE9ianM/OiBIVFRQT2Jqcyk6IFByb21pc2U8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEBzZXJ2ZXJcbiAgICAgKlxuICAgICAqIENhbGxiYWNrIHRvIGhhbmRsZSBlcnJvcnMgb24gYSByZW1vdGUgY2FsbC5cbiAgICAgKlxuICAgICAqIEV4ZWN1dGVzIGFmdGVyIGV2ZXJ5IG90aGVyIHN0ZXAgaW4gdGhlIHJlbW90ZSBjYWxsIHBpcGVsaW5lIChzZWUgcmVtb3RlIGNhbGwgZG9jdW1lbnRhdGlvbilcbiAgICAgKiBidXQgYmVmb3JlIHJldHJ5aW5nIHRoZSBjYWxsIChvciBwYWNrYWdpbmcgcmVzcG9uc2UgYW5kIHNlbmRpbmcgYmFjayB0byBjbGllbnQpXG4gICAgICpcbiAgICAgKiBOT1RFIFRIQVQgVEhFIENIQU5HRVNUUklORyBET0VTIE5PVCBJTkNMVURFIENIQU5HRVMgRE9ORSBXSVRISU4gVEhFIFJFTU9URSBGVU5DVElPTiBDQUxMIElUU0VMRiwgT05MWSBDSEFOR0VTIEZST00gVEhFIENMSUVOVFxuICAgICAqXG4gICAgICogQHBhcmFtIHtFcnJvclR5cGV9IGVycm9yVHlwZSAtIEVycm9yIHR5cGUgYXNzb2NpYXRlZCAoZXJyb3IsIHJldHJ5LCByZXNwb25zZSlcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmVtb3RlQ2FsbElkIC0gSWQgZm9yIHJlbW90ZSBjYWxsXG4gICAgICogQHBhcmFtIHtleHRlbmRzIFN1cGVydHlwZX0gcmVtb3RlT2JqIC0gSW5zdGFuY2UgZm9yIHdoaWNoIHRoZSByZW1vdGUgb2JqZWN0IGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3IgLSBAVE9ETzogcmV2aXNpdCB3aGVuIHdlIGNyZWF0ZSBhIHByb3BlciByZW1vdGVhYmxlIHR5cGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZnVuY3Rpb25OYW1lIC0gTmFtZSBvZiBmdW5jdGlvbiBiZWluZyBjYWxsZWRcbiAgICAgKiBAcGFyYW0ge0NhbGxDb250ZXh0fSBjYWxsQ29udGV4dCAtIENvbnRleHQgKG51bWJlciBvZiByZXRyaWVzIGV0YylcbiAgICAgKiBAcGFyYW0ge0NoYW5nZVN0cmluZ30gY2hhbmdlU3RyaW5nIC0gT2JqZWN0IG9mIENoYW5nZXMgLSBLZXkgaXMgW0NsYXNzTmFtZV0uW3Byb3BlcnR5TmFtZV0sIFZhbHVlIGlzIFtjaGFuZ2VkVmFsdWVdIGV4YW1wbGU6IHsnQ3VzdG9tZXIubWlkZGxlbmFtZSc6ICdLYXJlbid9LCBTZWUgYWJvdmUgbm90ZVxuICAgICAqXG4gICAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAgICogQG1lbWJlcm9mIENvbnRyb2xsZXJcbiAgICAgKi9cbiAgICBwb3N0U2VydmVyRXJyb3JIYW5kbGVyPyhlcnJvclR5cGU6IEVycm9yVHlwZSwgcmVtb3RlQ2FsbElkOiBudW1iZXIsIHJlbW90ZU9iajogU3VwZXJ0eXBlLCBmdW5jdGlvbk5hbWU6IHN0cmluZywgY2FsbENvbnRleHQ6IENhbGxDb250ZXh0LCBjaGFuZ2VTdHJpbmc6IENoYW5nZVN0cmluZyk6IFByb21pc2U8dm9pZD47XG5cbiAgICAvKipcbiAgICAgKiBAc2VydmVyXG4gICAgICpcbiAgICAgKiBDYWxsYmFjayBiZWZvcmUgYSByZW1vdGUgZnVuY3Rpb24gY2FsbCAoMXN0IHN0ZXAgb2YgYSByZW1vdGUgY2FsbClcbiAgICAgKlxuICAgICAqIFdlIGNhbiB1dGlsaXplIHRoaXMgZnVuY3Rpb24gYXMgYSBnZW5lcmljIGZ1bmN0aW9uIGhhbmRsZXIgdG8gcnVuIGJlZm9yZSB3ZSBjYWxsIGFcbiAgICAgKiByZW1vdGUgZnVuY3Rpb24gb3IgYmVmb3JlIHdlIGFwcGx5IGNoYW5nZXMgZnJvbSB0aGUgY2xpZW50IHRvIHRoZSBzZXJ2ZXJcbiAgICAgKlxuICAgICAqIFdlIGNhbiBhbHNvIHV0aWxpemUgdGhpcyBmdW5jdGlvbiB0byBkbyBhbnkgY29udGV4dC1zcGVjaWZpYyBwcmVwIHdvcmsgLyBsb2FkaW5nXG4gICAgICogaWYgdGhpcyBhIHN1YnNlcXVlbnQgdHJ5IG9mIHRoaXMgZnVuY3Rpb24gZHVlIHRvIGFuIHVwZGF0ZSBjb25mbGljdC5cbiAgICAgKlxuICAgICAqIFNlZSByZW1vdGUgY2FsbCBkb2N1bWVudGF0aW9uIHRvIGtub3cgd2hlcmUgdGhpcyBleGVjdXRlcyBpbiB0aGUgbGlmZWN5Y2xlXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhhc0NoYW5nZXMgLSBXaGV0aGVyIG9yIG5vdCB3ZSBoYXZlIGFwcGxpZWQgY2xpZW50IGNoYW5nZXMgb250byB0aGUgc2VydmVyJ3Mgb2JqZWN0IGdyYXBoXG4gICAgICogQHBhcmFtIHtQcmVTZXJ2ZXJDYWxsQ2hhbmdlc30gY2hhbmdlcyAtIERpY3Rpb25hcnkgb2YgT2JqZWN0cyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkIGZyb20gdGhlIGNsaWVudFxuICAgICAqIEBwYXJhbSB7Q2FsbENvbnRleHR9IGNhbGxDb250ZXh0IC0gQ29udGV4dCAobnVtYmVyIG9mIHJldHJpZXMgZXRjKVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZvcmNlVXBkYXRlXSAtIE9wdGlvbmFsIHBhcmFtZXRlciBwYXNzZWQgaW4uIFRydWUgaWYgdGhpcyBpcyBhIHJldHJ5IG9mIHRoZSBjYWxsIGJhc2VkIG9uIGFuIHVwZGF0ZSBjb25mbGljdC4gRmFsc2UgLyB1bmRlZmluZWQgb3RoZXJ3aXNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGZ1bmN0aW9uTmFtZVxuICAgICAqIEBwYXJhbSByZW1vdGVDYWxsXG4gICAgICogQHBhcmFtIGlzUHVibGljXG4gICAgICogQHBhcmFtIEhUVFBPYmpzXG4gICAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAgICogQG1lbWJlcm9mIENvbnRyb2xsZXJcbiAgICAgKi9cbiAgICBwcmVTZXJ2ZXJDYWxsPyhoYXNDaGFuZ2VzOiBib29sZWFuLCBjaGFuZ2VzOiBQcmVTZXJ2ZXJDYWxsQ2hhbmdlcywgY2FsbENvbnRleHQ6IENhbGxDb250ZXh0LCBmb3JjZVVwZGF0ZTogdW5kZWZpbmVkIHwgYm9vbGVhbiwgZnVuY3Rpb25OYW1lOiBzdHJpbmcsIHJlbW90ZUNhbGw6IFJlbW90ZUNhbGwsIGlzUHVibGljOiBib29sZWFuLCBIVFRQT2Jqcz86IEhUVFBPYmpzICk6IFByb21pc2U8YW55PjtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgYSBoYW5kbGVyIHRoYXQgd2lsbCBvbmx5IGJlIHVzZWQgZm9yIHRlc3RpbmcgYW5kIGRlYnVnZ2luZyBwdXJwb3Nlc1xuICAgICAqXG4gICAgICogV2hlbiB0aGlzIGlzIHVzZWQsIGFsbG93cyB1cyB0byBpbnNwZWN0IHRoZSBtZXNzYWdlIGJvZHkgYmVmb3JlIHdlIHNlbmQgaXQgb3V0IGluICdwYWNrYWdlQ2hhbmdlcydcbiAgICAgKlxuICAgICAqIERPIE5PVCBVU0UgVEhJUyBJTiBQUk9EVUNUSU9OIENPREVcbiAgICAgKlxuICAgICAqIEBwYXJhbSBtZXNzYWdlXG4gICAgICovXG4gICAgaW5zcGVjdE1lc3NhZ2U/KG1lc3NhZ2UpOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2Vtb3R1cyB7XG4gICAgc2V0U3luY1N0YXRlOiAoc3RyKSA9PiB2b2lkO1xuICAgIHN5bmNTdGF0ZTogc3RyaW5nO1xuICAgIGdldFN5bmNTdGF0ZTogKCkgPT4gYW55O1xuICAgIG1heENhbGxUaW1lOiBudW1iZXI7XG4gICAgX19kaWN0aW9uYXJ5X186IGFueTtcbiAgICBtZW1TZXNzaW9uOiB7IHNlbW90dXM6IHsgY2FsbFN0YXJ0VGltZTogbnVtYmVyIH0gfTtcbiAgICBfaW5qZWN0SW50b1RlbXBsYXRlOiAodGVtcGxhdGUpID0+IHZvaWQ7XG4gICAgc2VyaWFsaXplQW5kR2FyYmFnZUNvbGxlY3Q6ICgpID0+IGFueTtcbiAgICBnZXRNZXNzYWdlOiAoc2Vzc2lvbklkLCBmb3JjZU1lc3NhZ2UpID0+IGFueTtcbiAgICBjbGVhclBlbmRpbmdDYWxsczogKHNlc3Npb25JZCkgPT4gdm9pZDtcbiAgICBnZXRDaGFuZ2VHcm91cDogKHR5cGUsIHN1YnNjcmlwdGlvbklkKSA9PiBDaGFuZ2VHcm91cDtcbiAgICBkZWxldGVDaGFuZ2VHcm91cDogKHR5cGU6IGFueSwgc3Vic2NyaXB0aW9uSWQ6IGFueSkgPT4gdm9pZDtcbiAgICBnZXRDaGFuZ2VTdGF0dXM6ICgpID0+IHN0cmluZztcbiAgICBfc3Rhc2hPYmplY3Q6IChvYmosIHRlbXBsYXRlKSA9PiBib29sZWFuO1xuICAgIHNlc3Npb25pemU6IChvYmosIHJlZmVyZW5jaW5nT2JqKSA9PiAodW5kZWZpbmVkIHwgYW55KTtcbiAgICBfc2V0dXBGdW5jdGlvbjogKHByb3BlcnR5TmFtZSwgcHJvcGVydHlWYWx1ZSwgcm9sZSwgdmFsaWRhdGUsIHNlcnZlclZhbGlkYXRpb24sIGlzUHVibGljOiBib29sZWFuLCB0ZW1wbGF0ZSkgPT4gKGFueSk7XG4gICAgX3NldHVwUHJvcGVydHk6IChwcm9wZXJ0eU5hbWUsIGRlZmluZVByb3BlcnR5LCBvYmplY3RQcm9wZXJ0aWVzLCBkZWZpbmVQcm9wZXJ0aWVzKSA9PiB2b2lkO1xuICAgIHdpdGhvdXRDaGFuZ2VUcmFja2luZzogKGNiKSA9PiB2b2lkO1xuICAgIF9jaGFuZ2VkVmFsdWU6IChvYmosIHByb3AsIHZhbHVlKSA9PiB2b2lkO1xuICAgIF9yZWZlcmVuY2VkQXJyYXk6IChvYmosIHByb3AsIGFycmF5UmVmLCBzZXNzaW9uSWQ/KSA9PiB2b2lkO1xuICAgIF9jb252ZXJ0QXJyYXlSZWZlcmVuY2VzVG9DaGFuZ2VzOiAoKSA9PiB2b2lkO1xuICAgIE1hcmtDaGFuZ2VkQXJyYXlSZWZlcmVuY2VzOiAoKSA9PiB2b2lkO1xuICAgIF9jb252ZXJ0VmFsdWU6ICh2YWx1ZSkgPT4gKGFueVtdIHwgbnVsbCk7XG4gICAgZ2V0T2JqZWN0OiAob2JqSWQsIHRlbXBsYXRlKSA9PiAoYW55IHwgbnVsbCk7XG4gICAgX2FwcGx5Q2hhbmdlczogKGNoYW5nZXMsIGZvcmNlLCBzdWJzY3JpcHRpb25JZCwgY2FsbENvbnRleHQpID0+IChudW1iZXIpO1xuICAgIF9hcHBseU9iamVjdENoYW5nZXM6IChjaGFuZ2VzLCByb2xsYmFjaywgb2JqLCBmb3JjZSkgPT4gKGJvb2xlYW4pO1xuICAgIF92YWxpZGF0ZVNlcnZlckluY29taW5nUHJvcGVydHk6IChvYmosIHByb3AsIGRlZmluZVByb3BlcnR5LCBuZXdWYWx1ZSkgPT4gKGJvb2xlYW4pO1xuICAgIF9hcHBseVByb3BlcnR5Q2hhbmdlOiAoY2hhbmdlcywgcm9sbGJhY2ssIG9iaiwgcHJvcCwgaXgsIG9sZFZhbHVlLCBuZXdWYWx1ZSwgZm9yY2UpID0+IChib29sZWFuKTtcbiAgICBfcm9sbGJhY2s6IChyb2xsYmFjaykgPT4gdm9pZDtcbiAgICBfcm9sbGJhY2tDaGFuZ2VzOiAoKSA9PiB2b2lkO1xuICAgIF9jcmVhdGVFbXB0eU9iamVjdDogKHRlbXBsYXRlLCBvYmpJZCwgZGVmaW5lUHJvcGVydHksIGlzVHJhbnNpZW50KSA9PiBhbnk7XG4gICAgaW5qZWN0OiAodGVtcGxhdGUsIGluamVjdG9yKSA9PiB2b2lkO1xuICAgIF9xdWV1ZVJlbW90ZUNhbGw6IChvYmpJZCwgZnVuY3Rpb25OYW1lLCBkZWZlcnJlZCwgYXJncykgPT4gdm9pZDtcbiAgICBfcHJvY2Vzc1F1ZXVlOiAoKSA9PiB2b2lkO1xuICAgIF90b1RyYW5zcG9ydDogKG9iaikgPT4gYW55O1xuICAgIF9mcm9tVHJhbnNwb3J0OiAob2JqKSA9PiBhbnk7XG4gICAgX2V4dHJhY3RBcmd1bWVudHM6IChyZW1vdGVDYWxsKSA9PiBhbnk7XG4gICAgX3RyaW1BcnJheTogKGFycmF5KSA9PiB2b2lkO1xuICAgIF9kZWxldGVDaGFuZ2VHcm91cHM6ICh0eXBlKSA9PiB2b2lkO1xuICAgIF9nZXRTdWJzY3JpcHRpb25zOiAoc2Vzc2lvbklkPykgPT4gU3Vic2NyaXB0aW9ucyB8IG51bGw7XG4gICAgX2dldFN1YnNjcmlwdGlvbjogKHN1YnNjcmlwdGlvbklkPykgPT4gU3Vic2NyaXB0aW9uO1xuICAgIGNsZWFuUHJpdmF0ZVZhbHVlczogKHByb3AsIGxvZ1ZhbHVlLCBkZWZpbmVQcm9wZXJ0eSkgPT4gKHN0cmluZyB8IGFueSk7XG4gICAgUmVtb3RlYWJsZTogKEJhc2UpID0+ICgpID0+IGFueTtcbiAgICBCaW5kYWJsZTogKEJhc2UpID0+ICgpID0+IGFueTtcbiAgICBQZXJzaXN0YWJsZTogKEJhc2UpID0+ICgpID0+IGFueTtcbiAgICBiaW5kRGVjb3JhdG9yczogKG9iamVjdFRlbXBsYXRlPykgPT4gdm9pZDtcbiAgICBwcm9jZXNzTWVzc2FnZTogKHJlbW90ZUNhbGwsIHN1YnNjcmlwdGlvbklkLCByZXN0b3JlU2Vzc2lvbkNhbGxiYWNrLCByZXE/OiBSZXF1ZXN0LCByZXM/OiBSZXNwb25zZSkgPT4gKHVuZGVmaW5lZCB8IGFueSk7XG4gICAgZW5hYmxlU2VuZE1lc3NhZ2U6ICh2YWx1ZSwgbWVzc2FnZUNhbGxiYWNrLCBzZXNzaW9uSWQpID0+IHZvaWQ7XG4gICAgc3luY1Nlc3Npb246IChzZXNzaW9uSWQpID0+IHZvaWQ7XG4gICAgcmVzdG9yZVNlc3Npb246IChzZXNzaW9uSWQsIHNhdmVkU2Vzc2lvbjogU2F2ZWRTZXNzaW9uLCBzZW5kTWVzc2FnZTogU2VuZE1lc3NhZ2UpID0+IGJvb2xlYW47XG4gICAgc2F2ZVNlc3Npb246IChzZXNzaW9uSWQpID0+IFNhdmVkU2Vzc2lvbjtcbiAgICBzZXRNaW5pbXVtU2VxdWVuY2U6IChuZXh0T2JqSWQpID0+IHZvaWQ7XG4gICAgZGVsZXRlU2Vzc2lvbjogKHNlc3Npb25JZCkgPT4gdm9pZDtcbiAgICBjcmVhdGVTZXNzaW9uOiAocm9sZTogYW55LCBzZW5kTWVzc2FnZTogU2VuZE1lc3NhZ2UsIHNlc3Npb25JZDogYW55KSA9PiBhbnk7XG4gICAgbG9nOiAobGV2ZWwsIGRhdGEpID0+IHZvaWQ7XG4gICAgbmV4dE9iaklkOiBudW1iZXI7XG4gICAgbWF4Q2xpZW50U2VxdWVuY2U6IG51bWJlcjtcbiAgICBsb2dMZXZlbDogbnVtYmVyO1xuICAgIF9fY29uZmxpY3RNb2RlX186IHN0cmluZztcbiAgICBfX2NoYW5nZVRyYWNraW5nX186IGJvb2xlYW47XG4gICAgX3VzZUdldHRlcnNTZXR0ZXJzOiBib29sZWFuO1xuICAgIGxvZ2dlcjogYW55O1xuICAgIHJvbGU6IGFueTtcbiAgICBjdXJyZW50U2Vzc2lvbjogYW55O1xuICAgIHNlc3Npb25zPzogU2Vzc2lvbnM7XG4gICAgbmV4dFN1YnNjcmlwdGlvbklkOiBudW1iZXI7XG4gICAgbmV4dFNlc3Npb25JZDogbnVtYmVyO1xuICAgIGNvbnRyb2xsZXI6IElTZW1vdHVzQ29udHJvbGxlcjtcbiAgICBjaGFuZ2VTdHJpbmc6IHN0cmluZztcblxuXG4gICAgX2dldFNlc3Npb24oX3NpZD86IGFueSk6IFNlc3Npb247XG5cbiAgICBzdWJzY3JpYmUocm9sZTogYW55KTogbnVtYmVyO1xuXG4gICAgc2V0U2Vzc2lvbihzZXNzaW9uSWQ6IGFueSk6IHZvaWQ7XG5cbiAgICBnZXRDaGFuZ2VzKHN1YnNjcmlwdGlvbklkPzogYW55KTogQ2hhbmdlR3JvdXA7XG5cbiAgICBfZGVsZXRlQ2hhbmdlcygpOiB2b2lkO1xuXG4gICAgZ2V0UGVuZGluZ0NhbGxDb3VudChzZXNzaW9uSWQ6IGFueSk6IGFueTtcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaGVscGVycy9UeXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFhYSxRQUFBLE1BQU0sR0FBRyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1N1cGVydHlwZX0gZnJvbSAnQGhhdmVudGVjaC9zdXBlcnR5cGUnO1xuaW1wb3J0IHtSZXF1ZXN0LCBSZXNwb25zZX0gZnJvbSAnZXhwcmVzcyc7XG5leHBvcnQgdHlwZSBIVFRQT2JqcyA9IHtyZXF1ZXN0OiBSZXF1ZXN0LCByZXNwb25zZTogUmVzcG9uc2V9O1xuXG5leHBvcnQgdHlwZSBTdWJzY3JpcHRpb24gPSB7XG4gICAgcm9sZTogc3RyaW5nO1xuICAgIGxvZzoge1xuICAgICAgICBhcnJheTogQXJyYXlHcm91cDtcbiAgICAgICAgYXJyYXlEaXJ0eTogQXJyYXlHcm91cDtcbiAgICAgICAgY2hhbmdlOiBDaGFuZ2VHcm91cDtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBDaGFuZ2UgPSAnY2hhbmdlJztcbmV4cG9ydCB0eXBlIEFycmF5VHlwZXMgPSAnYXJyYXknIHwgJ2FycmF5RGlydHknO1xuZXhwb3J0IHR5cGUgRXJyb3JUeXBlID0gJ2Vycm9yJyB8ICdyZXRyeScgfCAncmVzcG9uc2UnO1xuXG5leHBvcnQgdHlwZSBDYWxsQ29udGV4dCA9IHsgcmV0cmllczogbnVtYmVyOyBzdGFydFRpbWU6IERhdGUgfTtcblxuZXhwb3J0IHR5cGUgUHJvY2Vzc0NhbGxQYXlsb2FkID0ge1xuICAgIHNlbW90dXM6IFNlbW90dXM7XG4gICAgcmVtb3RlQ2FsbDogUmVtb3RlQ2FsbDtcbiAgICBjYWxsQ29udGV4dDogQ2FsbENvbnRleHQ7XG4gICAgc2Vzc2lvbjogU2Vzc2lvbjtcbiAgICBzdWJzY3JpcHRpb25JZDogYW55O1xuICAgIHJlbW90ZUNhbGxJZDogYW55O1xuICAgIHJlc3RvcmVTZXNzaW9uQ2FsbGJhY2s/OiBGdW5jdGlvbjtcbiAgICBIVFRQT2Jqcz86IEhUVFBPYmpzO1xufVxuXG4vKipcbiAqICBpZCBpcyB0aGUgaWQgb2YgdGhlIG9iamVjdCArICcvJyArIHByb3BlcnR5LlxuICogIEV4OiB0aGVyZSBhcmUgMSBTY2hvb2wgdG8gTWFueSBTdHVkZW50c1xuICpcbiAqICBTY2hvb2wge1xuICogICAgICBzdHVkZW50czogQXJyYXk8U3R1ZGVudHM+XG4gKiAgfVxuICpcbiAqICBJbiB0aGlzIGNhc2UsIG9uZSBlbnRyeSB3aXRoaW4gdGhpcyBBcnJheUdyb3VwIG1heSBiZSAnc2VydmVyLVNjaG9vbC0xL3N0dWRlbnRzJzogW1wic2VydmVyLVN0dWRlbnQtM1wiLCBcInNlcnZlci1TdHVkZW50LTVcIl1cbiAqXG4gKiAgSWYgdGhhdCdzIGFsbCB0aGUgY2hhbmdlcyB0aGVuIHRoZSBBcnJheUdyb3VwIHdvdWxkIGJlIHsnc2VydmVyLVNjaG9vbC0xL3N0dWRlbnRzJzogW1wic2VydmVyLVN0dWRlbnQtM1wiLCBcInNlcnZlci1TdHVkZW50LTVcIl19XG4gKi9cbmV4cG9ydCB0eXBlIEFycmF5R3JvdXAgPSB7IFtpZDogc3RyaW5nXTogQXJyYXlDaGFuZ2VzIH07XG5cbi8qKlxuICogQW4gYXJyYXkgb2YgSWQgcmVmZXJlbmNlcyB0byBTdXBlcnR5cGUgT2JqZWN0cyBvciBwcmltaXRpdmUgdmFsdWVzXG4gKi9cbnR5cGUgQXJyYXlDaGFuZ2VzID0gQXJyYXk8YW55PjtcbmV4cG9ydCB0eXBlIENoYW5nZUdyb3VwID0geyBbb2JqSWQ6IHN0cmluZ106IFByb3BDaGFuZ2VzIH07XG50eXBlIFByb3BDaGFuZ2VzID0geyBbcHJvcDogc3RyaW5nXTogQ2hhbmdlcyB9O1xuXG4vLyBDaGFuZ2VzWzBdIGlzIG9sZFZhbHVlLCBDaGFuZ2VzWzFdIGlzIG5ld1ZhbHVlXG50eXBlIG9sZFZhbCA9IGFueTtcbnR5cGUgbmV3VmFsID0gYW55O1xudHlwZSBDaGFuZ2VzID0gW29sZFZhbCwgbmV3VmFsXVtdO1xuXG5leHBvcnQgdHlwZSBTdWJzY3JpcHRpb25zID0geyBba2V5OiBzdHJpbmddOiBTdWJzY3JpcHRpb24gfTtcblxuZXhwb3J0IHR5cGUgUmVtb3RlQ2FsbCA9IHtcbiAgICByZW1vdGVDYWxsSWQ6IGFueTtcbiAgICBpZDogYW55O1xuICAgIGNoYW5nZXM6IHN0cmluZzsgLy8gVGhlIHN0cmluZyBpcyBvZiB0eXBlIENoYW5nZUdyb3VwXG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHNlcXVlbmNlOiBhbnk7XG4gICAgdHlwZTogYW55O1xuICAgIHN5bmM6IGFueTtcbiAgICB2YWx1ZTogYW55O1xufVxuXG5leHBvcnQgdHlwZSBTZXNzaW9uID0ge1xuICAgIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbnM7XG4gICAgc2VuZE1lc3NhZ2U6IFNlbmRNZXNzYWdlO1xuICAgIHNlbmRNZXNzYWdlRW5hYmxlZDogYm9vbGVhbjtcbiAgICByZW1vdGVDYWxsczogQXJyYXk8YW55PjtcbiAgICBwZW5kaW5nUmVtb3RlQ2FsbHM6IGFueTtcbiAgICBuZXh0UGVuZGluZ1JlbW90ZUNhbGxJZDogbnVtYmVyO1xuICAgIG5leHRTYXZlU2Vzc2lvbklkOiBudW1iZXI7XG4gICAgc2F2ZWRTZXNzaW9uSWQ6IG51bWJlcjtcbiAgICBuZXh0U3Vic2NyaXB0aW9uSWQ6IG51bWJlcjtcbiAgICBvYmplY3RzOiBhbnk7XG4gICAgbmV4dE9iaklkOiBudW1iZXI7XG4gICAgZGlzcGVuc2VOZXh0SWQ6IG51bGw7IC8vIG5vdCB1c2VkIGFueXdoZXJlXG59XG5cblxuZXhwb3J0IHR5cGUgU2Vzc2lvbnMgPSB7IFtzZXNzaW9uSWQ6IG51bWJlcl06IFNlc3Npb24gfTtcblxuZXhwb3J0IHR5cGUgU2VuZE1lc3NhZ2UgPSAobWVzc2FnZTogYW55KSA9PiB2b2lkO1xuXG5leHBvcnQgdHlwZSBTYXZlZFNlc3Npb24gPSB7XG4gICAgcmV2aXNpb246IG51bWJlcjtcbiAgICBkYXRhOiBzdHJpbmc7IC8vIFNlcmlhbGl6ZWQgU2Vzc2lvbiBkYXRhXG4gICAgY2FsbENvdW50OiBudW1iZXI7XG4gICAgcmVmZXJlbmNlZDogbnVtYmVyO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBSZW1vdGVhYmxlQ2xhc3MgZXh0ZW5kcyBTdXBlcnR5cGUge1xuICAgIHN5bmNTdGF0ZXM6IEFycmF5PHN0cmluZz47XG4gICAgX190b0NsaWVudF9fOiBib29sZWFuO1xuICAgIF9fdG9TZXJ2ZXJfXzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgQ2hhbmdlU3RyaW5nID0geyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbnR5cGUgUHJlU2VydmVyQ2FsbENoYW5nZXMgPSB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfTtcblxuZXhwb3J0IHR5cGUgQ29udHJvbGxlclN5bmNTdGF0ZSA9IHtcbiAgICBzY29wZTogJysnIHwgJyonIHwgJy0nXG4gICAgc3RhdGU6IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTZW1vdHVzQ29udHJvbGxlciB7XG4gICAgX190ZW1wbGF0ZV9fOiBhbnk7XG4gICAgc3luY1N0YXRlPzogQ29udHJvbGxlclN5bmNTdGF0ZVxuXG4gICAgLyoqXG4gICAgICogQHNlcnZlclxuICAgICAqXG4gICAgICogQ2FsbGJhY2sgYWZ0ZXIgYSBzdWNjZXNzZnVsIHJlbW90ZSBmdW5jdGlvbiBjYWxsIChqdXN0IHRoZSBhcHBsaWNhdGlvbiBvZiBjaGFuZ2VzIGFuZCB0aGUgZXhlY3V0aW9uIG9mIHRoZSBmdW5jdGlvbiBjYWxsKVxuICAgICAqIE5vdGUgdGhhdCB0aGlzIGRvZXNuJ3QgbWVhbiB3ZSBjYW4ndCBlcnJvciBvdXQgb24gdGhpcyBvciBzdWJzZXF1ZW50IHN0ZXBzIG9mIGEgcmVtb3RlIGNhbGwuXG4gICAgICpcbiAgICAgKiBXZSBjYW4gdXRpbGl6ZSB0aGlzIGZ1bmN0aW9uIGFzIGEgZ2VuZXJpYyBmdW5jdGlvbiBoYW5kbGVyIHRvIHJ1biBhZnRlciB3ZSBoYXZlIHN1Y2Nlc3NmdWxseSBjYWxsZWQgYSByZW1vdGUgZnVuY3Rpb24uXG4gICAgICogT25lIHN1Y2ggdXNlIG1heSBiZSB0byBzZWUgdGhlIGNoYW5nZXMgdGhhdCB3ZXJlIGFwcGxpZWQgZnJvbSB0aGUgY2xpZW50XG4gICAgICpcbiAgICAgKiBOT1RFIFRIQVQgVEhFIENIQU5HRVNUUklORyBET0VTIE5PVCBJTkNMVURFIENIQU5HRVMgRE9ORSBXSVRISU4gVEhFIFJFTU9URSBGVU5DVElPTiBDQUxMIElUU0VMRiwgT05MWSBDSEFOR0VTIEZST00gVEhFIENMSUVOVFxuICAgICAqXG4gICAgICogU2VlIHJlbW90ZSBjYWxsIGRvY3VtZW50YXRpb24gdG8ga25vdyB3aGVyZSB0aGlzIGV4ZWN1dGVzIGluIHRoZSBsaWZlY3ljbGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaGFzQ2hhbmdlcyAtIFdoZXRoZXIgb3Igbm90IHdlIGhhdmUgYXBwbGllZCBjbGllbnQgY2hhbmdlcyBvbnRvIHRoZSBzZXJ2ZXIncyBvYmplY3QgZ3JhcGhcbiAgICAgKiBAcGFyYW0ge0NhbGxDb250ZXh0fSBjYWxsQ29udGV4dCAtIENvbnRleHQgKG51bWJlciBvZiByZXRyaWVzIGV0YylcbiAgICAgKiBAcGFyYW0ge2NoYW5nZVN0cmluZ30gY2hhbmdlU3RyaW5nIC0gT2JqZWN0IG9mIENoYW5nZXMgLSBLZXkgaXMgW0NsYXNzTmFtZV0uW3Byb3BlcnR5TmFtZV0sIFZhbHVlIGlzIFtjaGFuZ2VkVmFsdWVdIGV4YW1wbGU6IHsnQ3VzdG9tZXIubWlkZGxlbmFtZSc6ICdLYXJlbid9LCBTZWUgYWJvdmUgbm90ZVxuICAgICAqIEBwYXJhbSBIVFRQT2Jqc1xuICAgICAqXG4gICAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAgICogQG1lbWJlcm9mIENvbnRyb2xsZXJcbiAgICAgKi9cbiAgICBwb3N0U2VydmVyQ2FsbD8oaGFzQ2hhbmdlczogYm9vbGVhbiwgY2FsbENvbnRleHQ6IENhbGxDb250ZXh0LCBjaGFuZ2VTdHJpbmc6IENoYW5nZVN0cmluZywgSFRUUE9ianM/OiBIVFRQT2Jqcyk6IFByb21pc2U8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEBzZXJ2ZXJcbiAgICAgKlxuICAgICAqIENhbGxiYWNrIHRvIGhhbmRsZSBlcnJvcnMgb24gYSByZW1vdGUgY2FsbC5cbiAgICAgKlxuICAgICAqIEV4ZWN1dGVzIGFmdGVyIGV2ZXJ5IG90aGVyIHN0ZXAgaW4gdGhlIHJlbW90ZSBjYWxsIHBpcGVsaW5lIChzZWUgcmVtb3RlIGNhbGwgZG9jdW1lbnRhdGlvbilcbiAgICAgKiBidXQgYmVmb3JlIHJldHJ5aW5nIHRoZSBjYWxsIChvciBwYWNrYWdpbmcgcmVzcG9uc2UgYW5kIHNlbmRpbmcgYmFjayB0byBjbGllbnQpXG4gICAgICpcbiAgICAgKiBOT1RFIFRIQVQgVEhFIENIQU5HRVNUUklORyBET0VTIE5PVCBJTkNMVURFIENIQU5HRVMgRE9ORSBXSVRISU4gVEhFIFJFTU9URSBGVU5DVElPTiBDQUxMIElUU0VMRiwgT05MWSBDSEFOR0VTIEZST00gVEhFIENMSUVOVFxuICAgICAqXG4gICAgICogQHBhcmFtIHtFcnJvclR5cGV9IGVycm9yVHlwZSAtIEVycm9yIHR5cGUgYXNzb2NpYXRlZCAoZXJyb3IsIHJldHJ5LCByZXNwb25zZSlcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmVtb3RlQ2FsbElkIC0gSWQgZm9yIHJlbW90ZSBjYWxsXG4gICAgICogQHBhcmFtIHtleHRlbmRzIFN1cGVydHlwZX0gcmVtb3RlT2JqIC0gSW5zdGFuY2UgZm9yIHdoaWNoIHRoZSByZW1vdGUgb2JqZWN0IGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3IgLSBAVE9ETzogcmV2aXNpdCB3aGVuIHdlIGNyZWF0ZSBhIHByb3BlciByZW1vdGVhYmxlIHR5cGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZnVuY3Rpb25OYW1lIC0gTmFtZSBvZiBmdW5jdGlvbiBiZWluZyBjYWxsZWRcbiAgICAgKiBAcGFyYW0ge0NhbGxDb250ZXh0fSBjYWxsQ29udGV4dCAtIENvbnRleHQgKG51bWJlciBvZiByZXRyaWVzIGV0YylcbiAgICAgKiBAcGFyYW0ge0NoYW5nZVN0cmluZ30gY2hhbmdlU3RyaW5nIC0gT2JqZWN0IG9mIENoYW5nZXMgLSBLZXkgaXMgW0NsYXNzTmFtZV0uW3Byb3BlcnR5TmFtZV0sIFZhbHVlIGlzIFtjaGFuZ2VkVmFsdWVdIGV4YW1wbGU6IHsnQ3VzdG9tZXIubWlkZGxlbmFtZSc6ICdLYXJlbid9LCBTZWUgYWJvdmUgbm90ZVxuICAgICAqXG4gICAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAgICogQG1lbWJlcm9mIENvbnRyb2xsZXJcbiAgICAgKi9cbiAgICBwb3N0U2VydmVyRXJyb3JIYW5kbGVyPyhlcnJvclR5cGU6IEVycm9yVHlwZSwgcmVtb3RlQ2FsbElkOiBudW1iZXIsIHJlbW90ZU9iajogU3VwZXJ0eXBlLCBmdW5jdGlvbk5hbWU6IHN0cmluZywgY2FsbENvbnRleHQ6IENhbGxDb250ZXh0LCBjaGFuZ2VTdHJpbmc6IENoYW5nZVN0cmluZyk6IFByb21pc2U8dm9pZD47XG5cbiAgICAvKipcbiAgICAgKiBAc2VydmVyXG4gICAgICpcbiAgICAgKiBDYWxsYmFjayBiZWZvcmUgYSByZW1vdGUgZnVuY3Rpb24gY2FsbCAoMXN0IHN0ZXAgb2YgYSByZW1vdGUgY2FsbClcbiAgICAgKlxuICAgICAqIFdlIGNhbiB1dGlsaXplIHRoaXMgZnVuY3Rpb24gYXMgYSBnZW5lcmljIGZ1bmN0aW9uIGhhbmRsZXIgdG8gcnVuIGJlZm9yZSB3ZSBjYWxsIGFcbiAgICAgKiByZW1vdGUgZnVuY3Rpb24gb3IgYmVmb3JlIHdlIGFwcGx5IGNoYW5nZXMgZnJvbSB0aGUgY2xpZW50IHRvIHRoZSBzZXJ2ZXJcbiAgICAgKlxuICAgICAqIFdlIGNhbiBhbHNvIHV0aWxpemUgdGhpcyBmdW5jdGlvbiB0byBkbyBhbnkgY29udGV4dC1zcGVjaWZpYyBwcmVwIHdvcmsgLyBsb2FkaW5nXG4gICAgICogaWYgdGhpcyBhIHN1YnNlcXVlbnQgdHJ5IG9mIHRoaXMgZnVuY3Rpb24gZHVlIHRvIGFuIHVwZGF0ZSBjb25mbGljdC5cbiAgICAgKlxuICAgICAqIFNlZSByZW1vdGUgY2FsbCBkb2N1bWVudGF0aW9uIHRvIGtub3cgd2hlcmUgdGhpcyBleGVjdXRlcyBpbiB0aGUgbGlmZWN5Y2xlXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhhc0NoYW5nZXMgLSBXaGV0aGVyIG9yIG5vdCB3ZSBoYXZlIGFwcGxpZWQgY2xpZW50IGNoYW5nZXMgb250byB0aGUgc2VydmVyJ3Mgb2JqZWN0IGdyYXBoXG4gICAgICogQHBhcmFtIHtQcmVTZXJ2ZXJDYWxsQ2hhbmdlc30gY2hhbmdlcyAtIERpY3Rpb25hcnkgb2YgT2JqZWN0cyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkIGZyb20gdGhlIGNsaWVudFxuICAgICAqIEBwYXJhbSB7Q2FsbENvbnRleHR9IGNhbGxDb250ZXh0IC0gQ29udGV4dCAobnVtYmVyIG9mIHJldHJpZXMgZXRjKVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZvcmNlVXBkYXRlXSAtIE9wdGlvbmFsIHBhcmFtZXRlciBwYXNzZWQgaW4uIFRydWUgaWYgdGhpcyBpcyBhIHJldHJ5IG9mIHRoZSBjYWxsIGJhc2VkIG9uIGFuIHVwZGF0ZSBjb25mbGljdC4gRmFsc2UgLyB1bmRlZmluZWQgb3RoZXJ3aXNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGZ1bmN0aW9uTmFtZVxuICAgICAqIEBwYXJhbSByZW1vdGVDYWxsXG4gICAgICogQHBhcmFtIGlzUHVibGljXG4gICAgICogQHBhcmFtIEhUVFBPYmpzXG4gICAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAgICogQG1lbWJlcm9mIENvbnRyb2xsZXJcbiAgICAgKi9cbiAgICBwcmVTZXJ2ZXJDYWxsPyhoYXNDaGFuZ2VzOiBib29sZWFuLCBjaGFuZ2VzOiBQcmVTZXJ2ZXJDYWxsQ2hhbmdlcywgY2FsbENvbnRleHQ6IENhbGxDb250ZXh0LCBmb3JjZVVwZGF0ZTogdW5kZWZpbmVkIHwgYm9vbGVhbiwgZnVuY3Rpb25OYW1lOiBzdHJpbmcsIHJlbW90ZUNhbGw6IFJlbW90ZUNhbGwsIGlzUHVibGljOiBib29sZWFuLCBIVFRQT2Jqcz86IEhUVFBPYmpzICk6IFByb21pc2U8YW55PjtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgYSBoYW5kbGVyIHRoYXQgd2lsbCBvbmx5IGJlIHVzZWQgZm9yIHRlc3RpbmcgYW5kIGRlYnVnZ2luZyBwdXJwb3Nlc1xuICAgICAqXG4gICAgICogV2hlbiB0aGlzIGlzIHVzZWQsIGFsbG93cyB1cyB0byBpbnNwZWN0IHRoZSBtZXNzYWdlIGJvZHkgYmVmb3JlIHdlIHNlbmQgaXQgb3V0IGluICdwYWNrYWdlQ2hhbmdlcydcbiAgICAgKlxuICAgICAqIERPIE5PVCBVU0UgVEhJUyBJTiBQUk9EVUNUSU9OIENPREVcbiAgICAgKlxuICAgICAqIEBwYXJhbSBtZXNzYWdlXG4gICAgICovXG4gICAgaW5zcGVjdE1lc3NhZ2U/KG1lc3NhZ2UpOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2Vtb3R1cyB7XG4gICAgc2V0U3luY1N0YXRlOiAoc3RyKSA9PiB2b2lkO1xuICAgIHN5bmNTdGF0ZTogc3RyaW5nO1xuICAgIGdldFN5bmNTdGF0ZTogKCkgPT4gYW55O1xuICAgIG1heENhbGxUaW1lOiBudW1iZXI7XG4gICAgX19kaWN0aW9uYXJ5X186IGFueTtcbiAgICBtZW1TZXNzaW9uOiB7IHNlbW90dXM6IHsgY2FsbFN0YXJ0VGltZTogbnVtYmVyIH0gfTtcbiAgICBfaW5qZWN0SW50b1RlbXBsYXRlOiAodGVtcGxhdGUpID0+IHZvaWQ7XG4gICAgc2VyaWFsaXplQW5kR2FyYmFnZUNvbGxlY3Q6ICgpID0+IGFueTtcbiAgICBnZXRNZXNzYWdlOiAoc2Vzc2lvbklkLCBmb3JjZU1lc3NhZ2UpID0+IGFueTtcbiAgICBjbGVhclBlbmRpbmdDYWxsczogKHNlc3Npb25JZCkgPT4gdm9pZDtcbiAgICBnZXRDaGFuZ2VHcm91cDogKHR5cGUsIHN1YnNjcmlwdGlvbklkKSA9PiBDaGFuZ2VHcm91cDtcbiAgICBkZWxldGVDaGFuZ2VHcm91cDogKHR5cGU6IGFueSwgc3Vic2NyaXB0aW9uSWQ6IGFueSkgPT4gdm9pZDtcbiAgICBnZXRDaGFuZ2VTdGF0dXM6ICgpID0+IHN0cmluZztcbiAgICBfc3Rhc2hPYmplY3Q6IChvYmosIHRlbXBsYXRlKSA9PiBib29sZWFuO1xuICAgIHNlc3Npb25pemU6IChvYmosIHJlZmVyZW5jaW5nT2JqKSA9PiAodW5kZWZpbmVkIHwgYW55KTtcbiAgICBfc2V0dXBGdW5jdGlvbjogKHByb3BlcnR5TmFtZSwgcHJvcGVydHlWYWx1ZSwgcm9sZSwgdmFsaWRhdGUsIHNlcnZlclZhbGlkYXRpb24sIGlzUHVibGljOiBib29sZWFuLCB0ZW1wbGF0ZSkgPT4gKGFueSk7XG4gICAgX3NldHVwUHJvcGVydHk6IChwcm9wZXJ0eU5hbWUsIGRlZmluZVByb3BlcnR5LCBvYmplY3RQcm9wZXJ0aWVzLCBkZWZpbmVQcm9wZXJ0aWVzKSA9PiB2b2lkO1xuICAgIHdpdGhvdXRDaGFuZ2VUcmFja2luZzogKGNiKSA9PiB2b2lkO1xuICAgIF9jaGFuZ2VkVmFsdWU6IChvYmosIHByb3AsIHZhbHVlKSA9PiB2b2lkO1xuICAgIF9yZWZlcmVuY2VkQXJyYXk6IChvYmosIHByb3AsIGFycmF5UmVmLCBzZXNzaW9uSWQ/KSA9PiB2b2lkO1xuICAgIF9jb252ZXJ0QXJyYXlSZWZlcmVuY2VzVG9DaGFuZ2VzOiAoKSA9PiB2b2lkO1xuICAgIE1hcmtDaGFuZ2VkQXJyYXlSZWZlcmVuY2VzOiAoKSA9PiB2b2lkO1xuICAgIF9jb252ZXJ0VmFsdWU6ICh2YWx1ZSkgPT4gKGFueVtdIHwgbnVsbCk7XG4gICAgZ2V0T2JqZWN0OiAob2JqSWQsIHRlbXBsYXRlKSA9PiAoYW55IHwgbnVsbCk7XG4gICAgX2FwcGx5Q2hhbmdlczogKGNoYW5nZXMsIGZvcmNlLCBzdWJzY3JpcHRpb25JZCwgY2FsbENvbnRleHQpID0+IChudW1iZXIpO1xuICAgIF9hcHBseU9iamVjdENoYW5nZXM6IChjaGFuZ2VzLCByb2xsYmFjaywgb2JqLCBmb3JjZSkgPT4gKGJvb2xlYW4pO1xuICAgIF92YWxpZGF0ZVNlcnZlckluY29taW5nUHJvcGVydHk6IChvYmosIHByb3AsIGRlZmluZVByb3BlcnR5LCBuZXdWYWx1ZSkgPT4gKGJvb2xlYW4pO1xuICAgIF9hcHBseVByb3BlcnR5Q2hhbmdlOiAoY2hhbmdlcywgcm9sbGJhY2ssIG9iaiwgcHJvcCwgaXgsIG9sZFZhbHVlLCBuZXdWYWx1ZSwgZm9yY2UpID0+IChib29sZWFuKTtcbiAgICBfcm9sbGJhY2s6IChyb2xsYmFjaykgPT4gdm9pZDtcbiAgICBfcm9sbGJhY2tDaGFuZ2VzOiAoKSA9PiB2b2lkO1xuICAgIF9jcmVhdGVFbXB0eU9iamVjdDogKHRlbXBsYXRlLCBvYmpJZCwgZGVmaW5lUHJvcGVydHksIGlzVHJhbnNpZW50KSA9PiBhbnk7XG4gICAgaW5qZWN0OiAodGVtcGxhdGUsIGluamVjdG9yKSA9PiB2b2lkO1xuICAgIF9xdWV1ZVJlbW90ZUNhbGw6IChvYmpJZCwgZnVuY3Rpb25OYW1lLCBkZWZlcnJlZCwgYXJncykgPT4gdm9pZDtcbiAgICBfcHJvY2Vzc1F1ZXVlOiAoKSA9PiB2b2lkO1xuICAgIF90b1RyYW5zcG9ydDogKG9iaikgPT4gYW55O1xuICAgIF9mcm9tVHJhbnNwb3J0OiAob2JqKSA9PiBhbnk7XG4gICAgX2V4dHJhY3RBcmd1bWVudHM6IChyZW1vdGVDYWxsKSA9PiBhbnk7XG4gICAgX3RyaW1BcnJheTogKGFycmF5KSA9PiB2b2lkO1xuICAgIF9kZWxldGVDaGFuZ2VHcm91cHM6ICh0eXBlKSA9PiB2b2lkO1xuICAgIF9nZXRTdWJzY3JpcHRpb25zOiAoc2Vzc2lvbklkPykgPT4gU3Vic2NyaXB0aW9ucyB8IG51bGw7XG4gICAgX2dldFN1YnNjcmlwdGlvbjogKHN1YnNjcmlwdGlvbklkPykgPT4gU3Vic2NyaXB0aW9uO1xuICAgIGNsZWFuUHJpdmF0ZVZhbHVlczogKHByb3AsIGxvZ1ZhbHVlLCBkZWZpbmVQcm9wZXJ0eSkgPT4gKHN0cmluZyB8IGFueSk7XG4gICAgUmVtb3RlYWJsZTogKEJhc2UpID0+ICgpID0+IGFueTtcbiAgICBCaW5kYWJsZTogKEJhc2UpID0+ICgpID0+IGFueTtcbiAgICBQZXJzaXN0YWJsZTogKEJhc2UpID0+ICgpID0+IGFueTtcbiAgICBiaW5kRGVjb3JhdG9yczogKG9iamVjdFRlbXBsYXRlPykgPT4gdm9pZDtcbiAgICBwcm9jZXNzTWVzc2FnZTogKHJlbW90ZUNhbGwsIHN1YnNjcmlwdGlvbklkLCByZXN0b3JlU2Vzc2lvbkNhbGxiYWNrLCByZXE/OiBSZXF1ZXN0LCByZXM/OiBSZXNwb25zZSkgPT4gKHVuZGVmaW5lZCB8IGFueSk7XG4gICAgZW5hYmxlU2VuZE1lc3NhZ2U6ICh2YWx1ZSwgbWVzc2FnZUNhbGxiYWNrLCBzZXNzaW9uSWQpID0+IHZvaWQ7XG4gICAgc3luY1Nlc3Npb246IChzZXNzaW9uSWQpID0+IHZvaWQ7XG4gICAgcmVzdG9yZVNlc3Npb246IChzZXNzaW9uSWQsIHNhdmVkU2Vzc2lvbjogU2F2ZWRTZXNzaW9uLCBzZW5kTWVzc2FnZTogU2VuZE1lc3NhZ2UpID0+IGJvb2xlYW47XG4gICAgc2F2ZVNlc3Npb246IChzZXNzaW9uSWQpID0+IFNhdmVkU2Vzc2lvbjtcbiAgICBzZXRNaW5pbXVtU2VxdWVuY2U6IChuZXh0T2JqSWQpID0+IHZvaWQ7XG4gICAgZGVsZXRlU2Vzc2lvbjogKHNlc3Npb25JZCkgPT4gdm9pZDtcbiAgICBjcmVhdGVTZXNzaW9uOiAocm9sZTogYW55LCBzZW5kTWVzc2FnZTogU2VuZE1lc3NhZ2UsIHNlc3Npb25JZDogYW55KSA9PiBhbnk7XG4gICAgbG9nOiAobGV2ZWwsIGRhdGEpID0+IHZvaWQ7XG4gICAgbmV4dE9iaklkOiBudW1iZXI7XG4gICAgbWF4Q2xpZW50U2VxdWVuY2U6IG51bWJlcjtcbiAgICBsb2dMZXZlbDogbnVtYmVyO1xuICAgIF9fY29uZmxpY3RNb2RlX186IHN0cmluZztcbiAgICBfX2NoYW5nZVRyYWNraW5nX186IGJvb2xlYW47XG4gICAgX3VzZUdldHRlcnNTZXR0ZXJzOiBib29sZWFuO1xuICAgIGxvZ2dlcjogYW55O1xuICAgIHJvbGU6IGFueTtcbiAgICBjdXJyZW50U2Vzc2lvbjogYW55O1xuICAgIHNlc3Npb25zPzogU2Vzc2lvbnM7XG4gICAgbmV4dFN1YnNjcmlwdGlvbklkOiBudW1iZXI7XG4gICAgbmV4dFNlc3Npb25JZDogbnVtYmVyO1xuICAgIGNvbnRyb2xsZXI6IElTZW1vdHVzQ29udHJvbGxlcjtcbiAgICBjaGFuZ2VTdHJpbmc6IHN0cmluZztcbiAgICBtb2R1bGVOYW1lOiBzdHJpbmc7XG5cblxuICAgIF9nZXRTZXNzaW9uKF9zaWQ/OiBhbnkpOiBTZXNzaW9uO1xuXG4gICAgc3Vic2NyaWJlKHJvbGU6IGFueSk6IG51bWJlcjtcblxuICAgIHNldFNlc3Npb24oc2Vzc2lvbklkOiBhbnkpOiB2b2lkO1xuXG4gICAgZ2V0Q2hhbmdlcyhzdWJzY3JpcHRpb25JZD86IGFueSk6IENoYW5nZUdyb3VwO1xuXG4gICAgX2RlbGV0ZUNoYW5nZXMoKTogdm9pZDtcblxuICAgIGdldFBlbmRpbmdDYWxsQ291bnQoc2Vzc2lvbklkOiBhbnkpOiBhbnk7XG59XG4iXX0=

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

## 6.1.0
* update supertype to use new logging
## 6.0.1

@@ -2,0 +4,0 @@ * bump nconf version due to security vulnerability.

{
"name": "@haventech/semotus",
"version": "6.0.1",
"version": "6.1.0-beta.0",
"description": "A subclass of supertype that synchronizes sets of objects.",

@@ -40,3 +40,3 @@ "homepage": "https://github.com/haven-life/amorphic-framework",

"devDependencies": {
"@haventech/supertype": "5.x",
"@haventech/supertype": "5.1.0-beta.1",
"@types/chai": "4.3.0",

@@ -43,0 +43,0 @@ "@types/express": "4.17.13",

import {delay, getError, logTime} from './Utilities';
import {CallContext, ProcessCallPayload, RemoteCall, Semotus, Session} from './Types';
const moduleName = 'ProcessCall';
/**

@@ -57,13 +59,14 @@ * We process the call the remote method in stages starting by letting the controller examine the

const {semotus, remoteCall, session, callContext, HTTPObjs} = payload;
const functionName = preCallHook.name;
semotus.logger.info(
{
component: 'semotus',
module: 'processCall',
activity: 'preServerCall',
module: moduleName,
function: functionName,
category: 'milestone',
data: {
activity: 'preServerCall',
call: remoteCall.name,
sequence: remoteCall.sequence
}
},
remoteCall.name
}
);

@@ -93,10 +96,12 @@

semotus.logger.error({
component: 'semotus',
module: 'processCall',
activity: 'preServerCall',
module: moduleName,
function: functionName,
category: 'milestone',
message: 'Could not find template for ' + objId,
data: {
activity: 'preServerCall',
call: remoteCall.name,
sequence: remoteCall.sequence
}
}, 'Could not find template for ' + objId);
});
}

@@ -127,9 +132,11 @@

const {semotus, remoteCall, callContext, session, subscriptionId, remoteCallId, restoreSessionCallback} = payload;
const functionName = applyChangesAndValidateCall.name;
semotus.logger.info(
{
component: 'semotus',
module: 'processCall',
activity: 'applyChangesAndValidateCall',
module: moduleName,
function: functionName,
category: 'milestone',
data: {
activity: 'applyChangesAndValidateCall',
call: remoteCall.name,

@@ -139,4 +146,3 @@ sequence: remoteCall.sequence,

}
},
remoteCall.name
}
);

@@ -180,8 +186,10 @@

const {semotus, remoteCall, callContext, session, subscriptionId, remoteCallId, restoreSessionCallback} = payload;
const functionName = customValidation.name;
let loggerObject = {
component: 'semotus',
module: 'processCall',
activity: 'customValidation',
module: moduleName,
function: functionName,
category: 'milestone',
data: {
activity: 'customValidation',
call: remoteCall.name,

@@ -195,3 +203,3 @@ sequence: remoteCall.sequence,

semotus.logger.info(loggerObject, remoteCall.name);
semotus.logger.info(loggerObject);

@@ -223,8 +231,10 @@ if (!isValid) {

const {semotus, remoteCall, callContext, session, subscriptionId, remoteCallId, restoreSessionCallback} = payload;
const functionName = callIfValid.name;
let loggerObject = {
component: 'semotus',
module: 'processCall',
activity: 'callIfValid',
module: moduleName,
function: functionName,
category: 'milestone',
data: {
activity: 'callIfValid',
call: remoteCall.name,

@@ -236,3 +246,3 @@ sequence: remoteCall.sequence,

semotus.logger.info(loggerObject, remoteCall.name);
semotus.logger.info(loggerObject);

@@ -283,9 +293,11 @@ let obj = session.objects[remoteCall.id];

const {semotus, remoteCall, callContext, session, remoteCallId} = payload;
const functionName = postCallSuccess.name;
semotus.logger.info(
{
component: 'semotus',
module: 'processCall',
activity: 'postCall.success',
module: moduleName,
function: functionName,
category: 'milestone',
data: {
activity: 'postCall.success',
call: remoteCall.name,

@@ -295,4 +307,3 @@ callTime: logTime(callContext),

}
},
remoteCall.name
}
);

@@ -322,6 +333,6 @@

async function resolveErrorHandler(logger, controller: any, type, remoteCall: RemoteCall, remoteCallId, callContext: CallContext, changeString, session: Session) {
const functionName = resolveErrorHandler.name;
if (controller && controller.postServerErrorHandler) {
let errorType = type;
let functionName = remoteCall.name;
let remoteCallName = remoteCall.name;
let obj = undefined;

@@ -331,23 +342,18 @@ if (session.objects[remoteCall.id]) {

}
let logBody = {
component: 'semotus',
module: 'processCall.failure',
activity: 'postCall.resolveErrorHandler',
data: {
call: remoteCall.name,
message: undefined
}
};
try {
await controller.postServerErrorHandler.call(controller, errorType, remoteCallId, obj, functionName, callContext, changeString);
await controller.postServerErrorHandler.call(controller, errorType, remoteCallId, obj, remoteCallName, callContext, changeString);
} catch (error) {
if (error.message) {
logBody.data.message = error.message;
logger.error(error.message);
} else {
logBody.data.message = JSON.stringify(error);
}
logger.error(logBody, 'User defined postServerErrorHandler threw an error');
let logBody = {
module: moduleName,
function: functionName,
category: 'milestone',
error: error,
message: 'User defined postServerErrorHandler threw an error',
data: {
activity: 'postCall.resolveErrorHandler',
call: remoteCall.name,
message: error.message ? error.message : JSON.stringify(error)
}
};
logger.error(logBody);
}

@@ -482,21 +488,19 @@ }

export function postCallErrorLog(logger, activity, message, logType, logString, remoteCall: RemoteCall, callContext: CallContext) {
const functionName = processCall.name;
let logBody = {
component: 'semotus',
module: 'processCall.failure',
module: moduleName,
function: functionName,
category: 'milestone',
message: logString,
data: {
message: message,
activity: activity,
call: remoteCall.name,
callTime: logTime(callContext),
sequence: remoteCall.sequence,
message: undefined
},
activity: undefined
}
};
logBody.activity = activity;
if (logger.data) {
logBody.data.message = message;
}
logger[logType](logBody, logString);
logger[logType](logBody);
}

@@ -5,2 +5,2 @@ "use strict";

exports.Change = 'change';
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJUeXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFhYSxRQUFBLE1BQU0sR0FBRyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1N1cGVydHlwZX0gZnJvbSAnQGhhdmVudGVjaC9zdXBlcnR5cGUnO1xuaW1wb3J0IHtSZXF1ZXN0LCBSZXNwb25zZX0gZnJvbSAnZXhwcmVzcyc7XG5leHBvcnQgdHlwZSBIVFRQT2JqcyA9IHtyZXF1ZXN0OiBSZXF1ZXN0LCByZXNwb25zZTogUmVzcG9uc2V9O1xuXG5leHBvcnQgdHlwZSBTdWJzY3JpcHRpb24gPSB7XG4gICAgcm9sZTogc3RyaW5nO1xuICAgIGxvZzoge1xuICAgICAgICBhcnJheTogQXJyYXlHcm91cDtcbiAgICAgICAgYXJyYXlEaXJ0eTogQXJyYXlHcm91cDtcbiAgICAgICAgY2hhbmdlOiBDaGFuZ2VHcm91cDtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBDaGFuZ2UgPSAnY2hhbmdlJztcbmV4cG9ydCB0eXBlIEFycmF5VHlwZXMgPSAnYXJyYXknIHwgJ2FycmF5RGlydHknO1xuZXhwb3J0IHR5cGUgRXJyb3JUeXBlID0gJ2Vycm9yJyB8ICdyZXRyeScgfCAncmVzcG9uc2UnO1xuXG5leHBvcnQgdHlwZSBDYWxsQ29udGV4dCA9IHsgcmV0cmllczogbnVtYmVyOyBzdGFydFRpbWU6IERhdGUgfTtcblxuZXhwb3J0IHR5cGUgUHJvY2Vzc0NhbGxQYXlsb2FkID0ge1xuICAgIHNlbW90dXM6IFNlbW90dXM7XG4gICAgcmVtb3RlQ2FsbDogUmVtb3RlQ2FsbDtcbiAgICBjYWxsQ29udGV4dDogQ2FsbENvbnRleHQ7XG4gICAgc2Vzc2lvbjogU2Vzc2lvbjtcbiAgICBzdWJzY3JpcHRpb25JZDogYW55O1xuICAgIHJlbW90ZUNhbGxJZDogYW55O1xuICAgIHJlc3RvcmVTZXNzaW9uQ2FsbGJhY2s/OiBGdW5jdGlvbjtcbiAgICBIVFRQT2Jqcz86IEhUVFBPYmpzO1xufVxuXG4vKipcbiAqICBpZCBpcyB0aGUgaWQgb2YgdGhlIG9iamVjdCArICcvJyArIHByb3BlcnR5LlxuICogIEV4OiB0aGVyZSBhcmUgMSBTY2hvb2wgdG8gTWFueSBTdHVkZW50c1xuICpcbiAqICBTY2hvb2wge1xuICogICAgICBzdHVkZW50czogQXJyYXk8U3R1ZGVudHM+XG4gKiAgfVxuICpcbiAqICBJbiB0aGlzIGNhc2UsIG9uZSBlbnRyeSB3aXRoaW4gdGhpcyBBcnJheUdyb3VwIG1heSBiZSAnc2VydmVyLVNjaG9vbC0xL3N0dWRlbnRzJzogW1wic2VydmVyLVN0dWRlbnQtM1wiLCBcInNlcnZlci1TdHVkZW50LTVcIl1cbiAqXG4gKiAgSWYgdGhhdCdzIGFsbCB0aGUgY2hhbmdlcyB0aGVuIHRoZSBBcnJheUdyb3VwIHdvdWxkIGJlIHsnc2VydmVyLVNjaG9vbC0xL3N0dWRlbnRzJzogW1wic2VydmVyLVN0dWRlbnQtM1wiLCBcInNlcnZlci1TdHVkZW50LTVcIl19XG4gKi9cbmV4cG9ydCB0eXBlIEFycmF5R3JvdXAgPSB7IFtpZDogc3RyaW5nXTogQXJyYXlDaGFuZ2VzIH07XG5cbi8qKlxuICogQW4gYXJyYXkgb2YgSWQgcmVmZXJlbmNlcyB0byBTdXBlcnR5cGUgT2JqZWN0cyBvciBwcmltaXRpdmUgdmFsdWVzXG4gKi9cbnR5cGUgQXJyYXlDaGFuZ2VzID0gQXJyYXk8YW55PjtcbmV4cG9ydCB0eXBlIENoYW5nZUdyb3VwID0geyBbb2JqSWQ6IHN0cmluZ106IFByb3BDaGFuZ2VzIH07XG50eXBlIFByb3BDaGFuZ2VzID0geyBbcHJvcDogc3RyaW5nXTogQ2hhbmdlcyB9O1xuXG4vLyBDaGFuZ2VzWzBdIGlzIG9sZFZhbHVlLCBDaGFuZ2VzWzFdIGlzIG5ld1ZhbHVlXG50eXBlIG9sZFZhbCA9IGFueTtcbnR5cGUgbmV3VmFsID0gYW55O1xudHlwZSBDaGFuZ2VzID0gW29sZFZhbCwgbmV3VmFsXVtdO1xuXG5leHBvcnQgdHlwZSBTdWJzY3JpcHRpb25zID0geyBba2V5OiBzdHJpbmddOiBTdWJzY3JpcHRpb24gfTtcblxuZXhwb3J0IHR5cGUgUmVtb3RlQ2FsbCA9IHtcbiAgICByZW1vdGVDYWxsSWQ6IGFueTtcbiAgICBpZDogYW55O1xuICAgIGNoYW5nZXM6IHN0cmluZzsgLy8gVGhlIHN0cmluZyBpcyBvZiB0eXBlIENoYW5nZUdyb3VwXG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHNlcXVlbmNlOiBhbnk7XG4gICAgdHlwZTogYW55O1xuICAgIHN5bmM6IGFueTtcbiAgICB2YWx1ZTogYW55O1xufVxuXG5leHBvcnQgdHlwZSBTZXNzaW9uID0ge1xuICAgIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbnM7XG4gICAgc2VuZE1lc3NhZ2U6IFNlbmRNZXNzYWdlO1xuICAgIHNlbmRNZXNzYWdlRW5hYmxlZDogYm9vbGVhbjtcbiAgICByZW1vdGVDYWxsczogQXJyYXk8YW55PjtcbiAgICBwZW5kaW5nUmVtb3RlQ2FsbHM6IGFueTtcbiAgICBuZXh0UGVuZGluZ1JlbW90ZUNhbGxJZDogbnVtYmVyO1xuICAgIG5leHRTYXZlU2Vzc2lvbklkOiBudW1iZXI7XG4gICAgc2F2ZWRTZXNzaW9uSWQ6IG51bWJlcjtcbiAgICBuZXh0U3Vic2NyaXB0aW9uSWQ6IG51bWJlcjtcbiAgICBvYmplY3RzOiBhbnk7XG4gICAgbmV4dE9iaklkOiBudW1iZXI7XG4gICAgZGlzcGVuc2VOZXh0SWQ6IG51bGw7IC8vIG5vdCB1c2VkIGFueXdoZXJlXG59XG5cblxuZXhwb3J0IHR5cGUgU2Vzc2lvbnMgPSB7IFtzZXNzaW9uSWQ6IG51bWJlcl06IFNlc3Npb24gfTtcblxuZXhwb3J0IHR5cGUgU2VuZE1lc3NhZ2UgPSAobWVzc2FnZTogYW55KSA9PiB2b2lkO1xuXG5leHBvcnQgdHlwZSBTYXZlZFNlc3Npb24gPSB7XG4gICAgcmV2aXNpb246IG51bWJlcjtcbiAgICBkYXRhOiBzdHJpbmc7IC8vIFNlcmlhbGl6ZWQgU2Vzc2lvbiBkYXRhXG4gICAgY2FsbENvdW50OiBudW1iZXI7XG4gICAgcmVmZXJlbmNlZDogbnVtYmVyO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBSZW1vdGVhYmxlQ2xhc3MgZXh0ZW5kcyBTdXBlcnR5cGUge1xuICAgIHN5bmNTdGF0ZXM6IEFycmF5PHN0cmluZz47XG4gICAgX190b0NsaWVudF9fOiBib29sZWFuO1xuICAgIF9fdG9TZXJ2ZXJfXzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgQ2hhbmdlU3RyaW5nID0geyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbnR5cGUgUHJlU2VydmVyQ2FsbENoYW5nZXMgPSB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfTtcblxuZXhwb3J0IHR5cGUgQ29udHJvbGxlclN5bmNTdGF0ZSA9IHtcbiAgICBzY29wZTogJysnIHwgJyonIHwgJy0nXG4gICAgc3RhdGU6IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTZW1vdHVzQ29udHJvbGxlciB7XG4gICAgX190ZW1wbGF0ZV9fOiBhbnk7XG4gICAgc3luY1N0YXRlPzogQ29udHJvbGxlclN5bmNTdGF0ZVxuXG4gICAgLyoqXG4gICAgICogQHNlcnZlclxuICAgICAqXG4gICAgICogQ2FsbGJhY2sgYWZ0ZXIgYSBzdWNjZXNzZnVsIHJlbW90ZSBmdW5jdGlvbiBjYWxsIChqdXN0IHRoZSBhcHBsaWNhdGlvbiBvZiBjaGFuZ2VzIGFuZCB0aGUgZXhlY3V0aW9uIG9mIHRoZSBmdW5jdGlvbiBjYWxsKVxuICAgICAqIE5vdGUgdGhhdCB0aGlzIGRvZXNuJ3QgbWVhbiB3ZSBjYW4ndCBlcnJvciBvdXQgb24gdGhpcyBvciBzdWJzZXF1ZW50IHN0ZXBzIG9mIGEgcmVtb3RlIGNhbGwuXG4gICAgICpcbiAgICAgKiBXZSBjYW4gdXRpbGl6ZSB0aGlzIGZ1bmN0aW9uIGFzIGEgZ2VuZXJpYyBmdW5jdGlvbiBoYW5kbGVyIHRvIHJ1biBhZnRlciB3ZSBoYXZlIHN1Y2Nlc3NmdWxseSBjYWxsZWQgYSByZW1vdGUgZnVuY3Rpb24uXG4gICAgICogT25lIHN1Y2ggdXNlIG1heSBiZSB0byBzZWUgdGhlIGNoYW5nZXMgdGhhdCB3ZXJlIGFwcGxpZWQgZnJvbSB0aGUgY2xpZW50XG4gICAgICpcbiAgICAgKiBOT1RFIFRIQVQgVEhFIENIQU5HRVNUUklORyBET0VTIE5PVCBJTkNMVURFIENIQU5HRVMgRE9ORSBXSVRISU4gVEhFIFJFTU9URSBGVU5DVElPTiBDQUxMIElUU0VMRiwgT05MWSBDSEFOR0VTIEZST00gVEhFIENMSUVOVFxuICAgICAqXG4gICAgICogU2VlIHJlbW90ZSBjYWxsIGRvY3VtZW50YXRpb24gdG8ga25vdyB3aGVyZSB0aGlzIGV4ZWN1dGVzIGluIHRoZSBsaWZlY3ljbGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaGFzQ2hhbmdlcyAtIFdoZXRoZXIgb3Igbm90IHdlIGhhdmUgYXBwbGllZCBjbGllbnQgY2hhbmdlcyBvbnRvIHRoZSBzZXJ2ZXIncyBvYmplY3QgZ3JhcGhcbiAgICAgKiBAcGFyYW0ge0NhbGxDb250ZXh0fSBjYWxsQ29udGV4dCAtIENvbnRleHQgKG51bWJlciBvZiByZXRyaWVzIGV0YylcbiAgICAgKiBAcGFyYW0ge2NoYW5nZVN0cmluZ30gY2hhbmdlU3RyaW5nIC0gT2JqZWN0IG9mIENoYW5nZXMgLSBLZXkgaXMgW0NsYXNzTmFtZV0uW3Byb3BlcnR5TmFtZV0sIFZhbHVlIGlzIFtjaGFuZ2VkVmFsdWVdIGV4YW1wbGU6IHsnQ3VzdG9tZXIubWlkZGxlbmFtZSc6ICdLYXJlbid9LCBTZWUgYWJvdmUgbm90ZVxuICAgICAqIEBwYXJhbSBIVFRQT2Jqc1xuICAgICAqXG4gICAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAgICogQG1lbWJlcm9mIENvbnRyb2xsZXJcbiAgICAgKi9cbiAgICBwb3N0U2VydmVyQ2FsbD8oaGFzQ2hhbmdlczogYm9vbGVhbiwgY2FsbENvbnRleHQ6IENhbGxDb250ZXh0LCBjaGFuZ2VTdHJpbmc6IENoYW5nZVN0cmluZywgSFRUUE9ianM/OiBIVFRQT2Jqcyk6IFByb21pc2U8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEBzZXJ2ZXJcbiAgICAgKlxuICAgICAqIENhbGxiYWNrIHRvIGhhbmRsZSBlcnJvcnMgb24gYSByZW1vdGUgY2FsbC5cbiAgICAgKlxuICAgICAqIEV4ZWN1dGVzIGFmdGVyIGV2ZXJ5IG90aGVyIHN0ZXAgaW4gdGhlIHJlbW90ZSBjYWxsIHBpcGVsaW5lIChzZWUgcmVtb3RlIGNhbGwgZG9jdW1lbnRhdGlvbilcbiAgICAgKiBidXQgYmVmb3JlIHJldHJ5aW5nIHRoZSBjYWxsIChvciBwYWNrYWdpbmcgcmVzcG9uc2UgYW5kIHNlbmRpbmcgYmFjayB0byBjbGllbnQpXG4gICAgICpcbiAgICAgKiBOT1RFIFRIQVQgVEhFIENIQU5HRVNUUklORyBET0VTIE5PVCBJTkNMVURFIENIQU5HRVMgRE9ORSBXSVRISU4gVEhFIFJFTU9URSBGVU5DVElPTiBDQUxMIElUU0VMRiwgT05MWSBDSEFOR0VTIEZST00gVEhFIENMSUVOVFxuICAgICAqXG4gICAgICogQHBhcmFtIHtFcnJvclR5cGV9IGVycm9yVHlwZSAtIEVycm9yIHR5cGUgYXNzb2NpYXRlZCAoZXJyb3IsIHJldHJ5LCByZXNwb25zZSlcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmVtb3RlQ2FsbElkIC0gSWQgZm9yIHJlbW90ZSBjYWxsXG4gICAgICogQHBhcmFtIHtleHRlbmRzIFN1cGVydHlwZX0gcmVtb3RlT2JqIC0gSW5zdGFuY2UgZm9yIHdoaWNoIHRoZSByZW1vdGUgb2JqZWN0IGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3IgLSBAVE9ETzogcmV2aXNpdCB3aGVuIHdlIGNyZWF0ZSBhIHByb3BlciByZW1vdGVhYmxlIHR5cGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZnVuY3Rpb25OYW1lIC0gTmFtZSBvZiBmdW5jdGlvbiBiZWluZyBjYWxsZWRcbiAgICAgKiBAcGFyYW0ge0NhbGxDb250ZXh0fSBjYWxsQ29udGV4dCAtIENvbnRleHQgKG51bWJlciBvZiByZXRyaWVzIGV0YylcbiAgICAgKiBAcGFyYW0ge0NoYW5nZVN0cmluZ30gY2hhbmdlU3RyaW5nIC0gT2JqZWN0IG9mIENoYW5nZXMgLSBLZXkgaXMgW0NsYXNzTmFtZV0uW3Byb3BlcnR5TmFtZV0sIFZhbHVlIGlzIFtjaGFuZ2VkVmFsdWVdIGV4YW1wbGU6IHsnQ3VzdG9tZXIubWlkZGxlbmFtZSc6ICdLYXJlbid9LCBTZWUgYWJvdmUgbm90ZVxuICAgICAqXG4gICAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAgICogQG1lbWJlcm9mIENvbnRyb2xsZXJcbiAgICAgKi9cbiAgICBwb3N0U2VydmVyRXJyb3JIYW5kbGVyPyhlcnJvclR5cGU6IEVycm9yVHlwZSwgcmVtb3RlQ2FsbElkOiBudW1iZXIsIHJlbW90ZU9iajogU3VwZXJ0eXBlLCBmdW5jdGlvbk5hbWU6IHN0cmluZywgY2FsbENvbnRleHQ6IENhbGxDb250ZXh0LCBjaGFuZ2VTdHJpbmc6IENoYW5nZVN0cmluZyk6IFByb21pc2U8dm9pZD47XG5cbiAgICAvKipcbiAgICAgKiBAc2VydmVyXG4gICAgICpcbiAgICAgKiBDYWxsYmFjayBiZWZvcmUgYSByZW1vdGUgZnVuY3Rpb24gY2FsbCAoMXN0IHN0ZXAgb2YgYSByZW1vdGUgY2FsbClcbiAgICAgKlxuICAgICAqIFdlIGNhbiB1dGlsaXplIHRoaXMgZnVuY3Rpb24gYXMgYSBnZW5lcmljIGZ1bmN0aW9uIGhhbmRsZXIgdG8gcnVuIGJlZm9yZSB3ZSBjYWxsIGFcbiAgICAgKiByZW1vdGUgZnVuY3Rpb24gb3IgYmVmb3JlIHdlIGFwcGx5IGNoYW5nZXMgZnJvbSB0aGUgY2xpZW50IHRvIHRoZSBzZXJ2ZXJcbiAgICAgKlxuICAgICAqIFdlIGNhbiBhbHNvIHV0aWxpemUgdGhpcyBmdW5jdGlvbiB0byBkbyBhbnkgY29udGV4dC1zcGVjaWZpYyBwcmVwIHdvcmsgLyBsb2FkaW5nXG4gICAgICogaWYgdGhpcyBhIHN1YnNlcXVlbnQgdHJ5IG9mIHRoaXMgZnVuY3Rpb24gZHVlIHRvIGFuIHVwZGF0ZSBjb25mbGljdC5cbiAgICAgKlxuICAgICAqIFNlZSByZW1vdGUgY2FsbCBkb2N1bWVudGF0aW9uIHRvIGtub3cgd2hlcmUgdGhpcyBleGVjdXRlcyBpbiB0aGUgbGlmZWN5Y2xlXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhhc0NoYW5nZXMgLSBXaGV0aGVyIG9yIG5vdCB3ZSBoYXZlIGFwcGxpZWQgY2xpZW50IGNoYW5nZXMgb250byB0aGUgc2VydmVyJ3Mgb2JqZWN0IGdyYXBoXG4gICAgICogQHBhcmFtIHtQcmVTZXJ2ZXJDYWxsQ2hhbmdlc30gY2hhbmdlcyAtIERpY3Rpb25hcnkgb2YgT2JqZWN0cyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkIGZyb20gdGhlIGNsaWVudFxuICAgICAqIEBwYXJhbSB7Q2FsbENvbnRleHR9IGNhbGxDb250ZXh0IC0gQ29udGV4dCAobnVtYmVyIG9mIHJldHJpZXMgZXRjKVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZvcmNlVXBkYXRlXSAtIE9wdGlvbmFsIHBhcmFtZXRlciBwYXNzZWQgaW4uIFRydWUgaWYgdGhpcyBpcyBhIHJldHJ5IG9mIHRoZSBjYWxsIGJhc2VkIG9uIGFuIHVwZGF0ZSBjb25mbGljdC4gRmFsc2UgLyB1bmRlZmluZWQgb3RoZXJ3aXNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGZ1bmN0aW9uTmFtZVxuICAgICAqIEBwYXJhbSByZW1vdGVDYWxsXG4gICAgICogQHBhcmFtIGlzUHVibGljXG4gICAgICogQHBhcmFtIEhUVFBPYmpzXG4gICAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAgICogQG1lbWJlcm9mIENvbnRyb2xsZXJcbiAgICAgKi9cbiAgICBwcmVTZXJ2ZXJDYWxsPyhoYXNDaGFuZ2VzOiBib29sZWFuLCBjaGFuZ2VzOiBQcmVTZXJ2ZXJDYWxsQ2hhbmdlcywgY2FsbENvbnRleHQ6IENhbGxDb250ZXh0LCBmb3JjZVVwZGF0ZTogdW5kZWZpbmVkIHwgYm9vbGVhbiwgZnVuY3Rpb25OYW1lOiBzdHJpbmcsIHJlbW90ZUNhbGw6IFJlbW90ZUNhbGwsIGlzUHVibGljOiBib29sZWFuLCBIVFRQT2Jqcz86IEhUVFBPYmpzICk6IFByb21pc2U8YW55PjtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgYSBoYW5kbGVyIHRoYXQgd2lsbCBvbmx5IGJlIHVzZWQgZm9yIHRlc3RpbmcgYW5kIGRlYnVnZ2luZyBwdXJwb3Nlc1xuICAgICAqXG4gICAgICogV2hlbiB0aGlzIGlzIHVzZWQsIGFsbG93cyB1cyB0byBpbnNwZWN0IHRoZSBtZXNzYWdlIGJvZHkgYmVmb3JlIHdlIHNlbmQgaXQgb3V0IGluICdwYWNrYWdlQ2hhbmdlcydcbiAgICAgKlxuICAgICAqIERPIE5PVCBVU0UgVEhJUyBJTiBQUk9EVUNUSU9OIENPREVcbiAgICAgKlxuICAgICAqIEBwYXJhbSBtZXNzYWdlXG4gICAgICovXG4gICAgaW5zcGVjdE1lc3NhZ2U/KG1lc3NhZ2UpOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2Vtb3R1cyB7XG4gICAgc2V0U3luY1N0YXRlOiAoc3RyKSA9PiB2b2lkO1xuICAgIHN5bmNTdGF0ZTogc3RyaW5nO1xuICAgIGdldFN5bmNTdGF0ZTogKCkgPT4gYW55O1xuICAgIG1heENhbGxUaW1lOiBudW1iZXI7XG4gICAgX19kaWN0aW9uYXJ5X186IGFueTtcbiAgICBtZW1TZXNzaW9uOiB7IHNlbW90dXM6IHsgY2FsbFN0YXJ0VGltZTogbnVtYmVyIH0gfTtcbiAgICBfaW5qZWN0SW50b1RlbXBsYXRlOiAodGVtcGxhdGUpID0+IHZvaWQ7XG4gICAgc2VyaWFsaXplQW5kR2FyYmFnZUNvbGxlY3Q6ICgpID0+IGFueTtcbiAgICBnZXRNZXNzYWdlOiAoc2Vzc2lvbklkLCBmb3JjZU1lc3NhZ2UpID0+IGFueTtcbiAgICBjbGVhclBlbmRpbmdDYWxsczogKHNlc3Npb25JZCkgPT4gdm9pZDtcbiAgICBnZXRDaGFuZ2VHcm91cDogKHR5cGUsIHN1YnNjcmlwdGlvbklkKSA9PiBDaGFuZ2VHcm91cDtcbiAgICBkZWxldGVDaGFuZ2VHcm91cDogKHR5cGU6IGFueSwgc3Vic2NyaXB0aW9uSWQ6IGFueSkgPT4gdm9pZDtcbiAgICBnZXRDaGFuZ2VTdGF0dXM6ICgpID0+IHN0cmluZztcbiAgICBfc3Rhc2hPYmplY3Q6IChvYmosIHRlbXBsYXRlKSA9PiBib29sZWFuO1xuICAgIHNlc3Npb25pemU6IChvYmosIHJlZmVyZW5jaW5nT2JqKSA9PiAodW5kZWZpbmVkIHwgYW55KTtcbiAgICBfc2V0dXBGdW5jdGlvbjogKHByb3BlcnR5TmFtZSwgcHJvcGVydHlWYWx1ZSwgcm9sZSwgdmFsaWRhdGUsIHNlcnZlclZhbGlkYXRpb24sIGlzUHVibGljOiBib29sZWFuLCB0ZW1wbGF0ZSkgPT4gKGFueSk7XG4gICAgX3NldHVwUHJvcGVydHk6IChwcm9wZXJ0eU5hbWUsIGRlZmluZVByb3BlcnR5LCBvYmplY3RQcm9wZXJ0aWVzLCBkZWZpbmVQcm9wZXJ0aWVzKSA9PiB2b2lkO1xuICAgIHdpdGhvdXRDaGFuZ2VUcmFja2luZzogKGNiKSA9PiB2b2lkO1xuICAgIF9jaGFuZ2VkVmFsdWU6IChvYmosIHByb3AsIHZhbHVlKSA9PiB2b2lkO1xuICAgIF9yZWZlcmVuY2VkQXJyYXk6IChvYmosIHByb3AsIGFycmF5UmVmLCBzZXNzaW9uSWQ/KSA9PiB2b2lkO1xuICAgIF9jb252ZXJ0QXJyYXlSZWZlcmVuY2VzVG9DaGFuZ2VzOiAoKSA9PiB2b2lkO1xuICAgIE1hcmtDaGFuZ2VkQXJyYXlSZWZlcmVuY2VzOiAoKSA9PiB2b2lkO1xuICAgIF9jb252ZXJ0VmFsdWU6ICh2YWx1ZSkgPT4gKGFueVtdIHwgbnVsbCk7XG4gICAgZ2V0T2JqZWN0OiAob2JqSWQsIHRlbXBsYXRlKSA9PiAoYW55IHwgbnVsbCk7XG4gICAgX2FwcGx5Q2hhbmdlczogKGNoYW5nZXMsIGZvcmNlLCBzdWJzY3JpcHRpb25JZCwgY2FsbENvbnRleHQpID0+IChudW1iZXIpO1xuICAgIF9hcHBseU9iamVjdENoYW5nZXM6IChjaGFuZ2VzLCByb2xsYmFjaywgb2JqLCBmb3JjZSkgPT4gKGJvb2xlYW4pO1xuICAgIF92YWxpZGF0ZVNlcnZlckluY29taW5nUHJvcGVydHk6IChvYmosIHByb3AsIGRlZmluZVByb3BlcnR5LCBuZXdWYWx1ZSkgPT4gKGJvb2xlYW4pO1xuICAgIF9hcHBseVByb3BlcnR5Q2hhbmdlOiAoY2hhbmdlcywgcm9sbGJhY2ssIG9iaiwgcHJvcCwgaXgsIG9sZFZhbHVlLCBuZXdWYWx1ZSwgZm9yY2UpID0+IChib29sZWFuKTtcbiAgICBfcm9sbGJhY2s6IChyb2xsYmFjaykgPT4gdm9pZDtcbiAgICBfcm9sbGJhY2tDaGFuZ2VzOiAoKSA9PiB2b2lkO1xuICAgIF9jcmVhdGVFbXB0eU9iamVjdDogKHRlbXBsYXRlLCBvYmpJZCwgZGVmaW5lUHJvcGVydHksIGlzVHJhbnNpZW50KSA9PiBhbnk7XG4gICAgaW5qZWN0OiAodGVtcGxhdGUsIGluamVjdG9yKSA9PiB2b2lkO1xuICAgIF9xdWV1ZVJlbW90ZUNhbGw6IChvYmpJZCwgZnVuY3Rpb25OYW1lLCBkZWZlcnJlZCwgYXJncykgPT4gdm9pZDtcbiAgICBfcHJvY2Vzc1F1ZXVlOiAoKSA9PiB2b2lkO1xuICAgIF90b1RyYW5zcG9ydDogKG9iaikgPT4gYW55O1xuICAgIF9mcm9tVHJhbnNwb3J0OiAob2JqKSA9PiBhbnk7XG4gICAgX2V4dHJhY3RBcmd1bWVudHM6IChyZW1vdGVDYWxsKSA9PiBhbnk7XG4gICAgX3RyaW1BcnJheTogKGFycmF5KSA9PiB2b2lkO1xuICAgIF9kZWxldGVDaGFuZ2VHcm91cHM6ICh0eXBlKSA9PiB2b2lkO1xuICAgIF9nZXRTdWJzY3JpcHRpb25zOiAoc2Vzc2lvbklkPykgPT4gU3Vic2NyaXB0aW9ucyB8IG51bGw7XG4gICAgX2dldFN1YnNjcmlwdGlvbjogKHN1YnNjcmlwdGlvbklkPykgPT4gU3Vic2NyaXB0aW9uO1xuICAgIGNsZWFuUHJpdmF0ZVZhbHVlczogKHByb3AsIGxvZ1ZhbHVlLCBkZWZpbmVQcm9wZXJ0eSkgPT4gKHN0cmluZyB8IGFueSk7XG4gICAgUmVtb3RlYWJsZTogKEJhc2UpID0+ICgpID0+IGFueTtcbiAgICBCaW5kYWJsZTogKEJhc2UpID0+ICgpID0+IGFueTtcbiAgICBQZXJzaXN0YWJsZTogKEJhc2UpID0+ICgpID0+IGFueTtcbiAgICBiaW5kRGVjb3JhdG9yczogKG9iamVjdFRlbXBsYXRlPykgPT4gdm9pZDtcbiAgICBwcm9jZXNzTWVzc2FnZTogKHJlbW90ZUNhbGwsIHN1YnNjcmlwdGlvbklkLCByZXN0b3JlU2Vzc2lvbkNhbGxiYWNrLCByZXE/OiBSZXF1ZXN0LCByZXM/OiBSZXNwb25zZSkgPT4gKHVuZGVmaW5lZCB8IGFueSk7XG4gICAgZW5hYmxlU2VuZE1lc3NhZ2U6ICh2YWx1ZSwgbWVzc2FnZUNhbGxiYWNrLCBzZXNzaW9uSWQpID0+IHZvaWQ7XG4gICAgc3luY1Nlc3Npb246IChzZXNzaW9uSWQpID0+IHZvaWQ7XG4gICAgcmVzdG9yZVNlc3Npb246IChzZXNzaW9uSWQsIHNhdmVkU2Vzc2lvbjogU2F2ZWRTZXNzaW9uLCBzZW5kTWVzc2FnZTogU2VuZE1lc3NhZ2UpID0+IGJvb2xlYW47XG4gICAgc2F2ZVNlc3Npb246IChzZXNzaW9uSWQpID0+IFNhdmVkU2Vzc2lvbjtcbiAgICBzZXRNaW5pbXVtU2VxdWVuY2U6IChuZXh0T2JqSWQpID0+IHZvaWQ7XG4gICAgZGVsZXRlU2Vzc2lvbjogKHNlc3Npb25JZCkgPT4gdm9pZDtcbiAgICBjcmVhdGVTZXNzaW9uOiAocm9sZTogYW55LCBzZW5kTWVzc2FnZTogU2VuZE1lc3NhZ2UsIHNlc3Npb25JZDogYW55KSA9PiBhbnk7XG4gICAgbG9nOiAobGV2ZWwsIGRhdGEpID0+IHZvaWQ7XG4gICAgbmV4dE9iaklkOiBudW1iZXI7XG4gICAgbWF4Q2xpZW50U2VxdWVuY2U6IG51bWJlcjtcbiAgICBsb2dMZXZlbDogbnVtYmVyO1xuICAgIF9fY29uZmxpY3RNb2RlX186IHN0cmluZztcbiAgICBfX2NoYW5nZVRyYWNraW5nX186IGJvb2xlYW47XG4gICAgX3VzZUdldHRlcnNTZXR0ZXJzOiBib29sZWFuO1xuICAgIGxvZ2dlcjogYW55O1xuICAgIHJvbGU6IGFueTtcbiAgICBjdXJyZW50U2Vzc2lvbjogYW55O1xuICAgIHNlc3Npb25zPzogU2Vzc2lvbnM7XG4gICAgbmV4dFN1YnNjcmlwdGlvbklkOiBudW1iZXI7XG4gICAgbmV4dFNlc3Npb25JZDogbnVtYmVyO1xuICAgIGNvbnRyb2xsZXI6IElTZW1vdHVzQ29udHJvbGxlcjtcbiAgICBjaGFuZ2VTdHJpbmc6IHN0cmluZztcblxuXG4gICAgX2dldFNlc3Npb24oX3NpZD86IGFueSk6IFNlc3Npb247XG5cbiAgICBzdWJzY3JpYmUocm9sZTogYW55KTogbnVtYmVyO1xuXG4gICAgc2V0U2Vzc2lvbihzZXNzaW9uSWQ6IGFueSk6IHZvaWQ7XG5cbiAgICBnZXRDaGFuZ2VzKHN1YnNjcmlwdGlvbklkPzogYW55KTogQ2hhbmdlR3JvdXA7XG5cbiAgICBfZGVsZXRlQ2hhbmdlcygpOiB2b2lkO1xuXG4gICAgZ2V0UGVuZGluZ0NhbGxDb3VudChzZXNzaW9uSWQ6IGFueSk6IGFueTtcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJUeXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFhYSxRQUFBLE1BQU0sR0FBRyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1N1cGVydHlwZX0gZnJvbSAnQGhhdmVudGVjaC9zdXBlcnR5cGUnO1xuaW1wb3J0IHtSZXF1ZXN0LCBSZXNwb25zZX0gZnJvbSAnZXhwcmVzcyc7XG5leHBvcnQgdHlwZSBIVFRQT2JqcyA9IHtyZXF1ZXN0OiBSZXF1ZXN0LCByZXNwb25zZTogUmVzcG9uc2V9O1xuXG5leHBvcnQgdHlwZSBTdWJzY3JpcHRpb24gPSB7XG4gICAgcm9sZTogc3RyaW5nO1xuICAgIGxvZzoge1xuICAgICAgICBhcnJheTogQXJyYXlHcm91cDtcbiAgICAgICAgYXJyYXlEaXJ0eTogQXJyYXlHcm91cDtcbiAgICAgICAgY2hhbmdlOiBDaGFuZ2VHcm91cDtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBDaGFuZ2UgPSAnY2hhbmdlJztcbmV4cG9ydCB0eXBlIEFycmF5VHlwZXMgPSAnYXJyYXknIHwgJ2FycmF5RGlydHknO1xuZXhwb3J0IHR5cGUgRXJyb3JUeXBlID0gJ2Vycm9yJyB8ICdyZXRyeScgfCAncmVzcG9uc2UnO1xuXG5leHBvcnQgdHlwZSBDYWxsQ29udGV4dCA9IHsgcmV0cmllczogbnVtYmVyOyBzdGFydFRpbWU6IERhdGUgfTtcblxuZXhwb3J0IHR5cGUgUHJvY2Vzc0NhbGxQYXlsb2FkID0ge1xuICAgIHNlbW90dXM6IFNlbW90dXM7XG4gICAgcmVtb3RlQ2FsbDogUmVtb3RlQ2FsbDtcbiAgICBjYWxsQ29udGV4dDogQ2FsbENvbnRleHQ7XG4gICAgc2Vzc2lvbjogU2Vzc2lvbjtcbiAgICBzdWJzY3JpcHRpb25JZDogYW55O1xuICAgIHJlbW90ZUNhbGxJZDogYW55O1xuICAgIHJlc3RvcmVTZXNzaW9uQ2FsbGJhY2s/OiBGdW5jdGlvbjtcbiAgICBIVFRQT2Jqcz86IEhUVFBPYmpzO1xufVxuXG4vKipcbiAqICBpZCBpcyB0aGUgaWQgb2YgdGhlIG9iamVjdCArICcvJyArIHByb3BlcnR5LlxuICogIEV4OiB0aGVyZSBhcmUgMSBTY2hvb2wgdG8gTWFueSBTdHVkZW50c1xuICpcbiAqICBTY2hvb2wge1xuICogICAgICBzdHVkZW50czogQXJyYXk8U3R1ZGVudHM+XG4gKiAgfVxuICpcbiAqICBJbiB0aGlzIGNhc2UsIG9uZSBlbnRyeSB3aXRoaW4gdGhpcyBBcnJheUdyb3VwIG1heSBiZSAnc2VydmVyLVNjaG9vbC0xL3N0dWRlbnRzJzogW1wic2VydmVyLVN0dWRlbnQtM1wiLCBcInNlcnZlci1TdHVkZW50LTVcIl1cbiAqXG4gKiAgSWYgdGhhdCdzIGFsbCB0aGUgY2hhbmdlcyB0aGVuIHRoZSBBcnJheUdyb3VwIHdvdWxkIGJlIHsnc2VydmVyLVNjaG9vbC0xL3N0dWRlbnRzJzogW1wic2VydmVyLVN0dWRlbnQtM1wiLCBcInNlcnZlci1TdHVkZW50LTVcIl19XG4gKi9cbmV4cG9ydCB0eXBlIEFycmF5R3JvdXAgPSB7IFtpZDogc3RyaW5nXTogQXJyYXlDaGFuZ2VzIH07XG5cbi8qKlxuICogQW4gYXJyYXkgb2YgSWQgcmVmZXJlbmNlcyB0byBTdXBlcnR5cGUgT2JqZWN0cyBvciBwcmltaXRpdmUgdmFsdWVzXG4gKi9cbnR5cGUgQXJyYXlDaGFuZ2VzID0gQXJyYXk8YW55PjtcbmV4cG9ydCB0eXBlIENoYW5nZUdyb3VwID0geyBbb2JqSWQ6IHN0cmluZ106IFByb3BDaGFuZ2VzIH07XG50eXBlIFByb3BDaGFuZ2VzID0geyBbcHJvcDogc3RyaW5nXTogQ2hhbmdlcyB9O1xuXG4vLyBDaGFuZ2VzWzBdIGlzIG9sZFZhbHVlLCBDaGFuZ2VzWzFdIGlzIG5ld1ZhbHVlXG50eXBlIG9sZFZhbCA9IGFueTtcbnR5cGUgbmV3VmFsID0gYW55O1xudHlwZSBDaGFuZ2VzID0gW29sZFZhbCwgbmV3VmFsXVtdO1xuXG5leHBvcnQgdHlwZSBTdWJzY3JpcHRpb25zID0geyBba2V5OiBzdHJpbmddOiBTdWJzY3JpcHRpb24gfTtcblxuZXhwb3J0IHR5cGUgUmVtb3RlQ2FsbCA9IHtcbiAgICByZW1vdGVDYWxsSWQ6IGFueTtcbiAgICBpZDogYW55O1xuICAgIGNoYW5nZXM6IHN0cmluZzsgLy8gVGhlIHN0cmluZyBpcyBvZiB0eXBlIENoYW5nZUdyb3VwXG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHNlcXVlbmNlOiBhbnk7XG4gICAgdHlwZTogYW55O1xuICAgIHN5bmM6IGFueTtcbiAgICB2YWx1ZTogYW55O1xufVxuXG5leHBvcnQgdHlwZSBTZXNzaW9uID0ge1xuICAgIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbnM7XG4gICAgc2VuZE1lc3NhZ2U6IFNlbmRNZXNzYWdlO1xuICAgIHNlbmRNZXNzYWdlRW5hYmxlZDogYm9vbGVhbjtcbiAgICByZW1vdGVDYWxsczogQXJyYXk8YW55PjtcbiAgICBwZW5kaW5nUmVtb3RlQ2FsbHM6IGFueTtcbiAgICBuZXh0UGVuZGluZ1JlbW90ZUNhbGxJZDogbnVtYmVyO1xuICAgIG5leHRTYXZlU2Vzc2lvbklkOiBudW1iZXI7XG4gICAgc2F2ZWRTZXNzaW9uSWQ6IG51bWJlcjtcbiAgICBuZXh0U3Vic2NyaXB0aW9uSWQ6IG51bWJlcjtcbiAgICBvYmplY3RzOiBhbnk7XG4gICAgbmV4dE9iaklkOiBudW1iZXI7XG4gICAgZGlzcGVuc2VOZXh0SWQ6IG51bGw7IC8vIG5vdCB1c2VkIGFueXdoZXJlXG59XG5cblxuZXhwb3J0IHR5cGUgU2Vzc2lvbnMgPSB7IFtzZXNzaW9uSWQ6IG51bWJlcl06IFNlc3Npb24gfTtcblxuZXhwb3J0IHR5cGUgU2VuZE1lc3NhZ2UgPSAobWVzc2FnZTogYW55KSA9PiB2b2lkO1xuXG5leHBvcnQgdHlwZSBTYXZlZFNlc3Npb24gPSB7XG4gICAgcmV2aXNpb246IG51bWJlcjtcbiAgICBkYXRhOiBzdHJpbmc7IC8vIFNlcmlhbGl6ZWQgU2Vzc2lvbiBkYXRhXG4gICAgY2FsbENvdW50OiBudW1iZXI7XG4gICAgcmVmZXJlbmNlZDogbnVtYmVyO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBSZW1vdGVhYmxlQ2xhc3MgZXh0ZW5kcyBTdXBlcnR5cGUge1xuICAgIHN5bmNTdGF0ZXM6IEFycmF5PHN0cmluZz47XG4gICAgX190b0NsaWVudF9fOiBib29sZWFuO1xuICAgIF9fdG9TZXJ2ZXJfXzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgQ2hhbmdlU3RyaW5nID0geyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbnR5cGUgUHJlU2VydmVyQ2FsbENoYW5nZXMgPSB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfTtcblxuZXhwb3J0IHR5cGUgQ29udHJvbGxlclN5bmNTdGF0ZSA9IHtcbiAgICBzY29wZTogJysnIHwgJyonIHwgJy0nXG4gICAgc3RhdGU6IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTZW1vdHVzQ29udHJvbGxlciB7XG4gICAgX190ZW1wbGF0ZV9fOiBhbnk7XG4gICAgc3luY1N0YXRlPzogQ29udHJvbGxlclN5bmNTdGF0ZVxuXG4gICAgLyoqXG4gICAgICogQHNlcnZlclxuICAgICAqXG4gICAgICogQ2FsbGJhY2sgYWZ0ZXIgYSBzdWNjZXNzZnVsIHJlbW90ZSBmdW5jdGlvbiBjYWxsIChqdXN0IHRoZSBhcHBsaWNhdGlvbiBvZiBjaGFuZ2VzIGFuZCB0aGUgZXhlY3V0aW9uIG9mIHRoZSBmdW5jdGlvbiBjYWxsKVxuICAgICAqIE5vdGUgdGhhdCB0aGlzIGRvZXNuJ3QgbWVhbiB3ZSBjYW4ndCBlcnJvciBvdXQgb24gdGhpcyBvciBzdWJzZXF1ZW50IHN0ZXBzIG9mIGEgcmVtb3RlIGNhbGwuXG4gICAgICpcbiAgICAgKiBXZSBjYW4gdXRpbGl6ZSB0aGlzIGZ1bmN0aW9uIGFzIGEgZ2VuZXJpYyBmdW5jdGlvbiBoYW5kbGVyIHRvIHJ1biBhZnRlciB3ZSBoYXZlIHN1Y2Nlc3NmdWxseSBjYWxsZWQgYSByZW1vdGUgZnVuY3Rpb24uXG4gICAgICogT25lIHN1Y2ggdXNlIG1heSBiZSB0byBzZWUgdGhlIGNoYW5nZXMgdGhhdCB3ZXJlIGFwcGxpZWQgZnJvbSB0aGUgY2xpZW50XG4gICAgICpcbiAgICAgKiBOT1RFIFRIQVQgVEhFIENIQU5HRVNUUklORyBET0VTIE5PVCBJTkNMVURFIENIQU5HRVMgRE9ORSBXSVRISU4gVEhFIFJFTU9URSBGVU5DVElPTiBDQUxMIElUU0VMRiwgT05MWSBDSEFOR0VTIEZST00gVEhFIENMSUVOVFxuICAgICAqXG4gICAgICogU2VlIHJlbW90ZSBjYWxsIGRvY3VtZW50YXRpb24gdG8ga25vdyB3aGVyZSB0aGlzIGV4ZWN1dGVzIGluIHRoZSBsaWZlY3ljbGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaGFzQ2hhbmdlcyAtIFdoZXRoZXIgb3Igbm90IHdlIGhhdmUgYXBwbGllZCBjbGllbnQgY2hhbmdlcyBvbnRvIHRoZSBzZXJ2ZXIncyBvYmplY3QgZ3JhcGhcbiAgICAgKiBAcGFyYW0ge0NhbGxDb250ZXh0fSBjYWxsQ29udGV4dCAtIENvbnRleHQgKG51bWJlciBvZiByZXRyaWVzIGV0YylcbiAgICAgKiBAcGFyYW0ge2NoYW5nZVN0cmluZ30gY2hhbmdlU3RyaW5nIC0gT2JqZWN0IG9mIENoYW5nZXMgLSBLZXkgaXMgW0NsYXNzTmFtZV0uW3Byb3BlcnR5TmFtZV0sIFZhbHVlIGlzIFtjaGFuZ2VkVmFsdWVdIGV4YW1wbGU6IHsnQ3VzdG9tZXIubWlkZGxlbmFtZSc6ICdLYXJlbid9LCBTZWUgYWJvdmUgbm90ZVxuICAgICAqIEBwYXJhbSBIVFRQT2Jqc1xuICAgICAqXG4gICAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAgICogQG1lbWJlcm9mIENvbnRyb2xsZXJcbiAgICAgKi9cbiAgICBwb3N0U2VydmVyQ2FsbD8oaGFzQ2hhbmdlczogYm9vbGVhbiwgY2FsbENvbnRleHQ6IENhbGxDb250ZXh0LCBjaGFuZ2VTdHJpbmc6IENoYW5nZVN0cmluZywgSFRUUE9ianM/OiBIVFRQT2Jqcyk6IFByb21pc2U8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEBzZXJ2ZXJcbiAgICAgKlxuICAgICAqIENhbGxiYWNrIHRvIGhhbmRsZSBlcnJvcnMgb24gYSByZW1vdGUgY2FsbC5cbiAgICAgKlxuICAgICAqIEV4ZWN1dGVzIGFmdGVyIGV2ZXJ5IG90aGVyIHN0ZXAgaW4gdGhlIHJlbW90ZSBjYWxsIHBpcGVsaW5lIChzZWUgcmVtb3RlIGNhbGwgZG9jdW1lbnRhdGlvbilcbiAgICAgKiBidXQgYmVmb3JlIHJldHJ5aW5nIHRoZSBjYWxsIChvciBwYWNrYWdpbmcgcmVzcG9uc2UgYW5kIHNlbmRpbmcgYmFjayB0byBjbGllbnQpXG4gICAgICpcbiAgICAgKiBOT1RFIFRIQVQgVEhFIENIQU5HRVNUUklORyBET0VTIE5PVCBJTkNMVURFIENIQU5HRVMgRE9ORSBXSVRISU4gVEhFIFJFTU9URSBGVU5DVElPTiBDQUxMIElUU0VMRiwgT05MWSBDSEFOR0VTIEZST00gVEhFIENMSUVOVFxuICAgICAqXG4gICAgICogQHBhcmFtIHtFcnJvclR5cGV9IGVycm9yVHlwZSAtIEVycm9yIHR5cGUgYXNzb2NpYXRlZCAoZXJyb3IsIHJldHJ5LCByZXNwb25zZSlcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmVtb3RlQ2FsbElkIC0gSWQgZm9yIHJlbW90ZSBjYWxsXG4gICAgICogQHBhcmFtIHtleHRlbmRzIFN1cGVydHlwZX0gcmVtb3RlT2JqIC0gSW5zdGFuY2UgZm9yIHdoaWNoIHRoZSByZW1vdGUgb2JqZWN0IGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3IgLSBAVE9ETzogcmV2aXNpdCB3aGVuIHdlIGNyZWF0ZSBhIHByb3BlciByZW1vdGVhYmxlIHR5cGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZnVuY3Rpb25OYW1lIC0gTmFtZSBvZiBmdW5jdGlvbiBiZWluZyBjYWxsZWRcbiAgICAgKiBAcGFyYW0ge0NhbGxDb250ZXh0fSBjYWxsQ29udGV4dCAtIENvbnRleHQgKG51bWJlciBvZiByZXRyaWVzIGV0YylcbiAgICAgKiBAcGFyYW0ge0NoYW5nZVN0cmluZ30gY2hhbmdlU3RyaW5nIC0gT2JqZWN0IG9mIENoYW5nZXMgLSBLZXkgaXMgW0NsYXNzTmFtZV0uW3Byb3BlcnR5TmFtZV0sIFZhbHVlIGlzIFtjaGFuZ2VkVmFsdWVdIGV4YW1wbGU6IHsnQ3VzdG9tZXIubWlkZGxlbmFtZSc6ICdLYXJlbid9LCBTZWUgYWJvdmUgbm90ZVxuICAgICAqXG4gICAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAgICogQG1lbWJlcm9mIENvbnRyb2xsZXJcbiAgICAgKi9cbiAgICBwb3N0U2VydmVyRXJyb3JIYW5kbGVyPyhlcnJvclR5cGU6IEVycm9yVHlwZSwgcmVtb3RlQ2FsbElkOiBudW1iZXIsIHJlbW90ZU9iajogU3VwZXJ0eXBlLCBmdW5jdGlvbk5hbWU6IHN0cmluZywgY2FsbENvbnRleHQ6IENhbGxDb250ZXh0LCBjaGFuZ2VTdHJpbmc6IENoYW5nZVN0cmluZyk6IFByb21pc2U8dm9pZD47XG5cbiAgICAvKipcbiAgICAgKiBAc2VydmVyXG4gICAgICpcbiAgICAgKiBDYWxsYmFjayBiZWZvcmUgYSByZW1vdGUgZnVuY3Rpb24gY2FsbCAoMXN0IHN0ZXAgb2YgYSByZW1vdGUgY2FsbClcbiAgICAgKlxuICAgICAqIFdlIGNhbiB1dGlsaXplIHRoaXMgZnVuY3Rpb24gYXMgYSBnZW5lcmljIGZ1bmN0aW9uIGhhbmRsZXIgdG8gcnVuIGJlZm9yZSB3ZSBjYWxsIGFcbiAgICAgKiByZW1vdGUgZnVuY3Rpb24gb3IgYmVmb3JlIHdlIGFwcGx5IGNoYW5nZXMgZnJvbSB0aGUgY2xpZW50IHRvIHRoZSBzZXJ2ZXJcbiAgICAgKlxuICAgICAqIFdlIGNhbiBhbHNvIHV0aWxpemUgdGhpcyBmdW5jdGlvbiB0byBkbyBhbnkgY29udGV4dC1zcGVjaWZpYyBwcmVwIHdvcmsgLyBsb2FkaW5nXG4gICAgICogaWYgdGhpcyBhIHN1YnNlcXVlbnQgdHJ5IG9mIHRoaXMgZnVuY3Rpb24gZHVlIHRvIGFuIHVwZGF0ZSBjb25mbGljdC5cbiAgICAgKlxuICAgICAqIFNlZSByZW1vdGUgY2FsbCBkb2N1bWVudGF0aW9uIHRvIGtub3cgd2hlcmUgdGhpcyBleGVjdXRlcyBpbiB0aGUgbGlmZWN5Y2xlXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhhc0NoYW5nZXMgLSBXaGV0aGVyIG9yIG5vdCB3ZSBoYXZlIGFwcGxpZWQgY2xpZW50IGNoYW5nZXMgb250byB0aGUgc2VydmVyJ3Mgb2JqZWN0IGdyYXBoXG4gICAgICogQHBhcmFtIHtQcmVTZXJ2ZXJDYWxsQ2hhbmdlc30gY2hhbmdlcyAtIERpY3Rpb25hcnkgb2YgT2JqZWN0cyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkIGZyb20gdGhlIGNsaWVudFxuICAgICAqIEBwYXJhbSB7Q2FsbENvbnRleHR9IGNhbGxDb250ZXh0IC0gQ29udGV4dCAobnVtYmVyIG9mIHJldHJpZXMgZXRjKVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZvcmNlVXBkYXRlXSAtIE9wdGlvbmFsIHBhcmFtZXRlciBwYXNzZWQgaW4uIFRydWUgaWYgdGhpcyBpcyBhIHJldHJ5IG9mIHRoZSBjYWxsIGJhc2VkIG9uIGFuIHVwZGF0ZSBjb25mbGljdC4gRmFsc2UgLyB1bmRlZmluZWQgb3RoZXJ3aXNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGZ1bmN0aW9uTmFtZVxuICAgICAqIEBwYXJhbSByZW1vdGVDYWxsXG4gICAgICogQHBhcmFtIGlzUHVibGljXG4gICAgICogQHBhcmFtIEhUVFBPYmpzXG4gICAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAgICogQG1lbWJlcm9mIENvbnRyb2xsZXJcbiAgICAgKi9cbiAgICBwcmVTZXJ2ZXJDYWxsPyhoYXNDaGFuZ2VzOiBib29sZWFuLCBjaGFuZ2VzOiBQcmVTZXJ2ZXJDYWxsQ2hhbmdlcywgY2FsbENvbnRleHQ6IENhbGxDb250ZXh0LCBmb3JjZVVwZGF0ZTogdW5kZWZpbmVkIHwgYm9vbGVhbiwgZnVuY3Rpb25OYW1lOiBzdHJpbmcsIHJlbW90ZUNhbGw6IFJlbW90ZUNhbGwsIGlzUHVibGljOiBib29sZWFuLCBIVFRQT2Jqcz86IEhUVFBPYmpzICk6IFByb21pc2U8YW55PjtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgYSBoYW5kbGVyIHRoYXQgd2lsbCBvbmx5IGJlIHVzZWQgZm9yIHRlc3RpbmcgYW5kIGRlYnVnZ2luZyBwdXJwb3Nlc1xuICAgICAqXG4gICAgICogV2hlbiB0aGlzIGlzIHVzZWQsIGFsbG93cyB1cyB0byBpbnNwZWN0IHRoZSBtZXNzYWdlIGJvZHkgYmVmb3JlIHdlIHNlbmQgaXQgb3V0IGluICdwYWNrYWdlQ2hhbmdlcydcbiAgICAgKlxuICAgICAqIERPIE5PVCBVU0UgVEhJUyBJTiBQUk9EVUNUSU9OIENPREVcbiAgICAgKlxuICAgICAqIEBwYXJhbSBtZXNzYWdlXG4gICAgICovXG4gICAgaW5zcGVjdE1lc3NhZ2U/KG1lc3NhZ2UpOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2Vtb3R1cyB7XG4gICAgc2V0U3luY1N0YXRlOiAoc3RyKSA9PiB2b2lkO1xuICAgIHN5bmNTdGF0ZTogc3RyaW5nO1xuICAgIGdldFN5bmNTdGF0ZTogKCkgPT4gYW55O1xuICAgIG1heENhbGxUaW1lOiBudW1iZXI7XG4gICAgX19kaWN0aW9uYXJ5X186IGFueTtcbiAgICBtZW1TZXNzaW9uOiB7IHNlbW90dXM6IHsgY2FsbFN0YXJ0VGltZTogbnVtYmVyIH0gfTtcbiAgICBfaW5qZWN0SW50b1RlbXBsYXRlOiAodGVtcGxhdGUpID0+IHZvaWQ7XG4gICAgc2VyaWFsaXplQW5kR2FyYmFnZUNvbGxlY3Q6ICgpID0+IGFueTtcbiAgICBnZXRNZXNzYWdlOiAoc2Vzc2lvbklkLCBmb3JjZU1lc3NhZ2UpID0+IGFueTtcbiAgICBjbGVhclBlbmRpbmdDYWxsczogKHNlc3Npb25JZCkgPT4gdm9pZDtcbiAgICBnZXRDaGFuZ2VHcm91cDogKHR5cGUsIHN1YnNjcmlwdGlvbklkKSA9PiBDaGFuZ2VHcm91cDtcbiAgICBkZWxldGVDaGFuZ2VHcm91cDogKHR5cGU6IGFueSwgc3Vic2NyaXB0aW9uSWQ6IGFueSkgPT4gdm9pZDtcbiAgICBnZXRDaGFuZ2VTdGF0dXM6ICgpID0+IHN0cmluZztcbiAgICBfc3Rhc2hPYmplY3Q6IChvYmosIHRlbXBsYXRlKSA9PiBib29sZWFuO1xuICAgIHNlc3Npb25pemU6IChvYmosIHJlZmVyZW5jaW5nT2JqKSA9PiAodW5kZWZpbmVkIHwgYW55KTtcbiAgICBfc2V0dXBGdW5jdGlvbjogKHByb3BlcnR5TmFtZSwgcHJvcGVydHlWYWx1ZSwgcm9sZSwgdmFsaWRhdGUsIHNlcnZlclZhbGlkYXRpb24sIGlzUHVibGljOiBib29sZWFuLCB0ZW1wbGF0ZSkgPT4gKGFueSk7XG4gICAgX3NldHVwUHJvcGVydHk6IChwcm9wZXJ0eU5hbWUsIGRlZmluZVByb3BlcnR5LCBvYmplY3RQcm9wZXJ0aWVzLCBkZWZpbmVQcm9wZXJ0aWVzKSA9PiB2b2lkO1xuICAgIHdpdGhvdXRDaGFuZ2VUcmFja2luZzogKGNiKSA9PiB2b2lkO1xuICAgIF9jaGFuZ2VkVmFsdWU6IChvYmosIHByb3AsIHZhbHVlKSA9PiB2b2lkO1xuICAgIF9yZWZlcmVuY2VkQXJyYXk6IChvYmosIHByb3AsIGFycmF5UmVmLCBzZXNzaW9uSWQ/KSA9PiB2b2lkO1xuICAgIF9jb252ZXJ0QXJyYXlSZWZlcmVuY2VzVG9DaGFuZ2VzOiAoKSA9PiB2b2lkO1xuICAgIE1hcmtDaGFuZ2VkQXJyYXlSZWZlcmVuY2VzOiAoKSA9PiB2b2lkO1xuICAgIF9jb252ZXJ0VmFsdWU6ICh2YWx1ZSkgPT4gKGFueVtdIHwgbnVsbCk7XG4gICAgZ2V0T2JqZWN0OiAob2JqSWQsIHRlbXBsYXRlKSA9PiAoYW55IHwgbnVsbCk7XG4gICAgX2FwcGx5Q2hhbmdlczogKGNoYW5nZXMsIGZvcmNlLCBzdWJzY3JpcHRpb25JZCwgY2FsbENvbnRleHQpID0+IChudW1iZXIpO1xuICAgIF9hcHBseU9iamVjdENoYW5nZXM6IChjaGFuZ2VzLCByb2xsYmFjaywgb2JqLCBmb3JjZSkgPT4gKGJvb2xlYW4pO1xuICAgIF92YWxpZGF0ZVNlcnZlckluY29taW5nUHJvcGVydHk6IChvYmosIHByb3AsIGRlZmluZVByb3BlcnR5LCBuZXdWYWx1ZSkgPT4gKGJvb2xlYW4pO1xuICAgIF9hcHBseVByb3BlcnR5Q2hhbmdlOiAoY2hhbmdlcywgcm9sbGJhY2ssIG9iaiwgcHJvcCwgaXgsIG9sZFZhbHVlLCBuZXdWYWx1ZSwgZm9yY2UpID0+IChib29sZWFuKTtcbiAgICBfcm9sbGJhY2s6IChyb2xsYmFjaykgPT4gdm9pZDtcbiAgICBfcm9sbGJhY2tDaGFuZ2VzOiAoKSA9PiB2b2lkO1xuICAgIF9jcmVhdGVFbXB0eU9iamVjdDogKHRlbXBsYXRlLCBvYmpJZCwgZGVmaW5lUHJvcGVydHksIGlzVHJhbnNpZW50KSA9PiBhbnk7XG4gICAgaW5qZWN0OiAodGVtcGxhdGUsIGluamVjdG9yKSA9PiB2b2lkO1xuICAgIF9xdWV1ZVJlbW90ZUNhbGw6IChvYmpJZCwgZnVuY3Rpb25OYW1lLCBkZWZlcnJlZCwgYXJncykgPT4gdm9pZDtcbiAgICBfcHJvY2Vzc1F1ZXVlOiAoKSA9PiB2b2lkO1xuICAgIF90b1RyYW5zcG9ydDogKG9iaikgPT4gYW55O1xuICAgIF9mcm9tVHJhbnNwb3J0OiAob2JqKSA9PiBhbnk7XG4gICAgX2V4dHJhY3RBcmd1bWVudHM6IChyZW1vdGVDYWxsKSA9PiBhbnk7XG4gICAgX3RyaW1BcnJheTogKGFycmF5KSA9PiB2b2lkO1xuICAgIF9kZWxldGVDaGFuZ2VHcm91cHM6ICh0eXBlKSA9PiB2b2lkO1xuICAgIF9nZXRTdWJzY3JpcHRpb25zOiAoc2Vzc2lvbklkPykgPT4gU3Vic2NyaXB0aW9ucyB8IG51bGw7XG4gICAgX2dldFN1YnNjcmlwdGlvbjogKHN1YnNjcmlwdGlvbklkPykgPT4gU3Vic2NyaXB0aW9uO1xuICAgIGNsZWFuUHJpdmF0ZVZhbHVlczogKHByb3AsIGxvZ1ZhbHVlLCBkZWZpbmVQcm9wZXJ0eSkgPT4gKHN0cmluZyB8IGFueSk7XG4gICAgUmVtb3RlYWJsZTogKEJhc2UpID0+ICgpID0+IGFueTtcbiAgICBCaW5kYWJsZTogKEJhc2UpID0+ICgpID0+IGFueTtcbiAgICBQZXJzaXN0YWJsZTogKEJhc2UpID0+ICgpID0+IGFueTtcbiAgICBiaW5kRGVjb3JhdG9yczogKG9iamVjdFRlbXBsYXRlPykgPT4gdm9pZDtcbiAgICBwcm9jZXNzTWVzc2FnZTogKHJlbW90ZUNhbGwsIHN1YnNjcmlwdGlvbklkLCByZXN0b3JlU2Vzc2lvbkNhbGxiYWNrLCByZXE/OiBSZXF1ZXN0LCByZXM/OiBSZXNwb25zZSkgPT4gKHVuZGVmaW5lZCB8IGFueSk7XG4gICAgZW5hYmxlU2VuZE1lc3NhZ2U6ICh2YWx1ZSwgbWVzc2FnZUNhbGxiYWNrLCBzZXNzaW9uSWQpID0+IHZvaWQ7XG4gICAgc3luY1Nlc3Npb246IChzZXNzaW9uSWQpID0+IHZvaWQ7XG4gICAgcmVzdG9yZVNlc3Npb246IChzZXNzaW9uSWQsIHNhdmVkU2Vzc2lvbjogU2F2ZWRTZXNzaW9uLCBzZW5kTWVzc2FnZTogU2VuZE1lc3NhZ2UpID0+IGJvb2xlYW47XG4gICAgc2F2ZVNlc3Npb246IChzZXNzaW9uSWQpID0+IFNhdmVkU2Vzc2lvbjtcbiAgICBzZXRNaW5pbXVtU2VxdWVuY2U6IChuZXh0T2JqSWQpID0+IHZvaWQ7XG4gICAgZGVsZXRlU2Vzc2lvbjogKHNlc3Npb25JZCkgPT4gdm9pZDtcbiAgICBjcmVhdGVTZXNzaW9uOiAocm9sZTogYW55LCBzZW5kTWVzc2FnZTogU2VuZE1lc3NhZ2UsIHNlc3Npb25JZDogYW55KSA9PiBhbnk7XG4gICAgbG9nOiAobGV2ZWwsIGRhdGEpID0+IHZvaWQ7XG4gICAgbmV4dE9iaklkOiBudW1iZXI7XG4gICAgbWF4Q2xpZW50U2VxdWVuY2U6IG51bWJlcjtcbiAgICBsb2dMZXZlbDogbnVtYmVyO1xuICAgIF9fY29uZmxpY3RNb2RlX186IHN0cmluZztcbiAgICBfX2NoYW5nZVRyYWNraW5nX186IGJvb2xlYW47XG4gICAgX3VzZUdldHRlcnNTZXR0ZXJzOiBib29sZWFuO1xuICAgIGxvZ2dlcjogYW55O1xuICAgIHJvbGU6IGFueTtcbiAgICBjdXJyZW50U2Vzc2lvbjogYW55O1xuICAgIHNlc3Npb25zPzogU2Vzc2lvbnM7XG4gICAgbmV4dFN1YnNjcmlwdGlvbklkOiBudW1iZXI7XG4gICAgbmV4dFNlc3Npb25JZDogbnVtYmVyO1xuICAgIGNvbnRyb2xsZXI6IElTZW1vdHVzQ29udHJvbGxlcjtcbiAgICBjaGFuZ2VTdHJpbmc6IHN0cmluZztcbiAgICBtb2R1bGVOYW1lOiBzdHJpbmc7XG5cblxuICAgIF9nZXRTZXNzaW9uKF9zaWQ/OiBhbnkpOiBTZXNzaW9uO1xuXG4gICAgc3Vic2NyaWJlKHJvbGU6IGFueSk6IG51bWJlcjtcblxuICAgIHNldFNlc3Npb24oc2Vzc2lvbklkOiBhbnkpOiB2b2lkO1xuXG4gICAgZ2V0Q2hhbmdlcyhzdWJzY3JpcHRpb25JZD86IGFueSk6IENoYW5nZUdyb3VwO1xuXG4gICAgX2RlbGV0ZUNoYW5nZXMoKTogdm9pZDtcblxuICAgIGdldFBlbmRpbmdDYWxsQ291bnQoc2Vzc2lvbklkOiBhbnkpOiBhbnk7XG59XG4iXX0=

@@ -269,2 +269,3 @@ import {Supertype} from '@haventech/supertype';

changeString: string;
moduleName: string;

@@ -271,0 +272,0 @@

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

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