@kepler.gl/reducers 3.1.0-alpha.5 → 3.1.0-alpha.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/map-style-updaters.js +3 -4
- package/dist/provider-state-updaters.d.ts +4 -0
- package/dist/provider-state-updaters.js +149 -34
- package/dist/provider-state.js +2 -2
- package/dist/ui-state-updaters.d.ts +10 -0
- package/dist/ui-state-updaters.js +22 -2
- package/dist/ui-state.js +2 -2
- package/dist/vis-state-updaters.js +21 -5
- package/package.json +16 -16
|
@@ -2142,6 +2142,14 @@ var updateVisDataUpdater = exports.updateVisDataUpdater = function updateVisData
|
|
|
2142
2142
|
options: options
|
|
2143
2143
|
}
|
|
2144
2144
|
}) : state;
|
|
2145
|
+
|
|
2146
|
+
// indicate that something is in progress
|
|
2147
|
+
var setIsLoadingTask = (0, _tasks2.ACTION_TASK)().map(function () {
|
|
2148
|
+
return (0, _actions.setLoadingIndicator)({
|
|
2149
|
+
change: 1
|
|
2150
|
+
});
|
|
2151
|
+
});
|
|
2152
|
+
var updatedState = (0, _tasks.withTask)(previousState, setIsLoadingTask);
|
|
2145
2153
|
var datasets = (0, _commonUtils.toArray)(action.datasets);
|
|
2146
2154
|
var allCreateDatasetsTasks = datasets.map(function (_ref17) {
|
|
2147
2155
|
var _ref17$info = _ref17.info,
|
|
@@ -2152,13 +2160,13 @@ var updateVisDataUpdater = exports.updateVisDataUpdater = function updateVisData
|
|
|
2152
2160
|
}, rest), state.datasets) || {};
|
|
2153
2161
|
});
|
|
2154
2162
|
// call all Tasks
|
|
2155
|
-
var
|
|
2163
|
+
var datasetTasks = _tasks["default"].allSettled(allCreateDatasetsTasks).map(function (results) {
|
|
2156
2164
|
return (0, _actions.createNewDatasetSuccess)({
|
|
2157
2165
|
results: results,
|
|
2158
2166
|
addToMapOptions: options
|
|
2159
2167
|
});
|
|
2160
2168
|
});
|
|
2161
|
-
return (0, _tasks.withTask)(
|
|
2169
|
+
return (0, _tasks.withTask)(updatedState, datasetTasks);
|
|
2162
2170
|
};
|
|
2163
2171
|
var createNewDatasetSuccessUpdater = exports.createNewDatasetSuccessUpdater = function createNewDatasetSuccessUpdater(state, action) {
|
|
2164
2172
|
// console.log('createNewDatasetSuccessUpdater', action.payload);
|
|
@@ -2171,7 +2179,7 @@ var createNewDatasetSuccessUpdater = exports.createNewDatasetSuccessUpdater = fu
|
|
|
2171
2179
|
return _objectSpread(_objectSpread({}, accu), {}, (0, _defineProperty2["default"])({}, dataset.id, dataset));
|
|
2172
2180
|
} else {
|
|
2173
2181
|
// handle create dataset error
|
|
2174
|
-
console.error(result.reason);
|
|
2182
|
+
console.error('createNewDatasetSuccessUpdater: failed', result.reason || result.value);
|
|
2175
2183
|
return accu;
|
|
2176
2184
|
}
|
|
2177
2185
|
}, {});
|
|
@@ -2193,10 +2201,18 @@ var createNewDatasetSuccessUpdater = exports.createNewDatasetSuccessUpdater = fu
|
|
|
2193
2201
|
options: addToMapOptions,
|
|
2194
2202
|
layerMergers: layerMergers
|
|
2195
2203
|
};
|
|
2196
|
-
|
|
2204
|
+
var updatedState = applyMergersUpdater(mergedState, {
|
|
2197
2205
|
mergers: datasetMergers,
|
|
2198
2206
|
postMergerPayload: postMergerPayload
|
|
2199
2207
|
});
|
|
2208
|
+
|
|
2209
|
+
// resolve active loading initiated by updateVisDataUpdater
|
|
2210
|
+
var setIsLoadingTask = (0, _tasks2.ACTION_TASK)().map(function () {
|
|
2211
|
+
return (0, _actions.setLoadingIndicator)({
|
|
2212
|
+
change: -1
|
|
2213
|
+
});
|
|
2214
|
+
});
|
|
2215
|
+
return (0, _tasks.withTask)(updatedState, setIsLoadingTask);
|
|
2200
2216
|
};
|
|
2201
2217
|
|
|
2202
2218
|
/**
|
|
@@ -3496,4 +3512,4 @@ function replacePropValueInState(state, replacedItem, _ref38) {
|
|
|
3496
3512
|
}
|
|
3497
3513
|
return nextState;
|
|
3498
3514
|
}
|
|
3499
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYmJveCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2NvcHlUb0NsaXBib2FyZCIsIl9kZWVwbWVyZ2UiLCJfd2luZG93IiwiX2xvZGFzaCIsIl9sb2Rhc2gyIiwiX2xvZGFzaDMiLCJfbG9kYXNoNCIsIl9sb2Rhc2g1IiwiX2xvZGFzaDYiLCJfdGFza3MiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl90YXNrczIiLCJfYWN0aW9ucyIsIl91dGlscyIsIl9jb21tb25VdGlscyIsIl9jb25zdGFudHMiLCJfbGF5ZXJzIiwiX2NvbXBvc2VySGVscGVycyIsIl9tZXJnZXJIYW5kbGVyIiwiX3Zpc1N0YXRlTWVyZ2VyIiwiX3NjaGVtYXMiLCJfdGFibGUiLCJfaW50ZXJhY3Rpb25VdGlscyIsIl9sYXllclV0aWxzIiwiX2VmZmVjdHMiLCJfZGF0YVV0aWxzIiwiX2V4Y2x1ZGVkIiwiX2V4Y2x1ZGVkMiIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIl90b1Byb3BlcnR5S2V5IiwiX3RvUHJpbWl0aXZlIiwiU3ltYm9sIiwidG9QcmltaXRpdmUiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJOdW1iZXIiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibGVuZ3RoIiwiX24iLCJGIiwicyIsImRvbmUiLCJ2YWx1ZSIsImYiLCJvIiwibmV4dCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0Iiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkaXNhYmxlU3RhY2tDYXB0dXJpbmciLCJ2aXNTdGF0ZVVwZGF0ZXJzIiwiZGVmYXVsdEludGVyYWN0aW9uQ29uZmlnIiwiZXhwb3J0cyIsInRvb2x0aXAiLCJpZCIsImxhYmVsIiwiZW5hYmxlZCIsImNvbmZpZyIsImZpZWxkc1RvU2hvdyIsImNvbXBhcmVNb2RlIiwiY29tcGFyZVR5cGUiLCJDT01QQVJFX1RZUEVTIiwiQUJTT0xVVEUiLCJnZW9jb2RlciIsInBvc2l0aW9uIiwiYnJ1c2giLCJzaXplIiwiY29vcmRpbmF0ZSIsIkRFRkFVTFRfQU5JTUFUSU9OX0NPTkZJRyIsImRvbWFpbiIsImN1cnJlbnRUaW1lIiwic3BlZWQiLCJpc0FuaW1hdGluZyIsInRpbWVTdGVwcyIsInRpbWVGb3JtYXQiLCJ0aW1lem9uZSIsImRlZmF1bHRUaW1lRm9ybWF0IiwiaGlkZUNvbnRyb2wiLCJkdXJhdGlvbiIsIkRFRkFVTFRfRURJVE9SIiwibW9kZSIsIkVESVRPUl9NT0RFUyIsIkRSQVdfUE9MWUdPTiIsImZlYXR1cmVzIiwic2VsZWN0ZWRGZWF0dXJlIiwidmlzaWJsZSIsIklOSVRJQUxfVklTX1NUQVRFIiwibWFwSW5mbyIsInRpdGxlIiwiZGVzY3JpcHRpb24iLCJsYXllcnMiLCJsYXllckRhdGEiLCJsYXllclRvQmVNZXJnZWQiLCJsYXllck9yZGVyIiwiZmlsdGVycyIsImZpbHRlclRvQmVNZXJnZWQiLCJkYXRhc2V0cyIsImVkaXRpbmdEYXRhc2V0IiwidW5kZWZpbmVkIiwiZWZmZWN0cyIsImVmZmVjdE9yZGVyIiwiaW50ZXJhY3Rpb25Db25maWciLCJpbnRlcmFjdGlvblRvQmVNZXJnZWQiLCJsYXllckJsZW5kaW5nIiwib3ZlcmxheUJsZW5kaW5nIiwiaG92ZXJJbmZvIiwiY2xpY2tlZCIsIm1vdXNlUG9zIiwibWF4RGVmYXVsdFRvb2x0aXBzIiwiTUFYX0RFRkFVTFRfVE9PTFRJUFMiLCJzcGxpdE1hcHMiLCJzcGxpdE1hcHNUb0JlTWVyZ2VkIiwiaXNNZXJnaW5nRGF0YXNldHMiLCJsYXllckNsYXNzZXMiLCJMYXllckNsYXNzZXMiLCJhbmltYXRpb25Db25maWciLCJlZGl0b3IiLCJmaWxlTG9hZGluZyIsImZpbGVMb2FkaW5nUHJvZ3Jlc3MiLCJsb2FkZXJzIiwibG9hZE9wdGlvbnMiLCJtZXJnZXJzIiwiVklTX1NUQVRFX01FUkdFUlMiLCJzY2hlbWEiLCJLZXBsZXJHTFNjaGVtYSIsInVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YSIsInN0YXRlIiwiX3JlZiIsImxheWVyIiwiaWR4IiwibWFwIiwibHlyIiwiZCIsInVwZGF0ZVN0YXRlT25MYXllclZpc2liaWxpdHlDaGFuZ2UiLCJuZXdTdGF0ZSIsImlzVmlzaWJsZSIsImFkZE5ld0xheWVyc1RvU3BsaXRNYXAiLCJyZW1vdmVMYXllckZyb21TcGxpdE1hcHMiLCJhbmltYXRpb24iLCJ1cGRhdGVBbmltYXRpb25Eb21haW4iLCJwaWNrQ2hhbmdlZFByb3BzIiwicHJldiIsImNoYW5nZWRQcm9wcyIsInBpY2tQcm9wc09mIiwib2JqIiwia2V5IiwicHJvdG90eXBlIiwiaXNFcXVhbCIsIlZJU1VBTF9DSEFOTkVMX1BST1BfVFlQRVMiLCJhcHBseUxheWVyQ29uZmlnVXBkYXRlciIsImFjdGlvbiIsIl9zZXJpYWxpemVMYXllciIsIm9sZExheWVySWQiLCJuZXdMYXllckNvbmZpZyIsImxheWVySW5kZXgiLCJuZXdQYXJzZWRMYXllciIsInBhcnNlTGF5ZXJDb25maWciLCJvbGRMYXllciIsImZpbmQiLCJsIiwiZGF0YXNldCIsImRhdGFJZCIsIm5ld0xheWVyIiwidmFsaWRhdGVMYXllcldpdGhEYXRhIiwibmV4dFN0YXRlIiwidHlwZSIsIm9sZExheWVySW5kZXgiLCJmaW5kSW5kZXgiLCJsYXllclR5cGVDaGFuZ2VVcGRhdGVyIiwibGF5ZXJUeXBlQ2hhbmdlIiwibmV3TGF5ZXJJZCIsImFwcGx5TGF5ZXJDb25maWciLCJzZXJpYWxpemVkT2xkTGF5ZXIiLCJzZXJpYWxpemVMYXllciIsInNlcmlhbGl6ZWROZXdMYXllciIsImNoYW5nZWQiLCJ2aXNDb25maWciLCJsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJsYXllclZpc0NvbmZpZ0NoYW5nZSIsInZpc3VhbENoYW5uZWxzIiwiY2hhbm5lbE5hbWUiLCJjaGFubmVsIiwiY2hhbm5lbFByb3BOYW1lcyIsInByb3AiLCJzb21lIiwibGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlciIsImxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSIsInBpY2siLCJfaXRlcmF0b3IiLCJfc3RlcCIsImVyciIsImxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlciIsImxheWVyQ29uZmlnQ2hhbmdlIiwidXBkYXRlbGF5ZXJWaXNpYmlsdHkiLCJmaWx0ZXJJbmRleCIsImZpbHRlclN5bmNlZFdpdGhUaW1lbGluZSIsImlzTGF5ZXJBbmltYXRhYmxlIiwic3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZVVwZGF0ZXIiLCJlbmFibGUiLCJnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyIsInByb3BzIiwibmV3Q29uZmlnIiwiX2FjdGlvbiRuZXdDb25maWciLCJyZXN0Q29uZmlnIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzMiIsInN0YXRlV2l0aERhdGFJZCIsImxheWVyRGF0YUlkQ2hhbmdlVXBkYXRlciIsIm5leHRMYXllciIsInVwZGF0ZUxheWVyQ29uZmlnIiwic2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhIiwib2xkTGF5ZXJEYXRhIiwidXBkYXRlTGF5ZXJEYXRhUmVzdWx0IiwiY2FsY3VsYXRlTGF5ZXJEYXRhIiwibGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyIiwiX2NhbGN1bGF0ZUxheWVyRGF0YSIsImxheWVyVG9nZ2xlVmlzaWJpbGl0eVVwZGF0ZXIiLCJsYXllcklkIiwic3BsaXRNYXBJZCIsIm1hcEluZGV4Iiwic20iLCJ0b2dnbGVMYXllckZvck1hcFVwZGF0ZXIiLCJ0b2dnbGVMYXllckZvck1hcCIsInN5bmNlZFdpdGhMYXllclRpbWVsaW5lIiwibGF5ZXJTZXRJc1ZhbGlkVXBkYXRlciIsImlzVmFsaWQiLCJsYXllclRvVXBkYXRlIiwibmV3RGF0YSIsIl9jYWxjdWxhdGVMYXllckRhdGEyIiwiYWRkT3JSZW1vdmVUZXh0TGFiZWxzIiwibmV3RmllbGRzIiwidGV4dExhYmVsIiwiZGVmYXVsdFRleHRMYWJlbCIsIkRFRkFVTFRfVEVYVF9MQUJFTCIsIm5ld1RleHRMYWJlbCIsImN1cnJlbnRGaWVsZHMiLCJ0bCIsImZpZWxkIiwiYWRkRmllbGRzIiwiaW5jbHVkZXMiLCJkZWxldGVGaWVsZHMiLCJmZCIsImNvbmNhdCIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJhZiIsInVwZGF0ZVRleHRMYWJlbFByb3BBbmRWYWx1ZSIsInNwbGljZSIsImxheWVyVGV4dExhYmVsQ2hhbmdlVXBkYXRlciIsIl9vbGRMYXllciRnZXREZWZhdWx0TCIsIl9vbGRMYXllciRnZXREZWZhdWx0TDIiLCJnZXREZWZhdWx0TGF5ZXJDb25maWciLCJ2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YSIsImxvYWRlZExheWVyIiwiYWxsb3dFbXB0eUNvbHVtbiIsImlzVmFsaWRUb1NhdmUiLCJ2YWxpZGF0ZWQiLCJvbGRMYXllclR5cGUiLCJpc0NvbmZpZ0FjdGl2ZSIsInVwZGF0ZUxheWVyRG9tYWluIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTMiLCJzZXRJbml0aWFsTGF5ZXJDb25maWciLCJyZXN1bHQiLCJmaW5kRGVmYXVsdExheWVyUHJvcHMiLCJuZXdUeXBlIiwib2xkSWQiLCJDb25zb2xlIiwiZXJyb3IiLCJhc3NpZ25Db25maWdUb0xheWVyIiwidmlzQ29uZmlnU2V0dGluZ3MiLCJpc0xheWVySG92ZXJlZCIsIl9jYWxjdWxhdGVMYXllckRhdGE0Iiwic2V0dGluZ3MiLCJfc2V0dGluZ3MkbGF5ZXJzIiwib2xkTGF5ZXJNYXAiLCJvdGhlckxheWVycyIsIm5ld1Zpc0NvbmZpZyIsInVwZGF0ZUxheWVyVmlzQ29uZmlnIiwidXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsIiwidXBkYXRlZFN0YXRlIiwidmlzdWFsQ2hhbm5lbCIsImNoYW5uZWxTY2FsZVR5cGUiLCJDSEFOTkVMX1NDQUxFUyIsImNvbG9yIiwidXBkYXRlTGF5ZXJDb2xvclVJIiwicmFuZ2UiLCJjb2xvclJhbmdlQ29uZmlnIiwiY29sb3JVSSIsImN1c3RvbUJyZWFrcyIsIl9jYWxjdWxhdGVMYXllckRhdGE1Iiwic2NhbGUiLCJTQ0FMRV9UWVBFUyIsImN1c3RvbU9yZGluYWwiLCJjdXN0b21QYWxldHRlIiwiaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlIiwib3JkaW5hbERvbWFpbiIsImNvbG9yQnJlYWtzIiwic2hvd0NvbG9yQ2hhcnQiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNiIsInNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIiLCJfcmVmMiIsInJlZHVjZSIsImFjY3UiLCJzZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlciIsInNldEZpbHRlclVwZGF0ZXIiLCJzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyIiwiX3JlZjMiLCJhbmltYXRpb25XaW5kb3ciLCJuZXdGaWx0ZXIiLCJzd2FwXyIsIm5ld1N5bmNUaW1lbGluZU1vZGUiLCJnZXRTeW5jQW5pbWF0aW9uTW9kZSIsInNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyIiwiYXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyIiwiX3NlcmlhbGl6ZUZpbHRlciIsImZpbHRlcklkIiwib2xkRmlsdGVyIiwic2VyaWFsaXplZE9sZEZpbHRlciIsInNlcmlhbGl6ZUZpbHRlciIsInNlcmlhbGl6ZWROZXdGaWx0ZXIiLCJzZXRGaWx0ZXIiLCJ2YWx1ZXMiLCJfYWN0aW9uJHZhbHVlSW5kZXgiLCJ2YWx1ZUluZGV4IiwidG9BcnJheSIsImRhdGFzZXRJZHNUb0ZpbHRlciIsIl9sb29wIiwicmVzIiwidiIsIl91cGRhdGVGaWx0ZXJQcm9wIiwiZW5sYXJnZWRGaWx0ZXIiLCJ2aWV3IiwiRklMVEVSX1ZJRVdfVFlQRVMiLCJlbmxhcmdlZCIsInNpZGUiLCJmaWx0ZXJlZERhdGFzZXRzIiwiYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyIsInVuaXEiLCJmaWx0ZXJXaXRoUExvdCIsInVwZGF0ZUZpbHRlclBsb3QiLCJ1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEiLCJGSUxURVJfVFlQRVMiLCJ0aW1lUmFuZ2UiLCJhZGp1c3RBbmltYXRpb25Db25maWdXaXRoRmlsdGVyIiwiX3VwZGF0ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleCIsIl9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgiLCJuZXh0VmFsdWUiLCJnZXREZWZhdWx0RmlsdGVyIiwicmVtb3ZlRmlsdGVyUGxvdCIsIl9pIiwiX2FyciIsIm5leHRWYWwiLCJkb21haW5TdGVwcyIsIm1lcmdlRmlsdGVyRG9tYWluIiwibmV4dEZpbHRlciIsInN0ZXAiLCJhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluIiwiZGF0YXNldElkcyIsIkZJTFRFUl9VUERBVEVSX1BST1BTIiwib2xkRGF0YUlkIiwiZGF0YXNldElkIiwiX2FwcGx5RmlsdGVyRmllbGROYW1lIiwiYXBwbHlGaWx0ZXJGaWVsZE5hbWUiLCJtZXJnZURvbWFpbiIsInVwZGF0ZWRGaWx0ZXIiLCJuZXdEYXRhc2V0IiwiZ3B1Iiwic2V0RmlsdGVyR3B1TW9kZSIsImFzc2lnbkdwdUNoYW5uZWwiLCJsYXllcklkRGlmZmVyZW5jZSIsInhvciIsImxheWVyRGF0YUlkcyIsImxpZCIsIm5ld0RhdGFJZHMiLCJzZXRGaWx0ZXJQbG90VXBkYXRlciIsIl9yZWY0IiwibmV3UHJvcCIsIl9yZWY0JHZhbHVlSW5kZXgiLCJwaWNrXyIsIm1lcmdlXyIsInBsb3RUeXBlIiwiY2hhcnRUeXBlIiwieUF4aXMiLCJQTE9UX1RZUEVTIiwibGluZUNoYXJ0IiwiaGlzdG9ncmFtIiwiYWRkRmlsdGVyVXBkYXRlciIsImNyZWF0ZU9yVXBkYXRlRmlsdGVyVXBkYXRlciIsIm9yaWdpbmFsSW5kZXgiLCJpbmRleCIsImxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXIiLCJfcmVmNSIsIm9sZFZpeENvbmZpZyIsInRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXIiLCJpc0ZpbHRlckFuaW1hdGlvbkNvbmZpZyIsInNldEFuaW1hdGlvbkNvbmZpZ1VwZGF0ZXIiLCJpc1NpZGVGaWx0ZXIiLCJhcHBseUZpbHRlckNvbmZpZyIsInRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlciIsInRvZ2dsZUxheWVyQW5pbWF0aW9uQ29udHJvbFVwZGF0ZXIiLCJ1cGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIiLCJ1cGRhdGVMYXllckFuaW1hdGlvblNwZWVkVXBkYXRlciIsIl9yZWY2Iiwic2V0RmlsdGVyVmlld1VwZGF0ZXIiLCJzaG91bGRSZXNldE90aGVyRmlsdGVyc1ZpZXciLCJ0b2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlciIsImZlYXR1cmVUb0ZpbHRlclZhbHVlIiwicmVtb3ZlRmlsdGVyVXBkYXRlciIsIl9zdGF0ZSRmaWx0ZXJzJGlkeCIsIm5ld0ZpbHRlcnMiLCJuZXdFZGl0b3IiLCJnZXRGaWx0ZXJJZEluRmVhdHVyZSIsImFkZExheWVyVXBkYXRlciIsIm5ld0xheWVyRGF0YSIsImNyZWF0ZUxheWVyRnJvbUNvbmZpZyIsIndhcm4iLCJfYWN0aW9uJGRhdGFzZXRJZCIsImRlZmF1bHREYXRhc2V0IiwiTGF5ZXIiLCJyZW1vdmVMYXllclVwZGF0ZXIiLCJfcmVmNyIsImlzRmluaXRlIiwibGF5ZXJUb1JlbW92ZSIsImZpbHRlck91dEJ5SWQiLCJyZW1vdmVFbGVtZW50QXRJbmRleCIsInJlb3JkZXJMYXllclVwZGF0ZXIiLCJfcmVmOCIsIm9yZGVyIiwiZHVwbGljYXRlTGF5ZXJVcGRhdGVyIiwiX3JlZjkiLCJvcmlnaW5hbCIsIm9yaWdpbmFsTGF5ZXJPcmRlcklkeCIsIm5ld0xhYmVsIiwicG9zdGZpeCIsImdlbmVyYXRlSGFzaElkIiwiTEFZRVJfSURfTEVOR1RIIiwibmV3TGF5ZXJPcmRlciIsImFycmF5SW5zZXJ0IiwiYWRkRWZmZWN0VXBkYXRlciIsIl9hY3Rpb24kY29uZmlnIiwiTElHSFRfQU5EX1NIQURPV19FRkZFQ1QiLCJlZmZlY3QiLCJuZXdFZmZlY3QiLCJjcmVhdGVFZmZlY3QiLCJzZXRQcm9wcyIsImZpeEVmZmVjdE9yZGVyIiwicmVtb3ZlRWZmZWN0VXBkYXRlciIsIl9yZWYxMCIsImVmZmVjdFRvUmVtb3ZlIiwiZWZmZWN0SWQiLCJyZW9yZGVyRWZmZWN0VXBkYXRlciIsIl9yZWYxMSIsInVwZGF0ZUVmZmVjdFVwZGF0ZXIiLCJfcmVmMTIiLCJpZHgyIiwiZWZmZWN0T3JkZXJJZCIsIm5ld0VmZmVjdHMiLCJyZW1vdmVEYXRhc2V0VXBkYXRlciIsImRhdGFzZXRLZXkiLCJfc3RhdGUkZGF0YXNldHMiLCJuZXdEYXRhc2V0cyIsImxheWVyc1RvUmVtb3ZlIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsImluZGV4T2YiLCJyZW1vdmVEYXRhc2V0RnJvbUludGVyYWN0aW9uQ29uZmlnIiwiX3JlZjEzIiwiX2ludGVyYWN0aW9uQ29uZmlnIiwiX2NvbmZpZyRmaWVsZHNUb1Nob3ciLCJmaWVsZHMiLCJ1cGRhdGVMYXllckJsZW5kaW5nVXBkYXRlciIsInVwZGF0ZU92ZXJsYXlCbGVuZGluZ1VwZGF0ZXIiLCJzaG93RGF0YXNldFRhYmxlVXBkYXRlciIsInVwZGF0ZVRhYmxlQ29sb3JVcGRhdGVyIiwidXBkYXRlRGF0YXNldFByb3BzVXBkYXRlciIsIm5ld0NvbG9yIiwicmVzZXRNYXBDb25maWdVcGRhdGVyIiwiaW5pdGlhbFN0YXRlIiwicmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIiLCJfcmVmMTQiLCJfcmVmMTQkcGF5bG9hZCIsInBheWxvYWQiLCJfcmVmMTQkcGF5bG9hZCRjb25maWciLCJfcmVmMTQkcGF5bG9hZCRvcHRpb24iLCJvcHRpb25zIiwidmlzU3RhdGUiLCJrZWVwRXhpc3RpbmdDb25maWciLCJtZXJnZWRTdGF0ZSIsIl9pdGVyYXRvcjMiLCJfc3RlcDMiLCJtZXJnZXIiLCJpc1ZhbGlkTWVyZ2VyIiwiaGFzUHJvcHNUb01lcmdlIiwibWVyZ2UiLCJnZXRQcm9wVmFsdWVUb01lcmdlciIsInRvTWVyZ2VQcm9wIiwibGF5ZXJIb3ZlclVwZGF0ZXIiLCJpbmZvIiwiaW50ZXJhY3Rpb25Db25maWdDaGFuZ2VVcGRhdGVyIiwiY29udHJhZGljdCIsImsiLCJsYXllckNsaWNrVXBkYXRlciIsInBpbm5lZCIsImNsb25lRGVlcCIsInBpY2tlZCIsIm1hcENsaWNrVXBkYXRlciIsIm1vdXNlTW92ZVVwZGF0ZXIiLCJfcmVmMTUiLCJldnQiLCJwb2ludCIsIm1vdXNlUG9zaXRpb24iLCJsbmdMYXQiLCJ0b2dnbGVTcGxpdE1hcFVwZGF0ZXIiLCJjb21wdXRlU3BsaXRNYXBMYXllcnMiLCJkdXBsaWNhdGUiLCJjbG9zZVNwZWNpZmljTWFwQXRJbmRleCIsIl9yZWYxNiIsInVwZGF0ZVZpc0RhdGFVcGRhdGVyIiwicHJldmlvdXNTdGF0ZSIsImFsbENyZWF0ZURhdGFzZXRzVGFza3MiLCJfcmVmMTciLCJfcmVmMTckaW5mbyIsInJlc3QiLCJjcmVhdGVOZXdEYXRhRW50cnkiLCJ0YXNrcyIsIlRhc2siLCJhbGxTZXR0bGVkIiwicmVzdWx0cyIsImNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzIiwiYWRkVG9NYXBPcHRpb25zIiwid2l0aFRhc2siLCJjcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIiLCJfYWN0aW9uJHBheWxvYWQiLCJuZXdEYXRhRW50cmllcyIsInN0YXR1cyIsImNvbnNvbGUiLCJyZWFzb24iLCJtZXJnZURhdGFzZXRzQnlPcmRlciIsImxheWVyTWVyZ2VycyIsIm0iLCJ3YWl0Rm9yTGF5ZXJEYXRhIiwiZGF0YXNldE1lcmdlcnMiLCJwb3N0TWVyZ2VyUGF5bG9hZCIsImFwcGx5TWVyZ2Vyc1VwZGF0ZXIiLCJtZXJnZVN0YXRlUmVzdWx0IiwibWVyZ2VTdGF0ZUZyb21NZXJnZXJzIiwiYWxsTWVyZ2VkIiwicG9zdE1lcmdlVXBkYXRlciIsImZEYXRhSWQiLCJkYXRhc2V0RmlsdGVyZWQiLCJkYXRhRW1wdHkiLCJuZXdMYXllcnMiLCJhdXRvQ3JlYXRlTGF5ZXJzIiwiYWRkRGVmYXVsdExheWVycyIsInRvb2x0aXBGaWVsZHMiLCJhdXRvQ3JlYXRlVG9vbHRpcHMiLCJhZGREZWZhdWx0VG9vbHRpcHMiLCJ1cGRhdGVkRGF0YXNldHMiLCJjZW50ZXJNYXAiLCJib3VuZHMiLCJmaW5kTWFwQm91bmRzIiwiZml0Qm91bmRzVGFzayIsIkFDVElPTl9UQVNLIiwiZml0TWFwQm91bmRzIiwicmVuYW1lRGF0YXNldFVwZGF0ZXIiLCJBTExPV0VEX1VQREFURV9EQVRBU0VUX1BST1BTIiwidmFsaWRhdGVEYXRhc2V0VXBkYXRlUHJvcHMiLCJ2YWxpZGF0ZWRQcm9wcyIsImVudHJpZXMiLCJhY2MiLCJlbnRyeSIsIl9lbnRyeSIsIl9zbGljZWRUb0FycmF5MiIsImlzUmdiQ29sb3IiLCJpc1BsYWluT2JqZWN0IiwiZGVlcG1lcmdlIiwiZXhpc3RpbmciLCJjb3B5VGFibGVBbmRVcGRhdGUiLCJfc3RhdGUkc3BsaXRNYXBzJGluZGUiLCJpbmRleFRvUmV0cmlldmUiLCJtYXBMYXllcnMiLCJsb2FkRmlsZXNVcGRhdGVyIiwiZmlsZXMiLCJfYWN0aW9uJG9uRmluaXNoIiwib25GaW5pc2giLCJsb2FkRmlsZXNTdWNjZXNzIiwiaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MiLCJmaWxlQ2FjaGUiLCJmaWxlc1RvTG9hZCIsImxvYWROZXh0RmlsZVVwZGF0ZXIiLCJsb2FkRmlsZVN0ZXBTdWNjZXNzVXBkYXRlciIsImZpbGVOYW1lIiwiX3N0YXRlJGZpbGVMb2FkaW5nIiwic3RhdGVXaXRoUHJvZ3Jlc3MiLCJ1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlciIsInByb2dyZXNzIiwicGVyY2VudCIsIm1lc3NhZ2UiLCJzdGF0ZVdpdGhDYWNoZSIsIkRFTEFZX1RBU0siLCJsb2FkTmV4dEZpbGUiLCJfZmlsZXNUb0xvYWQiLCJfdG9BcnJheTIiLCJmaWxlIiwicmVtYWluaW5nRmlsZXNUb0xvYWQiLCJtYWtlTG9hZEZpbGVUYXNrIiwiTE9BRF9GSUxFX1RBU0siLCJiaW1hcCIsImdlbiIsIm5leHRGaWxlQmF0Y2giLCJwcm9jZXNzRmlsZUNvbnRlbnQiLCJjb250ZW50IiwibG9hZEZpbGVzRXJyIiwicHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlciIsIl9hY3Rpb24kcGF5bG9hZDIiLCJQUk9DRVNTX0ZJTEVfREFUQSIsImxvYWRGaWxlU3RlcFN1Y2Nlc3MiLCJwYXJzZVByb2dyZXNzIiwicHJldlByb2dyZXNzIiwibmV4dEZpbGVCYXRjaFVwZGF0ZXIiLCJfcmVmMTgiLCJfYWNjdW11bGF0ZWQkZGF0YSIsIl9yZWYxOCRwYXlsb2FkIiwiYWNjdW11bGF0ZWQiLCJlbmRzV2l0aCIsImRhdGEiLCJVTldSQVBfVEFTSyIsIl9yZWYxOSIsImxvYWRGaWxlc0VyclVwZGF0ZXIiLCJfcmVmMjAiLCJfc3RhdGUkZmlsZUxvYWRpbmcyIiwiYXBwbHlDUFVGaWx0ZXJVcGRhdGVyIiwiX3JlZjIxIiwiZGF0YUlkcyIsImZpbHRlckRhdGFzZXRDUFUiLCJzZXRNYXBJbmZvVXBkYXRlciIsImVtcHR5IiwiZGVmYXVsdExheWVycyIsImZvdW5kTGF5ZXJzIiwiZmluZERlZmF1bHRMYXllciIsImdldExheWVyT3JkZXJGcm9tTGF5ZXJzIiwiZmluZEZpZWxkc1RvU2hvdyIsIm1lcmdlZCIsIl9yZWYyMyIsImZpeGVkRG9tYWluIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTciLCJfc3RhdGUkZmlsdGVycyIsImFuaW1hdGFibGVMYXllcnMiLCJsYXllckRvbWFpbnMiLCJtZXJnZWREb21haW4iLCJtZXJnZVRpbWVEb21haW5zIiwiZ2V0VGltZVdpZGdldFRpdGxlRm9ybWF0dGVyIiwibWVyZ2VkVGltZVN0ZXBzIiwic29ydCIsIkJBU0VfU1BFRUQiLCJGUFMiLCJzeW5jZWRGaWx0ZXIiLCJuZXdBbmltYXRpb25Eb21haW4iLCJpc0luUmFuZ2UiLCJzZXRFZGl0b3JNb2RlVXBkYXRlciIsIl9yZWYyNCIsInNldEZlYXR1cmVzVXBkYXRlciIsIl9yZWYyNSIsIl9sYXN0RmVhdHVyZSRwcm9wZXJ0aSIsIl9yZWYyNSRmZWF0dXJlcyIsImxhc3RGZWF0dXJlIiwicHJvcGVydGllcyIsImlzQ2xvc2VkIiwiRURJVCIsImZlYXR1cmUiLCJiYm94IiwiZmVhdHVyZVZhbHVlIiwiZmlsdGVySWR4IiwiZmlsIiwic2V0U2VsZWN0ZWRGZWF0dXJlVXBkYXRlciIsIl9yZWYyNiIsInNlbGVjdGlvbkNvbnRleHQiLCJkZWxldGVGZWF0dXJlVXBkYXRlciIsIl9yZWYyNyIsInNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXIiLCJub25lRmlsdGVyRmVhdHVyZSIsIl9maWx0ZXIkbGF5ZXJJZCIsImlzTGF5ZXJJbmNsdWRlZCIsImdlbmVyYXRlUG9seWdvbkZpbHRlciIsInNvcnRUYWJsZUNvbHVtblVwZGF0ZXIiLCJfcmVmMjgiLCJjb2x1bW4iLCJzb3J0TW9kZSIsImN1cnJlbnRNb2RlIiwiU09SVF9PUkRFUiIsIkFTQ0VORElORyIsInNvcnRlZCIsInNvcnREYXRhc2V0QnlDb2x1bW4iLCJwaW5UYWJsZUNvbHVtblVwZGF0ZXIiLCJfcmVmMjkiLCJwaW5UYWJsZUNvbHVtbnMiLCJjb3B5VGFibGVDb2x1bW5VcGRhdGVyIiwiX3JlZjMwIiwiZmllbGRJZHgiLCJ0ZXh0IiwiZGF0YUNvbnRhaW5lciIsInJvdyIsInBhcnNlRmllbGRWYWx1ZSIsInZhbHVlQXQiLCJqb2luIiwiY29weSIsInNldENvbHVtbkRpc3BsYXlGb3JtYXRVcGRhdGVyIiwiX3JlZjMxIiwiZm9ybWF0cyIsImRpc3BsYXlGb3JtYXQiLCJfbGF5ZXIkY29uZmlnIiwiY29sb3JGaWVsZCIsInRvZ2dsZUVkaXRvclZpc2liaWxpdHlVcGRhdGVyIiwic2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ1VwZGF0ZXIiLCJfcmVmMzIiLCJ1cGRhdGVzIiwiY2hlY2tUaW1lQ29uZmlnQXJncyIsImFsbG93ZWQiLCJzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyIiwiX3JlZjMzIiwibGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlVXBkYXRlciIsIl9sYXllciRmaWx0ZXJlZEl0ZW1DbyIsImV2ZW50IiwiZGVja2dsTGF5ZXJJZCIsImNvdW50IiwiZmlsdGVyZWRJdGVtQ291bnQiLCJfbmV3U3RhdGUkYW5pbWF0aW9uQ28iLCJfbmV3U3RhdGUkYW5pbWF0aW9uQ28yIiwiX2FjdGlvbiRlbmFibGUiLCJpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzIiwiZ2V0SW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyIsImhhc0ludGVydmFsQmFzZWRBbmltYXRpb25MYXllciIsIkJvb2xlYW4iLCJuZXdGaWx0ZXJEb21haW4iLCJBTklNQVRJT05fV0lORE9XIiwiaW50ZXJ2YWwiLCJhZGp1c3RUaW1lRmlsdGVySW50ZXJ2YWwiLCJuZXdGaWx0ZXJWYWx1ZSIsInN5bmNUaW1lbGluZU1vZGUiLCJTWU5DX1RJTUVMSU5FX01PREVTIiwiZW5kIiwidmFsaWRhdGVTeW5jQW5pbWF0aW9uTW9kZSIsInRpbWVsaW5lVmFsdWUiLCJnZXRUaW1lbGluZVZhbHVlRnJvbUZpbHRlciIsInNuYXBUb01hcmtzIiwiZnJlZSIsIl9maWx0ZXIkc3luY1RpbWVsaW5lTSIsIm5ld01vZGUiLCJzdGFydCIsImludGVydmFsSW5kZXgiLCJjdXJyZW50SW5kZXgiLCJtZXRhIiwidGFyZ2V0VGltZUludGVydmFsIiwibmV3SW5kZXgiLCJUSU1FX0lOVEVSVkFMU19PUkRFUkVEIiwiaGV4VGlsZUludGVydmFsIiwiTGF5ZXJUb0ZpbHRlclRpbWVJbnRlcnZhbCIsImdldERlZmF1bHRUaW1lRm9ybWF0IiwidXBkYXRlZFBsb3RUeXBlIiwidXBkYXRlVGltZUZpbHRlclBsb3RUeXBlIiwiYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyIsImRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyIsImRhdGFJZFRvUmVwbGFjZSIsIl92YWx1ZSRjb25maWciLCJfdmFsdWUkY29uZmlnMiIsInJlcGxhY2VkIiwiaXNPYmplY3QiLCJmaW5kQ2hpbGREYXRhc2V0SWRzIiwiX3ZhbHVlJG5ld0RhdGFzZXQiLCJjaGlsZERhdGFJZHMiLCJtb3ZlVmFsdWVUb0JlTWVyZ2VkIiwicHJvcFZhbHVlcyIsIl9yZWYzNSIsInNhdmVVbm1lcmdlZCIsInN0YXRlUmVtb3ZlZCIsInByb3BWYWx1ZSIsInAiLCJ0b0JlTWVyZ2VkIiwicmVwbGFjZURhdGFzZXRBbmREZXBzIiwiZGF0YUlkVG9Vc2UiLCJjb21wb3NlXyIsImFwcGx5XyIsInJlcGxhY2VEYXRhc2V0RGVwc0luU3RhdGUiLCJwcmVwYXJlU3RhdGVGb3JEYXRhc2V0UmVwbGFjZSIsIl9uZXh0U3RhdGUkbGF5ZXJUb0JlTSIsInNlcmlhbGl6ZWRTdGF0ZSIsInNlcmlhbGl6ZVZpc1N0YXRlIiwicHJlc2VydmVMYXllck9yZGVyIiwicHJlc2VydmVEYXRhc2V0T3JkZXIiLCJfc2VyaWFsaXplZFN0YXRlJHNwbGkiLCJfcmVmMzYiLCJhY2N1U3RhdGUiLCJfcmVmMzciLCJyZXBsYWNlUGFyZW50RGF0YXNldElkcyIsImdldENoaWxkRGF0YXNldElkcyIsInByZXNlcnZlT3JkZXIiLCJ0b01lcmdlUHJvcHMiLCJzYXZlZFByb3BzIiwicmVwbGFjZWRTdGF0ZSIsIl9yZXBsYWNlZFN0YXRlJG1lcmdlciIsIm1lcmdlck9wdGlvbnMiLCJyZXBsYWNlZEl0ZW0iLCJyZXBsYWNlUHJvcFZhbHVlSW5TdGF0ZSIsIml0ZW0iLCJfcmVmMzgiLCJjaGlsZERhdGFJZCJdLCJzb3VyY2VzIjpbIi4uL3NyYy92aXMtc3RhdGUtdXBkYXRlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IGJib3ggZnJvbSAnQHR1cmYvYmJveCc7XG5pbXBvcnQgY29weSBmcm9tICdjb3B5LXRvLWNsaXBib2FyZCc7XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ2RlZXBtZXJnZSc7XG5pbXBvcnQge2NvbnNvbGUgYXMgQ29uc29sZX0gZnJvbSAnZ2xvYmFsL3dpbmRvdyc7XG5pbXBvcnQgY2xvbmVEZWVwIGZyb20gJ2xvZGFzaC5jbG9uZWRlZXAnO1xuaW1wb3J0IGdldCBmcm9tICdsb2Rhc2guZ2V0JztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2xvZGFzaC5pc2VxdWFsJztcbmltcG9ydCBwaWNrIGZyb20gJ2xvZGFzaC5waWNrJztcbmltcG9ydCB1bmlxIGZyb20gJ2xvZGFzaC51bmlxJztcbmltcG9ydCB4b3IgZnJvbSAnbG9kYXNoLnhvcic7XG5pbXBvcnQgVGFzaywge2Rpc2FibGVTdGFja0NhcHR1cmluZywgd2l0aFRhc2t9IGZyb20gJ3JlYWN0LXBhbG0vdGFza3MnO1xuLy8gVGFza3NcbmltcG9ydCB7XG4gIERFTEFZX1RBU0ssXG4gIEFDVElPTl9UQVNLLFxuICBMT0FEX0ZJTEVfVEFTSyxcbiAgUFJPQ0VTU19GSUxFX0RBVEEsXG4gIFVOV1JBUF9UQVNLXG59IGZyb20gJ0BrZXBsZXIuZ2wvdGFza3MnO1xuLy8gQWN0aW9uc1xuaW1wb3J0IHtcbiAgQWN0aW9uVHlwZXMsXG4gIENyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzUGF5bG9hZCxcbiAgTWFwU3RhdGVBY3Rpb25zLFxuICBSZWNlaXZlTWFwQ29uZmlnUGF5bG9hZCxcbiAgVmlzU3RhdGVBY3Rpb25zLFxuICBhcHBseUxheWVyQ29uZmlnLFxuICBjcmVhdGVOZXdEYXRhc2V0U3VjY2VzcyxcbiAgbGF5ZXJDb25maWdDaGFuZ2UsXG4gIGxheWVyVHlwZUNoYW5nZSxcbiAgbGF5ZXJWaXNDb25maWdDaGFuZ2UsXG4gIGxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSxcbiAgbG9hZEZpbGVTdGVwU3VjY2VzcyxcbiAgbG9hZEZpbGVzRXJyLFxuICBsb2FkRmlsZXNTdWNjZXNzLFxuICBsb2FkTmV4dEZpbGUsXG4gIG5leHRGaWxlQmF0Y2gsXG4gIHNldEZpbHRlcixcbiAgcHJvY2Vzc0ZpbGVDb250ZW50LFxuICBmaXRCb3VuZHMgYXMgZml0TWFwQm91bmRzLFxuICB0b2dnbGVMYXllckZvck1hcCxcbiAgYXBwbHlGaWx0ZXJDb25maWdcbn0gZnJvbSAnQGtlcGxlci5nbC9hY3Rpb25zJztcblxuLy8gVXRpbHNcbmltcG9ydCB7XG4gIEZJTFRFUl9VUERBVEVSX1BST1BTLFxuICBhZGROZXdMYXllcnNUb1NwbGl0TWFwLFxuICBzbmFwVG9NYXJrcyxcbiAgYXBwbHlGaWx0ZXJGaWVsZE5hbWUsXG4gIGFwcGx5RmlsdGVyc1RvRGF0YXNldHMsXG4gIGFycmF5SW5zZXJ0LFxuICBjb21wdXRlU3BsaXRNYXBMYXllcnMsXG4gIGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4sXG4gIGZlYXR1cmVUb0ZpbHRlclZhbHVlLFxuICBmaWx0ZXJEYXRhc2V0Q1BVLFxuICBnZW5lcmF0ZVBvbHlnb25GaWx0ZXIsXG4gIGdldERlZmF1bHRGaWx0ZXIsXG4gIGdldEZpbHRlcklkSW5GZWF0dXJlLFxuICBnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIsXG4gIGlzSW5SYW5nZSxcbiAgaXNPYmplY3QsXG4gIGlzUGxhaW5PYmplY3QsXG4gIGlzUmdiQ29sb3IsXG4gIHBhcnNlRmllbGRWYWx1ZSxcbiAgcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzLFxuICBzZXQsXG4gIHVwZGF0ZUZpbHRlclBsb3QsXG4gIHJlbW92ZUZpbHRlclBsb3QsXG4gIGlzTGF5ZXJBbmltYXRhYmxlLFxuICBpc1NpZGVGaWx0ZXJcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge2dlbmVyYXRlSGFzaElkLCB0b0FycmF5fSBmcm9tICdAa2VwbGVyLmdsL2NvbW1vbi11dGlscyc7XG4vLyBNZXJnZXJzXG5pbXBvcnQge1xuICBBTklNQVRJT05fV0lORE9XLFxuICBCQVNFX1NQRUVELFxuICBDT01QQVJFX1RZUEVTLFxuICBERUZBVUxUX1RFWFRfTEFCRUwsXG4gIEVESVRPUl9NT0RFUyxcbiAgRklMVEVSX1RZUEVTLFxuICBGSUxURVJfVklFV19UWVBFUyxcbiAgRlBTLFxuICBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVCxcbiAgTUFYX0RFRkFVTFRfVE9PTFRJUFMsXG4gIFBMT1RfVFlQRVMsXG4gIFNPUlRfT1JERVIsXG4gIFNZTkNfVElNRUxJTkVfTU9ERVMsXG4gIENIQU5ORUxfU0NBTEVTLFxuICBTQ0FMRV9UWVBFU1xufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge0xBWUVSX0lEX0xFTkdUSCwgTGF5ZXIsIExheWVyQ2xhc3Nlc30gZnJvbSAnQGtlcGxlci5nbC9sYXllcnMnO1xuaW1wb3J0IHtcbiAgYXBwbHlfLFxuICBjb21wb3NlXyxcbiAgZmlsdGVyT3V0QnlJZCxcbiAgbWVyZ2VfLFxuICBwaWNrXyxcbiAgcmVtb3ZlRWxlbWVudEF0SW5kZXgsXG4gIHN3YXBfXG59IGZyb20gJy4vY29tcG9zZXItaGVscGVycyc7XG5pbXBvcnQge2lzVmFsaWRNZXJnZXIsIG1lcmdlU3RhdGVGcm9tTWVyZ2Vyc30gZnJvbSAnLi9tZXJnZXItaGFuZGxlcic7XG5pbXBvcnQge1xuICBWSVNfU1RBVEVfTUVSR0VSUyxcbiAgY3JlYXRlTGF5ZXJGcm9tQ29uZmlnLFxuICBwYXJzZUxheWVyQ29uZmlnLFxuICBzZXJpYWxpemVGaWx0ZXIsXG4gIHNlcmlhbGl6ZUxheWVyLFxuICBzZXJpYWxpemVWaXNTdGF0ZSxcbiAgdmFsaWRhdGVMYXllcldpdGhEYXRhXG59IGZyb20gJy4vdmlzLXN0YXRlLW1lcmdlcic7XG5cbmltcG9ydCBLZXBsZXJHTFNjaGVtYSwge01lcmdlciwgUG9zdE1lcmdlclBheWxvYWQsIFZpc1N0YXRlfSBmcm9tICdAa2VwbGVyLmdsL3NjaGVtYXMnO1xuXG5pbXBvcnQge1xuICBGaWx0ZXIsXG4gIEludGVyYWN0aW9uQ29uZmlnLFxuICBBbmltYXRpb25Db25maWcsXG4gIEZpbHRlckFuaW1hdGlvbkNvbmZpZyxcbiAgRWRpdG9yLFxuICBGaWVsZCxcbiAgVGltZVJhbmdlRmlsdGVyXG59IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtMb2FkZXJ9IGZyb20gJ0Bsb2FkZXJzLmdsL2xvYWRlci11dGlscyc7XG5cbmltcG9ydCB7XG4gIERhdGFzZXRzLFxuICBhc3NpZ25HcHVDaGFubmVsLFxuICBjb3B5VGFibGVBbmRVcGRhdGUsXG4gIGNyZWF0ZU5ld0RhdGFFbnRyeSxcbiAgcGluVGFibGVDb2x1bW5zLFxuICBzZXRGaWx0ZXJHcHVNb2RlLFxuICBzb3J0RGF0YXNldEJ5Q29sdW1uXG59IGZyb20gJ0BrZXBsZXIuZ2wvdGFibGUnO1xuaW1wb3J0IHtmaW5kRmllbGRzVG9TaG93fSBmcm9tICcuL2ludGVyYWN0aW9uLXV0aWxzJztcbmltcG9ydCB7Y2FsY3VsYXRlTGF5ZXJEYXRhLCBmaW5kRGVmYXVsdExheWVyLCBnZXRMYXllck9yZGVyRnJvbUxheWVyc30gZnJvbSAnLi9sYXllci11dGlscyc7XG5pbXBvcnQge2dldFByb3BWYWx1ZVRvTWVyZ2VyLCBoYXNQcm9wc1RvTWVyZ2V9IGZyb20gJy4vbWVyZ2VyLWhhbmRsZXInO1xuaW1wb3J0IHttZXJnZURhdGFzZXRzQnlPcmRlcn0gZnJvbSAnLi92aXMtc3RhdGUtbWVyZ2VyJztcbmltcG9ydCB7XG4gIGZpeEVmZmVjdE9yZGVyLFxuICBnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyxcbiAgZ2V0SW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyxcbiAgbWVyZ2VUaW1lRG9tYWlucyxcbiAgYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyxcbiAgdXBkYXRlVGltZUZpbHRlclBsb3RUeXBlLFxuICBnZXREZWZhdWx0VGltZUZvcm1hdCxcbiAgTGF5ZXJUb0ZpbHRlclRpbWVJbnRlcnZhbCxcbiAgVElNRV9JTlRFUlZBTFNfT1JERVJFRCxcbiAgbWVyZ2VGaWx0ZXJEb21haW4sXG4gIGluaXRDdXN0b21QYWxldHRlQnlDdXN0b21TY2FsZVxufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7Y3JlYXRlRWZmZWN0fSBmcm9tICdAa2VwbGVyLmdsL2VmZmVjdHMnO1xuaW1wb3J0IHtQYXlsb2FkQWN0aW9ufSBmcm9tICdAcmVkdXhqcy90b29sa2l0JztcblxuaW1wb3J0IHtmaW5kTWFwQm91bmRzfSBmcm9tICcuL2RhdGEtdXRpbHMnO1xuXG4vLyByZWFjdC1wYWxtXG4vLyBkaXNhYmxlIGNhcHR1cmUgZXhjZXB0aW9uIGZvciByZWFjdC1wYWxtIGNhbGwgdG8gd2l0aFRhc2tcbmRpc2FibGVTdGFja0NhcHR1cmluZygpO1xuXG4vKipcbiAqIFVwZGF0ZXJzIGZvciBgdmlzU3RhdGVgIHJlZHVjZXIuIENhbiBiZSB1c2VkIGluIHlvdXIgcm9vdCByZWR1Y2VyIHRvIGRpcmVjdGx5IG1vZGlmeSBrZXBsZXIuZ2wncyBzdGF0ZS5cbiAqIFJlYWQgbW9yZSBhYm91dCBbVXNpbmcgdXBkYXRlcnNdKC4uL2FkdmFuY2VkLXVzYWdlL3VzaW5nLXVwZGF0ZXJzLm1kKVxuICpcbiAqIEBwdWJsaWNcbiAqIEBleGFtcGxlXG4gKlxuICogaW1wb3J0IGtlcGxlckdsUmVkdWNlciwge3Zpc1N0YXRlVXBkYXRlcnN9IGZyb20gJ2tlcGxlci5nbC9yZWR1Y2Vycyc7XG4gKiAvLyBSb290IFJlZHVjZXJcbiAqIGNvbnN0IHJlZHVjZXJzID0gY29tYmluZVJlZHVjZXJzKHtcbiAqICBrZXBsZXJHbDoga2VwbGVyR2xSZWR1Y2VyLFxuICogIGFwcDogYXBwUmVkdWNlclxuICogfSk7XG4gKlxuICogY29uc3QgY29tcG9zZWRSZWR1Y2VyID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAqICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gKiAgICBjYXNlICdDTElDS19CVVRUT04nOlxuICogICAgICByZXR1cm4ge1xuICogICAgICAgIC4uLnN0YXRlLFxuICogICAgICAgIGtlcGxlckdsOiB7XG4gKiAgICAgICAgICAuLi5zdGF0ZS5rZXBsZXJHbCxcbiAqICAgICAgICAgIGZvbzoge1xuICogICAgICAgICAgICAgLi4uc3RhdGUua2VwbGVyR2wuZm9vLFxuICogICAgICAgICAgICAgdmlzU3RhdGU6IHZpc1N0YXRlVXBkYXRlcnMuZW5sYXJnZUZpbHRlclVwZGF0ZXIoXG4gKiAgICAgICAgICAgICAgIHN0YXRlLmtlcGxlckdsLmZvby52aXNTdGF0ZSxcbiAqICAgICAgICAgICAgICAge2lkeDogMH1cbiAqICAgICAgICAgICAgIClcbiAqICAgICAgICAgIH1cbiAqICAgICAgICB9XG4gKiAgICAgIH07XG4gKiAgfVxuICogIHJldHVybiByZWR1Y2VycyhzdGF0ZSwgYWN0aW9uKTtcbiAqIH07XG4gKlxuICogZXhwb3J0IGRlZmF1bHQgY29tcG9zZWRSZWR1Y2VyO1xuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cbi8vIEB0cy1pZ25vcmVcbmNvbnN0IHZpc1N0YXRlVXBkYXRlcnMgPSBudWxsO1xuLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRJbnRlcmFjdGlvbkNvbmZpZzogSW50ZXJhY3Rpb25Db25maWcgPSB7XG4gIHRvb2x0aXA6IHtcbiAgICBpZDogJ3Rvb2x0aXAnLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLnRvb2x0aXAnLFxuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgY29uZmlnOiB7XG4gICAgICBmaWVsZHNUb1Nob3c6IHt9LFxuICAgICAgY29tcGFyZU1vZGU6IGZhbHNlLFxuICAgICAgY29tcGFyZVR5cGU6IENPTVBBUkVfVFlQRVMuQUJTT0xVVEVcbiAgICB9XG4gIH0sXG4gIGdlb2NvZGVyOiB7XG4gICAgaWQ6ICdnZW9jb2RlcicsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMuZ2VvY29kZXInLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIHBvc2l0aW9uOiBudWxsXG4gIH0sXG4gIGJydXNoOiB7XG4gICAgaWQ6ICdicnVzaCcsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMuYnJ1c2gnLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIGNvbmZpZzoge1xuICAgICAgLy8gc2l6ZSBpcyBpbiBrbVxuICAgICAgc2l6ZTogMC41XG4gICAgfVxuICB9LFxuICBjb29yZGluYXRlOiB7XG4gICAgaWQ6ICdjb29yZGluYXRlJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5jb29yZGluYXRlJyxcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBwb3NpdGlvbjogbnVsbFxuICB9XG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9BTklNQVRJT05fQ09ORklHOiBBbmltYXRpb25Db25maWcgPSB7XG4gIGRvbWFpbjogbnVsbCxcbiAgY3VycmVudFRpbWU6IG51bGwsXG4gIHNwZWVkOiAxLFxuICBpc0FuaW1hdGluZzogZmFsc2UsXG4gIHRpbWVTdGVwczogbnVsbCxcbiAgdGltZUZvcm1hdDogbnVsbCxcbiAgdGltZXpvbmU6IG51bGwsXG4gIGRlZmF1bHRUaW1lRm9ybWF0OiBudWxsLFxuICBoaWRlQ29udHJvbDogZmFsc2UsXG4gIGR1cmF0aW9uOiBudWxsXG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9FRElUT1I6IEVkaXRvciA9IHtcbiAgbW9kZTogRURJVE9SX01PREVTLkRSQVdfUE9MWUdPTixcbiAgZmVhdHVyZXM6IFtdLFxuICBzZWxlY3RlZEZlYXR1cmU6IG51bGwsXG4gIHZpc2libGU6IHRydWVcbn07XG5cbi8qKlxuICogRGVmYXVsdCBpbml0aWFsIGB2aXNTdGF0ZWBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAY29uc3RhbnRcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IElOSVRJQUxfVklTX1NUQVRFOiBWaXNTdGF0ZSA9IHtcbiAgLy8gbWFwIGluZm9cbiAgbWFwSW5mbzoge1xuICAgIHRpdGxlOiAnJyxcbiAgICBkZXNjcmlwdGlvbjogJydcbiAgfSxcbiAgLy8gbGF5ZXJzXG4gIGxheWVyczogW10sXG4gIGxheWVyRGF0YTogW10sXG4gIGxheWVyVG9CZU1lcmdlZDogW10sXG4gIGxheWVyT3JkZXI6IFtdLFxuXG4gIC8vIGZpbHRlcnNcbiAgZmlsdGVyczogW10sXG4gIGZpbHRlclRvQmVNZXJnZWQ6IFtdLFxuXG4gIC8vIGEgY29sbGVjdGlvbiBvZiBtdWx0aXBsZSBkYXRhc2V0XG4gIGRhdGFzZXRzOiB7fSxcbiAgZWRpdGluZ0RhdGFzZXQ6IHVuZGVmaW5lZCxcblxuICAvLyBlZmZlY3RzXG4gIGVmZmVjdHM6IFtdLFxuICBlZmZlY3RPcmRlcjogW10sXG5cbiAgaW50ZXJhY3Rpb25Db25maWc6IGRlZmF1bHRJbnRlcmFjdGlvbkNvbmZpZyxcbiAgaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkOiB7fSxcblxuICBsYXllckJsZW5kaW5nOiAnbm9ybWFsJyxcbiAgb3ZlcmxheUJsZW5kaW5nOiAnbm9ybWFsJyxcbiAgaG92ZXJJbmZvOiB1bmRlZmluZWQsXG4gIGNsaWNrZWQ6IHVuZGVmaW5lZCxcbiAgbW91c2VQb3M6IHt9LFxuICBtYXhEZWZhdWx0VG9vbHRpcHM6IE1BWF9ERUZBVUxUX1RPT0xUSVBTLFxuXG4gIC8vIHRoaXMgaXMgdXNlZCB3aGVuIHVzZXIgc3BsaXQgbWFwc1xuICBzcGxpdE1hcHM6IFtcbiAgICAvLyB0aGlzIHdpbGwgY29udGFpbiBhIGxpc3Qgb2Ygb2JqZWN0cyB0b1xuICAgIC8vIGRlc2NyaWJlIHRoZSBzdGF0ZSBvZiBsYXllciBhdmFpbGFiaWxpdHkgYW5kIHZpc2liaWxpdHkgZm9yIGVhY2ggbWFwXG4gICAgLy8gW1xuICAgIC8vICAge1xuICAgIC8vICAgICAgbGF5ZXJzOiB7bGF5ZXJfaWQ6IHRydWUgfCBmYWxzZX1cbiAgICAvLyAgIH1cbiAgICAvLyBdXG4gIF0sXG4gIHNwbGl0TWFwc1RvQmVNZXJnZWQ6IFtdLFxuICBpc01lcmdpbmdEYXRhc2V0czoge30sXG4gIC8vIGRlZmF1bHRzIGxheWVyIGNsYXNzZXNcbiAgbGF5ZXJDbGFzc2VzOiBMYXllckNsYXNzZXMsXG5cbiAgLy8gZGVmYXVsdCBhbmltYXRpb25cbiAgLy8gdGltZSBpbiB1bml4IHRpbWVzdGFtcCAobWlsbGlzZWNvbmRzKSAodGhlIG51bWJlciBvZiBzZWNvbmRzIHNpbmNlIHRoZSBVbml4IEVwb2NoKVxuICBhbmltYXRpb25Db25maWc6IERFRkFVTFRfQU5JTUFUSU9OX0NPTkZJRyxcblxuICBlZGl0b3I6IERFRkFVTFRfRURJVE9SLFxuXG4gIGZpbGVMb2FkaW5nOiBmYWxzZSxcbiAgZmlsZUxvYWRpbmdQcm9ncmVzczoge30sXG5cbiAgbG9hZGVyczogW10sXG4gIGxvYWRPcHRpb25zOiB7fSxcblxuICAvLyB2aXNTdGF0ZU1lcmdlcnNcbiAgbWVyZ2VyczogVklTX1NUQVRFX01FUkdFUlMsXG5cbiAgLy8ga2VwbGVyIHNjaGVtYXNcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYVxufTtcblxudHlwZSBVcGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGFUeXBlID0ge1xuICBsYXllcnM6IExheWVyW107XG4gIGxheWVyRGF0YTogYW55W107XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBzdGF0ZSB3aXRoIHVwZGF0ZWQgbGF5ZXIgYW5kIGxheWVyRGF0YVxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YTxTIGV4dGVuZHMgVXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhVHlwZT4oXG4gIHN0YXRlOiBTLFxuICB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fToge2xheWVyRGF0YT86IGFueTsgbGF5ZXI6IExheWVyOyBpZHg6IG51bWJlcn1cbik6IFMge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3RhdGUubGF5ZXJzLm1hcCgobHlyLCBpKSA9PiAoaSA9PT0gaWR4ID8gbGF5ZXIgOiBseXIpKSxcbiAgICBsYXllckRhdGE6IGxheWVyRGF0YVxuICAgICAgPyBzdGF0ZS5sYXllckRhdGEubWFwKChkLCBpKSA9PiAoaSA9PT0gaWR4ID8gbGF5ZXJEYXRhIDogZCkpXG4gICAgICA6IHN0YXRlLmxheWVyRGF0YVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVPbkxheWVyVmlzaWJpbGl0eUNoYW5nZTxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBsYXllcjogTGF5ZXIpOiBTIHtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGlmIChzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoKSB7XG4gICAgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIHNwbGl0TWFwczogbGF5ZXIuY29uZmlnLmlzVmlzaWJsZVxuICAgICAgICA/IGFkZE5ld0xheWVyc1RvU3BsaXRNYXAoc3RhdGUuc3BsaXRNYXBzLCBsYXllcilcbiAgICAgICAgOiByZW1vdmVMYXllckZyb21TcGxpdE1hcHMoc3RhdGUuc3BsaXRNYXBzLCBsYXllcilcbiAgICB9O1xuICB9XG5cbiAgaWYgKGxheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBDb21wYXJlcyB0d28gb2JqZWN0cyAob3IgYXJyYXlzKSBhbmQgcmV0dXJucyBhIG5ldyBvYmplY3Qgd2l0aCBvbmx5IHRoZVxuICogcHJvcGVydGllcyB0aGF0IGhhdmUgY2hhbmdlZCBiZXR3ZWVuIHRoZSB0d28gb2JqZWN0cy5cbiAqL1xuZnVuY3Rpb24gcGlja0NoYW5nZWRQcm9wczxUPihwcmV2OiBULCBuZXh0OiBUKTogUGFydGlhbDxUPiB7XG4gIGNvbnN0IGNoYW5nZWRQcm9wczogUGFydGlhbDxUPiA9IHt9O1xuICBjb25zdCBwaWNrUHJvcHNPZiA9IG9iaiA9PiB7XG4gICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hhbmdlZFByb3BzLCBrZXkpICYmXG4gICAgICAgICFpc0VxdWFsKHByZXZba2V5XSwgbmV4dFtrZXldKVxuICAgICAgKSB7XG4gICAgICAgIGNoYW5nZWRQcm9wc1trZXldID0gbmV4dFtrZXldO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBwaWNrUHJvcHNPZihwcmV2KTtcbiAgcGlja1Byb3BzT2YobmV4dCk7XG4gIHJldHVybiBjaGFuZ2VkUHJvcHM7XG59XG5cbmNvbnN0IFZJU1VBTF9DSEFOTkVMX1BST1BfVFlQRVMgPSBbJ2ZpZWxkJywgJ3NjYWxlJywgJ2RvbWFpbicsICdhZ2dyZWdhdGlvbiddO1xuXG4vKipcbiAqIEFwcGx5IGxheWVyIGNvbmZpZ1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eSwgbWF4LXN0YXRlbWVudHNcbmV4cG9ydCBmdW5jdGlvbiBhcHBseUxheWVyQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BcHBseUxheWVyQ29uZmlnVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXJJZCwgbmV3TGF5ZXJDb25maWcsIGxheWVySW5kZXh9ID0gYWN0aW9uO1xuICBjb25zdCBuZXdQYXJzZWRMYXllciA9XG4gICAgLy8gd2lsbCBtb3ZlIHZpc3VhbENoYW5uZWxzIHRvIHRoZSBjb25maWcgcHJvcFxuICAgIHBhcnNlTGF5ZXJDb25maWcoc3RhdGUuc2NoZW1hLCBuZXdMYXllckNvbmZpZyk7XG4gIGNvbnN0IG9sZExheWVyID0gc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBvbGRMYXllcklkKTtcbiAgaWYgKCFvbGRMYXllciB8fCAhbmV3UGFyc2VkTGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKGxheWVySW5kZXggIT09IG51bGwgJiYgbGF5ZXJJbmRleCAhPT0gdW5kZWZpbmVkICYmIHN0YXRlLmxheWVyc1tsYXllckluZGV4XSAhPT0gb2xkTGF5ZXIpIHtcbiAgICAvLyBsYXllckluZGV4IGlzIHByb3ZpZGVkLCBidXQgaXQgZG9lc24ndCBtYXRjaCB0aGUgb2xkTGF5ZXJcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW25ld1BhcnNlZExheWVyLmNvbmZpZy5kYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgLy8gTWFrZSBzdXJlIHRoZSBsYXllciBpcyB2YWxpZCBhbmQgY29udmVydCBpdCB0byBMYXllclxuICBjb25zdCBuZXdMYXllciA9IHZhbGlkYXRlTGF5ZXJXaXRoRGF0YShkYXRhc2V0LCBuZXdQYXJzZWRMYXllciwgc3RhdGUubGF5ZXJDbGFzc2VzKTtcbiAgaWYgKCFuZXdMYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBuZXh0U3RhdGUgPSBzdGF0ZTtcblxuICBpZiAobmV3TGF5ZXIudHlwZSAmJiBuZXdMYXllci50eXBlICE9PSBvbGRMYXllci50eXBlKSB7XG4gICAgY29uc3Qgb2xkTGF5ZXJJbmRleCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllcklkKTtcbiAgICBpZiAob2xkTGF5ZXJJbmRleCA+PSAwKSB7XG4gICAgICBuZXh0U3RhdGUgPSBsYXllclR5cGVDaGFuZ2VVcGRhdGVyKG5leHRTdGF0ZSwgbGF5ZXJUeXBlQ2hhbmdlKG9sZExheWVyLCBuZXdMYXllci50eXBlKSk7XG4gICAgICAvLyBsYXllclR5cGVDaGFuZ2VVcGRhdGVyIGNoYW5nZXMgdGhlIGlkIG9mIHRoZSBsYXllciwgc28gd2UgbmVlZCB0byBvYnRhaW4gdGhlIG5ldyBpZFxuICAgICAgLy8gYnV0IGZpcnN0IG1ha2Ugc3VyZSB0aGF0IHRoZSBsYXllciB3YXMgbm90IHJlbW92ZWRcbiAgICAgIGlmIChuZXh0U3RhdGUubGF5ZXJzLmxlbmd0aCA9PT0gc3RhdGUubGF5ZXJzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBuZXdMYXllcklkID0gbmV4dFN0YXRlLmxheWVyc1tvbGRMYXllckluZGV4XS5pZDtcbiAgICAgICAgbmV4dFN0YXRlID0gYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIoXG4gICAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICAgIGFwcGx5TGF5ZXJDb25maWcobmV3TGF5ZXJJZCwgey4uLm5ld0xheWVyQ29uZmlnLCBpZDogbmV3TGF5ZXJJZH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXh0U3RhdGU7XG4gIH1cblxuICAvLyBzZXJpYWxpemVMYXllcigpIG1pZ2h0IHJldHVybiBudWxsIGlmIHRoZSBvbGQgbGF5ZXIgaXMgbm90IHZhbGlkLFxuICAvLyB3ZSBzaG91bGQgc3RpbGwgYXBwbHkgdGhlIGNoYW5nZXMgaW4gdGhhdCBjYXNlXG4gIGNvbnN0IHNlcmlhbGl6ZWRPbGRMYXllciA9IHNlcmlhbGl6ZUxheWVyKG9sZExheWVyLCBzdGF0ZS5zY2hlbWEpID8/IHtjb25maWc6IHt9fTtcbiAgY29uc3Qgc2VyaWFsaXplZE5ld0xheWVyID0gc2VyaWFsaXplTGF5ZXIobmV3TGF5ZXIsIHN0YXRlLnNjaGVtYSk7XG4gIGlmICghc2VyaWFsaXplZE5ld0xheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmICghaXNFcXVhbChzZXJpYWxpemVkT2xkTGF5ZXIsIHNlcmlhbGl6ZWROZXdMYXllcikpIHtcbiAgICBjb25zdCBjaGFuZ2VkID0gcGlja0NoYW5nZWRQcm9wcyhzZXJpYWxpemVkT2xkTGF5ZXIuY29uZmlnLCBzZXJpYWxpemVkTmV3TGF5ZXIuY29uZmlnKTtcblxuICAgIGlmICgndmlzQ29uZmlnJyBpbiBjaGFuZ2VkKSB7XG4gICAgICBpZiAoY2hhbmdlZC52aXNDb25maWcpIHtcbiAgICAgICAgbmV4dFN0YXRlID0gbGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyKFxuICAgICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgICBsYXllclZpc0NvbmZpZ0NoYW5nZShvbGRMYXllciwgY2hhbmdlZC52aXNDb25maWcpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBkZWxldGUgY2hhbmdlZC52aXNDb25maWc7XG4gICAgfVxuXG4gICAgT2JqZWN0LmtleXMob2xkTGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goY2hhbm5lbE5hbWUgPT4ge1xuICAgICAgY29uc3QgY2hhbm5lbCA9IG9sZExheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxOYW1lXTtcbiAgICAgIGNvbnN0IGNoYW5uZWxQcm9wTmFtZXMgPSBWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTLm1hcChwcm9wID0+IGNoYW5uZWxbcHJvcF0pO1xuICAgICAgaWYgKGNoYW5uZWxQcm9wTmFtZXMuc29tZShwcm9wID0+IHByb3AgaW4gY2hhbmdlZCkpIHtcbiAgICAgICAgbmV4dFN0YXRlID0gbGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlcihcbiAgICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgICAgbGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlKFxuICAgICAgICAgICAgb2xkTGF5ZXIsXG4gICAgICAgICAgICBwaWNrKG5ld0xheWVyLmNvbmZpZywgY2hhbm5lbFByb3BOYW1lcyksXG4gICAgICAgICAgICBjaGFubmVsTmFtZVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIGNoYW5uZWxQcm9wTmFtZXMpIHtcbiAgICAgICAgICBkZWxldGUgY2hhbmdlZFtwcm9wXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKE9iamVjdC5rZXlzKGNoYW5nZWQpLmxlbmd0aCA+IDApIHtcbiAgICAgIG5leHRTdGF0ZSA9IGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICBsYXllckNvbmZpZ0NoYW5nZShvbGRMYXllciwgcGljayhuZXdMYXllci5jb25maWcsIE9iamVjdC5rZXlzKGNoYW5nZWQpKSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlbGF5ZXJWaXNpYmlsdHkoc3RhdGU6IFZpc1N0YXRlLCBuZXdMYXllcjogTGF5ZXIsIGlzVmlzaWJsZT86IGJvb2xlYW4pOiBWaXNTdGF0ZSB7XG4gIGxldCBuZXdTdGF0ZSA9IHVwZGF0ZVN0YXRlT25MYXllclZpc2liaWxpdHlDaGFuZ2Uoc3RhdGUsIG5ld0xheWVyKTtcbiAgY29uc3QgZmlsdGVySW5kZXggPSBmaWx0ZXJTeW5jZWRXaXRoVGltZWxpbmUoc3RhdGUpO1xuICBpZiAoaXNMYXllckFuaW1hdGFibGUobmV3TGF5ZXIpICYmIGZpbHRlckluZGV4ICE9PSAtMSkge1xuICAgIC8vIGlmIGxheWVyIGlzIGdvaW5nIHRvIGJlIHZpc2libGUgd2Ugc3luYyB3aXRoIGZpbHRlciBvdGhlcndpc2Ugd2UgbmVlZCB0byBjaGVjayB3aGV0aGVyIG90aGVyIGFuaW1hdGFibGUgbGF5ZXJzIGV4aXN0cyBhbmQgYXJlIHZpc2libGVcbiAgICBuZXdTdGF0ZSA9IHN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICBpZHg6IGZpbHRlckluZGV4LFxuICAgICAgZW5hYmxlOiBpc1Zpc2libGUgPyBpc1Zpc2libGUgOiBnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyhzdGF0ZS5sYXllcnMpLmxlbmd0aCA+IDBcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGJhc2UgY29uZmlnOiBkYXRhSWQsIGxhYmVsLCBjb2x1bW4sIGlzVmlzaWJsZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZXhwb3J0IGZ1bmN0aW9uIGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyfSA9IGFjdGlvbjtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgY29uc3QgcHJvcHMgPSBPYmplY3Qua2V5cyhhY3Rpb24ubmV3Q29uZmlnKTtcbiAgaWYgKFxuICAgIHR5cGVvZiBhY3Rpb24ubmV3Q29uZmlnLmRhdGFJZCA9PT0gJ3N0cmluZycgJiZcbiAgICBhY3Rpb24ubmV3Q29uZmlnLmRhdGFJZCAhPT0gb2xkTGF5ZXIuY29uZmlnLmRhdGFJZFxuICApIHtcbiAgICBjb25zdCB7ZGF0YUlkLCAuLi5yZXN0Q29uZmlnfSA9IGFjdGlvbi5uZXdDb25maWc7XG4gICAgY29uc3Qgc3RhdGVXaXRoRGF0YUlkID0gbGF5ZXJEYXRhSWRDaGFuZ2VVcGRhdGVyKHN0YXRlLCB7XG4gICAgICBvbGRMYXllcixcbiAgICAgIG5ld0NvbmZpZzoge2RhdGFJZH1cbiAgICB9KTtcbiAgICBjb25zdCBuZXh0TGF5ZXIgPSBzdGF0ZVdpdGhEYXRhSWQubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gICAgcmV0dXJuIG5leHRMYXllciAmJiBPYmplY3Qua2V5cyhyZXN0Q29uZmlnKS5sZW5ndGhcbiAgICAgID8gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKHN0YXRlV2l0aERhdGFJZCwge29sZExheWVyOiBuZXh0TGF5ZXIsIG5ld0NvbmZpZzogcmVzdENvbmZpZ30pXG4gICAgICA6IHN0YXRlV2l0aERhdGFJZDtcbiAgfVxuXG4gIGxldCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKGFjdGlvbi5uZXdDb25maWcpO1xuXG4gIGxldCBsYXllckRhdGE7XG5cbiAgaWYgKG5ld0xheWVyLnNob3VsZENhbGN1bGF0ZUxheWVyRGF0YShwcm9wcykpIHtcbiAgICBjb25zdCBvbGRMYXllckRhdGEgPSBzdGF0ZS5sYXllckRhdGFbaWR4XTtcblxuICAgIGNvbnN0IHVwZGF0ZUxheWVyRGF0YVJlc3VsdCA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIG9sZExheWVyRGF0YSk7XG4gICAgbmV3TGF5ZXIgPSB1cGRhdGVMYXllckRhdGFSZXN1bHQubGF5ZXI7XG4gICAgbGF5ZXJEYXRhID0gdXBkYXRlTGF5ZXJEYXRhUmVzdWx0LmxheWVyRGF0YTtcbiAgfVxuXG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICBpZiAoJ2lzVmlzaWJsZScgaW4gYWN0aW9uLm5ld0NvbmZpZykge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlbGF5ZXJWaXNpYmlsdHkobmV3U3RhdGUsIG5ld0xheWVyLCBhY3Rpb24ubmV3Q29uZmlnLmlzVmlzaWJsZSk7XG4gIH1cblxuICBpZiAoJ2NvbHVtbnMnIGluIGFjdGlvbi5uZXdDb25maWcgJiYgbmV3TGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkKSB7XG4gICAgLy8gVE9ETzogU2hhbiwgbWFrZSB0aGUgYW5pbWF0aW9uIGNvbmZpZyBmdW5jdGlvbiBtb3JlIHJvYnVzdFxuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV3U3RhdGUsIHtcbiAgICBsYXllcjogbmV3TGF5ZXIsXG4gICAgbGF5ZXJEYXRhLFxuICAgIGlkeFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxheWVyQW5pbWF0aW9uQ2hhbmdlVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBhY3Rpb24pOiBTIHtcbiAgY29uc3Qge29sZExheWVyLCBwcm9wLCB2YWx1ZX0gPSBhY3Rpb247XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG5cbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgYW5pbWF0aW9uOiB7XG4gICAgICAuLi5vbGRMYXllci5jb25maWcuYW5pbWF0aW9uLFxuICAgICAgW3Byb3BdOiB2YWx1ZVxuICAgIH1cbiAgfSk7XG5cbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgc3RhdGUubGF5ZXJEYXRhW2lkeF0pO1xuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEoc3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXJJZCwgaXNWaXNpYmxlLCBzcGxpdE1hcElkXG4gKiBoYW5kbGVzIHR3byBjYXNlczpcbiAqIDEpIHRvZ2dsZSB0aGUgdmlzaWJpbGl0eSBvZiBsb2NhbCBTcGxpdE1hcCBsYXllciAodmlzU3RhdGUuc3BsaXRNYXAubGF5ZXJzKVxuICogMikgdG9nZ2xlIHRoZSB2aXNpYmlsaXR5IG9mIGdsb2JhbCBsYXllciAodmlzU3RhdGUubGF5ZXJzKVxuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclRvZ2dsZVZpc2liaWxpdHlVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVG9nZ2xlVmlzaWJpbGl0eVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2xheWVySWQsIGlzVmlzaWJsZSwgc3BsaXRNYXBJZH0gPSBhY3Rpb247XG4gIGNvbnN0IGxheWVyID0gc3RhdGUubGF5ZXJzLmZpbmQoZCA9PiBkLmlkID09PSBsYXllcklkKTtcblxuICBpZiAoIWxheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG5cbiAgaWYgKHNwbGl0TWFwSWQpIHtcbiAgICAvLyBbY2FzZSAxXTogdG9nZ2xlIGxvY2FsIGxheWVyIHZpc2liaWxpdHkgZm9yIGVhY2ggU3BsaXRNYXBcbiAgICBjb25zdCBtYXBJbmRleCA9IG5ld1N0YXRlLnNwbGl0TWFwcy5maW5kSW5kZXgoc20gPT4gc20uaWQgPT09IHNwbGl0TWFwSWQpO1xuICAgIGlmIChpc1Zpc2libGUpIHtcbiAgICAgIC8vIDEpIGlmIHRoZSBsYXllciBpcyBpbnZpc2libGUgZ2xvYmFsbHlcbiAgICAgIC8vIC0+IHNldCBnbG9iYWwgdmlzaWJpbGl0eSB0byB0cnVlXG4gICAgICBuZXdTdGF0ZSA9IGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihuZXdTdGF0ZSwgbGF5ZXJDb25maWdDaGFuZ2UobGF5ZXIsIHtpc1Zpc2libGU6IHRydWV9KSk7XG5cbiAgICAgIC8vIC0+IHNldCBsb2NhbCB2aXNpYmlsaXR5IHRvIHRydWUgYW5kIHRoZSBsb2NhbCB2aXNpYmlsaXRpZXMgb2YgYWxsIG90aGVyIFNwbGl0TWFwcyB0byBmYWxzZVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgIHNwbGl0TWFwczogbmV3U3RhdGUuc3BsaXRNYXBzLm1hcChzbSA9PlxuICAgICAgICAgIHNtLmlkICE9PSBzcGxpdE1hcElkXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAuLi5zbSxcbiAgICAgICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgICAgIC4uLnNtLmxheWVycyxcbiAgICAgICAgICAgICAgICAgIFtsYXllcklkXTogZmFsc2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgIC4uLnNtLFxuICAgICAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAgICAgLi4uc20ubGF5ZXJzLFxuICAgICAgICAgICAgICAgICAgW2xheWVySWRdOiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIH07XG4gICAgfVxuICAgIC8vIDIpIGVsc2Ugd2hlbiB0aGUgbGF5ZXIgaXMgdmlzaWJsZSBnbG9iYWxseVxuICAgIHJldHVybiB0b2dnbGVMYXllckZvck1hcFVwZGF0ZXIobmV3U3RhdGUsIHRvZ2dsZUxheWVyRm9yTWFwKG1hcEluZGV4LCBsYXllcklkKSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gW2Nhc2UgMl06IHRvZ2dsZSBnbG9iYWwgbGF5ZXIgdmlzaWJpbGl0eVxuICAgIGNvbnN0IG5ld0xheWVyID0gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe2lzVmlzaWJsZX0pO1xuICAgIGNvbnN0IGlkeCA9IG5ld1N0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBsYXllcklkKTtcblxuICAgIG5ld1N0YXRlID0gdXBkYXRlbGF5ZXJWaXNpYmlsdHkobmV3U3RhdGUsIG5ld0xheWVyLCBpc1Zpc2libGUpO1xuICAgIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV3U3RhdGUsIHtcbiAgICAgIGxheWVyOiBuZXdMYXllcixcbiAgICAgIGlkeFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBzdGF0ZVxuICogQHJldHVybnMgaW5kZXggb2YgdGhlIGZpbHRlciBzeW5jZWQgdG8gdGltZWxpbmUgb3IgLTFcbiAqL1xuZnVuY3Rpb24gZmlsdGVyU3luY2VkV2l0aFRpbWVsaW5lKHN0YXRlOiBWaXNTdGF0ZSk6IG51bWJlciB7XG4gIHJldHVybiBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IChmIGFzIFRpbWVSYW5nZUZpbHRlcikuc3luY2VkV2l0aExheWVyVGltZWxpbmUpO1xufVxuXG4vKipcbiAqIFVwZGF0ZXMgaXNWYWxpZCBmbGFnIG9mIGEgbGF5ZXIuXG4gKiBVcGRhdGVzIGlzVmlzaWJsZSBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgaXNWYWxpZC5cbiAqIFRyaWdnZXJzIHVwZGF0ZSBvZiBkYXRhIGZvciB0aGUgbGF5ZXIgaW4gb3JkZXIgdG8gZ2V0IGVycm9ycyBhZ2FpbiBkdXJpbmcgbmV4dCB1cGRhdGUgaXRlcmF0aW9uLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJTZXRJc1ZhbGlkVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclNldElzVmFsaWRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgaXNWYWxpZH0gPSBhY3Rpb247XG5cbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgY29uc3QgbGF5ZXJUb1VwZGF0ZSA9IHN0YXRlLmxheWVyc1tpZHhdO1xuICBpZiAobGF5ZXJUb1VwZGF0ZSkge1xuICAgIGxldCBuZXdMYXllcjtcbiAgICBsZXQgbmV3RGF0YSA9IG51bGw7XG5cbiAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgLy8gVHJpZ2dlciBkYXRhIHVwZGF0ZSBpbiBvcmRlciB0byBzaG93IGVycm9ycyBhZ2FpbiBpZiBwcmVzZW50LlxuICAgICAgY29uc3Qge2xheWVyLCBsYXllckRhdGF9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKGxheWVyVG9VcGRhdGUsIHN0YXRlLCB1bmRlZmluZWQpO1xuICAgICAgbmV3TGF5ZXIgPSBsYXllcjtcbiAgICAgIG5ld0RhdGEgPSBsYXllckRhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xheWVyID0gbGF5ZXJUb1VwZGF0ZS51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgIGlzVmlzaWJsZTogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgbmV3TGF5ZXIuaXNWYWxpZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEoc3RhdGUsIHtpZHgsIGxheWVyOiBuZXdMYXllciwgbGF5ZXJEYXRhOiBuZXdEYXRhfSk7XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbmZ1bmN0aW9uIGFkZE9yUmVtb3ZlVGV4dExhYmVscyhuZXdGaWVsZHMsIHRleHRMYWJlbCwgZGVmYXVsdFRleHRMYWJlbCA9IERFRkFVTFRfVEVYVF9MQUJFTCkge1xuICBsZXQgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLnNsaWNlKCk7XG5cbiAgY29uc3QgY3VycmVudEZpZWxkcyA9IHRleHRMYWJlbC5tYXAodGwgPT4gdGwuZmllbGQgJiYgdGwuZmllbGQubmFtZSkuZmlsdGVyKGQgPT4gZCk7XG5cbiAgY29uc3QgYWRkRmllbGRzID0gbmV3RmllbGRzLmZpbHRlcihmID0+ICFjdXJyZW50RmllbGRzLmluY2x1ZGVzKGYubmFtZSkpO1xuICBjb25zdCBkZWxldGVGaWVsZHMgPSBjdXJyZW50RmllbGRzLmZpbHRlcihmID0+ICFuZXdGaWVsZHMuZmluZChmZCA9PiBmZC5uYW1lID09PSBmKSk7XG5cbiAgLy8gZGVsZXRlXG4gIG5ld1RleHRMYWJlbCA9IG5ld1RleHRMYWJlbC5maWx0ZXIodGwgPT4gdGwuZmllbGQgJiYgIWRlbGV0ZUZpZWxkcy5pbmNsdWRlcyh0bC5maWVsZC5uYW1lKSk7XG4gIG5ld1RleHRMYWJlbCA9ICFuZXdUZXh0TGFiZWwubGVuZ3RoID8gW2RlZmF1bHRUZXh0TGFiZWxdIDogbmV3VGV4dExhYmVsO1xuXG4gIC8vIGFkZFxuICBuZXdUZXh0TGFiZWwgPSBbXG4gICAgLi4ubmV3VGV4dExhYmVsLmZpbHRlcih0bCA9PiB0bC5maWVsZCksXG4gICAgLi4uYWRkRmllbGRzLm1hcChhZiA9PiAoe1xuICAgICAgLi4uZGVmYXVsdFRleHRMYWJlbCxcbiAgICAgIGZpZWxkOiBhZlxuICAgIH0pKVxuICBdO1xuXG4gIHJldHVybiBuZXdUZXh0TGFiZWw7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVRleHRMYWJlbFByb3BBbmRWYWx1ZShpZHgsIHByb3AsIHZhbHVlLCB0ZXh0TGFiZWwpIHtcbiAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGV4dExhYmVsW2lkeF0sIHByb3ApKSB7XG4gICAgcmV0dXJuIHRleHRMYWJlbDtcbiAgfVxuXG4gIGxldCBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwuc2xpY2UoKTtcblxuICBpZiAocHJvcCA9PT0gJ2ZpZWxkJyAmJiB2YWx1ZSA9PT0gbnVsbCAmJiB0ZXh0TGFiZWwubGVuZ3RoID4gMSkge1xuICAgIC8vIHJlbW92ZSBsYWJlbCB3aGVuIGZpZWxkIHZhbHVlIGlzIHNldCB0byBudWxsXG4gICAgbmV3VGV4dExhYmVsLnNwbGljZShpZHgsIDEpO1xuICB9IGVsc2UgaWYgKHByb3ApIHtcbiAgICBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwubWFwKCh0bCwgaSkgPT4gKGkgPT09IGlkeCA/IHsuLi50bCwgW3Byb3BdOiB2YWx1ZX0gOiB0bCkpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1RleHRMYWJlbDtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYmFzZSBjb25maWc6IGRhdGFJZCwgbGFiZWwsIGNvbHVtbiwgaXNWaXNpYmxlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJUZXh0TGFiZWxDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgaWR4LCBwcm9wLCB2YWx1ZX0gPSBhY3Rpb247XG4gIGNvbnN0IHt0ZXh0TGFiZWx9ID0gb2xkTGF5ZXIuY29uZmlnO1xuXG4gIC8vIHdoZW4gYWRkaW5nIGEgbmV3IGVtcHR5IHRleHQgbGFiZWwsXG4gIC8vIHJlbHkgb24gdGhlIGxheWVyJ3MgZGVmYXVsdCBjb25maWcsIG9yIHVzZSB0aGUgY29uc3RhbnQgREVGQVVMVF9URVhUX0xBQkVMXG4gIGNvbnN0IGRlZmF1bHRUZXh0TGFiZWwgPVxuICAgIG9sZExheWVyLmdldERlZmF1bHRMYXllckNvbmZpZyh7ZGF0YUlkOiAnJ30pPy50ZXh0TGFiZWw/LlswXSA/PyBERUZBVUxUX1RFWFRfTEFCRUw7XG5cbiAgbGV0IG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5zbGljZSgpO1xuICBpZiAoIXRleHRMYWJlbFtpZHhdICYmIGlkeCA9PT0gdGV4dExhYmVsLmxlbmd0aCkge1xuICAgIC8vIGlmIGlkeCBpcyBzZXQgdG8gbGVuZ3RoLCBhZGQgZW1wdHkgdGV4dCBsYWJlbFxuICAgIG5ld1RleHRMYWJlbCA9IFsuLi50ZXh0TGFiZWwsIGRlZmF1bHRUZXh0TGFiZWxdO1xuICB9XG5cbiAgaWYgKGlkeCA9PT0gJ2FsbCcgJiYgcHJvcCA9PT0gJ2ZpZWxkcycpIHtcbiAgICBuZXdUZXh0TGFiZWwgPSBhZGRPclJlbW92ZVRleHRMYWJlbHModmFsdWUsIHRleHRMYWJlbCwgZGVmYXVsdFRleHRMYWJlbCk7XG4gIH0gZWxzZSB7XG4gICAgbmV3VGV4dExhYmVsID0gdXBkYXRlVGV4dExhYmVsUHJvcEFuZFZhbHVlKGlkeCwgcHJvcCwgdmFsdWUsIG5ld1RleHRMYWJlbCk7XG4gIH1cbiAgLy8gdXBkYXRlIHRleHQgbGFiZWwgcHJvcCBhbmQgdmFsdWVcbiAgcmV0dXJuIGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihzdGF0ZSwge1xuICAgIG9sZExheWVyLFxuICAgIG5ld0NvbmZpZzoge3RleHRMYWJlbDogbmV3VGV4dExhYmVsfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEoZGF0YXNldCwgbGF5ZXJDbGFzc2VzLCBsYXllciwgc2NoZW1hKSB7XG4gIGNvbnN0IGxvYWRlZExheWVyID0gc2VyaWFsaXplTGF5ZXIobGF5ZXIsIHNjaGVtYSk7XG4gIHJldHVybiBsb2FkZWRMYXllclxuICAgID8gdmFsaWRhdGVMYXllcldpdGhEYXRhKGRhdGFzZXQsIGxvYWRlZExheWVyLCBsYXllckNsYXNzZXMsIHtcbiAgICAgICAgYWxsb3dFbXB0eUNvbHVtbjogdHJ1ZVxuICAgICAgfSlcbiAgICA6IG51bGw7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGNvbmZpZyBkYXRhSWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyRGF0YUlkQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IHtcbiAgICBvbGRMYXllcjogTGF5ZXI7XG4gICAgbmV3Q29uZmlnOiB7XG4gICAgICBkYXRhSWQ6IHN0cmluZztcbiAgICB9O1xuICB9XG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgbmV3Q29uZmlnfSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFJZH0gPSBuZXdDb25maWc7XG5cbiAgaWYgKCFvbGRMYXllciB8fCAhc3RhdGUuZGF0YXNldHNbZGF0YUlkXSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuXG4gIGxldCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtkYXRhSWR9KTtcblxuICAvLyB0aGlzIG1heSBoYXBwZW4gd2hlbiBhIGxheWVyIGlzIG5ldyAodHlwZTogbnVsbCBhbmQgbm8gY29sdW1ucykgYnV0IGl0J3Mgbm90IHJlYWR5IHRvIGJlIHNhdmVkXG4gIGlmIChuZXdMYXllci5pc1ZhbGlkVG9TYXZlKCkpIHtcbiAgICBjb25zdCB2YWxpZGF0ZWQgPSB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YShcbiAgICAgIHN0YXRlLmRhdGFzZXRzW2RhdGFJZF0sXG4gICAgICBzdGF0ZS5sYXllckNsYXNzZXMsXG4gICAgICBuZXdMYXllcixcbiAgICAgIHN0YXRlLnNjaGVtYVxuICAgICk7XG4gICAgLy8gaWYgY2FudCB2YWxpZGF0ZSBpdCB3aXRoIGRhdGEgY3JlYXRlIGEgbmV3IG9uZVxuICAgIGlmICghdmFsaWRhdGVkKSB7XG4gICAgICBjb25zdCBvbGRMYXllclR5cGUgPSBvbGRMYXllci50eXBlO1xuICAgICAgaWYgKG9sZExheWVyVHlwZSkge1xuICAgICAgICBuZXdMYXllciA9IG5ldyBzdGF0ZS5sYXllckNsYXNzZXNbb2xkTGF5ZXJUeXBlXSh7ZGF0YUlkLCBpZDogb2xkTGF5ZXIuaWR9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXIgPSB2YWxpZGF0ZWQ7XG4gICAgfVxuICB9XG5cbiAgbmV3TGF5ZXIgPSBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgaXNWaXNpYmxlOiBvbGRMYXllci5jb25maWcuaXNWaXNpYmxlLFxuICAgIGlzQ29uZmlnQWN0aXZlOiB0cnVlXG4gIH0pO1xuXG4gIG5ld0xheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzKTtcbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgdW5kZWZpbmVkKTtcblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRJbml0aWFsTGF5ZXJDb25maWcobGF5ZXIsIGRhdGFzZXRzLCBsYXllckNsYXNzZXMpOiBMYXllciB7XG4gIGxldCBuZXdMYXllciA9IGxheWVyO1xuICBpZiAoIU9iamVjdC5rZXlzKGRhdGFzZXRzKS5sZW5ndGgpIHtcbiAgICAvLyBubyBkYXRhIGlzIGxvYWRlZFxuICAgIHJldHVybiBsYXllcjtcbiAgfVxuICBpZiAoIWxheWVyLmNvbmZpZy5kYXRhSWQpIHtcbiAgICAvLyBzZXQgbGF5ZXIgZGF0YUlkXG4gICAgbmV3TGF5ZXIgPSBsYXllci51cGRhdGVMYXllckNvbmZpZyh7ZGF0YUlkOiBPYmplY3Qua2V5cyhkYXRhc2V0cylbMF19KTtcbiAgfVxuICBjb25zdCBkYXRhc2V0ID0gZGF0YXNldHNbbmV3TGF5ZXIuY29uZmlnLmRhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBsYXllcjtcbiAgfVxuXG4gIC8vIGZpbmQgZGVmYXV0IGxheWVyIHByb3BzXG4gIGNvbnN0IHJlc3VsdCA9XG4gICAgdHlwZW9mIGxheWVyQ2xhc3Nlc1tuZXdMYXllci50eXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMgPT09ICdmdW5jdGlvbidcbiAgICAgID8gbGF5ZXJDbGFzc2VzW25ld0xheWVyLnR5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyhkYXRhc2V0LCBbXSlcbiAgICAgIDoge3Byb3BzOiBbXX07XG5cbiAgLy8gYW4gYXJyYXkgb2YgcG9zc2libGUgcHJvcHMsIHVzZSAxc3Qgb25lXG4gIGNvbnN0IHByb3BzID0gQXJyYXkuaXNBcnJheShyZXN1bHQpID8gcmVzdWx0IDogcmVzdWx0LnByb3BzIHx8IFtdO1xuXG4gIGlmIChwcm9wcy5sZW5ndGgpIHtcbiAgICBuZXdMYXllciA9IG5ldyBsYXllckNsYXNzZXNbbGF5ZXIudHlwZV0oe1xuICAgICAgLi4ucHJvcHNbMF0sXG4gICAgICBsYWJlbDogbmV3TGF5ZXIuY29uZmlnLmxhYmVsLFxuICAgICAgZGF0YUlkOiBuZXdMYXllci5jb25maWcuZGF0YUlkLFxuICAgICAgaXNDb25maWdBY3RpdmU6IG5ld0xheWVyLmNvbmZpZy5pc0NvbmZpZ0FjdGl2ZVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB0eXBlb2YgbmV3TGF5ZXIuc2V0SW5pdGlhbExheWVyQ29uZmlnID09PSAnZnVuY3Rpb24nXG4gICAgPyBuZXdMYXllci5zZXRJbml0aWFsTGF5ZXJDb25maWcoZGF0YXNldClcbiAgICA6IG5ld0xheWVyO1xufVxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgdHlwZS4gUHJldmlld3MgbGF5ZXIgY29uZmlnIHdpbGwgYmUgY29waWVkIGlmIGFwcGxpY2FibGUuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclR5cGVDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgbmV3VHlwZX0gPSBhY3Rpb247XG4gIGlmICghb2xkTGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qgb2xkSWQgPSBvbGRMYXllci5pZDtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZElkKTtcblxuICBpZiAoIXN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXSkge1xuICAgIENvbnNvbGUuZXJyb3IoYCR7bmV3VHlwZX0gaXMgbm90IGEgdmFsaWQgbGF5ZXIgdHlwZWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsZXQgbmV3TGF5ZXIgPSBuZXcgc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdKHtcbiAgICAvLyBrZWVwIG9sZCBsYXllciBsYWJsZSBhbmQgaXNDb25maWdBY3RpdmVcbiAgICBsYWJlbDogb2xkTGF5ZXIuY29uZmlnLmxhYmVsLFxuICAgIGlzQ29uZmlnQWN0aXZlOiBvbGRMYXllci5jb25maWcuaXNDb25maWdBY3RpdmUsXG4gICAgZGF0YUlkOiBvbGRMYXllci5jb25maWcuZGF0YUlkXG4gIH0pO1xuXG4gIGlmICghb2xkTGF5ZXIudHlwZSkge1xuICAgIC8vIGlmIHNldHRpbmcgbGF5ZXIgdHlwZSBvbiBhbiBlbXB0eSBsYXllclxuICAgIG5ld0xheWVyID0gc2V0SW5pdGlhbExheWVyQ29uZmlnKG5ld0xheWVyLCBzdGF0ZS5kYXRhc2V0cywgc3RhdGUubGF5ZXJDbGFzc2VzKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBnZXQgYSBtaW50IGxheWVyLCB3aXRoIG5ldyBpZCBhbmQgdHlwZVxuICAgIC8vIGJlY2F1c2UgZGVjay5nbCB1c2VzIGlkIHRvIG1hdGNoIGJldHdlZW4gbmV3IGFuZCBvbGQgbGF5ZXIuXG4gICAgLy8gSWYgdHlwZSBoYXMgY2hhbmdlZCBidXQgaWQgaXMgdGhlIHNhbWUsIGl0IHdpbGwgYnJlYWtcbiAgICBuZXdMYXllci5hc3NpZ25Db25maWdUb0xheWVyKG9sZExheWVyLmNvbmZpZywgb2xkTGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MpO1xuICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzKTtcbiAgfVxuXG4gIGNvbnN0IHtjbGlja2VkLCBob3ZlckluZm99ID0gc3RhdGU7XG5cbiAgbGV0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNsaWNrZWQ6IG9sZExheWVyLmlzTGF5ZXJIb3ZlcmVkKGNsaWNrZWQpID8gdW5kZWZpbmVkIDogY2xpY2tlZCxcbiAgICBob3ZlckluZm86IG9sZExheWVyLmlzTGF5ZXJIb3ZlcmVkKGhvdmVySW5mbykgPyB1bmRlZmluZWQgOiBob3ZlckluZm9cbiAgfTtcblxuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIG5ld1N0YXRlKTtcbiAgbmV3U3RhdGUgPSB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV3U3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcblxuICBpZiAobGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkIHx8IG9sZExheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIC8vIHVwZGF0ZSBzcGxpdE1hcCBsYXllciBpZFxuICBpZiAoc3RhdGUuc3BsaXRNYXBzLmxlbmd0aCkge1xuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICBzcGxpdE1hcHM6IG5ld1N0YXRlLnNwbGl0TWFwcy5tYXAoc2V0dGluZ3MgPT4ge1xuICAgICAgICBjb25zdCB7W29sZElkXTogb2xkTGF5ZXJNYXAsIC4uLm90aGVyTGF5ZXJzfSA9IHNldHRpbmdzLmxheWVycztcbiAgICAgICAgcmV0dXJuIG9sZElkIGluIHNldHRpbmdzLmxheWVyc1xuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAuLi5zZXR0aW5ncyxcbiAgICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgICAgLi4ub3RoZXJMYXllcnMsXG4gICAgICAgICAgICAgICAgW2xheWVyLmlkXTogb2xkTGF5ZXJNYXBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogc2V0dGluZ3M7XG4gICAgICB9KVxuICAgIH07XG4gIH1cblxuICAvLyB1cGRhdGUgbGF5ZXJPcmRlciB3aXRoIG5ldyBpZFxuICBuZXdTdGF0ZSA9IHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBsYXllck9yZGVyOiBuZXdTdGF0ZS5sYXllck9yZGVyLm1hcChsYXllcklkID0+XG4gICAgICBsYXllcklkID09PSBvbGRMYXllci5pZCA/IG5ld0xheWVyLmlkIDogbGF5ZXJJZFxuICAgIClcbiAgfTtcblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIHZpc3VhbCBjaGFubmVsXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMge09iamVjdH0gbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclZpc3VhbENoYW5uZWxDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBuZXdDb25maWcsIG5ld1Zpc0NvbmZpZywgY2hhbm5lbH0gPSBhY3Rpb247XG4gIGlmICghb2xkTGF5ZXIuY29uZmlnLmRhdGFJZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tvbGRMYXllci5jb25maWcuZGF0YUlkXTtcblxuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBsZXQgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyhuZXdDb25maWcpO1xuICBpZiAobmV3VmlzQ29uZmlnKSBuZXdMYXllciA9IG5ld0xheWVyLnVwZGF0ZUxheWVyVmlzQ29uZmlnKG5ld1Zpc0NvbmZpZyk7XG5cbiAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsKGRhdGFzZXQsIGNoYW5uZWwpO1xuXG4gIC8vIGNhbGxpbmcgdXBkYXRlIGFuaW1hdGlvbiBkb21haW4gZmlyc3QgdG8gbWVyZ2UgYWxsIGxheWVyIGFuaW1hdGlvbiBkb21haW5cbiAgbGV0IHVwZGF0ZWRTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihzdGF0ZSk7XG5cbiAgY29uc3QgdmlzdWFsQ2hhbm5lbCA9IG9sZExheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdO1xuICBpZiAodmlzdWFsQ2hhbm5lbD8uY2hhbm5lbFNjYWxlVHlwZSA9PT0gQ0hBTk5FTF9TQ0FMRVMuY29sb3IgJiYgbmV3Q29uZmlnW3Zpc3VhbENoYW5uZWwuZmllbGRdKSB7XG4gICAgLy8gaWYgY29sb3IgZmllbGQgY2hhbmdlZCwgc2V0IGN1c3RvbUJyZWFrcyB0byBmYWxzZVxuICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyQ29sb3JVSSh2aXN1YWxDaGFubmVsLnJhbmdlLCB7XG4gICAgICBjb2xvclJhbmdlQ29uZmlnOiB7XG4gICAgICAgIC4uLm5ld0xheWVyLmNvbmZpZy5jb2xvclVJW3Zpc3VhbENoYW5uZWwucmFuZ2VdLmNvbG9yUmFuZ2VDb25maWcsXG4gICAgICAgIGN1c3RvbUJyZWFrczogZmFsc2VcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHVwZGF0ZWRTdGF0ZSA9IHtcbiAgICAgIC4uLnVwZGF0ZWRTdGF0ZSxcbiAgICAgIGxheWVyczogdXBkYXRlZFN0YXRlLmxheWVycy5tYXAobCA9PiAobC5pZCA9PT0gb2xkTGF5ZXIuaWQgPyBuZXdMYXllciA6IGwpKVxuICAgIH07XG4gIH1cblxuICBjb25zdCBvbGRMYXllckRhdGEgPSB1cGRhdGVkU3RhdGUubGF5ZXJEYXRhW2lkeF07XG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgdXBkYXRlZFN0YXRlLCBvbGRMYXllckRhdGEpO1xuXG4gIGlmIChcbiAgICB2aXN1YWxDaGFubmVsPy5jaGFubmVsU2NhbGVUeXBlID09PSBDSEFOTkVMX1NDQUxFUy5jb2xvciAmJlxuICAgIG5ld0NvbmZpZ1t2aXN1YWxDaGFubmVsPy5zY2FsZV0gPT09IFNDQUxFX1RZUEVTLmN1c3RvbU9yZGluYWwgJiZcbiAgICAhbmV3VmlzQ29uZmlnXG4gICkge1xuICAgIC8vIHdoZW4gc3dpdGNoaW5nIHRvIGN1c3RvbU9yZGluYWwgc2NhbGUsIGNyZWF0ZSBhIGN1c3RvbVBhbGV0dGUgaW4gY29sb3JVSSB3aXRoIHVwZGF0ZWQgY29sb3JEb21haW5cbiAgICBjb25zdCBjdXN0b21QYWxldHRlID0gaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlKHtcbiAgICAgIHNjYWxlOiBTQ0FMRV9UWVBFUy5jdXN0b21PcmRpbmFsLFxuICAgICAgZmllbGQ6IGxheWVyLmNvbmZpZ1t2aXN1YWxDaGFubmVsLmZpZWxkXSxcbiAgICAgIG9yZGluYWxEb21haW46IGxheWVyLmNvbmZpZ1tsYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsXS5kb21haW5dLFxuICAgICAgcmFuZ2U6IGxheWVyLmNvbmZpZy52aXNDb25maWdbdmlzdWFsQ2hhbm5lbC5yYW5nZV0sXG4gICAgICBjb2xvckJyZWFrczogbnVsbFxuICAgIH0pO1xuICAgIC8vIHVwZGF0ZSBjb2xvclJhbmdlIHdpdGggbmV3IGN1c3RvbVBhbGV0dGVcbiAgICBsYXllci51cGRhdGVMYXllckNvbG9yVUkodmlzdWFsQ2hhbm5lbC5yYW5nZSwge1xuICAgICAgc2hvd0NvbG9yQ2hhcnQ6IHRydWUsXG4gICAgICBjb2xvclJhbmdlQ29uZmlnOiB7XG4gICAgICAgIC4uLmxheWVyLmNvbmZpZy5jb2xvclVJW3Zpc3VhbENoYW5uZWwucmFuZ2VdLmNvbG9yUmFuZ2VDb25maWcsXG4gICAgICAgIGN1c3RvbUJyZWFrczogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGN1c3RvbVBhbGV0dGVcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHVwZGF0ZWRTdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBgdmlzQ29uZmlnYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyfSA9IGFjdGlvbjtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgY29uc3QgcHJvcHMgPSBPYmplY3Qua2V5cyhhY3Rpb24ubmV3VmlzQ29uZmlnKTtcblxuICBjb25zdCBuZXdWaXNDb25maWcgPSB7XG4gICAgLi4ub2xkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZyxcbiAgICAuLi5hY3Rpb24ubmV3VmlzQ29uZmlnXG4gIH07XG5cbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyh7dmlzQ29uZmlnOiBuZXdWaXNDb25maWd9KTtcblxuICBpZiAobmV3TGF5ZXIuc2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhKHByb3BzKSkge1xuICAgIGNvbnN0IG9sZExheWVyRGF0YSA9IHN0YXRlLmxheWVyRGF0YVtpZHhdO1xuICAgIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIG9sZExheWVyRGF0YSk7XG4gICAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2xheWVyOiBuZXdMYXllciwgaWR4fSk7XG59XG5cbi8qKlxuICogUmVzZXQgYW5pbWF0aW9uIGNvbmZpZyBjdXJyZW50IHRpbWUgdG8gYSBzcGVjaWZpZWQgdmFsdWVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKlxuICovXG5leHBvcnQgY29uc3Qgc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlciA9IDxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAge3ZhbHVlfTogVmlzU3RhdGVBY3Rpb25zLlNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXJBY3Rpb25cbik6IFMgPT4ge1xuICBjb25zdCBjdXJyZW50VGltZSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWVbMF0gOiB2YWx1ZTtcbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgY3VycmVudFRpbWVcbiAgICB9XG4gIH07XG4gIC8vIHVwZGF0ZSBhbmltYXRpb24gY29uZmlnIGZvciBlYWNoIGxheWVyXG4gIHJldHVybiBzdGF0ZS5sYXllcnMucmVkdWNlKChhY2N1LCBsKSA9PiB7XG4gICAgaWYgKGwuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkICYmIGwudHlwZSAhPT0gJ3RyaXAnKSB7XG4gICAgICByZXR1cm4gbGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyKGFjY3UsIHtvbGRMYXllcjogbCwgcHJvcDogJ2N1cnJlbnRUaW1lJywgY3VycmVudFRpbWV9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjY3U7XG4gIH0sIG5leHRTdGF0ZSk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgcHJvcGVydHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihzdGF0ZSwgYWN0aW9uKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIGFuaW1hdGlvbiB3aW5kb3dcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICB7aWQsIGFuaW1hdGlvbldpbmRvd306IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyQWN0aW9uXG4pOiBTIHtcbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gZi5pZCA9PT0gaWQpO1xuXG4gIGlmICghZmlsdGVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICBhbmltYXRpb25XaW5kb3dcbiAgfTtcblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5ld0ZpbHRlcikoc3RhdGUuZmlsdGVycylcbiAgfTtcblxuICBjb25zdCBuZXdTeW5jVGltZWxpbmVNb2RlID0gZ2V0U3luY0FuaW1hdGlvbk1vZGUobmV3RmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlcik7XG5cbiAgcmV0dXJuIHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyKG5ld1N0YXRlLCB7aWQsIG1vZGU6IG5ld1N5bmNUaW1lbGluZU1vZGV9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BcHBseUZpbHRlckNvbmZpZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2ZpbHRlcklkLCBuZXdGaWx0ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gU2VyaWFsaXplIHRoZSBmaWx0ZXJzIHRvIG9ubHkgY29tcGFyZSB0aGUgc2F2ZWQgcHJvcGVydGllc1xuICBjb25zdCBzZXJpYWxpemVkT2xkRmlsdGVyID0gc2VyaWFsaXplRmlsdGVyKG9sZEZpbHRlciwgc3RhdGUuc2NoZW1hKSA/PyB7Y29uZmlnOiB7fX07XG4gIGNvbnN0IHNlcmlhbGl6ZWROZXdGaWx0ZXIgPSBzZXJpYWxpemVGaWx0ZXIobmV3RmlsdGVyLCBzdGF0ZS5zY2hlbWEpO1xuICBpZiAoIXNlcmlhbGl6ZWROZXdGaWx0ZXIgfHwgaXNFcXVhbChzZXJpYWxpemVkT2xkRmlsdGVyLCBzZXJpYWxpemVkTmV3RmlsdGVyKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIElmIHRoZXJlIGFyZSBhbnkgY2hhbmdlcyB0byB0aGUgZmlsdGVyLCBhcHBseSB0aGVtXG4gIGNvbnN0IGNoYW5nZWQgPSBwaWNrQ2hhbmdlZFByb3BzKHNlcmlhbGl6ZWRPbGRGaWx0ZXIsIHNlcmlhbGl6ZWROZXdGaWx0ZXIpO1xuICBkZWxldGUgY2hhbmdlZFsnaWQnXTsgLy8gaWQgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkXG5cbiAgY29uc3QgZmlsdGVySW5kZXggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKGZpbHRlckluZGV4IDwgMCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihcbiAgICBzdGF0ZSxcbiAgICBzZXRGaWx0ZXIoZmlsdGVySW5kZXgsIE9iamVjdC5rZXlzKGNoYW5nZWQpLCBPYmplY3QudmFsdWVzKGNoYW5nZWQpKVxuICApO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgcHJvcGVydHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2lkeCwgdmFsdWVJbmRleCA9IDB9ID0gYWN0aW9uO1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgQ29uc29sZS5lcnJvcihgZmlsdGVycy4ke2lkeH0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChcbiAgICBBcnJheS5pc0FycmF5KGFjdGlvbi5wcm9wKSAmJlxuICAgICghQXJyYXkuaXNBcnJheShhY3Rpb24udmFsdWUpIHx8IGFjdGlvbi5wcm9wLmxlbmd0aCAhPT0gYWN0aW9uLnZhbHVlLmxlbmd0aClcbiAgKSB7XG4gICAgQ29uc29sZS5lcnJvcignRXhwZWN0aW5nIHZhbHVlIHRvIGJlIGFuIGFycmF5IG9mIHRoZSBzYW1lIGxlbmd0aCwgc2luY2UgcHJvcCBpcyBhbiBhcnJheScpO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICAvLyBjb252ZXJ0IHByb3AgYW5kIHZhbHVlIHRvIGFycmF5XG4gIGNvbnN0IHByb3BzID0gdG9BcnJheShhY3Rpb24ucHJvcCk7XG4gIGNvbnN0IHZhbHVlcyA9IEFycmF5LmlzQXJyYXkoYWN0aW9uLnByb3ApID8gdG9BcnJheShhY3Rpb24udmFsdWUpIDogW2FjdGlvbi52YWx1ZV07XG5cbiAgbGV0IG5ld0ZpbHRlciA9IG9sZEZpbHRlcjtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG5cbiAgbGV0IGRhdGFzZXRJZHNUb0ZpbHRlcjogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHByb3AgPSBwcm9wc1tpXTtcbiAgICBjb25zdCB2YWx1ZSA9IHZhbHVlc1tpXTtcbiAgICAvLyBXZSBjdXJyZW50bHkgZG8gbm90IHN1cHBvcnQgcGFzc2luZyBpbiBuYW1lIGFzIGFuIGFycmF5IGludG8gX3VwZGF0ZUZpbHRlclByb3AsIHNvIHdlIGNhbGwgaXQgbXVsdGlwbGUgdGltZXMgd2l0aCBlYWNoIG5hbWVcbiAgICAvLyBTZWUgdGhlIGNvbW1lbnQgaW4gdGhlcmUgYXMgdG8gd2hhdCBzaG91bGQgYmUgYWRkcmVzc2VkXG4gICAgbGV0IHJlcztcbiAgICBpZiAocHJvcCA9PT0gJ25hbWUnICYmIEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG4gICAgICByZXMgPSB2YWx1ZS5yZWR1Y2UoKGFjY3UsIHYpID0+IHtcbiAgICAgICAgcmV0dXJuIF91cGRhdGVGaWx0ZXJQcm9wKGFjY3UsIG5ld0ZpbHRlciwgcHJvcCwgdiwgdmFsdWVJbmRleCk7XG4gICAgICB9LCBuZXdTdGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcyA9IF91cGRhdGVGaWx0ZXJQcm9wKG5ld1N0YXRlLCBuZXdGaWx0ZXIsIHByb3AsIHZhbHVlLCB2YWx1ZUluZGV4KTtcbiAgICB9XG4gICAgbmV3RmlsdGVyID0gcmVzLmZpbHRlcjtcbiAgICBuZXdTdGF0ZSA9IHJlcy5zdGF0ZTtcbiAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSBkYXRhc2V0SWRzVG9GaWx0ZXIuY29uY2F0KHJlcy5kYXRhc2V0SWRzVG9GaWx0ZXIpO1xuICB9XG5cbiAgY29uc3QgZW5sYXJnZWRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiBmLnZpZXcgPT09IEZJTFRFUl9WSUVXX1RZUEVTLmVubGFyZ2VkKTtcblxuICBpZiAoZW5sYXJnZWRGaWx0ZXIgJiYgZW5sYXJnZWRGaWx0ZXIuaWQgIT09IG5ld0ZpbHRlci5pZCkge1xuICAgIC8vIHRoZXJlIHNob3VsZCBiZSBvbmx5IG9uZSBlbmxhcmdlZCBmaWx0ZXJcbiAgICBuZXdGaWx0ZXIudmlldyA9IEZJTFRFUl9WSUVXX1RZUEVTLnNpZGU7XG4gIH1cblxuICAvLyBzYXZlIG5ldyBmaWx0ZXJzIHRvIG5ld1N0YXRlXG4gIG5ld1N0YXRlID0gc2V0KFsnZmlsdGVycycsIGlkeF0sIG5ld0ZpbHRlciwgbmV3U3RhdGUpO1xuXG4gIC8vIGZpbHRlciBkYXRhXG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgIHVuaXEoZGF0YXNldElkc1RvRmlsdGVyKSxcbiAgICBuZXdTdGF0ZS5kYXRhc2V0cyxcbiAgICBuZXdTdGF0ZS5maWx0ZXJzLFxuICAgIG5ld1N0YXRlLmxheWVyc1xuICApO1xuXG4gIG5ld1N0YXRlID0gc2V0KFsnZGF0YXNldHMnXSwgZmlsdGVyZWREYXRhc2V0cywgbmV3U3RhdGUpO1xuXG4gIC8vIG5lZWQgdG8gdXBkYXRlIGZpbHRlclBsb3QgYWZ0ZXIgZmlsdGVyIERhdGFzZXQgZm9yIHBsb3QgdG8gdXBkYXRlIG9uIGZpbHRlcmVkIHJlc3VsdFxuICBjb25zdCBmaWx0ZXJXaXRoUExvdCA9IHVwZGF0ZUZpbHRlclBsb3QobmV3U3RhdGUuZGF0YXNldHMsIG5ld1N0YXRlLmZpbHRlcnNbaWR4XSk7XG5cbiAgbmV3U3RhdGUgPSBzZXQoWydmaWx0ZXJzJywgaWR4XSwgZmlsdGVyV2l0aFBMb3QsIG5ld1N0YXRlKTtcblxuICAvLyBkYXRhSWQgaXMgYW4gYXJyYXlcbiAgLy8gcGFzcyBvbmx5IHRoZSBkYXRhc2V0IHdlIG5lZWQgdG8gdXBkYXRlXG4gIG5ld1N0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5ld1N0YXRlLCBkYXRhc2V0SWRzVG9GaWx0ZXIsIG5ld0ZpbHRlcik7XG5cbiAgLy8gSWYgdGltZSByYW5nZSBmaWx0ZXIgdmFsdWUgd2FzIHVwZGF0ZWQsIGFkanVzdCBhbmltYXRpb24gY29uZmlnXG4gIGlmIChuZXdGaWx0ZXIudHlwZSA9PT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSAmJiBwcm9wcy5pbmNsdWRlcygndmFsdWUnKSkge1xuICAgIG5ld1N0YXRlID0gYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlcihuZXdTdGF0ZSwgYWN0aW9uLmlkeCk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbmZ1bmN0aW9uIF91cGRhdGVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCB2YWx1ZSwgZGF0YXNldHMpIHtcbiAgbGV0IG5ld0ZpbHRlciA9IGZpbHRlcjtcbiAgaWYgKGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF0pIHtcbiAgICAvLyBpZiBkYXRhSWQgYWxyZWFkeSBleGlzdFxuICAgIG5ld0ZpbHRlciA9IF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCBkYXRhc2V0cyk7XG4gIH1cbiAgaWYgKHZhbHVlKSB7XG4gICAgY29uc3QgbmV4dFZhbHVlID0gbmV3RmlsdGVyLmRhdGFJZC5zbGljZSgpO1xuICAgIG5leHRWYWx1ZVt2YWx1ZUluZGV4XSA9IHZhbHVlO1xuICAgIG5ld0ZpbHRlciA9IHNldChbJ2RhdGFJZCddLCBuZXh0VmFsdWUsIG5ld0ZpbHRlcik7XG4gIH1cbiAgcmV0dXJuIG5ld0ZpbHRlcjtcbn1cblxuZnVuY3Rpb24gX3JlbW92ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIGRhdGFzZXRzKSB7XG4gIGNvbnN0IGRhdGFJZCA9IGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF07XG5cbiAgaWYgKGZpbHRlci5kYXRhSWQubGVuZ3RoID09PSAxICYmIHZhbHVlSW5kZXggPT09IDApIHtcbiAgICAvLyBpZiByZW1vdmUgdGhlIG9ubHkgZGF0YUlkLCBjcmVhdGUgYW4gZW1wdHkgZmlsdGVyIGluc3RlYWQ7XG4gICAgcmV0dXJuIGdldERlZmF1bHRGaWx0ZXIoe2lkOiBmaWx0ZXIuaWR9KTtcbiAgfVxuXG4gIGlmIChkYXRhSWQpIHtcbiAgICBmaWx0ZXIgPSByZW1vdmVGaWx0ZXJQbG90KGZpbHRlciwgZGF0YUlkKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgcHJvcCBvZiBbJ2RhdGFJZCcsICduYW1lJywgJ2ZpZWxkSWR4JywgJ2dwdUNoYW5uZWwnXSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGZpbHRlcltwcm9wXSkpIHtcbiAgICAgIGNvbnN0IG5leHRWYWwgPSBmaWx0ZXJbcHJvcF0uc2xpY2UoKTtcbiAgICAgIG5leHRWYWwuc3BsaWNlKHZhbHVlSW5kZXgsIDEpO1xuICAgICAgZmlsdGVyID0gc2V0KFtwcm9wXSwgbmV4dFZhbCwgZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICAvLyBtZXJnZUZpZWxkRG9tYWluIGZvciB0aGUgcmVtYWluaW5nIGZpZWxkc1xuICBjb25zdCBkb21haW5TdGVwcyA9IG1lcmdlRmlsdGVyRG9tYWluKGZpbHRlciwgZGF0YXNldHMpO1xuXG4gIGNvbnN0IG5leHRGaWx0ZXIgPSB7XG4gICAgLi4uZmlsdGVyLFxuICAgIC8vIHZhbHVlOiBuZXh0VmFsdWUsXG4gICAgLi4uKGRvbWFpblN0ZXBzID8ge2RvbWFpbjogZG9tYWluU3RlcHM/LmRvbWFpbiwgc3RlcDogZG9tYWluU3RlcHM/LnN0ZXB9IDoge30pXG4gIH07XG5cbiAgY29uc3QgbmV4dFZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihuZXh0RmlsdGVyLnZhbHVlLCBuZXh0RmlsdGVyKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5uZXh0RmlsdGVyLFxuICAgIHZhbHVlOiBuZXh0VmFsdWVcbiAgfTtcbn1cblxuLyoqICpcbiAqIFVwZGF0ZXMgYSBzaW5nbGUgcHJvcGVydHkgb2YgYSBmaWx0ZXJcbiAqL1xuZnVuY3Rpb24gX3VwZGF0ZUZpbHRlclByb3Aoc3RhdGUsIGZpbHRlciwgcHJvcCwgdmFsdWUsIHZhbHVlSW5kZXgsIGRhdGFzZXRJZHM/KSB7XG4gIGxldCBkYXRhc2V0SWRzVG9GaWx0ZXI6IHN0cmluZ1tdID0gW107XG4gIHN3aXRjaCAocHJvcCkge1xuICAgIC8vIFRPRE86IE5leHQgUFIgZm9yIFVJIGlmIHdlIHVwZGF0ZSBmaWx0ZXJEYXRhSWQsIHdlIG5lZWQgdG8gY29uc2lkZXIgdHdvIGNhc2VzOlxuICAgIC8vIDEuIGRhdGFJZCBpcyBlbXB0eTogY3JlYXRlIGEgZGVmYXVsdCBmaWx0ZXJcbiAgICAvLyAyLiBBZGQgYSBuZXcgZGF0YXNldCBpZFxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMuZGF0YUlkOiB7XG4gICAgICBjb25zdCBvbGREYXRhSWQgPSBbLi4uZmlsdGVyLmRhdGFJZF07XG4gICAgICBmaWx0ZXIgPSBfdXBkYXRlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgdmFsdWUsIHN0YXRlLmRhdGFzZXRzKTtcbiAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IHVuaXEoWy4uLm9sZERhdGFJZCwgLi4uZmlsdGVyLmRhdGFJZF0pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMubmFtZToge1xuICAgICAgLy8gd2UgYXJlIHN1cHBvcnRpbmcgdGhlIGN1cnJlbnQgZnVuY3Rpb25hbGl0eVxuICAgICAgLy8gVE9ETzogTmV4dCBQUiBmb3IgVUkgZmlsdGVyIG5hbWUgd2lsbCBvbmx5IHVwZGF0ZSBmaWx0ZXIgbmFtZSBidXQgaXQgd29uJ3QgaGF2ZSBzaWRlIGVmZmVjdHNcbiAgICAgIC8vIHdlIGFyZSBnb25uYSB1c2UgcGFpciBvZiBkYXRhc2V0cyBhbmQgZmllbGRJZHggdG8gdXBkYXRlIHRoZSBmaWx0ZXJcbiAgICAgIGNvbnN0IGRhdGFzZXRJZCA9IGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF07XG4gICAgICBjb25zdCB7ZmlsdGVyOiB1cGRhdGVkRmlsdGVyLCBkYXRhc2V0OiBuZXdEYXRhc2V0fSA9IGFwcGx5RmlsdGVyRmllbGROYW1lKFxuICAgICAgICBmaWx0ZXIsXG4gICAgICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgICAgICBkYXRhc2V0SWQsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB2YWx1ZUluZGV4LFxuICAgICAgICB7bWVyZ2VEb21haW46IHZhbHVlSW5kZXggPiAwfVxuICAgICAgKTtcbiAgICAgIGlmICh1cGRhdGVkRmlsdGVyKSB7XG4gICAgICAgIGZpbHRlciA9IHVwZGF0ZWRGaWx0ZXI7XG4gICAgICAgIGlmIChmaWx0ZXIuZ3B1KSB7XG4gICAgICAgICAgZmlsdGVyID0gc2V0RmlsdGVyR3B1TW9kZShmaWx0ZXIsIHN0YXRlLmZpbHRlcnMpO1xuICAgICAgICAgIGZpbHRlciA9IGFzc2lnbkdwdUNoYW5uZWwoZmlsdGVyLCBzdGF0ZS5maWx0ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZSA9IHNldChbJ2RhdGFzZXRzJywgZGF0YXNldElkXSwgbmV3RGF0YXNldCwgc3RhdGUpO1xuICAgICAgICAvLyByZW1vdmUgZmlsdGVyIFBsb3QgYXQgZGF0YXNldElkLCBzbyBpdCB3aWxsIGJlIHJlY2FsY3VsYXRlZFxuICAgICAgICBmaWx0ZXIgPSByZW1vdmVGaWx0ZXJQbG90KGZpbHRlciwgZGF0YXNldElkKTtcblxuICAgICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSB1cGRhdGVkRmlsdGVyLmRhdGFJZDtcbiAgICAgIH1cbiAgICAgIC8vIG9ubHkgZmlsdGVyIHRoZSBjdXJyZW50IGRhdGFzZXRcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMubGF5ZXJJZDoge1xuICAgICAgLy8gV2UgbmVlZCB0byB1cGRhdGUgb25seSBkYXRhc2V0SWQvcyBpZiB3ZSBoYXZlIGFkZGVkL3JlbW92ZWQgbGF5ZXJzXG4gICAgICAvLyAtIGNoZWNrIGZvciBsYXllcklkIGNoYW5nZXMgKFhPUiB3b3JrcyBiZWNhdXNlIG9mIHN0cmluZyB2YWx1ZXMpXG4gICAgICAvLyBpZiBubyBkaWZmZXJlbmNlcyBiZXR3ZWVuIGxheWVySWRzLCBkb24ndCBkbyBhbnkgZmlsdGVyaW5nXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBjb25zdCBsYXllcklkRGlmZmVyZW5jZSA9IHhvcih2YWx1ZSwgZmlsdGVyLmxheWVySWQpO1xuXG4gICAgICBjb25zdCBsYXllckRhdGFJZHMgPSB1bmlxPHN0cmluZz4oXG4gICAgICAgIGxheWVySWREaWZmZXJlbmNlXG4gICAgICAgICAgLm1hcChsaWQgPT5cbiAgICAgICAgICAgIGdldChcbiAgICAgICAgICAgICAgc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsaWQpLFxuICAgICAgICAgICAgICBbJ2NvbmZpZycsICdkYXRhSWQnXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgICAuZmlsdGVyKGQgPT4gZCkgYXMgc3RyaW5nW11cbiAgICAgICk7XG5cbiAgICAgIC8vIG9ubHkgZmlsdGVyIGRhdGFzZXRzSWRzXG4gICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSBsYXllckRhdGFJZHM7XG5cbiAgICAgIC8vIFVwZGF0ZSBuZXdGaWx0ZXIgZGF0YUlkc1xuICAgICAgY29uc3QgbmV3RGF0YUlkcyA9IHVuaXE8c3RyaW5nPihcbiAgICAgICAgdmFsdWVcbiAgICAgICAgICA/Lm1hcChsaWQgPT5cbiAgICAgICAgICAgIGdldChcbiAgICAgICAgICAgICAgc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsaWQpLFxuICAgICAgICAgICAgICBbJ2NvbmZpZycsICdkYXRhSWQnXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgICAuZmlsdGVyKGQgPT4gZCkgYXMgc3RyaW5nW11cbiAgICAgICk7XG5cbiAgICAgIGZpbHRlciA9IHtcbiAgICAgICAgLi4uZmlsdGVyLFxuICAgICAgICBsYXllcklkOiB2YWx1ZSxcbiAgICAgICAgZGF0YUlkOiBuZXdEYXRhSWRzXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIGZpbHRlciA9IHNldChbcHJvcF0sIHZhbHVlLCBmaWx0ZXIpO1xuICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gWy4uLmZpbHRlci5kYXRhSWRdO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4ge2ZpbHRlciwgZGF0YXNldElkcywgZGF0YXNldElkc1RvRmlsdGVyLCBzdGF0ZX07XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1zdGF0ZW1lbnRzICovXG5cbi8qKlxuICogU2V0IHRoZSBwcm9wZXJ0eSBvZiBhIGZpbHRlciBwbG90XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RmlsdGVyUGxvdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkeCwgbmV3UHJvcCwgdmFsdWVJbmRleCA9IDB9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyUGxvdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKCFzdGF0ZS5maWx0ZXJzW2lkeF0pIHtcbiAgICBDb25zb2xlLmVycm9yKGBmaWx0ZXJzWyR7aWR4fV0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBuZXdGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG5cbiAgZm9yIChjb25zdCBwcm9wIGluIG5ld1Byb3ApIHtcbiAgICBpZiAocHJvcCA9PT0gJ3Bsb3RUeXBlJykge1xuICAgICAgbmV3RmlsdGVyID0gcGlja18oJ3Bsb3RUeXBlJykobWVyZ2VfKG5ld1Byb3AucGxvdFR5cGUpKShuZXdGaWx0ZXIpO1xuICAgIH0gZWxzZSBpZiAocHJvcCA9PT0gJ3lBeGlzJykge1xuICAgICAgY29uc3QgY2hhcnRUeXBlID0gbmV3UHJvcC55QXhpcyA/IFBMT1RfVFlQRVMubGluZUNoYXJ0IDogUExPVF9UWVBFUy5oaXN0b2dyYW07XG5cbiAgICAgIG5ld0ZpbHRlciA9IHBpY2tfKCdwbG90VHlwZScpKG1lcmdlXyh7dHlwZTogY2hhcnRUeXBlfSkpKG1lcmdlXyhuZXdQcm9wKShuZXdGaWx0ZXIpKTtcbiAgICB9XG4gIH1cblxuICBuZXdGaWx0ZXIgPSB1cGRhdGVGaWx0ZXJQbG90KHN0YXRlLmRhdGFzZXRzLCBuZXdGaWx0ZXIpO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+IChpID09PSBpZHggPyBuZXdGaWx0ZXIgOiBmKSlcbiAgfTtcbn07XG5cbi8qKlxuICogQWRkIGEgbmV3IGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZEZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkRmlsdGVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT5cbiAgIWFjdGlvbi5kYXRhSWRcbiAgICA/IHN0YXRlXG4gICAgOiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBmaWx0ZXJzOiBbLi4uc3RhdGUuZmlsdGVycywgZ2V0RGVmYXVsdEZpbHRlcih7ZGF0YUlkOiBhY3Rpb24uZGF0YUlkLCBpZDogYWN0aW9uLmlkfSldXG4gICAgICB9O1xuXG4vKipcbiAqIENyZWF0ZSBvciB1cGRhdGUgYSBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVPclVwZGF0ZUZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQ3JlYXRlT3JVcGRhdGVGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtpZCwgZGF0YUlkLCBmaWVsZCwgdmFsdWV9ID0gYWN0aW9uO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICBjb25zdCBvcmlnaW5hbEluZGV4ID0gbmV3U3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBpZCk7XG4gIGxldCBmaWx0ZXJJbmRleCA9IG9yaWdpbmFsSW5kZXg7XG4gIGlmICghaWQgJiYgIWRhdGFJZCkge1xuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfVxuICBpZiAob3JpZ2luYWxJbmRleCA8IDAgJiYgZGF0YUlkKSB7XG4gICAgbmV3U3RhdGUgPSBhZGRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7ZGF0YUlkfSk7XG4gICAgaWYgKG5ld1N0YXRlLmZpbHRlcnMubGVuZ3RoICE9PSBzdGF0ZS5maWx0ZXJzLmxlbmd0aCArIDEpIHtcbiAgICAgIC8vIE5vIG5ldyBmaWx0ZXIgd2FzIGFkZGVkXG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICAgIC8vIEhlcmUgd2UgYXJlIGFzc3VtaW5nIHRoYXQgdGhlIGZpbHRlciB3YXMgYWRkZWQgYXQgdGhlIGVuZFxuICAgIGZpbHRlckluZGV4ID0gbmV3U3RhdGUuZmlsdGVycy5sZW5ndGggLSAxO1xuICAgIG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySW5kZXhdID0ge1xuICAgICAgLi4ubmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJbmRleF0sXG4gICAgICAuLi4oaWQgPyB7aWR9IDogbnVsbClcbiAgICB9O1xuICB9XG5cbiAgLy8gTm8gbmVlZCB0byB1cGRhdGUgdGhpcyBpZiBpdCdzIGEgbmV3bHkgY3JlYXRlZCBmaWx0ZXJcbiAgLy8gRmlyc3Qgd2UgbWFrZSBzdXJlIGFsbCB0aGUgZGF0YUlkcyB0aGF0IGZpZWxkcyByZWZlciB0byBhcmUgdXBkYXRlZFxuICBpZiAob3JpZ2luYWxJbmRleCA+PSAwICYmIGRhdGFJZCkge1xuICAgIC8vIElmIHRoZSBkYXRhSWQgaXMgYW4gYXJyYXksIHdlIG5lZWQgdG8gdXBkYXRlIGVhY2ggb25lIGluZGl2aWR1YWxseSBhcyB0aGV5IG5lZWQgYSBjb3JyZWN0IHZhbHVlSW5kZXggcGFzc2VkXG4gICAgbmV3U3RhdGUgPSAoQXJyYXkuaXNBcnJheShkYXRhSWQpID8gZGF0YUlkIDogW2RhdGFJZF0pLnJlZHVjZSgoYWNjdSwgZCwgaW5kZXgpID0+IHtcbiAgICAgIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKGFjY3UsIHtcbiAgICAgICAgaWR4OiBmaWx0ZXJJbmRleCxcbiAgICAgICAgcHJvcDogJ2RhdGFJZCcsXG4gICAgICAgIHZhbHVlOiBkLFxuICAgICAgICB2YWx1ZUluZGV4OiBpbmRleFxuICAgICAgfSk7XG4gICAgfSwgbmV3U3RhdGUpO1xuICB9XG4gIC8vIFRoZW4gd2UgdXBkYXRlIHRoZSBmaWVsZHNcbiAgaWYgKGZpZWxkKSB7XG4gICAgLy8gSWYgdGhlIGZpZWxkIGlzIGFuIGFycmF5LCB3ZSBuZWVkIHRvIHVwZGF0ZSBlYWNoIGZpZWxkIGluZGl2aWR1YWxseSBhcyB0aGV5IG5lZWQgYSBjb3JyZWN0IHZhbHVlSW5kZXggcGFzc2VkXG4gICAgbmV3U3RhdGUgPSAoQXJyYXkuaXNBcnJheShmaWVsZCkgPyBmaWVsZCA6IFtmaWVsZF0pLnJlZHVjZSgoYWNjdSwgZiwgaW5kZXgpID0+IHtcbiAgICAgIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKGFjY3UsIHtcbiAgICAgICAgaWR4OiBmaWx0ZXJJbmRleCxcbiAgICAgICAgcHJvcDogJ25hbWUnLFxuICAgICAgICB2YWx1ZTogZixcbiAgICAgICAgdmFsdWVJbmRleDogaW5kZXhcbiAgICAgIH0pO1xuICAgIH0sIG5ld1N0YXRlKTtcbiAgfVxuICAvLyBUaGVuIHdlIHVwZGF0ZSB0aGUgdmFsdWUgc2VwYXJhdGVseVxuICBpZiAodmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJykge1xuICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge2lkeDogZmlsdGVySW5kZXgsIHByb3A6ICd2YWx1ZScsIHZhbHVlfSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59O1xuXG4vKipcbiAqIFNldCBsYXllciBjb2xvciBwYWxldHRlIHVpIHN0YXRlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3QgbGF5ZXJDb2xvclVJQ2hhbmdlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7b2xkTGF5ZXIsIHByb3AsIG5ld0NvbmZpZ306IFZpc1N0YXRlQWN0aW9ucy5MYXllckNvbG9yVUlDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IG9sZFZpeENvbmZpZyA9IG9sZExheWVyLmNvbmZpZy52aXNDb25maWdbcHJvcF07XG4gIGNvbnN0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb2xvclVJKHByb3AsIG5ld0NvbmZpZyk7XG4gIGNvbnN0IG5ld1Zpc0NvbmZpZyA9IG5ld0xheWVyLmNvbmZpZy52aXNDb25maWdbcHJvcF07XG4gIGlmIChvbGRWaXhDb25maWcgIT09IG5ld1Zpc0NvbmZpZykge1xuICAgIHJldHVybiBsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIoc3RhdGUsIHtcbiAgICAgIG9sZExheWVyLFxuICAgICAgbmV3VmlzQ29uZmlnOiB7XG4gICAgICAgIFtwcm9wXTogbmV3VmlzQ29uZmlnXG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN0YXRlLmxheWVycy5tYXAobCA9PiAobC5pZCA9PT0gb2xkTGF5ZXIuaWQgPyBuZXdMYXllciA6IGwpKVxuICB9O1xufTtcblxuLyoqXG4gKiBTdGFydCBhbmQgZW5kIGZpbHRlciBhbmltYXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVGaWx0ZXJBbmltYXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT4gKGkgPT09IGFjdGlvbi5pZHggPyB7Li4uZiwgaXNBbmltYXRpbmc6ICFmLmlzQW5pbWF0aW5nfSA6IGYpKVxufSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0ZpbHRlckFuaW1hdGlvbkNvbmZpZyhjb25maWc6IEFuaW1hdGlvbkNvbmZpZyB8IEZpbHRlckFuaW1hdGlvbkNvbmZpZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gJ2RhdGFJZCcgaW4gY29uZmlnICYmICdhbmltYXRpb25XaW5kb3cnIGluIGNvbmZpZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEFuaW1hdGlvbkNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0QW5pbWF0aW9uQ29uZmlnVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7Y29uZmlnfSA9IGFjdGlvbjtcbiAgaWYgKGlzRmlsdGVyQW5pbWF0aW9uQ29uZmlnKGNvbmZpZykpIHtcbiAgICAvLyBGaW5kIGZpbHRlciB1c2VkIGZvciBhbmltYXRpb25cbiAgICAvLyBBc3N1bWluZyB0aGVyZSdzIG9ubHkgb25lIGZpbHRlciB1c2VkIGZvciBhbmltYXRpb24sIHNlZSBzZXRGaWx0ZXJWaWV3VXBkYXRlclxuICAgIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChmID0+ICFpc1NpZGVGaWx0ZXIoZikpO1xuICAgIGlmICghZmlsdGVyKSB7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICAgIGNvbnN0IG5ld0ZpbHRlciA9IHsuLi5maWx0ZXIsIC4uLmNvbmZpZ307XG4gICAgcmV0dXJuIGFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlcihzdGF0ZSwgYXBwbHlGaWx0ZXJDb25maWcoZmlsdGVyLmlkLCBuZXdGaWx0ZXIpKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICAuLi5jb25maWdcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICBpc0FuaW1hdGluZzogIXN0YXRlLmFuaW1hdGlvbkNvbmZpZy5pc0FuaW1hdGluZ1xuICB9XG59KTtcblxuLyoqXG4gKiBIaWRlIGFuZCBzaG93IGxheWVyIGFuaW1hdGlvbiBjb250cm9sXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJBbmltYXRpb25Db250cm9sVXBkYXRlciA9IChzdGF0ZTogVmlzU3RhdGUpOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgIGhpZGVDb250cm9sOiAhc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmhpZGVDb250cm9sXG4gIH1cbn0pO1xuXG4vKipcbiAqIENoYW5nZSBmaWx0ZXIgYW5pbWF0aW9uIHNwZWVkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUZpbHRlckFuaW1hdGlvblNwZWVkVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PiAoaSA9PT0gYWN0aW9uLmlkeCA/IHsuLi5mLCBzcGVlZDogYWN0aW9uLnNwZWVkfSA6IGYpKVxufSk7XG5cbi8qKlxuICogVXBkYXRlIGFuaW1hdGlvbiBzcGVlZCB3aXRoIHRoZSB2ZXJ0aWNhbCBzcGVlZCBzbGlkZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKlxuICovXG5leHBvcnQgY29uc3QgdXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge3NwZWVkfTogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUxheWVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICBzcGVlZFxuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogU2hvdyBsYXJnZXIgdGltZSBmaWx0ZXIgYXQgYm90dG9tIGZvciB0aW1lIHBsYXliYWNrIChhcHBseSB0byB0aW1lIGZpbHRlciBvbmx5KVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEZpbHRlclZpZXdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlclZpZXdVcGRhdGVyQWN0aW9uXG4pID0+IHtcbiAgY29uc3Qge3ZpZXcsIGlkeH0gPSBhY3Rpb247XG4gIGNvbnN0IHNob3VsZFJlc2V0T3RoZXJGaWx0ZXJzVmlldyA9IHZpZXcgPT09IEZJTFRFUl9WSUVXX1RZUEVTLmVubGFyZ2VkO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PlxuICAgICAgaSA9PT0gaWR4XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uZixcbiAgICAgICAgICAgIHZpZXdcbiAgICAgICAgICB9XG4gICAgICAgIDogc2hvdWxkUmVzZXRPdGhlckZpbHRlcnNWaWV3XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uZixcbiAgICAgICAgICAgIHZpZXc6IEZJTFRFUl9WSUVXX1RZUEVTLnNpZGVcbiAgICAgICAgICB9XG4gICAgICAgIDogZlxuICAgIClcbiAgfTtcbn07XG5cbi8qKlxuICogVG9nZ2xlcyBmaWx0ZXIgZmVhdHVyZSB2aXNpYmlsaXR5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1thY3Rpb24uaWR4XTtcbiAgY29uc3QgaXNWaXNpYmxlID0gZ2V0KGZpbHRlciwgWyd2YWx1ZScsICdwcm9wZXJ0aWVzJywgJ2lzVmlzaWJsZSddKTtcblxuICBsZXQgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKHN0YXRlLCB7XG4gICAgaWR4OiBhY3Rpb24uaWR4LFxuICAgIHByb3A6ICdlbmFibGVkJyxcbiAgICB2YWx1ZTogIWlzVmlzaWJsZVxuICB9KTtcblxuICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZHg6IGFjdGlvbi5pZHgsXG4gICAgcHJvcDogJ3ZhbHVlJyxcbiAgICB2YWx1ZTogZmVhdHVyZVRvRmlsdGVyVmFsdWUoZmlsdGVyLnZhbHVlLCBmaWx0ZXIuaWQsIHtcbiAgICAgIGlzVmlzaWJsZTogIWlzVmlzaWJsZVxuICAgIH0pXG4gIH0pO1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtpZHh9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YUlkLCBpZH0gPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG5cbiAgY29uc3QgbmV3RmlsdGVycyA9IFtcbiAgICAuLi5zdGF0ZS5maWx0ZXJzLnNsaWNlKDAsIGlkeCksXG4gICAgLi4uc3RhdGUuZmlsdGVycy5zbGljZShpZHggKyAxLCBzdGF0ZS5maWx0ZXJzLmxlbmd0aClcbiAgXTtcblxuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhkYXRhSWQsIHN0YXRlLmRhdGFzZXRzLCBuZXdGaWx0ZXJzLCBzdGF0ZS5sYXllcnMpO1xuICBjb25zdCBuZXdFZGl0b3IgPVxuICAgIGdldEZpbHRlcklkSW5GZWF0dXJlKHN0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmUpID09PSBpZFxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICAgICAgICB9XG4gICAgICA6IHN0YXRlLmVkaXRvcjtcblxuICBsZXQgbmV3U3RhdGUgPSBzZXQoWydmaWx0ZXJzJ10sIG5ld0ZpbHRlcnMsIHN0YXRlKTtcbiAgbmV3U3RhdGUgPSBzZXQoWydkYXRhc2V0cyddLCBmaWx0ZXJlZERhdGFzZXRzLCBuZXdTdGF0ZSk7XG4gIG5ld1N0YXRlID0gc2V0KFsnZWRpdG9yJ10sIG5ld0VkaXRvciwgbmV3U3RhdGUpO1xuXG4gIHJldHVybiB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV3U3RhdGUsIGRhdGFJZCwgdW5kZWZpbmVkKTtcbn07XG5cbi8qKlxuICogQWRkIGEgbmV3IGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkTGF5ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZExheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBsZXQgbmV3TGF5ZXI7XG4gIGxldCBuZXdMYXllckRhdGE7XG4gIGlmIChhY3Rpb24uY29uZmlnKSB7XG4gICAgbmV3TGF5ZXIgPSBjcmVhdGVMYXllckZyb21Db25maWcoc3RhdGUsIGFjdGlvbi5jb25maWcpO1xuICAgIGlmICghbmV3TGF5ZXIpIHtcbiAgICAgIENvbnNvbGUud2FybihcbiAgICAgICAgJ0ZhaWxlZCB0byBjcmVhdGUgbGF5ZXIgZnJvbSBjb25maWcsIGl0IHVzdWFsbHkgbWVhbnMgdGhlIGNvbmZpZyBpcyBub3QgYmUgaW4gY29ycmVjdCBmb3JtYXQnLFxuICAgICAgICBhY3Rpb24uY29uZmlnXG4gICAgICApO1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUpO1xuICAgIG5ld0xheWVyID0gcmVzdWx0LmxheWVyO1xuICAgIG5ld0xheWVyRGF0YSA9IHJlc3VsdC5sYXllckRhdGE7XG4gIH0gZWxzZSB7XG4gICAgLy8gY3JlYXRlIGFuIGVtcHR5IGxheWVyIHdpdGggYSBzcGVjaWZpYyBkYXRhc2V0IG9yIGEgZGVmYXVsdCBvbmVcbiAgICBjb25zdCBkZWZhdWx0RGF0YXNldCA9IGFjdGlvbi5kYXRhc2V0SWQgPz8gT2JqZWN0LmtleXMoc3RhdGUuZGF0YXNldHMpWzBdO1xuICAgIG5ld0xheWVyID0gbmV3IExheWVyKHtcbiAgICAgIGlzVmlzaWJsZTogdHJ1ZSxcbiAgICAgIGlzQ29uZmlnQWN0aXZlOiB0cnVlLFxuICAgICAgZGF0YUlkOiBkZWZhdWx0RGF0YXNldFxuICAgIH0pO1xuICAgIG5ld0xheWVyRGF0YSA9IHt9O1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogWy4uLnN0YXRlLmxheWVycywgbmV3TGF5ZXJdLFxuICAgIGxheWVyRGF0YTogWy4uLnN0YXRlLmxheWVyRGF0YSwgbmV3TGF5ZXJEYXRhXSxcbiAgICAvLyBhZGQgbmV3IGxheWVyIGF0IHRoZSB0b3BcbiAgICBsYXllck9yZGVyOiBbbmV3TGF5ZXIuaWQsIC4uLnN0YXRlLmxheWVyT3JkZXJdLFxuICAgIHNwbGl0TWFwczogYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcChzdGF0ZS5zcGxpdE1hcHMsIG5ld0xheWVyKVxuICB9O1xuXG4gIGlmIChuZXdMYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59O1xuXG4vKipcbiAqIHJlbW92ZSBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUxheWVyVXBkYXRlcjxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUxheWVyVXBkYXRlckFjdGlvblxuKTogVCB7XG4gIGNvbnN0IGlkeCA9IE51bWJlci5pc0Zpbml0ZShpZClcbiAgICA/IC8vIHN1cHBvcnQgb2xkZXIgQVBJLCByZW1vdmUgbGF5ZXIgYnkgaWR4XG4gICAgICBOdW1iZXIoaWQpXG4gICAgOiBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gc3RhdGUubGF5ZXJzLmxlbmd0aCkge1xuICAgIC8vIGludmFsaWQgaW5kZXhcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgcmVtb3ZlIGxheWVyIHdpdGggaW52YWxpZCBpZHxpZHggJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7bGF5ZXJzLCBsYXllckRhdGEsIGxheWVyT3JkZXIsIGNsaWNrZWQsIGhvdmVySW5mb30gPSBzdGF0ZTtcbiAgY29uc3QgbGF5ZXJUb1JlbW92ZSA9IGxheWVyc1tpZHhdO1xuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IGZpbHRlck91dEJ5SWQobGF5ZXJUb1JlbW92ZS5pZCkobGF5ZXJzKSxcbiAgICBsYXllckRhdGE6IHJlbW92ZUVsZW1lbnRBdEluZGV4KGlkeCkobGF5ZXJEYXRhKSxcbiAgICBsYXllck9yZGVyOiBsYXllck9yZGVyLmZpbHRlcihsYXllcklkID0+IGxheWVySWQgIT09IGxheWVyVG9SZW1vdmUuaWQpLFxuICAgIGNsaWNrZWQ6IGxheWVyVG9SZW1vdmUuaXNMYXllckhvdmVyZWQoY2xpY2tlZCkgPyB1bmRlZmluZWQgOiBjbGlja2VkLFxuICAgIGhvdmVySW5mbzogbGF5ZXJUb1JlbW92ZS5pc0xheWVySG92ZXJlZChob3ZlckluZm8pID8gdW5kZWZpbmVkIDogaG92ZXJJbmZvLFxuICAgIHNwbGl0TWFwczogcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzKHN0YXRlLnNwbGl0TWFwcywgbGF5ZXJUb1JlbW92ZSlcbiAgICAvLyBUT0RPOiB1cGRhdGUgZmlsdGVycywgY3JlYXRlIGhlbHBlciB0byByZW1vdmUgbGF5ZXIgZm9ybSBmaWx0ZXIgKHJlbW92ZSBsYXllcmlkIGFuZCBkYXRhaWQpIGlmIG1hcHBlZFxuICB9O1xuXG4gIHJldHVybiB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xufVxuXG4vKipcbiAqIFJlb3JkZXIgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW9yZGVyTGF5ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtvcmRlcn06IFZpc1N0YXRlQWN0aW9ucy5SZW9yZGVyTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbGF5ZXJPcmRlcjogb3JkZXJcbn0pO1xuXG4vKipcbiAqIGR1cGxpY2F0ZSBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGR1cGxpY2F0ZUxheWVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuRHVwbGljYXRlTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IE51bWJlci5pc0Zpbml0ZShpZClcbiAgICA/IC8vIHN1cHBvcnQgb2xkZXIgQVBJLCByZW1vdmUgbGF5ZXIgYnkgaWR4XG4gICAgICBOdW1iZXIoaWQpXG4gICAgOiBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCAhc3RhdGUubGF5ZXJzW2lkeF0pIHtcbiAgICBDb25zb2xlLndhcm4oYGxheWVyICR7aWR4fSBub3QgZm91bmQgaW4gbGF5ZXJPcmRlcmApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtsYXllcnN9ID0gc3RhdGU7XG4gIGNvbnN0IG9yaWdpbmFsID0gbGF5ZXJzW2lkeF07XG5cbiAgY29uc3Qgb3JpZ2luYWxMYXllck9yZGVySWR4ID0gc3RhdGUubGF5ZXJPcmRlci5maW5kSW5kZXgobGlkID0+IGxpZCA9PT0gb3JpZ2luYWwuaWQpO1xuICBsZXQgbmV3TGFiZWwgPSBgQ29weSBvZiAke29yaWdpbmFsLmNvbmZpZy5sYWJlbH1gO1xuICBsZXQgcG9zdGZpeCA9IDA7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcbiAgd2hpbGUgKGxheWVycy5maW5kKGwgPT4gbC5jb25maWcubGFiZWwgPT09IG5ld0xhYmVsKSkge1xuICAgIG5ld0xhYmVsID0gYENvcHkgb2YgJHtvcmlnaW5hbC5jb25maWcubGFiZWx9ICR7Kytwb3N0Zml4fWA7XG4gIH1cblxuICAvLyBjb2xsZWN0IGxheWVyIGNvbmZpZyBmcm9tIG9yaWdpbmFsXG4gIGNvbnN0IGxvYWRlZExheWVyID0gc2VyaWFsaXplTGF5ZXIob3JpZ2luYWwsIHN0YXRlLnNjaGVtYSk7XG5cbiAgLy8gYXNzaWduIG5ldyBpZCBhbmQgbGFiZWwgdG8gY29waWVkIGxheWVyXG4gIGlmICghbG9hZGVkTGF5ZXI/LmNvbmZpZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsb2FkZWRMYXllci5jb25maWcubGFiZWwgPSBuZXdMYWJlbDtcbiAgbG9hZGVkTGF5ZXIuaWQgPSBnZW5lcmF0ZUhhc2hJZChMQVlFUl9JRF9MRU5HVEgpO1xuXG4gIC8vIGFkZCBsYXllciB0byBzdGF0ZVxuICBsZXQgbmV4dFN0YXRlID0gYWRkTGF5ZXJVcGRhdGVyKHN0YXRlLCB7Y29uZmlnOiBsb2FkZWRMYXllcn0pO1xuICAvLyByZXRyaWV2ZSBuZXdseSBjcmVhdGVkIGxheWVyXG4gIGNvbnN0IG5ld0xheWVyID0gbmV4dFN0YXRlLmxheWVyc1tuZXh0U3RhdGUubGF5ZXJzLmxlbmd0aCAtIDFdO1xuICAvLyB1cGRhdGUgbGF5ZXIgb3JkZXIgd2l0aCBuZXdMeWFlci5pZFxuICBjb25zdCBuZXdMYXllck9yZGVyID0gYXJyYXlJbnNlcnQoXG4gICAgbmV4dFN0YXRlLmxheWVyT3JkZXIuc2xpY2UoMSwgbmV4dFN0YXRlLmxheWVyT3JkZXIubGVuZ3RoKSxcbiAgICBvcmlnaW5hbExheWVyT3JkZXJJZHgsXG4gICAgbmV3TGF5ZXIuaWRcbiAgKTtcblxuICBuZXh0U3RhdGUgPSByZW9yZGVyTGF5ZXJVcGRhdGVyKG5leHRTdGF0ZSwge29yZGVyOiBuZXdMYXllck9yZGVyfSk7XG5cbiAgcmV0dXJuIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXh0U3RhdGUpO1xufTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgZWZmZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkRWZmZWN0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRFZmZlY3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmIChcbiAgICBhY3Rpb24uY29uZmlnPy50eXBlID09PSBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC50eXBlICYmXG4gICAgc3RhdGUuZWZmZWN0cy5zb21lKGVmZmVjdCA9PiBlZmZlY3QudHlwZSA9PT0gTElHSFRfQU5EX1NIQURPV19FRkZFQ1QudHlwZSlcbiAgKSB7XG4gICAgQ29uc29sZS53YXJuKGBDYW4ndCBhZGQgbW9yZSB0aGFuIG9uZSAke0xJR0hUX0FORF9TSEFET1dfRUZGRUNULm5hbWV9IGVmZmVjdGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0VmZmVjdCA9IGNyZWF0ZUVmZmVjdChhY3Rpb24uY29uZmlnKTtcblxuICAvLyBjb2xsYXBzZSBjb25maWd1cmF0b3JzIGZvciBvdGhlciBlZmZlY3RzXG4gIHN0YXRlLmVmZmVjdHMuZm9yRWFjaChlZmZlY3QgPT4gZWZmZWN0LnNldFByb3BzKHtpc0NvbmZpZ0FjdGl2ZTogZmFsc2V9KSk7XG5cbiAgY29uc3QgZWZmZWN0cyA9IFsuLi5zdGF0ZS5lZmZlY3RzLCBuZXdFZmZlY3RdO1xuICBjb25zdCBlZmZlY3RPcmRlciA9IGZpeEVmZmVjdE9yZGVyKGVmZmVjdHMsIFtuZXdFZmZlY3QuaWQsIC4uLnN0YXRlLmVmZmVjdE9yZGVyXSk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZmZlY3RzLFxuICAgIGVmZmVjdE9yZGVyXG4gIH07XG59O1xuXG4vKipcbiAqIHJlbW92ZSBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVFZmZlY3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmVmZmVjdHMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gc3RhdGUuZWZmZWN0cy5sZW5ndGgpIHtcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgcmVtb3ZlIGVmZmVjdCB3aXRoIGludmFsaWQgaWQgJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7ZWZmZWN0cywgZWZmZWN0T3JkZXJ9ID0gc3RhdGU7XG4gIGNvbnN0IGVmZmVjdFRvUmVtb3ZlID0gZWZmZWN0c1tpZHhdO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgZml4ZWQgaW4gdHNcbiAgICBlZmZlY3RzOiBmaWx0ZXJPdXRCeUlkKGVmZmVjdFRvUmVtb3ZlLmlkKShlZmZlY3RzKSxcbiAgICBlZmZlY3RPcmRlcjogZWZmZWN0T3JkZXIuZmlsdGVyKGVmZmVjdElkID0+IGVmZmVjdElkICE9PSBlZmZlY3RUb1JlbW92ZS5pZClcbiAgfTtcbn07XG5cbi8qKlxuICogUmVvcmRlciBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW9yZGVyRWZmZWN0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7b3JkZXJ9OiBWaXNTdGF0ZUFjdGlvbnMuUmVvcmRlckVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBlZmZlY3RPcmRlcjogZml4RWZmZWN0T3JkZXIoc3RhdGUuZWZmZWN0cywgWy4uLm9yZGVyXSlcbn0pO1xuXG4vKipcbiAqIFVwZGF0ZSBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZCwgcHJvcHN9OiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBpZHggPSBzdGF0ZS5lZmZlY3RzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDAgfHwgaWR4ID49IHN0YXRlLmVmZmVjdHMubGVuZ3RoKSB7XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHVwZGF0ZSBlZmZlY3Qgd2l0aCBpbnZhbGlkIGlkICR7aWR9YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IGVmZmVjdE9yZGVyID0gc3RhdGUuZWZmZWN0T3JkZXI7XG4gIGlmIChwcm9wcy5pZCAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmlkICE9PSBpZCkge1xuICAgIGNvbnN0IGlkeDIgPSBzdGF0ZS5lZmZlY3RzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IHByb3BzLmlkKTtcbiAgICBpZiAoaWR4MiA+PSAwKSB7XG4gICAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgdXBkYXRlIGVmZmVjdCB3aXRoIGV4aXN0aW5nIGVmZmVjdCBpZCAke2lkfWApO1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIGVmZmVjdE9yZGVyID0gZWZmZWN0T3JkZXIubWFwKGVmZmVjdE9yZGVySWQgPT5cbiAgICAgIGVmZmVjdE9yZGVySWQgPT09IGlkID8gKHByb3BzLmlkIGFzIHN0cmluZykgOiBlZmZlY3RPcmRlcklkXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IG5ld0VmZmVjdHMgPSBbLi4uc3RhdGUuZWZmZWN0c107XG4gIG5ld0VmZmVjdHNbaWR4XS5zZXRQcm9wcyhwcm9wcyk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZmZlY3RzOiBuZXdFZmZlY3RzLFxuICAgIGVmZmVjdE9yZGVyXG4gIH07XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIGRhdGFzZXQgYW5kIGFsbCBsYXllcnMsIGZpbHRlcnMsIHRvb2x0aXAgY29uZmlncyB0aGF0IGJhc2VkIG9uIGl0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRGF0YXNldFVwZGF0ZXI8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZURhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBUIHtcbiAgLy8gZXh0cmFjdCBkYXRhc2V0IGtleVxuICBjb25zdCB7ZGF0YUlkOiBkYXRhc2V0S2V5fSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFzZXRzfSA9IHN0YXRlO1xuXG4gIC8vIGNoZWNrIGlmIGRhdGFzZXQgaXMgcHJlc2VudFxuICBpZiAoIWRhdGFzZXRzW2RhdGFzZXRLZXldKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGxheWVycyxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgZGF0YXNldHM6IHtbZGF0YXNldEtleV06IGRhdGFzZXQsIC4uLm5ld0RhdGFzZXRzfVxuICB9ID0gc3RhdGU7XG5cbiAgY29uc3QgbGF5ZXJzVG9SZW1vdmUgPSBsYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuZGF0YUlkID09PSBkYXRhc2V0S2V5KS5tYXAobCA9PiBsLmlkKTtcblxuICAvLyByZW1vdmUgbGF5ZXJzIGFuZCBkYXRhc2V0c1xuICBsZXQgbmV3U3RhdGUgPSBsYXllcnNUb1JlbW92ZS5yZWR1Y2UoKGFjY3UsIGlkKSA9PiByZW1vdmVMYXllclVwZGF0ZXIoYWNjdSwge2lkfSksIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogbmV3RGF0YXNldHNcbiAgfSk7XG5cbiAgLy8gdXBkYXRlIGZpbHRlcnNcbiAgY29uc3QgZmlsdGVyczogRmlsdGVyW10gPSBbXTtcbiAgZm9yIChjb25zdCBmaWx0ZXIgb2YgbmV3U3RhdGUuZmlsdGVycykge1xuICAgIGNvbnN0IHZhbHVlSW5kZXggPSBmaWx0ZXIuZGF0YUlkLmluZGV4T2YoZGF0YXNldEtleSk7XG4gICAgaWYgKHZhbHVlSW5kZXggPj0gMCAmJiBmaWx0ZXIuZGF0YUlkLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIG9ubHkgcmVtb3ZlIG9uZSBzeW5jZWQgZGF0YXNldCBmcm9tIHRoZSBmaWx0ZXJcbiAgICAgIGZpbHRlcnMucHVzaChfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgZGF0YXNldHMpKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlSW5kZXggPCAwKSB7XG4gICAgICAvLyBsZWF2ZSB0aGUgZmlsdGVyIGFzIGlzXG4gICAgICBmaWx0ZXJzLnB1c2goZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICBuZXdTdGF0ZSA9IHsuLi5uZXdTdGF0ZSwgZmlsdGVyc307XG5cbiAgcmV0dXJuIHJlbW92ZURhdGFzZXRGcm9tSW50ZXJhY3Rpb25Db25maWcobmV3U3RhdGUsIHtkYXRhSWQ6IGRhdGFzZXRLZXl9KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlRGF0YXNldEZyb21JbnRlcmFjdGlvbkNvbmZpZyhzdGF0ZSwge2RhdGFJZH0pIHtcbiAgbGV0IHtpbnRlcmFjdGlvbkNvbmZpZ30gPSBzdGF0ZTtcbiAgY29uc3Qge3Rvb2x0aXB9ID0gaW50ZXJhY3Rpb25Db25maWc7XG4gIGlmICh0b29sdGlwKSB7XG4gICAgY29uc3Qge2NvbmZpZ30gPSB0b29sdGlwO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBjb25zdCB7W2RhdGFJZF06IGZpZWxkcywgLi4uZmllbGRzVG9TaG93fSA9IGNvbmZpZy5maWVsZHNUb1Nob3c7XG4gICAgaW50ZXJhY3Rpb25Db25maWcgPSB7XG4gICAgICAuLi5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgIHRvb2x0aXA6IHsuLi50b29sdGlwLCBjb25maWc6IHsuLi5jb25maWcsIGZpZWxkc1RvU2hvd319XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7Li4uc3RhdGUsIGludGVyYWN0aW9uQ29uZmlnfTtcbn1cbi8qKlxuICogdXBkYXRlIGxheWVyIGJsZW5kaW5nIG1vZGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVMYXllckJsZW5kaW5nVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVMYXllckJsZW5kaW5nVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGxheWVyQmxlbmRpbmc6IGFjdGlvbi5tb2RlXG59KTtcblxuLyoqXG4gKiB1cGRhdGUgb3ZlcmxheSBibGVuZGluZyBtb2RlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlT3ZlcmxheUJsZW5kaW5nVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVPdmVybGF5QmxlbmRpbmdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgb3ZlcmxheUJsZW5kaW5nOiBhY3Rpb24ubW9kZVxufSk7XG5cbi8qKlxuICogRGlzcGxheSBkYXRhc2V0IHRhYmxlIGluIGEgbW9kYWxcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzaG93RGF0YXNldFRhYmxlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TaG93RGF0YXNldFRhYmxlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRpbmdEYXRhc2V0OiBhY3Rpb24uZGF0YUlkXG4gIH07XG59O1xuXG4vKipcbiAqIEFkZCBjdXN0b20gY29sb3IgZm9yIGRhdGFzZXRzIGFuZCBsYXllcnNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVUYWJsZUNvbG9yVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVEYXRhc2V0Q29sb3JVcGRhdGVyXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyKHN0YXRlLCB7ZGF0YUlkOiBhY3Rpb24uZGF0YUlkLCBwcm9wczoge2NvbG9yOiBhY3Rpb24ubmV3Q29sb3J9fSk7XG59O1xuXG4vKipcbiAqIHJlc2V0IHZpc1N0YXRlIHRvIGluaXRpYWwgU3RhdGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZXNldE1hcENvbmZpZ1VwZGF0ZXIgPSAoc3RhdGU6IFZpc1N0YXRlKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uSU5JVElBTF9WSVNfU1RBVEUsXG4gIC4uLnN0YXRlLmluaXRpYWxTdGF0ZSxcbiAgaW5pdGlhbFN0YXRlOiBzdGF0ZS5pbml0aWFsU3RhdGVcbn0pO1xuXG4vKipcbiAqIFByb3BhZ2F0ZSBgdmlzU3RhdGVgIHJlZHVjZXIgd2l0aCBhIG5ldyBjb25maWd1cmF0aW9uLiBDdXJyZW50IGNvbmZpZyB3aWxsIGJlIG92ZXJyaWRlLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlY2VpdmVNYXBDb25maWdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtcbiAgICBwYXlsb2FkOiB7Y29uZmlnID0ge30sIG9wdGlvbnMgPSB7fX1cbiAgfToge1xuICAgIHR5cGU/OiB0eXBlb2YgQWN0aW9uVHlwZXMuUkVDRUlWRV9NQVBfQ09ORklHO1xuICAgIHBheWxvYWQ6IFJlY2VpdmVNYXBDb25maWdQYXlsb2FkO1xuICB9XG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmICghY29uZmlnLnZpc1N0YXRlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge2tlZXBFeGlzdGluZ0NvbmZpZ30gPSBvcHRpb25zO1xuXG4gIC8vIHJlc2V0IGNvbmZpZyBpZiBrZWVwRXhpc3RpbmdDb25maWcgaXMgZmFsc3lcbiAgbGV0IG1lcmdlZFN0YXRlID0gIWtlZXBFeGlzdGluZ0NvbmZpZyA/IHJlc2V0TWFwQ29uZmlnVXBkYXRlcihzdGF0ZSkgOiBzdGF0ZTtcbiAgZm9yIChjb25zdCBtZXJnZXIgb2Ygc3RhdGUubWVyZ2Vycykge1xuICAgIGlmIChpc1ZhbGlkTWVyZ2VyKG1lcmdlcikgJiYgaGFzUHJvcHNUb01lcmdlKGNvbmZpZy52aXNTdGF0ZSwgbWVyZ2VyLnByb3ApKSB7XG4gICAgICBtZXJnZWRTdGF0ZSA9IG1lcmdlci5tZXJnZShcbiAgICAgICAgbWVyZ2VkU3RhdGUsXG4gICAgICAgIGdldFByb3BWYWx1ZVRvTWVyZ2VyKGNvbmZpZy52aXNTdGF0ZSwgbWVyZ2VyLnByb3AsIG1lcmdlci50b01lcmdlUHJvcCksXG4gICAgICAgIC8vIGZyb21Db25maWdcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWVyZ2VkU3RhdGU7XG59O1xuXG4vKipcbiAqIFRyaWdnZXIgbGF5ZXIgaG92ZXIgZXZlbnQgd2l0aCBob3ZlcmVkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxheWVySG92ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLk9uTGF5ZXJIb3ZlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBob3ZlckluZm86IHtcbiAgICAvLyBkZWNrLmdsIGluZm8gaXMgbXV0YWJsZVxuICAgIC4uLmFjdGlvbi5pbmZvLFxuICAgIC4uLihOdW1iZXIuaXNGaW5pdGUoYWN0aW9uLm1hcEluZGV4KSA/IHttYXBJbmRleDogYWN0aW9uLm1hcEluZGV4fSA6IHt9KVxuICB9XG59KTtcblxuLyogZXNsaW50LWVuYWJsZSBtYXgtc3RhdGVtZW50cyAqL1xuXG4vKipcbiAqIFVwZGF0ZSBgaW50ZXJhY3Rpb25Db25maWdgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gaW50ZXJhY3Rpb25Db25maWdDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7Y29uZmlnfSA9IGFjdGlvbjtcblxuICBjb25zdCBpbnRlcmFjdGlvbkNvbmZpZyA9IHtcbiAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAuLi57W2NvbmZpZy5pZF06IGNvbmZpZ31cbiAgfTtcblxuICAvLyBEb24ndCBlbmFibGUgdG9vbHRpcCBhbmQgYnJ1c2ggYXQgdGhlIHNhbWUgdGltZVxuICAvLyBidXQgY29vcmRpbmF0ZXMgY2FuIGJlIHNob3duIGF0IGFsbCB0aW1lXG4gIGNvbnN0IGNvbnRyYWRpY3QgPSBbJ2JydXNoJywgJ3Rvb2x0aXAnXTtcblxuICBpZiAoXG4gICAgY29udHJhZGljdC5pbmNsdWRlcyhjb25maWcuaWQpICYmXG4gICAgY29uZmlnLmVuYWJsZWQgJiZcbiAgICAhc3RhdGUuaW50ZXJhY3Rpb25Db25maWdbY29uZmlnLmlkXS5lbmFibGVkXG4gICkge1xuICAgIC8vIG9ubHkgZW5hYmxlIG9uZSBpbnRlcmFjdGlvbiBhdCBhIHRpbWVcbiAgICBjb250cmFkaWN0LmZvckVhY2goayA9PiB7XG4gICAgICBpZiAoayAhPT0gY29uZmlnLmlkKSB7XG4gICAgICAgIGludGVyYWN0aW9uQ29uZmlnW2tdID0gey4uLmludGVyYWN0aW9uQ29uZmlnW2tdLCBlbmFibGVkOiBmYWxzZX07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZ1xuICB9O1xuXG4gIGlmIChjb25maWcuaWQgPT09ICdnZW9jb2RlcicgJiYgIWNvbmZpZy5lbmFibGVkKSB7XG4gICAgcmV0dXJuIHJlbW92ZURhdGFzZXRVcGRhdGVyKG5ld1N0YXRlLCB7ZGF0YUlkOiAnZ2VvY29kZXJfZGF0YXNldCd9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBUcmlnZ2VyIGxheWVyIGNsaWNrIGV2ZW50IHdpdGggY2xpY2tlZCBvYmplY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsYXllckNsaWNrVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5PbkxheWVyQ2xpY2tVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbW91c2VQb3M6IHN0YXRlLmludGVyYWN0aW9uQ29uZmlnLmNvb3JkaW5hdGUuZW5hYmxlZFxuICAgID8ge1xuICAgICAgICAuLi5zdGF0ZS5tb3VzZVBvcyxcbiAgICAgICAgcGlubmVkOiBzdGF0ZS5tb3VzZVBvcy5waW5uZWQgPyBudWxsIDogY2xvbmVEZWVwKHN0YXRlLm1vdXNlUG9zKVxuICAgICAgfVxuICAgIDogc3RhdGUubW91c2VQb3MsXG4gIGNsaWNrZWQ6IGFjdGlvbi5pbmZvICYmIGFjdGlvbi5pbmZvLnBpY2tlZCA/IGFjdGlvbi5pbmZvIDogbnVsbFxufSk7XG5cbi8qKlxuICogVHJpZ2dlciBtYXAgY2xpY2sgZXZlbnQsIHVuc2VsZWN0IGNsaWNrZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbWFwQ2xpY2tVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuT25NYXBDbGlja1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjbGlja2VkOiBudWxsXG4gIH07XG59O1xuXG4vKipcbiAqIFRyaWdnZXIgbWFwIG1vdmUgZXZlbnRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBtb3VzZU1vdmVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtldnR9OiBWaXNTdGF0ZUFjdGlvbnMuT25Nb3VzZU1vdmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmIChPYmplY3QudmFsdWVzKHN0YXRlLmludGVyYWN0aW9uQ29uZmlnKS5zb21lKGNvbmZpZyA9PiBjb25maWcuZW5hYmxlZCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBtb3VzZVBvczoge1xuICAgICAgICAuLi5zdGF0ZS5tb3VzZVBvcyxcbiAgICAgICAgLi4uKEFycmF5LmlzQXJyYXkoZXZ0LnBvaW50KSA/IHttb3VzZVBvc2l0aW9uOiBbLi4uZXZ0LnBvaW50XX0gOiB7fSksXG4gICAgICAgIC4uLihBcnJheS5pc0FycmF5KGV2dC5sbmdMYXQpID8ge2Nvb3JkaW5hdGU6IFsuLi5ldnQubG5nTGF0XX0gOiB7fSlcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufTtcbi8qKlxuICogVG9nZ2xlIHZpc2liaWxpdHkgb2YgYSBsYXllciBmb3IgYSBzcGxpdCBtYXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVTcGxpdE1hcFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBNYXBTdGF0ZUFjdGlvbnMuVG9nZ2xlU3BsaXRNYXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PlxuICBzdGF0ZS5zcGxpdE1hcHMgJiYgc3RhdGUuc3BsaXRNYXBzLmxlbmd0aCA9PT0gMFxuICAgID8ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgLy8gbWF5YmUgd2Ugc2hvdWxkIHVzZSBhbiBhcnJheSB0byBzdG9yZSBzdGF0ZSBmb3IgYSBzaW5nbGUgbWFwIGFzIHdlbGxcbiAgICAgICAgLy8gaWYgY3VycmVudCBtYXBzIGxlbmd0aCBpcyBlcXVhbCB0byAwIGl0IG1lYW5zIHRoYXQgd2UgYXJlIGFib3V0IHRvIHNwbGl0IHRoZSB2aWV3XG4gICAgICAgIHNwbGl0TWFwczogY29tcHV0ZVNwbGl0TWFwTGF5ZXJzKHN0YXRlLmxheWVycywge2R1cGxpY2F0ZTogZmFsc2V9KVxuICAgICAgfVxuICAgIDogY2xvc2VTcGVjaWZpY01hcEF0SW5kZXgoc3RhdGUsIGFjdGlvbik7XG5cbi8qKlxuICogVG9nZ2xlIHZpc2liaWxpdHkgb2YgYSBsYXllciBpbiBhIHNwbGl0IG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7bWFwSW5kZXgsIGxheWVySWR9OiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtzcGxpdE1hcHN9ID0gc3RhdGU7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBzcGxpdE1hcHM6IHNwbGl0TWFwcy5tYXAoKHNtLCBpKSA9PlxuICAgICAgaSA9PT0gbWFwSW5kZXhcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5zcGxpdE1hcHNbaV0sXG4gICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgLi4uc3BsaXRNYXBzW2ldLmxheWVycyxcbiAgICAgICAgICAgICAgLy8gaWYgbGF5ZXJJZCBub3QgaW4gbGF5ZXJzLCBzZXQgaXQgdG8gdmlzaWJsZVxuICAgICAgICAgICAgICBbbGF5ZXJJZF06ICFzcGxpdE1hcHNbaV0ubGF5ZXJzW2xheWVySWRdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA6IHNtXG4gICAgKVxuICB9O1xufTtcblxuLyoqXG4gKiBBZGQgbmV3IGRhdGFzZXQgdG8gYHZpc1N0YXRlYCwgd2l0aCBvcHRpb24gdG8gbG9hZCBhIG1hcCBjb25maWcgYWxvbmcgd2l0aCB0aGUgZGF0YXNldHNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgY29uc3QgdXBkYXRlVmlzRGF0YVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlVmlzRGF0YVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgLy8gZGF0YXNldHMgY2FuIGJlIGEgc2luZ2xlIGRhdGEgZW50cmllcyBvciBhbiBhcnJheSBvZiBtdWx0aXBsZSBkYXRhIGVudHJpZXNcbiAgY29uc3Qge2NvbmZpZywgb3B0aW9uc30gPSBhY3Rpb247XG5cbiAgLy8gYXBwbHkgY29uZmlnIGlmIHBhc3NlZCBmcm9tIGFjdGlvblxuICAvLyBUT0RPOiB3ZSBkb24ndCBoYW5kbGUgYXN5bmMgbWVyZ2VycyBoZXJlIHlldFxuICBjb25zdCBwcmV2aW91c1N0YXRlID0gY29uZmlnXG4gICAgPyByZWNlaXZlTWFwQ29uZmlnVXBkYXRlcihzdGF0ZSwge1xuICAgICAgICBwYXlsb2FkOiB7Y29uZmlnLCBvcHRpb25zfVxuICAgICAgfSlcbiAgICA6IHN0YXRlO1xuXG4gIGNvbnN0IGRhdGFzZXRzID0gdG9BcnJheShhY3Rpb24uZGF0YXNldHMpO1xuXG4gIGNvbnN0IGFsbENyZWF0ZURhdGFzZXRzVGFza3MgPSBkYXRhc2V0cy5tYXAoXG4gICAgKHtpbmZvID0ge30sIC4uLnJlc3R9KSA9PiBjcmVhdGVOZXdEYXRhRW50cnkoe2luZm8sIC4uLnJlc3R9LCBzdGF0ZS5kYXRhc2V0cykgfHwge31cbiAgKTtcbiAgLy8gY2FsbCBhbGwgVGFza3NcbiAgY29uc3QgdGFza3MgPSBUYXNrLmFsbFNldHRsZWQoYWxsQ3JlYXRlRGF0YXNldHNUYXNrcykubWFwKHJlc3VsdHMgPT5cbiAgICBjcmVhdGVOZXdEYXRhc2V0U3VjY2Vzcyh7cmVzdWx0cywgYWRkVG9NYXBPcHRpb25zOiBvcHRpb25zfSlcbiAgKTtcblxuICByZXR1cm4gd2l0aFRhc2socHJldmlvdXNTdGF0ZSwgdGFza3MpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFBheWxvYWRBY3Rpb248Q3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NQYXlsb2FkPlxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyBjb25zb2xlLmxvZygnY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NVcGRhdGVyJywgYWN0aW9uLnBheWxvYWQpO1xuICBjb25zdCB7cmVzdWx0cywgYWRkVG9NYXBPcHRpb25zfSA9IGFjdGlvbi5wYXlsb2FkO1xuICBjb25zdCBuZXdEYXRhRW50cmllcyA9IHJlc3VsdHMucmVkdWNlKChhY2N1LCByZXN1bHQpID0+IHtcbiAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCcpIHtcbiAgICAgIGNvbnN0IGRhdGFzZXQgPSByZXN1bHQudmFsdWU7XG4gICAgICByZXR1cm4gey4uLmFjY3UsIFtkYXRhc2V0LmlkXTogZGF0YXNldH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGhhbmRsZSBjcmVhdGUgZGF0YXNldCBlcnJvclxuICAgICAgY29uc29sZS5lcnJvcihyZXN1bHQucmVhc29uKTtcbiAgICAgIHJldHVybiBhY2N1O1xuICAgIH1cbiAgfSwge30gYXMgRGF0YXNldHMpO1xuICAvLyBzYXZlIG5ldyBkYXRhc2V0IGVudHJ5IHRvIHN0YXRlXG4gIGNvbnN0IG1lcmdlZFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBtZXJnZURhdGFzZXRzQnlPcmRlcihzdGF0ZSwgbmV3RGF0YUVudHJpZXMpXG4gIH07XG5cbiAgLy8gbWVyZ2Ugc3RhdGUgd2l0aCBjb25maWcgdG8gYmUgbWVyZ2VkXG4gIGNvbnN0IGxheWVyTWVyZ2VycyA9IHN0YXRlLm1lcmdlcnMuZmlsdGVyKG0gPT4gbS53YWl0Rm9yTGF5ZXJEYXRhKTtcbiAgY29uc3QgZGF0YXNldE1lcmdlcnMgPSBzdGF0ZS5tZXJnZXJzLmZpbHRlcihtID0+ICFsYXllck1lcmdlcnMuaW5jbHVkZXMobSkpO1xuXG4gIGNvbnN0IG5ld0RhdGFJZHMgPSBPYmplY3Qua2V5cyhuZXdEYXRhRW50cmllcyk7XG4gIGNvbnN0IHBvc3RNZXJnZXJQYXlsb2FkID0ge1xuICAgIG5ld0RhdGFJZHMsXG4gICAgb3B0aW9uczogYWRkVG9NYXBPcHRpb25zLFxuICAgIGxheWVyTWVyZ2Vyc1xuICB9O1xuXG4gIHJldHVybiBhcHBseU1lcmdlcnNVcGRhdGVyKG1lcmdlZFN0YXRlLCB7bWVyZ2VyczogZGF0YXNldE1lcmdlcnMsIHBvc3RNZXJnZXJQYXlsb2FkfSk7XG59O1xuXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlNZXJnZXJzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IHtcbiAgICBtZXJnZXJzOiBNZXJnZXI8YW55PltdO1xuICAgIHBvc3RNZXJnZXJQYXlsb2FkOiBQb3N0TWVyZ2VyUGF5bG9hZDtcbiAgfVxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7bWVyZ2VycywgcG9zdE1lcmdlclBheWxvYWR9ID0gYWN0aW9uO1xuXG4gIC8vIG1lcmdlIHN0YXRlIHdpdGggY29uZmlnIHRvIGJlIG1lcmdlZFxuICBjb25zdCBtZXJnZVN0YXRlUmVzdWx0ID0gbWVyZ2VTdGF0ZUZyb21NZXJnZXJzKFxuICAgIHN0YXRlLFxuICAgIHtcbiAgICAgIC4uLklOSVRJQUxfVklTX1NUQVRFLFxuICAgICAgLi4uc3RhdGUuaW5pdGlhbFN0YXRlXG4gICAgfSxcbiAgICBtZXJnZXJzLFxuICAgIC8vIG5ld0RhdGFJZHMsXG4gICAgcG9zdE1lcmdlclBheWxvYWRcbiAgKTtcblxuICAvLyBpZiBhbGwgbWVyZ2VkLCBraWNrdXAgcG9zdCBtZXJnZSBwcm9jZXNzXG4gIC8vIGlmIG5vdCB3YWl0XG4gIHJldHVybiBtZXJnZVN0YXRlUmVzdWx0LmFsbE1lcmdlZFxuICAgID8gcG9zdE1lcmdlVXBkYXRlcihtZXJnZVN0YXRlUmVzdWx0Lm1lcmdlZFN0YXRlLCBwb3N0TWVyZ2VyUGF5bG9hZClcbiAgICA6IG1lcmdlU3RhdGVSZXN1bHQubWVyZ2VkU3RhdGU7XG59XG5cbi8qKlxuICogQWRkIG5ldyBkYXRhc2V0IHRvIGB2aXNTdGF0ZWAsIHdpdGggb3B0aW9uIHRvIGxvYWQgYSBtYXAgY29uZmlnIGFsb25nIHdpdGggdGhlIGRhdGFzZXRzXG4gKi9cbmZ1bmN0aW9uIHBvc3RNZXJnZVVwZGF0ZXIobWVyZ2VkU3RhdGU6IFZpc1N0YXRlLCBwb3N0TWVyZ2VyUGF5bG9hZDogUG9zdE1lcmdlclBheWxvYWQpOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtuZXdEYXRhSWRzLCBvcHRpb25zLCBsYXllck1lcmdlcnN9ID0gcG9zdE1lcmdlclBheWxvYWQ7XG4gIGNvbnN0IG5ld0ZpbHRlcnMgPSBtZXJnZWRTdGF0ZS5maWx0ZXJzLmZpbHRlcihmID0+XG4gICAgZi5kYXRhSWQuZmluZChmRGF0YUlkID0+IG5ld0RhdGFJZHMuaW5jbHVkZXMoZkRhdGFJZCkpXG4gICk7XG4gIGNvbnN0IGRhdGFzZXRGaWx0ZXJlZDogc3RyaW5nW10gPSB1bmlxKFxuICAgIG5ld0ZpbHRlcnMucmVkdWNlKChhY2N1LCBmKSA9PiBbLi4uYWNjdSwgLi4uZi5kYXRhSWRdLCBbXSBhcyBzdHJpbmdbXSlcbiAgKTtcbiAgY29uc3QgZGF0YUVtcHR5ID0gbmV3RGF0YUlkcy5sZW5ndGggPCAxO1xuXG4gIGxldCBuZXdMYXllcnMgPSAhZGF0YUVtcHR5XG4gICAgPyBtZXJnZWRTdGF0ZS5sYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuZGF0YUlkICYmIG5ld0RhdGFJZHMuaW5jbHVkZXMobC5jb25maWcuZGF0YUlkKSlcbiAgICA6IFtdO1xuXG4gIGNvbnN0IG5ld0RhdGFFbnRyaWVzID0gbmV3RGF0YUlkcy5yZWR1Y2UoXG4gICAgKGFjY3UsIGlkKSA9PiAoe1xuICAgICAgLi4uYWNjdSxcbiAgICAgIFtpZF06IG1lcmdlZFN0YXRlLmRhdGFzZXRzW2lkXVxuICAgIH0pLFxuICAgIHt9XG4gICk7XG5cbiAgaWYgKCFuZXdMYXllcnMubGVuZ3RoICYmIChvcHRpb25zIHx8IHt9KS5hdXRvQ3JlYXRlTGF5ZXJzICE9PSBmYWxzZSkge1xuICAgIC8vIG5vIGxheWVyIG1lcmdlZCwgZmluZCBkZWZhdWx0c1xuICAgIGNvbnN0IHJlc3VsdCA9IGFkZERlZmF1bHRMYXllcnMobWVyZ2VkU3RhdGUsIG5ld0RhdGFFbnRyaWVzKTtcbiAgICBtZXJnZWRTdGF0ZSA9IHJlc3VsdC5zdGF0ZTtcbiAgICBuZXdMYXllcnMgPSByZXN1bHQubmV3TGF5ZXJzO1xuICB9XG5cbiAgaWYgKG1lcmdlZFN0YXRlLnNwbGl0TWFwcy5sZW5ndGgpIHtcbiAgICAvLyBpZiBtYXAgaXMgc3BsaXQsIGFkZCBuZXcgbGF5ZXJzIHRvIHNwbGl0TWFwc1xuICAgIG5ld0xheWVycyA9IG1lcmdlZFN0YXRlLmxheWVycy5maWx0ZXIoXG4gICAgICBsID0+IGwuY29uZmlnLmRhdGFJZCAmJiBuZXdEYXRhSWRzLmluY2x1ZGVzKGwuY29uZmlnLmRhdGFJZClcbiAgICApO1xuICAgIG1lcmdlZFN0YXRlID0ge1xuICAgICAgLi4ubWVyZ2VkU3RhdGUsXG4gICAgICBzcGxpdE1hcHM6IGFkZE5ld0xheWVyc1RvU3BsaXRNYXAobWVyZ2VkU3RhdGUuc3BsaXRNYXBzLCBuZXdMYXllcnMpXG4gICAgfTtcbiAgfVxuXG4gIC8vIGlmIG5vIHRvb2x0aXBzIG1lcmdlZCBhZGQgZGVmYXVsdCB0b29sdGlwc1xuICBuZXdEYXRhSWRzLmZvckVhY2goZGF0YUlkID0+IHtcbiAgICBjb25zdCB0b29sdGlwRmllbGRzID0gbWVyZ2VkU3RhdGUuaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWcuZmllbGRzVG9TaG93W2RhdGFJZF07XG4gICAgLy8gbG9hZGluZyBkYXRhc2V0OiBhdXRvQ3JlYXRlVG9vbHRpcHMgaXMgZmFsc2UgYW5kIHdlIGRvbid0IHdhbnQgdG8gcnVuIGFkZERlZmF1bHRUb29sdGlwcyB3aGVuIHRvb2x0aXBGaWVsZHMgaXMgZW1wdHlcbiAgICBpZiAoXG4gICAgICBvcHRpb25zPy5hdXRvQ3JlYXRlVG9vbHRpcHMgIT09IGZhbHNlICYmXG4gICAgICAoIUFycmF5LmlzQXJyYXkodG9vbHRpcEZpZWxkcykgfHwgIXRvb2x0aXBGaWVsZHMubGVuZ3RoKVxuICAgICkge1xuICAgICAgLy8gYWRkaW5nIGRhdGFzZXQ6IGF1dG9DcmVhdGVUb29sdGlwcyBpcyB0cnVlXG4gICAgICBtZXJnZWRTdGF0ZSA9IGFkZERlZmF1bHRUb29sdGlwcyhtZXJnZWRTdGF0ZSwgbmV3RGF0YUVudHJpZXNbZGF0YUlkXSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCB1cGRhdGVkRGF0YXNldHMgPSBkYXRhRW1wdHlcbiAgICA/IE9iamVjdC5rZXlzKG1lcmdlZFN0YXRlLmRhdGFzZXRzKVxuICAgIDogdW5pcShPYmplY3Qua2V5cyhuZXdEYXRhRW50cmllcykuY29uY2F0KGRhdGFzZXRGaWx0ZXJlZCkpO1xuXG4gIGxldCB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobWVyZ2VkU3RhdGUsIHVwZGF0ZWREYXRhc2V0cywgdW5kZWZpbmVkKTtcblxuICAvLyByZWdpc3RlciBsYXllciBhbmltYXRpb24gZG9tYWluLFxuICAvLyBuZWVkIHRvIGJlIGNhbGxlZCBhZnRlciBsYXllciBkYXRhIGlzIGNhbGN1bGF0ZWRcbiAgdXBkYXRlZFN0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKHVwZGF0ZWRTdGF0ZSk7XG5cbiAgLy8gdHJ5IHRvIHByb2Nlc3MgbGF5ZXJNZXJnZXJzIGFmdGVyIGRhdGFzZXQrZGF0YXNldE1lcmdlcnNcbiAgdXBkYXRlZFN0YXRlID1cbiAgICBsYXllck1lcmdlcnMgJiYgbGF5ZXJNZXJnZXJzLmxlbmd0aCA+IDBcbiAgICAgID8gYXBwbHlNZXJnZXJzVXBkYXRlcih1cGRhdGVkU3RhdGUsIHtcbiAgICAgICAgICBtZXJnZXJzOiBsYXllck1lcmdlcnMsXG4gICAgICAgICAgcG9zdE1lcmdlclBheWxvYWQ6IHsuLi5wb3N0TWVyZ2VyUGF5bG9hZCwgbGF5ZXJNZXJnZXJzOiBbXX1cbiAgICAgICAgfSlcbiAgICAgIDogdXBkYXRlZFN0YXRlO1xuXG4gIC8vIGNlbnRlciB0aGUgbWFwIG9uY2UgdGhlIGRhdGFzZXQgaXMgY3JlYXRlZFxuICBpZiAobmV3TGF5ZXJzLmxlbmd0aCAmJiAob3B0aW9ucyB8fCB7fSkuY2VudGVyTWFwKSB7XG4gICAgY29uc3QgYm91bmRzID0gZmluZE1hcEJvdW5kcyhuZXdMYXllcnMpO1xuICAgIGlmIChib3VuZHMpIHtcbiAgICAgIGNvbnN0IGZpdEJvdW5kc1Rhc2sgPSBBQ1RJT05fVEFTSygpLm1hcCgoKSA9PiB7XG4gICAgICAgIHJldHVybiBmaXRNYXBCb3VuZHMoYm91bmRzKTtcbiAgICAgIH0pO1xuICAgICAgdXBkYXRlZFN0YXRlID0gd2l0aFRhc2sodXBkYXRlZFN0YXRlLCBmaXRCb3VuZHNUYXNrKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdXBkYXRlZFN0YXRlO1xufVxuXG4vKipcbiAqIFJlbmFtZSBhbiBleGlzdGluZyBkYXRhc2V0IGluIGB2aXNTdGF0ZWBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5hbWVEYXRhc2V0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW5hbWVEYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICByZXR1cm4gdXBkYXRlRGF0YXNldFByb3BzVXBkYXRlcihzdGF0ZSwge2RhdGFJZDogYWN0aW9uLmRhdGFJZCwgcHJvcHM6IHtsYWJlbDogYWN0aW9uLmxhYmVsfX0pO1xufVxuXG5jb25zdCBBTExPV0VEX1VQREFURV9EQVRBU0VUX1BST1BTID0gWydsYWJlbCcsICdjb2xvcicsICdtZXRhZGF0YSddO1xuXG4vKipcbiAqIFZhbGlkYXRlcyBwcm9wZXJ0aWVzIGJlZm9yZSB1cGRhdGluZyB0aGUgZGF0YXNldC5cbiAqIE1ha2VzIHN1cmUgZWFjaCBwcm9wZXJ0eSBpcyBpbiB0aGUgYWxsb3dlZCBsaXN0XG4gKiBNYWtlcyBzdXJlIGNvbG9yIHZhbHVlIGlzIFJHQlxuICogUGVyZm9ybXMgZGVlcCBtZXJnZSB3aGVuIHVwZGF0aW5nIG1ldGFkYXRhXG4gKi9cbmNvbnN0IHZhbGlkYXRlRGF0YXNldFVwZGF0ZVByb3BzID0gKHByb3BzLCBkYXRhc2V0KSA9PiB7XG4gIGNvbnN0IHZhbGlkYXRlZFByb3BzID0gT2JqZWN0LmVudHJpZXMocHJvcHMpLnJlZHVjZSgoYWNjLCBlbnRyeSkgPT4ge1xuICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IGVudHJ5O1xuICAgIC8vIGlzIGl0IGFsbG93ZWQgP1xuICAgIGlmICghQUxMT1dFRF9VUERBVEVfREFUQVNFVF9QUk9QUy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cblxuICAgIC8vIGlmIHdlIGFyZSBhZGRpbmcgYSBjb2xvciBidXQgaXQgaXMgbm90IFJHQiB3ZSBkb24ndCBhY2NlcHQgdGhlIHZhbHVlXG4gICAgLy8gaW4gdGhlIGZ1dHVyZSBhcyB3ZSBhZGQgbW9yZSBwcm9wcyB3ZSBzaG91bGQgY2hhbmdlIHRoaXMgaWYgaW50byBhIHN3aXRjaFxuICAgIGlmIChrZXkgPT09ICdjb2xvcicgJiYgIWlzUmdiQ29sb3IodmFsdWUpKSB7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cblxuICAgIC8vIGRvIHdlIG5lZWQgZGVlcCBtZXJnZSA/XG4gICAgcmV0dXJuIHsuLi5hY2MsIFtrZXldOiBpc1BsYWluT2JqZWN0KHZhbHVlKSA/IGRlZXBtZXJnZShkYXRhc2V0W2tleV0gfHwge30sIHZhbHVlKSA6IHZhbHVlfTtcbiAgfSwge30pO1xuXG4gIHJldHVybiB2YWxpZGF0ZWRQcm9wcztcbn07XG5cbi8qKlxuICogVXBkYXRlIERhdGFzZXQgcHJvcHMgKGxhYmVsLCBjb2xvciwgbWV0YSkuIERvIG5vdCB1c2UgdG8gdXBkYXRlIGRhdGEgb3IgYW55IHJlbGF0ZWQgcHJvcGVydGllc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRGF0YXNldFByb3BzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7ZGF0YUlkLCBwcm9wc30gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhc2V0c30gPSBzdGF0ZTtcbiAgY29uc3QgZXhpc3RpbmcgPSBkYXRhc2V0c1tkYXRhSWRdO1xuXG4gIGlmIChleGlzdGluZykge1xuICAgIGNvbnN0IHZhbGlkYXRlZFByb3BzID0gdmFsaWRhdGVEYXRhc2V0VXBkYXRlUHJvcHMocHJvcHMsIGV4aXN0aW5nKTtcbiAgICAvLyAgdmFsaWRhdGUgcHJvcHM6IGp1c3QgY29sb3IgZm9yIG5vd1xuICAgIC8vICB3ZSBvbmx5IGFsbG93IGxhYmVsLCBjb2xvciBhbmQgbWV0YSB0byBiZSB1cGRhdGVkXG4gICAgLy8gY29uc3QgbmV3VGFibGUgPSBjb3B5VGFibGVBbmRVcGRhdGUoZXhpc3RpbmcsIHZhbGlkYXRlZFByb3BzKTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBkYXRhc2V0czoge1xuICAgICAgICAuLi5kYXRhc2V0cyxcbiAgICAgICAgW2RhdGFJZF06IGNvcHlUYWJsZUFuZFVwZGF0ZShleGlzdGluZywgdmFsaWRhdGVkUHJvcHMpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBXaGVuIGEgdXNlciBjbGlja3Mgb24gdGhlIHNwZWNpZmljIG1hcCBjbG9zaW5nIGljb25cbiAqIHRoZSBhcHBsaWNhdGlvbiB3aWxsIGNsb3NlIHRoZSBzZWxlY3RlZCBtYXBcbiAqIGFuZCB3aWxsIG1lcmdlIHRoZSByZW1haW5pbmcgb25lIHdpdGggdGhlIGdsb2JhbCBzdGF0ZVxuICogVE9ETzogaSB0aGluayBpbiB0aGUgZnV0dXJlIHRoaXMgYWN0aW9uIHNob3VsZCBiZSBjYWxsZWQgbWVyZ2UgbWFwIGxheWVycyB3aXRoIGdsb2JhbCBzZXR0aW5nc1xuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlIGB2aXNTdGF0ZWBcbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb24gYWN0aW9uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsb3NlU3BlY2lmaWNNYXBBdEluZGV4PFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IE1hcFN0YXRlQWN0aW9ucy5Ub2dnbGVTcGxpdE1hcFVwZGF0ZXJBY3Rpb25cbik6IFMge1xuICAvLyByZXRyaWV2ZSBsYXllcnMgbWV0YSBkYXRhIGZyb20gdGhlIHJlbWFpbmluZyBtYXAgdGhhdCB3ZSBuZWVkIHRvIGtlZXBcbiAgY29uc3QgaW5kZXhUb1JldHJpZXZlID0gMSAtIGFjdGlvbi5wYXlsb2FkO1xuICBjb25zdCBtYXBMYXllcnMgPSBzdGF0ZS5zcGxpdE1hcHNbaW5kZXhUb1JldHJpZXZlXT8ubGF5ZXJzO1xuICBjb25zdCB7bGF5ZXJzfSA9IHN0YXRlO1xuXG4gIC8vIHVwZGF0ZSBsYXllciB2aXNpYmlsaXR5XG4gIGNvbnN0IG5ld0xheWVycyA9IGxheWVycy5tYXAobGF5ZXIgPT5cbiAgICBtYXBMYXllcnMgJiYgIW1hcExheWVyc1tsYXllci5pZF0gJiYgbGF5ZXIuY29uZmlnLmlzVmlzaWJsZVxuICAgICAgPyBsYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgICAgLy8gaWYgbGF5ZXIuaWQgaXMgbm90IGluIG1hcExheWVycywgaXQgc2hvdWxkIGJlIGluVmlzaWJsZVxuICAgICAgICAgIGlzVmlzaWJsZTogZmFsc2VcbiAgICAgICAgfSlcbiAgICAgIDogbGF5ZXJcbiAgKTtcblxuICAvLyBkZWxldGUgbWFwXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBuZXdMYXllcnMsXG4gICAgc3BsaXRNYXBzOiBbXVxuICB9O1xufVxuXG4vKipcbiAqIFRyaWdnZXIgZmlsZSBsb2FkaW5nIGRpc3BhdGNoIGBhZGREYXRhVG9NYXBgIGlmIHN1Y2NlZWQsIG9yIGBsb2FkRmlsZXNFcnJgIGlmIGZhaWxlZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxvYWRGaWxlc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7ZmlsZXMsIG9uRmluaXNoID0gbG9hZEZpbGVzU3VjY2Vzc30gPSBhY3Rpb247XG4gIGlmICghZmlsZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZmlsZUxvYWRpbmdQcm9ncmVzcyA9IEFycmF5LmZyb20oZmlsZXMpLnJlZHVjZShcbiAgICAoYWNjdSwgZiwgaSkgPT4gbWVyZ2VfKGluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzKGYsIGkpKShhY2N1KSxcbiAgICB7fVxuICApO1xuXG4gIGNvbnN0IGZpbGVMb2FkaW5nID0ge1xuICAgIGZpbGVDYWNoZTogW10sXG4gICAgZmlsZXNUb0xvYWQ6IGZpbGVzLFxuICAgIG9uRmluaXNoXG4gIH07XG5cbiAgY29uc3QgbmV4dFN0YXRlID0gbWVyZ2VfKHtmaWxlTG9hZGluZ1Byb2dyZXNzLCBmaWxlTG9hZGluZ30pKHN0YXRlKTtcblxuICByZXR1cm4gbG9hZE5leHRGaWxlVXBkYXRlcihuZXh0U3RhdGUpO1xufTtcblxuLyoqXG4gKiBTdWNlc3NmdWxseSBsb2FkZWQgb25lIGZpbGUsIG1vdmUgb24gdG8gdGhlIG5leHQgb25lXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEZpbGVTdGVwU3VjY2Vzc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVTdGVwU3VjY2Vzc0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIXN0YXRlLmZpbGVMb2FkaW5nKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHtmaWxlTmFtZSwgZmlsZUNhY2hlfSA9IGFjdGlvbjtcbiAgY29uc3Qge2ZpbGVzVG9Mb2FkLCBvbkZpbmlzaH0gPSBzdGF0ZS5maWxlTG9hZGluZztcbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiB7cGVyY2VudDogMSwgbWVzc2FnZTogJ0RvbmUnfVxuICB9KTtcblxuICAvLyBzYXZlIHByb2Nlc3NlZCBmaWxlIHRvIGZpbGVDYWNoZVxuICBjb25zdCBzdGF0ZVdpdGhDYWNoZSA9IHBpY2tfKCdmaWxlTG9hZGluZycpKG1lcmdlXyh7ZmlsZUNhY2hlfSkpKHN0YXRlV2l0aFByb2dyZXNzKTtcblxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc3RhdGVXaXRoQ2FjaGUsXG4gICAgREVMQVlfVEFTSygyMDApLm1hcChmaWxlc1RvTG9hZC5sZW5ndGggPyBsb2FkTmV4dEZpbGUgOiAoKSA9PiBvbkZpbmlzaChmaWxlQ2FjaGUpKVxuICApO1xufVxuXG4vLyB3aXRoVGFzazxUPihzdGF0ZTogVCwgdGFzazogYW55KTogVFxuXG4vKipcbiAqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZE5leHRGaWxlVXBkYXRlcihzdGF0ZTogVmlzU3RhdGUpOiBWaXNTdGF0ZSB7XG4gIGlmICghc3RhdGUuZmlsZUxvYWRpbmcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qge2ZpbGVzVG9Mb2FkfSA9IHN0YXRlLmZpbGVMb2FkaW5nO1xuICBjb25zdCBbZmlsZSwgLi4ucmVtYWluaW5nRmlsZXNUb0xvYWRdID0gZmlsZXNUb0xvYWQ7XG5cbiAgLy8gc2F2ZSBmaWxlc1RvTG9hZCB0byBzdGF0ZVxuICBjb25zdCBuZXh0U3RhdGUgPSBwaWNrXygnZmlsZUxvYWRpbmcnKShtZXJnZV8oe2ZpbGVzVG9Mb2FkOiByZW1haW5pbmdGaWxlc1RvTG9hZH0pKShzdGF0ZSk7XG5cbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihuZXh0U3RhdGUsIHtcbiAgICBmaWxlTmFtZTogZmlsZS5uYW1lLFxuICAgIHByb2dyZXNzOiB7cGVyY2VudDogMCwgbWVzc2FnZTogJ2xvYWRpbmcuLi4nfVxuICB9KTtcblxuICBjb25zdCB7bG9hZGVycywgbG9hZE9wdGlvbnN9ID0gc3RhdGU7XG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzdGF0ZVdpdGhQcm9ncmVzcyxcbiAgICBtYWtlTG9hZEZpbGVUYXNrKFxuICAgICAgZmlsZSxcbiAgICAgIG5leHRTdGF0ZS5maWxlTG9hZGluZyAmJiBuZXh0U3RhdGUuZmlsZUxvYWRpbmcuZmlsZUNhY2hlLFxuICAgICAgbG9hZGVycyxcbiAgICAgIGxvYWRPcHRpb25zXG4gICAgKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFrZUxvYWRGaWxlVGFzayhmaWxlLCBmaWxlQ2FjaGUsIGxvYWRlcnM6IExvYWRlcltdID0gW10sIGxvYWRPcHRpb25zID0ge30pIHtcbiAgcmV0dXJuIExPQURfRklMRV9UQVNLKHtmaWxlLCBmaWxlQ2FjaGUsIGxvYWRlcnMsIGxvYWRPcHRpb25zfSkuYmltYXAoXG4gICAgLy8gcHJldHRpZXIgaWdub3JlXG4gICAgLy8gc3VjY2Vzc1xuICAgIGdlbiA9PlxuICAgICAgbmV4dEZpbGVCYXRjaCh7XG4gICAgICAgIGdlbixcbiAgICAgICAgZmlsZU5hbWU6IGZpbGUubmFtZSxcbiAgICAgICAgb25GaW5pc2g6IHJlc3VsdCA9PlxuICAgICAgICAgIHByb2Nlc3NGaWxlQ29udGVudCh7XG4gICAgICAgICAgICBjb250ZW50OiByZXN1bHQsXG4gICAgICAgICAgICBmaWxlQ2FjaGVcbiAgICAgICAgICB9KVxuICAgICAgfSksXG5cbiAgICAvLyBlcnJvclxuICAgIGVyciA9PiBsb2FkRmlsZXNFcnIoZmlsZS5uYW1lLCBlcnIpXG4gICk7XG59XG5cbi8qKlxuICpcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzRmlsZUNvbnRlbnRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlByb2Nlc3NGaWxlQ29udGVudFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2NvbnRlbnQsIGZpbGVDYWNoZX0gPSBhY3Rpb24ucGF5bG9hZDtcblxuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWU6IGNvbnRlbnQuZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtwZXJjZW50OiAxLCBtZXNzYWdlOiAncHJvY2Vzc2luZy4uLid9XG4gIH0pO1xuXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzdGF0ZVdpdGhQcm9ncmVzcyxcbiAgICBQUk9DRVNTX0ZJTEVfREFUQSh7Y29udGVudCwgZmlsZUNhY2hlfSkuYmltYXAoXG4gICAgICByZXN1bHQgPT4gbG9hZEZpbGVTdGVwU3VjY2Vzcyh7ZmlsZU5hbWU6IGNvbnRlbnQuZmlsZU5hbWUsIGZpbGVDYWNoZTogcmVzdWx0fSksXG4gICAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGNvbnRlbnQuZmlsZU5hbWUsIGVycilcbiAgICApXG4gICk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVByb2dyZXNzKHByZXZQcm9ncmVzcyA9IHt9LCBwcm9ncmVzcykge1xuICAvLyBUaGlzIGhhcHBlbnMgd2hlbiByZWNlaXZpbmcgcXVlcnkgbWV0YWRhdGEgb3Igb3RoZXIgY2FzZXMgd2UgZG9uJ3RcbiAgLy8gaGF2ZSBhbiB1cGRhdGUgZm9yIHRoZSB1c2VyLlxuICBpZiAoIXByb2dyZXNzIHx8ICFwcm9ncmVzcy5wZXJjZW50KSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwZXJjZW50OiBwcm9ncmVzcy5wZXJjZW50XG4gIH07XG59XG5cbi8qKlxuICogZ2V0cyBjYWxsZWQgd2l0aCBwYXlsb2FkID0gQXN5bmNHZW5lcmF0b3I8Pz8/PlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IG5leHRGaWxlQmF0Y2hVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtcbiAgICBwYXlsb2FkOiB7Z2VuLCBmaWxlTmFtZSwgcHJvZ3Jlc3MsIGFjY3VtdWxhdGVkLCBvbkZpbmlzaH1cbiAgfTogVmlzU3RhdGVBY3Rpb25zLk5leHRGaWxlQmF0Y2hVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHN0YXRlV2l0aFByb2dyZXNzID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZSxcbiAgICBwcm9ncmVzczogcGFyc2VQcm9ncmVzcyhzdGF0ZS5maWxlTG9hZGluZ1Byb2dyZXNzW2ZpbGVOYW1lXSwgcHJvZ3Jlc3MpXG4gIH0pO1xuXG4gIHJldHVybiB3aXRoVGFzayhzdGF0ZVdpdGhQcm9ncmVzcywgW1xuICAgIC4uLihmaWxlTmFtZS5lbmRzV2l0aCgnYXJyb3cnKSAmJiBhY2N1bXVsYXRlZD8uZGF0YT8ubGVuZ3RoID4gMFxuICAgICAgPyBbXG4gICAgICAgICAgUFJPQ0VTU19GSUxFX0RBVEEoe2NvbnRlbnQ6IGFjY3VtdWxhdGVkLCBmaWxlQ2FjaGU6IFtdfSkuYmltYXAoXG4gICAgICAgICAgICByZXN1bHQgPT4gbG9hZEZpbGVzU3VjY2VzcyhyZXN1bHQpLFxuICAgICAgICAgICAgZXJyID0+IGxvYWRGaWxlc0VycihmaWxlTmFtZSwgZXJyKVxuICAgICAgICAgIClcbiAgICAgICAgXVxuICAgICAgOiBbXSksXG4gICAgVU5XUkFQX1RBU0soZ2VuLm5leHQoKSkuYmltYXAoXG4gICAgICAoe3ZhbHVlLCBkb25lfSkgPT4ge1xuICAgICAgICByZXR1cm4gZG9uZVxuICAgICAgICAgID8gb25GaW5pc2goYWNjdW11bGF0ZWQpXG4gICAgICAgICAgOiBuZXh0RmlsZUJhdGNoKHtcbiAgICAgICAgICAgICAgZ2VuLFxuICAgICAgICAgICAgICBmaWxlTmFtZSxcbiAgICAgICAgICAgICAgcHJvZ3Jlc3M6IHZhbHVlLnByb2dyZXNzLFxuICAgICAgICAgICAgICBhY2N1bXVsYXRlZDogdmFsdWUsXG4gICAgICAgICAgICAgIG9uRmluaXNoXG4gICAgICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGZpbGVOYW1lLCBlcnIpXG4gICAgKVxuICBdKTtcbn07XG5cbi8qKlxuICogVHJpZ2dlciBsb2FkaW5nIGZpbGUgZXJyb3JcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsb2FkRmlsZXNFcnJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtlcnJvciwgZmlsZU5hbWV9OiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVzRXJyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyB1cGRhdGUgdWkgd2l0aCBlcnJvciBtZXNzYWdlXG4gIENvbnNvbGUud2FybihlcnJvcik7XG4gIGlmICghc3RhdGUuZmlsZUxvYWRpbmcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qge2ZpbGVzVG9Mb2FkLCBvbkZpbmlzaCwgZmlsZUNhY2hlfSA9IHN0YXRlLmZpbGVMb2FkaW5nO1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtlcnJvcn1cbiAgfSk7XG5cbiAgLy8ga2ljayBvZmYgbmV4dCBmaWxlIG9yIGZpbmlzaFxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgbmV4dFN0YXRlLFxuICAgIERFTEFZX1RBU0soMjAwKS5tYXAoZmlsZXNUb0xvYWQubGVuZ3RoID8gbG9hZE5leHRGaWxlIDogKCkgPT4gb25GaW5pc2goZmlsZUNhY2hlKSlcbiAgKTtcbn07XG5cbi8qKlxuICogV2hlbiBzZWxlY3QgZGF0YXNldCBmb3IgZXhwb3J0LCBhcHBseSBjcHUgZmlsdGVyIHRvIHNlbGVjdGVkIGRhdGFzZXRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhcHBseUNQVUZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZH06IFZpc1N0YXRlQWN0aW9ucy5BcHBseUNQVUZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgLy8gYXBwbHkgY3B1RmlsdGVyXG4gIGNvbnN0IGRhdGFJZHMgPSB0b0FycmF5KGRhdGFJZCk7XG5cbiAgcmV0dXJuIGRhdGFJZHMucmVkdWNlKChhY2N1LCBpZCkgPT4gZmlsdGVyRGF0YXNldENQVShhY2N1LCBpZCksIHN0YXRlKTtcbn07XG5cbi8qKlxuICogVXNlciBpbnB1dCB0byB1cGRhdGUgdGhlIGluZm8gb2YgdGhlIG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldE1hcEluZm9VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldE1hcEluZm9VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbWFwSW5mbzoge1xuICAgIC4uLnN0YXRlLm1hcEluZm8sXG4gICAgLi4uYWN0aW9uLmluZm9cbiAgfVxufSk7XG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byB1cGRhdGUgQWxsIGxheWVyIGRvbWFpbiBhbmQgbGF5ZXIgZGF0YSBvZiBzdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRGVmYXVsdExheWVycyhcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBkYXRhc2V0czogRGF0YXNldHNcbik6IHtzdGF0ZTogVmlzU3RhdGU7IG5ld0xheWVyczogTGF5ZXJbXX0ge1xuICBjb25zdCBlbXB0eTogTGF5ZXJbXSA9IFtdO1xuICBjb25zdCBkZWZhdWx0TGF5ZXJzID0gT2JqZWN0LnZhbHVlcyhkYXRhc2V0cykucmVkdWNlKChhY2N1OiBMYXllcltdLCBkYXRhc2V0KSA9PiB7XG4gICAgY29uc3QgZm91bmRMYXllcnMgPSBmaW5kRGVmYXVsdExheWVyKGRhdGFzZXQsIHN0YXRlLmxheWVyQ2xhc3Nlcyk7XG4gICAgcmV0dXJuIGZvdW5kTGF5ZXJzICYmIGZvdW5kTGF5ZXJzLmxlbmd0aCA/IGFjY3UuY29uY2F0KGZvdW5kTGF5ZXJzKSA6IGFjY3U7XG4gIH0sIGVtcHR5KTtcblxuICByZXR1cm4ge1xuICAgIHN0YXRlOiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGxheWVyczogWy4uLnN0YXRlLmxheWVycywgLi4uZGVmYXVsdExheWVyc10sXG4gICAgICBsYXllck9yZGVyOiBbXG4gICAgICAgIC8vIHB1dCBuZXcgbGF5ZXJzIG9uIHRvcCBvZiBvbGQgb25lcyBpbiByZXZlcnNlXG4gICAgICAgIC4uLmdldExheWVyT3JkZXJGcm9tTGF5ZXJzKGRlZmF1bHRMYXllcnMpLFxuICAgICAgICAuLi5zdGF0ZS5sYXllck9yZGVyXG4gICAgICBdXG4gICAgfSxcbiAgICBuZXdMYXllcnM6IGRlZmF1bHRMYXllcnNcbiAgfTtcbn1cblxuLyoqXG4gKiBoZWxwZXIgZnVuY3Rpb24gdG8gZmluZCBkZWZhdWx0IHRvb2x0aXBzXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhc2V0XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZERlZmF1bHRUb29sdGlwcyhzdGF0ZSwgZGF0YXNldCkge1xuICBjb25zdCB0b29sdGlwRmllbGRzID0gZmluZEZpZWxkc1RvU2hvdyh7XG4gICAgLi4uZGF0YXNldCxcbiAgICBtYXhEZWZhdWx0VG9vbHRpcHM6IHN0YXRlLm1heERlZmF1bHRUb29sdGlwc1xuICB9KTtcbiAgY29uc3QgbWVyZ2VkID0ge1xuICAgIC4uLnN0YXRlLmludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAuY29uZmlnLmZpZWxkc1RvU2hvdyxcbiAgICAuLi50b29sdGlwRmllbGRzXG4gIH07XG5cbiAgcmV0dXJuIHNldChbJ2ludGVyYWN0aW9uQ29uZmlnJywgJ3Rvb2x0aXAnLCAnY29uZmlnJywgJ2ZpZWxkc1RvU2hvdyddLCBtZXJnZWQsIHN0YXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzKGZpbGUsIGluZGV4KSB7XG4gIGNvbnN0IGZpbGVOYW1lID0gZmlsZS5uYW1lIHx8IGBVbnRpdGxlZCBGaWxlICR7aW5kZXh9YDtcbiAgcmV0dXJuIHtcbiAgICBbZmlsZU5hbWVdOiB7XG4gICAgICAvLyBwZXJjZW50IG9mIGN1cnJlbnQgZmlsZVxuICAgICAgcGVyY2VudDogMCxcbiAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgZmlsZU5hbWUsXG4gICAgICBlcnJvcjogbnVsbFxuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7ZmlsZU5hbWUsIHByb2dyZXNzfSkge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gIHJldHVybiBwaWNrXygnZmlsZUxvYWRpbmdQcm9ncmVzcycpKHBpY2tfKGZpbGVOYW1lKShtZXJnZV8ocHJvZ3Jlc3MpKSkoc3RhdGUpO1xufVxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gdXBkYXRlIGxheWVyIGRvbWFpbnMgZm9yIGFuIGFycmF5IG9mIGRhdGFzZXRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGE8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGRhdGFJZDogc3RyaW5nIHwgc3RyaW5nW10sXG4gIHVwZGF0ZWRGaWx0ZXI/OiBGaWx0ZXJcbik6IFMge1xuICBjb25zdCBkYXRhSWRzID0gdHlwZW9mIGRhdGFJZCA9PT0gJ3N0cmluZycgPyBbZGF0YUlkXSA6IGRhdGFJZDtcbiAgY29uc3QgbmV3TGF5ZXJzOiBMYXllcltdID0gW107XG4gIGNvbnN0IG5ld0xheWVyRGF0YTogYW55W10gPSBbXTtcblxuICBzdGF0ZS5sYXllcnMuZm9yRWFjaCgob2xkTGF5ZXIsIGkpID0+IHtcbiAgICBpZiAob2xkTGF5ZXIuY29uZmlnLmRhdGFJZCAmJiBkYXRhSWRzLmluY2x1ZGVzKG9sZExheWVyLmNvbmZpZy5kYXRhSWQpKSB7XG4gICAgICAvLyBObyBuZWVkIHRvIHJlY2FsY3VsYXRlIGxheWVyIGRvbWFpbiBpZiBmaWx0ZXIgaGFzIGZpeGVkIGRvbWFpblxuICAgICAgY29uc3QgbmV3TGF5ZXIgPVxuICAgICAgICB1cGRhdGVkRmlsdGVyICYmIHVwZGF0ZWRGaWx0ZXIuZml4ZWREb21haW5cbiAgICAgICAgICA/IG9sZExheWVyXG4gICAgICAgICAgOiBvbGRMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cywgdXBkYXRlZEZpbHRlcik7XG5cbiAgICAgIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIHN0YXRlLmxheWVyRGF0YVtpXSk7XG5cbiAgICAgIG5ld0xheWVycy5wdXNoKGxheWVyKTtcbiAgICAgIG5ld0xheWVyRGF0YS5wdXNoKGxheWVyRGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xheWVycy5wdXNoKG9sZExheWVyKTtcbiAgICAgIG5ld0xheWVyRGF0YS5wdXNoKHN0YXRlLmxheWVyRGF0YVtpXSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IG5ld0xheWVycyxcbiAgICBsYXllckRhdGE6IG5ld0xheWVyRGF0YVxuICB9O1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbjxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTKTogUyB7XG4gIC8vIG1lcmdlIGFsbCBhbmltYXRhYmxlIGxheWVyIGRvbWFpbiBhbmQgdXBkYXRlIGdsb2JhbCBjb25maWdcbiAgY29uc3QgYW5pbWF0YWJsZUxheWVycyA9IGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzKHN0YXRlLmxheWVycyk7XG5cbiAgaWYgKCFhbmltYXRhYmxlTGF5ZXJzLmxlbmd0aCkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICAgIGRvbWFpbjogbnVsbCxcbiAgICAgICAgaXNBbmltYXRpbmc6IGZhbHNlLFxuICAgICAgICB0aW1lU3RlcHM6IG51bGwsXG4gICAgICAgIGRlZmF1bHRUaW1lRm9ybWF0OiBudWxsXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGxheWVyRG9tYWlucyA9IGFuaW1hdGFibGVMYXllcnMubWFwKGwgPT4gbC5jb25maWcuYW5pbWF0aW9uLmRvbWFpbiB8fCBbXSk7XG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgbWVyZ2VkRG9tYWluID0gbWVyZ2VUaW1lRG9tYWlucyhsYXllckRvbWFpbnMpO1xuICBjb25zdCBkZWZhdWx0VGltZUZvcm1hdCA9IGdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlcihtZXJnZWREb21haW4pO1xuXG4gIC8vIG1lcmdlIHRpbWVTdGVwc1xuICBsZXQgbWVyZ2VkVGltZVN0ZXBzOiBudW1iZXJbXSB8IG51bGwgPSB1bmlxPG51bWJlcj4oXG4gICAgYW5pbWF0YWJsZUxheWVycy5yZWR1Y2UoKGFjY3UsIGxheWVyKSA9PiB7XG4gICAgICBhY2N1LnB1c2goLi4uKGxheWVyLmNvbmZpZy5hbmltYXRpb24udGltZVN0ZXBzIHx8IFtdKSk7XG4gICAgICByZXR1cm4gYWNjdTtcbiAgICB9LCBbXSlcbiAgKS5zb3J0KCk7XG5cbiAgbWVyZ2VkVGltZVN0ZXBzID0gbWVyZ2VkVGltZVN0ZXBzLmxlbmd0aCA/IG1lcmdlZFRpbWVTdGVwcyA6IG51bGw7XG5cbiAgLy8gVE9ETzogYmV0dGVyIGhhbmRsaW5nIG9mIGR1cmF0aW9uIGNhbGN1bGF0aW9uXG4gIGNvbnN0IGR1cmF0aW9uID0gbWVyZ2VkVGltZVN0ZXBzXG4gICAgPyAoQkFTRV9TUEVFRCAqICgxMDAwIC8gRlBTKSkgLyBtZXJnZWRUaW1lU3RlcHMubGVuZ3RoIC8gKHN0YXRlLmFuaW1hdGlvbkNvbmZpZy5zcGVlZCB8fCAxKVxuICAgIDogbnVsbDtcblxuICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICBkb21haW46IG1lcmdlZERvbWFpbixcbiAgICAgIGRlZmF1bHRUaW1lRm9ybWF0LFxuICAgICAgZHVyYXRpb24sXG4gICAgICB0aW1lU3RlcHM6IG1lcmdlZFRpbWVTdGVwc1xuICAgIH1cbiAgfTtcblxuICAvLyByZXNldCBjdXJyZW50VGltZSBiYXNlZCBvbiBuZXcgZG9tYWluXG4gIGNvbnN0IHN5bmNlZEZpbHRlciA9IHN0YXRlLmZpbHRlcnM/LmZpbmQoZiA9PiAoZiBhcyBUaW1lUmFuZ2VGaWx0ZXIpLnN5bmNlZFdpdGhMYXllclRpbWVsaW5lKSBhc1xuICAgIHwgVGltZVJhbmdlRmlsdGVyXG4gICAgfCB1bmRlZmluZWQ7XG5cbiAgLy8gaWYgc3luY2VkIGZpbHRlciBleGlzdCB3ZWUgbmVlZCB0byBtZXJnZSBhbmltYXRpb25Db25maWcgYW5kIGZpbHRlciBkb21haW5zXG4gIC8vIGFuZCB2YWxpZGF0ZSB0aGUgY3VycmVudCB0aW1lIGFnYWluc3QgdGhlIG5ldyBtZXJnZWQgZG9tYWluXG4gIGNvbnN0IG5ld0FuaW1hdGlvbkRvbWFpbiA9IHN5bmNlZEZpbHRlclxuICAgID8gbWVyZ2VUaW1lRG9tYWlucyhbbWVyZ2VkRG9tYWluLCBzeW5jZWRGaWx0ZXIuZG9tYWluXSlcbiAgICA6IG1lcmdlZERvbWFpbjtcbiAgY29uc3QgY3VycmVudFRpbWUgPSBpc0luUmFuZ2Uoc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmN1cnJlbnRUaW1lLCBuZXdBbmltYXRpb25Eb21haW4pXG4gICAgPyBzdGF0ZS5hbmltYXRpb25Db25maWcuY3VycmVudFRpbWVcbiAgICA6IG5ld0FuaW1hdGlvbkRvbWFpblswXTtcblxuICBpZiAoY3VycmVudFRpbWUgIT09IHN0YXRlLmFuaW1hdGlvbkNvbmZpZy5jdXJyZW50VGltZSkge1xuICAgIC8vIGlmIGN1cnJlbnRUaW1lIGNoYW5nZWQsIG5lZWQgdG8gY2FsbCBhbmltYXRpb25UaW1lVXBkYXRlciB0byByZSBjYWxsIGZvcm1hdExheWVyRGF0YVxuICAgIHJldHVybiBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyKG5leHRTdGF0ZSwge3ZhbHVlOiBjdXJyZW50VGltZX0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgdGhlIHN0YXR1cyBvZiB0aGUgZWRpdG9yXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3Qgc2V0RWRpdG9yTW9kZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge21vZGV9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RWRpdG9yTW9kZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBlZGl0b3I6IHtcbiAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgbW9kZSxcbiAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGxcbiAgfVxufSk7XG5cbi8vIGNvbnN0IGZlYXR1cmVUb0ZpbHRlclZhbHVlID0gKGZlYXR1cmUpID0+ICh7Li4uZmVhdHVyZSwgaWQ6IGZlYXR1cmUuaWR9KTtcbi8qKlxuICogVXBkYXRlIGVkaXRvciBmZWF0dXJlc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZlYXR1cmVzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZXMgPSBbXX06IFZpc1N0YXRlQWN0aW9ucy5TZXRGZWF0dXJlc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgbGFzdEZlYXR1cmUgPSBmZWF0dXJlcy5sZW5ndGggJiYgZmVhdHVyZXNbZmVhdHVyZXMubGVuZ3RoIC0gMV07XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAvLyBvbmx5IHNhdmUgbm9uZSBmaWx0ZXIgZmVhdHVyZXMgdG8gZWRpdG9yXG4gICAgICBmZWF0dXJlczogZmVhdHVyZXMuZmlsdGVyKGYgPT4gIWdldEZpbHRlcklkSW5GZWF0dXJlKGYpKSxcbiAgICAgIG1vZGU6IGxhc3RGZWF0dXJlICYmIGxhc3RGZWF0dXJlLnByb3BlcnRpZXM/LmlzQ2xvc2VkID8gRURJVE9SX01PREVTLkVESVQgOiBzdGF0ZS5lZGl0b3IubW9kZVxuICAgIH1cbiAgfTtcblxuICAvLyBSZXRyaWV2ZSBleGlzdGluZyBmZWF0dXJlXG4gIGNvbnN0IHtzZWxlY3RlZEZlYXR1cmV9ID0gc3RhdGUuZWRpdG9yO1xuXG4gIC8vIElmIG5vIGZlYXR1cmUgaXMgc2VsZWN0ZWQgd2UgY2FuIHNpbXBseSByZXR1cm4gc2luY2Ugbm8gb3BlcmF0aW9uc1xuICBpZiAoIXNlbGVjdGVkRmVhdHVyZSkge1xuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfVxuXG4gIC8vIFRPRE86IGNoZWNrIGlmIHRoZSBmZWF0dXJlIGhhcyBjaGFuZ2VkXG4gIGNvbnN0IGZlYXR1cmUgPSBmZWF0dXJlcy5maW5kKGYgPT4gZi5pZCA9PT0gc2VsZWN0ZWRGZWF0dXJlLmlkKTtcblxuICAvLyBpZiBmZWF0dXJlIGlzIHBhcnQgb2YgYSBmaWx0ZXJcbiAgY29uc3QgZmlsdGVySWQgPSBmZWF0dXJlICYmIGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpO1xuICBpZiAoZmlsdGVySWQgJiYgZmVhdHVyZSkge1xuICAgIC8vIGFkZCBiYm94IGZvciBwb2x5Z29uIGZpbHRlciB0byBzcGVlZCB1cCBmaWx0ZXJpbmdcbiAgICBpZiAoZmVhdHVyZS5wcm9wZXJ0aWVzKSBmZWF0dXJlLnByb3BlcnRpZXMuYmJveCA9IGJib3goZmVhdHVyZSk7XG4gICAgY29uc3QgZmVhdHVyZVZhbHVlID0gZmVhdHVyZVRvRmlsdGVyVmFsdWUoZmVhdHVyZSwgZmlsdGVySWQpO1xuICAgIGNvbnN0IGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGZpbCA9PiBmaWwuaWQgPT09IGZpbHRlcklkKTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkeDogZmlsdGVySWR4LFxuICAgICAgcHJvcDogJ3ZhbHVlJyxcbiAgICAgIHZhbHVlOiBmZWF0dXJlVmFsdWVcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBTZXQgdGhlIGN1cnJlbnQgc2VsZWN0ZWQgZmVhdHVyZVxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3Qgc2V0U2VsZWN0ZWRGZWF0dXJlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZSwgc2VsZWN0aW9uQ29udGV4dH06IFZpc1N0YXRlQWN0aW9ucy5TZXRTZWxlY3RlZEZlYXR1cmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIC8vIGFkZCBiYm94IGZvciBwb2x5Z29uIGZpbHRlciB0byBzcGVlZCB1cCBmaWx0ZXJpbmdcbiAgaWYgKGZlYXR1cmUgJiYgZmVhdHVyZS5wcm9wZXJ0aWVzKSBmZWF0dXJlLnByb3BlcnRpZXMuYmJveCA9IGJib3goZmVhdHVyZSk7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBzZWxlY3RlZEZlYXR1cmU6IGZlYXR1cmUsXG4gICAgICBzZWxlY3Rpb25Db250ZXh0XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBEZWxldGUgZXhpc3RpbmcgZmVhdHVyZSBmcm9tIGZpbHRlcnNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxldGVGZWF0dXJlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZX06IFZpc1N0YXRlQWN0aW9ucy5EZWxldGVGZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWZlYXR1cmUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICAgIH1cbiAgfTtcblxuICBpZiAoZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSkpIHtcbiAgICBjb25zdCBmaWx0ZXJJZHggPSBuZXdTdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpKTtcblxuICAgIHJldHVybiBmaWx0ZXJJZHggPiAtMSA/IHJlbW92ZUZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtpZHg6IGZpbHRlcklkeH0pIDogbmV3U3RhdGU7XG4gIH1cblxuICAvLyBtb2RpZnkgZWRpdG9yIG9iamVjdFxuICBjb25zdCBuZXdFZGl0b3IgPSB7XG4gICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgIGZlYXR1cmVzOiBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMuZmlsdGVyKGYgPT4gZi5pZCAhPT0gZmVhdHVyZS5pZCksXG4gICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IG5ld0VkaXRvclxuICB9O1xufVxuXG4vKipcbiAqIFRvZ2dsZSBmZWF0dXJlIGFzIGxheWVyIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgcGF5bG9hZDogVmlzU3RhdGVBY3Rpb25zLlNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2xheWVyLCBmZWF0dXJlfSA9IHBheWxvYWQ7XG4gIGNvbnN0IGZpbHRlcklkID0gZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSk7XG5cbiAgLy8gbGV0IG5ld0ZpbHRlciA9IG51bGw7XG4gIGxldCBmaWx0ZXJJZHg7XG4gIGxldCBuZXdMYXllcklkID0gW2xheWVyLmlkXTtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIC8vIElmIHBvbHlnb24gZmlsdGVyIGFscmVhZHkgZXhpc3RzLCB3ZSBuZWVkIHRvIGZpbmQgb3V0IGlmIHRoZSBjdXJyZW50IGxheWVyIGlzIGFscmVhZHkgaW5jbHVkZWRcbiAgaWYgKGZpbHRlcklkKSB7XG4gICAgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG5cbiAgICBpZiAoIXN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSkge1xuICAgICAgLy8gd2hhdCBpZiBmaWx0ZXIgZG9lc24ndCBleGlzdD8uLi4gbm90IHBvc3NpYmxlLlxuICAgICAgLy8gYmVjYXVzZSBmZWF0dXJlcyBpbiB0aGUgZWRpdG9yIGlzIHBhc3NlZCBpbiBmcm9tIGZpbHRlcnMgYW5kIGVkaXRvcnMuXG4gICAgICAvLyBidXQgd2Ugd2lsbCBtb3ZlIHRoaXMgZmVhdHVyZSBiYWNrIHRvIGVkaXRvciBqdXN0IGluIGNhc2VcbiAgICAgIGNvbnN0IG5vbmVGaWx0ZXJGZWF0dXJlID0ge1xuICAgICAgICAuLi5mZWF0dXJlLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgLi4uZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICAgIGZpbHRlcklkOiBudWxsXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBlZGl0b3I6IHtcbiAgICAgICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAgICAgZmVhdHVyZXM6IFsuLi5zdGF0ZS5lZGl0b3IuZmVhdHVyZXMsIG5vbmVGaWx0ZXJGZWF0dXJlXSxcbiAgICAgICAgICBzZWxlY3RlZEZlYXR1cmU6IG5vbmVGaWx0ZXJGZWF0dXJlXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XTtcbiAgICBjb25zdCB7bGF5ZXJJZCA9IFtdfSA9IGZpbHRlcjtcbiAgICBjb25zdCBpc0xheWVySW5jbHVkZWQgPSBsYXllcklkLmluY2x1ZGVzKGxheWVyLmlkKTtcblxuICAgIG5ld0xheWVySWQgPSBpc0xheWVySW5jbHVkZWRcbiAgICAgID8gLy8gaWYgbGF5ZXIgaXMgaW5jbHVkZWQsIHJlbW92ZSBpdFxuICAgICAgICBsYXllcklkLmZpbHRlcihsID0+IGwgIT09IGxheWVyLmlkKVxuICAgICAgOiBbLi4ubGF5ZXJJZCwgbGF5ZXIuaWRdO1xuICB9IGVsc2Uge1xuICAgIC8vIGlmIHdlIGhhdmVuJ3QgY3JlYXRlIHRoZSBwb2x5Z29uIGZpbHRlciwgY3JlYXRlIGl0XG4gICAgY29uc3QgbmV3RmlsdGVyID0gZ2VuZXJhdGVQb2x5Z29uRmlsdGVyKFtdLCBmZWF0dXJlKTtcbiAgICBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmxlbmd0aDtcblxuICAgIC8vIGFkZCBmZWF0dXJlLCByZW1vdmUgZmVhdHVyZSBmcm9tIGVpZHRvclxuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBmaWx0ZXJzOiBbLi4uc3RhdGUuZmlsdGVycywgbmV3RmlsdGVyXSxcbiAgICAgIGVkaXRvcjoge1xuICAgICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAgIGZlYXR1cmVzOiBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMuZmlsdGVyKGYgPT4gZi5pZCAhPT0gZmVhdHVyZS5pZCksXG4gICAgICAgIHNlbGVjdGVkRmVhdHVyZTogbmV3RmlsdGVyLnZhbHVlXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgcHJvcDogJ2xheWVySWQnLFxuICAgIHZhbHVlOiBuZXdMYXllcklkXG4gIH0pO1xufVxuXG4vKipcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb3J0VGFibGVDb2x1bW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGNvbHVtbiwgbW9kZX06IFZpc1N0YXRlQWN0aW9ucy5Tb3J0VGFibGVDb2x1bW5VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IHNvcnRNb2RlID0gbW9kZTtcbiAgaWYgKCFzb3J0TW9kZSkge1xuICAgIGNvbnN0IGN1cnJlbnRNb2RlID0gZ2V0KGRhdGFzZXQsIFsnc29ydENvbHVtbicsIGNvbHVtbl0pO1xuICAgIC8vIEB0cy1pZ25vcmUgLSBzaG91bGQgYmUgZml4YWJsZSBpbiBhIFRTIGZpbGVcbiAgICBzb3J0TW9kZSA9IGN1cnJlbnRNb2RlXG4gICAgICA/IE9iamVjdC5rZXlzKFNPUlRfT1JERVIpLmZpbmQobSA9PiBtICE9PSBjdXJyZW50TW9kZSlcbiAgICAgIDogU09SVF9PUkRFUi5BU0NFTkRJTkc7XG4gIH1cblxuICBjb25zdCBzb3J0ZWQgPSBzb3J0RGF0YXNldEJ5Q29sdW1uKGRhdGFzZXQsIGNvbHVtbiwgc29ydE1vZGUpO1xuICByZXR1cm4gc2V0KFsnZGF0YXNldHMnLCBkYXRhSWRdLCBzb3J0ZWQsIHN0YXRlKTtcbn1cblxuLyoqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGluVGFibGVDb2x1bW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGNvbHVtbn06IFZpc1N0YXRlQWN0aW9ucy5QaW5UYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBuZXdEYXRhc2V0ID0gcGluVGFibGVDb2x1bW5zKGRhdGFzZXQsIGNvbHVtbik7XG5cbiAgcmV0dXJuIHNldChbJ2RhdGFzZXRzJywgZGF0YUlkXSwgbmV3RGF0YXNldCwgc3RhdGUpO1xufVxuXG4vKipcbiAqIENvcHkgY29sdW1uIGNvbnRlbnQgYXMgc3RyaW5nc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHlUYWJsZUNvbHVtblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgY29sdW1ufTogVmlzU3RhdGVBY3Rpb25zLkNvcHlUYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBmaWVsZElkeCA9IGRhdGFzZXQuZmllbGRzLmZpbmRJbmRleChmID0+IGYubmFtZSA9PT0gY29sdW1uKTtcbiAgaWYgKGZpZWxkSWR4IDwgMCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7dHlwZX0gPSBkYXRhc2V0LmZpZWxkc1tmaWVsZElkeF07XG4gIGNvbnN0IHRleHQgPSBkYXRhc2V0LmRhdGFDb250YWluZXJcbiAgICAubWFwKHJvdyA9PiBwYXJzZUZpZWxkVmFsdWUocm93LnZhbHVlQXQoZmllbGRJZHgpLCB0eXBlKSwgdHJ1ZSlcbiAgICAuam9pbignXFxuJyk7XG5cbiAgY29weSh0ZXh0KTtcblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogU2V0IGRpc3BsYXkgZm9ybWF0IGZyb20gY29sdW1ucyBmcm9tIHVzZXIgc2VsZWN0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0Q29sdW1uRGlzcGxheUZvcm1hdFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgZm9ybWF0c306IFZpc1N0YXRlQWN0aW9ucy5TZXRDb2x1bW5EaXNwbGF5Rm9ybWF0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBuZXdGaWVsZHMgPSBkYXRhc2V0LmZpZWxkcztcbiAgT2JqZWN0LmtleXMoZm9ybWF0cykuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgIGNvbnN0IGZpZWxkSWR4ID0gZGF0YXNldC5maWVsZHMuZmluZEluZGV4KGYgPT4gZi5uYW1lID09PSBjb2x1bW4pO1xuICAgIGlmIChmaWVsZElkeCA+PSAwKSB7XG4gICAgICBjb25zdCBkaXNwbGF5Rm9ybWF0ID0gZm9ybWF0c1tjb2x1bW5dO1xuICAgICAgY29uc3QgZmllbGQgPSBuZXdGaWVsZHNbZmllbGRJZHhdO1xuICAgICAgbmV3RmllbGRzID0gc3dhcF8obWVyZ2VfKHtkaXNwbGF5Rm9ybWF0fSkoZmllbGQpIGFzIHtpZDogc3RyaW5nfSkoXG4gICAgICAgIG5ld0ZpZWxkcyBhcyB7aWQ6IHN0cmluZ31bXVxuICAgICAgKSBhcyBGaWVsZFtdO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgbmV3RGF0YXNldCA9IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7ZmllbGRzOiBuZXdGaWVsZHMgYXMgRmllbGRbXX0pO1xuICBsZXQgbmV3U3RhdGUgPSBwaWNrXygnZGF0YXNldHMnKShtZXJnZV8oe1tkYXRhSWRdOiBuZXdEYXRhc2V0fSkpKHN0YXRlKTtcblxuICAvLyB1cGRhdGUgY29sb3JGaWVsZCBkaXNwbGF5Rm9ybWF0XG4gIG5ld1N0YXRlID0ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGxheWVyczogbmV3U3RhdGUubGF5ZXJzLm1hcChsYXllciA9PlxuICAgICAgbGF5ZXIuY29uZmlnPy5jb2xvckZpZWxkPy5uYW1lICYmIGxheWVyLmNvbmZpZy5jb2xvckZpZWxkLm5hbWUgaW4gZm9ybWF0c1xuICAgICAgICA/IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICAgIGNvbG9yRmllbGQ6IHtcbiAgICAgICAgICAgICAgLi4ubGF5ZXIuY29uZmlnLmNvbG9yRmllbGQsXG4gICAgICAgICAgICAgIGRpc3BsYXlGb3JtYXQ6IGZvcm1hdHNbbGF5ZXIuY29uZmlnLmNvbG9yRmllbGQubmFtZV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICA6IGxheWVyXG4gICAgKVxuICB9O1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZWRpdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUVkaXRvclZpc2liaWxpdHlVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICB2aXNpYmxlOiAhc3RhdGUuZWRpdG9yLnZpc2libGVcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR4LCBjb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgQ29uc29sZS5lcnJvcihgZmlsdGVycy4ke2lkeH0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChvbGRGaWx0ZXIudHlwZSAhPT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSkge1xuICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICBgc2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZyBjYW4gb25seSBiZSBjYWxsZWQgdG8gdXBkYXRlIGEgdGltZSBmaWx0ZXIuIGNoZWNrIGZpbHRlci50eXBlID09PSAndGltZVJhbmdlJ2BcbiAgICApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZXMgPSBjaGVja1RpbWVDb25maWdBcmdzKGNvbmZpZyk7XG5cbiAgcmV0dXJuIHBpY2tfKCdmaWx0ZXJzJykoc3dhcF8obWVyZ2VfKHVwZGF0ZXMpKG9sZEZpbHRlcikpKShzdGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrVGltZUNvbmZpZ0FyZ3MoY29uZmlnKSB7XG4gIGNvbnN0IGFsbG93ZWQgPSBbJ3RpbWVGb3JtYXQnLCAndGltZXpvbmUnXTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGNvbmZpZykucmVkdWNlKChhY2N1LCBwcm9wKSA9PiB7XG4gICAgaWYgKCFhbGxvd2VkLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICBDb25zb2xlLmVycm9yKFxuICAgICAgICBgc2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnIHRha2VzIHRpbWVGb3JtYXQgYW5kL29yIHRpbWV6b25lIGFzIG9wdGlvbnMsIGZvdW5kICR7cHJvcH1gXG4gICAgICApO1xuICAgICAgcmV0dXJuIGFjY3U7XG4gICAgfVxuXG4gICAgLy8gaGVyZSB3ZSBhcmUgTk9UIGNoZWNraW5nIGlmIHRpbWV6b25lIG9yIHRpbWVGb3JtYXQgaW5wdXQgaXMgdmFsaWRcbiAgICBhY2N1W3Byb3BdID0gY29uZmlnW3Byb3BdO1xuICAgIHJldHVybiBhY2N1O1xuICB9LCB7fSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGVkaXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7Y29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLlNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWNvbmZpZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB1cGRhdGVzID0gY2hlY2tUaW1lQ29uZmlnQXJncyhjb25maWcpO1xuICByZXR1cm4gcGlja18oJ2FuaW1hdGlvbkNvbmZpZycpKG1lcmdlXyh1cGRhdGVzKSkoc3RhdGUpO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBlZGl0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZVVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZUFjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtldmVudCwgbGF5ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCB7aWQ6IGRlY2tnbExheWVySWQsIGNvdW50fSA9IGV2ZW50O1xuICBpZiAoIWxheWVyKSB7XG4gICAgQ29uc29sZS53YXJuKGBsYXllckZpbHRlcmVkSXRlbXMgbGF5ZXIgZG9lc250IGV4aXN0c2ApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAobGF5ZXIuZmlsdGVyZWRJdGVtQ291bnQ/LltkZWNrZ2xMYXllcklkXSA9PT0gY291bnQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsYXllci5maWx0ZXJlZEl0ZW1Db3VudCA9IHtcbiAgICAuLi5sYXllci5maWx0ZXJlZEl0ZW1Db3VudCxcbiAgICBbZGVja2dsTGF5ZXJJZF06IGNvdW50XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN3YXBfKGxheWVyKShzdGF0ZS5sYXllcnMpXG4gIH07XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtc3RhdGVtZW50c1xuZXhwb3J0IGZ1bmN0aW9uIHN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2lkeDogZmlsdGVySWR4LCBlbmFibGUgPSBmYWxzZX0gPSBhY3Rpb247XG5cbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgbGV0IG5ld0ZpbHRlciA9IGZpbHRlcjtcblxuICAvLyBpZiB3ZSBlbmFibGUgc3luYyB3ZSBhcmUgZ29pbmcgdG8gbWVyZ2UgZmlsdGVyIGFuZCBhbmltYXRpb25Db25maWcgZG9tYWlucyBhbmQgc3RvcmUgaW50byBmaWx0ZXIuZG9tYWluXG4gIGlmIChlbmFibGUpIHtcbiAgICBjb25zdCBhbmltYXRhYmxlTGF5ZXJzID0gZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMobmV3U3RhdGUubGF5ZXJzKTtcbiAgICAvLyBpZiBubyBhbmltYXRhYmxlTGF5ZXJzIGFyZSBwcmVzZW50IHdlIHNpbXBseSByZXR1cm5cbiAgICBpZiAoIWFuaW1hdGFibGVMYXllcnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbmV3U3RhdGU7XG4gICAgfVxuXG4gICAgY29uc3QgaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyA9IGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMoYW5pbWF0YWJsZUxheWVycyk7XG4gICAgY29uc3QgaGFzSW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVyID0gQm9vbGVhbihpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLmxlbmd0aCk7XG5cbiAgICBjb25zdCBuZXdGaWx0ZXJEb21haW4gPSBtZXJnZVRpbWVEb21haW5zKFtmaWx0ZXIuZG9tYWluLCBuZXdTdGF0ZS5hbmltYXRpb25Db25maWcuZG9tYWluXSk7XG5cbiAgICAvLyB3ZSBvbmx5IHVwZGF0ZSBhbmltYXRpb25XaW5kb3cgaWYgd2UgaGF2ZSBpbnRlcnZhbCBiYXNlZCBhbmltYXRpb24gbGF5ZXJzIHdpdGggZGVmaW5lZCBpbnRlcnZhbHMgYW5kIHRoZSBjdXJyZW50IGZpbHRlciBhbmltYXRpb24gd2luZG93IGlzIG5vdCBpbnRlcnZhbFxuICAgIGlmIChoYXNJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXIpIHtcbiAgICAgIGlmIChmaWx0ZXIuYW5pbWF0aW9uV2luZG93ICE9PSBBTklNQVRJT05fV0lORE9XLmludGVydmFsKSB7XG4gICAgICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgICAgIGlkOiBmaWx0ZXIuaWQsXG4gICAgICAgICAgYW5pbWF0aW9uV2luZG93OiBBTklNQVRJT05fV0lORE9XLmludGVydmFsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gICAgICAvLyBhZGp1c3QgdGltZSBmaWx0ZXIgaW50ZXJ2YWxcbiAgICAgIG5ld0ZpbHRlciA9IGFkanVzdFRpbWVGaWx0ZXJJbnRlcnZhbChuZXdTdGF0ZSwgbmV3RmlsdGVyKTtcblxuICAgICAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgICAgIG5ld1N0YXRlID0ge1xuICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gICAgICB9O1xuICAgIH1cblxuICAgIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgICAvLyBhZGp1c3QgdmFsdWUgYmFzZWQgb24gbmV3IGRvbWFpblxuICAgIGNvbnN0IG5ld0ZpbHRlclZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihcbiAgICAgIG5ld0ZpbHRlci5hbmltYXRpb25XaW5kb3cgPT09IEFOSU1BVElPTl9XSU5ET1cuaW50ZXJ2YWxcbiAgICAgICAgPyBbbmV3RmlsdGVyRG9tYWluWzBdLCBuZXdGaWx0ZXJEb21haW5bMF1dXG4gICAgICAgIDogbmV3RmlsdGVyRG9tYWluLFxuICAgICAgey4uLm5ld0ZpbHRlciwgZG9tYWluOiBuZXdGaWx0ZXJEb21haW59XG4gICAgKTtcblxuICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgICBwcm9wOiAndmFsdWUnLFxuICAgICAgdmFsdWU6IG5ld0ZpbHRlclZhbHVlXG4gICAgfSk7XG5cbiAgICBuZXdGaWx0ZXIgPSB7XG4gICAgICAuLi4obmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlciksXG4gICAgICBzeW5jZWRXaXRoTGF5ZXJUaW1lbGluZTogdHJ1ZVxuICAgIH07XG5cbiAgICAvLyByZXBsYWNlIGZpbHRlciBpbiBzdGF0ZSB3aXRoIG5ld0ZpbHRlclxuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5ld0ZpbHRlcikobmV3U3RhdGUuZmlsdGVycylcbiAgICB9O1xuXG4gICAgbmV3U3RhdGUgPSBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWQ6IG5ld0ZpbHRlci5pZCxcbiAgICAgIG1vZGU6IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlcilcbiAgICB9KTtcblxuICAgIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgICAvLyBzZXQgdGhlIGFuaW1hdGlvbiBjb25maWcgdmFsdWUgdG8gbWF0Y2ggZmlsdGVyIHZhbHVlXG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIHZhbHVlOiBuZXdGaWx0ZXIudmFsdWVbbmV3RmlsdGVyLnN5bmNUaW1lbGluZU1vZGVdXG4gICAgfSk7XG4gIH1cblxuICAvLyBzZXQgZG9tYWluIGFuZCBzdGVwXG4gIG5ld0ZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgc3luY2VkV2l0aExheWVyVGltZWxpbmU6IGZhbHNlXG4gIH07XG5cbiAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgbmV3U3RhdGUgPSB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgLy8gcmVzZXQgc3luYyB0aW1lbGluZSBtb2RlXG4gIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZDogbmV3RmlsdGVyLmlkLFxuICAgIG1vZGU6IFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kXG4gIH0pO1xuXG4gIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgLy8gcmVzZXQgZmlsdGVyIHZhbHVlXG4gIGNvbnN0IG5ld0ZpbHRlclZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihuZXdGaWx0ZXIuZG9tYWluLCBuZXdGaWx0ZXIpO1xuXG4gIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICd2YWx1ZScsXG4gICAgdmFsdWU6IG5ld0ZpbHRlclZhbHVlXG4gIH0pO1xuXG4gIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZDogbmV3RmlsdGVyLmlkLFxuICAgIG1vZGU6IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlcilcbiAgfSk7XG5cbiAgLy8gcmVzZXQgYW5pbWF0aW9uIGNvbmZpZyBjdXJyZW50IHRpbWUgdG9cbiAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICB2YWx1ZTogbmV3U3RhdGUuYW5pbWF0aW9uQ29uZmlnLmRvbWFpbj8uWzBdID8/IG51bGxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuc2V0VGltZUZpbHRlclN5bmNUaW1lbGluZU1vZGVBY3Rpb25cbikge1xuICBjb25zdCB7aWQ6IGZpbHRlcklkLCBtb2RlOiBzeW5jVGltZWxpbmVNb2RlfSA9IGFjdGlvbjtcblxuICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKGZpbHRlcklkeCA9PT0gLTEpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gIGlmICghdmFsaWRhdGVTeW5jQW5pbWF0aW9uTW9kZShmaWx0ZXIsIHN5bmNUaW1lbGluZU1vZGUpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICBzeW5jVGltZWxpbmVNb2RlXG4gIH07XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKHN0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgcmV0dXJuIGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXIobmV3U3RhdGUsIGZpbHRlcklkeCk7XG59XG5cbmZ1bmN0aW9uIGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgZmlsdGVySWR4OiBudW1iZXIpOiBTIHtcbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdO1xuICBpZiAoKGZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXIpLnN5bmNlZFdpdGhMYXllclRpbWVsaW5lKSB7XG4gICAgY29uc3QgdGltZWxpbmVWYWx1ZSA9IGdldFRpbWVsaW5lVmFsdWVGcm9tRmlsdGVyKGZpbHRlcik7XG4gICAgY29uc3QgdmFsdWUgPSBzdGF0ZS5hbmltYXRpb25Db25maWcudGltZVN0ZXBzXG4gICAgICA/IHNuYXBUb01hcmtzKHRpbWVsaW5lVmFsdWUsIHN0YXRlLmFuaW1hdGlvbkNvbmZpZy50aW1lU3RlcHMpXG4gICAgICA6IHRpbWVsaW5lVmFsdWU7XG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIoc3RhdGUsIHt2YWx1ZX0pO1xuICB9XG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZnVuY3Rpb24gZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIoZmlsdGVyKSB7XG4gIHJldHVybiBmaWx0ZXIudmFsdWVbZmlsdGVyLnN5bmNUaW1lbGluZU1vZGVdO1xufVxuXG5mdW5jdGlvbiBnZXRTeW5jQW5pbWF0aW9uTW9kZShmaWx0ZXI6IFRpbWVSYW5nZUZpbHRlcikge1xuICBpZiAoZmlsdGVyLmFuaW1hdGlvbldpbmRvdyA9PT0gQU5JTUFUSU9OX1dJTkRPVy5mcmVlKSB7XG4gICAgcmV0dXJuIGZpbHRlci5zeW5jVGltZWxpbmVNb2RlID8/IFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kO1xuICB9XG5cbiAgcmV0dXJuIFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN5bmNBbmltYXRpb25Nb2RlKGZpbHRlcjogVGltZVJhbmdlRmlsdGVyLCBuZXdNb2RlOiBudW1iZXIpIHtcbiAgcmV0dXJuICEoXG4gICAgZmlsdGVyLmFuaW1hdGlvbldpbmRvdyAhPT0gQU5JTUFUSU9OX1dJTkRPVy5mcmVlICYmIG5ld01vZGUgPT09IFNZTkNfVElNRUxJTkVfTU9ERVMuc3RhcnRcbiAgKTtcbn1cblxuZnVuY3Rpb24gYWRqdXN0VGltZUZpbHRlckludGVydmFsKHN0YXRlLCBmaWx0ZXIpIHtcbiAgY29uc3QgaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyA9IGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMoc3RhdGUubGF5ZXJzKTtcblxuICBsZXQgaW50ZXJ2YWw6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBpZiAoaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycy5sZW5ndGggPiAwKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IGludGVydmFsSW5kZXggPSBpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLnJlZHVjZSgoY3VycmVudEluZGV4LCBsKSA9PiB7XG4gICAgICBpZiAobC5tZXRhLnRhcmdldFRpbWVJbnRlcnZhbCkge1xuICAgICAgICBjb25zdCBuZXdJbmRleCA9IFRJTUVfSU5URVJWQUxTX09SREVSRUQuZmluZEluZGV4KGkgPT4gaSA9PT0gbC5tZXRhLnRhcmdldFRpbWVJbnRlcnZhbCk7XG4gICAgICAgIHJldHVybiBuZXdJbmRleCA+IC0xICYmIG5ld0luZGV4IDwgY3VycmVudEluZGV4ID8gbmV3SW5kZXggOiBjdXJyZW50SW5kZXg7XG4gICAgICB9XG4gICAgfSwgVElNRV9JTlRFUlZBTFNfT1JERVJFRC5sZW5ndGggLSAxKTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgaGV4VGlsZUludGVydmFsID0gVElNRV9JTlRFUlZBTFNfT1JERVJFRFtpbnRlcnZhbEluZGV4XTtcbiAgICBpbnRlcnZhbCA9IExheWVyVG9GaWx0ZXJUaW1lSW50ZXJ2YWxbaGV4VGlsZUludGVydmFsXTtcbiAgfVxuXG4gIGlmICghaW50ZXJ2YWwpIHtcbiAgICByZXR1cm4gZmlsdGVyO1xuICB9XG5cbiAgLy8gYWRqdXN0IGZpbHRlclxuICBjb25zdCB0aW1lRm9ybWF0ID0gZ2V0RGVmYXVsdFRpbWVGb3JtYXQoaW50ZXJ2YWwpO1xuICBjb25zdCB1cGRhdGVkUGxvdFR5cGUgPSB7Li4uZmlsdGVyLnBsb3RUeXBlLCBpbnRlcnZhbCwgdGltZUZvcm1hdH07XG4gIGNvbnN0IG5ld0ZpbHRlciA9IHVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZShmaWx0ZXIsIHVwZGF0ZWRQbG90VHlwZSwgc3RhdGUuZGF0YXNldHMpO1xuICByZXR1cm4gYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyhzdGF0ZSwgbmV3RmlsdGVyKTtcbn1cblxuLy8gRmluZCBkYXRhSWQgZnJvbSBhIHNhdmVkIHZpc1N0YXRlIHByb3BlcnR5OlxuLy8gbGF5ZXJzLCBmaWx0ZXJzLCBpbnRlcmFjdGlvbnMsIGxheWVyQmxlbmRpbmcsIG92ZXJsYXlCbGVuZGluZywgc3BsaXRNYXBzLCBhbmltYXRpb25Db25maWcsIGVkaXRvclxuLy8gcmVwbGFjZSBpdCB3aXRoIGFub3RoZXIgZGF0YUlkXG5mdW5jdGlvbiBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHModmFsdWU6IGFueSwgZGF0YUlkOiBzdHJpbmcsIGRhdGFJZFRvUmVwbGFjZTogc3RyaW5nKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIC8vIGZvciBsYXllcnMsIGZpbHRlcnMsIGNhbGwgZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIG9uIGVhY2ggaXRlbSBpbiBhcnJheVxuICAgIGNvbnN0IHJlcGxhY2VkID0gdmFsdWVcbiAgICAgIC5tYXAodiA9PiBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHModiwgZGF0YUlkLCBkYXRhSWRUb1JlcGxhY2UpKVxuICAgICAgLmZpbHRlcihkID0+IGQpO1xuICAgIHJldHVybiByZXBsYWNlZC5sZW5ndGggPyByZXBsYWNlZCA6IG51bGw7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZS5kYXRhSWQgPT09ICdzdHJpbmcnICYmIHZhbHVlLmRhdGFJZCA9PT0gZGF0YUlkKSB7XG4gICAgLy8gb3RoZXJzXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgZGF0YUlkOiBkYXRhSWRUb1JlcGxhY2VcbiAgICB9O1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUuZGF0YUlkKSAmJiB2YWx1ZS5kYXRhSWQuaW5jbHVkZXMoZGF0YUlkKSkge1xuICAgIC8vIGZpbHRlclxuICAgIHJldHVybiB7XG4gICAgICAuLi52YWx1ZSxcbiAgICAgIGRhdGFJZDogdmFsdWUuZGF0YUlkLm1hcChkID0+IChkID09PSBkYXRhSWQgPyBkYXRhSWRUb1JlcGxhY2UgOiBkKSlcbiAgICB9O1xuICB9IGVsc2UgaWYgKHZhbHVlLmNvbmZpZz8uZGF0YUlkICYmIHZhbHVlLmNvbmZpZz8uZGF0YUlkID09PSBkYXRhSWQpIHtcbiAgICAvLyBsYXllclxuICAgIHJldHVybiB7XG4gICAgICAuLi52YWx1ZSxcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICAuLi52YWx1ZS5jb25maWcsXG4gICAgICAgIGRhdGFJZDogZGF0YUlkVG9SZXBsYWNlXG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlIGlmIChpc09iamVjdCh2YWx1ZSkgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBkYXRhSWQpKSB7XG4gICAgLy8gZm9yIHZhbHVlIHNhdmVkIGFzIHtbZGF0YUlkXTogey4uLn19XG4gICAgcmV0dXJuIHtbZGF0YUlkVG9SZXBsYWNlXTogdmFsdWVbZGF0YUlkXX07XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLy8gRmluZCBkYXRhc2V0SWRzIGRlcml2ZWQgYSBzYXZlZCB2aXNTdGF0ZSBQcm9wZXJ0eTtcbmZ1bmN0aW9uIGZpbmRDaGlsZERhdGFzZXRJZHModmFsdWUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gZm9yIGxheWVycywgZmlsdGVycywgY2FsbCBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMgb24gZWFjaCBpdGVtIGluIGFycmF5XG4gICAgY29uc3QgY2hpbGREYXRhSWRzID0gdmFsdWUubWFwKGZpbmRDaGlsZERhdGFzZXRJZHMpLmZpbHRlcihkID0+IGQpO1xuICAgIHJldHVybiBjaGlsZERhdGFJZHMubGVuZ3RoID8gY2hpbGREYXRhSWRzIDogbnVsbDtcbiAgfVxuXG4gIC8vIGNoaWxkIGRhdGEgaWQgdXN1YWxseSBzdG9yZXMgaW4gdGhlIGRlcml2ZWQgZGF0YXNldCBpbmZvXG4gIHJldHVybiB2YWx1ZT8ubmV3RGF0YXNldD8uaW5mby5pZCB8fCBudWxsO1xufVxuXG4vLyBtb3ZlZCB1bm1lcmdlZCBsYXllcnMsIGZpbHRlcnMsIGludGVyYWN0aW9uc1xuZnVuY3Rpb24gbW92ZVZhbHVlVG9CZU1lcmdlZChzdGF0ZSwgcHJvcFZhbHVlcywge3Byb3AsIHRvTWVyZ2VQcm9wLCBzYXZlVW5tZXJnZWR9KSB7XG4gIC8vIHJlbW92ZSBwcm9wIHZhbHVlIGZyb20gc3RhdGVcbiAgLy8gVE9ETzogc2hvdWxkIHdlIGFkZCByZW1vdmUgdXBkYXRlciB0byBtZXJnZXIgYXMgd2VsbD9cbiAgaWYgKCFwcm9wVmFsdWVzKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHN0YXRlUmVtb3ZlZCA9XG4gICAgcHJvcCA9PT0gJ2xheWVycydcbiAgICAgID8gcHJvcFZhbHVlcy5yZWR1Y2UoKGFjY3UsIHByb3BWYWx1ZSkgPT4gcmVtb3ZlTGF5ZXJVcGRhdGVyKGFjY3UsIHtpZDogcHJvcFZhbHVlLmlkfSksIHN0YXRlKVxuICAgICAgOiBBcnJheS5pc0FycmF5KHN0YXRlW3Byb3BdKVxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgW3Byb3BdOiBzdGF0ZVtwcm9wXS5maWx0ZXIocCA9PiAhcHJvcFZhbHVlcy5maW5kKHByb3BWYWx1ZSA9PiBwLmlkID09PSBwcm9wVmFsdWUuaWQpKVxuICAgICAgICB9XG4gICAgICA6IC8vIGlmIG5vdCBhcnJheSwgd2Ugd29uJ3QgcmVtb3ZlIGl0LCByZW1vdmUgZGF0YXNldCBzaG91bGQgaGFuZGxlIGl0XG4gICAgICAgIHN0YXRlO1xuXG4gIC8vIG1vdmUgdG8gc3RhdGVUb0JlTWVyZ2VkXG4gIGNvbnN0IHRvQmVNZXJnZWQgPSB7XG4gICAgW3RvTWVyZ2VQcm9wXTogc2F2ZVVubWVyZ2VkXG4gICAgICA/IC8vIGNhbGwgbWVyZ2Ugc2F2ZVVubWVyZ2VkIG1ldGhvZFxuICAgICAgICBzYXZlVW5tZXJnZWQoc3RhdGVSZW1vdmVkLCBwcm9wVmFsdWVzKVxuICAgICAgOiAvLyBpZiB0b01lcmdlUHJvcCBpcyBhcmFheSwgYXBwZW5kIHRvIGl0XG4gICAgICBBcnJheS5pc0FycmF5KHN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0pXG4gICAgICA/IFsuLi5zdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdLCAuLi5wcm9wVmFsdWVzXVxuICAgICAgOiAvLyBzYXZlIHByb3BWYWx1ZXMgdG8gdG9NZXJnZVxuICAgICAgaXNPYmplY3Qoc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSlcbiAgICAgID8ge1xuICAgICAgICAgIC4uLnN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0sXG4gICAgICAgICAgLi4ucHJvcFZhbHVlc1xuICAgICAgICB9XG4gICAgICA6IHN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlUmVtb3ZlZCxcbiAgICAuLi50b0JlTWVyZ2VkXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VEYXRhc2V0QW5kRGVwczxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGRhdGFJZFRvVXNlOiBzdHJpbmdcbik6IFQge1xuICByZXR1cm4gY29tcG9zZV88VD4oW1xuICAgIGFwcGx5XyhyZXBsYWNlRGF0YXNldERlcHNJblN0YXRlLCB7ZGF0YUlkLCBkYXRhSWRUb1VzZX0pLFxuICAgIGFwcGx5XyhyZW1vdmVEYXRhc2V0VXBkYXRlciwge2RhdGFJZH0pXG4gIF0pKHN0YXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVTdGF0ZUZvckRhdGFzZXRSZXBsYWNlPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YUlkVG9Vc2U6IHN0cmluZ1xuKTogVCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKHN0YXRlLCBzdGF0ZS5zY2hlbWEpO1xuICBjb25zdCBuZXh0U3RhdGUgPSByZXBsYWNlRGF0YXNldEFuZERlcHMoc3RhdGUsIGRhdGFJZCwgZGF0YUlkVG9Vc2UpO1xuICAvLyBtYWtlIGEgY29weSBvZiBsYXllck9yZGVyLCBiZWNhdXNlIGxheWVyIGlkIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGl0IGJ5IGNhbGxpbmcgcmVtb3ZlTGF5ZXJVcGRhdGVyXG4gIGNvbnN0IHByZXNlcnZlTGF5ZXJPcmRlciA9IFsuLi5zdGF0ZS5sYXllck9yZGVyXTtcblxuICAvLyBwcmVzZXJ2ZSBkYXRhc2V0IG9yZGVyXG4gIG5leHRTdGF0ZS5wcmVzZXJ2ZURhdGFzZXRPcmRlciA9IE9iamVjdC5rZXlzKHN0YXRlLmRhdGFzZXRzKS5tYXAoZCA9PlxuICAgIGQgPT09IGRhdGFJZCA/IGRhdGFJZFRvVXNlIDogZFxuICApO1xuXG4gIC8vIHByZXNlcnZlTGF5ZXJPcmRlclxuICBpZiAobmV4dFN0YXRlLmxheWVyVG9CZU1lcmdlZD8ubGVuZ3RoKSB7XG4gICAgLy8gY29weSBzcGxpdCBtYXBzIHRvIGJlIG1lcmdlZCwgYmVjYXVzZSBpdCB3aWxsIGJlIHJlc2V0IGluIHJlbW92ZSBsYXllclxuICAgIG5leHRTdGF0ZS5zcGxpdE1hcHNUb0JlTWVyZ2VkID0gc2VyaWFsaXplZFN0YXRlPy5zcGxpdE1hcHMgPz8gW107XG4gICAgbmV4dFN0YXRlLmxheWVyT3JkZXIgPSBbLi4ucHJlc2VydmVMYXllck9yZGVyXTtcbiAgfVxuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlRGF0YXNldERlcHNJblN0YXRlPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICB7ZGF0YUlkLCBkYXRhSWRUb1VzZX06IHtkYXRhSWQ6IHN0cmluZzsgZGF0YUlkVG9Vc2U6IHN0cmluZ31cbik6IFQge1xuICBjb25zdCBzZXJpYWxpemVkU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZShzdGF0ZSwgc3RhdGUuc2NoZW1hKTtcblxuICBjb25zdCBuZXh0U3RhdGUgPSBzdGF0ZS5tZXJnZXJzLnJlZHVjZShcbiAgICAoXG4gICAgICBhY2N1U3RhdGUsXG4gICAgICB7cHJvcCwgdG9NZXJnZVByb3AsIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzLCBnZXRDaGlsZERhdGFzZXRJZHMsIHNhdmVVbm1lcmdlZCwgcHJlc2VydmVPcmRlcn1cbiAgICApID0+IHtcbiAgICAgIC8vIGdldCBkYXRhc2V0IGlkcyB0aGF0IGFyZSBkZXBlbmRzIG9uIHRoaXMgZGF0YXNldFxuICAgICAgY29uc3QgcHJvcHMgPSB0b0FycmF5KHByb3ApO1xuICAgICAgY29uc3QgdG9NZXJnZVByb3BzID0gdG9BcnJheSh0b01lcmdlUHJvcCk7XG4gICAgICBjb25zdCBzYXZlZFByb3BzID0gc2VyaWFsaXplZFN0YXRlID8gcHJvcHMubWFwKHAgPT4gc2VyaWFsaXplZFN0YXRlW3BdKSA6IFtdO1xuXG4gICAgICBsZXQgcmVwbGFjZWRTdGF0ZSA9IGFjY3VTdGF0ZTtcbiAgICAgIHNhdmVkUHJvcHMuZm9yRWFjaCgocHJvcFZhbHVlLCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lcmdlck9wdGlvbnMgPSB7XG4gICAgICAgICAgcHJvcDogcHJvcHNbaV0sXG4gICAgICAgICAgdG9NZXJnZVByb3A6IHRvTWVyZ2VQcm9wc1tpXSxcbiAgICAgICAgICBnZXRDaGlsZERhdGFzZXRJZHMsXG4gICAgICAgICAgc2F2ZVVubWVyZ2VkXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVwbGFjZWRJdGVtID1cbiAgICAgICAgICByZXBsYWNlUGFyZW50RGF0YXNldElkcz8uKHByb3BWYWx1ZSwgZGF0YUlkLCBkYXRhSWRUb1VzZSkgfHxcbiAgICAgICAgICBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMocHJvcFZhbHVlLCBkYXRhSWQsIGRhdGFJZFRvVXNlKTtcbiAgICAgICAgcmVwbGFjZWRTdGF0ZSA9IHJlcGxhY2VkSXRlbVxuICAgICAgICAgID8gcmVwbGFjZVByb3BWYWx1ZUluU3RhdGUocmVwbGFjZWRTdGF0ZSwgcmVwbGFjZWRJdGVtLCBtZXJnZXJPcHRpb25zKVxuICAgICAgICAgIDogcmVwbGFjZWRTdGF0ZTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgbWVyZ2VyT3B0aW9ucy50b01lcmdlUHJvcCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgcmVwbGFjZWRTdGF0ZVttZXJnZXJPcHRpb25zLnRvTWVyZ2VQcm9wXT8ubGVuZ3RoICYmXG4gICAgICAgICAgcHJlc2VydmVPcmRlclxuICAgICAgICApIHtcbiAgICAgICAgICByZXBsYWNlZFN0YXRlW3ByZXNlcnZlT3JkZXJdID0gcHJvcFZhbHVlLm1hcChpdGVtID0+IGl0ZW0uaWQpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHJlcGxhY2VkU3RhdGU7XG4gICAgfSxcbiAgICBzdGF0ZVxuICApO1xuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VQcm9wVmFsdWVJblN0YXRlKFxuICBzdGF0ZSxcbiAgcmVwbGFjZWRJdGVtLFxuICB7cHJvcCwgdG9NZXJnZVByb3AsIGdldENoaWxkRGF0YXNldElkcywgc2F2ZVVubWVyZ2VkfVxuKSB7XG4gIC8vIHByb3AgaXMgZGVwZW5kcyBvbiB0aGUgZGF0YXNldCB0byBiZSByZXBsYWNlZFxuICAvLyByZW1vdmUgcHJvcCBmcm9tIHN0YXRlLCBhbmQgbW92ZSBpdCB0byB0b0JlTWVyZ2VkXG4gIGxldCBuZXh0U3RhdGUgPSBtb3ZlVmFsdWVUb0JlTWVyZ2VkKHN0YXRlLCByZXBsYWNlZEl0ZW0sIHtwcm9wLCB0b01lcmdlUHJvcCwgc2F2ZVVubWVyZ2VkfSk7XG4gIGNvbnN0IGNoaWxkRGF0YUlkcyA9IGdldENoaWxkRGF0YXNldElkcz8uKHJlcGxhY2VkSXRlbSkgfHwgZmluZENoaWxkRGF0YXNldElkcyhyZXBsYWNlZEl0ZW0pO1xuXG4gIGlmIChjaGlsZERhdGFJZHMpIHtcbiAgICBuZXh0U3RhdGUgPSB0b0FycmF5KGNoaWxkRGF0YUlkcykucmVkdWNlKChhY2N1LCBjaGlsZERhdGFJZCkgPT4ge1xuICAgICAgLy8gc2hvdWxkbid0IG5lZWQgdG8gY2hhbmdlIGNoaWxkIGRhdGFzZXQgaWQsXG4gICAgICAvLyBidXQgc3RpbGwgbmVlZCB0byBtb3ZlIG91dCBvZiBzdGF0ZSBhbmQgbWVyZ2UgYmFjayBpblxuICAgICAgcmV0dXJuIHJlcGxhY2VEYXRhc2V0QW5kRGVwcyhhY2N1LCBjaGlsZERhdGFJZCwgY2hpbGREYXRhSWQpO1xuICAgIH0sIG5leHRTdGF0ZSk7XG4gIH1cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxLQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxnQkFBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsVUFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsT0FBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksT0FBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUssUUFBQSxHQUFBTixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU0sUUFBQSxHQUFBUCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU8sUUFBQSxHQUFBUixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVEsUUFBQSxHQUFBVCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVMsUUFBQSxHQUFBVixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVUsTUFBQSxHQUFBQyx1QkFBQSxDQUFBWCxPQUFBO0FBRUEsSUFBQVksT0FBQSxHQUFBWixPQUFBO0FBUUEsSUFBQWEsUUFBQSxHQUFBYixPQUFBO0FBeUJBLElBQUFjLE1BQUEsR0FBQWQsT0FBQTtBQTJCQSxJQUFBZSxZQUFBLEdBQUFmLE9BQUE7QUFFQSxJQUFBZ0IsVUFBQSxHQUFBaEIsT0FBQTtBQWlCQSxJQUFBaUIsT0FBQSxHQUFBakIsT0FBQTtBQUNBLElBQUFrQixnQkFBQSxHQUFBbEIsT0FBQTtBQVNBLElBQUFtQixjQUFBLEdBQUFuQixPQUFBO0FBQ0EsSUFBQW9CLGVBQUEsR0FBQXBCLE9BQUE7QUFVQSxJQUFBcUIsUUFBQSxHQUFBdEIsc0JBQUEsQ0FBQUMsT0FBQTtBQWFBLElBQUFzQixNQUFBLEdBQUF0QixPQUFBO0FBU0EsSUFBQXVCLGlCQUFBLEdBQUF2QixPQUFBO0FBQ0EsSUFBQXdCLFdBQUEsR0FBQXhCLE9BQUE7QUFnQkEsSUFBQXlCLFFBQUEsR0FBQXpCLE9BQUE7QUFHQSxJQUFBMEIsVUFBQSxHQUFBMUIsT0FBQTtBQUEyQyxJQUFBMkIsU0FBQTtFQUFBQyxVQUFBO0FBQUEsU0FBQUMseUJBQUFDLENBQUEsNkJBQUFDLE9BQUEsbUJBQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEseUJBQUFDLENBQUEsV0FBQUEsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsS0FBQUYsQ0FBQTtBQUFBLFNBQUFuQix3QkFBQW1CLENBQUEsRUFBQUUsQ0FBQSxTQUFBQSxDQUFBLElBQUFGLENBQUEsSUFBQUEsQ0FBQSxDQUFBSSxVQUFBLFNBQUFKLENBQUEsZUFBQUEsQ0FBQSxnQkFBQUssT0FBQSxDQUFBTCxDQUFBLDBCQUFBQSxDQUFBLHNCQUFBQSxDQUFBLFFBQUFHLENBQUEsR0FBQUosd0JBQUEsQ0FBQUcsQ0FBQSxPQUFBQyxDQUFBLElBQUFBLENBQUEsQ0FBQUcsR0FBQSxDQUFBTixDQUFBLFVBQUFHLENBQUEsQ0FBQUksR0FBQSxDQUFBUCxDQUFBLE9BQUFRLENBQUEsS0FBQUMsU0FBQSxVQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsY0FBQSxJQUFBRCxNQUFBLENBQUFFLHdCQUFBLFdBQUFDLENBQUEsSUFBQWQsQ0FBQSxvQkFBQWMsQ0FBQSxPQUFBQyxjQUFBLENBQUFDLElBQUEsQ0FBQWhCLENBQUEsRUFBQWMsQ0FBQSxTQUFBRyxDQUFBLEdBQUFQLENBQUEsR0FBQUMsTUFBQSxDQUFBRSx3QkFBQSxDQUFBYixDQUFBLEVBQUFjLENBQUEsVUFBQUcsQ0FBQSxLQUFBQSxDQUFBLENBQUFWLEdBQUEsSUFBQVUsQ0FBQSxDQUFBQyxHQUFBLElBQUFQLE1BQUEsQ0FBQUMsY0FBQSxDQUFBSixDQUFBLEVBQUFNLENBQUEsRUFBQUcsQ0FBQSxJQUFBVCxDQUFBLENBQUFNLENBQUEsSUFBQWQsQ0FBQSxDQUFBYyxDQUFBLFlBQUFOLENBQUEsY0FBQVIsQ0FBQSxFQUFBRyxDQUFBLElBQUFBLENBQUEsQ0FBQWUsR0FBQSxDQUFBbEIsQ0FBQSxFQUFBUSxDQUFBLEdBQUFBLENBQUE7QUFBQSxTQUFBVyxlQUFBaEIsQ0FBQSxRQUFBYyxDQUFBLEdBQUFHLFlBQUEsQ0FBQWpCLENBQUEsZ0NBQUFFLE9BQUEsQ0FBQVksQ0FBQSxJQUFBQSxDQUFBLEdBQUFBLENBQUE7QUFBQSxTQUFBRyxhQUFBakIsQ0FBQSxFQUFBRCxDQUFBLG9CQUFBRyxPQUFBLENBQUFGLENBQUEsTUFBQUEsQ0FBQSxTQUFBQSxDQUFBLE1BQUFILENBQUEsR0FBQUcsQ0FBQSxDQUFBa0IsTUFBQSxDQUFBQyxXQUFBLGtCQUFBdEIsQ0FBQSxRQUFBaUIsQ0FBQSxHQUFBakIsQ0FBQSxDQUFBZ0IsSUFBQSxDQUFBYixDQUFBLEVBQUFELENBQUEsZ0NBQUFHLE9BQUEsQ0FBQVksQ0FBQSxVQUFBQSxDQUFBLFlBQUFNLFNBQUEseUVBQUFyQixDQUFBLEdBQUFzQixNQUFBLEdBQUFDLE1BQUEsRUFBQXRCLENBQUE7QUFBQSxTQUFBdUIsMkJBQUF4QixDQUFBLEVBQUFGLENBQUEsUUFBQUcsQ0FBQSx5QkFBQWtCLE1BQUEsSUFBQW5CLENBQUEsQ0FBQW1CLE1BQUEsQ0FBQU0sUUFBQSxLQUFBekIsQ0FBQSxxQkFBQUMsQ0FBQSxRQUFBeUIsS0FBQSxDQUFBQyxPQUFBLENBQUEzQixDQUFBLE1BQUFDLENBQUEsR0FBQTJCLDJCQUFBLENBQUE1QixDQUFBLE1BQUFGLENBQUEsSUFBQUUsQ0FBQSx1QkFBQUEsQ0FBQSxDQUFBNkIsTUFBQSxJQUFBNUIsQ0FBQSxLQUFBRCxDQUFBLEdBQUFDLENBQUEsT0FBQTZCLEVBQUEsTUFBQUMsQ0FBQSxZQUFBQSxFQUFBLGVBQUFDLENBQUEsRUFBQUQsQ0FBQSxFQUFBekIsQ0FBQSxXQUFBQSxFQUFBLFdBQUF3QixFQUFBLElBQUE5QixDQUFBLENBQUE2QixNQUFBLEtBQUFJLElBQUEsV0FBQUEsSUFBQSxNQUFBQyxLQUFBLEVBQUFsQyxDQUFBLENBQUE4QixFQUFBLFVBQUFoQyxDQUFBLFdBQUFBLEVBQUFFLENBQUEsVUFBQUEsQ0FBQSxLQUFBbUMsQ0FBQSxFQUFBSixDQUFBLGdCQUFBVixTQUFBLGlKQUFBZSxDQUFBLEVBQUE1QixDQUFBLE9BQUFJLENBQUEsZ0JBQUFvQixDQUFBLFdBQUFBLEVBQUEsSUFBQS9CLENBQUEsR0FBQUEsQ0FBQSxDQUFBYSxJQUFBLENBQUFkLENBQUEsTUFBQU0sQ0FBQSxXQUFBQSxFQUFBLFFBQUFOLENBQUEsR0FBQUMsQ0FBQSxDQUFBb0MsSUFBQSxXQUFBN0IsQ0FBQSxHQUFBUixDQUFBLENBQUFpQyxJQUFBLEVBQUFqQyxDQUFBLEtBQUFGLENBQUEsV0FBQUEsRUFBQUUsQ0FBQSxJQUFBWSxDQUFBLE9BQUF3QixDQUFBLEdBQUFwQyxDQUFBLEtBQUFtQyxDQUFBLFdBQUFBLEVBQUEsVUFBQTNCLENBQUEsWUFBQVAsQ0FBQSxjQUFBQSxDQUFBLDhCQUFBVyxDQUFBLFFBQUF3QixDQUFBO0FBQUEsU0FBQVIsNEJBQUE1QixDQUFBLEVBQUFRLENBQUEsUUFBQVIsQ0FBQSwyQkFBQUEsQ0FBQSxTQUFBc0MsaUJBQUEsQ0FBQXRDLENBQUEsRUFBQVEsQ0FBQSxPQUFBUCxDQUFBLE1BQUFzQyxRQUFBLENBQUF6QixJQUFBLENBQUFkLENBQUEsRUFBQXdDLEtBQUEsNkJBQUF2QyxDQUFBLElBQUFELENBQUEsQ0FBQXlDLFdBQUEsS0FBQXhDLENBQUEsR0FBQUQsQ0FBQSxDQUFBeUMsV0FBQSxDQUFBQyxJQUFBLGFBQUF6QyxDQUFBLGNBQUFBLENBQUEsR0FBQXlCLEtBQUEsQ0FBQWlCLElBQUEsQ0FBQTNDLENBQUEsb0JBQUFDLENBQUEsK0NBQUEyQyxJQUFBLENBQUEzQyxDQUFBLElBQUFxQyxpQkFBQSxDQUFBdEMsQ0FBQSxFQUFBUSxDQUFBO0FBQUEsU0FBQThCLGtCQUFBdEMsQ0FBQSxFQUFBUSxDQUFBLGFBQUFBLENBQUEsSUFBQUEsQ0FBQSxHQUFBUixDQUFBLENBQUE2QixNQUFBLE1BQUFyQixDQUFBLEdBQUFSLENBQUEsQ0FBQTZCLE1BQUEsWUFBQS9CLENBQUEsTUFBQVEsQ0FBQSxHQUFBb0IsS0FBQSxDQUFBbEIsQ0FBQSxHQUFBVixDQUFBLEdBQUFVLENBQUEsRUFBQVYsQ0FBQSxJQUFBUSxDQUFBLENBQUFSLENBQUEsSUFBQUUsQ0FBQSxDQUFBRixDQUFBLFVBQUFRLENBQUE7QUFBQSxTQUFBdUMsUUFBQS9DLENBQUEsRUFBQUUsQ0FBQSxRQUFBQyxDQUFBLEdBQUFRLE1BQUEsQ0FBQXFDLElBQUEsQ0FBQWhELENBQUEsT0FBQVcsTUFBQSxDQUFBc0MscUJBQUEsUUFBQVgsQ0FBQSxHQUFBM0IsTUFBQSxDQUFBc0MscUJBQUEsQ0FBQWpELENBQUEsR0FBQUUsQ0FBQSxLQUFBb0MsQ0FBQSxHQUFBQSxDQUFBLENBQUFZLE1BQUEsV0FBQWhELENBQUEsV0FBQVMsTUFBQSxDQUFBRSx3QkFBQSxDQUFBYixDQUFBLEVBQUFFLENBQUEsRUFBQWlELFVBQUEsT0FBQWhELENBQUEsQ0FBQWlELElBQUEsQ0FBQUMsS0FBQSxDQUFBbEQsQ0FBQSxFQUFBbUMsQ0FBQSxZQUFBbkMsQ0FBQTtBQUFBLFNBQUFtRCxjQUFBdEQsQ0FBQSxhQUFBRSxDQUFBLE1BQUFBLENBQUEsR0FBQXFELFNBQUEsQ0FBQXhCLE1BQUEsRUFBQTdCLENBQUEsVUFBQUMsQ0FBQSxXQUFBb0QsU0FBQSxDQUFBckQsQ0FBQSxJQUFBcUQsU0FBQSxDQUFBckQsQ0FBQSxRQUFBQSxDQUFBLE9BQUE2QyxPQUFBLENBQUFwQyxNQUFBLENBQUFSLENBQUEsT0FBQXFELE9BQUEsV0FBQXRELENBQUEsUUFBQXVELGdCQUFBLGFBQUF6RCxDQUFBLEVBQUFFLENBQUEsRUFBQUMsQ0FBQSxDQUFBRCxDQUFBLFNBQUFTLE1BQUEsQ0FBQStDLHlCQUFBLEdBQUEvQyxNQUFBLENBQUFnRCxnQkFBQSxDQUFBM0QsQ0FBQSxFQUFBVyxNQUFBLENBQUErQyx5QkFBQSxDQUFBdkQsQ0FBQSxLQUFBNEMsT0FBQSxDQUFBcEMsTUFBQSxDQUFBUixDQUFBLEdBQUFxRCxPQUFBLFdBQUF0RCxDQUFBLElBQUFTLE1BQUEsQ0FBQUMsY0FBQSxDQUFBWixDQUFBLEVBQUFFLENBQUEsRUFBQVMsTUFBQSxDQUFBRSx3QkFBQSxDQUFBVixDQUFBLEVBQUFELENBQUEsaUJBQUFGLENBQUEsSUE3SjNDO0FBQ0E7QUFhQTtBQVFBO0FBeUJBO0FBNkJBO0FBbUZBO0FBQ0E7QUFDQSxJQUFBNEQsNEJBQXFCLEVBQUMsQ0FBQzs7QUFFdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQU1DLGdCQUFnQixHQUFHLElBQUk7QUFDN0I7O0FBRU8sSUFBTUMsd0JBQTJDLEdBQUFDLE9BQUEsQ0FBQUQsd0JBQUEsR0FBRztFQUN6REUsT0FBTyxFQUFFO0lBQ1BDLEVBQUUsRUFBRSxTQUFTO0lBQ2JDLEtBQUssRUFBRSxzQkFBc0I7SUFDN0JDLE9BQU8sRUFBRSxJQUFJO0lBQ2JDLE1BQU0sRUFBRTtNQUNOQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO01BQ2hCQyxXQUFXLEVBQUUsS0FBSztNQUNsQkMsV0FBVyxFQUFFQyx3QkFBYSxDQUFDQztJQUM3QjtFQUNGLENBQUM7RUFDREMsUUFBUSxFQUFFO0lBQ1JULEVBQUUsRUFBRSxVQUFVO0lBQ2RDLEtBQUssRUFBRSx1QkFBdUI7SUFDOUJDLE9BQU8sRUFBRSxLQUFLO0lBQ2RRLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDREMsS0FBSyxFQUFFO0lBQ0xYLEVBQUUsRUFBRSxPQUFPO0lBQ1hDLEtBQUssRUFBRSxvQkFBb0I7SUFDM0JDLE9BQU8sRUFBRSxLQUFLO0lBQ2RDLE1BQU0sRUFBRTtNQUNOO01BQ0FTLElBQUksRUFBRTtJQUNSO0VBQ0YsQ0FBQztFQUNEQyxVQUFVLEVBQUU7SUFDVmIsRUFBRSxFQUFFLFlBQVk7SUFDaEJDLEtBQUssRUFBRSx5QkFBeUI7SUFDaENDLE9BQU8sRUFBRSxLQUFLO0lBQ2RRLFFBQVEsRUFBRTtFQUNaO0FBQ0YsQ0FBQztBQUVNLElBQU1JLHdCQUF5QyxHQUFBaEIsT0FBQSxDQUFBZ0Isd0JBQUEsR0FBRztFQUN2REMsTUFBTSxFQUFFLElBQUk7RUFDWkMsV0FBVyxFQUFFLElBQUk7RUFDakJDLEtBQUssRUFBRSxDQUFDO0VBQ1JDLFdBQVcsRUFBRSxLQUFLO0VBQ2xCQyxTQUFTLEVBQUUsSUFBSTtFQUNmQyxVQUFVLEVBQUUsSUFBSTtFQUNoQkMsUUFBUSxFQUFFLElBQUk7RUFDZEMsaUJBQWlCLEVBQUUsSUFBSTtFQUN2QkMsV0FBVyxFQUFFLEtBQUs7RUFDbEJDLFFBQVEsRUFBRTtBQUNaLENBQUM7QUFFTSxJQUFNQyxjQUFzQixHQUFBM0IsT0FBQSxDQUFBMkIsY0FBQSxHQUFHO0VBQ3BDQyxJQUFJLEVBQUVDLHVCQUFZLENBQUNDLFlBQVk7RUFDL0JDLFFBQVEsRUFBRSxFQUFFO0VBQ1pDLGVBQWUsRUFBRSxJQUFJO0VBQ3JCQyxPQUFPLEVBQUU7QUFDWCxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1DLGlCQUEyQixHQUFBbEMsT0FBQSxDQUFBa0MsaUJBQUEsR0FBRztFQUN6QztFQUNBQyxPQUFPLEVBQUU7SUFDUEMsS0FBSyxFQUFFLEVBQUU7SUFDVEMsV0FBVyxFQUFFO0VBQ2YsQ0FBQztFQUNEO0VBQ0FDLE1BQU0sRUFBRSxFQUFFO0VBQ1ZDLFNBQVMsRUFBRSxFQUFFO0VBQ2JDLGVBQWUsRUFBRSxFQUFFO0VBQ25CQyxVQUFVLEVBQUUsRUFBRTtFQUVkO0VBQ0FDLE9BQU8sRUFBRSxFQUFFO0VBQ1hDLGdCQUFnQixFQUFFLEVBQUU7RUFFcEI7RUFDQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztFQUNaQyxjQUFjLEVBQUVDLFNBQVM7RUFFekI7RUFDQUMsT0FBTyxFQUFFLEVBQUU7RUFDWEMsV0FBVyxFQUFFLEVBQUU7RUFFZkMsaUJBQWlCLEVBQUVsRCx3QkFBd0I7RUFDM0NtRCxxQkFBcUIsRUFBRSxDQUFDLENBQUM7RUFFekJDLGFBQWEsRUFBRSxRQUFRO0VBQ3ZCQyxlQUFlLEVBQUUsUUFBUTtFQUN6QkMsU0FBUyxFQUFFUCxTQUFTO0VBQ3BCUSxPQUFPLEVBQUVSLFNBQVM7RUFDbEJTLFFBQVEsRUFBRSxDQUFDLENBQUM7RUFDWkMsa0JBQWtCLEVBQUVDLCtCQUFvQjtFQUV4QztFQUNBQyxTQUFTLEVBQUU7SUFDVDtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtFQUFBLENBQ0Q7RUFDREMsbUJBQW1CLEVBQUUsRUFBRTtFQUN2QkMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO0VBQ3JCO0VBQ0FDLFlBQVksRUFBRUMsb0JBQVk7RUFFMUI7RUFDQTtFQUNBQyxlQUFlLEVBQUUvQyx3QkFBd0I7RUFFekNnRCxNQUFNLEVBQUVyQyxjQUFjO0VBRXRCc0MsV0FBVyxFQUFFLEtBQUs7RUFDbEJDLG1CQUFtQixFQUFFLENBQUMsQ0FBQztFQUV2QkMsT0FBTyxFQUFFLEVBQUU7RUFDWEMsV0FBVyxFQUFFLENBQUMsQ0FBQztFQUVmO0VBQ0FDLE9BQU8sRUFBRUMsaUNBQWlCO0VBRTFCO0VBQ0FDLE1BQU0sRUFBRUM7QUFDVixDQUFDO0FBT0Q7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQywyQkFBMkJBLENBQ3pDQyxLQUFRLEVBQUFDLElBQUEsRUFFTDtFQUFBLElBREZwQyxTQUFTLEdBQUFvQyxJQUFBLENBQVRwQyxTQUFTO0lBQUVxQyxLQUFLLEdBQUFELElBQUEsQ0FBTEMsS0FBSztJQUFFQyxHQUFHLEdBQUFGLElBQUEsQ0FBSEUsR0FBRztFQUV0QixPQUFBdEYsYUFBQSxDQUFBQSxhQUFBLEtBQ0ttRixLQUFLO0lBQ1JwQyxNQUFNLEVBQUVvQyxLQUFLLENBQUNwQyxNQUFNLENBQUN3QyxHQUFHLENBQUMsVUFBQ0MsR0FBRyxFQUFFN0gsQ0FBQztNQUFBLE9BQU1BLENBQUMsS0FBSzJILEdBQUcsR0FBR0QsS0FBSyxHQUFHRyxHQUFHO0lBQUEsQ0FBQyxDQUFDO0lBQy9EeEMsU0FBUyxFQUFFQSxTQUFTLEdBQ2hCbUMsS0FBSyxDQUFDbkMsU0FBUyxDQUFDdUMsR0FBRyxDQUFDLFVBQUNFLENBQUMsRUFBRTlILENBQUM7TUFBQSxPQUFNQSxDQUFDLEtBQUsySCxHQUFHLEdBQUd0QyxTQUFTLEdBQUd5QyxDQUFDO0lBQUEsQ0FBQyxDQUFDLEdBQzFETixLQUFLLENBQUNuQztFQUFTO0FBRXZCO0FBRU8sU0FBUzBDLGtDQUFrQ0EsQ0FBcUJQLEtBQVEsRUFBRUUsS0FBWSxFQUFLO0VBQ2hHLElBQUlNLFFBQVEsR0FBR1IsS0FBSztFQUNwQixJQUFJQSxLQUFLLENBQUNoQixTQUFTLENBQUMxRixNQUFNLEVBQUU7SUFDMUJrSCxRQUFRLEdBQUEzRixhQUFBLENBQUFBLGFBQUEsS0FDSG1GLEtBQUs7TUFDUmhCLFNBQVMsRUFBRWtCLEtBQUssQ0FBQ3ZFLE1BQU0sQ0FBQzhFLFNBQVMsR0FDN0IsSUFBQUMsNkJBQXNCLEVBQUNWLEtBQUssQ0FBQ2hCLFNBQVMsRUFBRWtCLEtBQUssQ0FBQyxHQUM5QyxJQUFBUywrQkFBd0IsRUFBQ1gsS0FBSyxDQUFDaEIsU0FBUyxFQUFFa0IsS0FBSztJQUFDLEVBQ3JEO0VBQ0g7RUFFQSxJQUFJQSxLQUFLLENBQUN2RSxNQUFNLENBQUNpRixTQUFTLENBQUNsRixPQUFPLEVBQUU7SUFDbEM4RSxRQUFRLEdBQUdLLHFCQUFxQixDQUFDTCxRQUFRLENBQUM7RUFDNUM7RUFFQSxPQUFPQSxRQUFRO0FBQ2pCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU00sZ0JBQWdCQSxDQUFJQyxJQUFPLEVBQUVqSCxJQUFPLEVBQWM7RUFDekQsSUFBTWtILFlBQXdCLEdBQUcsQ0FBQyxDQUFDO0VBQ25DLElBQU1DLFdBQVcsR0FBRyxTQUFkQSxXQUFXQSxDQUFHQyxHQUFHLEVBQUk7SUFDekJoSixNQUFNLENBQUNxQyxJQUFJLENBQUMyRyxHQUFHLENBQUMsQ0FBQ25HLE9BQU8sQ0FBQyxVQUFBb0csR0FBRyxFQUFJO01BQzlCLElBQ0UsQ0FBQ2pKLE1BQU0sQ0FBQ2tKLFNBQVMsQ0FBQzlJLGNBQWMsQ0FBQ0MsSUFBSSxDQUFDeUksWUFBWSxFQUFFRyxHQUFHLENBQUMsSUFDeEQsQ0FBQyxJQUFBRSxtQkFBTyxFQUFDTixJQUFJLENBQUNJLEdBQUcsQ0FBQyxFQUFFckgsSUFBSSxDQUFDcUgsR0FBRyxDQUFDLENBQUMsRUFDOUI7UUFDQUgsWUFBWSxDQUFDRyxHQUFHLENBQUMsR0FBR3JILElBQUksQ0FBQ3FILEdBQUcsQ0FBQztNQUMvQjtJQUNGLENBQUMsQ0FBQztFQUNKLENBQUM7RUFDREYsV0FBVyxDQUFDRixJQUFJLENBQUM7RUFDakJFLFdBQVcsQ0FBQ25ILElBQUksQ0FBQztFQUNqQixPQUFPa0gsWUFBWTtBQUNyQjtBQUVBLElBQU1NLHlCQUF5QixHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsYUFBYSxDQUFDOztBQUU3RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQyx1QkFBdUJBLENBQ3JDdkIsS0FBZSxFQUNmd0IsTUFBcUQsRUFDM0M7RUFBQSxJQUFBQyxlQUFBO0VBQ1YsSUFBT0MsVUFBVSxHQUFnQ0YsTUFBTSxDQUFoREUsVUFBVTtJQUFFQyxjQUFjLEdBQWdCSCxNQUFNLENBQXBDRyxjQUFjO0lBQUVDLFVBQVUsR0FBSUosTUFBTSxDQUFwQkksVUFBVTtFQUM3QyxJQUFNQyxjQUFjO0VBQ2xCO0VBQ0EsSUFBQUMsZ0NBQWdCLEVBQUM5QixLQUFLLENBQUNILE1BQU0sRUFBRThCLGNBQWMsQ0FBQztFQUNoRCxJQUFNSSxRQUFRLEdBQUcvQixLQUFLLENBQUNwQyxNQUFNLENBQUNvRSxJQUFJLENBQUMsVUFBQUMsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ3pHLEVBQUUsS0FBS2tHLFVBQVU7RUFBQSxFQUFDO0VBQzVELElBQUksQ0FBQ0ssUUFBUSxJQUFJLENBQUNGLGNBQWMsRUFBRTtJQUNoQyxPQUFPN0IsS0FBSztFQUNkO0VBQ0EsSUFBSTRCLFVBQVUsS0FBSyxJQUFJLElBQUlBLFVBQVUsS0FBS3hELFNBQVMsSUFBSTRCLEtBQUssQ0FBQ3BDLE1BQU0sQ0FBQ2dFLFVBQVUsQ0FBQyxLQUFLRyxRQUFRLEVBQUU7SUFDNUY7SUFDQSxPQUFPL0IsS0FBSztFQUNkO0VBQ0EsSUFBTWtDLE9BQU8sR0FBR2xDLEtBQUssQ0FBQzlCLFFBQVEsQ0FBQzJELGNBQWMsQ0FBQ2xHLE1BQU0sQ0FBQ3dHLE1BQU0sQ0FBQztFQUM1RCxJQUFJLENBQUNELE9BQU8sRUFBRTtJQUNaLE9BQU9sQyxLQUFLO0VBQ2Q7RUFDQTtFQUNBLElBQU1vQyxRQUFRLEdBQUcsSUFBQUMscUNBQXFCLEVBQUNILE9BQU8sRUFBRUwsY0FBYyxFQUFFN0IsS0FBSyxDQUFDYixZQUFZLENBQUM7RUFDbkYsSUFBSSxDQUFDaUQsUUFBUSxFQUFFO0lBQ2IsT0FBT3BDLEtBQUs7RUFDZDtFQUVBLElBQUlzQyxTQUFTLEdBQUd0QyxLQUFLO0VBRXJCLElBQUlvQyxRQUFRLENBQUNHLElBQUksSUFBSUgsUUFBUSxDQUFDRyxJQUFJLEtBQUtSLFFBQVEsQ0FBQ1EsSUFBSSxFQUFFO0lBQ3BELElBQU1DLGFBQWEsR0FBR3hDLEtBQUssQ0FBQ3BDLE1BQU0sQ0FBQzZFLFNBQVMsQ0FBQyxVQUFBUixDQUFDO01BQUEsT0FBSUEsQ0FBQyxDQUFDekcsRUFBRSxLQUFLa0csVUFBVTtJQUFBLEVBQUM7SUFDdEUsSUFBSWMsYUFBYSxJQUFJLENBQUMsRUFBRTtNQUN0QkYsU0FBUyxHQUFHSSxzQkFBc0IsQ0FBQ0osU0FBUyxFQUFFLElBQUFLLHdCQUFlLEVBQUNaLFFBQVEsRUFBRUssUUFBUSxDQUFDRyxJQUFJLENBQUMsQ0FBQztNQUN2RjtNQUNBO01BQ0EsSUFBSUQsU0FBUyxDQUFDMUUsTUFBTSxDQUFDdEUsTUFBTSxLQUFLMEcsS0FBSyxDQUFDcEMsTUFBTSxDQUFDdEUsTUFBTSxFQUFFO1FBQ25ELElBQU1zSixVQUFVLEdBQUdOLFNBQVMsQ0FBQzFFLE1BQU0sQ0FBQzRFLGFBQWEsQ0FBQyxDQUFDaEgsRUFBRTtRQUNyRDhHLFNBQVMsR0FBR2YsdUJBQXVCLENBQ2pDZSxTQUFTLEVBQ1QsSUFBQU8seUJBQWdCLEVBQUNELFVBQVUsRUFBQS9ILGFBQUEsQ0FBQUEsYUFBQSxLQUFNOEcsY0FBYztVQUFFbkcsRUFBRSxFQUFFb0g7UUFBVSxFQUFDLENBQ2xFLENBQUM7TUFDSDtJQUNGO0lBQ0EsT0FBT04sU0FBUztFQUNsQjs7RUFFQTtFQUNBO0VBQ0EsSUFBTVEsa0JBQWtCLElBQUFyQixlQUFBLEdBQUcsSUFBQXNCLDhCQUFjLEVBQUNoQixRQUFRLEVBQUUvQixLQUFLLENBQUNILE1BQU0sQ0FBQyxjQUFBNEIsZUFBQSxjQUFBQSxlQUFBLEdBQUk7SUFBQzlGLE1BQU0sRUFBRSxDQUFDO0VBQUMsQ0FBQztFQUNqRixJQUFNcUgsa0JBQWtCLEdBQUcsSUFBQUQsOEJBQWMsRUFBQ1gsUUFBUSxFQUFFcEMsS0FBSyxDQUFDSCxNQUFNLENBQUM7RUFDakUsSUFBSSxDQUFDbUQsa0JBQWtCLEVBQUU7SUFDdkIsT0FBT2hELEtBQUs7RUFDZDtFQUNBLElBQUksQ0FBQyxJQUFBcUIsbUJBQU8sRUFBQ3lCLGtCQUFrQixFQUFFRSxrQkFBa0IsQ0FBQyxFQUFFO0lBQ3BELElBQU1DLE9BQU8sR0FBR25DLGdCQUFnQixDQUFDZ0Msa0JBQWtCLENBQUNuSCxNQUFNLEVBQUVxSCxrQkFBa0IsQ0FBQ3JILE1BQU0sQ0FBQztJQUV0RixJQUFJLFdBQVcsSUFBSXNILE9BQU8sRUFBRTtNQUMxQixJQUFJQSxPQUFPLENBQUNDLFNBQVMsRUFBRTtRQUNyQlosU0FBUyxHQUFHYSwyQkFBMkIsQ0FDckNiLFNBQVMsRUFDVCxJQUFBYyw2QkFBb0IsRUFBQ3JCLFFBQVEsRUFBRWtCLE9BQU8sQ0FBQ0MsU0FBUyxDQUNsRCxDQUFDO01BQ0g7TUFDQSxPQUFPRCxPQUFPLENBQUNDLFNBQVM7SUFDMUI7SUFFQWhMLE1BQU0sQ0FBQ3FDLElBQUksQ0FBQ3dILFFBQVEsQ0FBQ3NCLGNBQWMsQ0FBQyxDQUFDdEksT0FBTyxDQUFDLFVBQUF1SSxXQUFXLEVBQUk7TUFDMUQsSUFBTUMsT0FBTyxHQUFHeEIsUUFBUSxDQUFDc0IsY0FBYyxDQUFDQyxXQUFXLENBQUM7TUFDcEQsSUFBTUUsZ0JBQWdCLEdBQUdsQyx5QkFBeUIsQ0FBQ2xCLEdBQUcsQ0FBQyxVQUFBcUQsSUFBSTtRQUFBLE9BQUlGLE9BQU8sQ0FBQ0UsSUFBSSxDQUFDO01BQUEsRUFBQztNQUM3RSxJQUFJRCxnQkFBZ0IsQ0FBQ0UsSUFBSSxDQUFDLFVBQUFELElBQUk7UUFBQSxPQUFJQSxJQUFJLElBQUlSLE9BQU87TUFBQSxFQUFDLEVBQUU7UUFDbERYLFNBQVMsR0FBR3FCLCtCQUErQixDQUN6Q3JCLFNBQVMsRUFDVCxJQUFBc0IsdUNBQThCLEVBQzVCN0IsUUFBUSxFQUNSLElBQUE4QixtQkFBSSxFQUFDekIsUUFBUSxDQUFDekcsTUFBTSxFQUFFNkgsZ0JBQWdCLENBQUMsRUFDdkNGLFdBQ0YsQ0FDRixDQUFDO1FBQUMsSUFBQVEsU0FBQSxHQUFBN0ssMEJBQUEsQ0FDaUJ1SyxnQkFBZ0I7VUFBQU8sS0FBQTtRQUFBO1VBQW5DLEtBQUFELFNBQUEsQ0FBQXJLLENBQUEsTUFBQXNLLEtBQUEsR0FBQUQsU0FBQSxDQUFBL0wsQ0FBQSxJQUFBMkIsSUFBQSxHQUFxQztZQUFBLElBQTFCK0osSUFBSSxHQUFBTSxLQUFBLENBQUFwSyxLQUFBO1lBQ2IsT0FBT3NKLE9BQU8sQ0FBQ1EsSUFBSSxDQUFDO1VBQ3RCO1FBQUMsU0FBQU8sR0FBQTtVQUFBRixTQUFBLENBQUF2TSxDQUFBLENBQUF5TSxHQUFBO1FBQUE7VUFBQUYsU0FBQSxDQUFBbEssQ0FBQTtRQUFBO01BQ0g7SUFDRixDQUFDLENBQUM7SUFFRixJQUFJMUIsTUFBTSxDQUFDcUMsSUFBSSxDQUFDMEksT0FBTyxDQUFDLENBQUMzSixNQUFNLEdBQUcsQ0FBQyxFQUFFO01BQ25DZ0osU0FBUyxHQUFHMkIsd0JBQXdCLENBQ2xDM0IsU0FBUyxFQUNULElBQUE0QiwwQkFBaUIsRUFBQ25DLFFBQVEsRUFBRSxJQUFBOEIsbUJBQUksRUFBQ3pCLFFBQVEsQ0FBQ3pHLE1BQU0sRUFBRXpELE1BQU0sQ0FBQ3FDLElBQUksQ0FBQzBJLE9BQU8sQ0FBQyxDQUFDLENBQ3pFLENBQUM7SUFDSDtFQUNGO0VBRUEsT0FBT1gsU0FBUztBQUNsQjtBQUVBLFNBQVM2QixvQkFBb0JBLENBQUNuRSxLQUFlLEVBQUVvQyxRQUFlLEVBQUUzQixTQUFtQixFQUFZO0VBQzdGLElBQUlELFFBQVEsR0FBR0Qsa0NBQWtDLENBQUNQLEtBQUssRUFBRW9DLFFBQVEsQ0FBQztFQUNsRSxJQUFNZ0MsV0FBVyxHQUFHQyx3QkFBd0IsQ0FBQ3JFLEtBQUssQ0FBQztFQUNuRCxJQUFJLElBQUFzRSx3QkFBaUIsRUFBQ2xDLFFBQVEsQ0FBQyxJQUFJZ0MsV0FBVyxLQUFLLENBQUMsQ0FBQyxFQUFFO0lBQ3JEO0lBQ0E1RCxRQUFRLEdBQUcrRCxzQ0FBc0MsQ0FBQy9ELFFBQVEsRUFBRTtNQUMxREwsR0FBRyxFQUFFaUUsV0FBVztNQUNoQkksTUFBTSxFQUFFL0QsU0FBUyxHQUFHQSxTQUFTLEdBQUcsSUFBQWdFLGlDQUEwQixFQUFDekUsS0FBSyxDQUFDcEMsTUFBTSxDQUFDLENBQUN0RSxNQUFNLEdBQUc7SUFDcEYsQ0FBQyxDQUFDO0VBQ0o7RUFDQSxPQUFPa0gsUUFBUTtBQUNqQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTeUQsd0JBQXdCQSxDQUN0Q2pFLEtBQWUsRUFDZndCLE1BQXNELEVBQzVDO0VBQ1YsSUFBT08sUUFBUSxHQUFJUCxNQUFNLENBQWxCTyxRQUFRO0VBQ2YsSUFBTTVCLEdBQUcsR0FBR0gsS0FBSyxDQUFDcEMsTUFBTSxDQUFDNkUsU0FBUyxDQUFDLFVBQUFSLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUN6RyxFQUFFLEtBQUt1RyxRQUFRLENBQUN2RyxFQUFFO0VBQUEsRUFBQztFQUM3RCxJQUFNa0osS0FBSyxHQUFHeE0sTUFBTSxDQUFDcUMsSUFBSSxDQUFDaUgsTUFBTSxDQUFDbUQsU0FBUyxDQUFDO0VBQzNDLElBQ0UsT0FBT25ELE1BQU0sQ0FBQ21ELFNBQVMsQ0FBQ3hDLE1BQU0sS0FBSyxRQUFRLElBQzNDWCxNQUFNLENBQUNtRCxTQUFTLENBQUN4QyxNQUFNLEtBQUtKLFFBQVEsQ0FBQ3BHLE1BQU0sQ0FBQ3dHLE1BQU0sRUFDbEQ7SUFDQSxJQUFBeUMsaUJBQUEsR0FBZ0NwRCxNQUFNLENBQUNtRCxTQUFTO01BQXpDeEMsTUFBTSxHQUFBeUMsaUJBQUEsQ0FBTnpDLE1BQU07TUFBSzBDLFVBQVUsT0FBQUMseUJBQUEsYUFBQUYsaUJBQUEsRUFBQXhOLFNBQUE7SUFDNUIsSUFBTTJOLGVBQWUsR0FBR0Msd0JBQXdCLENBQUNoRixLQUFLLEVBQUU7TUFDdEQrQixRQUFRLEVBQVJBLFFBQVE7TUFDUjRDLFNBQVMsRUFBRTtRQUFDeEMsTUFBTSxFQUFOQTtNQUFNO0lBQ3BCLENBQUMsQ0FBQztJQUNGLElBQU04QyxTQUFTLEdBQUdGLGVBQWUsQ0FBQ25ILE1BQU0sQ0FBQ29FLElBQUksQ0FBQyxVQUFBQyxDQUFDO01BQUEsT0FBSUEsQ0FBQyxDQUFDekcsRUFBRSxLQUFLdUcsUUFBUSxDQUFDdkcsRUFBRTtJQUFBLEVBQUM7SUFDeEUsT0FBT3lKLFNBQVMsSUFBSS9NLE1BQU0sQ0FBQ3FDLElBQUksQ0FBQ3NLLFVBQVUsQ0FBQyxDQUFDdkwsTUFBTSxHQUM5QzJLLHdCQUF3QixDQUFDYyxlQUFlLEVBQUU7TUFBQ2hELFFBQVEsRUFBRWtELFNBQVM7TUFBRU4sU0FBUyxFQUFFRTtJQUFVLENBQUMsQ0FBQyxHQUN2RkUsZUFBZTtFQUNyQjtFQUVBLElBQUkzQyxRQUFRLEdBQUdMLFFBQVEsQ0FBQ21ELGlCQUFpQixDQUFDMUQsTUFBTSxDQUFDbUQsU0FBUyxDQUFDO0VBRTNELElBQUk5RyxTQUFTO0VBRWIsSUFBSXVFLFFBQVEsQ0FBQytDLHdCQUF3QixDQUFDVCxLQUFLLENBQUMsRUFBRTtJQUM1QyxJQUFNVSxZQUFZLEdBQUdwRixLQUFLLENBQUNuQyxTQUFTLENBQUNzQyxHQUFHLENBQUM7SUFFekMsSUFBTWtGLHFCQUFxQixHQUFHLElBQUFDLDhCQUFrQixFQUFDbEQsUUFBUSxFQUFFcEMsS0FBSyxFQUFFb0YsWUFBWSxDQUFDO0lBQy9FaEQsUUFBUSxHQUFHaUQscUJBQXFCLENBQUNuRixLQUFLO0lBQ3RDckMsU0FBUyxHQUFHd0gscUJBQXFCLENBQUN4SCxTQUFTO0VBQzdDO0VBRUEsSUFBSTJDLFFBQVEsR0FBR1IsS0FBSztFQUNwQixJQUFJLFdBQVcsSUFBSXdCLE1BQU0sQ0FBQ21ELFNBQVMsRUFBRTtJQUNuQ25FLFFBQVEsR0FBRzJELG9CQUFvQixDQUFDM0QsUUFBUSxFQUFFNEIsUUFBUSxFQUFFWixNQUFNLENBQUNtRCxTQUFTLENBQUNsRSxTQUFTLENBQUM7RUFDakY7RUFFQSxJQUFJLFNBQVMsSUFBSWUsTUFBTSxDQUFDbUQsU0FBUyxJQUFJdkMsUUFBUSxDQUFDekcsTUFBTSxDQUFDaUYsU0FBUyxDQUFDbEYsT0FBTyxFQUFFO0lBQ3RFO0lBQ0E4RSxRQUFRLEdBQUdLLHFCQUFxQixDQUFDTCxRQUFRLENBQUM7RUFDNUM7RUFFQSxPQUFPVCwyQkFBMkIsQ0FBQ1MsUUFBUSxFQUFFO0lBQzNDTixLQUFLLEVBQUVrQyxRQUFRO0lBQ2Z2RSxTQUFTLEVBQVRBLFNBQVM7SUFDVHNDLEdBQUcsRUFBSEE7RUFDRixDQUFDLENBQUM7QUFDSjtBQUVPLFNBQVNvRiwyQkFBMkJBLENBQXFCdkYsS0FBUSxFQUFFd0IsTUFBTSxFQUFLO0VBQ25GLElBQU9PLFFBQVEsR0FBaUJQLE1BQU0sQ0FBL0JPLFFBQVE7SUFBRTBCLElBQUksR0FBV2pDLE1BQU0sQ0FBckJpQyxJQUFJO0lBQUU5SixLQUFLLEdBQUk2SCxNQUFNLENBQWY3SCxLQUFLO0VBQzVCLElBQU13RyxHQUFHLEdBQUdILEtBQUssQ0FBQ3BDLE1BQU0sQ0FBQzZFLFNBQVMsQ0FBQyxVQUFBUixDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDekcsRUFBRSxLQUFLdUcsUUFBUSxDQUFDdkcsRUFBRTtFQUFBLEVBQUM7RUFFN0QsSUFBTTRHLFFBQVEsR0FBR0wsUUFBUSxDQUFDbUQsaUJBQWlCLENBQUM7SUFDMUN0RSxTQUFTLEVBQUEvRixhQUFBLENBQUFBLGFBQUEsS0FDSmtILFFBQVEsQ0FBQ3BHLE1BQU0sQ0FBQ2lGLFNBQVMsV0FBQTVGLGdCQUFBLGlCQUMzQnlJLElBQUksRUFBRzlKLEtBQUs7RUFFakIsQ0FBQyxDQUFDO0VBRUYsSUFBQTZMLG1CQUFBLEdBQTJCLElBQUFGLDhCQUFrQixFQUFDbEQsUUFBUSxFQUFFcEMsS0FBSyxFQUFFQSxLQUFLLENBQUNuQyxTQUFTLENBQUNzQyxHQUFHLENBQUMsQ0FBQztJQUE3RXRDLFNBQVMsR0FBQTJILG1CQUFBLENBQVQzSCxTQUFTO0lBQUVxQyxLQUFLLEdBQUFzRixtQkFBQSxDQUFMdEYsS0FBSztFQUV2QixPQUFPSCwyQkFBMkIsQ0FBQ0MsS0FBSyxFQUFFO0lBQUNuQyxTQUFTLEVBQVRBLFNBQVM7SUFBRXFDLEtBQUssRUFBTEEsS0FBSztJQUFFQyxHQUFHLEVBQUhBO0VBQUcsQ0FBQyxDQUFDO0FBQ3BFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNzRiw0QkFBNEJBLENBQzFDekYsS0FBZSxFQUNmd0IsTUFBMEQsRUFDaEQ7RUFDVixJQUFPa0UsT0FBTyxHQUEyQmxFLE1BQU0sQ0FBeENrRSxPQUFPO0lBQUVqRixTQUFTLEdBQWdCZSxNQUFNLENBQS9CZixTQUFTO0lBQUVrRixVQUFVLEdBQUluRSxNQUFNLENBQXBCbUUsVUFBVTtFQUNyQyxJQUFNekYsS0FBSyxHQUFHRixLQUFLLENBQUNwQyxNQUFNLENBQUNvRSxJQUFJLENBQUMsVUFBQTFCLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUM5RSxFQUFFLEtBQUtrSyxPQUFPO0VBQUEsRUFBQztFQUV0RCxJQUFJLENBQUN4RixLQUFLLEVBQUU7SUFDVixPQUFPRixLQUFLO0VBQ2Q7RUFFQSxJQUFJUSxRQUFRLEdBQUdSLEtBQUs7RUFFcEIsSUFBSTJGLFVBQVUsRUFBRTtJQUNkO0lBQ0EsSUFBTUMsUUFBUSxHQUFHcEYsUUFBUSxDQUFDeEIsU0FBUyxDQUFDeUQsU0FBUyxDQUFDLFVBQUFvRCxFQUFFO01BQUEsT0FBSUEsRUFBRSxDQUFDckssRUFBRSxLQUFLbUssVUFBVTtJQUFBLEVBQUM7SUFDekUsSUFBSWxGLFNBQVMsRUFBRTtNQUNiO01BQ0E7TUFDQUQsUUFBUSxHQUFHeUQsd0JBQXdCLENBQUN6RCxRQUFRLEVBQUUsSUFBQTBELDBCQUFpQixFQUFDaEUsS0FBSyxFQUFFO1FBQUNPLFNBQVMsRUFBRTtNQUFJLENBQUMsQ0FBQyxDQUFDOztNQUUxRjtNQUNBLE9BQUE1RixhQUFBLENBQUFBLGFBQUEsS0FDSzJGLFFBQVE7UUFDWHhCLFNBQVMsRUFBRXdCLFFBQVEsQ0FBQ3hCLFNBQVMsQ0FBQ29CLEdBQUcsQ0FBQyxVQUFBeUYsRUFBRTtVQUFBLE9BQ2xDQSxFQUFFLENBQUNySyxFQUFFLEtBQUttSyxVQUFVLEdBQUE5SyxhQUFBLENBQUFBLGFBQUEsS0FFWGdMLEVBQUU7WUFDTGpJLE1BQU0sRUFBQS9DLGFBQUEsQ0FBQUEsYUFBQSxLQUNEZ0wsRUFBRSxDQUFDakksTUFBTSxXQUFBNUMsZ0JBQUEsaUJBQ1gwSyxPQUFPLEVBQUcsS0FBSztVQUNqQixLQUFBN0ssYUFBQSxDQUFBQSxhQUFBLEtBR0VnTCxFQUFFO1lBQ0xqSSxNQUFNLEVBQUEvQyxhQUFBLENBQUFBLGFBQUEsS0FDRGdMLEVBQUUsQ0FBQ2pJLE1BQU0sV0FBQTVDLGdCQUFBLGlCQUNYMEssT0FBTyxFQUFHLElBQUk7VUFDaEIsRUFDRjtRQUFBLENBQ1A7TUFBQztJQUVMO0lBQ0E7SUFDQSxPQUFPSSx3QkFBd0IsQ0FBQ3RGLFFBQVEsRUFBRSxJQUFBdUYsMEJBQWlCLEVBQUNILFFBQVEsRUFBRUYsT0FBTyxDQUFDLENBQUM7RUFDakYsQ0FBQyxNQUFNO0lBQ0w7SUFDQSxJQUFNdEQsUUFBUSxHQUFHbEMsS0FBSyxDQUFDZ0YsaUJBQWlCLENBQUM7TUFBQ3pFLFNBQVMsRUFBVEE7SUFBUyxDQUFDLENBQUM7SUFDckQsSUFBTU4sR0FBRyxHQUFHSyxRQUFRLENBQUM1QyxNQUFNLENBQUM2RSxTQUFTLENBQUMsVUFBQVIsQ0FBQztNQUFBLE9BQUlBLENBQUMsQ0FBQ3pHLEVBQUUsS0FBS2tLLE9BQU87SUFBQSxFQUFDO0lBRTVEbEYsUUFBUSxHQUFHMkQsb0JBQW9CLENBQUMzRCxRQUFRLEVBQUU0QixRQUFRLEVBQUUzQixTQUFTLENBQUM7SUFDOUQsT0FBT1YsMkJBQTJCLENBQUNTLFFBQVEsRUFBRTtNQUMzQ04sS0FBSyxFQUFFa0MsUUFBUTtNQUNmakMsR0FBRyxFQUFIQTtJQUNGLENBQUMsQ0FBQztFQUNKO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNrRSx3QkFBd0JBLENBQUNyRSxLQUFlLEVBQVU7RUFDekQsT0FBT0EsS0FBSyxDQUFDaEMsT0FBTyxDQUFDeUUsU0FBUyxDQUFDLFVBQUE3SSxDQUFDO0lBQUEsT0FBS0EsQ0FBQyxDQUFxQm9NLHVCQUF1QjtFQUFBLEVBQUM7QUFDckY7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQyxzQkFBc0JBLENBQ3BDakcsS0FBZSxFQUNmd0IsTUFBb0QsRUFDMUM7RUFDVixJQUFPTyxRQUFRLEdBQWFQLE1BQU0sQ0FBM0JPLFFBQVE7SUFBRW1FLE9BQU8sR0FBSTFFLE1BQU0sQ0FBakIwRSxPQUFPO0VBRXhCLElBQU0vRixHQUFHLEdBQUdILEtBQUssQ0FBQ3BDLE1BQU0sQ0FBQzZFLFNBQVMsQ0FBQyxVQUFBUixDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDekcsRUFBRSxLQUFLdUcsUUFBUSxDQUFDdkcsRUFBRTtFQUFBLEVBQUM7RUFDN0QsSUFBTTJLLGFBQWEsR0FBR25HLEtBQUssQ0FBQ3BDLE1BQU0sQ0FBQ3VDLEdBQUcsQ0FBQztFQUN2QyxJQUFJZ0csYUFBYSxFQUFFO0lBQ2pCLElBQUkvRCxRQUFRO0lBQ1osSUFBSWdFLE9BQU8sR0FBRyxJQUFJO0lBRWxCLElBQUlGLE9BQU8sRUFBRTtNQUNYO01BQ0EsSUFBQUcsb0JBQUEsR0FBMkIsSUFBQWYsOEJBQWtCLEVBQUNhLGFBQWEsRUFBRW5HLEtBQUssRUFBRTVCLFNBQVMsQ0FBQztRQUF2RThCLEtBQUssR0FBQW1HLG9CQUFBLENBQUxuRyxLQUFLO1FBQUVyQyxTQUFTLEdBQUF3SSxvQkFBQSxDQUFUeEksU0FBUztNQUN2QnVFLFFBQVEsR0FBR2xDLEtBQUs7TUFDaEJrRyxPQUFPLEdBQUd2SSxTQUFTO0lBQ3JCLENBQUMsTUFBTTtNQUNMdUUsUUFBUSxHQUFHK0QsYUFBYSxDQUFDakIsaUJBQWlCLENBQUM7UUFDekN6RSxTQUFTLEVBQUU7TUFDYixDQUFDLENBQUM7TUFDRjJCLFFBQVEsQ0FBQzhELE9BQU8sR0FBRyxLQUFLO0lBQzFCO0lBRUEsT0FBT25HLDJCQUEyQixDQUFDQyxLQUFLLEVBQUU7TUFBQ0csR0FBRyxFQUFIQSxHQUFHO01BQUVELEtBQUssRUFBRWtDLFFBQVE7TUFBRXZFLFNBQVMsRUFBRXVJO0lBQU8sQ0FBQyxDQUFDO0VBQ3ZGO0VBRUEsT0FBT3BHLEtBQUs7QUFDZDtBQUVBLFNBQVNzRyxxQkFBcUJBLENBQUNDLFNBQVMsRUFBRUMsU0FBUyxFQUF5QztFQUFBLElBQXZDQyxnQkFBZ0IsR0FBQTNMLFNBQUEsQ0FBQXhCLE1BQUEsUUFBQXdCLFNBQUEsUUFBQXNELFNBQUEsR0FBQXRELFNBQUEsTUFBRzRMLDZCQUFrQjtFQUN4RixJQUFJQyxZQUFZLEdBQUdILFNBQVMsQ0FBQ3ZNLEtBQUssQ0FBQyxDQUFDO0VBRXBDLElBQU0yTSxhQUFhLEdBQUdKLFNBQVMsQ0FBQ3BHLEdBQUcsQ0FBQyxVQUFBeUcsRUFBRTtJQUFBLE9BQUlBLEVBQUUsQ0FBQ0MsS0FBSyxJQUFJRCxFQUFFLENBQUNDLEtBQUssQ0FBQzNNLElBQUk7RUFBQSxFQUFDLENBQUNNLE1BQU0sQ0FBQyxVQUFBNkYsQ0FBQztJQUFBLE9BQUlBLENBQUM7RUFBQSxFQUFDO0VBRW5GLElBQU15RyxTQUFTLEdBQUdSLFNBQVMsQ0FBQzlMLE1BQU0sQ0FBQyxVQUFBYixDQUFDO0lBQUEsT0FBSSxDQUFDZ04sYUFBYSxDQUFDSSxRQUFRLENBQUNwTixDQUFDLENBQUNPLElBQUksQ0FBQztFQUFBLEVBQUM7RUFDeEUsSUFBTThNLFlBQVksR0FBR0wsYUFBYSxDQUFDbk0sTUFBTSxDQUFDLFVBQUFiLENBQUM7SUFBQSxPQUFJLENBQUMyTSxTQUFTLENBQUN2RSxJQUFJLENBQUMsVUFBQWtGLEVBQUU7TUFBQSxPQUFJQSxFQUFFLENBQUMvTSxJQUFJLEtBQUtQLENBQUM7SUFBQSxFQUFDO0VBQUEsRUFBQzs7RUFFcEY7RUFDQStNLFlBQVksR0FBR0EsWUFBWSxDQUFDbE0sTUFBTSxDQUFDLFVBQUFvTSxFQUFFO0lBQUEsT0FBSUEsRUFBRSxDQUFDQyxLQUFLLElBQUksQ0FBQ0csWUFBWSxDQUFDRCxRQUFRLENBQUNILEVBQUUsQ0FBQ0MsS0FBSyxDQUFDM00sSUFBSSxDQUFDO0VBQUEsRUFBQztFQUMzRndNLFlBQVksR0FBRyxDQUFDQSxZQUFZLENBQUNyTixNQUFNLEdBQUcsQ0FBQ21OLGdCQUFnQixDQUFDLEdBQUdFLFlBQVk7O0VBRXZFO0VBQ0FBLFlBQVksTUFBQVEsTUFBQSxLQUFBQyxtQkFBQSxhQUNQVCxZQUFZLENBQUNsTSxNQUFNLENBQUMsVUFBQW9NLEVBQUU7SUFBQSxPQUFJQSxFQUFFLENBQUNDLEtBQUs7RUFBQSxFQUFDLE9BQUFNLG1CQUFBLGFBQ25DTCxTQUFTLENBQUMzRyxHQUFHLENBQUMsVUFBQWlILEVBQUU7SUFBQSxPQUFBeE0sYUFBQSxDQUFBQSxhQUFBLEtBQ2Q0TCxnQkFBZ0I7TUFDbkJLLEtBQUssRUFBRU87SUFBRTtFQUFBLENBQ1QsQ0FBQyxFQUNKO0VBRUQsT0FBT1YsWUFBWTtBQUNyQjtBQUVBLFNBQVNXLDJCQUEyQkEsQ0FBQ25ILEdBQUcsRUFBRXNELElBQUksRUFBRTlKLEtBQUssRUFBRTZNLFNBQVMsRUFBRTtFQUNoRSxJQUFJLENBQUN0TyxNQUFNLENBQUNrSixTQUFTLENBQUM5SSxjQUFjLENBQUNDLElBQUksQ0FBQ2lPLFNBQVMsQ0FBQ3JHLEdBQUcsQ0FBQyxFQUFFc0QsSUFBSSxDQUFDLEVBQUU7SUFDL0QsT0FBTytDLFNBQVM7RUFDbEI7RUFFQSxJQUFJRyxZQUFZLEdBQUdILFNBQVMsQ0FBQ3ZNLEtBQUssQ0FBQyxDQUFDO0VBRXBDLElBQUl3SixJQUFJLEtBQUssT0FBTyxJQUFJOUosS0FBSyxLQUFLLElBQUksSUFBSTZNLFNBQVMsQ0FBQ2xOLE1BQU0sR0FBRyxDQUFDLEVBQUU7SUFDOUQ7SUFDQXFOLFlBQVksQ0FBQ1ksTUFBTSxDQUFDcEgsR0FBRyxFQUFFLENBQUMsQ0FBQztFQUM3QixDQUFDLE1BQU0sSUFBSXNELElBQUksRUFBRTtJQUNma0QsWUFBWSxHQUFHSCxTQUFTLENBQUNwRyxHQUFHLENBQUMsVUFBQ3lHLEVBQUUsRUFBRXJPLENBQUM7TUFBQSxPQUFNQSxDQUFDLEtBQUsySCxHQUFHLEdBQUF0RixhQUFBLENBQUFBLGFBQUEsS0FBT2dNLEVBQUUsV0FBQTdMLGdCQUFBLGlCQUFHeUksSUFBSSxFQUFHOUosS0FBSyxLQUFJa04sRUFBRTtJQUFBLENBQUMsQ0FBQztFQUNwRjtFQUVBLE9BQU9GLFlBQVk7QUFDckI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNhLDJCQUEyQkEsQ0FDekN4SCxLQUFlLEVBQ2Z3QixNQUF5RCxFQUMvQztFQUFBLElBQUFpRyxxQkFBQSxFQUFBQyxzQkFBQTtFQUNWLElBQU8zRixRQUFRLEdBQXNCUCxNQUFNLENBQXBDTyxRQUFRO0lBQUU1QixHQUFHLEdBQWlCcUIsTUFBTSxDQUExQnJCLEdBQUc7SUFBRXNELElBQUksR0FBV2pDLE1BQU0sQ0FBckJpQyxJQUFJO0lBQUU5SixLQUFLLEdBQUk2SCxNQUFNLENBQWY3SCxLQUFLO0VBQ2pDLElBQU82TSxTQUFTLEdBQUl6RSxRQUFRLENBQUNwRyxNQUFNLENBQTVCNkssU0FBUzs7RUFFaEI7RUFDQTtFQUNBLElBQU1DLGdCQUFnQixJQUFBZ0IscUJBQUEsSUFBQUMsc0JBQUEsR0FDcEIzRixRQUFRLENBQUM0RixxQkFBcUIsQ0FBQztJQUFDeEYsTUFBTSxFQUFFO0VBQUUsQ0FBQyxDQUFDLGNBQUF1RixzQkFBQSxnQkFBQUEsc0JBQUEsR0FBNUNBLHNCQUFBLENBQThDbEIsU0FBUyxjQUFBa0Isc0JBQUEsdUJBQXZEQSxzQkFBQSxDQUEwRCxDQUFDLENBQUMsY0FBQUQscUJBQUEsY0FBQUEscUJBQUEsR0FBSWYsNkJBQWtCO0VBRXBGLElBQUlDLFlBQVksR0FBR0gsU0FBUyxDQUFDdk0sS0FBSyxDQUFDLENBQUM7RUFDcEMsSUFBSSxDQUFDdU0sU0FBUyxDQUFDckcsR0FBRyxDQUFDLElBQUlBLEdBQUcsS0FBS3FHLFNBQVMsQ0FBQ2xOLE1BQU0sRUFBRTtJQUMvQztJQUNBcU4sWUFBWSxNQUFBUSxNQUFBLEtBQUFDLG1CQUFBLGFBQU9aLFNBQVMsSUFBRUMsZ0JBQWdCLEVBQUM7RUFDakQ7RUFFQSxJQUFJdEcsR0FBRyxLQUFLLEtBQUssSUFBSXNELElBQUksS0FBSyxRQUFRLEVBQUU7SUFDdENrRCxZQUFZLEdBQUdMLHFCQUFxQixDQUFDM00sS0FBSyxFQUFFNk0sU0FBUyxFQUFFQyxnQkFBZ0IsQ0FBQztFQUMxRSxDQUFDLE1BQU07SUFDTEUsWUFBWSxHQUFHVywyQkFBMkIsQ0FBQ25ILEdBQUcsRUFBRXNELElBQUksRUFBRTlKLEtBQUssRUFBRWdOLFlBQVksQ0FBQztFQUM1RTtFQUNBO0VBQ0EsT0FBTzFDLHdCQUF3QixDQUFDakUsS0FBSyxFQUFFO0lBQ3JDK0IsUUFBUSxFQUFSQSxRQUFRO0lBQ1I0QyxTQUFTLEVBQUU7TUFBQzZCLFNBQVMsRUFBRUc7SUFBWTtFQUNyQyxDQUFDLENBQUM7QUFDSjtBQUVBLFNBQVNpQiw2QkFBNkJBLENBQUMxRixPQUFPLEVBQUUvQyxZQUFZLEVBQUVlLEtBQUssRUFBRUwsTUFBTSxFQUFFO0VBQzNFLElBQU1nSSxXQUFXLEdBQUcsSUFBQTlFLDhCQUFjLEVBQUM3QyxLQUFLLEVBQUVMLE1BQU0sQ0FBQztFQUNqRCxPQUFPZ0ksV0FBVyxHQUNkLElBQUF4RixxQ0FBcUIsRUFBQ0gsT0FBTyxFQUFFMkYsV0FBVyxFQUFFMUksWUFBWSxFQUFFO0lBQ3hEMkksZ0JBQWdCLEVBQUU7RUFDcEIsQ0FBQyxDQUFDLEdBQ0YsSUFBSTtBQUNWOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTOUMsd0JBQXdCQSxDQUN0Q2hGLEtBQWUsRUFDZndCLE1BS0MsRUFDUztFQUNWLElBQU9PLFFBQVEsR0FBZVAsTUFBTSxDQUE3Qk8sUUFBUTtJQUFFNEMsU0FBUyxHQUFJbkQsTUFBTSxDQUFuQm1ELFNBQVM7RUFDMUIsSUFBT3hDLE1BQU0sR0FBSXdDLFNBQVMsQ0FBbkJ4QyxNQUFNO0VBRWIsSUFBSSxDQUFDSixRQUFRLElBQUksQ0FBQy9CLEtBQUssQ0FBQzlCLFFBQVEsQ0FBQ2lFLE1BQU0sQ0FBQyxFQUFFO0lBQ3hDLE9BQU9uQyxLQUFLO0VBQ2Q7RUFDQSxJQUFNRyxHQUFHLEdBQUdILEtBQUssQ0FBQ3BDLE1BQU0sQ0FBQzZFLFNBQVMsQ0FBQyxVQUFBUixDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDekcsRUFBRSxLQUFLdUcsUUFBUSxDQUFDdkcsRUFBRTtFQUFBLEVBQUM7RUFFN0QsSUFBSTRHLFFBQVEsR0FBR0wsUUFBUSxDQUFDbUQsaUJBQWlCLENBQUM7SUFBQy9DLE1BQU0sRUFBTkE7RUFBTSxDQUFDLENBQUM7O0VBRW5EO0VBQ0EsSUFBSUMsUUFBUSxDQUFDMkYsYUFBYSxDQUFDLENBQUMsRUFBRTtJQUM1QixJQUFNQyxTQUFTLEdBQUdKLDZCQUE2QixDQUM3QzVILEtBQUssQ0FBQzlCLFFBQVEsQ0FBQ2lFLE1BQU0sQ0FBQyxFQUN0Qm5DLEtBQUssQ0FBQ2IsWUFBWSxFQUNsQmlELFFBQVEsRUFDUnBDLEtBQUssQ0FBQ0gsTUFDUixDQUFDO0lBQ0Q7SUFDQSxJQUFJLENBQUNtSSxTQUFTLEVBQUU7TUFDZCxJQUFNQyxZQUFZLEdBQUdsRyxRQUFRLENBQUNRLElBQUk7TUFDbEMsSUFBSTBGLFlBQVksRUFBRTtRQUNoQjdGLFFBQVEsR0FBRyxJQUFJcEMsS0FBSyxDQUFDYixZQUFZLENBQUM4SSxZQUFZLENBQUMsQ0FBQztVQUFDOUYsTUFBTSxFQUFOQSxNQUFNO1VBQUUzRyxFQUFFLEVBQUV1RyxRQUFRLENBQUN2RztRQUFFLENBQUMsQ0FBQztNQUM1RTtJQUNGLENBQUMsTUFBTTtNQUNMNEcsUUFBUSxHQUFHNEYsU0FBUztJQUN0QjtFQUNGO0VBRUE1RixRQUFRLEdBQUdBLFFBQVEsQ0FBQzhDLGlCQUFpQixDQUFDO0lBQ3BDekUsU0FBUyxFQUFFc0IsUUFBUSxDQUFDcEcsTUFBTSxDQUFDOEUsU0FBUztJQUNwQ3lILGNBQWMsRUFBRTtFQUNsQixDQUFDLENBQUM7RUFFRjlGLFFBQVEsQ0FBQytGLGlCQUFpQixDQUFDbkksS0FBSyxDQUFDOUIsUUFBUSxDQUFDO0VBQzFDLElBQUFrSyxvQkFBQSxHQUEyQixJQUFBOUMsOEJBQWtCLEVBQUNsRCxRQUFRLEVBQUVwQyxLQUFLLEVBQUU1QixTQUFTLENBQUM7SUFBbEVQLFNBQVMsR0FBQXVLLG9CQUFBLENBQVR2SyxTQUFTO0lBQUVxQyxLQUFLLEdBQUFrSSxvQkFBQSxDQUFMbEksS0FBSztFQUV2QixPQUFPSCwyQkFBMkIsQ0FBQ0MsS0FBSyxFQUFFO0lBQUNuQyxTQUFTLEVBQVRBLFNBQVM7SUFBRXFDLEtBQUssRUFBTEEsS0FBSztJQUFFQyxHQUFHLEVBQUhBO0VBQUcsQ0FBQyxDQUFDO0FBQ3BFO0FBRU8sU0FBU2tJLHFCQUFxQkEsQ0FBQ25JLEtBQUssRUFBRWhDLFFBQVEsRUFBRWlCLFlBQVksRUFBUztFQUMxRSxJQUFJaUQsUUFBUSxHQUFHbEMsS0FBSztFQUNwQixJQUFJLENBQUNoSSxNQUFNLENBQUNxQyxJQUFJLENBQUMyRCxRQUFRLENBQUMsQ0FBQzVFLE1BQU0sRUFBRTtJQUNqQztJQUNBLE9BQU80RyxLQUFLO0VBQ2Q7RUFDQSxJQUFJLENBQUNBLEtBQUssQ0FBQ3ZFLE1BQU0sQ0FBQ3dHLE1BQU0sRUFBRTtJQUN4QjtJQUNBQyxRQUFRLEdBQUdsQyxLQUFLLENBQUNnRixpQkFBaUIsQ0FBQztNQUFDL0MsTUFBTSxFQUFFakssTUFBTSxDQUFDcUMsSUFBSSxDQUFDMkQsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUFDLENBQUMsQ0FBQztFQUN4RTtFQUNBLElBQU1nRSxPQUFPLEdBQUdoRSxRQUFRLENBQUNrRSxRQUFRLENBQUN6RyxNQUFNLENBQUN3RyxNQUFNLENBQUM7RUFDaEQsSUFBSSxDQUFDRCxPQUFPLEVBQUU7SUFDWixPQUFPaEMsS0FBSztFQUNkOztFQUVBO0VBQ0EsSUFBTW9JLE1BQU0sR0FDVixPQUFPbkosWUFBWSxDQUFDaUQsUUFBUSxDQUFDRyxJQUFJLENBQUMsQ0FBQ2dHLHFCQUFxQixLQUFLLFVBQVUsR0FDbkVwSixZQUFZLENBQUNpRCxRQUFRLENBQUNHLElBQUksQ0FBQyxDQUFDZ0cscUJBQXFCLENBQUNyRyxPQUFPLEVBQUUsRUFBRSxDQUFDLEdBQzlEO0lBQUN3QyxLQUFLLEVBQUU7RUFBRSxDQUFDOztFQUVqQjtFQUNBLElBQU1BLEtBQUssR0FBR3ZMLEtBQUssQ0FBQ0MsT0FBTyxDQUFDa1AsTUFBTSxDQUFDLEdBQUdBLE1BQU0sR0FBR0EsTUFBTSxDQUFDNUQsS0FBSyxJQUFJLEVBQUU7RUFFakUsSUFBSUEsS0FBSyxDQUFDcEwsTUFBTSxFQUFFO0lBQ2hCOEksUUFBUSxHQUFHLElBQUlqRCxZQUFZLENBQUNlLEtBQUssQ0FBQ3FDLElBQUksQ0FBQyxDQUFBMUgsYUFBQSxDQUFBQSxhQUFBLEtBQ2xDNkosS0FBSyxDQUFDLENBQUMsQ0FBQztNQUNYakosS0FBSyxFQUFFMkcsUUFBUSxDQUFDekcsTUFBTSxDQUFDRixLQUFLO01BQzVCMEcsTUFBTSxFQUFFQyxRQUFRLENBQUN6RyxNQUFNLENBQUN3RyxNQUFNO01BQzlCK0YsY0FBYyxFQUFFOUYsUUFBUSxDQUFDekcsTUFBTSxDQUFDdU07SUFBYyxFQUMvQyxDQUFDO0VBQ0o7RUFDQSxPQUFPLE9BQU85RixRQUFRLENBQUNpRyxxQkFBcUIsS0FBSyxVQUFVLEdBQ3ZEakcsUUFBUSxDQUFDaUcscUJBQXFCLENBQUNuRyxPQUFPLENBQUMsR0FDdkNFLFFBQVE7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTTSxzQkFBc0JBLENBQ3BDMUMsS0FBZSxFQUNmd0IsTUFBb0QsRUFDMUM7RUFDVixJQUFPTyxRQUFRLEdBQWFQLE1BQU0sQ0FBM0JPLFFBQVE7SUFBRXlHLE9BQU8sR0FBSWhILE1BQU0sQ0FBakJnSCxPQUFPO0VBQ3hCLElBQUksQ0FBQ3pHLFFBQVEsRUFBRTtJQUNiLE9BQU8vQixLQUFLO0VBQ2Q7RUFDQSxJQUFNeUksS0FBSyxHQUFHMUcsUUFBUSxDQUFDdkcsRUFBRTtFQUN6QixJQUFNMkUsR0FBRyxHQUFHSCxLQUFLLENBQUNwQyxNQUFNLENBQUM2RSxTQUFTLENBQUMsVUFBQVIsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ3pHLEVBQUUsS0FBS2lOLEtBQUs7RUFBQSxFQUFDO0VBRXZELElBQUksQ0FBQ3pJLEtBQUssQ0FBQ2IsWUFBWSxDQUFDcUosT0FBTyxDQUFDLEVBQUU7SUFDaENFLGVBQU8sQ0FBQ0MsS0FBSyxJQUFBeEIsTUFBQSxDQUFJcUIsT0FBTywrQkFBNEIsQ0FBQztJQUNyRCxPQUFPeEksS0FBSztFQUNkO0VBQ0EsSUFBSW9DLFFBQVEsR0FBRyxJQUFJcEMsS0FBSyxDQUFDYixZQUFZLENBQUNxSixPQUFPLENBQUMsQ0FBQztJQUM3QztJQUNBL00sS0FBSyxFQUFFc0csUUFBUSxDQUFDcEcsTUFBTSxDQUFDRixLQUFLO0lBQzVCeU0sY0FBYyxFQUFFbkcsUUFBUSxDQUFDcEcsTUFBTSxDQUFDdU0sY0FBYztJQUM5Qy9GLE1BQU0sRUFBRUosUUFBUSxDQUFDcEcsTUFBTSxDQUFDd0c7RUFDMUIsQ0FBQyxDQUFDO0VBRUYsSUFBSSxDQUFDSixRQUFRLENBQUNRLElBQUksRUFBRTtJQUNsQjtJQUNBSCxRQUFRLEdBQUdpRyxxQkFBcUIsQ0FBQ2pHLFFBQVEsRUFBRXBDLEtBQUssQ0FBQzlCLFFBQVEsRUFBRThCLEtBQUssQ0FBQ2IsWUFBWSxDQUFDO0VBQ2hGLENBQUMsTUFBTTtJQUNMO0lBQ0E7SUFDQTtJQUNBaUQsUUFBUSxDQUFDd0csbUJBQW1CLENBQUM3RyxRQUFRLENBQUNwRyxNQUFNLEVBQUVvRyxRQUFRLENBQUM4RyxpQkFBaUIsQ0FBQztJQUN6RXpHLFFBQVEsQ0FBQytGLGlCQUFpQixDQUFDbkksS0FBSyxDQUFDOUIsUUFBUSxDQUFDO0VBQzVDO0VBRUEsSUFBT1UsT0FBTyxHQUFlb0IsS0FBSyxDQUEzQnBCLE9BQU87SUFBRUQsU0FBUyxHQUFJcUIsS0FBSyxDQUFsQnJCLFNBQVM7RUFFekIsSUFBSTZCLFFBQVEsR0FBQTNGLGFBQUEsQ0FBQUEsYUFBQSxLQUNQbUYsS0FBSztJQUNScEIsT0FBTyxFQUFFbUQsUUFBUSxDQUFDK0csY0FBYyxDQUFDbEssT0FBTyxDQUFDLEdBQUdSLFNBQVMsR0FBR1EsT0FBTztJQUMvREQsU0FBUyxFQUFFb0QsUUFBUSxDQUFDK0csY0FBYyxDQUFDbkssU0FBUyxDQUFDLEdBQUdQLFNBQVMsR0FBR087RUFBUyxFQUN0RTtFQUVELElBQUFvSyxvQkFBQSxHQUEyQixJQUFBekQsOEJBQWtCLEVBQUNsRCxRQUFRLEVBQUU1QixRQUFRLENBQUM7SUFBMUQzQyxTQUFTLEdBQUFrTCxvQkFBQSxDQUFUbEwsU0FBUztJQUFFcUMsS0FBSyxHQUFBNkksb0JBQUEsQ0FBTDdJLEtBQUs7RUFDdkJNLFFBQVEsR0FBR1QsMkJBQTJCLENBQUNTLFFBQVEsRUFBRTtJQUFDM0MsU0FBUyxFQUFUQSxTQUFTO0lBQUVxQyxLQUFLLEVBQUxBLEtBQUs7SUFBRUMsR0FBRyxFQUFIQTtFQUFHLENBQUMsQ0FBQztFQUV6RSxJQUFJRCxLQUFLLENBQUN2RSxNQUFNLENBQUNpRixTQUFTLENBQUNsRixPQUFPLElBQUlxRyxRQUFRLENBQUNwRyxNQUFNLENBQUNpRixTQUFTLENBQUNsRixPQUFPLEVBQUU7SUFDdkU4RSxRQUFRLEdBQUdLLHFCQUFxQixDQUFDTCxRQUFRLENBQUM7RUFDNUM7O0VBRUE7RUFDQSxJQUFJUixLQUFLLENBQUNoQixTQUFTLENBQUMxRixNQUFNLEVBQUU7SUFDMUJrSCxRQUFRLEdBQUEzRixhQUFBLENBQUFBLGFBQUEsS0FDSDJGLFFBQVE7TUFDWHhCLFNBQVMsRUFBRXdCLFFBQVEsQ0FBQ3hCLFNBQVMsQ0FBQ29CLEdBQUcsQ0FBQyxVQUFBNEksUUFBUSxFQUFJO1FBQzVDLElBQUFDLGdCQUFBLEdBQStDRCxRQUFRLENBQUNwTCxNQUFNO1VBQTlDc0wsV0FBVyxHQUFBRCxnQkFBQSxDQUFuQlIsS0FBSztVQUFtQlUsV0FBVyxPQUFBckUseUJBQUEsYUFBQW1FLGdCQUFBLEdBQW5DUixLQUFLLEVBQUFySSxHQUFBLENBQUExSCxjQUFBO1FBQ2IsT0FBTytQLEtBQUssSUFBSU8sUUFBUSxDQUFDcEwsTUFBTSxHQUFBL0MsYUFBQSxDQUFBQSxhQUFBLEtBRXRCbU8sUUFBUTtVQUNYcEwsTUFBTSxFQUFBL0MsYUFBQSxDQUFBQSxhQUFBLEtBQ0RzTyxXQUFXLFdBQUFuTyxnQkFBQSxpQkFDYmtGLEtBQUssQ0FBQzFFLEVBQUUsRUFBRzBOLFdBQVc7UUFDeEIsS0FFSEYsUUFBUTtNQUNkLENBQUM7SUFBQyxFQUNIO0VBQ0g7O0VBRUE7RUFDQXhJLFFBQVEsR0FBQTNGLGFBQUEsQ0FBQUEsYUFBQSxLQUNIMkYsUUFBUTtJQUNYekMsVUFBVSxFQUFFeUMsUUFBUSxDQUFDekMsVUFBVSxDQUFDcUMsR0FBRyxDQUFDLFVBQUFzRixPQUFPO01BQUEsT0FDekNBLE9BQU8sS0FBSzNELFFBQVEsQ0FBQ3ZHLEVBQUUsR0FBRzRHLFFBQVEsQ0FBQzVHLEVBQUUsR0FBR2tLLE9BQU87SUFBQSxDQUNqRDtFQUFDLEVBQ0Y7RUFFRCxPQUFPbEYsUUFBUTtBQUNqQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTbUQsK0JBQStCQSxDQUM3QzNELEtBQWUsRUFDZndCLE1BQW1FLEVBQ3pEO0VBQ1YsSUFBT08sUUFBUSxHQUFzQ1AsTUFBTSxDQUFwRE8sUUFBUTtJQUFFNEMsU0FBUyxHQUEyQm5ELE1BQU0sQ0FBMUNtRCxTQUFTO0lBQUV5RSxZQUFZLEdBQWE1SCxNQUFNLENBQS9CNEgsWUFBWTtJQUFFN0YsT0FBTyxHQUFJL0IsTUFBTSxDQUFqQitCLE9BQU87RUFDakQsSUFBSSxDQUFDeEIsUUFBUSxDQUFDcEcsTUFBTSxDQUFDd0csTUFBTSxFQUFFO0lBQzNCLE9BQU9uQyxLQUFLO0VBQ2Q7RUFFQSxJQUFNa0MsT0FBTyxHQUFHbEMsS0FBSyxDQUFDOUIsUUFBUSxDQUFDNkQsUUFBUSxDQUFDcEcsTUFBTSxDQUFDd0csTUFBTSxDQUFDO0VBRXRELElBQU1oQyxHQUFHLEdBQUdILEtBQUssQ0FBQ3BDLE1BQU0sQ0FBQzZFLFNBQVMsQ0FBQyxVQUFBUixDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDekcsRUFBRSxLQUFLdUcsUUFBUSxDQUFDdkcsRUFBRTtFQUFBLEVBQUM7RUFDN0QsSUFBSTRHLFFBQVEsR0FBR0wsUUFBUSxDQUFDbUQsaUJBQWlCLENBQUNQLFNBQVMsQ0FBQztFQUNwRCxJQUFJeUUsWUFBWSxFQUFFaEgsUUFBUSxHQUFHQSxRQUFRLENBQUNpSCxvQkFBb0IsQ0FBQ0QsWUFBWSxDQUFDO0VBRXhFaEgsUUFBUSxDQUFDa0gsd0JBQXdCLENBQUNwSCxPQUFPLEVBQUVxQixPQUFPLENBQUM7O0VBRW5EO0VBQ0EsSUFBSWdHLFlBQVksR0FBRzFJLHFCQUFxQixDQUFDYixLQUFLLENBQUM7RUFFL0MsSUFBTXdKLGFBQWEsR0FBR3pILFFBQVEsQ0FBQ3NCLGNBQWMsQ0FBQ0UsT0FBTyxDQUFDO0VBQ3RELElBQUksQ0FBQWlHLGFBQWEsYUFBYkEsYUFBYSx1QkFBYkEsYUFBYSxDQUFFQyxnQkFBZ0IsTUFBS0MseUJBQWMsQ0FBQ0MsS0FBSyxJQUFJaEYsU0FBUyxDQUFDNkUsYUFBYSxDQUFDMUMsS0FBSyxDQUFDLEVBQUU7SUFDOUY7SUFDQTFFLFFBQVEsQ0FBQ3dILGtCQUFrQixDQUFDSixhQUFhLENBQUNLLEtBQUssRUFBRTtNQUMvQ0MsZ0JBQWdCLEVBQUFqUCxhQUFBLENBQUFBLGFBQUEsS0FDWHVILFFBQVEsQ0FBQ3pHLE1BQU0sQ0FBQ29PLE9BQU8sQ0FBQ1AsYUFBYSxDQUFDSyxLQUFLLENBQUMsQ0FBQ0MsZ0JBQWdCO1FBQ2hFRSxZQUFZLEVBQUU7TUFBSztJQUV2QixDQUFDLENBQUM7SUFFRlQsWUFBWSxHQUFBMU8sYUFBQSxDQUFBQSxhQUFBLEtBQ1AwTyxZQUFZO01BQ2YzTCxNQUFNLEVBQUUyTCxZQUFZLENBQUMzTCxNQUFNLENBQUN3QyxHQUFHLENBQUMsVUFBQTZCLENBQUM7UUFBQSxPQUFLQSxDQUFDLENBQUN6RyxFQUFFLEtBQUt1RyxRQUFRLENBQUN2RyxFQUFFLEdBQUc0RyxRQUFRLEdBQUdILENBQUM7TUFBQSxDQUFDO0lBQUMsRUFDNUU7RUFDSDtFQUVBLElBQU1tRCxZQUFZLEdBQUdtRSxZQUFZLENBQUMxTCxTQUFTLENBQUNzQyxHQUFHLENBQUM7RUFDaEQsSUFBQThKLG9CQUFBLEdBQTJCLElBQUEzRSw4QkFBa0IsRUFBQ2xELFFBQVEsRUFBRW1ILFlBQVksRUFBRW5FLFlBQVksQ0FBQztJQUE1RXZILFNBQVMsR0FBQW9NLG9CQUFBLENBQVRwTSxTQUFTO0lBQUVxQyxLQUFLLEdBQUErSixvQkFBQSxDQUFML0osS0FBSztFQUV2QixJQUNFLENBQUFzSixhQUFhLGFBQWJBLGFBQWEsdUJBQWJBLGFBQWEsQ0FBRUMsZ0JBQWdCLE1BQUtDLHlCQUFjLENBQUNDLEtBQUssSUFDeERoRixTQUFTLENBQUM2RSxhQUFhLGFBQWJBLGFBQWEsdUJBQWJBLGFBQWEsQ0FBRVUsS0FBSyxDQUFDLEtBQUtDLHNCQUFXLENBQUNDLGFBQWEsSUFDN0QsQ0FBQ2hCLFlBQVksRUFDYjtJQUNBO0lBQ0EsSUFBTWlCLGFBQWEsR0FBRyxJQUFBQyxxQ0FBOEIsRUFBQztNQUNuREosS0FBSyxFQUFFQyxzQkFBVyxDQUFDQyxhQUFhO01BQ2hDdEQsS0FBSyxFQUFFNUcsS0FBSyxDQUFDdkUsTUFBTSxDQUFDNk4sYUFBYSxDQUFDMUMsS0FBSyxDQUFDO01BQ3hDeUQsYUFBYSxFQUFFckssS0FBSyxDQUFDdkUsTUFBTSxDQUFDdUUsS0FBSyxDQUFDbUQsY0FBYyxDQUFDRSxPQUFPLENBQUMsQ0FBQ2hILE1BQU0sQ0FBQztNQUNqRXNOLEtBQUssRUFBRTNKLEtBQUssQ0FBQ3ZFLE1BQU0sQ0FBQ3VILFNBQVMsQ0FBQ3NHLGFBQWEsQ0FBQ0ssS0FBSyxDQUFDO01BQ2xEVyxXQUFXLEVBQUU7SUFDZixDQUFDLENBQUM7SUFDRjtJQUNBdEssS0FBSyxDQUFDMEosa0JBQWtCLENBQUNKLGFBQWEsQ0FBQ0ssS0FBSyxFQUFFO01BQzVDWSxjQUFjLEVBQUUsSUFBSTtNQUNwQlgsZ0JBQWdCLEVBQUFqUCxhQUFBLENBQUFBLGFBQUEsS0FDWHFGLEtBQUssQ0FBQ3ZFLE1BQU0sQ0FBQ29PLE9BQU8sQ0FBQ1AsYUFBYSxDQUFDSyxLQUFLLENBQUMsQ0FBQ0MsZ0JBQWdCO1FBQzdERSxZQUFZLEVBQUU7TUFBSSxFQUNuQjtNQUNESyxhQUFhLEVBQWJBO0lBQ0YsQ0FBQyxDQUFDO0VBQ0o7RUFDQSxPQUFPdEssMkJBQTJCLENBQUN3SixZQUFZLEVBQUU7SUFBQzFMLFNBQVMsRUFBVEEsU0FBUztJQUFFcUMsS0FBSyxFQUFMQSxLQUFLO0lBQUVDLEdBQUcsRUFBSEE7RUFBRyxDQUFDLENBQUM7QUFDM0U7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNnRCwyQkFBMkJBLENBQ3pDbkQsS0FBZSxFQUNmd0IsTUFBeUQsRUFDL0M7RUFDVixJQUFPTyxRQUFRLEdBQUlQLE1BQU0sQ0FBbEJPLFFBQVE7RUFDZixJQUFNNUIsR0FBRyxHQUFHSCxLQUFLLENBQUNwQyxNQUFNLENBQUM2RSxTQUFTLENBQUMsVUFBQVIsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ3pHLEVBQUUsS0FBS3VHLFFBQVEsQ0FBQ3ZHLEVBQUU7RUFBQSxFQUFDO0VBQzdELElBQU1rSixLQUFLLEdBQUd4TSxNQUFNLENBQUNxQyxJQUFJLENBQUNpSCxNQUFNLENBQUM0SCxZQUFZLENBQUM7RUFFOUMsSUFBTUEsWUFBWSxHQUFBdk8sYUFBQSxDQUFBQSxhQUFBLEtBQ2JrSCxRQUFRLENBQUNwRyxNQUFNLENBQUN1SCxTQUFTLEdBQ3pCMUIsTUFBTSxDQUFDNEgsWUFBWSxDQUN2QjtFQUVELElBQU1oSCxRQUFRLEdBQUdMLFFBQVEsQ0FBQ21ELGlCQUFpQixDQUFDO0lBQUNoQyxTQUFTLEVBQUVrRztFQUFZLENBQUMsQ0FBQztFQUV0RSxJQUFJaEgsUUFBUSxDQUFDK0Msd0JBQXdCLENBQUNULEtBQUssQ0FBQyxFQUFFO0lBQzVDLElBQU1VLFlBQVksR0FBR3BGLEtBQUssQ0FBQ25DLFNBQVMsQ0FBQ3NDLEdBQUcsQ0FBQztJQUN6QyxJQUFBdUssb0JBQUEsR0FBMkIsSUFBQXBGLDhCQUFrQixFQUFDbEQsUUFBUSxFQUFFcEMsS0FBSyxFQUFFb0YsWUFBWSxDQUFDO01BQXJFdkgsU0FBUyxHQUFBNk0sb0JBQUEsQ0FBVDdNLFNBQVM7TUFBRXFDLEtBQUssR0FBQXdLLG9CQUFBLENBQUx4SyxLQUFLO0lBQ3ZCLE9BQU9ILDJCQUEyQixDQUFDQyxLQUFLLEVBQUU7TUFBQ25DLFNBQVMsRUFBVEEsU0FBUztNQUFFcUMsS0FBSyxFQUFMQSxLQUFLO01BQUVDLEdBQUcsRUFBSEE7SUFBRyxDQUFDLENBQUM7RUFDcEU7RUFFQSxPQUFPSiwyQkFBMkIsQ0FBQ0MsS0FBSyxFQUFFO0lBQUNFLEtBQUssRUFBRWtDLFFBQVE7SUFBRWpDLEdBQUcsRUFBSEE7RUFBRyxDQUFDLENBQUM7QUFDbkU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTXdLLDRCQUE0QixHQUFBclAsT0FBQSxDQUFBcVAsNEJBQUEsR0FBRyxTQUEvQkEsNEJBQTRCQSxDQUN2QzNLLEtBQVEsRUFBQTRLLEtBQUEsRUFFRjtFQUFBLElBRExqUixLQUFLLEdBQUFpUixLQUFBLENBQUxqUixLQUFLO0VBRU4sSUFBTTZDLFdBQVcsR0FBR3JELEtBQUssQ0FBQ0MsT0FBTyxDQUFDTyxLQUFLLENBQUMsR0FBR0EsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxLQUFLO0VBQzNELElBQU0ySSxTQUFTLEdBQUF6SCxhQUFBLENBQUFBLGFBQUEsS0FDVm1GLEtBQUs7SUFDUlgsZUFBZSxFQUFBeEUsYUFBQSxDQUFBQSxhQUFBLEtBQ1ZtRixLQUFLLENBQUNYLGVBQWU7TUFDeEI3QyxXQUFXLEVBQVhBO0lBQVc7RUFDWixFQUNGO0VBQ0Q7RUFDQSxPQUFPd0QsS0FBSyxDQUFDcEMsTUFBTSxDQUFDaU4sTUFBTSxDQUFDLFVBQUNDLElBQUksRUFBRTdJLENBQUMsRUFBSztJQUN0QyxJQUFJQSxDQUFDLENBQUN0RyxNQUFNLENBQUNpRixTQUFTLENBQUNsRixPQUFPLElBQUl1RyxDQUFDLENBQUNNLElBQUksS0FBSyxNQUFNLEVBQUU7TUFDbkQsT0FBT2dELDJCQUEyQixDQUFDdUYsSUFBSSxFQUFFO1FBQUMvSSxRQUFRLEVBQUVFLENBQUM7UUFBRXdCLElBQUksRUFBRSxhQUFhO1FBQUVqSCxXQUFXLEVBQVhBO01BQVcsQ0FBQyxDQUFDO0lBQzNGO0lBQ0EsT0FBT3NPLElBQUk7RUFDYixDQUFDLEVBQUV4SSxTQUFTLENBQUM7QUFDZixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTeUksNkJBQTZCQSxDQUMzQy9LLEtBQWUsRUFDZndCLE1BQTJELEVBQ2pEO0VBQ1YsT0FBT3dKLGdCQUFnQixDQUFDaEwsS0FBSyxFQUFFd0IsTUFBTSxDQUFDO0FBQ3hDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTeUosK0JBQStCQSxDQUM3Q2pMLEtBQVEsRUFBQWtMLEtBQUEsRUFFTDtFQUFBLElBREYxUCxFQUFFLEdBQUEwUCxLQUFBLENBQUYxUCxFQUFFO0lBQUUyUCxlQUFlLEdBQUFELEtBQUEsQ0FBZkMsZUFBZTtFQUVwQixJQUFNMVEsTUFBTSxHQUFHdUYsS0FBSyxDQUFDaEMsT0FBTyxDQUFDZ0UsSUFBSSxDQUFDLFVBQUFwSSxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDNEIsRUFBRSxLQUFLQSxFQUFFO0VBQUEsRUFBQztFQUVuRCxJQUFJLENBQUNmLE1BQU0sRUFBRTtJQUNYLE9BQU91RixLQUFLO0VBQ2Q7RUFFQSxJQUFNb0wsU0FBUyxHQUFBdlEsYUFBQSxDQUFBQSxhQUFBLEtBQ1ZKLE1BQU07SUFDVDBRLGVBQWUsRUFBZkE7RUFBZSxFQUNoQjtFQUVELElBQU0zSyxRQUFRLEdBQUEzRixhQUFBLENBQUFBLGFBQUEsS0FDVG1GLEtBQUs7SUFDUmhDLE9BQU8sRUFBRSxJQUFBcU4sc0JBQUssRUFBU0QsU0FBUyxDQUFDLENBQUNwTCxLQUFLLENBQUNoQyxPQUFPO0VBQUMsRUFDakQ7RUFFRCxJQUFNc04sbUJBQW1CLEdBQUdDLG9CQUFvQixDQUFDSCxTQUE0QixDQUFDO0VBRTlFLE9BQU9JLGdDQUFnQyxDQUFDaEwsUUFBUSxFQUFFO0lBQUNoRixFQUFFLEVBQUZBLEVBQUU7SUFBRTBCLElBQUksRUFBRW9PO0VBQW1CLENBQUMsQ0FBQztBQUNwRjtBQUVPLFNBQVNHLHdCQUF3QkEsQ0FDdEN6TCxLQUFlLEVBQ2Z3QixNQUFzRCxFQUM1QztFQUFBLElBQUFrSyxnQkFBQTtFQUNWLElBQU9DLFFBQVEsR0FBZW5LLE1BQU0sQ0FBN0JtSyxRQUFRO0lBQUVQLFNBQVMsR0FBSTVKLE1BQU0sQ0FBbkI0SixTQUFTO0VBQzFCLElBQU1RLFNBQVMsR0FBRzVMLEtBQUssQ0FBQ2hDLE9BQU8sQ0FBQ2dFLElBQUksQ0FBQyxVQUFBcEksQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQzRCLEVBQUUsS0FBS21RLFFBQVE7RUFBQSxFQUFDO0VBQzVELElBQUksQ0FBQ0MsU0FBUyxFQUFFO0lBQ2QsT0FBTzVMLEtBQUs7RUFDZDs7RUFFQTtFQUNBLElBQU02TCxtQkFBbUIsSUFBQUgsZ0JBQUEsR0FBRyxJQUFBSSwrQkFBZSxFQUFDRixTQUFTLEVBQUU1TCxLQUFLLENBQUNILE1BQU0sQ0FBQyxjQUFBNkwsZ0JBQUEsY0FBQUEsZ0JBQUEsR0FBSTtJQUFDL1AsTUFBTSxFQUFFLENBQUM7RUFBQyxDQUFDO0VBQ3BGLElBQU1vUSxtQkFBbUIsR0FBRyxJQUFBRCwrQkFBZSxFQUFDVixTQUFTLEVBQUVwTCxLQUFLLENBQUNILE1BQU0sQ0FBQztFQUNwRSxJQUFJLENBQUNrTSxtQkFBbUIsSUFBSSxJQUFBMUssbUJBQU8sRUFBQ3dLLG1CQUFtQixFQUFFRSxtQkFBbUIsQ0FBQyxFQUFFO0lBQzdFLE9BQU8vTCxLQUFLO0VBQ2Q7O0VBRUE7RUFDQSxJQUFNaUQsT0FBTyxHQUFHbkMsZ0JBQWdCLENBQUMrSyxtQkFBbUIsRUFBRUUsbUJBQW1CLENBQUM7RUFDMUUsT0FBTzlJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDOztFQUV0QixJQUFNbUIsV0FBVyxHQUFHcEUsS0FBSyxDQUFDaEMsT0FBTyxDQUFDeUUsU0FBUyxDQUFDLFVBQUE3SSxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDNEIsRUFBRSxLQUFLbVEsUUFBUTtFQUFBLEVBQUM7RUFDbkUsSUFBSXZILFdBQVcsR0FBRyxDQUFDLEVBQUU7SUFDbkIsT0FBT3BFLEtBQUs7RUFDZDtFQUNBLE9BQU9nTCxnQkFBZ0IsQ0FDckJoTCxLQUFLLEVBQ0wsSUFBQWdNLGtCQUFTLEVBQUM1SCxXQUFXLEVBQUVsTSxNQUFNLENBQUNxQyxJQUFJLENBQUMwSSxPQUFPLENBQUMsRUFBRS9LLE1BQU0sQ0FBQytULE1BQU0sQ0FBQ2hKLE9BQU8sQ0FBQyxDQUNyRSxDQUFDO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVMrSCxnQkFBZ0JBLENBQzlCaEwsS0FBUSxFQUNSd0IsTUFBOEMsRUFDM0M7RUFDSCxJQUFPckIsR0FBRyxHQUFvQnFCLE1BQU0sQ0FBN0JyQixHQUFHO0lBQUErTCxrQkFBQSxHQUFvQjFLLE1BQU0sQ0FBeEIySyxVQUFVO0lBQVZBLFVBQVUsR0FBQUQsa0JBQUEsY0FBRyxDQUFDLEdBQUFBLGtCQUFBO0VBQzFCLElBQU1OLFNBQVMsR0FBRzVMLEtBQUssQ0FBQ2hDLE9BQU8sQ0FBQ21DLEdBQUcsQ0FBQztFQUNwQyxJQUFJLENBQUN5TCxTQUFTLEVBQUU7SUFDZGxELGVBQU8sQ0FBQ0MsS0FBSyxZQUFBeEIsTUFBQSxDQUFZaEgsR0FBRyxrQkFBZSxDQUFDO0lBQzVDLE9BQU9ILEtBQUs7RUFDZDtFQUNBLElBQ0U3RyxLQUFLLENBQUNDLE9BQU8sQ0FBQ29JLE1BQU0sQ0FBQ2lDLElBQUksQ0FBQyxLQUN6QixDQUFDdEssS0FBSyxDQUFDQyxPQUFPLENBQUNvSSxNQUFNLENBQUM3SCxLQUFLLENBQUMsSUFBSTZILE1BQU0sQ0FBQ2lDLElBQUksQ0FBQ25LLE1BQU0sS0FBS2tJLE1BQU0sQ0FBQzdILEtBQUssQ0FBQ0wsTUFBTSxDQUFDLEVBQzVFO0lBQ0FvUCxlQUFPLENBQUNDLEtBQUssQ0FBQywyRUFBMkUsQ0FBQztJQUMxRixPQUFPM0ksS0FBSztFQUNkO0VBQ0E7RUFDQSxJQUFNMEUsS0FBSyxHQUFHLElBQUEwSCxvQkFBTyxFQUFDNUssTUFBTSxDQUFDaUMsSUFBSSxDQUFDO0VBQ2xDLElBQU13SSxNQUFNLEdBQUc5UyxLQUFLLENBQUNDLE9BQU8sQ0FBQ29JLE1BQU0sQ0FBQ2lDLElBQUksQ0FBQyxHQUFHLElBQUEySSxvQkFBTyxFQUFDNUssTUFBTSxDQUFDN0gsS0FBSyxDQUFDLEdBQUcsQ0FBQzZILE1BQU0sQ0FBQzdILEtBQUssQ0FBQztFQUVsRixJQUFJeVIsU0FBUyxHQUFHUSxTQUFTO0VBQ3pCLElBQUlwTCxRQUFRLEdBQUdSLEtBQUs7RUFFcEIsSUFBSXFNLGtCQUE0QixHQUFHLEVBQUU7RUFBQyxJQUFBQyxLQUFBLFlBQUFBLE1BQUEsRUFDQztJQUNyQyxJQUFNN0ksSUFBSSxHQUFHaUIsS0FBSyxDQUFDbE0sQ0FBQyxDQUFDO0lBQ3JCLElBQU1tQixLQUFLLEdBQUdzUyxNQUFNLENBQUN6VCxDQUFDLENBQUM7SUFDdkI7SUFDQTtJQUNBLElBQUkrVCxHQUFHO0lBQ1AsSUFBSTlJLElBQUksS0FBSyxNQUFNLElBQUl0SyxLQUFLLENBQUNDLE9BQU8sQ0FBQ08sS0FBSyxDQUFDLEVBQUU7TUFDM0M7TUFDQTRTLEdBQUcsR0FBRzVTLEtBQUssQ0FBQ2tSLE1BQU0sQ0FBQyxVQUFDQyxJQUFJLEVBQUUwQixDQUFDLEVBQUs7UUFDOUIsT0FBT0MsaUJBQWlCLENBQUMzQixJQUFJLEVBQUVNLFNBQVMsRUFBRTNILElBQUksRUFBRStJLENBQUMsRUFBRUwsVUFBVSxDQUFDO01BQ2hFLENBQUMsRUFBRTNMLFFBQVEsQ0FBQztJQUNkLENBQUMsTUFBTTtNQUNMK0wsR0FBRyxHQUFHRSxpQkFBaUIsQ0FBQ2pNLFFBQVEsRUFBRTRLLFNBQVMsRUFBRTNILElBQUksRUFBRTlKLEtBQUssRUFBRXdTLFVBQVUsQ0FBQztJQUN2RTtJQUNBZixTQUFTLEdBQUdtQixHQUFHLENBQUM5UixNQUFNO0lBQ3RCK0YsUUFBUSxHQUFHK0wsR0FBRyxDQUFDdk0sS0FBSztJQUNwQnFNLGtCQUFrQixHQUFHQSxrQkFBa0IsQ0FBQ2xGLE1BQU0sQ0FBQ29GLEdBQUcsQ0FBQ0Ysa0JBQWtCLENBQUM7RUFDeEUsQ0FBQztFQWpCRCxLQUFLLElBQUk3VCxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdrTSxLQUFLLENBQUNwTCxNQUFNLEVBQUVkLENBQUMsRUFBRTtJQUFBOFQsS0FBQTtFQUFBO0VBbUJyQyxJQUFNSSxjQUFjLEdBQUcxTSxLQUFLLENBQUNoQyxPQUFPLENBQUNnRSxJQUFJLENBQUMsVUFBQXBJLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUMrUyxJQUFJLEtBQUtDLDRCQUFpQixDQUFDQyxRQUFRO0VBQUEsRUFBQztFQUVyRixJQUFJSCxjQUFjLElBQUlBLGNBQWMsQ0FBQ2xSLEVBQUUsS0FBSzRQLFNBQVMsQ0FBQzVQLEVBQUUsRUFBRTtJQUN4RDtJQUNBNFAsU0FBUyxDQUFDdUIsSUFBSSxHQUFHQyw0QkFBaUIsQ0FBQ0UsSUFBSTtFQUN6Qzs7RUFFQTtFQUNBdE0sUUFBUSxHQUFHLElBQUEvSCxVQUFHLEVBQUMsQ0FBQyxTQUFTLEVBQUUwSCxHQUFHLENBQUMsRUFBRWlMLFNBQVMsRUFBRTVLLFFBQVEsQ0FBQzs7RUFFckQ7RUFDQSxJQUFNdU0sZ0JBQWdCLEdBQUcsSUFBQUMsNkJBQXNCLEVBQzdDLElBQUFDLG1CQUFJLEVBQUNaLGtCQUFrQixDQUFDLEVBQ3hCN0wsUUFBUSxDQUFDdEMsUUFBUSxFQUNqQnNDLFFBQVEsQ0FBQ3hDLE9BQU8sRUFDaEJ3QyxRQUFRLENBQUM1QyxNQUNYLENBQUM7RUFFRDRDLFFBQVEsR0FBRyxJQUFBL0gsVUFBRyxFQUFDLENBQUMsVUFBVSxDQUFDLEVBQUVzVSxnQkFBZ0IsRUFBRXZNLFFBQVEsQ0FBQzs7RUFFeEQ7RUFDQSxJQUFNME0sY0FBYyxHQUFHLElBQUFDLHVCQUFnQixFQUFDM00sUUFBUSxDQUFDdEMsUUFBUSxFQUFFc0MsUUFBUSxDQUFDeEMsT0FBTyxDQUFDbUMsR0FBRyxDQUFDLENBQUM7RUFFakZLLFFBQVEsR0FBRyxJQUFBL0gsVUFBRyxFQUFDLENBQUMsU0FBUyxFQUFFMEgsR0FBRyxDQUFDLEVBQUUrTSxjQUFjLEVBQUUxTSxRQUFRLENBQUM7O0VBRTFEO0VBQ0E7RUFDQUEsUUFBUSxHQUFHNE0sd0JBQXdCLENBQUM1TSxRQUFRLEVBQUU2TCxrQkFBa0IsRUFBRWpCLFNBQVMsQ0FBQzs7RUFFNUU7RUFDQSxJQUFJQSxTQUFTLENBQUM3SSxJQUFJLEtBQUs4Syx1QkFBWSxDQUFDQyxTQUFTLElBQUk1SSxLQUFLLENBQUNzQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7SUFDeEV4RyxRQUFRLEdBQUcrTSwrQkFBK0IsQ0FBQy9NLFFBQVEsRUFBRWdCLE1BQU0sQ0FBQ3JCLEdBQUcsQ0FBQztFQUNsRTtFQUVBLE9BQU9LLFFBQVE7QUFDakI7QUFFQSxTQUFTZ04sK0JBQStCQSxDQUFDL1MsTUFBTSxFQUFFMFIsVUFBVSxFQUFFeFMsS0FBSyxFQUFFdUUsUUFBUSxFQUFFO0VBQzVFLElBQUlrTixTQUFTLEdBQUczUSxNQUFNO0VBQ3RCLElBQUlBLE1BQU0sQ0FBQzBILE1BQU0sQ0FBQ2dLLFVBQVUsQ0FBQyxFQUFFO0lBQzdCO0lBQ0FmLFNBQVMsR0FBR3FDLCtCQUErQixDQUFDaFQsTUFBTSxFQUFFMFIsVUFBVSxFQUFFak8sUUFBUSxDQUFDO0VBQzNFO0VBQ0EsSUFBSXZFLEtBQUssRUFBRTtJQUNULElBQU0rVCxTQUFTLEdBQUd0QyxTQUFTLENBQUNqSixNQUFNLENBQUNsSSxLQUFLLENBQUMsQ0FBQztJQUMxQ3lULFNBQVMsQ0FBQ3ZCLFVBQVUsQ0FBQyxHQUFHeFMsS0FBSztJQUM3QnlSLFNBQVMsR0FBRyxJQUFBM1MsVUFBRyxFQUFDLENBQUMsUUFBUSxDQUFDLEVBQUVpVixTQUFTLEVBQUV0QyxTQUFTLENBQUM7RUFDbkQ7RUFDQSxPQUFPQSxTQUFTO0FBQ2xCO0FBRUEsU0FBU3FDLCtCQUErQkEsQ0FBQ2hULE1BQU0sRUFBRTBSLFVBQVUsRUFBRWpPLFFBQVEsRUFBRTtFQUNyRSxJQUFNaUUsTUFBTSxHQUFHMUgsTUFBTSxDQUFDMEgsTUFBTSxDQUFDZ0ssVUFBVSxDQUFDO0VBRXhDLElBQUkxUixNQUFNLENBQUMwSCxNQUFNLENBQUM3SSxNQUFNLEtBQUssQ0FBQyxJQUFJNlMsVUFBVSxLQUFLLENBQUMsRUFBRTtJQUNsRDtJQUNBLE9BQU8sSUFBQXdCLHVCQUFnQixFQUFDO01BQUNuUyxFQUFFLEVBQUVmLE1BQU0sQ0FBQ2U7SUFBRSxDQUFDLENBQUM7RUFDMUM7RUFFQSxJQUFJMkcsTUFBTSxFQUFFO0lBQ1YxSCxNQUFNLEdBQUcsSUFBQW1ULHVCQUFnQixFQUFDblQsTUFBTSxFQUFFMEgsTUFBTSxDQUFDO0VBQzNDO0VBRUEsU0FBQTBMLEVBQUEsTUFBQUMsSUFBQSxHQUFtQixDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFlBQVksQ0FBQyxFQUFBRCxFQUFBLEdBQUFDLElBQUEsQ0FBQXhVLE1BQUEsRUFBQXVVLEVBQUEsSUFBRTtJQUE1RCxJQUFNcEssSUFBSSxHQUFBcUssSUFBQSxDQUFBRCxFQUFBO0lBQ2IsSUFBSTFVLEtBQUssQ0FBQ0MsT0FBTyxDQUFDcUIsTUFBTSxDQUFDZ0osSUFBSSxDQUFDLENBQUMsRUFBRTtNQUMvQixJQUFNc0ssT0FBTyxHQUFHdFQsTUFBTSxDQUFDZ0osSUFBSSxDQUFDLENBQUN4SixLQUFLLENBQUMsQ0FBQztNQUNwQzhULE9BQU8sQ0FBQ3hHLE1BQU0sQ0FBQzRFLFVBQVUsRUFBRSxDQUFDLENBQUM7TUFDN0IxUixNQUFNLEdBQUcsSUFBQWhDLFVBQUcsRUFBQyxDQUFDZ0wsSUFBSSxDQUFDLEVBQUVzSyxPQUFPLEVBQUV0VCxNQUFNLENBQUM7SUFDdkM7RUFDRjs7RUFFQTtFQUNBLElBQU11VCxXQUFXLEdBQUcsSUFBQUMsd0JBQWlCLEVBQUN4VCxNQUFNLEVBQUV5RCxRQUFRLENBQUM7RUFFdkQsSUFBTWdRLFVBQVUsR0FBQXJULGFBQUEsQ0FBQUEsYUFBQSxLQUNYSixNQUFNLEdBRUx1VCxXQUFXLEdBQUc7SUFBQ3pSLE1BQU0sRUFBRXlSLFdBQVcsYUFBWEEsV0FBVyx1QkFBWEEsV0FBVyxDQUFFelIsTUFBTTtJQUFFNFIsSUFBSSxFQUFFSCxXQUFXLGFBQVhBLFdBQVcsdUJBQVhBLFdBQVcsQ0FBRUc7RUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQzlFO0VBRUQsSUFBTVQsU0FBUyxHQUFHLElBQUFVLGdDQUF5QixFQUFDRixVQUFVLENBQUN2VSxLQUFLLEVBQUV1VSxVQUFVLENBQUM7RUFDekUsT0FBQXJULGFBQUEsQ0FBQUEsYUFBQSxLQUNLcVQsVUFBVTtJQUNidlUsS0FBSyxFQUFFK1Q7RUFBUztBQUVwQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTakIsaUJBQWlCQSxDQUFDek0sS0FBSyxFQUFFdkYsTUFBTSxFQUFFZ0osSUFBSSxFQUFFOUosS0FBSyxFQUFFd1MsVUFBVSxFQUFFa0MsVUFBVyxFQUFFO0VBQzlFLElBQUloQyxrQkFBNEIsR0FBRyxFQUFFO0VBQ3JDLFFBQVE1SSxJQUFJO0lBQ1Y7SUFDQTtJQUNBO0lBQ0EsS0FBSzZLLDJCQUFvQixDQUFDbk0sTUFBTTtNQUFFO1FBQ2hDLElBQU1vTSxTQUFTLE9BQUFuSCxtQkFBQSxhQUFPM00sTUFBTSxDQUFDMEgsTUFBTSxDQUFDO1FBQ3BDMUgsTUFBTSxHQUFHK1MsK0JBQStCLENBQUMvUyxNQUFNLEVBQUUwUixVQUFVLEVBQUV4UyxLQUFLLEVBQUVxRyxLQUFLLENBQUM5QixRQUFRLENBQUM7UUFDbkZtTyxrQkFBa0IsR0FBRyxJQUFBWSxtQkFBSSxLQUFBOUYsTUFBQSxLQUFBQyxtQkFBQSxhQUFLbUgsU0FBUyxPQUFBbkgsbUJBQUEsYUFBSzNNLE1BQU0sQ0FBQzBILE1BQU0sRUFBQyxDQUFDO1FBQzNEO01BQ0Y7SUFDQSxLQUFLbU0sMkJBQW9CLENBQUNuVSxJQUFJO01BQUU7UUFDOUI7UUFDQTtRQUNBO1FBQ0EsSUFBTXFVLFNBQVMsR0FBRy9ULE1BQU0sQ0FBQzBILE1BQU0sQ0FBQ2dLLFVBQVUsQ0FBQztRQUMzQyxJQUFBc0MscUJBQUEsR0FBcUQsSUFBQUMsMkJBQW9CLEVBQ3ZFalUsTUFBTSxFQUNOdUYsS0FBSyxDQUFDOUIsUUFBUSxFQUNkc1EsU0FBUyxFQUNUN1UsS0FBSyxFQUNMd1MsVUFBVSxFQUNWO1lBQUN3QyxXQUFXLEVBQUV4QyxVQUFVLEdBQUc7VUFBQyxDQUM5QixDQUFDO1VBUGN5QyxhQUFhLEdBQUFILHFCQUFBLENBQXJCaFUsTUFBTTtVQUEwQm9VLFVBQVUsR0FBQUoscUJBQUEsQ0FBbkJ2TSxPQUFPO1FBUXJDLElBQUkwTSxhQUFhLEVBQUU7VUFDakJuVSxNQUFNLEdBQUdtVSxhQUFhO1VBQ3RCLElBQUluVSxNQUFNLENBQUNxVSxHQUFHLEVBQUU7WUFDZHJVLE1BQU0sR0FBRyxJQUFBc1UsdUJBQWdCLEVBQUN0VSxNQUFNLEVBQUV1RixLQUFLLENBQUNoQyxPQUFPLENBQUM7WUFDaER2RCxNQUFNLEdBQUcsSUFBQXVVLHVCQUFnQixFQUFDdlUsTUFBTSxFQUFFdUYsS0FBSyxDQUFDaEMsT0FBTyxDQUFDO1VBQ2xEO1VBQ0FnQyxLQUFLLEdBQUcsSUFBQXZILFVBQUcsRUFBQyxDQUFDLFVBQVUsRUFBRStWLFNBQVMsQ0FBQyxFQUFFSyxVQUFVLEVBQUU3TyxLQUFLLENBQUM7VUFDdkQ7VUFDQXZGLE1BQU0sR0FBRyxJQUFBbVQsdUJBQWdCLEVBQUNuVCxNQUFNLEVBQUUrVCxTQUFTLENBQUM7VUFFNUNuQyxrQkFBa0IsR0FBR3VDLGFBQWEsQ0FBQ3pNLE1BQU07UUFDM0M7UUFDQTtRQUNBO01BQ0Y7SUFFQSxLQUFLbU0sMkJBQW9CLENBQUM1SSxPQUFPO01BQUU7UUFDakM7UUFDQTtRQUNBO1FBQ0E7UUFDQSxJQUFNdUosaUJBQWlCLEdBQUcsSUFBQUMsbUJBQUcsRUFBQ3ZWLEtBQUssRUFBRWMsTUFBTSxDQUFDaUwsT0FBTyxDQUFDO1FBRXBELElBQU15SixZQUFZLEdBQUcsSUFBQWxDLG1CQUFJLEVBQ3ZCZ0MsaUJBQWlCLENBQ2Q3TyxHQUFHLENBQUMsVUFBQWdQLEdBQUc7VUFBQSxPQUNOLElBQUF0WCxtQkFBRyxFQUNEa0ksS0FBSyxDQUFDcEMsTUFBTSxDQUFDb0UsSUFBSSxDQUFDLFVBQUFDLENBQUM7WUFBQSxPQUFJQSxDQUFDLENBQUN6RyxFQUFFLEtBQUs0VCxHQUFHO1VBQUEsRUFBQyxFQUNwQyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQ3JCLENBQUM7UUFBQSxDQUNILENBQUMsQ0FDQTNVLE1BQU0sQ0FBQyxVQUFBNkYsQ0FBQztVQUFBLE9BQUlBLENBQUM7UUFBQSxFQUNsQixDQUFDOztRQUVEO1FBQ0ErTCxrQkFBa0IsR0FBRzhDLFlBQVk7O1FBRWpDO1FBQ0EsSUFBTUUsVUFBVSxHQUFHLElBQUFwQyxtQkFBSSxFQUNyQnRULEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUNEeUcsR0FBRyxDQUFDLFVBQUFnUCxHQUFHO1VBQUEsT0FDUCxJQUFBdFgsbUJBQUcsRUFDRGtJLEtBQUssQ0FBQ3BDLE1BQU0sQ0FBQ29FLElBQUksQ0FBQyxVQUFBQyxDQUFDO1lBQUEsT0FBSUEsQ0FBQyxDQUFDekcsRUFBRSxLQUFLNFQsR0FBRztVQUFBLEVBQUMsRUFDcEMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUNyQixDQUFDO1FBQUEsQ0FDSCxDQUFDLENBQ0EzVSxNQUFNLENBQUMsVUFBQTZGLENBQUM7VUFBQSxPQUFJQSxDQUFDO1FBQUEsRUFDbEIsQ0FBQztRQUVEN0YsTUFBTSxHQUFBSSxhQUFBLENBQUFBLGFBQUEsS0FDREosTUFBTTtVQUNUaUwsT0FBTyxFQUFFL0wsS0FBSztVQUNkd0ksTUFBTSxFQUFFa047UUFBVSxFQUNuQjtRQUNEO01BQ0Y7SUFFQTtNQUNFNVUsTUFBTSxHQUFHLElBQUFoQyxVQUFHLEVBQUMsQ0FBQ2dMLElBQUksQ0FBQyxFQUFFOUosS0FBSyxFQUFFYyxNQUFNLENBQUM7TUFDbkM0UixrQkFBa0IsT0FBQWpGLG1CQUFBLGFBQU8zTSxNQUFNLENBQUMwSCxNQUFNLENBQUM7TUFDdkM7RUFDSjtFQUVBLE9BQU87SUFBQzFILE1BQU0sRUFBTkEsTUFBTTtJQUFFNFQsVUFBVSxFQUFWQSxVQUFVO0lBQUVoQyxrQkFBa0IsRUFBbEJBLGtCQUFrQjtJQUFFck0sS0FBSyxFQUFMQTtFQUFLLENBQUM7QUFDeEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTXNQLG9CQUFvQixHQUFBaFUsT0FBQSxDQUFBZ1Usb0JBQUEsR0FBRyxTQUF2QkEsb0JBQW9CQSxDQUMvQnRQLEtBQWUsRUFBQXVQLEtBQUEsRUFFRjtFQUFBLElBRFpwUCxHQUFHLEdBQUFvUCxLQUFBLENBQUhwUCxHQUFHO0lBQUVxUCxPQUFPLEdBQUFELEtBQUEsQ0FBUEMsT0FBTztJQUFBQyxnQkFBQSxHQUFBRixLQUFBLENBQUVwRCxVQUFVO0lBQVZBLFVBQVUsR0FBQXNELGdCQUFBLGNBQUcsQ0FBQyxHQUFBQSxnQkFBQTtFQUU3QixJQUFJLENBQUN6UCxLQUFLLENBQUNoQyxPQUFPLENBQUNtQyxHQUFHLENBQUMsRUFBRTtJQUN2QnVJLGVBQU8sQ0FBQ0MsS0FBSyxZQUFBeEIsTUFBQSxDQUFZaEgsR0FBRyxtQkFBZ0IsQ0FBQztJQUM3QyxPQUFPSCxLQUFLO0VBQ2Q7RUFDQSxJQUFJb0wsU0FBUyxHQUFHcEwsS0FBSyxDQUFDaEMsT0FBTyxDQUFDbUMsR0FBRyxDQUFDO0VBRWxDLEtBQUssSUFBTXNELElBQUksSUFBSStMLE9BQU8sRUFBRTtJQUMxQixJQUFJL0wsSUFBSSxLQUFLLFVBQVUsRUFBRTtNQUN2QjJILFNBQVMsR0FBRyxJQUFBc0Usc0JBQUssRUFBQyxVQUFVLENBQUMsQ0FBQyxJQUFBQyx1QkFBTSxFQUFDSCxPQUFPLENBQUNJLFFBQVEsQ0FBQyxDQUFDLENBQUN4RSxTQUFTLENBQUM7SUFDcEUsQ0FBQyxNQUFNLElBQUkzSCxJQUFJLEtBQUssT0FBTyxFQUFFO01BQzNCLElBQU1vTSxTQUFTLEdBQUdMLE9BQU8sQ0FBQ00sS0FBSyxHQUFHQyxxQkFBVSxDQUFDQyxTQUFTLEdBQUdELHFCQUFVLENBQUNFLFNBQVM7TUFFN0U3RSxTQUFTLEdBQUcsSUFBQXNFLHNCQUFLLEVBQUMsVUFBVSxDQUFDLENBQUMsSUFBQUMsdUJBQU0sRUFBQztRQUFDcE4sSUFBSSxFQUFFc047TUFBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUFGLHVCQUFNLEVBQUNILE9BQU8sQ0FBQyxDQUFDcEUsU0FBUyxDQUFDLENBQUM7SUFDdEY7RUFDRjtFQUVBQSxTQUFTLEdBQUcsSUFBQStCLHVCQUFnQixFQUFDbk4sS0FBSyxDQUFDOUIsUUFBUSxFQUFFa04sU0FBUyxDQUFDO0VBRXZELE9BQUF2USxhQUFBLENBQUFBLGFBQUEsS0FDS21GLEtBQUs7SUFDUmhDLE9BQU8sRUFBRWdDLEtBQUssQ0FBQ2hDLE9BQU8sQ0FBQ29DLEdBQUcsQ0FBQyxVQUFDeEcsQ0FBQyxFQUFFcEIsQ0FBQztNQUFBLE9BQU1BLENBQUMsS0FBSzJILEdBQUcsR0FBR2lMLFNBQVMsR0FBR3hSLENBQUM7SUFBQSxDQUFDO0VBQUM7QUFFckUsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTXNXLGdCQUFnQixHQUFBNVUsT0FBQSxDQUFBNFUsZ0JBQUEsR0FBRyxTQUFuQkEsZ0JBQWdCQSxDQUMzQmxRLEtBQWUsRUFDZndCLE1BQThDO0VBQUEsT0FFOUMsQ0FBQ0EsTUFBTSxDQUFDVyxNQUFNLEdBQ1ZuQyxLQUFLLEdBQUFuRixhQUFBLENBQUFBLGFBQUEsS0FFQW1GLEtBQUs7SUFDUmhDLE9BQU8sS0FBQW1KLE1BQUEsS0FBQUMsbUJBQUEsYUFBTXBILEtBQUssQ0FBQ2hDLE9BQU8sSUFBRSxJQUFBMlAsdUJBQWdCLEVBQUM7TUFBQ3hMLE1BQU0sRUFBRVgsTUFBTSxDQUFDVyxNQUFNO01BQUUzRyxFQUFFLEVBQUVnRyxNQUFNLENBQUNoRztJQUFFLENBQUMsQ0FBQztFQUFDLEVBQ3RGO0FBQUE7O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU0yVSwyQkFBMkIsR0FBQTdVLE9BQUEsQ0FBQTZVLDJCQUFBLEdBQUcsU0FBOUJBLDJCQUEyQkEsQ0FDdENuUSxLQUFlLEVBQ2Z3QixNQUF5RCxFQUM1QztFQUNiLElBQU9oRyxFQUFFLEdBQTBCZ0csTUFBTSxDQUFsQ2hHLEVBQUU7SUFBRTJHLE1BQU0sR0FBa0JYLE1BQU0sQ0FBOUJXLE1BQU07SUFBRTJFLEtBQUssR0FBV3RGLE1BQU0sQ0FBdEJzRixLQUFLO0lBQUVuTixLQUFLLEdBQUk2SCxNQUFNLENBQWY3SCxLQUFLO0VBRS9CLElBQUk2RyxRQUFRLEdBQUdSLEtBQUs7RUFDcEIsSUFBTW9RLGFBQWEsR0FBRzVQLFFBQVEsQ0FBQ3hDLE9BQU8sQ0FBQ3lFLFNBQVMsQ0FBQyxVQUFBN0ksQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQzRCLEVBQUUsS0FBS0EsRUFBRTtFQUFBLEVBQUM7RUFDbEUsSUFBSTRJLFdBQVcsR0FBR2dNLGFBQWE7RUFDL0IsSUFBSSxDQUFDNVUsRUFBRSxJQUFJLENBQUMyRyxNQUFNLEVBQUU7SUFDbEIsT0FBTzNCLFFBQVE7RUFDakI7RUFDQSxJQUFJNFAsYUFBYSxHQUFHLENBQUMsSUFBSWpPLE1BQU0sRUFBRTtJQUMvQjNCLFFBQVEsR0FBRzBQLGdCQUFnQixDQUFDMVAsUUFBUSxFQUFFO01BQUMyQixNQUFNLEVBQU5BO0lBQU0sQ0FBQyxDQUFDO0lBQy9DLElBQUkzQixRQUFRLENBQUN4QyxPQUFPLENBQUMxRSxNQUFNLEtBQUswRyxLQUFLLENBQUNoQyxPQUFPLENBQUMxRSxNQUFNLEdBQUcsQ0FBQyxFQUFFO01BQ3hEO01BQ0EsT0FBTzBHLEtBQUs7SUFDZDtJQUNBO0lBQ0FvRSxXQUFXLEdBQUc1RCxRQUFRLENBQUN4QyxPQUFPLENBQUMxRSxNQUFNLEdBQUcsQ0FBQztJQUN6Q2tILFFBQVEsQ0FBQ3hDLE9BQU8sQ0FBQ29HLFdBQVcsQ0FBQyxHQUFBdkosYUFBQSxDQUFBQSxhQUFBLEtBQ3hCMkYsUUFBUSxDQUFDeEMsT0FBTyxDQUFDb0csV0FBVyxDQUFDLEdBQzVCNUksRUFBRSxHQUFHO01BQUNBLEVBQUUsRUFBRkE7SUFBRSxDQUFDLEdBQUcsSUFBSSxDQUNyQjtFQUNIOztFQUVBO0VBQ0E7RUFDQSxJQUFJNFUsYUFBYSxJQUFJLENBQUMsSUFBSWpPLE1BQU0sRUFBRTtJQUNoQztJQUNBM0IsUUFBUSxHQUFHLENBQUNySCxLQUFLLENBQUNDLE9BQU8sQ0FBQytJLE1BQU0sQ0FBQyxHQUFHQSxNQUFNLEdBQUcsQ0FBQ0EsTUFBTSxDQUFDLEVBQUUwSSxNQUFNLENBQUMsVUFBQ0MsSUFBSSxFQUFFeEssQ0FBQyxFQUFFK1AsS0FBSyxFQUFLO01BQ2hGLE9BQU9yRixnQkFBZ0IsQ0FBQ0YsSUFBSSxFQUFFO1FBQzVCM0ssR0FBRyxFQUFFaUUsV0FBVztRQUNoQlgsSUFBSSxFQUFFLFFBQVE7UUFDZDlKLEtBQUssRUFBRTJHLENBQUM7UUFDUjZMLFVBQVUsRUFBRWtFO01BQ2QsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxFQUFFN1AsUUFBUSxDQUFDO0VBQ2Q7RUFDQTtFQUNBLElBQUlzRyxLQUFLLEVBQUU7SUFDVDtJQUNBdEcsUUFBUSxHQUFHLENBQUNySCxLQUFLLENBQUNDLE9BQU8sQ0FBQzBOLEtBQUssQ0FBQyxHQUFHQSxLQUFLLEdBQUcsQ0FBQ0EsS0FBSyxDQUFDLEVBQUUrRCxNQUFNLENBQUMsVUFBQ0MsSUFBSSxFQUFFbFIsQ0FBQyxFQUFFeVcsS0FBSyxFQUFLO01BQzdFLE9BQU9yRixnQkFBZ0IsQ0FBQ0YsSUFBSSxFQUFFO1FBQzVCM0ssR0FBRyxFQUFFaUUsV0FBVztRQUNoQlgsSUFBSSxFQUFFLE1BQU07UUFDWjlKLEtBQUssRUFBRUMsQ0FBQztRQUNSdVMsVUFBVSxFQUFFa0U7TUFDZCxDQUFDLENBQUM7SUFDSixDQUFDLEVBQUU3UCxRQUFRLENBQUM7RUFDZDtFQUNBO0VBQ0EsSUFBSTdHLEtBQUssS0FBSyxJQUFJLElBQUksT0FBT0EsS0FBSyxLQUFLLFdBQVcsRUFBRTtJQUNsRDZHLFFBQVEsR0FBR3dLLGdCQUFnQixDQUFDeEssUUFBUSxFQUFFO01BQUNMLEdBQUcsRUFBRWlFLFdBQVc7TUFBRVgsSUFBSSxFQUFFLE9BQU87TUFBRTlKLEtBQUssRUFBTEE7SUFBSyxDQUFDLENBQUM7RUFDakY7RUFFQSxPQUFPNkcsUUFBUTtBQUNqQixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTThQLHlCQUF5QixHQUFBaFYsT0FBQSxDQUFBZ1YseUJBQUEsR0FBRyxTQUE1QkEseUJBQXlCQSxDQUNwQ3RRLEtBQWUsRUFBQXVRLEtBQUEsRUFFRjtFQUFBLElBRFp4TyxRQUFRLEdBQUF3TyxLQUFBLENBQVJ4TyxRQUFRO0lBQUUwQixJQUFJLEdBQUE4TSxLQUFBLENBQUo5TSxJQUFJO0lBQUVrQixTQUFTLEdBQUE0TCxLQUFBLENBQVQ1TCxTQUFTO0VBRTFCLElBQU02TCxZQUFZLEdBQUd6TyxRQUFRLENBQUNwRyxNQUFNLENBQUN1SCxTQUFTLENBQUNPLElBQUksQ0FBQztFQUNwRCxJQUFNckIsUUFBUSxHQUFHTCxRQUFRLENBQUM2SCxrQkFBa0IsQ0FBQ25HLElBQUksRUFBRWtCLFNBQVMsQ0FBQztFQUM3RCxJQUFNeUUsWUFBWSxHQUFHaEgsUUFBUSxDQUFDekcsTUFBTSxDQUFDdUgsU0FBUyxDQUFDTyxJQUFJLENBQUM7RUFDcEQsSUFBSStNLFlBQVksS0FBS3BILFlBQVksRUFBRTtJQUNqQyxPQUFPakcsMkJBQTJCLENBQUNuRCxLQUFLLEVBQUU7TUFDeEMrQixRQUFRLEVBQVJBLFFBQVE7TUFDUnFILFlBQVksTUFBQXBPLGdCQUFBLGlCQUNUeUksSUFBSSxFQUFHMkYsWUFBWTtJQUV4QixDQUFDLENBQUM7RUFDSjtFQUNBLE9BQUF2TyxhQUFBLENBQUFBLGFBQUEsS0FDS21GLEtBQUs7SUFDUnBDLE1BQU0sRUFBRW9DLEtBQUssQ0FBQ3BDLE1BQU0sQ0FBQ3dDLEdBQUcsQ0FBQyxVQUFBNkIsQ0FBQztNQUFBLE9BQUtBLENBQUMsQ0FBQ3pHLEVBQUUsS0FBS3VHLFFBQVEsQ0FBQ3ZHLEVBQUUsR0FBRzRHLFFBQVEsR0FBR0gsQ0FBQztJQUFBLENBQUM7RUFBQztBQUV4RSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNd08sNEJBQTRCLEdBQUFuVixPQUFBLENBQUFtViw0QkFBQSxHQUFHLFNBQS9CQSw0QkFBNEJBLENBQ3ZDelEsS0FBZSxFQUNmd0IsTUFBMEQ7RUFBQSxPQUFBM0csYUFBQSxDQUFBQSxhQUFBLEtBRXZEbUYsS0FBSztJQUNSaEMsT0FBTyxFQUFFZ0MsS0FBSyxDQUFDaEMsT0FBTyxDQUFDb0MsR0FBRyxDQUFDLFVBQUN4RyxDQUFDLEVBQUVwQixDQUFDO01BQUEsT0FBTUEsQ0FBQyxLQUFLZ0osTUFBTSxDQUFDckIsR0FBRyxHQUFBdEYsYUFBQSxDQUFBQSxhQUFBLEtBQU9qQixDQUFDO1FBQUU4QyxXQUFXLEVBQUUsQ0FBQzlDLENBQUMsQ0FBQzhDO01BQVcsS0FBSTlDLENBQUM7SUFBQSxDQUFDO0VBQUM7QUFBQSxDQUNsRztBQUVLLFNBQVM4Vyx1QkFBdUJBLENBQUMvVSxNQUErQyxFQUFXO0VBQ2hHLE9BQU8sUUFBUSxJQUFJQSxNQUFNLElBQUksaUJBQWlCLElBQUlBLE1BQU07QUFDMUQ7QUFFTyxTQUFTZ1YseUJBQXlCQSxDQUN2QzNRLEtBQWUsRUFDZndCLE1BQXVELEVBQzdDO0VBQ1YsSUFBTzdGLE1BQU0sR0FBSTZGLE1BQU0sQ0FBaEI3RixNQUFNO0VBQ2IsSUFBSStVLHVCQUF1QixDQUFDL1UsTUFBTSxDQUFDLEVBQUU7SUFDbkM7SUFDQTtJQUNBLElBQU1sQixNQUFNLEdBQUd1RixLQUFLLENBQUNoQyxPQUFPLENBQUNnRSxJQUFJLENBQUMsVUFBQXBJLENBQUM7TUFBQSxPQUFJLENBQUMsSUFBQWdYLG1CQUFZLEVBQUNoWCxDQUFDLENBQUM7SUFBQSxFQUFDO0lBQ3hELElBQUksQ0FBQ2EsTUFBTSxFQUFFO01BQ1gsT0FBT3VGLEtBQUs7SUFDZDtJQUNBLElBQU1vTCxTQUFTLEdBQUF2USxhQUFBLENBQUFBLGFBQUEsS0FBT0osTUFBTSxHQUFLa0IsTUFBTSxDQUFDO0lBQ3hDLE9BQU84UCx3QkFBd0IsQ0FBQ3pMLEtBQUssRUFBRSxJQUFBNlEsMEJBQWlCLEVBQUNwVyxNQUFNLENBQUNlLEVBQUUsRUFBRTRQLFNBQVMsQ0FBQyxDQUFDO0VBQ2pGLENBQUMsTUFBTTtJQUNMLE9BQUF2USxhQUFBLENBQUFBLGFBQUEsS0FDS21GLEtBQUs7TUFDUlgsZUFBZSxFQUFBeEUsYUFBQSxDQUFBQSxhQUFBLEtBQ1ZtRixLQUFLLENBQUNYLGVBQWUsR0FDckIxRCxNQUFNO0lBQ1Y7RUFFTDtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTW1WLDJCQUEyQixHQUFBeFYsT0FBQSxDQUFBd1YsMkJBQUEsR0FBRyxTQUE5QkEsMkJBQTJCQSxDQUN0QzlRLEtBQWUsRUFFZndCLE1BQXlEO0VBQUEsT0FBQTNHLGFBQUEsQ0FBQUEsYUFBQSxLQUV0RG1GLEtBQUs7SUFDUlgsZUFBZSxFQUFBeEUsYUFBQSxDQUFBQSxhQUFBLEtBQ1ZtRixLQUFLLENBQUNYLGVBQWU7TUFDeEIzQyxXQUFXLEVBQUUsQ0FBQ3NELEtBQUssQ0FBQ1gsZUFBZSxDQUFDM0M7SUFBVztFQUNoRDtBQUFBLENBQ0Q7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1xVSxrQ0FBa0MsR0FBQXpWLE9BQUEsQ0FBQXlWLGtDQUFBLEdBQUcsU0FBckNBLGtDQUFrQ0EsQ0FBSS9RLEtBQWU7RUFBQSxPQUFBbkYsYUFBQSxDQUFBQSxhQUFBLEtBQzdEbUYsS0FBSztJQUNSWCxlQUFlLEVBQUF4RSxhQUFBLENBQUFBLGFBQUEsS0FDVm1GLEtBQUssQ0FBQ1gsZUFBZTtNQUN4QnRDLFdBQVcsRUFBRSxDQUFDaUQsS0FBSyxDQUFDWCxlQUFlLENBQUN0QztJQUFXO0VBQ2hEO0FBQUEsQ0FDRDs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTWlVLGlDQUFpQyxHQUFBMVYsT0FBQSxDQUFBMFYsaUNBQUEsR0FBRyxTQUFwQ0EsaUNBQWlDQSxDQUM1Q2hSLEtBQWUsRUFDZndCLE1BQStEO0VBQUEsT0FBQTNHLGFBQUEsQ0FBQUEsYUFBQSxLQUU1RG1GLEtBQUs7SUFDUmhDLE9BQU8sRUFBRWdDLEtBQUssQ0FBQ2hDLE9BQU8sQ0FBQ29DLEdBQUcsQ0FBQyxVQUFDeEcsQ0FBQyxFQUFFcEIsQ0FBQztNQUFBLE9BQU1BLENBQUMsS0FBS2dKLE1BQU0sQ0FBQ3JCLEdBQUcsR0FBQXRGLGFBQUEsQ0FBQUEsYUFBQSxLQUFPakIsQ0FBQztRQUFFNkMsS0FBSyxFQUFFK0UsTUFBTSxDQUFDL0U7TUFBSyxLQUFJN0MsQ0FBQztJQUFBLENBQUM7RUFBQztBQUFBLENBQzFGOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1xWCxnQ0FBZ0MsR0FBQTNWLE9BQUEsQ0FBQTJWLGdDQUFBLEdBQUcsU0FBbkNBLGdDQUFnQ0EsQ0FDM0NqUixLQUFlLEVBQUFrUixLQUFBLEVBRUY7RUFBQSxJQURaelUsS0FBSyxHQUFBeVUsS0FBQSxDQUFMelUsS0FBSztFQUVOLE9BQUE1QixhQUFBLENBQUFBLGFBQUEsS0FDS21GLEtBQUs7SUFDUlgsZUFBZSxFQUFBeEUsYUFBQSxDQUFBQSxhQUFBLEtBQ1ZtRixLQUFLLENBQUNYLGVBQWU7TUFDeEI1QyxLQUFLLEVBQUxBO0lBQUs7RUFDTjtBQUVMLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU0wVSxvQkFBb0IsR0FBQTdWLE9BQUEsQ0FBQTZWLG9CQUFBLEdBQUcsU0FBdkJBLG9CQUFvQkEsQ0FDL0JuUixLQUFlLEVBQ2Z3QixNQUFrRCxFQUMvQztFQUNILElBQU9tTCxJQUFJLEdBQVNuTCxNQUFNLENBQW5CbUwsSUFBSTtJQUFFeE0sR0FBRyxHQUFJcUIsTUFBTSxDQUFickIsR0FBRztFQUNoQixJQUFNaVIsMkJBQTJCLEdBQUd6RSxJQUFJLEtBQUtDLDRCQUFpQixDQUFDQyxRQUFRO0VBQ3ZFLE9BQUFoUyxhQUFBLENBQUFBLGFBQUEsS0FDS21GLEtBQUs7SUFDUmhDLE9BQU8sRUFBRWdDLEtBQUssQ0FBQ2hDLE9BQU8sQ0FBQ29DLEdBQUcsQ0FBQyxVQUFDeEcsQ0FBQyxFQUFFcEIsQ0FBQztNQUFBLE9BQzlCQSxDQUFDLEtBQUsySCxHQUFHLEdBQUF0RixhQUFBLENBQUFBLGFBQUEsS0FFQWpCLENBQUM7UUFDSitTLElBQUksRUFBSkE7TUFBSSxLQUVOeUUsMkJBQTJCLEdBQUF2VyxhQUFBLENBQUFBLGFBQUEsS0FFdEJqQixDQUFDO1FBQ0orUyxJQUFJLEVBQUVDLDRCQUFpQixDQUFDRTtNQUFJLEtBRTlCbFQsQ0FBQztJQUFBLENBQ1A7RUFBQztBQUVMLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNeVgsMEJBQTBCLEdBQUEvVixPQUFBLENBQUErViwwQkFBQSxHQUFHLFNBQTdCQSwwQkFBMEJBLENBQ3JDclIsS0FBZSxFQUNmd0IsTUFBd0QsRUFDM0M7RUFDYixJQUFNL0csTUFBTSxHQUFHdUYsS0FBSyxDQUFDaEMsT0FBTyxDQUFDd0QsTUFBTSxDQUFDckIsR0FBRyxDQUFDO0VBQ3hDLElBQU1NLFNBQVMsR0FBRyxJQUFBM0ksbUJBQUcsRUFBQzJDLE1BQU0sRUFBRSxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxDQUFDLENBQUM7RUFFbkUsSUFBSStGLFFBQVEsR0FBR3dLLGdCQUFnQixDQUFDaEwsS0FBSyxFQUFFO0lBQ3JDRyxHQUFHLEVBQUVxQixNQUFNLENBQUNyQixHQUFHO0lBQ2ZzRCxJQUFJLEVBQUUsU0FBUztJQUNmOUosS0FBSyxFQUFFLENBQUM4RztFQUNWLENBQUMsQ0FBQztFQUVGRCxRQUFRLEdBQUd3SyxnQkFBZ0IsQ0FBQ3hLLFFBQVEsRUFBRTtJQUNwQ0wsR0FBRyxFQUFFcUIsTUFBTSxDQUFDckIsR0FBRztJQUNmc0QsSUFBSSxFQUFFLE9BQU87SUFDYjlKLEtBQUssRUFBRSxJQUFBMlgsMkJBQW9CLEVBQUM3VyxNQUFNLENBQUNkLEtBQUssRUFBRWMsTUFBTSxDQUFDZSxFQUFFLEVBQUU7TUFDbkRpRixTQUFTLEVBQUUsQ0FBQ0E7SUFDZCxDQUFDO0VBQ0gsQ0FBQyxDQUFDO0VBRUYsT0FBT0QsUUFBUTtBQUNqQixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNK1EsbUJBQW1CLEdBQUFqVyxPQUFBLENBQUFpVyxtQkFBQSxHQUFHLFNBQXRCQSxtQkFBbUJBLENBQzlCdlIsS0FBZSxFQUNmd0IsTUFBaUQsRUFDcEM7RUFDYixJQUFPckIsR0FBRyxHQUFJcUIsTUFBTSxDQUFickIsR0FBRztFQUNWLElBQUFxUixrQkFBQSxHQUFxQnhSLEtBQUssQ0FBQ2hDLE9BQU8sQ0FBQ21DLEdBQUcsQ0FBQztJQUFoQ2dDLE1BQU0sR0FBQXFQLGtCQUFBLENBQU5yUCxNQUFNO0lBQUUzRyxFQUFFLEdBQUFnVyxrQkFBQSxDQUFGaFcsRUFBRTtFQUVqQixJQUFNaVcsVUFBVSxNQUFBdEssTUFBQSxLQUFBQyxtQkFBQSxhQUNYcEgsS0FBSyxDQUFDaEMsT0FBTyxDQUFDL0QsS0FBSyxDQUFDLENBQUMsRUFBRWtHLEdBQUcsQ0FBQyxPQUFBaUgsbUJBQUEsYUFDM0JwSCxLQUFLLENBQUNoQyxPQUFPLENBQUMvRCxLQUFLLENBQUNrRyxHQUFHLEdBQUcsQ0FBQyxFQUFFSCxLQUFLLENBQUNoQyxPQUFPLENBQUMxRSxNQUFNLENBQUMsRUFDdEQ7RUFFRCxJQUFNeVQsZ0JBQWdCLEdBQUcsSUFBQUMsNkJBQXNCLEVBQUM3SyxNQUFNLEVBQUVuQyxLQUFLLENBQUM5QixRQUFRLEVBQUV1VCxVQUFVLEVBQUV6UixLQUFLLENBQUNwQyxNQUFNLENBQUM7RUFDakcsSUFBTThULFNBQVMsR0FDYixJQUFBQywyQkFBb0IsRUFBQzNSLEtBQUssQ0FBQ1YsTUFBTSxDQUFDaEMsZUFBZSxDQUFDLEtBQUs5QixFQUFFLEdBQUFYLGFBQUEsQ0FBQUEsYUFBQSxLQUVoRG1GLEtBQUssQ0FBQ1YsTUFBTTtJQUNmaEMsZUFBZSxFQUFFO0VBQUksS0FFdkIwQyxLQUFLLENBQUNWLE1BQU07RUFFbEIsSUFBSWtCLFFBQVEsR0FBRyxJQUFBL0gsVUFBRyxFQUFDLENBQUMsU0FBUyxDQUFDLEVBQUVnWixVQUFVLEVBQUV6UixLQUFLLENBQUM7RUFDbERRLFFBQVEsR0FBRyxJQUFBL0gsVUFBRyxFQUFDLENBQUMsVUFBVSxDQUFDLEVBQUVzVSxnQkFBZ0IsRUFBRXZNLFFBQVEsQ0FBQztFQUN4REEsUUFBUSxHQUFHLElBQUEvSCxVQUFHLEVBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRWlaLFNBQVMsRUFBRWxSLFFBQVEsQ0FBQztFQUUvQyxPQUFPNE0sd0JBQXdCLENBQUM1TSxRQUFRLEVBQUUyQixNQUFNLEVBQUUvRCxTQUFTLENBQUM7QUFDOUQsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTXdULGVBQWUsR0FBQXRXLE9BQUEsQ0FBQXNXLGVBQUEsR0FBRyxTQUFsQkEsZUFBZUEsQ0FDMUI1UixLQUFlLEVBQ2Z3QixNQUE2QyxFQUNoQztFQUNiLElBQUlZLFFBQVE7RUFDWixJQUFJeVAsWUFBWTtFQUNoQixJQUFJclEsTUFBTSxDQUFDN0YsTUFBTSxFQUFFO0lBQ2pCeUcsUUFBUSxHQUFHLElBQUEwUCxxQ0FBcUIsRUFBQzlSLEtBQUssRUFBRXdCLE1BQU0sQ0FBQzdGLE1BQU0sQ0FBQztJQUN0RCxJQUFJLENBQUN5RyxRQUFRLEVBQUU7TUFDYnNHLGVBQU8sQ0FBQ3FKLElBQUksQ0FDViw2RkFBNkYsRUFDN0Z2USxNQUFNLENBQUM3RixNQUNULENBQUM7TUFDRCxPQUFPcUUsS0FBSztJQUNkO0lBRUEsSUFBTXNJLE1BQU0sR0FBRyxJQUFBaEQsOEJBQWtCLEVBQUNsRCxRQUFRLEVBQUVwQyxLQUFLLENBQUM7SUFDbERvQyxRQUFRLEdBQUdrRyxNQUFNLENBQUNwSSxLQUFLO0lBQ3ZCMlIsWUFBWSxHQUFHdkosTUFBTSxDQUFDekssU0FBUztFQUNqQyxDQUFDLE1BQU07SUFBQSxJQUFBbVUsaUJBQUE7SUFDTDtJQUNBLElBQU1DLGNBQWMsSUFBQUQsaUJBQUEsR0FBR3hRLE1BQU0sQ0FBQ2dOLFNBQVMsY0FBQXdELGlCQUFBLGNBQUFBLGlCQUFBLEdBQUk5WixNQUFNLENBQUNxQyxJQUFJLENBQUN5RixLQUFLLENBQUM5QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekVrRSxRQUFRLEdBQUcsSUFBSThQLGFBQUssQ0FBQztNQUNuQnpSLFNBQVMsRUFBRSxJQUFJO01BQ2Z5SCxjQUFjLEVBQUUsSUFBSTtNQUNwQi9GLE1BQU0sRUFBRThQO0lBQ1YsQ0FBQyxDQUFDO0lBQ0ZKLFlBQVksR0FBRyxDQUFDLENBQUM7RUFDbkI7RUFFQSxJQUFJclIsUUFBUSxHQUFBM0YsYUFBQSxDQUFBQSxhQUFBLEtBQ1BtRixLQUFLO0lBQ1JwQyxNQUFNLEtBQUF1SixNQUFBLEtBQUFDLG1CQUFBLGFBQU1wSCxLQUFLLENBQUNwQyxNQUFNLElBQUV3RSxRQUFRLEVBQUM7SUFDbkN2RSxTQUFTLEtBQUFzSixNQUFBLEtBQUFDLG1CQUFBLGFBQU1wSCxLQUFLLENBQUNuQyxTQUFTLElBQUVnVSxZQUFZLEVBQUM7SUFDN0M7SUFDQTlULFVBQVUsR0FBR3FFLFFBQVEsQ0FBQzVHLEVBQUUsRUFBQTJMLE1BQUEsS0FBQUMsbUJBQUEsYUFBS3BILEtBQUssQ0FBQ2pDLFVBQVUsRUFBQztJQUM5Q2lCLFNBQVMsRUFBRSxJQUFBMEIsNkJBQXNCLEVBQUNWLEtBQUssQ0FBQ2hCLFNBQVMsRUFBRW9ELFFBQVE7RUFBQyxFQUM3RDtFQUVELElBQUlBLFFBQVEsQ0FBQ3pHLE1BQU0sQ0FBQ2lGLFNBQVMsQ0FBQ2xGLE9BQU8sRUFBRTtJQUNyQzhFLFFBQVEsR0FBR0sscUJBQXFCLENBQUNMLFFBQVEsQ0FBQztFQUM1QztFQUVBLE9BQU9BLFFBQVE7QUFDakIsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBUzJSLGtCQUFrQkEsQ0FDaENuUyxLQUFRLEVBQUFvUyxLQUFBLEVBRUw7RUFBQSxJQURGNVcsRUFBRSxHQUFBNFcsS0FBQSxDQUFGNVcsRUFBRTtFQUVILElBQU0yRSxHQUFHLEdBQUduSCxNQUFNLENBQUNxWixRQUFRLENBQUM3VyxFQUFFLENBQUM7RUFDM0I7RUFDQXhDLE1BQU0sQ0FBQ3dDLEVBQUUsQ0FBQyxHQUNWd0UsS0FBSyxDQUFDcEMsTUFBTSxDQUFDNkUsU0FBUyxDQUFDLFVBQUFSLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUN6RyxFQUFFLEtBQUtBLEVBQUU7RUFBQSxFQUFDO0VBQzVDLElBQUkyRSxHQUFHLEdBQUcsQ0FBQyxJQUFJQSxHQUFHLElBQUlILEtBQUssQ0FBQ3BDLE1BQU0sQ0FBQ3RFLE1BQU0sRUFBRTtJQUN6QztJQUNBb1AsZUFBTyxDQUFDcUosSUFBSSw2Q0FBQTVLLE1BQUEsQ0FBNkMzTCxFQUFFLENBQUUsQ0FBQztJQUM5RCxPQUFPd0UsS0FBSztFQUNkO0VBRUEsSUFBT3BDLE1BQU0sR0FBK0NvQyxLQUFLLENBQTFEcEMsTUFBTTtJQUFFQyxTQUFTLEdBQW9DbUMsS0FBSyxDQUFsRG5DLFNBQVM7SUFBRUUsVUFBVSxHQUF3QmlDLEtBQUssQ0FBdkNqQyxVQUFVO0lBQUVhLE9BQU8sR0FBZW9CLEtBQUssQ0FBM0JwQixPQUFPO0lBQUVELFNBQVMsR0FBSXFCLEtBQUssQ0FBbEJyQixTQUFTO0VBQ3hELElBQU0yVCxhQUFhLEdBQUcxVSxNQUFNLENBQUN1QyxHQUFHLENBQUM7RUFDakMsSUFBTUssUUFBUSxHQUFBM0YsYUFBQSxDQUFBQSxhQUFBLEtBQ1RtRixLQUFLO0lBQ1JwQyxNQUFNLEVBQUUsSUFBQTJVLDhCQUFhLEVBQUNELGFBQWEsQ0FBQzlXLEVBQUUsQ0FBQyxDQUFDb0MsTUFBTSxDQUFDO0lBQy9DQyxTQUFTLEVBQUUsSUFBQTJVLHFDQUFvQixFQUFDclMsR0FBRyxDQUFDLENBQUN0QyxTQUFTLENBQUM7SUFDL0NFLFVBQVUsRUFBRUEsVUFBVSxDQUFDdEQsTUFBTSxDQUFDLFVBQUFpTCxPQUFPO01BQUEsT0FBSUEsT0FBTyxLQUFLNE0sYUFBYSxDQUFDOVcsRUFBRTtJQUFBLEVBQUM7SUFDdEVvRCxPQUFPLEVBQUUwVCxhQUFhLENBQUN4SixjQUFjLENBQUNsSyxPQUFPLENBQUMsR0FBR1IsU0FBUyxHQUFHUSxPQUFPO0lBQ3BFRCxTQUFTLEVBQUUyVCxhQUFhLENBQUN4SixjQUFjLENBQUNuSyxTQUFTLENBQUMsR0FBR1AsU0FBUyxHQUFHTyxTQUFTO0lBQzFFSyxTQUFTLEVBQUUsSUFBQTJCLCtCQUF3QixFQUFDWCxLQUFLLENBQUNoQixTQUFTLEVBQUVzVCxhQUFhO0lBQ2xFO0VBQUEsRUFDRDtFQUVELE9BQU96UixxQkFBcUIsQ0FBQ0wsUUFBUSxDQUFDO0FBQ3hDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNaVMsbUJBQW1CLEdBQUFuWCxPQUFBLENBQUFtWCxtQkFBQSxHQUFHLFNBQXRCQSxtQkFBbUJBLENBQzlCelMsS0FBZSxFQUFBMFMsS0FBQTtFQUFBLElBQ2RDLEtBQUssR0FBQUQsS0FBQSxDQUFMQyxLQUFLO0VBQUEsT0FBQTlYLGFBQUEsQ0FBQUEsYUFBQSxLQUVIbUYsS0FBSztJQUNSakMsVUFBVSxFQUFFNFU7RUFBSztBQUFBLENBQ2pCOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNQyxxQkFBcUIsR0FBQXRYLE9BQUEsQ0FBQXNYLHFCQUFBLEdBQUcsU0FBeEJBLHFCQUFxQkEsQ0FDaEM1UyxLQUFlLEVBQUE2UyxLQUFBLEVBRUY7RUFBQSxJQURaclgsRUFBRSxHQUFBcVgsS0FBQSxDQUFGclgsRUFBRTtFQUVILElBQU0yRSxHQUFHLEdBQUduSCxNQUFNLENBQUNxWixRQUFRLENBQUM3VyxFQUFFLENBQUM7RUFDM0I7RUFDQXhDLE1BQU0sQ0FBQ3dDLEVBQUUsQ0FBQyxHQUNWd0UsS0FBSyxDQUFDcEMsTUFBTSxDQUFDNkUsU0FBUyxDQUFDLFVBQUFSLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUN6RyxFQUFFLEtBQUtBLEVBQUU7RUFBQSxFQUFDO0VBQzVDLElBQUkyRSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUNILEtBQUssQ0FBQ3BDLE1BQU0sQ0FBQ3VDLEdBQUcsQ0FBQyxFQUFFO0lBQ2pDdUksZUFBTyxDQUFDcUosSUFBSSxVQUFBNUssTUFBQSxDQUFVaEgsR0FBRyw2QkFBMEIsQ0FBQztJQUNwRCxPQUFPSCxLQUFLO0VBQ2Q7RUFFQSxJQUFPcEMsTUFBTSxHQUFJb0MsS0FBSyxDQUFmcEMsTUFBTTtFQUNiLElBQU1rVixRQUFRLEdBQUdsVixNQUFNLENBQUN1QyxHQUFHLENBQUM7RUFFNUIsSUFBTTRTLHFCQUFxQixHQUFHL1MsS0FBSyxDQUFDakMsVUFBVSxDQUFDMEUsU0FBUyxDQUFDLFVBQUEyTSxHQUFHO0lBQUEsT0FBSUEsR0FBRyxLQUFLMEQsUUFBUSxDQUFDdFgsRUFBRTtFQUFBLEVBQUM7RUFDcEYsSUFBSXdYLFFBQVEsY0FBQTdMLE1BQUEsQ0FBYzJMLFFBQVEsQ0FBQ25YLE1BQU0sQ0FBQ0YsS0FBSyxDQUFFO0VBQ2pELElBQUl3WCxPQUFPLEdBQUcsQ0FBQztFQUNmO0VBQ0EsT0FBT3JWLE1BQU0sQ0FBQ29FLElBQUksQ0FBQyxVQUFBQyxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDdEcsTUFBTSxDQUFDRixLQUFLLEtBQUt1WCxRQUFRO0VBQUEsRUFBQyxFQUFFO0lBQ3BEQSxRQUFRLGNBQUE3TCxNQUFBLENBQWMyTCxRQUFRLENBQUNuWCxNQUFNLENBQUNGLEtBQUssT0FBQTBMLE1BQUEsQ0FBSSxFQUFFOEwsT0FBTyxDQUFFO0VBQzVEOztFQUVBO0VBQ0EsSUFBTXBMLFdBQVcsR0FBRyxJQUFBOUUsOEJBQWMsRUFBQytQLFFBQVEsRUFBRTlTLEtBQUssQ0FBQ0gsTUFBTSxDQUFDOztFQUUxRDtFQUNBLElBQUksRUFBQ2dJLFdBQVcsYUFBWEEsV0FBVyxlQUFYQSxXQUFXLENBQUVsTSxNQUFNLEdBQUU7SUFDeEIsT0FBT3FFLEtBQUs7RUFDZDtFQUNBNkgsV0FBVyxDQUFDbE0sTUFBTSxDQUFDRixLQUFLLEdBQUd1WCxRQUFRO0VBQ25DbkwsV0FBVyxDQUFDck0sRUFBRSxHQUFHLElBQUEwWCwyQkFBYyxFQUFDQyx1QkFBZSxDQUFDOztFQUVoRDtFQUNBLElBQUk3USxTQUFTLEdBQUdzUCxlQUFlLENBQUM1UixLQUFLLEVBQUU7SUFBQ3JFLE1BQU0sRUFBRWtNO0VBQVcsQ0FBQyxDQUFDO0VBQzdEO0VBQ0EsSUFBTXpGLFFBQVEsR0FBR0UsU0FBUyxDQUFDMUUsTUFBTSxDQUFDMEUsU0FBUyxDQUFDMUUsTUFBTSxDQUFDdEUsTUFBTSxHQUFHLENBQUMsQ0FBQztFQUM5RDtFQUNBLElBQU04WixhQUFhLEdBQUcsSUFBQUMsa0JBQVcsRUFDL0IvUSxTQUFTLENBQUN2RSxVQUFVLENBQUM5RCxLQUFLLENBQUMsQ0FBQyxFQUFFcUksU0FBUyxDQUFDdkUsVUFBVSxDQUFDekUsTUFBTSxDQUFDLEVBQzFEeVoscUJBQXFCLEVBQ3JCM1EsUUFBUSxDQUFDNUcsRUFDWCxDQUFDO0VBRUQ4RyxTQUFTLEdBQUdtUSxtQkFBbUIsQ0FBQ25RLFNBQVMsRUFBRTtJQUFDcVEsS0FBSyxFQUFFUztFQUFhLENBQUMsQ0FBQztFQUVsRSxPQUFPdlMscUJBQXFCLENBQUN5QixTQUFTLENBQUM7QUFDekMsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTWdSLGdCQUFnQixHQUFBaFksT0FBQSxDQUFBZ1ksZ0JBQUEsR0FBRyxTQUFuQkEsZ0JBQWdCQSxDQUMzQnRULEtBQWUsRUFDZndCLE1BQThDLEVBQ2pDO0VBQUEsSUFBQStSLGNBQUE7RUFDYixJQUNFLEVBQUFBLGNBQUEsR0FBQS9SLE1BQU0sQ0FBQzdGLE1BQU0sY0FBQTRYLGNBQUEsdUJBQWJBLGNBQUEsQ0FBZWhSLElBQUksTUFBS2lSLGtDQUF1QixDQUFDalIsSUFBSSxJQUNwRHZDLEtBQUssQ0FBQzNCLE9BQU8sQ0FBQ3FGLElBQUksQ0FBQyxVQUFBK1AsTUFBTTtJQUFBLE9BQUlBLE1BQU0sQ0FBQ2xSLElBQUksS0FBS2lSLGtDQUF1QixDQUFDalIsSUFBSTtFQUFBLEVBQUMsRUFDMUU7SUFDQW1HLGVBQU8sQ0FBQ3FKLElBQUksNEJBQUE1SyxNQUFBLENBQTRCcU0sa0NBQXVCLENBQUNyWixJQUFJLFlBQVMsQ0FBQztJQUM5RSxPQUFPNkYsS0FBSztFQUNkO0VBRUEsSUFBTTBULFNBQVMsR0FBRyxJQUFBQyxxQkFBWSxFQUFDblMsTUFBTSxDQUFDN0YsTUFBTSxDQUFDOztFQUU3QztFQUNBcUUsS0FBSyxDQUFDM0IsT0FBTyxDQUFDdEQsT0FBTyxDQUFDLFVBQUEwWSxNQUFNO0lBQUEsT0FBSUEsTUFBTSxDQUFDRyxRQUFRLENBQUM7TUFBQzFMLGNBQWMsRUFBRTtJQUFLLENBQUMsQ0FBQztFQUFBLEVBQUM7RUFFekUsSUFBTTdKLE9BQU8sTUFBQThJLE1BQUEsS0FBQUMsbUJBQUEsYUFBT3BILEtBQUssQ0FBQzNCLE9BQU8sSUFBRXFWLFNBQVMsRUFBQztFQUM3QyxJQUFNcFYsV0FBVyxHQUFHLElBQUF1VixxQkFBYyxFQUFDeFYsT0FBTyxHQUFHcVYsU0FBUyxDQUFDbFksRUFBRSxFQUFBMkwsTUFBQSxLQUFBQyxtQkFBQSxhQUFLcEgsS0FBSyxDQUFDMUIsV0FBVyxFQUFDLENBQUM7RUFFakYsT0FBQXpELGFBQUEsQ0FBQUEsYUFBQSxLQUNLbUYsS0FBSztJQUNSM0IsT0FBTyxFQUFQQSxPQUFPO0lBQ1BDLFdBQVcsRUFBWEE7RUFBVztBQUVmLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU13VixtQkFBbUIsR0FBQXhZLE9BQUEsQ0FBQXdZLG1CQUFBLEdBQUcsU0FBdEJBLG1CQUFtQkEsQ0FDOUI5VCxLQUFlLEVBQUErVCxNQUFBLEVBRUY7RUFBQSxJQURadlksRUFBRSxHQUFBdVksTUFBQSxDQUFGdlksRUFBRTtFQUVILElBQU0yRSxHQUFHLEdBQUdILEtBQUssQ0FBQzNCLE9BQU8sQ0FBQ29FLFNBQVMsQ0FBQyxVQUFBUixDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDekcsRUFBRSxLQUFLQSxFQUFFO0VBQUEsRUFBQztFQUNyRCxJQUFJMkUsR0FBRyxHQUFHLENBQUMsSUFBSUEsR0FBRyxJQUFJSCxLQUFLLENBQUMzQixPQUFPLENBQUMvRSxNQUFNLEVBQUU7SUFDMUNvUCxlQUFPLENBQUNxSixJQUFJLDBDQUFBNUssTUFBQSxDQUEwQzNMLEVBQUUsQ0FBRSxDQUFDO0lBQzNELE9BQU93RSxLQUFLO0VBQ2Q7RUFFQSxJQUFPM0IsT0FBTyxHQUFpQjJCLEtBQUssQ0FBN0IzQixPQUFPO0lBQUVDLFdBQVcsR0FBSTBCLEtBQUssQ0FBcEIxQixXQUFXO0VBQzNCLElBQU0wVixjQUFjLEdBQUczVixPQUFPLENBQUM4QixHQUFHLENBQUM7RUFDbkMsT0FBQXRGLGFBQUEsQ0FBQUEsYUFBQSxLQUNLbUYsS0FBSztJQUNSO0lBQ0EzQixPQUFPLEVBQUUsSUFBQWtVLDhCQUFhLEVBQUN5QixjQUFjLENBQUN4WSxFQUFFLENBQUMsQ0FBQzZDLE9BQU8sQ0FBQztJQUNsREMsV0FBVyxFQUFFQSxXQUFXLENBQUM3RCxNQUFNLENBQUMsVUFBQXdaLFFBQVE7TUFBQSxPQUFJQSxRQUFRLEtBQUtELGNBQWMsQ0FBQ3hZLEVBQUU7SUFBQTtFQUFDO0FBRS9FLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU0wWSxvQkFBb0IsR0FBQTVZLE9BQUEsQ0FBQTRZLG9CQUFBLEdBQUcsU0FBdkJBLG9CQUFvQkEsQ0FDL0JsVSxLQUFlLEVBQUFtVSxNQUFBO0VBQUEsSUFDZHhCLEtBQUssR0FBQXdCLE1BQUEsQ0FBTHhCLEtBQUs7RUFBQSxPQUFBOVgsYUFBQSxDQUFBQSxhQUFBLEtBRUhtRixLQUFLO0lBQ1IxQixXQUFXLEVBQUUsSUFBQXVWLHFCQUFjLEVBQUM3VCxLQUFLLENBQUMzQixPQUFPLE1BQUErSSxtQkFBQSxhQUFNdUwsS0FBSyxDQUFDO0VBQUM7QUFBQSxDQUN0RDs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTXlCLG1CQUFtQixHQUFBOVksT0FBQSxDQUFBOFksbUJBQUEsR0FBRyxTQUF0QkEsbUJBQW1CQSxDQUM5QnBVLEtBQWUsRUFBQXFVLE1BQUEsRUFFRjtFQUFBLElBRFo3WSxFQUFFLEdBQUE2WSxNQUFBLENBQUY3WSxFQUFFO0lBQUVrSixLQUFLLEdBQUEyUCxNQUFBLENBQUwzUCxLQUFLO0VBRVYsSUFBTXZFLEdBQUcsR0FBR0gsS0FBSyxDQUFDM0IsT0FBTyxDQUFDb0UsU0FBUyxDQUFDLFVBQUFSLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUN6RyxFQUFFLEtBQUtBLEVBQUU7RUFBQSxFQUFDO0VBQ3JELElBQUkyRSxHQUFHLEdBQUcsQ0FBQyxJQUFJQSxHQUFHLElBQUlILEtBQUssQ0FBQzNCLE9BQU8sQ0FBQy9FLE1BQU0sRUFBRTtJQUMxQ29QLGVBQU8sQ0FBQ3FKLElBQUksMENBQUE1SyxNQUFBLENBQTBDM0wsRUFBRSxDQUFFLENBQUM7SUFDM0QsT0FBT3dFLEtBQUs7RUFDZDtFQUVBLElBQUkxQixXQUFXLEdBQUcwQixLQUFLLENBQUMxQixXQUFXO0VBQ25DLElBQUlvRyxLQUFLLENBQUNsSixFQUFFLEtBQUs0QyxTQUFTLElBQUlzRyxLQUFLLENBQUNsSixFQUFFLEtBQUtBLEVBQUUsRUFBRTtJQUM3QyxJQUFNOFksSUFBSSxHQUFHdFUsS0FBSyxDQUFDM0IsT0FBTyxDQUFDb0UsU0FBUyxDQUFDLFVBQUFSLENBQUM7TUFBQSxPQUFJQSxDQUFDLENBQUN6RyxFQUFFLEtBQUtrSixLQUFLLENBQUNsSixFQUFFO0lBQUEsRUFBQztJQUM1RCxJQUFJOFksSUFBSSxJQUFJLENBQUMsRUFBRTtNQUNiNUwsZUFBTyxDQUFDcUosSUFBSSxrREFBQTVLLE1BQUEsQ0FBa0QzTCxFQUFFLENBQUUsQ0FBQztNQUNuRSxPQUFPd0UsS0FBSztJQUNkO0lBRUExQixXQUFXLEdBQUdBLFdBQVcsQ0FBQzhCLEdBQUcsQ0FBQyxVQUFBbVUsYUFBYTtNQUFBLE9BQ3pDQSxhQUFhLEtBQUsvWSxFQUFFLEdBQUlrSixLQUFLLENBQUNsSixFQUFFLEdBQWMrWSxhQUFhO0lBQUEsQ0FDN0QsQ0FBQztFQUNIO0VBRUEsSUFBTUMsVUFBVSxPQUFBcE4sbUJBQUEsYUFBT3BILEtBQUssQ0FBQzNCLE9BQU8sQ0FBQztFQUNyQ21XLFVBQVUsQ0FBQ3JVLEdBQUcsQ0FBQyxDQUFDeVQsUUFBUSxDQUFDbFAsS0FBSyxDQUFDO0VBRS9CLE9BQUE3SixhQUFBLENBQUFBLGFBQUEsS0FDS21GLEtBQUs7SUFDUjNCLE9BQU8sRUFBRW1XLFVBQVU7SUFDbkJsVyxXQUFXLEVBQVhBO0VBQVc7QUFFZixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTbVcsb0JBQW9CQSxDQUNsQ3pVLEtBQVEsRUFDUndCLE1BQWtELEVBQy9DO0VBQ0g7RUFDQSxJQUFla1QsVUFBVSxHQUFJbFQsTUFBTSxDQUE1QlcsTUFBTTtFQUNiLElBQU9qRSxRQUFRLEdBQUk4QixLQUFLLENBQWpCOUIsUUFBUTs7RUFFZjtFQUNBLElBQUksQ0FBQ0EsUUFBUSxDQUFDd1csVUFBVSxDQUFDLEVBQUU7SUFDekIsT0FBTzFVLEtBQUs7RUFDZDtFQUVBLElBQ0VwQyxNQUFNLEdBR0pvQyxLQUFLLENBSFBwQyxNQUFNO0lBQUErVyxlQUFBLEdBR0ozVSxLQUFLLENBRFA5QixRQUFRO0lBQWlCZ0UsT0FBTyxHQUFBeVMsZUFBQSxDQUFwQkQsVUFBVTtJQUFlRSxXQUFXLE9BQUE5UCx5QkFBQSxhQUFBNlAsZUFBQSxHQUFwQ0QsVUFBVSxFQUFBdFUsR0FBQSxDQUFBMUgsY0FBQTtFQUd4QixJQUFNbWMsY0FBYyxHQUFHalgsTUFBTSxDQUFDbkQsTUFBTSxDQUFDLFVBQUF3SCxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDdEcsTUFBTSxDQUFDd0csTUFBTSxLQUFLdVMsVUFBVTtFQUFBLEVBQUMsQ0FBQ3RVLEdBQUcsQ0FBQyxVQUFBNkIsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ3pHLEVBQUU7RUFBQSxFQUFDOztFQUV4RjtFQUNBLElBQUlnRixRQUFRLEdBQUdxVSxjQUFjLENBQUNoSyxNQUFNLENBQUMsVUFBQ0MsSUFBSSxFQUFFdFAsRUFBRTtJQUFBLE9BQUsyVyxrQkFBa0IsQ0FBQ3JILElBQUksRUFBRTtNQUFDdFAsRUFBRSxFQUFGQTtJQUFFLENBQUMsQ0FBQztFQUFBLEdBQUFYLGFBQUEsQ0FBQUEsYUFBQSxLQUM1RW1GLEtBQUs7SUFDUjlCLFFBQVEsRUFBRTBXO0VBQVcsRUFDdEIsQ0FBQzs7RUFFRjtFQUNBLElBQU01VyxPQUFpQixHQUFHLEVBQUU7RUFBQyxJQUFBOFcsVUFBQSxHQUFBN2IsMEJBQUEsQ0FDUnVILFFBQVEsQ0FBQ3hDLE9BQU87SUFBQStXLE1BQUE7RUFBQTtJQUFyQyxLQUFBRCxVQUFBLENBQUFyYixDQUFBLE1BQUFzYixNQUFBLEdBQUFELFVBQUEsQ0FBQS9jLENBQUEsSUFBQTJCLElBQUEsR0FBdUM7TUFBQSxJQUE1QmUsTUFBTSxHQUFBc2EsTUFBQSxDQUFBcGIsS0FBQTtNQUNmLElBQU13UyxVQUFVLEdBQUcxUixNQUFNLENBQUMwSCxNQUFNLENBQUM2UyxPQUFPLENBQUNOLFVBQVUsQ0FBQztNQUNwRCxJQUFJdkksVUFBVSxJQUFJLENBQUMsSUFBSTFSLE1BQU0sQ0FBQzBILE1BQU0sQ0FBQzdJLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDL0M7UUFDQTBFLE9BQU8sQ0FBQ3JELElBQUksQ0FBQzhTLCtCQUErQixDQUFDaFQsTUFBTSxFQUFFMFIsVUFBVSxFQUFFak8sUUFBUSxDQUFDLENBQUM7TUFDN0UsQ0FBQyxNQUFNLElBQUlpTyxVQUFVLEdBQUcsQ0FBQyxFQUFFO1FBQ3pCO1FBQ0FuTyxPQUFPLENBQUNyRCxJQUFJLENBQUNGLE1BQU0sQ0FBQztNQUN0QjtJQUNGO0VBQUMsU0FBQXVKLEdBQUE7SUFBQThRLFVBQUEsQ0FBQXZkLENBQUEsQ0FBQXlNLEdBQUE7RUFBQTtJQUFBOFEsVUFBQSxDQUFBbGIsQ0FBQTtFQUFBO0VBRUQ0RyxRQUFRLEdBQUEzRixhQUFBLENBQUFBLGFBQUEsS0FBTzJGLFFBQVE7SUFBRXhDLE9BQU8sRUFBUEE7RUFBTyxFQUFDO0VBRWpDLE9BQU9pWCxrQ0FBa0MsQ0FBQ3pVLFFBQVEsRUFBRTtJQUFDMkIsTUFBTSxFQUFFdVM7RUFBVSxDQUFDLENBQUM7QUFDM0U7QUFFQSxTQUFTTyxrQ0FBa0NBLENBQUNqVixLQUFLLEVBQUFrVixNQUFBLEVBQVk7RUFBQSxJQUFUL1MsTUFBTSxHQUFBK1MsTUFBQSxDQUFOL1MsTUFBTTtFQUN4RCxJQUFLNUQsaUJBQWlCLEdBQUl5QixLQUFLLENBQTFCekIsaUJBQWlCO0VBQ3RCLElBQUE0VyxrQkFBQSxHQUFrQjVXLGlCQUFpQjtJQUE1QmhELE9BQU8sR0FBQTRaLGtCQUFBLENBQVA1WixPQUFPO0VBQ2QsSUFBSUEsT0FBTyxFQUFFO0lBQ1gsSUFBT0ksTUFBTSxHQUFJSixPQUFPLENBQWpCSSxNQUFNO0lBQ2I7SUFDQSxJQUFBeVosb0JBQUEsR0FBNEN6WixNQUFNLENBQUNDLFlBQVk7TUFBOUN5WixNQUFNLEdBQUFELG9CQUFBLENBQWZqVCxNQUFNO01BQWN2RyxZQUFZLE9BQUFrSix5QkFBQSxhQUFBc1Esb0JBQUEsR0FBaENqVCxNQUFNLEVBQUEvQixHQUFBLENBQUExSCxjQUFBO0lBQ2Q2RixpQkFBaUIsR0FBQTFELGFBQUEsQ0FBQUEsYUFBQSxLQUNaMEQsaUJBQWlCO01BQ3BCaEQsT0FBTyxFQUFBVixhQUFBLENBQUFBLGFBQUEsS0FBTVUsT0FBTztRQUFFSSxNQUFNLEVBQUFkLGFBQUEsQ0FBQUEsYUFBQSxLQUFNYyxNQUFNO1VBQUVDLFlBQVksRUFBWkE7UUFBWTtNQUFDO0lBQUMsRUFDekQ7RUFDSDtFQUVBLE9BQUFmLGFBQUEsQ0FBQUEsYUFBQSxLQUFXbUYsS0FBSztJQUFFekIsaUJBQWlCLEVBQWpCQTtFQUFpQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNK1csMEJBQTBCLEdBQUFoYSxPQUFBLENBQUFnYSwwQkFBQSxHQUFHLFNBQTdCQSwwQkFBMEJBLENBQ3JDdFYsS0FBZSxFQUNmd0IsTUFBd0Q7RUFBQSxPQUFBM0csYUFBQSxDQUFBQSxhQUFBLEtBRXJEbUYsS0FBSztJQUNSdkIsYUFBYSxFQUFFK0MsTUFBTSxDQUFDdEU7RUFBSTtBQUFBLENBQzFCOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNcVksNEJBQTRCLEdBQUFqYSxPQUFBLENBQUFpYSw0QkFBQSxHQUFHLFNBQS9CQSw0QkFBNEJBLENBQ3ZDdlYsS0FBZSxFQUNmd0IsTUFBMEQ7RUFBQSxPQUFBM0csYUFBQSxDQUFBQSxhQUFBLEtBRXZEbUYsS0FBSztJQUNSdEIsZUFBZSxFQUFFOEMsTUFBTSxDQUFDdEU7RUFBSTtBQUFBLENBQzVCOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNc1ksdUJBQXVCLEdBQUFsYSxPQUFBLENBQUFrYSx1QkFBQSxHQUFHLFNBQTFCQSx1QkFBdUJBLENBQ2xDeFYsS0FBZSxFQUNmd0IsTUFBcUQsRUFDeEM7RUFDYixPQUFBM0csYUFBQSxDQUFBQSxhQUFBLEtBQ0ttRixLQUFLO0lBQ1I3QixjQUFjLEVBQUVxRCxNQUFNLENBQUNXO0VBQU07QUFFakMsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTXNULHVCQUF1QixHQUFBbmEsT0FBQSxDQUFBbWEsdUJBQUEsR0FBRyxTQUExQkEsdUJBQXVCQSxDQUNsQ3pWLEtBQWUsRUFDZndCLE1BQWlELEVBQ3BDO0VBQ2IsT0FBT2tVLHlCQUF5QixDQUFDMVYsS0FBSyxFQUFFO0lBQUNtQyxNQUFNLEVBQUVYLE1BQU0sQ0FBQ1csTUFBTTtJQUFFdUMsS0FBSyxFQUFFO01BQUNpRixLQUFLLEVBQUVuSSxNQUFNLENBQUNtVTtJQUFRO0VBQUMsQ0FBQyxDQUFDO0FBQ25HLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1DLHFCQUFxQixHQUFBdGEsT0FBQSxDQUFBc2EscUJBQUEsR0FBRyxTQUF4QkEscUJBQXFCQSxDQUFJNVYsS0FBZTtFQUFBLE9BQUFuRixhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxLQUNoRDJDLGlCQUFpQixHQUNqQndDLEtBQUssQ0FBQzZWLFlBQVk7SUFDckJBLFlBQVksRUFBRTdWLEtBQUssQ0FBQzZWO0VBQVk7QUFBQSxDQUNoQzs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTUMsdUJBQXVCLEdBQUF4YSxPQUFBLENBQUF3YSx1QkFBQSxHQUFHLFNBQTFCQSx1QkFBdUJBLENBQ2xDOVYsS0FBZSxFQUFBK1YsTUFBQSxFQU9GO0VBQUEsSUFBQUMsY0FBQSxHQUFBRCxNQUFBLENBTFhFLE9BQU87SUFBQUMscUJBQUEsR0FBQUYsY0FBQSxDQUFHcmEsTUFBTTtJQUFOQSxNQUFNLEdBQUF1YSxxQkFBQSxjQUFHLENBQUMsQ0FBQyxHQUFBQSxxQkFBQTtJQUFBQyxxQkFBQSxHQUFBSCxjQUFBLENBQUVJLE9BQU87SUFBUEEsT0FBTyxHQUFBRCxxQkFBQSxjQUFHLENBQUMsQ0FBQyxHQUFBQSxxQkFBQTtFQU1yQyxJQUFJLENBQUN4YSxNQUFNLENBQUMwYSxRQUFRLEVBQUU7SUFDcEIsT0FBT3JXLEtBQUs7RUFDZDtFQUVBLElBQU9zVyxrQkFBa0IsR0FBSUYsT0FBTyxDQUE3QkUsa0JBQWtCOztFQUV6QjtFQUNBLElBQUlDLFdBQVcsR0FBRyxDQUFDRCxrQkFBa0IsR0FBR1YscUJBQXFCLENBQUM1VixLQUFLLENBQUMsR0FBR0EsS0FBSztFQUFDLElBQUF3VyxVQUFBLEdBQUF2ZCwwQkFBQSxDQUN4RCtHLEtBQUssQ0FBQ0wsT0FBTztJQUFBOFcsTUFBQTtFQUFBO0lBQWxDLEtBQUFELFVBQUEsQ0FBQS9jLENBQUEsTUFBQWdkLE1BQUEsR0FBQUQsVUFBQSxDQUFBemUsQ0FBQSxJQUFBMkIsSUFBQSxHQUFvQztNQUFBLElBQXpCZ2QsTUFBTSxHQUFBRCxNQUFBLENBQUE5YyxLQUFBO01BQ2YsSUFBSSxJQUFBZ2QsNEJBQWEsRUFBQ0QsTUFBTSxDQUFDLElBQUksSUFBQUUsOEJBQWUsRUFBQ2piLE1BQU0sQ0FBQzBhLFFBQVEsRUFBRUssTUFBTSxDQUFDalQsSUFBSSxDQUFDLEVBQUU7UUFDMUU4UyxXQUFXLEdBQUdHLE1BQU0sQ0FBQ0csS0FBSyxDQUN4Qk4sV0FBVyxFQUNYLElBQUFPLG1DQUFvQixFQUFDbmIsTUFBTSxDQUFDMGEsUUFBUSxFQUFFSyxNQUFNLENBQUNqVCxJQUFJLEVBQUVpVCxNQUFNLENBQUNLLFdBQVcsQ0FBQztRQUN0RTtRQUNBLElBQ0YsQ0FBQztNQUNIO0lBQ0Y7RUFBQyxTQUFBL1MsR0FBQTtJQUFBd1MsVUFBQSxDQUFBamYsQ0FBQSxDQUFBeU0sR0FBQTtFQUFBO0lBQUF3UyxVQUFBLENBQUE1YyxDQUFBO0VBQUE7RUFFRCxPQUFPMmMsV0FBVztBQUNwQixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNUyxpQkFBaUIsR0FBQTFiLE9BQUEsQ0FBQTBiLGlCQUFBLEdBQUcsU0FBcEJBLGlCQUFpQkEsQ0FDNUJoWCxLQUFlLEVBQ2Z3QixNQUFpRDtFQUFBLE9BQUEzRyxhQUFBLENBQUFBLGFBQUEsS0FFOUNtRixLQUFLO0lBQ1JyQixTQUFTLEVBQUE5RCxhQUFBLENBQUFBLGFBQUEsS0FFSjJHLE1BQU0sQ0FBQ3lWLElBQUksR0FDVmplLE1BQU0sQ0FBQ3FaLFFBQVEsQ0FBQzdRLE1BQU0sQ0FBQ29FLFFBQVEsQ0FBQyxHQUFHO01BQUNBLFFBQVEsRUFBRXBFLE1BQU0sQ0FBQ29FO0lBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN4RTtBQUFBLENBQ0Q7O0FBRUY7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNzUiw4QkFBOEJBLENBQzVDbFgsS0FBZSxFQUNmd0IsTUFBNEQsRUFDbEQ7RUFDVixJQUFPN0YsTUFBTSxHQUFJNkYsTUFBTSxDQUFoQjdGLE1BQU07RUFFYixJQUFNNEMsaUJBQWlCLEdBQUExRCxhQUFBLENBQUFBLGFBQUEsS0FDbEJtRixLQUFLLENBQUN6QixpQkFBaUIsT0FBQXZELGdCQUFBLGlCQUNyQlcsTUFBTSxDQUFDSCxFQUFFLEVBQUdHLE1BQU0sRUFDeEI7O0VBRUQ7RUFDQTtFQUNBLElBQU13YixVQUFVLEdBQUcsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDO0VBRXZDLElBQ0VBLFVBQVUsQ0FBQ25RLFFBQVEsQ0FBQ3JMLE1BQU0sQ0FBQ0gsRUFBRSxDQUFDLElBQzlCRyxNQUFNLENBQUNELE9BQU8sSUFDZCxDQUFDc0UsS0FBSyxDQUFDekIsaUJBQWlCLENBQUM1QyxNQUFNLENBQUNILEVBQUUsQ0FBQyxDQUFDRSxPQUFPLEVBQzNDO0lBQ0E7SUFDQXliLFVBQVUsQ0FBQ3BjLE9BQU8sQ0FBQyxVQUFBcWMsQ0FBQyxFQUFJO01BQ3RCLElBQUlBLENBQUMsS0FBS3piLE1BQU0sQ0FBQ0gsRUFBRSxFQUFFO1FBQ25CK0MsaUJBQWlCLENBQUM2WSxDQUFDLENBQUMsR0FBQXZjLGFBQUEsQ0FBQUEsYUFBQSxLQUFPMEQsaUJBQWlCLENBQUM2WSxDQUFDLENBQUM7VUFBRTFiLE9BQU8sRUFBRTtRQUFLLEVBQUM7TUFDbEU7SUFDRixDQUFDLENBQUM7RUFDSjtFQUVBLElBQU04RSxRQUFRLEdBQUEzRixhQUFBLENBQUFBLGFBQUEsS0FDVG1GLEtBQUs7SUFDUnpCLGlCQUFpQixFQUFqQkE7RUFBaUIsRUFDbEI7RUFFRCxJQUFJNUMsTUFBTSxDQUFDSCxFQUFFLEtBQUssVUFBVSxJQUFJLENBQUNHLE1BQU0sQ0FBQ0QsT0FBTyxFQUFFO0lBQy9DLE9BQU8rWSxvQkFBb0IsQ0FBQ2pVLFFBQVEsRUFBRTtNQUFDMkIsTUFBTSxFQUFFO0lBQWtCLENBQUMsQ0FBQztFQUNyRTtFQUVBLE9BQU8zQixRQUFRO0FBQ2pCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNNlcsaUJBQWlCLEdBQUEvYixPQUFBLENBQUErYixpQkFBQSxHQUFHLFNBQXBCQSxpQkFBaUJBLENBQzVCclgsS0FBZSxFQUNmd0IsTUFBaUQ7RUFBQSxPQUFBM0csYUFBQSxDQUFBQSxhQUFBLEtBRTlDbUYsS0FBSztJQUNSbkIsUUFBUSxFQUFFbUIsS0FBSyxDQUFDekIsaUJBQWlCLENBQUNsQyxVQUFVLENBQUNYLE9BQU8sR0FBQWIsYUFBQSxDQUFBQSxhQUFBLEtBRTNDbUYsS0FBSyxDQUFDbkIsUUFBUTtNQUNqQnlZLE1BQU0sRUFBRXRYLEtBQUssQ0FBQ25CLFFBQVEsQ0FBQ3lZLE1BQU0sR0FBRyxJQUFJLEdBQUcsSUFBQUMsa0JBQVMsRUFBQ3ZYLEtBQUssQ0FBQ25CLFFBQVE7SUFBQyxLQUVsRW1CLEtBQUssQ0FBQ25CLFFBQVE7SUFDbEJELE9BQU8sRUFBRTRDLE1BQU0sQ0FBQ3lWLElBQUksSUFBSXpWLE1BQU0sQ0FBQ3lWLElBQUksQ0FBQ08sTUFBTSxHQUFHaFcsTUFBTSxDQUFDeVYsSUFBSSxHQUFHO0VBQUk7QUFBQSxDQUMvRDs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTVEsZUFBZSxHQUFBbmMsT0FBQSxDQUFBbWMsZUFBQSxHQUFHLFNBQWxCQSxlQUFlQSxDQUMxQnpYLEtBQWUsRUFFZndCLE1BQStDLEVBQ2xDO0VBQ2IsT0FBQTNHLGFBQUEsQ0FBQUEsYUFBQSxLQUNLbUYsS0FBSztJQUNScEIsT0FBTyxFQUFFO0VBQUk7QUFFakIsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTThZLGdCQUFnQixHQUFBcGMsT0FBQSxDQUFBb2MsZ0JBQUEsR0FBRyxTQUFuQkEsZ0JBQWdCQSxDQUMzQjFYLEtBQWUsRUFBQTJYLE1BQUEsRUFFRjtFQUFBLElBRFpDLEdBQUcsR0FBQUQsTUFBQSxDQUFIQyxHQUFHO0VBRUosSUFBSTFmLE1BQU0sQ0FBQytULE1BQU0sQ0FBQ2pNLEtBQUssQ0FBQ3pCLGlCQUFpQixDQUFDLENBQUNtRixJQUFJLENBQUMsVUFBQS9ILE1BQU07SUFBQSxPQUFJQSxNQUFNLENBQUNELE9BQU87RUFBQSxFQUFDLEVBQUU7SUFDekUsT0FBQWIsYUFBQSxDQUFBQSxhQUFBLEtBQ0ttRixLQUFLO01BQ1JuQixRQUFRLEVBQUFoRSxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxLQUNIbUYsS0FBSyxDQUFDbkIsUUFBUSxHQUNiMUYsS0FBSyxDQUFDQyxPQUFPLENBQUN3ZSxHQUFHLENBQUNDLEtBQUssQ0FBQyxHQUFHO1FBQUNDLGFBQWEsTUFBQTFRLG1CQUFBLGFBQU13USxHQUFHLENBQUNDLEtBQUs7TUFBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQy9EMWUsS0FBSyxDQUFDQyxPQUFPLENBQUN3ZSxHQUFHLENBQUNHLE1BQU0sQ0FBQyxHQUFHO1FBQUMxYixVQUFVLE1BQUErSyxtQkFBQSxhQUFNd1EsR0FBRyxDQUFDRyxNQUFNO01BQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuRTtFQUVMO0VBRUEsT0FBTy9YLEtBQUs7QUFDZCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1nWSxxQkFBcUIsR0FBQTFjLE9BQUEsQ0FBQTBjLHFCQUFBLEdBQUcsU0FBeEJBLHFCQUFxQkEsQ0FDaENoWSxLQUFlLEVBQ2Z3QixNQUFtRDtFQUFBLE9BRW5EeEIsS0FBSyxDQUFDaEIsU0FBUyxJQUFJZ0IsS0FBSyxDQUFDaEIsU0FBUyxDQUFDMUYsTUFBTSxLQUFLLENBQUMsR0FBQXVCLGFBQUEsQ0FBQUEsYUFBQSxLQUV0Q21GLEtBQUs7SUFDUjtJQUNBO0lBQ0FoQixTQUFTLEVBQUUsSUFBQWlaLDRCQUFxQixFQUFDalksS0FBSyxDQUFDcEMsTUFBTSxFQUFFO01BQUNzYSxTQUFTLEVBQUU7SUFBSyxDQUFDO0VBQUMsS0FFcEVDLHVCQUF1QixDQUFDblksS0FBSyxFQUFFd0IsTUFBTSxDQUFDO0FBQUE7O0FBRTVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNc0Usd0JBQXdCLEdBQUF4SyxPQUFBLENBQUF3Syx3QkFBQSxHQUFHLFNBQTNCQSx3QkFBd0JBLENBQ25DOUYsS0FBZSxFQUFBb1ksTUFBQSxFQUVGO0VBQUEsSUFEWnhTLFFBQVEsR0FBQXdTLE1BQUEsQ0FBUnhTLFFBQVE7SUFBRUYsT0FBTyxHQUFBMFMsTUFBQSxDQUFQMVMsT0FBTztFQUVsQixJQUFPMUcsU0FBUyxHQUFJZ0IsS0FBSyxDQUFsQmhCLFNBQVM7RUFFaEIsT0FBQW5FLGFBQUEsQ0FBQUEsYUFBQSxLQUNLbUYsS0FBSztJQUNSaEIsU0FBUyxFQUFFQSxTQUFTLENBQUNvQixHQUFHLENBQUMsVUFBQ3lGLEVBQUUsRUFBRXJOLENBQUM7TUFBQSxPQUM3QkEsQ0FBQyxLQUFLb04sUUFBUSxHQUFBL0ssYUFBQSxDQUFBQSxhQUFBLEtBRUxtRSxTQUFTLENBQUN4RyxDQUFDLENBQUM7UUFDZm9GLE1BQU0sRUFBQS9DLGFBQUEsQ0FBQUEsYUFBQSxLQUNEbUUsU0FBUyxDQUFDeEcsQ0FBQyxDQUFDLENBQUNvRixNQUFNLFdBQUE1QyxnQkFBQSxpQkFFckIwSyxPQUFPLEVBQUcsQ0FBQzFHLFNBQVMsQ0FBQ3hHLENBQUMsQ0FBQyxDQUFDb0YsTUFBTSxDQUFDOEgsT0FBTyxDQUFDO01BQ3pDLEtBRUhHLEVBQUU7SUFBQSxDQUNSO0VBQUM7QUFFTCxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU13UyxvQkFBb0IsR0FBQS9jLE9BQUEsQ0FBQStjLG9CQUFBLEdBQUcsU0FBdkJBLG9CQUFvQkEsQ0FDL0JyWSxLQUFlLEVBQ2Z3QixNQUFrRCxFQUNyQztFQUNiO0VBQ0EsSUFBTzdGLE1BQU0sR0FBYTZGLE1BQU0sQ0FBekI3RixNQUFNO0lBQUV5YSxPQUFPLEdBQUk1VSxNQUFNLENBQWpCNFUsT0FBTzs7RUFFdEI7RUFDQTtFQUNBLElBQU1rQyxhQUFhLEdBQUczYyxNQUFNLEdBQ3hCbWEsdUJBQXVCLENBQUM5VixLQUFLLEVBQUU7SUFDN0JpVyxPQUFPLEVBQUU7TUFBQ3RhLE1BQU0sRUFBTkEsTUFBTTtNQUFFeWEsT0FBTyxFQUFQQTtJQUFPO0VBQzNCLENBQUMsQ0FBQyxHQUNGcFcsS0FBSztFQUVULElBQU05QixRQUFRLEdBQUcsSUFBQWtPLG9CQUFPLEVBQUM1SyxNQUFNLENBQUN0RCxRQUFRLENBQUM7RUFFekMsSUFBTXFhLHNCQUFzQixHQUFHcmEsUUFBUSxDQUFDa0MsR0FBRyxDQUN6QyxVQUFBb1ksTUFBQTtJQUFBLElBQUFDLFdBQUEsR0FBQUQsTUFBQSxDQUFFdkIsSUFBSTtNQUFKQSxJQUFJLEdBQUF3QixXQUFBLGNBQUcsQ0FBQyxDQUFDLEdBQUFBLFdBQUE7TUFBS0MsSUFBSSxPQUFBNVQseUJBQUEsYUFBQTBULE1BQUEsRUFBQW5oQixVQUFBO0lBQUEsT0FBTSxJQUFBc2hCLHlCQUFrQixFQUFBOWQsYUFBQTtNQUFFb2MsSUFBSSxFQUFKQTtJQUFJLEdBQUt5QixJQUFJLEdBQUcxWSxLQUFLLENBQUM5QixRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7RUFBQSxDQUNyRixDQUFDO0VBQ0Q7RUFDQSxJQUFNMGEsS0FBSyxHQUFHQyxpQkFBSSxDQUFDQyxVQUFVLENBQUNQLHNCQUFzQixDQUFDLENBQUNuWSxHQUFHLENBQUMsVUFBQTJZLE9BQU87SUFBQSxPQUMvRCxJQUFBQyxnQ0FBdUIsRUFBQztNQUFDRCxPQUFPLEVBQVBBLE9BQU87TUFBRUUsZUFBZSxFQUFFN0M7SUFBTyxDQUFDLENBQUM7RUFBQSxDQUM5RCxDQUFDO0VBRUQsT0FBTyxJQUFBOEMsZUFBUSxFQUFDWixhQUFhLEVBQUVNLEtBQUssQ0FBQztBQUN2QyxDQUFDO0FBRU0sSUFBTU8sOEJBQThCLEdBQUE3ZCxPQUFBLENBQUE2ZCw4QkFBQSxHQUFHLFNBQWpDQSw4QkFBOEJBLENBQ3pDblosS0FBZSxFQUNmd0IsTUFBcUQsRUFDeEM7RUFDYjtFQUNBLElBQUE0WCxlQUFBLEdBQW1DNVgsTUFBTSxDQUFDeVUsT0FBTztJQUExQzhDLE9BQU8sR0FBQUssZUFBQSxDQUFQTCxPQUFPO0lBQUVFLGVBQWUsR0FBQUcsZUFBQSxDQUFmSCxlQUFlO0VBQy9CLElBQU1JLGNBQWMsR0FBR04sT0FBTyxDQUFDbE8sTUFBTSxDQUFDLFVBQUNDLElBQUksRUFBRXhDLE1BQU0sRUFBSztJQUN0RCxJQUFJQSxNQUFNLENBQUNnUixNQUFNLEtBQUssV0FBVyxFQUFFO01BQ2pDLElBQU1wWCxPQUFPLEdBQUdvRyxNQUFNLENBQUMzTyxLQUFLO01BQzVCLE9BQUFrQixhQUFBLENBQUFBLGFBQUEsS0FBV2lRLElBQUksV0FBQTlQLGdCQUFBLGlCQUFHa0gsT0FBTyxDQUFDMUcsRUFBRSxFQUFHMEcsT0FBTztJQUN4QyxDQUFDLE1BQU07TUFDTDtNQUNBcVgsT0FBTyxDQUFDNVEsS0FBSyxDQUFDTCxNQUFNLENBQUNrUixNQUFNLENBQUM7TUFDNUIsT0FBTzFPLElBQUk7SUFDYjtFQUNGLENBQUMsRUFBRSxDQUFDLENBQWEsQ0FBQztFQUNsQjtFQUNBLElBQU15TCxXQUFXLEdBQUExYixhQUFBLENBQUFBLGFBQUEsS0FDWm1GLEtBQUs7SUFDUjlCLFFBQVEsRUFBRSxJQUFBdWIsb0NBQW9CLEVBQUN6WixLQUFLLEVBQUVxWixjQUFjO0VBQUMsRUFDdEQ7O0VBRUQ7RUFDQSxJQUFNSyxZQUFZLEdBQUcxWixLQUFLLENBQUNMLE9BQU8sQ0FBQ2xGLE1BQU0sQ0FBQyxVQUFBa2YsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ0MsZ0JBQWdCO0VBQUEsRUFBQztFQUNsRSxJQUFNQyxjQUFjLEdBQUc3WixLQUFLLENBQUNMLE9BQU8sQ0FBQ2xGLE1BQU0sQ0FBQyxVQUFBa2YsQ0FBQztJQUFBLE9BQUksQ0FBQ0QsWUFBWSxDQUFDMVMsUUFBUSxDQUFDMlMsQ0FBQyxDQUFDO0VBQUEsRUFBQztFQUUzRSxJQUFNdEssVUFBVSxHQUFHblgsTUFBTSxDQUFDcUMsSUFBSSxDQUFDOGUsY0FBYyxDQUFDO0VBQzlDLElBQU1TLGlCQUFpQixHQUFHO0lBQ3hCekssVUFBVSxFQUFWQSxVQUFVO0lBQ1YrRyxPQUFPLEVBQUU2QyxlQUFlO0lBQ3hCUyxZQUFZLEVBQVpBO0VBQ0YsQ0FBQztFQUVELE9BQU9LLG1CQUFtQixDQUFDeEQsV0FBVyxFQUFFO0lBQUM1VyxPQUFPLEVBQUVrYSxjQUFjO0lBQUVDLGlCQUFpQixFQUFqQkE7RUFBaUIsQ0FBQyxDQUFDO0FBQ3ZGLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ08sU0FBU0MsbUJBQW1CQSxDQUNqQy9aLEtBQWUsRUFDZndCLE1BR0MsRUFDUztFQUNWLElBQU83QixPQUFPLEdBQXVCNkIsTUFBTSxDQUFwQzdCLE9BQU87SUFBRW1hLGlCQUFpQixHQUFJdFksTUFBTSxDQUEzQnNZLGlCQUFpQjs7RUFFakM7RUFDQSxJQUFNRSxnQkFBZ0IsR0FBRyxJQUFBQyxvQ0FBcUIsRUFDNUNqYSxLQUFLLEVBQUFuRixhQUFBLENBQUFBLGFBQUEsS0FFQTJDLGlCQUFpQixHQUNqQndDLEtBQUssQ0FBQzZWLFlBQVksR0FFdkJsVyxPQUFPO0VBQ1A7RUFDQW1hLGlCQUNGLENBQUM7O0VBRUQ7RUFDQTtFQUNBLE9BQU9FLGdCQUFnQixDQUFDRSxTQUFTLEdBQzdCQyxnQkFBZ0IsQ0FBQ0gsZ0JBQWdCLENBQUN6RCxXQUFXLEVBQUV1RCxpQkFBaUIsQ0FBQyxHQUNqRUUsZ0JBQWdCLENBQUN6RCxXQUFXO0FBQ2xDOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM0RCxnQkFBZ0JBLENBQUM1RCxXQUFxQixFQUFFdUQsaUJBQW9DLEVBQVk7RUFDL0YsSUFBT3pLLFVBQVUsR0FBMkJ5SyxpQkFBaUIsQ0FBdER6SyxVQUFVO0lBQUUrRyxPQUFPLEdBQWtCMEQsaUJBQWlCLENBQTFDMUQsT0FBTztJQUFFc0QsWUFBWSxHQUFJSSxpQkFBaUIsQ0FBakNKLFlBQVk7RUFDeEMsSUFBTWpJLFVBQVUsR0FBRzhFLFdBQVcsQ0FBQ3ZZLE9BQU8sQ0FBQ3ZELE1BQU0sQ0FBQyxVQUFBYixDQUFDO0lBQUEsT0FDN0NBLENBQUMsQ0FBQ3VJLE1BQU0sQ0FBQ0gsSUFBSSxDQUFDLFVBQUFvWSxPQUFPO01BQUEsT0FBSS9LLFVBQVUsQ0FBQ3JJLFFBQVEsQ0FBQ29ULE9BQU8sQ0FBQztJQUFBLEVBQUM7RUFBQSxDQUN4RCxDQUFDO0VBQ0QsSUFBTUMsZUFBeUIsR0FBRyxJQUFBcE4sbUJBQUksRUFDcEN3RSxVQUFVLENBQUM1RyxNQUFNLENBQUMsVUFBQ0MsSUFBSSxFQUFFbFIsQ0FBQztJQUFBLFVBQUF1TixNQUFBLEtBQUFDLG1CQUFBLGFBQVMwRCxJQUFJLE9BQUExRCxtQkFBQSxhQUFLeE4sQ0FBQyxDQUFDdUksTUFBTTtFQUFBLENBQUMsRUFBRSxFQUFjLENBQ3ZFLENBQUM7RUFDRCxJQUFNbVksU0FBUyxHQUFHakwsVUFBVSxDQUFDL1YsTUFBTSxHQUFHLENBQUM7RUFFdkMsSUFBSWloQixTQUFTLEdBQUcsQ0FBQ0QsU0FBUyxHQUN0Qi9ELFdBQVcsQ0FBQzNZLE1BQU0sQ0FBQ25ELE1BQU0sQ0FBQyxVQUFBd0gsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ3RHLE1BQU0sQ0FBQ3dHLE1BQU0sSUFBSWtOLFVBQVUsQ0FBQ3JJLFFBQVEsQ0FBQy9FLENBQUMsQ0FBQ3RHLE1BQU0sQ0FBQ3dHLE1BQU0sQ0FBQztFQUFBLEVBQUMsR0FDdkYsRUFBRTtFQUVOLElBQU1rWCxjQUFjLEdBQUdoSyxVQUFVLENBQUN4RSxNQUFNLENBQ3RDLFVBQUNDLElBQUksRUFBRXRQLEVBQUU7SUFBQSxPQUFBWCxhQUFBLENBQUFBLGFBQUEsS0FDSmlRLElBQUksV0FBQTlQLGdCQUFBLGlCQUNOUSxFQUFFLEVBQUcrYSxXQUFXLENBQUNyWSxRQUFRLENBQUMxQyxFQUFFLENBQUM7RUFBQSxDQUM5QixFQUNGLENBQUMsQ0FDSCxDQUFDO0VBRUQsSUFBSSxDQUFDK2UsU0FBUyxDQUFDamhCLE1BQU0sSUFBSSxDQUFDOGMsT0FBTyxJQUFJLENBQUMsQ0FBQyxFQUFFb0UsZ0JBQWdCLEtBQUssS0FBSyxFQUFFO0lBQ25FO0lBQ0EsSUFBTWxTLE1BQU0sR0FBR21TLGdCQUFnQixDQUFDbEUsV0FBVyxFQUFFOEMsY0FBYyxDQUFDO0lBQzVEOUMsV0FBVyxHQUFHak8sTUFBTSxDQUFDdEksS0FBSztJQUMxQnVhLFNBQVMsR0FBR2pTLE1BQU0sQ0FBQ2lTLFNBQVM7RUFDOUI7RUFFQSxJQUFJaEUsV0FBVyxDQUFDdlgsU0FBUyxDQUFDMUYsTUFBTSxFQUFFO0lBQ2hDO0lBQ0FpaEIsU0FBUyxHQUFHaEUsV0FBVyxDQUFDM1ksTUFBTSxDQUFDbkQsTUFBTSxDQUNuQyxVQUFBd0gsQ0FBQztNQUFBLE9BQUlBLENBQUMsQ0FBQ3RHLE1BQU0sQ0FBQ3dHLE1BQU0sSUFBSWtOLFVBQVUsQ0FBQ3JJLFFBQVEsQ0FBQy9FLENBQUMsQ0FBQ3RHLE1BQU0sQ0FBQ3dHLE1BQU0sQ0FBQztJQUFBLENBQzlELENBQUM7SUFDRG9VLFdBQVcsR0FBQTFiLGFBQUEsQ0FBQUEsYUFBQSxLQUNOMGIsV0FBVztNQUNkdlgsU0FBUyxFQUFFLElBQUEwQiw2QkFBc0IsRUFBQzZWLFdBQVcsQ0FBQ3ZYLFNBQVMsRUFBRXViLFNBQVM7SUFBQyxFQUNwRTtFQUNIOztFQUVBO0VBQ0FsTCxVQUFVLENBQUN0VSxPQUFPLENBQUMsVUFBQW9ILE1BQU0sRUFBSTtJQUMzQixJQUFNdVksYUFBYSxHQUFHbkUsV0FBVyxDQUFDaFksaUJBQWlCLENBQUNoRCxPQUFPLENBQUNJLE1BQU0sQ0FBQ0MsWUFBWSxDQUFDdUcsTUFBTSxDQUFDO0lBQ3ZGO0lBQ0EsSUFDRSxDQUFBaVUsT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUV1RSxrQkFBa0IsTUFBSyxLQUFLLEtBQ3BDLENBQUN4aEIsS0FBSyxDQUFDQyxPQUFPLENBQUNzaEIsYUFBYSxDQUFDLElBQUksQ0FBQ0EsYUFBYSxDQUFDcGhCLE1BQU0sQ0FBQyxFQUN4RDtNQUNBO01BQ0FpZCxXQUFXLEdBQUdxRSxrQkFBa0IsQ0FBQ3JFLFdBQVcsRUFBRThDLGNBQWMsQ0FBQ2xYLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZFO0VBQ0YsQ0FBQyxDQUFDO0VBRUYsSUFBTTBZLGVBQWUsR0FBR1AsU0FBUyxHQUM3QnBpQixNQUFNLENBQUNxQyxJQUFJLENBQUNnYyxXQUFXLENBQUNyWSxRQUFRLENBQUMsR0FDakMsSUFBQStPLG1CQUFJLEVBQUMvVSxNQUFNLENBQUNxQyxJQUFJLENBQUM4ZSxjQUFjLENBQUMsQ0FBQ2xTLE1BQU0sQ0FBQ2tULGVBQWUsQ0FBQyxDQUFDO0VBRTdELElBQUk5USxZQUFZLEdBQUc2RCx3QkFBd0IsQ0FBQ21KLFdBQVcsRUFBRXNFLGVBQWUsRUFBRXpjLFNBQVMsQ0FBQzs7RUFFcEY7RUFDQTtFQUNBbUwsWUFBWSxHQUFHMUkscUJBQXFCLENBQUMwSSxZQUFZLENBQUM7O0VBRWxEO0VBQ0FBLFlBQVksR0FDVm1RLFlBQVksSUFBSUEsWUFBWSxDQUFDcGdCLE1BQU0sR0FBRyxDQUFDLEdBQ25DeWdCLG1CQUFtQixDQUFDeFEsWUFBWSxFQUFFO0lBQ2hDNUosT0FBTyxFQUFFK1osWUFBWTtJQUNyQkksaUJBQWlCLEVBQUFqZixhQUFBLENBQUFBLGFBQUEsS0FBTWlmLGlCQUFpQjtNQUFFSixZQUFZLEVBQUU7SUFBRTtFQUM1RCxDQUFDLENBQUMsR0FDRm5RLFlBQVk7O0VBRWxCO0VBQ0EsSUFBSWdSLFNBQVMsQ0FBQ2poQixNQUFNLElBQUksQ0FBQzhjLE9BQU8sSUFBSSxDQUFDLENBQUMsRUFBRTBFLFNBQVMsRUFBRTtJQUNqRCxJQUFNQyxNQUFNLEdBQUcsSUFBQUMsd0JBQWEsRUFBQ1QsU0FBUyxDQUFDO0lBQ3ZDLElBQUlRLE1BQU0sRUFBRTtNQUNWLElBQU1FLGFBQWEsR0FBRyxJQUFBQyxtQkFBVyxFQUFDLENBQUMsQ0FBQzlhLEdBQUcsQ0FBQyxZQUFNO1FBQzVDLE9BQU8sSUFBQSthLGtCQUFZLEVBQUNKLE1BQU0sQ0FBQztNQUM3QixDQUFDLENBQUM7TUFDRnhSLFlBQVksR0FBRyxJQUFBMlAsZUFBUSxFQUFDM1AsWUFBWSxFQUFFMFIsYUFBYSxDQUFDO0lBQ3REO0VBQ0Y7RUFFQSxPQUFPMVIsWUFBWTtBQUNyQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBUzZSLG9CQUFvQkEsQ0FDbENwYixLQUFlLEVBQ2Z3QixNQUFrRCxFQUN4QztFQUNWLE9BQU9rVSx5QkFBeUIsQ0FBQzFWLEtBQUssRUFBRTtJQUFDbUMsTUFBTSxFQUFFWCxNQUFNLENBQUNXLE1BQU07SUFBRXVDLEtBQUssRUFBRTtNQUFDakosS0FBSyxFQUFFK0YsTUFBTSxDQUFDL0Y7SUFBSztFQUFDLENBQUMsQ0FBQztBQUNoRztBQUVBLElBQU00Ziw0QkFBNEIsR0FBRyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDOztBQUVuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFNQywwQkFBMEIsR0FBRyxTQUE3QkEsMEJBQTBCQSxDQUFJNVcsS0FBSyxFQUFFeEMsT0FBTyxFQUFLO0VBQ3JELElBQU1xWixjQUFjLEdBQUdyakIsTUFBTSxDQUFDc2pCLE9BQU8sQ0FBQzlXLEtBQUssQ0FBQyxDQUFDbUcsTUFBTSxDQUFDLFVBQUM0USxHQUFHLEVBQUVDLEtBQUssRUFBSztJQUNsRSxJQUFBQyxNQUFBLE9BQUFDLGVBQUEsYUFBcUJGLEtBQUs7TUFBbkJ2YSxHQUFHLEdBQUF3YSxNQUFBO01BQUVoaUIsS0FBSyxHQUFBZ2lCLE1BQUE7SUFDakI7SUFDQSxJQUFJLENBQUNOLDRCQUE0QixDQUFDclUsUUFBUSxDQUFDN0YsR0FBRyxDQUFDLEVBQUU7TUFDL0MsT0FBT3NhLEdBQUc7SUFDWjs7SUFFQTtJQUNBO0lBQ0EsSUFBSXRhLEdBQUcsS0FBSyxPQUFPLElBQUksQ0FBQyxJQUFBMGEsaUJBQVUsRUFBQ2xpQixLQUFLLENBQUMsRUFBRTtNQUN6QyxPQUFPOGhCLEdBQUc7SUFDWjs7SUFFQTtJQUNBLE9BQUE1Z0IsYUFBQSxDQUFBQSxhQUFBLEtBQVc0Z0IsR0FBRyxXQUFBemdCLGdCQUFBLGlCQUFHbUcsR0FBRyxFQUFHLElBQUEyYSxvQkFBYSxFQUFDbmlCLEtBQUssQ0FBQyxHQUFHLElBQUFvaUIscUJBQVMsRUFBQzdaLE9BQU8sQ0FBQ2YsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUV4SCxLQUFLLENBQUMsR0FBR0EsS0FBSztFQUM1RixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFFTixPQUFPNGhCLGNBQWM7QUFDdkIsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBUzdGLHlCQUF5QkEsQ0FDdkMxVixLQUFlLEVBQ2Z3QixNQUF1RCxFQUM3QztFQUNWLElBQU9XLE1BQU0sR0FBV1gsTUFBTSxDQUF2QlcsTUFBTTtJQUFFdUMsS0FBSyxHQUFJbEQsTUFBTSxDQUFma0QsS0FBSztFQUNwQixJQUFPeEcsUUFBUSxHQUFJOEIsS0FBSyxDQUFqQjlCLFFBQVE7RUFDZixJQUFNOGQsUUFBUSxHQUFHOWQsUUFBUSxDQUFDaUUsTUFBTSxDQUFDO0VBRWpDLElBQUk2WixRQUFRLEVBQUU7SUFDWixJQUFNVCxjQUFjLEdBQUdELDBCQUEwQixDQUFDNVcsS0FBSyxFQUFFc1gsUUFBUSxDQUFDO0lBQ2xFO0lBQ0E7SUFDQTtJQUNBLE9BQUFuaEIsYUFBQSxDQUFBQSxhQUFBLEtBQ0ttRixLQUFLO01BQ1I5QixRQUFRLEVBQUFyRCxhQUFBLENBQUFBLGFBQUEsS0FDSHFELFFBQVEsV0FBQWxELGdCQUFBLGlCQUNWbUgsTUFBTSxFQUFHLElBQUE4Wix5QkFBa0IsRUFBQ0QsUUFBUSxFQUFFVCxjQUFjLENBQUM7SUFDdkQ7RUFFTDtFQUVBLE9BQU92YixLQUFLO0FBQ2Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU21ZLHVCQUF1QkEsQ0FDckNuWSxLQUFRLEVBQ1J3QixNQUFtRCxFQUNoRDtFQUFBLElBQUEwYSxxQkFBQTtFQUNIO0VBQ0EsSUFBTUMsZUFBZSxHQUFHLENBQUMsR0FBRzNhLE1BQU0sQ0FBQ3lVLE9BQU87RUFDMUMsSUFBTW1HLFNBQVMsSUFBQUYscUJBQUEsR0FBR2xjLEtBQUssQ0FBQ2hCLFNBQVMsQ0FBQ21kLGVBQWUsQ0FBQyxjQUFBRCxxQkFBQSx1QkFBaENBLHFCQUFBLENBQWtDdGUsTUFBTTtFQUMxRCxJQUFPQSxNQUFNLEdBQUlvQyxLQUFLLENBQWZwQyxNQUFNOztFQUViO0VBQ0EsSUFBTTJjLFNBQVMsR0FBRzNjLE1BQU0sQ0FBQ3dDLEdBQUcsQ0FBQyxVQUFBRixLQUFLO0lBQUEsT0FDaENrYyxTQUFTLElBQUksQ0FBQ0EsU0FBUyxDQUFDbGMsS0FBSyxDQUFDMUUsRUFBRSxDQUFDLElBQUkwRSxLQUFLLENBQUN2RSxNQUFNLENBQUM4RSxTQUFTLEdBQ3ZEUCxLQUFLLENBQUNnRixpQkFBaUIsQ0FBQztNQUN0QjtNQUNBekUsU0FBUyxFQUFFO0lBQ2IsQ0FBQyxDQUFDLEdBQ0ZQLEtBQUs7RUFBQSxDQUNYLENBQUM7O0VBRUQ7RUFDQSxPQUFBckYsYUFBQSxDQUFBQSxhQUFBLEtBQ0ttRixLQUFLO0lBQ1JwQyxNQUFNLEVBQUUyYyxTQUFTO0lBQ2pCdmIsU0FBUyxFQUFFO0VBQUU7QUFFakI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1xZCxnQkFBZ0IsR0FBQS9nQixPQUFBLENBQUErZ0IsZ0JBQUEsR0FBRyxTQUFuQkEsZ0JBQWdCQSxDQUMzQnJjLEtBQWUsRUFDZndCLE1BQThDLEVBQ2pDO0VBQ2IsSUFBTzhhLEtBQUssR0FBaUM5YSxNQUFNLENBQTVDOGEsS0FBSztJQUFBQyxnQkFBQSxHQUFpQy9hLE1BQU0sQ0FBckNnYixRQUFRO0lBQVJBLFFBQVEsR0FBQUQsZ0JBQUEsY0FBR0UseUJBQWdCLEdBQUFGLGdCQUFBO0VBQ3pDLElBQUksQ0FBQ0QsS0FBSyxDQUFDaGpCLE1BQU0sRUFBRTtJQUNqQixPQUFPMEcsS0FBSztFQUNkO0VBRUEsSUFBTVIsbUJBQW1CLEdBQUdyRyxLQUFLLENBQUNpQixJQUFJLENBQUNraUIsS0FBSyxDQUFDLENBQUN6UixNQUFNLENBQ2xELFVBQUNDLElBQUksRUFBRWxSLENBQUMsRUFBRXBCLENBQUM7SUFBQSxPQUFLLElBQUFtWCx1QkFBTSxFQUFDK00sMEJBQTBCLENBQUM5aUIsQ0FBQyxFQUFFcEIsQ0FBQyxDQUFDLENBQUMsQ0FBQ3NTLElBQUksQ0FBQztFQUFBLEdBQzlELENBQUMsQ0FDSCxDQUFDO0VBRUQsSUFBTXZMLFdBQVcsR0FBRztJQUNsQm9kLFNBQVMsRUFBRSxFQUFFO0lBQ2JDLFdBQVcsRUFBRU4sS0FBSztJQUNsQkUsUUFBUSxFQUFSQTtFQUNGLENBQUM7RUFFRCxJQUFNbGEsU0FBUyxHQUFHLElBQUFxTix1QkFBTSxFQUFDO0lBQUNuUSxtQkFBbUIsRUFBbkJBLG1CQUFtQjtJQUFFRCxXQUFXLEVBQVhBO0VBQVcsQ0FBQyxDQUFDLENBQUNTLEtBQUssQ0FBQztFQUVuRSxPQUFPNmMsbUJBQW1CLENBQUN2YSxTQUFTLENBQUM7QUFDdkMsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU3dhLDBCQUEwQkEsQ0FDeEM5YyxLQUFlLEVBQ2Z3QixNQUFpRCxFQUN2QztFQUNWLElBQUksQ0FBQ3hCLEtBQUssQ0FBQ1QsV0FBVyxFQUFFO0lBQ3RCLE9BQU9TLEtBQUs7RUFDZDtFQUNBLElBQU8rYyxRQUFRLEdBQWV2YixNQUFNLENBQTdCdWIsUUFBUTtJQUFFSixTQUFTLEdBQUluYixNQUFNLENBQW5CbWIsU0FBUztFQUMxQixJQUFBSyxrQkFBQSxHQUFnQ2hkLEtBQUssQ0FBQ1QsV0FBVztJQUExQ3FkLFdBQVcsR0FBQUksa0JBQUEsQ0FBWEosV0FBVztJQUFFSixRQUFRLEdBQUFRLGtCQUFBLENBQVJSLFFBQVE7RUFDNUIsSUFBTVMsaUJBQWlCLEdBQUdDLGdDQUFnQyxDQUFDbGQsS0FBSyxFQUFFO0lBQ2hFK2MsUUFBUSxFQUFSQSxRQUFRO0lBQ1JJLFFBQVEsRUFBRTtNQUFDQyxPQUFPLEVBQUUsQ0FBQztNQUFFQyxPQUFPLEVBQUU7SUFBTTtFQUN4QyxDQUFDLENBQUM7O0VBRUY7RUFDQSxJQUFNQyxjQUFjLEdBQUcsSUFBQTVOLHNCQUFLLEVBQUMsYUFBYSxDQUFDLENBQUMsSUFBQUMsdUJBQU0sRUFBQztJQUFDZ04sU0FBUyxFQUFUQTtFQUFTLENBQUMsQ0FBQyxDQUFDLENBQUNNLGlCQUFpQixDQUFDO0VBRW5GLE9BQU8sSUFBQS9ELGVBQVEsRUFDYm9FLGNBQWMsRUFDZCxJQUFBQyxrQkFBVSxFQUFDLEdBQUcsQ0FBQyxDQUFDbmQsR0FBRyxDQUFDd2MsV0FBVyxDQUFDdGpCLE1BQU0sR0FBR2trQixxQkFBWSxHQUFHO0lBQUEsT0FBTWhCLFFBQVEsQ0FBQ0csU0FBUyxDQUFDO0VBQUEsRUFDbkYsQ0FBQztBQUNIOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTRSxtQkFBbUJBLENBQUM3YyxLQUFlLEVBQVk7RUFDN0QsSUFBSSxDQUFDQSxLQUFLLENBQUNULFdBQVcsRUFBRTtJQUN0QixPQUFPUyxLQUFLO0VBQ2Q7RUFDQSxJQUFPNGMsV0FBVyxHQUFJNWMsS0FBSyxDQUFDVCxXQUFXLENBQWhDcWQsV0FBVztFQUNsQixJQUFBYSxZQUFBLE9BQUFDLFNBQUEsYUFBd0NkLFdBQVc7SUFBNUNlLElBQUksR0FBQUYsWUFBQTtJQUFLRyxvQkFBb0IsR0FBQUgsWUFBQSxDQUFBeGpCLEtBQUE7O0VBRXBDO0VBQ0EsSUFBTXFJLFNBQVMsR0FBRyxJQUFBb04sc0JBQUssRUFBQyxhQUFhLENBQUMsQ0FBQyxJQUFBQyx1QkFBTSxFQUFDO0lBQUNpTixXQUFXLEVBQUVnQjtFQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDNWQsS0FBSyxDQUFDO0VBRTFGLElBQU1pZCxpQkFBaUIsR0FBR0MsZ0NBQWdDLENBQUM1YSxTQUFTLEVBQUU7SUFDcEV5YSxRQUFRLEVBQUVZLElBQUksQ0FBQ3hqQixJQUFJO0lBQ25CZ2pCLFFBQVEsRUFBRTtNQUFDQyxPQUFPLEVBQUUsQ0FBQztNQUFFQyxPQUFPLEVBQUU7SUFBWTtFQUM5QyxDQUFDLENBQUM7RUFFRixJQUFPNWQsT0FBTyxHQUFpQk8sS0FBSyxDQUE3QlAsT0FBTztJQUFFQyxXQUFXLEdBQUlNLEtBQUssQ0FBcEJOLFdBQVc7RUFDM0IsT0FBTyxJQUFBd1osZUFBUSxFQUNiK0QsaUJBQWlCLEVBQ2pCWSxnQkFBZ0IsQ0FDZEYsSUFBSSxFQUNKcmIsU0FBUyxDQUFDL0MsV0FBVyxJQUFJK0MsU0FBUyxDQUFDL0MsV0FBVyxDQUFDb2QsU0FBUyxFQUN4RGxkLE9BQU8sRUFDUEMsV0FDRixDQUNGLENBQUM7QUFDSDtBQUVPLFNBQVNtZSxnQkFBZ0JBLENBQUNGLElBQUksRUFBRWhCLFNBQVMsRUFBNEM7RUFBQSxJQUExQ2xkLE9BQWlCLEdBQUEzRSxTQUFBLENBQUF4QixNQUFBLFFBQUF3QixTQUFBLFFBQUFzRCxTQUFBLEdBQUF0RCxTQUFBLE1BQUcsRUFBRTtFQUFBLElBQUU0RSxXQUFXLEdBQUE1RSxTQUFBLENBQUF4QixNQUFBLFFBQUF3QixTQUFBLFFBQUFzRCxTQUFBLEdBQUF0RCxTQUFBLE1BQUcsQ0FBQyxDQUFDO0VBQ3hGLE9BQU8sSUFBQWdqQixzQkFBYyxFQUFDO0lBQUNILElBQUksRUFBSkEsSUFBSTtJQUFFaEIsU0FBUyxFQUFUQSxTQUFTO0lBQUVsZCxPQUFPLEVBQVBBLE9BQU87SUFBRUMsV0FBVyxFQUFYQTtFQUFXLENBQUMsQ0FBQyxDQUFDcWUsS0FBSztFQUNsRTtFQUNBO0VBQ0EsVUFBQUMsR0FBRztJQUFBLE9BQ0QsSUFBQUMsc0JBQWEsRUFBQztNQUNaRCxHQUFHLEVBQUhBLEdBQUc7TUFDSGpCLFFBQVEsRUFBRVksSUFBSSxDQUFDeGpCLElBQUk7TUFDbkJxaUIsUUFBUSxFQUFFLFNBQVZBLFFBQVFBLENBQUVsVSxNQUFNO1FBQUEsT0FDZCxJQUFBNFYsMkJBQWtCLEVBQUM7VUFDakJDLE9BQU8sRUFBRTdWLE1BQU07VUFDZnFVLFNBQVMsRUFBVEE7UUFDRixDQUFDLENBQUM7TUFBQTtJQUNOLENBQUMsQ0FBQztFQUFBO0VBRUo7RUFDQSxVQUFBM1ksR0FBRztJQUFBLE9BQUksSUFBQW9hLHFCQUFZLEVBQUNULElBQUksQ0FBQ3hqQixJQUFJLEVBQUU2SixHQUFHLENBQUM7RUFBQSxDQUNyQyxDQUFDO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNxYSx5QkFBeUJBLENBQ3ZDcmUsS0FBZSxFQUNmd0IsTUFBdUQsRUFDN0M7RUFDVixJQUFBOGMsZ0JBQUEsR0FBNkI5YyxNQUFNLENBQUN5VSxPQUFPO0lBQXBDa0ksT0FBTyxHQUFBRyxnQkFBQSxDQUFQSCxPQUFPO0lBQUV4QixTQUFTLEdBQUEyQixnQkFBQSxDQUFUM0IsU0FBUztFQUV6QixJQUFNTSxpQkFBaUIsR0FBR0MsZ0NBQWdDLENBQUNsZCxLQUFLLEVBQUU7SUFDaEUrYyxRQUFRLEVBQUVvQixPQUFPLENBQUNwQixRQUFRO0lBQzFCSSxRQUFRLEVBQUU7TUFBQ0MsT0FBTyxFQUFFLENBQUM7TUFBRUMsT0FBTyxFQUFFO0lBQWU7RUFDakQsQ0FBQyxDQUFDO0VBRUYsT0FBTyxJQUFBbkUsZUFBUSxFQUNiK0QsaUJBQWlCLEVBQ2pCLElBQUFzQix5QkFBaUIsRUFBQztJQUFDSixPQUFPLEVBQVBBLE9BQU87SUFBRXhCLFNBQVMsRUFBVEE7RUFBUyxDQUFDLENBQUMsQ0FBQ29CLEtBQUssQ0FDM0MsVUFBQXpWLE1BQU07SUFBQSxPQUFJLElBQUFrVyw0QkFBbUIsRUFBQztNQUFDekIsUUFBUSxFQUFFb0IsT0FBTyxDQUFDcEIsUUFBUTtNQUFFSixTQUFTLEVBQUVyVTtJQUFNLENBQUMsQ0FBQztFQUFBLEdBQzlFLFVBQUF0RSxHQUFHO0lBQUEsT0FBSSxJQUFBb2EscUJBQVksRUFBQ0QsT0FBTyxDQUFDcEIsUUFBUSxFQUFFL1ksR0FBRyxDQUFDO0VBQUEsQ0FDNUMsQ0FDRixDQUFDO0FBQ0g7O0FBRUE7QUFDTyxTQUFTeWEsYUFBYUEsQ0FBQSxFQUE4QjtFQUFBLElBQTdCQyxZQUFZLEdBQUE1akIsU0FBQSxDQUFBeEIsTUFBQSxRQUFBd0IsU0FBQSxRQUFBc0QsU0FBQSxHQUFBdEQsU0FBQSxNQUFHLENBQUMsQ0FBQztFQUFBLElBQUVxaUIsUUFBUSxHQUFBcmlCLFNBQUEsQ0FBQXhCLE1BQUEsT0FBQXdCLFNBQUEsTUFBQXNELFNBQUE7RUFDdkQ7RUFDQTtFQUNBLElBQUksQ0FBQytlLFFBQVEsSUFBSSxDQUFDQSxRQUFRLENBQUNDLE9BQU8sRUFBRTtJQUNsQyxPQUFPLENBQUMsQ0FBQztFQUNYO0VBRUEsT0FBTztJQUNMQSxPQUFPLEVBQUVELFFBQVEsQ0FBQ0M7RUFDcEIsQ0FBQztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNdUIsb0JBQW9CLEdBQUFyakIsT0FBQSxDQUFBcWpCLG9CQUFBLEdBQUcsU0FBdkJBLG9CQUFvQkEsQ0FDL0IzZSxLQUFlLEVBQUE0ZSxNQUFBLEVBSUY7RUFBQSxJQUFBQyxpQkFBQTtFQUFBLElBQUFDLGNBQUEsR0FBQUYsTUFBQSxDQUZYM0ksT0FBTztJQUFHK0gsR0FBRyxHQUFBYyxjQUFBLENBQUhkLEdBQUc7SUFBRWpCLFFBQVEsR0FBQStCLGNBQUEsQ0FBUi9CLFFBQVE7SUFBRUksUUFBUSxHQUFBMkIsY0FBQSxDQUFSM0IsUUFBUTtJQUFFNEIsV0FBVyxHQUFBRCxjQUFBLENBQVhDLFdBQVc7SUFBRXZDLFFBQVEsR0FBQXNDLGNBQUEsQ0FBUnRDLFFBQVE7RUFHMUQsSUFBTVMsaUJBQWlCLEdBQUdDLGdDQUFnQyxDQUFDbGQsS0FBSyxFQUFFO0lBQ2hFK2MsUUFBUSxFQUFSQSxRQUFRO0lBQ1JJLFFBQVEsRUFBRXNCLGFBQWEsQ0FBQ3plLEtBQUssQ0FBQ1IsbUJBQW1CLENBQUN1ZCxRQUFRLENBQUMsRUFBRUksUUFBUTtFQUN2RSxDQUFDLENBQUM7RUFFRixPQUFPLElBQUFqRSxlQUFRLEVBQUMrRCxpQkFBaUIsS0FBQTlWLE1BQUEsS0FBQUMsbUJBQUEsYUFDM0IyVixRQUFRLENBQUNpQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQUQsV0FBVyxhQUFYQSxXQUFXLGdCQUFBRixpQkFBQSxHQUFYRSxXQUFXLENBQUVFLElBQUksY0FBQUosaUJBQUEsdUJBQWpCQSxpQkFBQSxDQUFtQnZsQixNQUFNLElBQUcsQ0FBQyxHQUMzRCxDQUNFLElBQUFpbEIseUJBQWlCLEVBQUM7SUFBQ0osT0FBTyxFQUFFWSxXQUFXO0lBQUVwQyxTQUFTLEVBQUU7RUFBRSxDQUFDLENBQUMsQ0FBQ29CLEtBQUssQ0FDNUQsVUFBQXpWLE1BQU07SUFBQSxPQUFJLElBQUFtVSx5QkFBZ0IsRUFBQ25VLE1BQU0sQ0FBQztFQUFBLEdBQ2xDLFVBQUF0RSxHQUFHO0lBQUEsT0FBSSxJQUFBb2EscUJBQVksRUFBQ3JCLFFBQVEsRUFBRS9ZLEdBQUcsQ0FBQztFQUFBLENBQ3BDLENBQUMsQ0FDRixHQUNELEVBQUUsSUFDTixJQUFBa2IsbUJBQVcsRUFBQ2xCLEdBQUcsQ0FBQ2xrQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUNpa0IsS0FBSyxDQUMzQixVQUFBb0IsTUFBQSxFQUFtQjtJQUFBLElBQWpCeGxCLEtBQUssR0FBQXdsQixNQUFBLENBQUx4bEIsS0FBSztNQUFFRCxJQUFJLEdBQUF5bEIsTUFBQSxDQUFKemxCLElBQUk7SUFDWCxPQUFPQSxJQUFJLEdBQ1A4aUIsUUFBUSxDQUFDdUMsV0FBVyxDQUFDLEdBQ3JCLElBQUFkLHNCQUFhLEVBQUM7TUFDWkQsR0FBRyxFQUFIQSxHQUFHO01BQ0hqQixRQUFRLEVBQVJBLFFBQVE7TUFDUkksUUFBUSxFQUFFeGpCLEtBQUssQ0FBQ3dqQixRQUFRO01BQ3hCNEIsV0FBVyxFQUFFcGxCLEtBQUs7TUFDbEI2aUIsUUFBUSxFQUFSQTtJQUNGLENBQUMsQ0FBQztFQUNSLENBQUMsRUFDRCxVQUFBeFksR0FBRztJQUFBLE9BQUksSUFBQW9hLHFCQUFZLEVBQUNyQixRQUFRLEVBQUUvWSxHQUFHLENBQUM7RUFBQSxDQUNwQyxDQUFDLEVBQ0YsQ0FBQztBQUNKLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1vYixtQkFBbUIsR0FBQTlqQixPQUFBLENBQUE4akIsbUJBQUEsR0FBRyxTQUF0QkEsbUJBQW1CQSxDQUM5QnBmLEtBQWUsRUFBQXFmLE1BQUEsRUFFRjtFQUFBLElBRFoxVyxLQUFLLEdBQUEwVyxNQUFBLENBQUwxVyxLQUFLO0lBQUVvVSxRQUFRLEdBQUFzQyxNQUFBLENBQVJ0QyxRQUFRO0VBRWhCO0VBQ0FyVSxlQUFPLENBQUNxSixJQUFJLENBQUNwSixLQUFLLENBQUM7RUFDbkIsSUFBSSxDQUFDM0ksS0FBSyxDQUFDVCxXQUFXLEVBQUU7SUFDdEIsT0FBT1MsS0FBSztFQUNkO0VBQ0EsSUFBQXNmLG1CQUFBLEdBQTJDdGYsS0FBSyxDQUFDVCxXQUFXO0lBQXJEcWQsV0FBVyxHQUFBMEMsbUJBQUEsQ0FBWDFDLFdBQVc7SUFBRUosUUFBUSxHQUFBOEMsbUJBQUEsQ0FBUjlDLFFBQVE7SUFBRUcsU0FBUyxHQUFBMkMsbUJBQUEsQ0FBVDNDLFNBQVM7RUFFdkMsSUFBTXJhLFNBQVMsR0FBRzRhLGdDQUFnQyxDQUFDbGQsS0FBSyxFQUFFO0lBQ3hEK2MsUUFBUSxFQUFSQSxRQUFRO0lBQ1JJLFFBQVEsRUFBRTtNQUFDeFUsS0FBSyxFQUFMQTtJQUFLO0VBQ2xCLENBQUMsQ0FBQzs7RUFFRjtFQUNBLE9BQU8sSUFBQXVRLGVBQVEsRUFDYjVXLFNBQVMsRUFDVCxJQUFBaWIsa0JBQVUsRUFBQyxHQUFHLENBQUMsQ0FBQ25kLEdBQUcsQ0FBQ3djLFdBQVcsQ0FBQ3RqQixNQUFNLEdBQUdra0IscUJBQVksR0FBRztJQUFBLE9BQU1oQixRQUFRLENBQUNHLFNBQVMsQ0FBQztFQUFBLEVBQ25GLENBQUM7QUFDSCxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNNEMscUJBQXFCLEdBQUFqa0IsT0FBQSxDQUFBaWtCLHFCQUFBLEdBQUcsU0FBeEJBLHFCQUFxQkEsQ0FDaEN2ZixLQUFlLEVBQUF3ZixNQUFBLEVBRUY7RUFBQSxJQURacmQsTUFBTSxHQUFBcWQsTUFBQSxDQUFOcmQsTUFBTTtFQUVQO0VBQ0EsSUFBTXNkLE9BQU8sR0FBRyxJQUFBclQsb0JBQU8sRUFBQ2pLLE1BQU0sQ0FBQztFQUUvQixPQUFPc2QsT0FBTyxDQUFDNVUsTUFBTSxDQUFDLFVBQUNDLElBQUksRUFBRXRQLEVBQUU7SUFBQSxPQUFLLElBQUFra0IsdUJBQWdCLEVBQUM1VSxJQUFJLEVBQUV0UCxFQUFFLENBQUM7RUFBQSxHQUFFd0UsS0FBSyxDQUFDO0FBQ3hFLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU0yZixpQkFBaUIsR0FBQXJrQixPQUFBLENBQUFxa0IsaUJBQUEsR0FBRyxTQUFwQkEsaUJBQWlCQSxDQUM1QjNmLEtBQWUsRUFDZndCLE1BQStDO0VBQUEsT0FBQTNHLGFBQUEsQ0FBQUEsYUFBQSxLQUU1Q21GLEtBQUs7SUFDUnZDLE9BQU8sRUFBQTVDLGFBQUEsQ0FBQUEsYUFBQSxLQUNGbUYsS0FBSyxDQUFDdkMsT0FBTyxHQUNiK0QsTUFBTSxDQUFDeVYsSUFBSTtFQUNmO0FBQUEsQ0FDRDtBQUNGO0FBQ0E7QUFDQTtBQUNPLFNBQVN3RCxnQkFBZ0JBLENBQzlCemEsS0FBZSxFQUNmOUIsUUFBa0IsRUFDcUI7RUFDdkMsSUFBTTBoQixLQUFjLEdBQUcsRUFBRTtFQUN6QixJQUFNQyxhQUFhLEdBQUczbkIsTUFBTSxDQUFDK1QsTUFBTSxDQUFDL04sUUFBUSxDQUFDLENBQUMyTSxNQUFNLENBQUMsVUFBQ0MsSUFBYSxFQUFFNUksT0FBTyxFQUFLO0lBQy9FLElBQU00ZCxXQUFXLEdBQUcsSUFBQUMsNEJBQWdCLEVBQUM3ZCxPQUFPLEVBQUVsQyxLQUFLLENBQUNiLFlBQVksQ0FBQztJQUNqRSxPQUFPMmdCLFdBQVcsSUFBSUEsV0FBVyxDQUFDeG1CLE1BQU0sR0FBR3dSLElBQUksQ0FBQzNELE1BQU0sQ0FBQzJZLFdBQVcsQ0FBQyxHQUFHaFYsSUFBSTtFQUM1RSxDQUFDLEVBQUU4VSxLQUFLLENBQUM7RUFFVCxPQUFPO0lBQ0w1ZixLQUFLLEVBQUFuRixhQUFBLENBQUFBLGFBQUEsS0FDQW1GLEtBQUs7TUFDUnBDLE1BQU0sS0FBQXVKLE1BQUEsS0FBQUMsbUJBQUEsYUFBTXBILEtBQUssQ0FBQ3BDLE1BQU0sT0FBQXdKLG1CQUFBLGFBQUt5WSxhQUFhLEVBQUM7TUFDM0M5aEIsVUFBVSxLQUFBb0osTUFBQSxLQUFBQyxtQkFBQSxhQUVMLElBQUE0WSxtQ0FBdUIsRUFBQ0gsYUFBYSxDQUFDLE9BQUF6WSxtQkFBQSxhQUN0Q3BILEtBQUssQ0FBQ2pDLFVBQVU7SUFDcEIsRUFDRjtJQUNEd2MsU0FBUyxFQUFFc0Y7RUFDYixDQUFDO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU2pGLGtCQUFrQkEsQ0FBQzVhLEtBQUssRUFBRWtDLE9BQU8sRUFBRTtFQUNqRCxJQUFNd1ksYUFBYSxHQUFHLElBQUF1RixrQ0FBZ0IsRUFBQXBsQixhQUFBLENBQUFBLGFBQUEsS0FDakNxSCxPQUFPO0lBQ1ZwRCxrQkFBa0IsRUFBRWtCLEtBQUssQ0FBQ2xCO0VBQWtCLEVBQzdDLENBQUM7RUFDRixJQUFNb2hCLE1BQU0sR0FBQXJsQixhQUFBLENBQUFBLGFBQUEsS0FDUG1GLEtBQUssQ0FBQ3pCLGlCQUFpQixDQUFDaEQsT0FBTyxDQUFDSSxNQUFNLENBQUNDLFlBQVksR0FDbkQ4ZSxhQUFhLENBQ2pCO0VBRUQsT0FBTyxJQUFBamlCLFVBQUcsRUFBQyxDQUFDLG1CQUFtQixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsY0FBYyxDQUFDLEVBQUV5bkIsTUFBTSxFQUFFbGdCLEtBQUssQ0FBQztBQUN2RjtBQUVPLFNBQVMwYywwQkFBMEJBLENBQUNpQixJQUFJLEVBQUV0TixLQUFLLEVBQUU7RUFDdEQsSUFBTTBNLFFBQVEsR0FBR1ksSUFBSSxDQUFDeGpCLElBQUkscUJBQUFnTixNQUFBLENBQXFCa0osS0FBSyxDQUFFO0VBQ3RELFdBQUFyVixnQkFBQSxpQkFDRytoQixRQUFRLEVBQUc7SUFDVjtJQUNBSyxPQUFPLEVBQUUsQ0FBQztJQUNWQyxPQUFPLEVBQUUsRUFBRTtJQUNYTixRQUFRLEVBQVJBLFFBQVE7SUFDUnBVLEtBQUssRUFBRTtFQUNULENBQUM7QUFFTDtBQUVPLFNBQVN1VSxnQ0FBZ0NBLENBQUNsZCxLQUFLLEVBQUFtZ0IsTUFBQSxFQUF3QjtFQUFBLElBQXJCcEQsUUFBUSxHQUFBb0QsTUFBQSxDQUFScEQsUUFBUTtJQUFFSSxRQUFRLEdBQUFnRCxNQUFBLENBQVJoRCxRQUFRO0VBQ3pFO0VBQ0EsT0FBTyxJQUFBek4sc0JBQUssRUFBQyxxQkFBcUIsQ0FBQyxDQUFDLElBQUFBLHNCQUFLLEVBQUNxTixRQUFRLENBQUMsQ0FBQyxJQUFBcE4sdUJBQU0sRUFBQ3dOLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQ25kLEtBQUssQ0FBQztBQUMvRTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNvTix3QkFBd0JBLENBQ3RDcE4sS0FBUSxFQUNSbUMsTUFBeUIsRUFDekJ5TSxhQUFzQixFQUNuQjtFQUNILElBQU02USxPQUFPLEdBQUcsT0FBT3RkLE1BQU0sS0FBSyxRQUFRLEdBQUcsQ0FBQ0EsTUFBTSxDQUFDLEdBQUdBLE1BQU07RUFDOUQsSUFBTW9ZLFNBQWtCLEdBQUcsRUFBRTtFQUM3QixJQUFNMUksWUFBbUIsR0FBRyxFQUFFO0VBRTlCN1IsS0FBSyxDQUFDcEMsTUFBTSxDQUFDN0MsT0FBTyxDQUFDLFVBQUNnSCxRQUFRLEVBQUV2SixDQUFDLEVBQUs7SUFDcEMsSUFBSXVKLFFBQVEsQ0FBQ3BHLE1BQU0sQ0FBQ3dHLE1BQU0sSUFBSXNkLE9BQU8sQ0FBQ3pZLFFBQVEsQ0FBQ2pGLFFBQVEsQ0FBQ3BHLE1BQU0sQ0FBQ3dHLE1BQU0sQ0FBQyxFQUFFO01BQ3RFO01BQ0EsSUFBTUMsUUFBUSxHQUNad00sYUFBYSxJQUFJQSxhQUFhLENBQUN3UixXQUFXLEdBQ3RDcmUsUUFBUSxHQUNSQSxRQUFRLENBQUNvRyxpQkFBaUIsQ0FBQ25JLEtBQUssQ0FBQzlCLFFBQVEsRUFBRTBRLGFBQWEsQ0FBQztNQUUvRCxJQUFBeVIsb0JBQUEsR0FBMkIsSUFBQS9hLDhCQUFrQixFQUFDbEQsUUFBUSxFQUFFcEMsS0FBSyxFQUFFQSxLQUFLLENBQUNuQyxTQUFTLENBQUNyRixDQUFDLENBQUMsQ0FBQztRQUEzRXFGLFNBQVMsR0FBQXdpQixvQkFBQSxDQUFUeGlCLFNBQVM7UUFBRXFDLEtBQUssR0FBQW1nQixvQkFBQSxDQUFMbmdCLEtBQUs7TUFFdkJxYSxTQUFTLENBQUM1ZixJQUFJLENBQUN1RixLQUFLLENBQUM7TUFDckIyUixZQUFZLENBQUNsWCxJQUFJLENBQUNrRCxTQUFTLENBQUM7SUFDOUIsQ0FBQyxNQUFNO01BQ0wwYyxTQUFTLENBQUM1ZixJQUFJLENBQUNvSCxRQUFRLENBQUM7TUFDeEI4UCxZQUFZLENBQUNsWCxJQUFJLENBQUNxRixLQUFLLENBQUNuQyxTQUFTLENBQUNyRixDQUFDLENBQUMsQ0FBQztJQUN2QztFQUNGLENBQUMsQ0FBQztFQUVGLElBQU1nSSxRQUFRLEdBQUEzRixhQUFBLENBQUFBLGFBQUEsS0FDVG1GLEtBQUs7SUFDUnBDLE1BQU0sRUFBRTJjLFNBQVM7SUFDakIxYyxTQUFTLEVBQUVnVTtFQUFZLEVBQ3hCO0VBRUQsT0FBT3JSLFFBQVE7QUFDakI7QUFFTyxTQUFTSyxxQkFBcUJBLENBQXFCYixLQUFRLEVBQUs7RUFBQSxJQUFBc2dCLGNBQUE7RUFDckU7RUFDQSxJQUFNQyxnQkFBZ0IsR0FBRyxJQUFBOWIsaUNBQTBCLEVBQUN6RSxLQUFLLENBQUNwQyxNQUFNLENBQUM7RUFFakUsSUFBSSxDQUFDMmlCLGdCQUFnQixDQUFDam5CLE1BQU0sRUFBRTtJQUM1QixPQUFBdUIsYUFBQSxDQUFBQSxhQUFBLEtBQ0ttRixLQUFLO01BQ1JYLGVBQWUsRUFBQXhFLGFBQUEsQ0FBQUEsYUFBQSxLQUNWbUYsS0FBSyxDQUFDWCxlQUFlO1FBQ3hCOUMsTUFBTSxFQUFFLElBQUk7UUFDWkcsV0FBVyxFQUFFLEtBQUs7UUFDbEJDLFNBQVMsRUFBRSxJQUFJO1FBQ2ZHLGlCQUFpQixFQUFFO01BQUk7SUFDeEI7RUFFTDtFQUVBLElBQU0wakIsWUFBWSxHQUFHRCxnQkFBZ0IsQ0FBQ25nQixHQUFHLENBQUMsVUFBQTZCLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUN0RyxNQUFNLENBQUNpRixTQUFTLENBQUNyRSxNQUFNLElBQUksRUFBRTtFQUFBLEVBQUM7RUFDL0U7RUFDQSxJQUFNa2tCLFlBQVksR0FBRyxJQUFBQyx1QkFBZ0IsRUFBQ0YsWUFBWSxDQUFDO0VBQ25ELElBQU0xakIsaUJBQWlCLEdBQUcsSUFBQTZqQixrQ0FBMkIsRUFBQ0YsWUFBWSxDQUFDOztFQUVuRTtFQUNBLElBQUlHLGVBQWdDLEdBQUcsSUFBQTNULG1CQUFJLEVBQ3pDc1QsZ0JBQWdCLENBQUMxVixNQUFNLENBQUMsVUFBQ0MsSUFBSSxFQUFFNUssS0FBSyxFQUFLO0lBQ3ZDNEssSUFBSSxDQUFDblEsSUFBSSxDQUFBQyxLQUFBLENBQVRrUSxJQUFJLE1BQUExRCxtQkFBQSxhQUFVbEgsS0FBSyxDQUFDdkUsTUFBTSxDQUFDaUYsU0FBUyxDQUFDakUsU0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3RELE9BQU9tTyxJQUFJO0VBQ2IsQ0FBQyxFQUFFLEVBQUUsQ0FDUCxDQUFDLENBQUMrVixJQUFJLENBQUMsQ0FBQztFQUVSRCxlQUFlLEdBQUdBLGVBQWUsQ0FBQ3RuQixNQUFNLEdBQUdzbkIsZUFBZSxHQUFHLElBQUk7O0VBRWpFO0VBQ0EsSUFBTTVqQixRQUFRLEdBQUc0akIsZUFBZSxHQUMzQkUscUJBQVUsSUFBSSxJQUFJLEdBQUdDLGNBQUcsQ0FBQyxHQUFJSCxlQUFlLENBQUN0bkIsTUFBTSxJQUFJMEcsS0FBSyxDQUFDWCxlQUFlLENBQUM1QyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQ3pGLElBQUk7RUFFUixJQUFNNkYsU0FBUyxHQUFBekgsYUFBQSxDQUFBQSxhQUFBLEtBQ1ZtRixLQUFLO0lBQ1JYLGVBQWUsRUFBQXhFLGFBQUEsQ0FBQUEsYUFBQSxLQUNWbUYsS0FBSyxDQUFDWCxlQUFlO01BQ3hCOUMsTUFBTSxFQUFFa2tCLFlBQVk7TUFDcEIzakIsaUJBQWlCLEVBQWpCQSxpQkFBaUI7TUFDakJFLFFBQVEsRUFBUkEsUUFBUTtNQUNSTCxTQUFTLEVBQUVpa0I7SUFBZTtFQUMzQixFQUNGOztFQUVEO0VBQ0EsSUFBTUksWUFBWSxJQUFBVixjQUFBLEdBQUd0Z0IsS0FBSyxDQUFDaEMsT0FBTyxjQUFBc2lCLGNBQUEsdUJBQWJBLGNBQUEsQ0FBZXRlLElBQUksQ0FBQyxVQUFBcEksQ0FBQztJQUFBLE9BQUtBLENBQUMsQ0FBcUJvTSx1QkFBdUI7RUFBQSxFQUUvRTs7RUFFYjtFQUNBO0VBQ0EsSUFBTWliLGtCQUFrQixHQUFHRCxZQUFZLEdBQ25DLElBQUFOLHVCQUFnQixFQUFDLENBQUNELFlBQVksRUFBRU8sWUFBWSxDQUFDemtCLE1BQU0sQ0FBQyxDQUFDLEdBQ3JEa2tCLFlBQVk7RUFDaEIsSUFBTWprQixXQUFXLEdBQUcsSUFBQTBrQixnQkFBUyxFQUFDbGhCLEtBQUssQ0FBQ1gsZUFBZSxDQUFDN0MsV0FBVyxFQUFFeWtCLGtCQUFrQixDQUFDLEdBQ2hGamhCLEtBQUssQ0FBQ1gsZUFBZSxDQUFDN0MsV0FBVyxHQUNqQ3lrQixrQkFBa0IsQ0FBQyxDQUFDLENBQUM7RUFFekIsSUFBSXprQixXQUFXLEtBQUt3RCxLQUFLLENBQUNYLGVBQWUsQ0FBQzdDLFdBQVcsRUFBRTtJQUNyRDtJQUNBLE9BQU9tTyw0QkFBNEIsQ0FBQ3JJLFNBQVMsRUFBRTtNQUFDM0ksS0FBSyxFQUFFNkM7SUFBVyxDQUFDLENBQUM7RUFDdEU7RUFFQSxPQUFPOEYsU0FBUztBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU02ZSxvQkFBb0IsR0FBQTdsQixPQUFBLENBQUE2bEIsb0JBQUEsR0FBRyxTQUF2QkEsb0JBQW9CQSxDQUMvQm5oQixLQUFlLEVBQUFvaEIsTUFBQTtFQUFBLElBQ2Rsa0IsSUFBSSxHQUFBa2tCLE1BQUEsQ0FBSmxrQixJQUFJO0VBQUEsT0FBQXJDLGFBQUEsQ0FBQUEsYUFBQSxLQUVGbUYsS0FBSztJQUNSVixNQUFNLEVBQUF6RSxhQUFBLENBQUFBLGFBQUEsS0FDRG1GLEtBQUssQ0FBQ1YsTUFBTTtNQUNmcEMsSUFBSSxFQUFKQSxJQUFJO01BQ0pJLGVBQWUsRUFBRTtJQUFJO0VBQ3RCO0FBQUEsQ0FDRDs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBUytqQixrQkFBa0JBLENBQ2hDcmhCLEtBQWUsRUFBQXNoQixNQUFBLEVBRUw7RUFBQSxJQUFBQyxxQkFBQTtFQUFBLElBQUFDLGVBQUEsR0FBQUYsTUFBQSxDQURUamtCLFFBQVE7SUFBUkEsUUFBUSxHQUFBbWtCLGVBQUEsY0FBRyxFQUFFLEdBQUFBLGVBQUE7RUFFZCxJQUFNQyxXQUFXLEdBQUdwa0IsUUFBUSxDQUFDL0QsTUFBTSxJQUFJK0QsUUFBUSxDQUFDQSxRQUFRLENBQUMvRCxNQUFNLEdBQUcsQ0FBQyxDQUFDO0VBRXBFLElBQU1rSCxRQUFRLEdBQUEzRixhQUFBLENBQUFBLGFBQUEsS0FDVG1GLEtBQUs7SUFDUlYsTUFBTSxFQUFBekUsYUFBQSxDQUFBQSxhQUFBLEtBQ0RtRixLQUFLLENBQUNWLE1BQU07TUFDZjtNQUNBakMsUUFBUSxFQUFFQSxRQUFRLENBQUM1QyxNQUFNLENBQUMsVUFBQWIsQ0FBQztRQUFBLE9BQUksQ0FBQyxJQUFBK1gsMkJBQW9CLEVBQUMvWCxDQUFDLENBQUM7TUFBQSxFQUFDO01BQ3hEc0QsSUFBSSxFQUFFdWtCLFdBQVcsS0FBQUYscUJBQUEsR0FBSUUsV0FBVyxDQUFDQyxVQUFVLGNBQUFILHFCQUFBLGVBQXRCQSxxQkFBQSxDQUF3QkksUUFBUSxHQUFHeGtCLHVCQUFZLENBQUN5a0IsSUFBSSxHQUFHNWhCLEtBQUssQ0FBQ1YsTUFBTSxDQUFDcEM7SUFBSTtFQUM5RixFQUNGOztFQUVEO0VBQ0EsSUFBT0ksZUFBZSxHQUFJMEMsS0FBSyxDQUFDVixNQUFNLENBQS9CaEMsZUFBZTs7RUFFdEI7RUFDQSxJQUFJLENBQUNBLGVBQWUsRUFBRTtJQUNwQixPQUFPa0QsUUFBUTtFQUNqQjs7RUFFQTtFQUNBLElBQU1xaEIsT0FBTyxHQUFHeGtCLFFBQVEsQ0FBQzJFLElBQUksQ0FBQyxVQUFBcEksQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQzRCLEVBQUUsS0FBSzhCLGVBQWUsQ0FBQzlCLEVBQUU7RUFBQSxFQUFDOztFQUUvRDtFQUNBLElBQU1tUSxRQUFRLEdBQUdrVyxPQUFPLElBQUksSUFBQWxRLDJCQUFvQixFQUFDa1EsT0FBTyxDQUFDO0VBQ3pELElBQUlsVyxRQUFRLElBQUlrVyxPQUFPLEVBQUU7SUFDdkI7SUFDQSxJQUFJQSxPQUFPLENBQUNILFVBQVUsRUFBRUcsT0FBTyxDQUFDSCxVQUFVLENBQUNJLElBQUksR0FBRyxJQUFBQSxnQkFBSSxFQUFDRCxPQUFPLENBQUM7SUFDL0QsSUFBTUUsWUFBWSxHQUFHLElBQUF6USwyQkFBb0IsRUFBQ3VRLE9BQU8sRUFBRWxXLFFBQVEsQ0FBQztJQUM1RCxJQUFNcVcsU0FBUyxHQUFHaGlCLEtBQUssQ0FBQ2hDLE9BQU8sQ0FBQ3lFLFNBQVMsQ0FBQyxVQUFBd2YsR0FBRztNQUFBLE9BQUlBLEdBQUcsQ0FBQ3ptQixFQUFFLEtBQUttUSxRQUFRO0lBQUEsRUFBQztJQUNyRTtJQUNBLE9BQU9YLGdCQUFnQixDQUFDeEssUUFBUSxFQUFFO01BQ2hDTCxHQUFHLEVBQUU2aEIsU0FBUztNQUNkdmUsSUFBSSxFQUFFLE9BQU87TUFDYjlKLEtBQUssRUFBRW9vQjtJQUNULENBQUMsQ0FBQztFQUNKO0VBRUEsT0FBT3ZoQixRQUFRO0FBQ2pCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTTBoQix5QkFBeUIsR0FBQTVtQixPQUFBLENBQUE0bUIseUJBQUEsR0FBRyxTQUE1QkEseUJBQXlCQSxDQUNwQ2xpQixLQUFlLEVBQUFtaUIsTUFBQSxFQUVGO0VBQUEsSUFEWk4sT0FBTyxHQUFBTSxNQUFBLENBQVBOLE9BQU87SUFBRU8sZ0JBQWdCLEdBQUFELE1BQUEsQ0FBaEJDLGdCQUFnQjtFQUUxQjtFQUNBLElBQUlQLE9BQU8sSUFBSUEsT0FBTyxDQUFDSCxVQUFVLEVBQUVHLE9BQU8sQ0FBQ0gsVUFBVSxDQUFDSSxJQUFJLEdBQUcsSUFBQUEsZ0JBQUksRUFBQ0QsT0FBTyxDQUFDO0VBQzFFLE9BQUFobkIsYUFBQSxDQUFBQSxhQUFBLEtBQ0ttRixLQUFLO0lBQ1JWLE1BQU0sRUFBQXpFLGFBQUEsQ0FBQUEsYUFBQSxLQUNEbUYsS0FBSyxDQUFDVixNQUFNO01BQ2ZoQyxlQUFlLEVBQUV1a0IsT0FBTztNQUN4Qk8sZ0JBQWdCLEVBQWhCQTtJQUFnQjtFQUNqQjtBQUVMLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQyxvQkFBb0JBLENBQ2xDcmlCLEtBQWUsRUFBQXNpQixNQUFBLEVBRUw7RUFBQSxJQURUVCxPQUFPLEdBQUFTLE1BQUEsQ0FBUFQsT0FBTztFQUVSLElBQUksQ0FBQ0EsT0FBTyxFQUFFO0lBQ1osT0FBTzdoQixLQUFLO0VBQ2Q7RUFFQSxJQUFNUSxRQUFRLEdBQUEzRixhQUFBLENBQUFBLGFBQUEsS0FDVG1GLEtBQUs7SUFDUlYsTUFBTSxFQUFBekUsYUFBQSxDQUFBQSxhQUFBLEtBQ0RtRixLQUFLLENBQUNWLE1BQU07TUFDZmhDLGVBQWUsRUFBRTtJQUFJO0VBQ3RCLEVBQ0Y7RUFFRCxJQUFJLElBQUFxVSwyQkFBb0IsRUFBQ2tRLE9BQU8sQ0FBQyxFQUFFO0lBQ2pDLElBQU1HLFNBQVMsR0FBR3hoQixRQUFRLENBQUN4QyxPQUFPLENBQUN5RSxTQUFTLENBQUMsVUFBQTdJLENBQUM7TUFBQSxPQUFJQSxDQUFDLENBQUM0QixFQUFFLEtBQUssSUFBQW1XLDJCQUFvQixFQUFDa1EsT0FBTyxDQUFDO0lBQUEsRUFBQztJQUV6RixPQUFPRyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUd6USxtQkFBbUIsQ0FBQy9RLFFBQVEsRUFBRTtNQUFDTCxHQUFHLEVBQUU2aEI7SUFBUyxDQUFDLENBQUMsR0FBR3hoQixRQUFRO0VBQ3BGOztFQUVBO0VBQ0EsSUFBTWtSLFNBQVMsR0FBQTdXLGFBQUEsQ0FBQUEsYUFBQSxLQUNWbUYsS0FBSyxDQUFDVixNQUFNO0lBQ2ZqQyxRQUFRLEVBQUUyQyxLQUFLLENBQUNWLE1BQU0sQ0FBQ2pDLFFBQVEsQ0FBQzVDLE1BQU0sQ0FBQyxVQUFBYixDQUFDO01BQUEsT0FBSUEsQ0FBQyxDQUFDNEIsRUFBRSxLQUFLcW1CLE9BQU8sQ0FBQ3JtQixFQUFFO0lBQUEsRUFBQztJQUNoRThCLGVBQWUsRUFBRTtFQUFJLEVBQ3RCO0VBRUQsT0FBQXpDLGFBQUEsQ0FBQUEsYUFBQSxLQUNLbUYsS0FBSztJQUNSVixNQUFNLEVBQUVvUztFQUFTO0FBRXJCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBUzZRLDRCQUE0QkEsQ0FDMUN2aUIsS0FBZSxFQUNmaVcsT0FBMkQsRUFDakQ7RUFDVixJQUFPL1YsS0FBSyxHQUFhK1YsT0FBTyxDQUF6Qi9WLEtBQUs7SUFBRTJoQixPQUFPLEdBQUk1TCxPQUFPLENBQWxCNEwsT0FBTztFQUNyQixJQUFNbFcsUUFBUSxHQUFHLElBQUFnRywyQkFBb0IsRUFBQ2tRLE9BQU8sQ0FBQzs7RUFFOUM7RUFDQSxJQUFJRyxTQUFTO0VBQ2IsSUFBSXBmLFVBQVUsR0FBRyxDQUFDMUMsS0FBSyxDQUFDMUUsRUFBRSxDQUFDO0VBQzNCLElBQUlnRixRQUFRLEdBQUdSLEtBQUs7RUFDcEI7RUFDQSxJQUFJMkwsUUFBUSxFQUFFO0lBQ1pxVyxTQUFTLEdBQUdoaUIsS0FBSyxDQUFDaEMsT0FBTyxDQUFDeUUsU0FBUyxDQUFDLFVBQUE3SSxDQUFDO01BQUEsT0FBSUEsQ0FBQyxDQUFDNEIsRUFBRSxLQUFLbVEsUUFBUTtJQUFBLEVBQUM7SUFFM0QsSUFBSSxDQUFDM0wsS0FBSyxDQUFDaEMsT0FBTyxDQUFDZ2tCLFNBQVMsQ0FBQyxFQUFFO01BQzdCO01BQ0E7TUFDQTtNQUNBLElBQU1RLGlCQUFpQixHQUFBM25CLGFBQUEsQ0FBQUEsYUFBQSxLQUNsQmduQixPQUFPO1FBQ1ZILFVBQVUsRUFBQTdtQixhQUFBLENBQUFBLGFBQUEsS0FDTGduQixPQUFPLENBQUNILFVBQVU7VUFDckIvVixRQUFRLEVBQUU7UUFBSTtNQUNmLEVBQ0Y7TUFFRCxPQUFBOVEsYUFBQSxDQUFBQSxhQUFBLEtBQ0ttRixLQUFLO1FBQ1JWLE1BQU0sRUFBQXpFLGFBQUEsQ0FBQUEsYUFBQSxLQUNEbUYsS0FBSyxDQUFDVixNQUFNO1VBQ2ZqQyxRQUFRLEtBQUE4SixNQUFBLEtBQUFDLG1CQUFBLGFBQU1wSCxLQUFLLENBQUNWLE1BQU0sQ0FBQ2pDLFFBQVEsSUFBRW1sQixpQkFBaUIsRUFBQztVQUN2RGxsQixlQUFlLEVBQUVrbEI7UUFBaUI7TUFDbkM7SUFFTDtJQUNBLElBQU0vbkIsTUFBTSxHQUFHdUYsS0FBSyxDQUFDaEMsT0FBTyxDQUFDZ2tCLFNBQVMsQ0FBQztJQUN2QyxJQUFBUyxlQUFBLEdBQXVCaG9CLE1BQU0sQ0FBdEJpTCxPQUFPO01BQVBBLE9BQU8sR0FBQStjLGVBQUEsY0FBRyxFQUFFLEdBQUFBLGVBQUE7SUFDbkIsSUFBTUMsZUFBZSxHQUFHaGQsT0FBTyxDQUFDc0IsUUFBUSxDQUFDOUcsS0FBSyxDQUFDMUUsRUFBRSxDQUFDO0lBRWxEb0gsVUFBVSxHQUFHOGYsZUFBZTtJQUN4QjtJQUNBaGQsT0FBTyxDQUFDakwsTUFBTSxDQUFDLFVBQUF3SCxDQUFDO01BQUEsT0FBSUEsQ0FBQyxLQUFLL0IsS0FBSyxDQUFDMUUsRUFBRTtJQUFBLEVBQUMsTUFBQTJMLE1BQUEsS0FBQUMsbUJBQUEsYUFDL0IxQixPQUFPLElBQUV4RixLQUFLLENBQUMxRSxFQUFFLEVBQUM7RUFDNUIsQ0FBQyxNQUFNO0lBQ0w7SUFDQSxJQUFNNFAsU0FBUyxHQUFHLElBQUF1WCw0QkFBcUIsRUFBQyxFQUFFLEVBQUVkLE9BQU8sQ0FBQztJQUNwREcsU0FBUyxHQUFHaGlCLEtBQUssQ0FBQ2hDLE9BQU8sQ0FBQzFFLE1BQU07O0lBRWhDO0lBQ0FrSCxRQUFRLEdBQUEzRixhQUFBLENBQUFBLGFBQUEsS0FDSG1GLEtBQUs7TUFDUmhDLE9BQU8sS0FBQW1KLE1BQUEsS0FBQUMsbUJBQUEsYUFBTXBILEtBQUssQ0FBQ2hDLE9BQU8sSUFBRW9OLFNBQVMsRUFBQztNQUN0QzlMLE1BQU0sRUFBQXpFLGFBQUEsQ0FBQUEsYUFBQSxLQUNEbUYsS0FBSyxDQUFDVixNQUFNO1FBQ2ZqQyxRQUFRLEVBQUUyQyxLQUFLLENBQUNWLE1BQU0sQ0FBQ2pDLFFBQVEsQ0FBQzVDLE1BQU0sQ0FBQyxVQUFBYixDQUFDO1VBQUEsT0FBSUEsQ0FBQyxDQUFDNEIsRUFBRSxLQUFLcW1CLE9BQU8sQ0FBQ3JtQixFQUFFO1FBQUEsRUFBQztRQUNoRThCLGVBQWUsRUFBRThOLFNBQVMsQ0FBQ3pSO01BQUs7SUFDakMsRUFDRjtFQUNIO0VBRUEsT0FBT3FSLGdCQUFnQixDQUFDeEssUUFBUSxFQUFFO0lBQ2hDTCxHQUFHLEVBQUU2aEIsU0FBUztJQUNkdmUsSUFBSSxFQUFFLFNBQVM7SUFDZjlKLEtBQUssRUFBRWlKO0VBQ1QsQ0FBQyxDQUFDO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTZ2dCLHNCQUFzQkEsQ0FDcEM1aUIsS0FBZSxFQUFBNmlCLE1BQUEsRUFFTDtFQUFBLElBRFQxZ0IsTUFBTSxHQUFBMGdCLE1BQUEsQ0FBTjFnQixNQUFNO0lBQUUyZ0IsTUFBTSxHQUFBRCxNQUFBLENBQU5DLE1BQU07SUFBRTVsQixJQUFJLEdBQUEybEIsTUFBQSxDQUFKM2xCLElBQUk7RUFFckIsSUFBTWdGLE9BQU8sR0FBR2xDLEtBQUssQ0FBQzlCLFFBQVEsQ0FBQ2lFLE1BQU0sQ0FBQztFQUN0QyxJQUFJLENBQUNELE9BQU8sRUFBRTtJQUNaLE9BQU9sQyxLQUFLO0VBQ2Q7RUFDQSxJQUFJK2lCLFFBQVEsR0FBRzdsQixJQUFJO0VBQ25CLElBQUksQ0FBQzZsQixRQUFRLEVBQUU7SUFDYixJQUFNQyxXQUFXLEdBQUcsSUFBQWxyQixtQkFBRyxFQUFDb0ssT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFNGdCLE1BQU0sQ0FBQyxDQUFDO0lBQ3hEO0lBQ0FDLFFBQVEsR0FBR0MsV0FBVyxHQUNsQjlxQixNQUFNLENBQUNxQyxJQUFJLENBQUMwb0IscUJBQVUsQ0FBQyxDQUFDamhCLElBQUksQ0FBQyxVQUFBMlgsQ0FBQztNQUFBLE9BQUlBLENBQUMsS0FBS3FKLFdBQVc7SUFBQSxFQUFDLEdBQ3BEQyxxQkFBVSxDQUFDQyxTQUFTO0VBQzFCO0VBRUEsSUFBTUMsTUFBTSxHQUFHLElBQUFDLDBCQUFtQixFQUFDbGhCLE9BQU8sRUFBRTRnQixNQUFNLEVBQUVDLFFBQVEsQ0FBQztFQUM3RCxPQUFPLElBQUF0cUIsVUFBRyxFQUFDLENBQUMsVUFBVSxFQUFFMEosTUFBTSxDQUFDLEVBQUVnaEIsTUFBTSxFQUFFbmpCLEtBQUssQ0FBQztBQUNqRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNxakIscUJBQXFCQSxDQUNuQ3JqQixLQUFlLEVBQUFzakIsTUFBQSxFQUVMO0VBQUEsSUFEVG5oQixNQUFNLEdBQUFtaEIsTUFBQSxDQUFObmhCLE1BQU07SUFBRTJnQixNQUFNLEdBQUFRLE1BQUEsQ0FBTlIsTUFBTTtFQUVmLElBQU01Z0IsT0FBTyxHQUFHbEMsS0FBSyxDQUFDOUIsUUFBUSxDQUFDaUUsTUFBTSxDQUFDO0VBQ3RDLElBQUksQ0FBQ0QsT0FBTyxFQUFFO0lBQ1osT0FBT2xDLEtBQUs7RUFDZDtFQUNBLElBQU02TyxVQUFVLEdBQUcsSUFBQTBVLHNCQUFlLEVBQUNyaEIsT0FBTyxFQUFFNGdCLE1BQU0sQ0FBQztFQUVuRCxPQUFPLElBQUFycUIsVUFBRyxFQUFDLENBQUMsVUFBVSxFQUFFMEosTUFBTSxDQUFDLEVBQUUwTSxVQUFVLEVBQUU3TyxLQUFLLENBQUM7QUFDckQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVN3akIsc0JBQXNCQSxDQUNwQ3hqQixLQUFlLEVBQUF5akIsTUFBQSxFQUVMO0VBQUEsSUFEVHRoQixNQUFNLEdBQUFzaEIsTUFBQSxDQUFOdGhCLE1BQU07SUFBRTJnQixNQUFNLEdBQUFXLE1BQUEsQ0FBTlgsTUFBTTtFQUVmLElBQU01Z0IsT0FBTyxHQUFHbEMsS0FBSyxDQUFDOUIsUUFBUSxDQUFDaUUsTUFBTSxDQUFDO0VBQ3RDLElBQUksQ0FBQ0QsT0FBTyxFQUFFO0lBQ1osT0FBT2xDLEtBQUs7RUFDZDtFQUNBLElBQU0wakIsUUFBUSxHQUFHeGhCLE9BQU8sQ0FBQ21ULE1BQU0sQ0FBQzVTLFNBQVMsQ0FBQyxVQUFBN0ksQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ08sSUFBSSxLQUFLMm9CLE1BQU07RUFBQSxFQUFDO0VBQ2pFLElBQUlZLFFBQVEsR0FBRyxDQUFDLEVBQUU7SUFDaEIsT0FBTzFqQixLQUFLO0VBQ2Q7RUFDQSxJQUFPdUMsSUFBSSxHQUFJTCxPQUFPLENBQUNtVCxNQUFNLENBQUNxTyxRQUFRLENBQUMsQ0FBaENuaEIsSUFBSTtFQUNYLElBQU1vaEIsSUFBSSxHQUFHemhCLE9BQU8sQ0FBQzBoQixhQUFhLENBQy9CeGpCLEdBQUcsQ0FBQyxVQUFBeWpCLEdBQUc7SUFBQSxPQUFJLElBQUFDLHNCQUFlLEVBQUNELEdBQUcsQ0FBQ0UsT0FBTyxDQUFDTCxRQUFRLENBQUMsRUFBRW5oQixJQUFJLENBQUM7RUFBQSxHQUFFLElBQUksQ0FBQyxDQUM5RHloQixJQUFJLENBQUMsSUFBSSxDQUFDO0VBRWIsSUFBQUMsMkJBQUksRUFBQ04sSUFBSSxDQUFDO0VBRVYsT0FBTzNqQixLQUFLO0FBQ2Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNra0IsNkJBQTZCQSxDQUMzQ2xrQixLQUFlLEVBQUFta0IsTUFBQSxFQUVMO0VBQUEsSUFEVGhpQixNQUFNLEdBQUFnaUIsTUFBQSxDQUFOaGlCLE1BQU07SUFBRWlpQixPQUFPLEdBQUFELE1BQUEsQ0FBUEMsT0FBTztFQUVoQixJQUFNbGlCLE9BQU8sR0FBR2xDLEtBQUssQ0FBQzlCLFFBQVEsQ0FBQ2lFLE1BQU0sQ0FBQztFQUN0QyxJQUFJLENBQUNELE9BQU8sRUFBRTtJQUNaLE9BQU9sQyxLQUFLO0VBQ2Q7RUFDQSxJQUFJdUcsU0FBUyxHQUFHckUsT0FBTyxDQUFDbVQsTUFBTTtFQUM5Qm5kLE1BQU0sQ0FBQ3FDLElBQUksQ0FBQzZwQixPQUFPLENBQUMsQ0FBQ3JwQixPQUFPLENBQUMsVUFBQStuQixNQUFNLEVBQUk7SUFDckMsSUFBTVksUUFBUSxHQUFHeGhCLE9BQU8sQ0FBQ21ULE1BQU0sQ0FBQzVTLFNBQVMsQ0FBQyxVQUFBN0ksQ0FBQztNQUFBLE9BQUlBLENBQUMsQ0FBQ08sSUFBSSxLQUFLMm9CLE1BQU07SUFBQSxFQUFDO0lBQ2pFLElBQUlZLFFBQVEsSUFBSSxDQUFDLEVBQUU7TUFDakIsSUFBTVcsYUFBYSxHQUFHRCxPQUFPLENBQUN0QixNQUFNLENBQUM7TUFDckMsSUFBTWhjLEtBQUssR0FBR1AsU0FBUyxDQUFDbWQsUUFBUSxDQUFDO01BQ2pDbmQsU0FBUyxHQUFHLElBQUE4RSxzQkFBSyxFQUFDLElBQUFzRSx1QkFBTSxFQUFDO1FBQUMwVSxhQUFhLEVBQWJBO01BQWEsQ0FBQyxDQUFDLENBQUN2ZCxLQUFLLENBQWlCLENBQUMsQ0FDL0RQLFNBQ0YsQ0FBWTtJQUNkO0VBQ0YsQ0FBQyxDQUFDO0VBRUYsSUFBTXNJLFVBQVUsR0FBRyxJQUFBb04seUJBQWtCLEVBQUMvWixPQUFPLEVBQUU7SUFBQ21ULE1BQU0sRUFBRTlPO0VBQW9CLENBQUMsQ0FBQztFQUM5RSxJQUFJL0YsUUFBUSxHQUFHLElBQUFrUCxzQkFBSyxFQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUFDLHVCQUFNLE1BQUEzVSxnQkFBQSxpQkFBR21ILE1BQU0sRUFBRzBNLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQzdPLEtBQUssQ0FBQzs7RUFFdkU7RUFDQVEsUUFBUSxHQUFBM0YsYUFBQSxDQUFBQSxhQUFBLEtBQ0gyRixRQUFRO0lBQ1g1QyxNQUFNLEVBQUU0QyxRQUFRLENBQUM1QyxNQUFNLENBQUN3QyxHQUFHLENBQUMsVUFBQUYsS0FBSztNQUFBLElBQUFva0IsYUFBQTtNQUFBLE9BQy9CLENBQUFBLGFBQUEsR0FBQXBrQixLQUFLLENBQUN2RSxNQUFNLGNBQUEyb0IsYUFBQSxnQkFBQUEsYUFBQSxHQUFaQSxhQUFBLENBQWNDLFVBQVUsY0FBQUQsYUFBQSxlQUF4QkEsYUFBQSxDQUEwQm5xQixJQUFJLElBQUkrRixLQUFLLENBQUN2RSxNQUFNLENBQUM0b0IsVUFBVSxDQUFDcHFCLElBQUksSUFBSWlxQixPQUFPLEdBQ3JFbGtCLEtBQUssQ0FBQ2dGLGlCQUFpQixDQUFDO1FBQ3RCcWYsVUFBVSxFQUFBMXBCLGFBQUEsQ0FBQUEsYUFBQSxLQUNMcUYsS0FBSyxDQUFDdkUsTUFBTSxDQUFDNG9CLFVBQVU7VUFDMUJGLGFBQWEsRUFBRUQsT0FBTyxDQUFDbGtCLEtBQUssQ0FBQ3ZFLE1BQU0sQ0FBQzRvQixVQUFVLENBQUNwcUIsSUFBSTtRQUFDO01BRXhELENBQUMsQ0FBQyxHQUNGK0YsS0FBSztJQUFBLENBQ1g7RUFBQyxFQUNGO0VBRUQsT0FBT00sUUFBUTtBQUNqQjs7QUFFQTtBQUNBO0FBQ0E7QUFDTyxTQUFTZ2tCLDZCQUE2QkEsQ0FDM0N4a0IsS0FBZTtBQUNmO0FBQ0F3QixNQUEyRCxFQUNqRDtFQUNWLE9BQUEzRyxhQUFBLENBQUFBLGFBQUEsS0FDS21GLEtBQUs7SUFDUlYsTUFBTSxFQUFBekUsYUFBQSxDQUFBQSxhQUFBLEtBQ0RtRixLQUFLLENBQUNWLE1BQU07TUFDZi9CLE9BQU8sRUFBRSxDQUFDeUMsS0FBSyxDQUFDVixNQUFNLENBQUMvQjtJQUFPO0VBQy9CO0FBRUw7QUFFTyxTQUFTa25CLG1DQUFtQ0EsQ0FDakR6a0IsS0FBZSxFQUFBMGtCLE1BQUEsRUFFTDtFQUFBLElBRFR2a0IsR0FBRyxHQUFBdWtCLE1BQUEsQ0FBSHZrQixHQUFHO0lBQUV4RSxNQUFNLEdBQUErb0IsTUFBQSxDQUFOL29CLE1BQU07RUFFWixJQUFNaVEsU0FBUyxHQUFHNUwsS0FBSyxDQUFDaEMsT0FBTyxDQUFDbUMsR0FBRyxDQUFDO0VBQ3BDLElBQUksQ0FBQ3lMLFNBQVMsRUFBRTtJQUNkbEQsZUFBTyxDQUFDQyxLQUFLLFlBQUF4QixNQUFBLENBQVloSCxHQUFHLGtCQUFlLENBQUM7SUFDNUMsT0FBT0gsS0FBSztFQUNkO0VBQ0EsSUFBSTRMLFNBQVMsQ0FBQ3JKLElBQUksS0FBSzhLLHVCQUFZLENBQUNDLFNBQVMsRUFBRTtJQUM3QzVFLGVBQU8sQ0FBQ0MsS0FBSyw2R0FFYixDQUFDO0lBQ0QsT0FBTzNJLEtBQUs7RUFDZDtFQUVBLElBQU0ya0IsT0FBTyxHQUFHQyxtQkFBbUIsQ0FBQ2pwQixNQUFNLENBQUM7RUFFM0MsT0FBTyxJQUFBK1Qsc0JBQUssRUFBQyxTQUFTLENBQUMsQ0FBQyxJQUFBckUsc0JBQUssRUFBQyxJQUFBc0UsdUJBQU0sRUFBQ2dWLE9BQU8sQ0FBQyxDQUFDL1ksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDNUwsS0FBSyxDQUFDO0FBQ25FO0FBRUEsU0FBUzRrQixtQkFBbUJBLENBQUNqcEIsTUFBTSxFQUFFO0VBQ25DLElBQU1rcEIsT0FBTyxHQUFHLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQztFQUMxQyxPQUFPM3NCLE1BQU0sQ0FBQ3FDLElBQUksQ0FBQ29CLE1BQU0sQ0FBQyxDQUFDa1AsTUFBTSxDQUFDLFVBQUNDLElBQUksRUFBRXJILElBQUksRUFBSztJQUNoRCxJQUFJLENBQUNvaEIsT0FBTyxDQUFDN2QsUUFBUSxDQUFDdkQsSUFBSSxDQUFDLEVBQUU7TUFDM0JpRixlQUFPLENBQUNDLEtBQUssbUZBQUF4QixNQUFBLENBQ3VFMUQsSUFBSSxDQUN4RixDQUFDO01BQ0QsT0FBT3FILElBQUk7SUFDYjs7SUFFQTtJQUNBQSxJQUFJLENBQUNySCxJQUFJLENBQUMsR0FBRzlILE1BQU0sQ0FBQzhILElBQUksQ0FBQztJQUN6QixPQUFPcUgsSUFBSTtFQUNiLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNSOztBQUVBO0FBQ0E7QUFDQTtBQUNPLFNBQVNnYSxrQ0FBa0NBLENBQ2hEOWtCLEtBQWUsRUFBQStrQixNQUFBLEVBRUw7RUFBQSxJQURUcHBCLE1BQU0sR0FBQW9wQixNQUFBLENBQU5wcEIsTUFBTTtFQUVQLElBQUksQ0FBQ0EsTUFBTSxFQUFFO0lBQ1gsT0FBT3FFLEtBQUs7RUFDZDtFQUNBLElBQU0ya0IsT0FBTyxHQUFHQyxtQkFBbUIsQ0FBQ2pwQixNQUFNLENBQUM7RUFDM0MsT0FBTyxJQUFBK1Qsc0JBQUssRUFBQyxpQkFBaUIsQ0FBQyxDQUFDLElBQUFDLHVCQUFNLEVBQUNnVixPQUFPLENBQUMsQ0FBQyxDQUFDM2tCLEtBQUssQ0FBQztBQUN6RDs7QUFFQTtBQUNBO0FBQ0E7QUFDTyxTQUFTZ2xCLCtCQUErQkEsQ0FDN0NobEIsS0FBUSxFQUNSd0IsTUFBc0QsRUFDbkQ7RUFBQSxJQUFBeWpCLHFCQUFBO0VBQ0gsSUFBT0MsS0FBSyxHQUFXMWpCLE1BQU0sQ0FBdEIwakIsS0FBSztJQUFFaGxCLEtBQUssR0FBSXNCLE1BQU0sQ0FBZnRCLEtBQUs7RUFDbkIsSUFBV2lsQixhQUFhLEdBQVdELEtBQUssQ0FBakMxcEIsRUFBRTtJQUFpQjRwQixLQUFLLEdBQUlGLEtBQUssQ0FBZEUsS0FBSztFQUMvQixJQUFJLENBQUNsbEIsS0FBSyxFQUFFO0lBQ1Z3SSxlQUFPLENBQUNxSixJQUFJLHlDQUF5QyxDQUFDO0lBQ3RELE9BQU8vUixLQUFLO0VBQ2Q7RUFDQSxJQUFJLEVBQUFpbEIscUJBQUEsR0FBQS9rQixLQUFLLENBQUNtbEIsaUJBQWlCLGNBQUFKLHFCQUFBLHVCQUF2QkEscUJBQUEsQ0FBMEJFLGFBQWEsQ0FBQyxNQUFLQyxLQUFLLEVBQUU7SUFDdEQsT0FBT3BsQixLQUFLO0VBQ2Q7RUFFQUUsS0FBSyxDQUFDbWxCLGlCQUFpQixHQUFBeHFCLGFBQUEsQ0FBQUEsYUFBQSxLQUNsQnFGLEtBQUssQ0FBQ21sQixpQkFBaUIsV0FBQXJxQixnQkFBQSxpQkFDekJtcUIsYUFBYSxFQUFHQyxLQUFLLEVBQ3ZCO0VBRUQsT0FBQXZxQixhQUFBLENBQUFBLGFBQUEsS0FDS21GLEtBQUs7SUFDUnBDLE1BQU0sRUFBRSxJQUFBeU4sc0JBQUssRUFBQ25MLEtBQUssQ0FBQyxDQUFDRixLQUFLLENBQUNwQyxNQUFNO0VBQUM7QUFFdEM7O0FBRUE7QUFDTyxTQUFTMkcsc0NBQXNDQSxDQUNwRHZFLEtBQVEsRUFDUndCLE1BQTZELEVBQzFEO0VBQUEsSUFBQThqQixxQkFBQSxFQUFBQyxzQkFBQTtFQUNILElBQVl2RCxTQUFTLEdBQW9CeGdCLE1BQU0sQ0FBeENyQixHQUFHO0lBQUFxbEIsY0FBQSxHQUErQmhrQixNQUFNLENBQXhCZ0QsTUFBTTtJQUFOQSxNQUFNLEdBQUFnaEIsY0FBQSxjQUFHLEtBQUssR0FBQUEsY0FBQTtFQUVyQyxJQUFNL3FCLE1BQU0sR0FBR3VGLEtBQUssQ0FBQ2hDLE9BQU8sQ0FBQ2drQixTQUFTLENBQW9CO0VBRTFELElBQUl4aEIsUUFBUSxHQUFHUixLQUFLO0VBQ3BCLElBQUlvTCxTQUFTLEdBQUczUSxNQUFNOztFQUV0QjtFQUNBLElBQUkrSixNQUFNLEVBQUU7SUFDVixJQUFNK2IsZ0JBQWdCLEdBQUcsSUFBQTliLGlDQUEwQixFQUFDakUsUUFBUSxDQUFDNUMsTUFBTSxDQUFDO0lBQ3BFO0lBQ0EsSUFBSSxDQUFDMmlCLGdCQUFnQixDQUFDam5CLE1BQU0sRUFBRTtNQUM1QixPQUFPa0gsUUFBUTtJQUNqQjtJQUVBLElBQU1pbEIsNEJBQTRCLEdBQUcsSUFBQUMsc0NBQStCLEVBQUNuRixnQkFBZ0IsQ0FBQztJQUN0RixJQUFNb0YsOEJBQThCLEdBQUdDLE9BQU8sQ0FBQ0gsNEJBQTRCLENBQUNuc0IsTUFBTSxDQUFDO0lBRW5GLElBQU11c0IsZUFBZSxHQUFHLElBQUFuRix1QkFBZ0IsRUFBQyxDQUFDam1CLE1BQU0sQ0FBQzhCLE1BQU0sRUFBRWlFLFFBQVEsQ0FBQ25CLGVBQWUsQ0FBQzlDLE1BQU0sQ0FBQyxDQUFDOztJQUUxRjtJQUNBLElBQUlvcEIsOEJBQThCLEVBQUU7TUFDbEMsSUFBSWxyQixNQUFNLENBQUMwUSxlQUFlLEtBQUsyYSwyQkFBZ0IsQ0FBQ0MsUUFBUSxFQUFFO1FBQ3hEdmxCLFFBQVEsR0FBR3lLLCtCQUErQixDQUFDekssUUFBUSxFQUFFO1VBQ25EaEYsRUFBRSxFQUFFZixNQUFNLENBQUNlLEVBQUU7VUFDYjJQLGVBQWUsRUFBRTJhLDJCQUFnQixDQUFDQztRQUNwQyxDQUFDLENBQUM7TUFDSjtNQUVBM2EsU0FBUyxHQUFHNUssUUFBUSxDQUFDeEMsT0FBTyxDQUFDZ2tCLFNBQVMsQ0FBb0I7O01BRTFEO01BQ0E1VyxTQUFTLEdBQUc0YSx3QkFBd0IsQ0FBQ3hsQixRQUFRLEVBQUU0SyxTQUFTLENBQUM7O01BRXpEO01BQ0E1SyxRQUFRLEdBQUEzRixhQUFBLENBQUFBLGFBQUEsS0FDSDJGLFFBQVE7UUFDWHhDLE9BQU8sRUFBRSxJQUFBcU4sc0JBQUssRUFBU0QsU0FBUyxDQUFDLENBQUM1SyxRQUFRLENBQUN4QyxPQUFPO01BQUMsRUFDcEQ7SUFDSDtJQUVBb04sU0FBUyxHQUFHNUssUUFBUSxDQUFDeEMsT0FBTyxDQUFDZ2tCLFNBQVMsQ0FBb0I7O0lBRTFEO0lBQ0EsSUFBTWlFLGVBQWMsR0FBRyxJQUFBN1gsZ0NBQXlCLEVBQzlDaEQsU0FBUyxDQUFDRCxlQUFlLEtBQUsyYSwyQkFBZ0IsQ0FBQ0MsUUFBUSxHQUNuRCxDQUFDRixlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUVBLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUN4Q0EsZUFBZSxFQUFBaHJCLGFBQUEsQ0FBQUEsYUFBQSxLQUNmdVEsU0FBUztNQUFFN08sTUFBTSxFQUFFc3BCO0lBQWUsRUFDeEMsQ0FBQztJQUVEcmxCLFFBQVEsR0FBR3dLLGdCQUFnQixDQUFDeEssUUFBUSxFQUFFO01BQ3BDTCxHQUFHLEVBQUU2aEIsU0FBUztNQUNkdmUsSUFBSSxFQUFFLE9BQU87TUFDYjlKLEtBQUssRUFBRXNzQjtJQUNULENBQUMsQ0FBQztJQUVGN2EsU0FBUyxHQUFBdlEsYUFBQSxDQUFBQSxhQUFBLEtBQ0gyRixRQUFRLENBQUN4QyxPQUFPLENBQUNna0IsU0FBUyxDQUFDO01BQy9CaGMsdUJBQXVCLEVBQUU7SUFBSSxFQUM5Qjs7SUFFRDtJQUNBeEYsUUFBUSxHQUFBM0YsYUFBQSxDQUFBQSxhQUFBLEtBQ0gyRixRQUFRO01BQ1h4QyxPQUFPLEVBQUUsSUFBQXFOLHNCQUFLLEVBQVNELFNBQVMsQ0FBQyxDQUFDNUssUUFBUSxDQUFDeEMsT0FBTztJQUFDLEVBQ3BEO0lBRUR3QyxRQUFRLEdBQUdnTCxnQ0FBZ0MsQ0FBQ2hMLFFBQVEsRUFBRTtNQUNwRGhGLEVBQUUsRUFBRTRQLFNBQVMsQ0FBQzVQLEVBQUU7TUFDaEIwQixJQUFJLEVBQUVxTyxvQkFBb0IsQ0FBQ0gsU0FBUztJQUN0QyxDQUFDLENBQUM7SUFFRkEsU0FBUyxHQUFHNUssUUFBUSxDQUFDeEMsT0FBTyxDQUFDZ2tCLFNBQVMsQ0FBb0I7O0lBRTFEO0lBQ0EsT0FBT3JYLDRCQUE0QixDQUFDbkssUUFBUSxFQUFFO01BQzVDN0csS0FBSyxFQUFFeVIsU0FBUyxDQUFDelIsS0FBSyxDQUFDeVIsU0FBUyxDQUFDOGEsZ0JBQWdCO0lBQ25ELENBQUMsQ0FBQztFQUNKOztFQUVBO0VBQ0E5YSxTQUFTLEdBQUF2USxhQUFBLENBQUFBLGFBQUEsS0FDSkosTUFBTTtJQUNUdUwsdUJBQXVCLEVBQUU7RUFBSyxFQUMvQjs7RUFFRDtFQUNBeEYsUUFBUSxHQUFBM0YsYUFBQSxDQUFBQSxhQUFBLEtBQ0gyRixRQUFRO0lBQ1h4QyxPQUFPLEVBQUUsSUFBQXFOLHNCQUFLLEVBQVNELFNBQVMsQ0FBQyxDQUFDNUssUUFBUSxDQUFDeEMsT0FBTztFQUFDLEVBQ3BEOztFQUVEO0VBQ0F3QyxRQUFRLEdBQUdnTCxnQ0FBZ0MsQ0FBQ2hMLFFBQVEsRUFBRTtJQUNwRGhGLEVBQUUsRUFBRTRQLFNBQVMsQ0FBQzVQLEVBQUU7SUFDaEIwQixJQUFJLEVBQUVpcEIsOEJBQW1CLENBQUNDO0VBQzVCLENBQUMsQ0FBQztFQUVGaGIsU0FBUyxHQUFHNUssUUFBUSxDQUFDeEMsT0FBTyxDQUFDZ2tCLFNBQVMsQ0FBb0I7O0VBRTFEO0VBQ0EsSUFBTWlFLGNBQWMsR0FBRyxJQUFBN1gsZ0NBQXlCLEVBQUNoRCxTQUFTLENBQUM3TyxNQUFNLEVBQUU2TyxTQUFTLENBQUM7RUFFN0U1SyxRQUFRLEdBQUd3SyxnQkFBZ0IsQ0FBQ3hLLFFBQVEsRUFBRTtJQUNwQ0wsR0FBRyxFQUFFNmhCLFNBQVM7SUFDZHZlLElBQUksRUFBRSxPQUFPO0lBQ2I5SixLQUFLLEVBQUVzc0I7RUFDVCxDQUFDLENBQUM7RUFFRnpsQixRQUFRLEdBQUdnTCxnQ0FBZ0MsQ0FBQ2hMLFFBQVEsRUFBRTtJQUNwRGhGLEVBQUUsRUFBRTRQLFNBQVMsQ0FBQzVQLEVBQUU7SUFDaEIwQixJQUFJLEVBQUVxTyxvQkFBb0IsQ0FBQ0gsU0FBUztFQUN0QyxDQUFDLENBQUM7O0VBRUY7RUFDQSxPQUFPVCw0QkFBNEIsQ0FBQ25LLFFBQVEsRUFBRTtJQUM1QzdHLEtBQUssR0FBQTJyQixxQkFBQSxJQUFBQyxzQkFBQSxHQUFFL2tCLFFBQVEsQ0FBQ25CLGVBQWUsQ0FBQzlDLE1BQU0sY0FBQWdwQixzQkFBQSx1QkFBL0JBLHNCQUFBLENBQWtDLENBQUMsQ0FBQyxjQUFBRCxxQkFBQSxjQUFBQSxxQkFBQSxHQUFJO0VBQ2pELENBQUMsQ0FBQztBQUNKO0FBRU8sU0FBUzlaLGdDQUFnQ0EsQ0FDOUN4TCxLQUFRLEVBQ1J3QixNQUEyRCxFQUMzRDtFQUNBLElBQVdtSyxRQUFRLEdBQTRCbkssTUFBTSxDQUE5Q2hHLEVBQUU7SUFBa0IwcUIsZ0JBQWdCLEdBQUkxa0IsTUFBTSxDQUFoQ3RFLElBQUk7RUFFekIsSUFBTThrQixTQUFTLEdBQUdoaUIsS0FBSyxDQUFDaEMsT0FBTyxDQUFDeUUsU0FBUyxDQUFDLFVBQUE3SSxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDNEIsRUFBRSxLQUFLbVEsUUFBUTtFQUFBLEVBQUM7RUFDakUsSUFBSXFXLFNBQVMsS0FBSyxDQUFDLENBQUMsRUFBRTtJQUNwQixPQUFPaGlCLEtBQUs7RUFDZDtFQUVBLElBQU12RixNQUFNLEdBQUd1RixLQUFLLENBQUNoQyxPQUFPLENBQUNna0IsU0FBUyxDQUFvQjtFQUUxRCxJQUFJLENBQUNxRSx5QkFBeUIsQ0FBQzVyQixNQUFNLEVBQUV5ckIsZ0JBQWdCLENBQUMsRUFBRTtJQUN4RCxPQUFPbG1CLEtBQUs7RUFDZDtFQUVBLElBQU1vTCxTQUFTLEdBQUF2USxhQUFBLENBQUFBLGFBQUEsS0FDVkosTUFBTTtJQUNUeXJCLGdCQUFnQixFQUFoQkE7RUFBZ0IsRUFDakI7RUFFRCxJQUFNMWxCLFFBQVEsR0FBQTNGLGFBQUEsQ0FBQUEsYUFBQSxLQUNUbUYsS0FBSztJQUNSaEMsT0FBTyxFQUFFLElBQUFxTixzQkFBSyxFQUFTRCxTQUFTLENBQUMsQ0FBQ3BMLEtBQUssQ0FBQ2hDLE9BQU87RUFBQyxFQUNqRDtFQUVELE9BQU91UCwrQkFBK0IsQ0FBQy9NLFFBQVEsRUFBRXdoQixTQUFTLENBQUM7QUFDN0Q7QUFFQSxTQUFTelUsK0JBQStCQSxDQUFxQnZOLEtBQVEsRUFBRWdpQixTQUFpQixFQUFLO0VBQzNGLElBQU12bkIsTUFBTSxHQUFHdUYsS0FBSyxDQUFDaEMsT0FBTyxDQUFDZ2tCLFNBQVMsQ0FBQztFQUN2QyxJQUFLdm5CLE1BQU0sQ0FBcUJ1TCx1QkFBdUIsRUFBRTtJQUN2RCxJQUFNc2dCLGFBQWEsR0FBR0MsMEJBQTBCLENBQUM5ckIsTUFBTSxDQUFDO0lBQ3hELElBQU1kLEtBQUssR0FBR3FHLEtBQUssQ0FBQ1gsZUFBZSxDQUFDMUMsU0FBUyxHQUN6QyxJQUFBNnBCLGtCQUFXLEVBQUNGLGFBQWEsRUFBRXRtQixLQUFLLENBQUNYLGVBQWUsQ0FBQzFDLFNBQVMsQ0FBQyxHQUMzRDJwQixhQUFhO0lBQ2pCLE9BQU8zYiw0QkFBNEIsQ0FBQzNLLEtBQUssRUFBRTtNQUFDckcsS0FBSyxFQUFMQTtJQUFLLENBQUMsQ0FBQztFQUNyRDtFQUNBLE9BQU9xRyxLQUFLO0FBQ2Q7QUFFQSxTQUFTdW1CLDBCQUEwQkEsQ0FBQzlyQixNQUFNLEVBQUU7RUFDMUMsT0FBT0EsTUFBTSxDQUFDZCxLQUFLLENBQUNjLE1BQU0sQ0FBQ3lyQixnQkFBZ0IsQ0FBQztBQUM5QztBQUVBLFNBQVMzYSxvQkFBb0JBLENBQUM5USxNQUF1QixFQUFFO0VBQ3JELElBQUlBLE1BQU0sQ0FBQzBRLGVBQWUsS0FBSzJhLDJCQUFnQixDQUFDVyxJQUFJLEVBQUU7SUFBQSxJQUFBQyxxQkFBQTtJQUNwRCxRQUFBQSxxQkFBQSxHQUFPanNCLE1BQU0sQ0FBQ3lyQixnQkFBZ0IsY0FBQVEscUJBQUEsY0FBQUEscUJBQUEsR0FBSVAsOEJBQW1CLENBQUNDLEdBQUc7RUFDM0Q7RUFFQSxPQUFPRCw4QkFBbUIsQ0FBQ0MsR0FBRztBQUNoQztBQUVBLFNBQVNDLHlCQUF5QkEsQ0FBQzVyQixNQUF1QixFQUFFa3NCLE9BQWUsRUFBRTtFQUMzRSxPQUFPLEVBQ0xsc0IsTUFBTSxDQUFDMFEsZUFBZSxLQUFLMmEsMkJBQWdCLENBQUNXLElBQUksSUFBSUUsT0FBTyxLQUFLUiw4QkFBbUIsQ0FBQ1MsS0FBSyxDQUMxRjtBQUNIO0FBRUEsU0FBU1osd0JBQXdCQSxDQUFDaG1CLEtBQUssRUFBRXZGLE1BQU0sRUFBRTtFQUMvQyxJQUFNZ3JCLDRCQUE0QixHQUFHLElBQUFDLHNDQUErQixFQUFDMWxCLEtBQUssQ0FBQ3BDLE1BQU0sQ0FBQztFQUVsRixJQUFJbW9CLFFBQXVCLEdBQUcsSUFBSTtFQUNsQyxJQUFJTiw0QkFBNEIsQ0FBQ25zQixNQUFNLEdBQUcsQ0FBQyxFQUFFO0lBQzNDO0lBQ0EsSUFBTXV0QixhQUFhLEdBQUdwQiw0QkFBNEIsQ0FBQzVhLE1BQU0sQ0FBQyxVQUFDaWMsWUFBWSxFQUFFN2tCLENBQUMsRUFBSztNQUM3RSxJQUFJQSxDQUFDLENBQUM4a0IsSUFBSSxDQUFDQyxrQkFBa0IsRUFBRTtRQUM3QixJQUFNQyxRQUFRLEdBQUdDLDZCQUFzQixDQUFDemtCLFNBQVMsQ0FBQyxVQUFBakssQ0FBQztVQUFBLE9BQUlBLENBQUMsS0FBS3lKLENBQUMsQ0FBQzhrQixJQUFJLENBQUNDLGtCQUFrQjtRQUFBLEVBQUM7UUFDdkYsT0FBT0MsUUFBUSxHQUFHLENBQUMsQ0FBQyxJQUFJQSxRQUFRLEdBQUdILFlBQVksR0FBR0csUUFBUSxHQUFHSCxZQUFZO01BQzNFO0lBQ0YsQ0FBQyxFQUFFSSw2QkFBc0IsQ0FBQzV0QixNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDO0lBQ0EsSUFBTTZ0QixlQUFlLEdBQUdELDZCQUFzQixDQUFDTCxhQUFhLENBQUM7SUFDN0RkLFFBQVEsR0FBR3FCLGdDQUF5QixDQUFDRCxlQUFlLENBQUM7RUFDdkQ7RUFFQSxJQUFJLENBQUNwQixRQUFRLEVBQUU7SUFDYixPQUFPdHJCLE1BQU07RUFDZjs7RUFFQTtFQUNBLElBQU1tQyxVQUFVLEdBQUcsSUFBQXlxQiwyQkFBb0IsRUFBQ3RCLFFBQVEsQ0FBQztFQUNqRCxJQUFNdUIsZUFBZSxHQUFBenNCLGFBQUEsQ0FBQUEsYUFBQSxLQUFPSixNQUFNLENBQUNtVixRQUFRO0lBQUVtVyxRQUFRLEVBQVJBLFFBQVE7SUFBRW5wQixVQUFVLEVBQVZBO0VBQVUsRUFBQztFQUNsRSxJQUFNd08sU0FBUyxHQUFHLElBQUFtYywrQkFBd0IsRUFBQzlzQixNQUFNLEVBQUU2c0IsZUFBZSxFQUFFdG5CLEtBQUssQ0FBQzlCLFFBQVEsQ0FBQztFQUNuRixPQUFPLElBQUFzcEIsbUNBQTRCLEVBQUN4bkIsS0FBSyxFQUFFb0wsU0FBUyxDQUFDO0FBQ3ZEOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVNxYyw4QkFBOEJBLENBQUM5dEIsS0FBVSxFQUFFd0ksTUFBYyxFQUFFdWxCLGVBQXVCLEVBQUU7RUFBQSxJQUFBQyxhQUFBLEVBQUFDLGNBQUE7RUFDM0YsSUFBSXp1QixLQUFLLENBQUNDLE9BQU8sQ0FBQ08sS0FBSyxDQUFDLEVBQUU7SUFDeEI7SUFDQSxJQUFNa3VCLFFBQVEsR0FBR2x1QixLQUFLLENBQ25CeUcsR0FBRyxDQUFDLFVBQUFvTSxDQUFDO01BQUEsT0FBSWliLDhCQUE4QixDQUFDamIsQ0FBQyxFQUFFckssTUFBTSxFQUFFdWxCLGVBQWUsQ0FBQztJQUFBLEVBQUMsQ0FDcEVqdEIsTUFBTSxDQUFDLFVBQUE2RixDQUFDO01BQUEsT0FBSUEsQ0FBQztJQUFBLEVBQUM7SUFDakIsT0FBT3VuQixRQUFRLENBQUN2dUIsTUFBTSxHQUFHdXVCLFFBQVEsR0FBRyxJQUFJO0VBQzFDO0VBQ0EsSUFBSSxPQUFPbHVCLEtBQUssQ0FBQ3dJLE1BQU0sS0FBSyxRQUFRLElBQUl4SSxLQUFLLENBQUN3SSxNQUFNLEtBQUtBLE1BQU0sRUFBRTtJQUMvRDtJQUNBLE9BQUF0SCxhQUFBLENBQUFBLGFBQUEsS0FDS2xCLEtBQUs7TUFDUndJLE1BQU0sRUFBRXVsQjtJQUFlO0VBRTNCLENBQUMsTUFBTSxJQUFJdnVCLEtBQUssQ0FBQ0MsT0FBTyxDQUFDTyxLQUFLLENBQUN3SSxNQUFNLENBQUMsSUFBSXhJLEtBQUssQ0FBQ3dJLE1BQU0sQ0FBQzZFLFFBQVEsQ0FBQzdFLE1BQU0sQ0FBQyxFQUFFO0lBQ3ZFO0lBQ0EsT0FBQXRILGFBQUEsQ0FBQUEsYUFBQSxLQUNLbEIsS0FBSztNQUNSd0ksTUFBTSxFQUFFeEksS0FBSyxDQUFDd0ksTUFBTSxDQUFDL0IsR0FBRyxDQUFDLFVBQUFFLENBQUM7UUFBQSxPQUFLQSxDQUFDLEtBQUs2QixNQUFNLEdBQUd1bEIsZUFBZSxHQUFHcG5CLENBQUM7TUFBQSxDQUFDO0lBQUM7RUFFdkUsQ0FBQyxNQUFNLElBQUksQ0FBQXFuQixhQUFBLEdBQUFodUIsS0FBSyxDQUFDZ0MsTUFBTSxjQUFBZ3NCLGFBQUEsZUFBWkEsYUFBQSxDQUFjeGxCLE1BQU0sSUFBSSxFQUFBeWxCLGNBQUEsR0FBQWp1QixLQUFLLENBQUNnQyxNQUFNLGNBQUFpc0IsY0FBQSx1QkFBWkEsY0FBQSxDQUFjemxCLE1BQU0sTUFBS0EsTUFBTSxFQUFFO0lBQ2xFO0lBQ0EsT0FBQXRILGFBQUEsQ0FBQUEsYUFBQSxLQUNLbEIsS0FBSztNQUNSZ0MsTUFBTSxFQUFBZCxhQUFBLENBQUFBLGFBQUEsS0FDRGxCLEtBQUssQ0FBQ2dDLE1BQU07UUFDZndHLE1BQU0sRUFBRXVsQjtNQUFlO0lBQ3hCO0VBRUwsQ0FBQyxNQUFNLElBQUksSUFBQUksZUFBUSxFQUFDbnVCLEtBQUssQ0FBQyxJQUFJekIsTUFBTSxDQUFDa0osU0FBUyxDQUFDOUksY0FBYyxDQUFDQyxJQUFJLENBQUNvQixLQUFLLEVBQUV3SSxNQUFNLENBQUMsRUFBRTtJQUNqRjtJQUNBLFdBQUFuSCxnQkFBQSxpQkFBUzBzQixlQUFlLEVBQUcvdEIsS0FBSyxDQUFDd0ksTUFBTSxDQUFDO0VBQzFDO0VBRUEsT0FBTyxJQUFJO0FBQ2I7O0FBRUE7QUFDQSxTQUFTNGxCLG1CQUFtQkEsQ0FBQ3B1QixLQUFLLEVBQUU7RUFBQSxJQUFBcXVCLGlCQUFBO0VBQ2xDLElBQUk3dUIsS0FBSyxDQUFDQyxPQUFPLENBQUNPLEtBQUssQ0FBQyxFQUFFO0lBQ3hCO0lBQ0EsSUFBTXN1QixZQUFZLEdBQUd0dUIsS0FBSyxDQUFDeUcsR0FBRyxDQUFDMm5CLG1CQUFtQixDQUFDLENBQUN0dEIsTUFBTSxDQUFDLFVBQUE2RixDQUFDO01BQUEsT0FBSUEsQ0FBQztJQUFBLEVBQUM7SUFDbEUsT0FBTzJuQixZQUFZLENBQUMzdUIsTUFBTSxHQUFHMnVCLFlBQVksR0FBRyxJQUFJO0VBQ2xEOztFQUVBO0VBQ0EsT0FBTyxDQUFBdHVCLEtBQUssYUFBTEEsS0FBSyxnQkFBQXF1QixpQkFBQSxHQUFMcnVCLEtBQUssQ0FBRWtWLFVBQVUsY0FBQW1aLGlCQUFBLHVCQUFqQkEsaUJBQUEsQ0FBbUIvUSxJQUFJLENBQUN6YixFQUFFLEtBQUksSUFBSTtBQUMzQzs7QUFFQTtBQUNBLFNBQVMwc0IsbUJBQW1CQSxDQUFDbG9CLEtBQUssRUFBRW1vQixVQUFVLEVBQUFDLE1BQUEsRUFBcUM7RUFBQSxJQUFsQzNrQixJQUFJLEdBQUEya0IsTUFBQSxDQUFKM2tCLElBQUk7SUFBRXNULFdBQVcsR0FBQXFSLE1BQUEsQ0FBWHJSLFdBQVc7SUFBRXNSLFlBQVksR0FBQUQsTUFBQSxDQUFaQyxZQUFZO0VBQzlFO0VBQ0E7RUFDQSxJQUFJLENBQUNGLFVBQVUsRUFBRTtJQUNmLE9BQU9ub0IsS0FBSztFQUNkO0VBQ0EsSUFBTXNvQixZQUFZLEdBQ2hCN2tCLElBQUksS0FBSyxRQUFRLEdBQ2Iwa0IsVUFBVSxDQUFDdGQsTUFBTSxDQUFDLFVBQUNDLElBQUksRUFBRXlkLFNBQVM7SUFBQSxPQUFLcFcsa0JBQWtCLENBQUNySCxJQUFJLEVBQUU7TUFBQ3RQLEVBQUUsRUFBRStzQixTQUFTLENBQUMvc0I7SUFBRSxDQUFDLENBQUM7RUFBQSxHQUFFd0UsS0FBSyxDQUFDLEdBQzNGN0csS0FBSyxDQUFDQyxPQUFPLENBQUM0RyxLQUFLLENBQUN5RCxJQUFJLENBQUMsQ0FBQyxHQUFBNUksYUFBQSxDQUFBQSxhQUFBLEtBRXJCbUYsS0FBSyxXQUFBaEYsZ0JBQUEsaUJBQ1B5SSxJQUFJLEVBQUd6RCxLQUFLLENBQUN5RCxJQUFJLENBQUMsQ0FBQ2hKLE1BQU0sQ0FBQyxVQUFBK3RCLENBQUM7SUFBQSxPQUFJLENBQUNMLFVBQVUsQ0FBQ25tQixJQUFJLENBQUMsVUFBQXVtQixTQUFTO01BQUEsT0FBSUMsQ0FBQyxDQUFDaHRCLEVBQUUsS0FBSytzQixTQUFTLENBQUMvc0IsRUFBRTtJQUFBLEVBQUM7RUFBQSxFQUFDO0VBRXZGO0VBQ0F3RSxLQUFLOztFQUVYO0VBQ0EsSUFBTXlvQixVQUFVLE9BQUF6dEIsZ0JBQUEsaUJBQ2IrYixXQUFXLEVBQUdzUixZQUFZO0VBQ3ZCO0VBQ0FBLFlBQVksQ0FBQ0MsWUFBWSxFQUFFSCxVQUFVLENBQUM7RUFDdEM7RUFDRmh2QixLQUFLLENBQUNDLE9BQU8sQ0FBQ2t2QixZQUFZLENBQUN2UixXQUFXLENBQUMsQ0FBQyxNQUFBNVAsTUFBQSxLQUFBQyxtQkFBQSxhQUNsQ2toQixZQUFZLENBQUN2UixXQUFXLENBQUMsT0FBQTNQLG1CQUFBLGFBQUsrZ0IsVUFBVTtFQUM1QztFQUNGLElBQUFMLGVBQVEsRUFBQ1EsWUFBWSxDQUFDdlIsV0FBVyxDQUFDLENBQUMsR0FBQWxjLGFBQUEsQ0FBQUEsYUFBQSxLQUU1Qnl0QixZQUFZLENBQUN2UixXQUFXLENBQUMsR0FDekJvUixVQUFVLElBRWZHLFlBQVksQ0FBQ3ZSLFdBQVcsQ0FBQyxDQUM5QjtFQUVELE9BQUFsYyxhQUFBLENBQUFBLGFBQUEsS0FDS3l0QixZQUFZLEdBQ1pHLFVBQVU7QUFFakI7QUFFQSxTQUFTQyxxQkFBcUJBLENBQzVCMW9CLEtBQVEsRUFDUm1DLE1BQWMsRUFDZHdtQixXQUFtQixFQUNoQjtFQUNILE9BQU8sSUFBQUMseUJBQVEsRUFBSSxDQUNqQixJQUFBQyx1QkFBTSxFQUFDQyx5QkFBeUIsRUFBRTtJQUFDM21CLE1BQU0sRUFBTkEsTUFBTTtJQUFFd21CLFdBQVcsRUFBWEE7RUFBVyxDQUFDLENBQUMsRUFDeEQsSUFBQUUsdUJBQU0sRUFBQ3BVLG9CQUFvQixFQUFFO0lBQUN0UyxNQUFNLEVBQU5BO0VBQU0sQ0FBQyxDQUFDLENBQ3ZDLENBQUMsQ0FBQ25DLEtBQUssQ0FBQztBQUNYO0FBRU8sU0FBUytvQiw2QkFBNkJBLENBQzNDL29CLEtBQVEsRUFDUm1DLE1BQWMsRUFDZHdtQixXQUFtQixFQUNoQjtFQUFBLElBQUFLLHFCQUFBO0VBQ0gsSUFBTUMsZUFBZSxHQUFHLElBQUFDLGlDQUFpQixFQUFDbHBCLEtBQUssRUFBRUEsS0FBSyxDQUFDSCxNQUFNLENBQUM7RUFDOUQsSUFBTXlDLFNBQVMsR0FBR29tQixxQkFBcUIsQ0FBQzFvQixLQUFLLEVBQUVtQyxNQUFNLEVBQUV3bUIsV0FBVyxDQUFDO0VBQ25FO0VBQ0EsSUFBTVEsa0JBQWtCLE9BQUEvaEIsbUJBQUEsYUFBT3BILEtBQUssQ0FBQ2pDLFVBQVUsQ0FBQzs7RUFFaEQ7RUFDQXVFLFNBQVMsQ0FBQzhtQixvQkFBb0IsR0FBR2x4QixNQUFNLENBQUNxQyxJQUFJLENBQUN5RixLQUFLLENBQUM5QixRQUFRLENBQUMsQ0FBQ2tDLEdBQUcsQ0FBQyxVQUFBRSxDQUFDO0lBQUEsT0FDaEVBLENBQUMsS0FBSzZCLE1BQU0sR0FBR3dtQixXQUFXLEdBQUdyb0IsQ0FBQztFQUFBLENBQ2hDLENBQUM7O0VBRUQ7RUFDQSxLQUFBMG9CLHFCQUFBLEdBQUkxbUIsU0FBUyxDQUFDeEUsZUFBZSxjQUFBa3JCLHFCQUFBLGVBQXpCQSxxQkFBQSxDQUEyQjF2QixNQUFNLEVBQUU7SUFBQSxJQUFBK3ZCLHFCQUFBO0lBQ3JDO0lBQ0EvbUIsU0FBUyxDQUFDckQsbUJBQW1CLElBQUFvcUIscUJBQUEsR0FBR0osZUFBZSxhQUFmQSxlQUFlLHVCQUFmQSxlQUFlLENBQUVqcUIsU0FBUyxjQUFBcXFCLHFCQUFBLGNBQUFBLHFCQUFBLEdBQUksRUFBRTtJQUNoRS9tQixTQUFTLENBQUN2RSxVQUFVLE9BQUFxSixtQkFBQSxhQUFPK2hCLGtCQUFrQixDQUFDO0VBQ2hEO0VBRUEsT0FBTzdtQixTQUFTO0FBQ2xCO0FBRU8sU0FBU3dtQix5QkFBeUJBLENBQ3ZDOW9CLEtBQVEsRUFBQXNwQixNQUFBLEVBRUw7RUFBQSxJQURGbm5CLE1BQU0sR0FBQW1uQixNQUFBLENBQU5ubkIsTUFBTTtJQUFFd21CLFdBQVcsR0FBQVcsTUFBQSxDQUFYWCxXQUFXO0VBRXBCLElBQU1NLGVBQWUsR0FBRyxJQUFBQyxpQ0FBaUIsRUFBQ2xwQixLQUFLLEVBQUVBLEtBQUssQ0FBQ0gsTUFBTSxDQUFDO0VBRTlELElBQU15QyxTQUFTLEdBQUd0QyxLQUFLLENBQUNMLE9BQU8sQ0FBQ2tMLE1BQU0sQ0FDcEMsVUFDRTBlLFNBQVMsRUFBQUMsTUFBQSxFQUVOO0lBQUEsSUFERi9sQixJQUFJLEdBQUErbEIsTUFBQSxDQUFKL2xCLElBQUk7TUFBRXNULFdBQVcsR0FBQXlTLE1BQUEsQ0FBWHpTLFdBQVc7TUFBRTBTLHVCQUF1QixHQUFBRCxNQUFBLENBQXZCQyx1QkFBdUI7TUFBRUMsa0JBQWtCLEdBQUFGLE1BQUEsQ0FBbEJFLGtCQUFrQjtNQUFFckIsWUFBWSxHQUFBbUIsTUFBQSxDQUFabkIsWUFBWTtNQUFFc0IsYUFBYSxHQUFBSCxNQUFBLENBQWJHLGFBQWE7SUFFNUY7SUFDQSxJQUFNamxCLEtBQUssR0FBRyxJQUFBMEgsb0JBQU8sRUFBQzNJLElBQUksQ0FBQztJQUMzQixJQUFNbW1CLFlBQVksR0FBRyxJQUFBeGQsb0JBQU8sRUFBQzJLLFdBQVcsQ0FBQztJQUN6QyxJQUFNOFMsVUFBVSxHQUFHWixlQUFlLEdBQUd2a0IsS0FBSyxDQUFDdEUsR0FBRyxDQUFDLFVBQUFvb0IsQ0FBQztNQUFBLE9BQUlTLGVBQWUsQ0FBQ1QsQ0FBQyxDQUFDO0lBQUEsRUFBQyxHQUFHLEVBQUU7SUFFNUUsSUFBSXNCLGFBQWEsR0FBR1AsU0FBUztJQUM3Qk0sVUFBVSxDQUFDOXVCLE9BQU8sQ0FBQyxVQUFDd3RCLFNBQVMsRUFBRS92QixDQUFDLEVBQUs7TUFBQSxJQUFBdXhCLHFCQUFBO01BQ25DLElBQU1DLGFBQWEsR0FBRztRQUNwQnZtQixJQUFJLEVBQUVpQixLQUFLLENBQUNsTSxDQUFDLENBQUM7UUFDZHVlLFdBQVcsRUFBRTZTLFlBQVksQ0FBQ3B4QixDQUFDLENBQUM7UUFDNUJreEIsa0JBQWtCLEVBQWxCQSxrQkFBa0I7UUFDbEJyQixZQUFZLEVBQVpBO01BQ0YsQ0FBQztNQUVELElBQU00QixZQUFZLEdBQ2hCLENBQUFSLHVCQUF1QixhQUF2QkEsdUJBQXVCLHVCQUF2QkEsdUJBQXVCLENBQUdsQixTQUFTLEVBQUVwbUIsTUFBTSxFQUFFd21CLFdBQVcsQ0FBQyxLQUN6RGxCLDhCQUE4QixDQUFDYyxTQUFTLEVBQUVwbUIsTUFBTSxFQUFFd21CLFdBQVcsQ0FBQztNQUNoRW1CLGFBQWEsR0FBR0csWUFBWSxHQUN4QkMsdUJBQXVCLENBQUNKLGFBQWEsRUFBRUcsWUFBWSxFQUFFRCxhQUFhLENBQUMsR0FDbkVGLGFBQWE7TUFFakIsSUFDRUUsYUFBYSxDQUFDalQsV0FBVyxLQUFLM1ksU0FBUyxLQUFBMnJCLHFCQUFBLEdBQ3ZDRCxhQUFhLENBQUNFLGFBQWEsQ0FBQ2pULFdBQVcsQ0FBQyxjQUFBZ1QscUJBQUEsZUFBeENBLHFCQUFBLENBQTBDendCLE1BQU0sSUFDaERxd0IsYUFBYSxFQUNiO1FBQ0FHLGFBQWEsQ0FBQ0gsYUFBYSxDQUFDLEdBQUdwQixTQUFTLENBQUNub0IsR0FBRyxDQUFDLFVBQUErcEIsSUFBSTtVQUFBLE9BQUlBLElBQUksQ0FBQzN1QixFQUFFO1FBQUEsRUFBQztNQUMvRDtJQUNGLENBQUMsQ0FBQztJQUVGLE9BQU9zdUIsYUFBYTtFQUN0QixDQUFDLEVBQ0Q5cEIsS0FDRixDQUFDO0VBRUQsT0FBT3NDLFNBQVM7QUFDbEI7QUFFQSxTQUFTNG5CLHVCQUF1QkEsQ0FDOUJscUIsS0FBSyxFQUNMaXFCLFlBQVksRUFBQUcsTUFBQSxFQUVaO0VBQUEsSUFEQzNtQixJQUFJLEdBQUEybUIsTUFBQSxDQUFKM21CLElBQUk7SUFBRXNULFdBQVcsR0FBQXFULE1BQUEsQ0FBWHJULFdBQVc7SUFBRTJTLGtCQUFrQixHQUFBVSxNQUFBLENBQWxCVixrQkFBa0I7SUFBRXJCLFlBQVksR0FBQStCLE1BQUEsQ0FBWi9CLFlBQVk7RUFFcEQ7RUFDQTtFQUNBLElBQUkvbEIsU0FBUyxHQUFHNGxCLG1CQUFtQixDQUFDbG9CLEtBQUssRUFBRWlxQixZQUFZLEVBQUU7SUFBQ3htQixJQUFJLEVBQUpBLElBQUk7SUFBRXNULFdBQVcsRUFBWEEsV0FBVztJQUFFc1IsWUFBWSxFQUFaQTtFQUFZLENBQUMsQ0FBQztFQUMzRixJQUFNSixZQUFZLEdBQUcsQ0FBQXlCLGtCQUFrQixhQUFsQkEsa0JBQWtCLHVCQUFsQkEsa0JBQWtCLENBQUdPLFlBQVksQ0FBQyxLQUFJbEMsbUJBQW1CLENBQUNrQyxZQUFZLENBQUM7RUFFNUYsSUFBSWhDLFlBQVksRUFBRTtJQUNoQjNsQixTQUFTLEdBQUcsSUFBQThKLG9CQUFPLEVBQUM2YixZQUFZLENBQUMsQ0FBQ3BkLE1BQU0sQ0FBQyxVQUFDQyxJQUFJLEVBQUV1ZixXQUFXLEVBQUs7TUFDOUQ7TUFDQTtNQUNBLE9BQU8zQixxQkFBcUIsQ0FBQzVkLElBQUksRUFBRXVmLFdBQVcsRUFBRUEsV0FBVyxDQUFDO0lBQzlELENBQUMsRUFBRS9uQixTQUFTLENBQUM7RUFDZjtFQUNBLE9BQU9BLFNBQVM7QUFDbEIiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
3515
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYmJveCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2NvcHlUb0NsaXBib2FyZCIsIl9kZWVwbWVyZ2UiLCJfd2luZG93IiwiX2xvZGFzaCIsIl9sb2Rhc2gyIiwiX2xvZGFzaDMiLCJfbG9kYXNoNCIsIl9sb2Rhc2g1IiwiX2xvZGFzaDYiLCJfdGFza3MiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl90YXNrczIiLCJfYWN0aW9ucyIsIl91dGlscyIsIl9jb21tb25VdGlscyIsIl9jb25zdGFudHMiLCJfbGF5ZXJzIiwiX2NvbXBvc2VySGVscGVycyIsIl9tZXJnZXJIYW5kbGVyIiwiX3Zpc1N0YXRlTWVyZ2VyIiwiX3NjaGVtYXMiLCJfdGFibGUiLCJfaW50ZXJhY3Rpb25VdGlscyIsIl9sYXllclV0aWxzIiwiX2VmZmVjdHMiLCJfZGF0YVV0aWxzIiwiX2V4Y2x1ZGVkIiwiX2V4Y2x1ZGVkMiIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIl90b1Byb3BlcnR5S2V5IiwiX3RvUHJpbWl0aXZlIiwiU3ltYm9sIiwidG9QcmltaXRpdmUiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJOdW1iZXIiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibGVuZ3RoIiwiX24iLCJGIiwicyIsImRvbmUiLCJ2YWx1ZSIsImYiLCJvIiwibmV4dCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0Iiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkaXNhYmxlU3RhY2tDYXB0dXJpbmciLCJ2aXNTdGF0ZVVwZGF0ZXJzIiwiZGVmYXVsdEludGVyYWN0aW9uQ29uZmlnIiwiZXhwb3J0cyIsInRvb2x0aXAiLCJpZCIsImxhYmVsIiwiZW5hYmxlZCIsImNvbmZpZyIsImZpZWxkc1RvU2hvdyIsImNvbXBhcmVNb2RlIiwiY29tcGFyZVR5cGUiLCJDT01QQVJFX1RZUEVTIiwiQUJTT0xVVEUiLCJnZW9jb2RlciIsInBvc2l0aW9uIiwiYnJ1c2giLCJzaXplIiwiY29vcmRpbmF0ZSIsIkRFRkFVTFRfQU5JTUFUSU9OX0NPTkZJRyIsImRvbWFpbiIsImN1cnJlbnRUaW1lIiwic3BlZWQiLCJpc0FuaW1hdGluZyIsInRpbWVTdGVwcyIsInRpbWVGb3JtYXQiLCJ0aW1lem9uZSIsImRlZmF1bHRUaW1lRm9ybWF0IiwiaGlkZUNvbnRyb2wiLCJkdXJhdGlvbiIsIkRFRkFVTFRfRURJVE9SIiwibW9kZSIsIkVESVRPUl9NT0RFUyIsIkRSQVdfUE9MWUdPTiIsImZlYXR1cmVzIiwic2VsZWN0ZWRGZWF0dXJlIiwidmlzaWJsZSIsIklOSVRJQUxfVklTX1NUQVRFIiwibWFwSW5mbyIsInRpdGxlIiwiZGVzY3JpcHRpb24iLCJsYXllcnMiLCJsYXllckRhdGEiLCJsYXllclRvQmVNZXJnZWQiLCJsYXllck9yZGVyIiwiZmlsdGVycyIsImZpbHRlclRvQmVNZXJnZWQiLCJkYXRhc2V0cyIsImVkaXRpbmdEYXRhc2V0IiwidW5kZWZpbmVkIiwiZWZmZWN0cyIsImVmZmVjdE9yZGVyIiwiaW50ZXJhY3Rpb25Db25maWciLCJpbnRlcmFjdGlvblRvQmVNZXJnZWQiLCJsYXllckJsZW5kaW5nIiwib3ZlcmxheUJsZW5kaW5nIiwiaG92ZXJJbmZvIiwiY2xpY2tlZCIsIm1vdXNlUG9zIiwibWF4RGVmYXVsdFRvb2x0aXBzIiwiTUFYX0RFRkFVTFRfVE9PTFRJUFMiLCJzcGxpdE1hcHMiLCJzcGxpdE1hcHNUb0JlTWVyZ2VkIiwiaXNNZXJnaW5nRGF0YXNldHMiLCJsYXllckNsYXNzZXMiLCJMYXllckNsYXNzZXMiLCJhbmltYXRpb25Db25maWciLCJlZGl0b3IiLCJmaWxlTG9hZGluZyIsImZpbGVMb2FkaW5nUHJvZ3Jlc3MiLCJsb2FkZXJzIiwibG9hZE9wdGlvbnMiLCJtZXJnZXJzIiwiVklTX1NUQVRFX01FUkdFUlMiLCJzY2hlbWEiLCJLZXBsZXJHTFNjaGVtYSIsInVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YSIsInN0YXRlIiwiX3JlZiIsImxheWVyIiwiaWR4IiwibWFwIiwibHlyIiwiZCIsInVwZGF0ZVN0YXRlT25MYXllclZpc2liaWxpdHlDaGFuZ2UiLCJuZXdTdGF0ZSIsImlzVmlzaWJsZSIsImFkZE5ld0xheWVyc1RvU3BsaXRNYXAiLCJyZW1vdmVMYXllckZyb21TcGxpdE1hcHMiLCJhbmltYXRpb24iLCJ1cGRhdGVBbmltYXRpb25Eb21haW4iLCJwaWNrQ2hhbmdlZFByb3BzIiwicHJldiIsImNoYW5nZWRQcm9wcyIsInBpY2tQcm9wc09mIiwib2JqIiwia2V5IiwicHJvdG90eXBlIiwiaXNFcXVhbCIsIlZJU1VBTF9DSEFOTkVMX1BST1BfVFlQRVMiLCJhcHBseUxheWVyQ29uZmlnVXBkYXRlciIsImFjdGlvbiIsIl9zZXJpYWxpemVMYXllciIsIm9sZExheWVySWQiLCJuZXdMYXllckNvbmZpZyIsImxheWVySW5kZXgiLCJuZXdQYXJzZWRMYXllciIsInBhcnNlTGF5ZXJDb25maWciLCJvbGRMYXllciIsImZpbmQiLCJsIiwiZGF0YXNldCIsImRhdGFJZCIsIm5ld0xheWVyIiwidmFsaWRhdGVMYXllcldpdGhEYXRhIiwibmV4dFN0YXRlIiwidHlwZSIsIm9sZExheWVySW5kZXgiLCJmaW5kSW5kZXgiLCJsYXllclR5cGVDaGFuZ2VVcGRhdGVyIiwibGF5ZXJUeXBlQ2hhbmdlIiwibmV3TGF5ZXJJZCIsImFwcGx5TGF5ZXJDb25maWciLCJzZXJpYWxpemVkT2xkTGF5ZXIiLCJzZXJpYWxpemVMYXllciIsInNlcmlhbGl6ZWROZXdMYXllciIsImNoYW5nZWQiLCJ2aXNDb25maWciLCJsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJsYXllclZpc0NvbmZpZ0NoYW5nZSIsInZpc3VhbENoYW5uZWxzIiwiY2hhbm5lbE5hbWUiLCJjaGFubmVsIiwiY2hhbm5lbFByb3BOYW1lcyIsInByb3AiLCJzb21lIiwibGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlciIsImxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSIsInBpY2siLCJfaXRlcmF0b3IiLCJfc3RlcCIsImVyciIsImxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlciIsImxheWVyQ29uZmlnQ2hhbmdlIiwidXBkYXRlbGF5ZXJWaXNpYmlsdHkiLCJmaWx0ZXJJbmRleCIsImZpbHRlclN5bmNlZFdpdGhUaW1lbGluZSIsImlzTGF5ZXJBbmltYXRhYmxlIiwic3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZVVwZGF0ZXIiLCJlbmFibGUiLCJnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyIsInByb3BzIiwibmV3Q29uZmlnIiwiX2FjdGlvbiRuZXdDb25maWciLCJyZXN0Q29uZmlnIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzMiIsInN0YXRlV2l0aERhdGFJZCIsImxheWVyRGF0YUlkQ2hhbmdlVXBkYXRlciIsIm5leHRMYXllciIsInVwZGF0ZUxheWVyQ29uZmlnIiwic2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhIiwib2xkTGF5ZXJEYXRhIiwidXBkYXRlTGF5ZXJEYXRhUmVzdWx0IiwiY2FsY3VsYXRlTGF5ZXJEYXRhIiwibGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyIiwiX2NhbGN1bGF0ZUxheWVyRGF0YSIsImxheWVyVG9nZ2xlVmlzaWJpbGl0eVVwZGF0ZXIiLCJsYXllcklkIiwic3BsaXRNYXBJZCIsIm1hcEluZGV4Iiwic20iLCJ0b2dnbGVMYXllckZvck1hcFVwZGF0ZXIiLCJ0b2dnbGVMYXllckZvck1hcCIsInN5bmNlZFdpdGhMYXllclRpbWVsaW5lIiwibGF5ZXJTZXRJc1ZhbGlkVXBkYXRlciIsImlzVmFsaWQiLCJsYXllclRvVXBkYXRlIiwibmV3RGF0YSIsIl9jYWxjdWxhdGVMYXllckRhdGEyIiwiYWRkT3JSZW1vdmVUZXh0TGFiZWxzIiwibmV3RmllbGRzIiwidGV4dExhYmVsIiwiZGVmYXVsdFRleHRMYWJlbCIsIkRFRkFVTFRfVEVYVF9MQUJFTCIsIm5ld1RleHRMYWJlbCIsImN1cnJlbnRGaWVsZHMiLCJ0bCIsImZpZWxkIiwiYWRkRmllbGRzIiwiaW5jbHVkZXMiLCJkZWxldGVGaWVsZHMiLCJmZCIsImNvbmNhdCIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJhZiIsInVwZGF0ZVRleHRMYWJlbFByb3BBbmRWYWx1ZSIsInNwbGljZSIsImxheWVyVGV4dExhYmVsQ2hhbmdlVXBkYXRlciIsIl9vbGRMYXllciRnZXREZWZhdWx0TCIsIl9vbGRMYXllciRnZXREZWZhdWx0TDIiLCJnZXREZWZhdWx0TGF5ZXJDb25maWciLCJ2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YSIsImxvYWRlZExheWVyIiwiYWxsb3dFbXB0eUNvbHVtbiIsImlzVmFsaWRUb1NhdmUiLCJ2YWxpZGF0ZWQiLCJvbGRMYXllclR5cGUiLCJpc0NvbmZpZ0FjdGl2ZSIsInVwZGF0ZUxheWVyRG9tYWluIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTMiLCJzZXRJbml0aWFsTGF5ZXJDb25maWciLCJyZXN1bHQiLCJmaW5kRGVmYXVsdExheWVyUHJvcHMiLCJuZXdUeXBlIiwib2xkSWQiLCJDb25zb2xlIiwiZXJyb3IiLCJhc3NpZ25Db25maWdUb0xheWVyIiwidmlzQ29uZmlnU2V0dGluZ3MiLCJpc0xheWVySG92ZXJlZCIsIl9jYWxjdWxhdGVMYXllckRhdGE0Iiwic2V0dGluZ3MiLCJfc2V0dGluZ3MkbGF5ZXJzIiwib2xkTGF5ZXJNYXAiLCJvdGhlckxheWVycyIsIm5ld1Zpc0NvbmZpZyIsInVwZGF0ZUxheWVyVmlzQ29uZmlnIiwidXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsIiwidXBkYXRlZFN0YXRlIiwidmlzdWFsQ2hhbm5lbCIsImNoYW5uZWxTY2FsZVR5cGUiLCJDSEFOTkVMX1NDQUxFUyIsImNvbG9yIiwidXBkYXRlTGF5ZXJDb2xvclVJIiwicmFuZ2UiLCJjb2xvclJhbmdlQ29uZmlnIiwiY29sb3JVSSIsImN1c3RvbUJyZWFrcyIsIl9jYWxjdWxhdGVMYXllckRhdGE1Iiwic2NhbGUiLCJTQ0FMRV9UWVBFUyIsImN1c3RvbU9yZGluYWwiLCJjdXN0b21QYWxldHRlIiwiaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlIiwib3JkaW5hbERvbWFpbiIsImNvbG9yQnJlYWtzIiwic2hvd0NvbG9yQ2hhcnQiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNiIsInNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIiLCJfcmVmMiIsInJlZHVjZSIsImFjY3UiLCJzZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlciIsInNldEZpbHRlclVwZGF0ZXIiLCJzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyIiwiX3JlZjMiLCJhbmltYXRpb25XaW5kb3ciLCJuZXdGaWx0ZXIiLCJzd2FwXyIsIm5ld1N5bmNUaW1lbGluZU1vZGUiLCJnZXRTeW5jQW5pbWF0aW9uTW9kZSIsInNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyIiwiYXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyIiwiX3NlcmlhbGl6ZUZpbHRlciIsImZpbHRlcklkIiwib2xkRmlsdGVyIiwic2VyaWFsaXplZE9sZEZpbHRlciIsInNlcmlhbGl6ZUZpbHRlciIsInNlcmlhbGl6ZWROZXdGaWx0ZXIiLCJzZXRGaWx0ZXIiLCJ2YWx1ZXMiLCJfYWN0aW9uJHZhbHVlSW5kZXgiLCJ2YWx1ZUluZGV4IiwidG9BcnJheSIsImRhdGFzZXRJZHNUb0ZpbHRlciIsIl9sb29wIiwicmVzIiwidiIsIl91cGRhdGVGaWx0ZXJQcm9wIiwiZW5sYXJnZWRGaWx0ZXIiLCJ2aWV3IiwiRklMVEVSX1ZJRVdfVFlQRVMiLCJlbmxhcmdlZCIsInNpZGUiLCJmaWx0ZXJlZERhdGFzZXRzIiwiYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyIsInVuaXEiLCJmaWx0ZXJXaXRoUExvdCIsInVwZGF0ZUZpbHRlclBsb3QiLCJ1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEiLCJGSUxURVJfVFlQRVMiLCJ0aW1lUmFuZ2UiLCJhZGp1c3RBbmltYXRpb25Db25maWdXaXRoRmlsdGVyIiwiX3VwZGF0ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleCIsIl9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgiLCJuZXh0VmFsdWUiLCJnZXREZWZhdWx0RmlsdGVyIiwicmVtb3ZlRmlsdGVyUGxvdCIsIl9pIiwiX2FyciIsIm5leHRWYWwiLCJkb21haW5TdGVwcyIsIm1lcmdlRmlsdGVyRG9tYWluIiwibmV4dEZpbHRlciIsInN0ZXAiLCJhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluIiwiZGF0YXNldElkcyIsIkZJTFRFUl9VUERBVEVSX1BST1BTIiwib2xkRGF0YUlkIiwiZGF0YXNldElkIiwiX2FwcGx5RmlsdGVyRmllbGROYW1lIiwiYXBwbHlGaWx0ZXJGaWVsZE5hbWUiLCJtZXJnZURvbWFpbiIsInVwZGF0ZWRGaWx0ZXIiLCJuZXdEYXRhc2V0IiwiZ3B1Iiwic2V0RmlsdGVyR3B1TW9kZSIsImFzc2lnbkdwdUNoYW5uZWwiLCJsYXllcklkRGlmZmVyZW5jZSIsInhvciIsImxheWVyRGF0YUlkcyIsImxpZCIsIm5ld0RhdGFJZHMiLCJzZXRGaWx0ZXJQbG90VXBkYXRlciIsIl9yZWY0IiwibmV3UHJvcCIsIl9yZWY0JHZhbHVlSW5kZXgiLCJwaWNrXyIsIm1lcmdlXyIsInBsb3RUeXBlIiwiY2hhcnRUeXBlIiwieUF4aXMiLCJQTE9UX1RZUEVTIiwibGluZUNoYXJ0IiwiaGlzdG9ncmFtIiwiYWRkRmlsdGVyVXBkYXRlciIsImNyZWF0ZU9yVXBkYXRlRmlsdGVyVXBkYXRlciIsIm9yaWdpbmFsSW5kZXgiLCJpbmRleCIsImxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXIiLCJfcmVmNSIsIm9sZFZpeENvbmZpZyIsInRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXIiLCJpc0ZpbHRlckFuaW1hdGlvbkNvbmZpZyIsInNldEFuaW1hdGlvbkNvbmZpZ1VwZGF0ZXIiLCJpc1NpZGVGaWx0ZXIiLCJhcHBseUZpbHRlckNvbmZpZyIsInRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlciIsInRvZ2dsZUxheWVyQW5pbWF0aW9uQ29udHJvbFVwZGF0ZXIiLCJ1cGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIiLCJ1cGRhdGVMYXllckFuaW1hdGlvblNwZWVkVXBkYXRlciIsIl9yZWY2Iiwic2V0RmlsdGVyVmlld1VwZGF0ZXIiLCJzaG91bGRSZXNldE90aGVyRmlsdGVyc1ZpZXciLCJ0b2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlciIsImZlYXR1cmVUb0ZpbHRlclZhbHVlIiwicmVtb3ZlRmlsdGVyVXBkYXRlciIsIl9zdGF0ZSRmaWx0ZXJzJGlkeCIsIm5ld0ZpbHRlcnMiLCJuZXdFZGl0b3IiLCJnZXRGaWx0ZXJJZEluRmVhdHVyZSIsImFkZExheWVyVXBkYXRlciIsIm5ld0xheWVyRGF0YSIsImNyZWF0ZUxheWVyRnJvbUNvbmZpZyIsIndhcm4iLCJfYWN0aW9uJGRhdGFzZXRJZCIsImRlZmF1bHREYXRhc2V0IiwiTGF5ZXIiLCJyZW1vdmVMYXllclVwZGF0ZXIiLCJfcmVmNyIsImlzRmluaXRlIiwibGF5ZXJUb1JlbW92ZSIsImZpbHRlck91dEJ5SWQiLCJyZW1vdmVFbGVtZW50QXRJbmRleCIsInJlb3JkZXJMYXllclVwZGF0ZXIiLCJfcmVmOCIsIm9yZGVyIiwiZHVwbGljYXRlTGF5ZXJVcGRhdGVyIiwiX3JlZjkiLCJvcmlnaW5hbCIsIm9yaWdpbmFsTGF5ZXJPcmRlcklkeCIsIm5ld0xhYmVsIiwicG9zdGZpeCIsImdlbmVyYXRlSGFzaElkIiwiTEFZRVJfSURfTEVOR1RIIiwibmV3TGF5ZXJPcmRlciIsImFycmF5SW5zZXJ0IiwiYWRkRWZmZWN0VXBkYXRlciIsIl9hY3Rpb24kY29uZmlnIiwiTElHSFRfQU5EX1NIQURPV19FRkZFQ1QiLCJlZmZlY3QiLCJuZXdFZmZlY3QiLCJjcmVhdGVFZmZlY3QiLCJzZXRQcm9wcyIsImZpeEVmZmVjdE9yZGVyIiwicmVtb3ZlRWZmZWN0VXBkYXRlciIsIl9yZWYxMCIsImVmZmVjdFRvUmVtb3ZlIiwiZWZmZWN0SWQiLCJyZW9yZGVyRWZmZWN0VXBkYXRlciIsIl9yZWYxMSIsInVwZGF0ZUVmZmVjdFVwZGF0ZXIiLCJfcmVmMTIiLCJpZHgyIiwiZWZmZWN0T3JkZXJJZCIsIm5ld0VmZmVjdHMiLCJyZW1vdmVEYXRhc2V0VXBkYXRlciIsImRhdGFzZXRLZXkiLCJfc3RhdGUkZGF0YXNldHMiLCJuZXdEYXRhc2V0cyIsImxheWVyc1RvUmVtb3ZlIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsImluZGV4T2YiLCJyZW1vdmVEYXRhc2V0RnJvbUludGVyYWN0aW9uQ29uZmlnIiwiX3JlZjEzIiwiX2ludGVyYWN0aW9uQ29uZmlnIiwiX2NvbmZpZyRmaWVsZHNUb1Nob3ciLCJmaWVsZHMiLCJ1cGRhdGVMYXllckJsZW5kaW5nVXBkYXRlciIsInVwZGF0ZU92ZXJsYXlCbGVuZGluZ1VwZGF0ZXIiLCJzaG93RGF0YXNldFRhYmxlVXBkYXRlciIsInVwZGF0ZVRhYmxlQ29sb3JVcGRhdGVyIiwidXBkYXRlRGF0YXNldFByb3BzVXBkYXRlciIsIm5ld0NvbG9yIiwicmVzZXRNYXBDb25maWdVcGRhdGVyIiwiaW5pdGlhbFN0YXRlIiwicmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIiLCJfcmVmMTQiLCJfcmVmMTQkcGF5bG9hZCIsInBheWxvYWQiLCJfcmVmMTQkcGF5bG9hZCRjb25maWciLCJfcmVmMTQkcGF5bG9hZCRvcHRpb24iLCJvcHRpb25zIiwidmlzU3RhdGUiLCJrZWVwRXhpc3RpbmdDb25maWciLCJtZXJnZWRTdGF0ZSIsIl9pdGVyYXRvcjMiLCJfc3RlcDMiLCJtZXJnZXIiLCJpc1ZhbGlkTWVyZ2VyIiwiaGFzUHJvcHNUb01lcmdlIiwibWVyZ2UiLCJnZXRQcm9wVmFsdWVUb01lcmdlciIsInRvTWVyZ2VQcm9wIiwibGF5ZXJIb3ZlclVwZGF0ZXIiLCJpbmZvIiwiaW50ZXJhY3Rpb25Db25maWdDaGFuZ2VVcGRhdGVyIiwiY29udHJhZGljdCIsImsiLCJsYXllckNsaWNrVXBkYXRlciIsInBpbm5lZCIsImNsb25lRGVlcCIsInBpY2tlZCIsIm1hcENsaWNrVXBkYXRlciIsIm1vdXNlTW92ZVVwZGF0ZXIiLCJfcmVmMTUiLCJldnQiLCJwb2ludCIsIm1vdXNlUG9zaXRpb24iLCJsbmdMYXQiLCJ0b2dnbGVTcGxpdE1hcFVwZGF0ZXIiLCJjb21wdXRlU3BsaXRNYXBMYXllcnMiLCJkdXBsaWNhdGUiLCJjbG9zZVNwZWNpZmljTWFwQXRJbmRleCIsIl9yZWYxNiIsInVwZGF0ZVZpc0RhdGFVcGRhdGVyIiwicHJldmlvdXNTdGF0ZSIsInNldElzTG9hZGluZ1Rhc2siLCJBQ1RJT05fVEFTSyIsInNldExvYWRpbmdJbmRpY2F0b3IiLCJjaGFuZ2UiLCJ3aXRoVGFzayIsImFsbENyZWF0ZURhdGFzZXRzVGFza3MiLCJfcmVmMTciLCJfcmVmMTckaW5mbyIsInJlc3QiLCJjcmVhdGVOZXdEYXRhRW50cnkiLCJkYXRhc2V0VGFza3MiLCJUYXNrIiwiYWxsU2V0dGxlZCIsInJlc3VsdHMiLCJjcmVhdGVOZXdEYXRhc2V0U3VjY2VzcyIsImFkZFRvTWFwT3B0aW9ucyIsImNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzVXBkYXRlciIsIl9hY3Rpb24kcGF5bG9hZCIsIm5ld0RhdGFFbnRyaWVzIiwic3RhdHVzIiwiY29uc29sZSIsInJlYXNvbiIsIm1lcmdlRGF0YXNldHNCeU9yZGVyIiwibGF5ZXJNZXJnZXJzIiwibSIsIndhaXRGb3JMYXllckRhdGEiLCJkYXRhc2V0TWVyZ2VycyIsInBvc3RNZXJnZXJQYXlsb2FkIiwiYXBwbHlNZXJnZXJzVXBkYXRlciIsIm1lcmdlU3RhdGVSZXN1bHQiLCJtZXJnZVN0YXRlRnJvbU1lcmdlcnMiLCJhbGxNZXJnZWQiLCJwb3N0TWVyZ2VVcGRhdGVyIiwiZkRhdGFJZCIsImRhdGFzZXRGaWx0ZXJlZCIsImRhdGFFbXB0eSIsIm5ld0xheWVycyIsImF1dG9DcmVhdGVMYXllcnMiLCJhZGREZWZhdWx0TGF5ZXJzIiwidG9vbHRpcEZpZWxkcyIsImF1dG9DcmVhdGVUb29sdGlwcyIsImFkZERlZmF1bHRUb29sdGlwcyIsInVwZGF0ZWREYXRhc2V0cyIsImNlbnRlck1hcCIsImJvdW5kcyIsImZpbmRNYXBCb3VuZHMiLCJmaXRCb3VuZHNUYXNrIiwiZml0TWFwQm91bmRzIiwicmVuYW1lRGF0YXNldFVwZGF0ZXIiLCJBTExPV0VEX1VQREFURV9EQVRBU0VUX1BST1BTIiwidmFsaWRhdGVEYXRhc2V0VXBkYXRlUHJvcHMiLCJ2YWxpZGF0ZWRQcm9wcyIsImVudHJpZXMiLCJhY2MiLCJlbnRyeSIsIl9lbnRyeSIsIl9zbGljZWRUb0FycmF5MiIsImlzUmdiQ29sb3IiLCJpc1BsYWluT2JqZWN0IiwiZGVlcG1lcmdlIiwiZXhpc3RpbmciLCJjb3B5VGFibGVBbmRVcGRhdGUiLCJfc3RhdGUkc3BsaXRNYXBzJGluZGUiLCJpbmRleFRvUmV0cmlldmUiLCJtYXBMYXllcnMiLCJsb2FkRmlsZXNVcGRhdGVyIiwiZmlsZXMiLCJfYWN0aW9uJG9uRmluaXNoIiwib25GaW5pc2giLCJsb2FkRmlsZXNTdWNjZXNzIiwiaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MiLCJmaWxlQ2FjaGUiLCJmaWxlc1RvTG9hZCIsImxvYWROZXh0RmlsZVVwZGF0ZXIiLCJsb2FkRmlsZVN0ZXBTdWNjZXNzVXBkYXRlciIsImZpbGVOYW1lIiwiX3N0YXRlJGZpbGVMb2FkaW5nIiwic3RhdGVXaXRoUHJvZ3Jlc3MiLCJ1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlciIsInByb2dyZXNzIiwicGVyY2VudCIsIm1lc3NhZ2UiLCJzdGF0ZVdpdGhDYWNoZSIsIkRFTEFZX1RBU0siLCJsb2FkTmV4dEZpbGUiLCJfZmlsZXNUb0xvYWQiLCJfdG9BcnJheTIiLCJmaWxlIiwicmVtYWluaW5nRmlsZXNUb0xvYWQiLCJtYWtlTG9hZEZpbGVUYXNrIiwiTE9BRF9GSUxFX1RBU0siLCJiaW1hcCIsImdlbiIsIm5leHRGaWxlQmF0Y2giLCJwcm9jZXNzRmlsZUNvbnRlbnQiLCJjb250ZW50IiwibG9hZEZpbGVzRXJyIiwicHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlciIsIl9hY3Rpb24kcGF5bG9hZDIiLCJQUk9DRVNTX0ZJTEVfREFUQSIsImxvYWRGaWxlU3RlcFN1Y2Nlc3MiLCJwYXJzZVByb2dyZXNzIiwicHJldlByb2dyZXNzIiwibmV4dEZpbGVCYXRjaFVwZGF0ZXIiLCJfcmVmMTgiLCJfYWNjdW11bGF0ZWQkZGF0YSIsIl9yZWYxOCRwYXlsb2FkIiwiYWNjdW11bGF0ZWQiLCJlbmRzV2l0aCIsImRhdGEiLCJVTldSQVBfVEFTSyIsIl9yZWYxOSIsImxvYWRGaWxlc0VyclVwZGF0ZXIiLCJfcmVmMjAiLCJfc3RhdGUkZmlsZUxvYWRpbmcyIiwiYXBwbHlDUFVGaWx0ZXJVcGRhdGVyIiwiX3JlZjIxIiwiZGF0YUlkcyIsImZpbHRlckRhdGFzZXRDUFUiLCJzZXRNYXBJbmZvVXBkYXRlciIsImVtcHR5IiwiZGVmYXVsdExheWVycyIsImZvdW5kTGF5ZXJzIiwiZmluZERlZmF1bHRMYXllciIsImdldExheWVyT3JkZXJGcm9tTGF5ZXJzIiwiZmluZEZpZWxkc1RvU2hvdyIsIm1lcmdlZCIsIl9yZWYyMyIsImZpeGVkRG9tYWluIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTciLCJfc3RhdGUkZmlsdGVycyIsImFuaW1hdGFibGVMYXllcnMiLCJsYXllckRvbWFpbnMiLCJtZXJnZWREb21haW4iLCJtZXJnZVRpbWVEb21haW5zIiwiZ2V0VGltZVdpZGdldFRpdGxlRm9ybWF0dGVyIiwibWVyZ2VkVGltZVN0ZXBzIiwic29ydCIsIkJBU0VfU1BFRUQiLCJGUFMiLCJzeW5jZWRGaWx0ZXIiLCJuZXdBbmltYXRpb25Eb21haW4iLCJpc0luUmFuZ2UiLCJzZXRFZGl0b3JNb2RlVXBkYXRlciIsIl9yZWYyNCIsInNldEZlYXR1cmVzVXBkYXRlciIsIl9yZWYyNSIsIl9sYXN0RmVhdHVyZSRwcm9wZXJ0aSIsIl9yZWYyNSRmZWF0dXJlcyIsImxhc3RGZWF0dXJlIiwicHJvcGVydGllcyIsImlzQ2xvc2VkIiwiRURJVCIsImZlYXR1cmUiLCJiYm94IiwiZmVhdHVyZVZhbHVlIiwiZmlsdGVySWR4IiwiZmlsIiwic2V0U2VsZWN0ZWRGZWF0dXJlVXBkYXRlciIsIl9yZWYyNiIsInNlbGVjdGlvbkNvbnRleHQiLCJkZWxldGVGZWF0dXJlVXBkYXRlciIsIl9yZWYyNyIsInNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXIiLCJub25lRmlsdGVyRmVhdHVyZSIsIl9maWx0ZXIkbGF5ZXJJZCIsImlzTGF5ZXJJbmNsdWRlZCIsImdlbmVyYXRlUG9seWdvbkZpbHRlciIsInNvcnRUYWJsZUNvbHVtblVwZGF0ZXIiLCJfcmVmMjgiLCJjb2x1bW4iLCJzb3J0TW9kZSIsImN1cnJlbnRNb2RlIiwiU09SVF9PUkRFUiIsIkFTQ0VORElORyIsInNvcnRlZCIsInNvcnREYXRhc2V0QnlDb2x1bW4iLCJwaW5UYWJsZUNvbHVtblVwZGF0ZXIiLCJfcmVmMjkiLCJwaW5UYWJsZUNvbHVtbnMiLCJjb3B5VGFibGVDb2x1bW5VcGRhdGVyIiwiX3JlZjMwIiwiZmllbGRJZHgiLCJ0ZXh0IiwiZGF0YUNvbnRhaW5lciIsInJvdyIsInBhcnNlRmllbGRWYWx1ZSIsInZhbHVlQXQiLCJqb2luIiwiY29weSIsInNldENvbHVtbkRpc3BsYXlGb3JtYXRVcGRhdGVyIiwiX3JlZjMxIiwiZm9ybWF0cyIsImRpc3BsYXlGb3JtYXQiLCJfbGF5ZXIkY29uZmlnIiwiY29sb3JGaWVsZCIsInRvZ2dsZUVkaXRvclZpc2liaWxpdHlVcGRhdGVyIiwic2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ1VwZGF0ZXIiLCJfcmVmMzIiLCJ1cGRhdGVzIiwiY2hlY2tUaW1lQ29uZmlnQXJncyIsImFsbG93ZWQiLCJzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyIiwiX3JlZjMzIiwibGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlVXBkYXRlciIsIl9sYXllciRmaWx0ZXJlZEl0ZW1DbyIsImV2ZW50IiwiZGVja2dsTGF5ZXJJZCIsImNvdW50IiwiZmlsdGVyZWRJdGVtQ291bnQiLCJfbmV3U3RhdGUkYW5pbWF0aW9uQ28iLCJfbmV3U3RhdGUkYW5pbWF0aW9uQ28yIiwiX2FjdGlvbiRlbmFibGUiLCJpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzIiwiZ2V0SW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyIsImhhc0ludGVydmFsQmFzZWRBbmltYXRpb25MYXllciIsIkJvb2xlYW4iLCJuZXdGaWx0ZXJEb21haW4iLCJBTklNQVRJT05fV0lORE9XIiwiaW50ZXJ2YWwiLCJhZGp1c3RUaW1lRmlsdGVySW50ZXJ2YWwiLCJuZXdGaWx0ZXJWYWx1ZSIsInN5bmNUaW1lbGluZU1vZGUiLCJTWU5DX1RJTUVMSU5FX01PREVTIiwiZW5kIiwidmFsaWRhdGVTeW5jQW5pbWF0aW9uTW9kZSIsInRpbWVsaW5lVmFsdWUiLCJnZXRUaW1lbGluZVZhbHVlRnJvbUZpbHRlciIsInNuYXBUb01hcmtzIiwiZnJlZSIsIl9maWx0ZXIkc3luY1RpbWVsaW5lTSIsIm5ld01vZGUiLCJzdGFydCIsImludGVydmFsSW5kZXgiLCJjdXJyZW50SW5kZXgiLCJtZXRhIiwidGFyZ2V0VGltZUludGVydmFsIiwibmV3SW5kZXgiLCJUSU1FX0lOVEVSVkFMU19PUkRFUkVEIiwiaGV4VGlsZUludGVydmFsIiwiTGF5ZXJUb0ZpbHRlclRpbWVJbnRlcnZhbCIsImdldERlZmF1bHRUaW1lRm9ybWF0IiwidXBkYXRlZFBsb3RUeXBlIiwidXBkYXRlVGltZUZpbHRlclBsb3RUeXBlIiwiYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyIsImRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyIsImRhdGFJZFRvUmVwbGFjZSIsIl92YWx1ZSRjb25maWciLCJfdmFsdWUkY29uZmlnMiIsInJlcGxhY2VkIiwiaXNPYmplY3QiLCJmaW5kQ2hpbGREYXRhc2V0SWRzIiwiX3ZhbHVlJG5ld0RhdGFzZXQiLCJjaGlsZERhdGFJZHMiLCJtb3ZlVmFsdWVUb0JlTWVyZ2VkIiwicHJvcFZhbHVlcyIsIl9yZWYzNSIsInNhdmVVbm1lcmdlZCIsInN0YXRlUmVtb3ZlZCIsInByb3BWYWx1ZSIsInAiLCJ0b0JlTWVyZ2VkIiwicmVwbGFjZURhdGFzZXRBbmREZXBzIiwiZGF0YUlkVG9Vc2UiLCJjb21wb3NlXyIsImFwcGx5XyIsInJlcGxhY2VEYXRhc2V0RGVwc0luU3RhdGUiLCJwcmVwYXJlU3RhdGVGb3JEYXRhc2V0UmVwbGFjZSIsIl9uZXh0U3RhdGUkbGF5ZXJUb0JlTSIsInNlcmlhbGl6ZWRTdGF0ZSIsInNlcmlhbGl6ZVZpc1N0YXRlIiwicHJlc2VydmVMYXllck9yZGVyIiwicHJlc2VydmVEYXRhc2V0T3JkZXIiLCJfc2VyaWFsaXplZFN0YXRlJHNwbGkiLCJfcmVmMzYiLCJhY2N1U3RhdGUiLCJfcmVmMzciLCJyZXBsYWNlUGFyZW50RGF0YXNldElkcyIsImdldENoaWxkRGF0YXNldElkcyIsInByZXNlcnZlT3JkZXIiLCJ0b01lcmdlUHJvcHMiLCJzYXZlZFByb3BzIiwicmVwbGFjZWRTdGF0ZSIsIl9yZXBsYWNlZFN0YXRlJG1lcmdlciIsIm1lcmdlck9wdGlvbnMiLCJyZXBsYWNlZEl0ZW0iLCJyZXBsYWNlUHJvcFZhbHVlSW5TdGF0ZSIsIml0ZW0iLCJfcmVmMzgiLCJjaGlsZERhdGFJZCJdLCJzb3VyY2VzIjpbIi4uL3NyYy92aXMtc3RhdGUtdXBkYXRlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IGJib3ggZnJvbSAnQHR1cmYvYmJveCc7XG5pbXBvcnQgY29weSBmcm9tICdjb3B5LXRvLWNsaXBib2FyZCc7XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ2RlZXBtZXJnZSc7XG5pbXBvcnQge2NvbnNvbGUgYXMgQ29uc29sZX0gZnJvbSAnZ2xvYmFsL3dpbmRvdyc7XG5pbXBvcnQgY2xvbmVEZWVwIGZyb20gJ2xvZGFzaC5jbG9uZWRlZXAnO1xuaW1wb3J0IGdldCBmcm9tICdsb2Rhc2guZ2V0JztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2xvZGFzaC5pc2VxdWFsJztcbmltcG9ydCBwaWNrIGZyb20gJ2xvZGFzaC5waWNrJztcbmltcG9ydCB1bmlxIGZyb20gJ2xvZGFzaC51bmlxJztcbmltcG9ydCB4b3IgZnJvbSAnbG9kYXNoLnhvcic7XG5pbXBvcnQgVGFzaywge2Rpc2FibGVTdGFja0NhcHR1cmluZywgd2l0aFRhc2t9IGZyb20gJ3JlYWN0LXBhbG0vdGFza3MnO1xuLy8gVGFza3NcbmltcG9ydCB7XG4gIERFTEFZX1RBU0ssXG4gIEFDVElPTl9UQVNLLFxuICBMT0FEX0ZJTEVfVEFTSyxcbiAgUFJPQ0VTU19GSUxFX0RBVEEsXG4gIFVOV1JBUF9UQVNLXG59IGZyb20gJ0BrZXBsZXIuZ2wvdGFza3MnO1xuLy8gQWN0aW9uc1xuaW1wb3J0IHtcbiAgQWN0aW9uVHlwZXMsXG4gIENyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzUGF5bG9hZCxcbiAgTWFwU3RhdGVBY3Rpb25zLFxuICBSZWNlaXZlTWFwQ29uZmlnUGF5bG9hZCxcbiAgVmlzU3RhdGVBY3Rpb25zLFxuICBhcHBseUxheWVyQ29uZmlnLFxuICBjcmVhdGVOZXdEYXRhc2V0U3VjY2VzcyxcbiAgbGF5ZXJDb25maWdDaGFuZ2UsXG4gIGxheWVyVHlwZUNoYW5nZSxcbiAgbGF5ZXJWaXNDb25maWdDaGFuZ2UsXG4gIGxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSxcbiAgbG9hZEZpbGVTdGVwU3VjY2VzcyxcbiAgbG9hZEZpbGVzRXJyLFxuICBsb2FkRmlsZXNTdWNjZXNzLFxuICBsb2FkTmV4dEZpbGUsXG4gIG5leHRGaWxlQmF0Y2gsXG4gIHNldEZpbHRlcixcbiAgcHJvY2Vzc0ZpbGVDb250ZW50LFxuICBmaXRCb3VuZHMgYXMgZml0TWFwQm91bmRzLFxuICBzZXRMb2FkaW5nSW5kaWNhdG9yLFxuICB0b2dnbGVMYXllckZvck1hcCxcbiAgYXBwbHlGaWx0ZXJDb25maWdcbn0gZnJvbSAnQGtlcGxlci5nbC9hY3Rpb25zJztcblxuLy8gVXRpbHNcbmltcG9ydCB7XG4gIEZJTFRFUl9VUERBVEVSX1BST1BTLFxuICBhZGROZXdMYXllcnNUb1NwbGl0TWFwLFxuICBzbmFwVG9NYXJrcyxcbiAgYXBwbHlGaWx0ZXJGaWVsZE5hbWUsXG4gIGFwcGx5RmlsdGVyc1RvRGF0YXNldHMsXG4gIGFycmF5SW5zZXJ0LFxuICBjb21wdXRlU3BsaXRNYXBMYXllcnMsXG4gIGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4sXG4gIGZlYXR1cmVUb0ZpbHRlclZhbHVlLFxuICBmaWx0ZXJEYXRhc2V0Q1BVLFxuICBnZW5lcmF0ZVBvbHlnb25GaWx0ZXIsXG4gIGdldERlZmF1bHRGaWx0ZXIsXG4gIGdldEZpbHRlcklkSW5GZWF0dXJlLFxuICBnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIsXG4gIGlzSW5SYW5nZSxcbiAgaXNPYmplY3QsXG4gIGlzUGxhaW5PYmplY3QsXG4gIGlzUmdiQ29sb3IsXG4gIHBhcnNlRmllbGRWYWx1ZSxcbiAgcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzLFxuICBzZXQsXG4gIHVwZGF0ZUZpbHRlclBsb3QsXG4gIHJlbW92ZUZpbHRlclBsb3QsXG4gIGlzTGF5ZXJBbmltYXRhYmxlLFxuICBpc1NpZGVGaWx0ZXJcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge2dlbmVyYXRlSGFzaElkLCB0b0FycmF5fSBmcm9tICdAa2VwbGVyLmdsL2NvbW1vbi11dGlscyc7XG4vLyBNZXJnZXJzXG5pbXBvcnQge1xuICBBTklNQVRJT05fV0lORE9XLFxuICBCQVNFX1NQRUVELFxuICBDT01QQVJFX1RZUEVTLFxuICBERUZBVUxUX1RFWFRfTEFCRUwsXG4gIEVESVRPUl9NT0RFUyxcbiAgRklMVEVSX1RZUEVTLFxuICBGSUxURVJfVklFV19UWVBFUyxcbiAgRlBTLFxuICBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVCxcbiAgTUFYX0RFRkFVTFRfVE9PTFRJUFMsXG4gIFBMT1RfVFlQRVMsXG4gIFNPUlRfT1JERVIsXG4gIFNZTkNfVElNRUxJTkVfTU9ERVMsXG4gIENIQU5ORUxfU0NBTEVTLFxuICBTQ0FMRV9UWVBFU1xufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge0xBWUVSX0lEX0xFTkdUSCwgTGF5ZXIsIExheWVyQ2xhc3Nlc30gZnJvbSAnQGtlcGxlci5nbC9sYXllcnMnO1xuaW1wb3J0IHtcbiAgYXBwbHlfLFxuICBjb21wb3NlXyxcbiAgZmlsdGVyT3V0QnlJZCxcbiAgbWVyZ2VfLFxuICBwaWNrXyxcbiAgcmVtb3ZlRWxlbWVudEF0SW5kZXgsXG4gIHN3YXBfXG59IGZyb20gJy4vY29tcG9zZXItaGVscGVycyc7XG5pbXBvcnQge2lzVmFsaWRNZXJnZXIsIG1lcmdlU3RhdGVGcm9tTWVyZ2Vyc30gZnJvbSAnLi9tZXJnZXItaGFuZGxlcic7XG5pbXBvcnQge1xuICBWSVNfU1RBVEVfTUVSR0VSUyxcbiAgY3JlYXRlTGF5ZXJGcm9tQ29uZmlnLFxuICBwYXJzZUxheWVyQ29uZmlnLFxuICBzZXJpYWxpemVGaWx0ZXIsXG4gIHNlcmlhbGl6ZUxheWVyLFxuICBzZXJpYWxpemVWaXNTdGF0ZSxcbiAgdmFsaWRhdGVMYXllcldpdGhEYXRhXG59IGZyb20gJy4vdmlzLXN0YXRlLW1lcmdlcic7XG5cbmltcG9ydCBLZXBsZXJHTFNjaGVtYSwge01lcmdlciwgUG9zdE1lcmdlclBheWxvYWQsIFZpc1N0YXRlfSBmcm9tICdAa2VwbGVyLmdsL3NjaGVtYXMnO1xuXG5pbXBvcnQge1xuICBGaWx0ZXIsXG4gIEludGVyYWN0aW9uQ29uZmlnLFxuICBBbmltYXRpb25Db25maWcsXG4gIEZpbHRlckFuaW1hdGlvbkNvbmZpZyxcbiAgRWRpdG9yLFxuICBGaWVsZCxcbiAgVGltZVJhbmdlRmlsdGVyXG59IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtMb2FkZXJ9IGZyb20gJ0Bsb2FkZXJzLmdsL2xvYWRlci11dGlscyc7XG5cbmltcG9ydCB7XG4gIERhdGFzZXRzLFxuICBhc3NpZ25HcHVDaGFubmVsLFxuICBjb3B5VGFibGVBbmRVcGRhdGUsXG4gIGNyZWF0ZU5ld0RhdGFFbnRyeSxcbiAgcGluVGFibGVDb2x1bW5zLFxuICBzZXRGaWx0ZXJHcHVNb2RlLFxuICBzb3J0RGF0YXNldEJ5Q29sdW1uXG59IGZyb20gJ0BrZXBsZXIuZ2wvdGFibGUnO1xuaW1wb3J0IHtmaW5kRmllbGRzVG9TaG93fSBmcm9tICcuL2ludGVyYWN0aW9uLXV0aWxzJztcbmltcG9ydCB7Y2FsY3VsYXRlTGF5ZXJEYXRhLCBmaW5kRGVmYXVsdExheWVyLCBnZXRMYXllck9yZGVyRnJvbUxheWVyc30gZnJvbSAnLi9sYXllci11dGlscyc7XG5pbXBvcnQge2dldFByb3BWYWx1ZVRvTWVyZ2VyLCBoYXNQcm9wc1RvTWVyZ2V9IGZyb20gJy4vbWVyZ2VyLWhhbmRsZXInO1xuaW1wb3J0IHttZXJnZURhdGFzZXRzQnlPcmRlcn0gZnJvbSAnLi92aXMtc3RhdGUtbWVyZ2VyJztcbmltcG9ydCB7XG4gIGZpeEVmZmVjdE9yZGVyLFxuICBnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyxcbiAgZ2V0SW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyxcbiAgbWVyZ2VUaW1lRG9tYWlucyxcbiAgYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyxcbiAgdXBkYXRlVGltZUZpbHRlclBsb3RUeXBlLFxuICBnZXREZWZhdWx0VGltZUZvcm1hdCxcbiAgTGF5ZXJUb0ZpbHRlclRpbWVJbnRlcnZhbCxcbiAgVElNRV9JTlRFUlZBTFNfT1JERVJFRCxcbiAgbWVyZ2VGaWx0ZXJEb21haW4sXG4gIGluaXRDdXN0b21QYWxldHRlQnlDdXN0b21TY2FsZVxufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7Y3JlYXRlRWZmZWN0fSBmcm9tICdAa2VwbGVyLmdsL2VmZmVjdHMnO1xuaW1wb3J0IHtQYXlsb2FkQWN0aW9ufSBmcm9tICdAcmVkdXhqcy90b29sa2l0JztcblxuaW1wb3J0IHtmaW5kTWFwQm91bmRzfSBmcm9tICcuL2RhdGEtdXRpbHMnO1xuXG4vLyByZWFjdC1wYWxtXG4vLyBkaXNhYmxlIGNhcHR1cmUgZXhjZXB0aW9uIGZvciByZWFjdC1wYWxtIGNhbGwgdG8gd2l0aFRhc2tcbmRpc2FibGVTdGFja0NhcHR1cmluZygpO1xuXG4vKipcbiAqIFVwZGF0ZXJzIGZvciBgdmlzU3RhdGVgIHJlZHVjZXIuIENhbiBiZSB1c2VkIGluIHlvdXIgcm9vdCByZWR1Y2VyIHRvIGRpcmVjdGx5IG1vZGlmeSBrZXBsZXIuZ2wncyBzdGF0ZS5cbiAqIFJlYWQgbW9yZSBhYm91dCBbVXNpbmcgdXBkYXRlcnNdKC4uL2FkdmFuY2VkLXVzYWdlL3VzaW5nLXVwZGF0ZXJzLm1kKVxuICpcbiAqIEBwdWJsaWNcbiAqIEBleGFtcGxlXG4gKlxuICogaW1wb3J0IGtlcGxlckdsUmVkdWNlciwge3Zpc1N0YXRlVXBkYXRlcnN9IGZyb20gJ2tlcGxlci5nbC9yZWR1Y2Vycyc7XG4gKiAvLyBSb290IFJlZHVjZXJcbiAqIGNvbnN0IHJlZHVjZXJzID0gY29tYmluZVJlZHVjZXJzKHtcbiAqICBrZXBsZXJHbDoga2VwbGVyR2xSZWR1Y2VyLFxuICogIGFwcDogYXBwUmVkdWNlclxuICogfSk7XG4gKlxuICogY29uc3QgY29tcG9zZWRSZWR1Y2VyID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAqICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gKiAgICBjYXNlICdDTElDS19CVVRUT04nOlxuICogICAgICByZXR1cm4ge1xuICogICAgICAgIC4uLnN0YXRlLFxuICogICAgICAgIGtlcGxlckdsOiB7XG4gKiAgICAgICAgICAuLi5zdGF0ZS5rZXBsZXJHbCxcbiAqICAgICAgICAgIGZvbzoge1xuICogICAgICAgICAgICAgLi4uc3RhdGUua2VwbGVyR2wuZm9vLFxuICogICAgICAgICAgICAgdmlzU3RhdGU6IHZpc1N0YXRlVXBkYXRlcnMuZW5sYXJnZUZpbHRlclVwZGF0ZXIoXG4gKiAgICAgICAgICAgICAgIHN0YXRlLmtlcGxlckdsLmZvby52aXNTdGF0ZSxcbiAqICAgICAgICAgICAgICAge2lkeDogMH1cbiAqICAgICAgICAgICAgIClcbiAqICAgICAgICAgIH1cbiAqICAgICAgICB9XG4gKiAgICAgIH07XG4gKiAgfVxuICogIHJldHVybiByZWR1Y2VycyhzdGF0ZSwgYWN0aW9uKTtcbiAqIH07XG4gKlxuICogZXhwb3J0IGRlZmF1bHQgY29tcG9zZWRSZWR1Y2VyO1xuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cbi8vIEB0cy1pZ25vcmVcbmNvbnN0IHZpc1N0YXRlVXBkYXRlcnMgPSBudWxsO1xuLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRJbnRlcmFjdGlvbkNvbmZpZzogSW50ZXJhY3Rpb25Db25maWcgPSB7XG4gIHRvb2x0aXA6IHtcbiAgICBpZDogJ3Rvb2x0aXAnLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLnRvb2x0aXAnLFxuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgY29uZmlnOiB7XG4gICAgICBmaWVsZHNUb1Nob3c6IHt9LFxuICAgICAgY29tcGFyZU1vZGU6IGZhbHNlLFxuICAgICAgY29tcGFyZVR5cGU6IENPTVBBUkVfVFlQRVMuQUJTT0xVVEVcbiAgICB9XG4gIH0sXG4gIGdlb2NvZGVyOiB7XG4gICAgaWQ6ICdnZW9jb2RlcicsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMuZ2VvY29kZXInLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIHBvc2l0aW9uOiBudWxsXG4gIH0sXG4gIGJydXNoOiB7XG4gICAgaWQ6ICdicnVzaCcsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMuYnJ1c2gnLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIGNvbmZpZzoge1xuICAgICAgLy8gc2l6ZSBpcyBpbiBrbVxuICAgICAgc2l6ZTogMC41XG4gICAgfVxuICB9LFxuICBjb29yZGluYXRlOiB7XG4gICAgaWQ6ICdjb29yZGluYXRlJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5jb29yZGluYXRlJyxcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBwb3NpdGlvbjogbnVsbFxuICB9XG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9BTklNQVRJT05fQ09ORklHOiBBbmltYXRpb25Db25maWcgPSB7XG4gIGRvbWFpbjogbnVsbCxcbiAgY3VycmVudFRpbWU6IG51bGwsXG4gIHNwZWVkOiAxLFxuICBpc0FuaW1hdGluZzogZmFsc2UsXG4gIHRpbWVTdGVwczogbnVsbCxcbiAgdGltZUZvcm1hdDogbnVsbCxcbiAgdGltZXpvbmU6IG51bGwsXG4gIGRlZmF1bHRUaW1lRm9ybWF0OiBudWxsLFxuICBoaWRlQ29udHJvbDogZmFsc2UsXG4gIGR1cmF0aW9uOiBudWxsXG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9FRElUT1I6IEVkaXRvciA9IHtcbiAgbW9kZTogRURJVE9SX01PREVTLkRSQVdfUE9MWUdPTixcbiAgZmVhdHVyZXM6IFtdLFxuICBzZWxlY3RlZEZlYXR1cmU6IG51bGwsXG4gIHZpc2libGU6IHRydWVcbn07XG5cbi8qKlxuICogRGVmYXVsdCBpbml0aWFsIGB2aXNTdGF0ZWBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAY29uc3RhbnRcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IElOSVRJQUxfVklTX1NUQVRFOiBWaXNTdGF0ZSA9IHtcbiAgLy8gbWFwIGluZm9cbiAgbWFwSW5mbzoge1xuICAgIHRpdGxlOiAnJyxcbiAgICBkZXNjcmlwdGlvbjogJydcbiAgfSxcbiAgLy8gbGF5ZXJzXG4gIGxheWVyczogW10sXG4gIGxheWVyRGF0YTogW10sXG4gIGxheWVyVG9CZU1lcmdlZDogW10sXG4gIGxheWVyT3JkZXI6IFtdLFxuXG4gIC8vIGZpbHRlcnNcbiAgZmlsdGVyczogW10sXG4gIGZpbHRlclRvQmVNZXJnZWQ6IFtdLFxuXG4gIC8vIGEgY29sbGVjdGlvbiBvZiBtdWx0aXBsZSBkYXRhc2V0XG4gIGRhdGFzZXRzOiB7fSxcbiAgZWRpdGluZ0RhdGFzZXQ6IHVuZGVmaW5lZCxcblxuICAvLyBlZmZlY3RzXG4gIGVmZmVjdHM6IFtdLFxuICBlZmZlY3RPcmRlcjogW10sXG5cbiAgaW50ZXJhY3Rpb25Db25maWc6IGRlZmF1bHRJbnRlcmFjdGlvbkNvbmZpZyxcbiAgaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkOiB7fSxcblxuICBsYXllckJsZW5kaW5nOiAnbm9ybWFsJyxcbiAgb3ZlcmxheUJsZW5kaW5nOiAnbm9ybWFsJyxcbiAgaG92ZXJJbmZvOiB1bmRlZmluZWQsXG4gIGNsaWNrZWQ6IHVuZGVmaW5lZCxcbiAgbW91c2VQb3M6IHt9LFxuICBtYXhEZWZhdWx0VG9vbHRpcHM6IE1BWF9ERUZBVUxUX1RPT0xUSVBTLFxuXG4gIC8vIHRoaXMgaXMgdXNlZCB3aGVuIHVzZXIgc3BsaXQgbWFwc1xuICBzcGxpdE1hcHM6IFtcbiAgICAvLyB0aGlzIHdpbGwgY29udGFpbiBhIGxpc3Qgb2Ygb2JqZWN0cyB0b1xuICAgIC8vIGRlc2NyaWJlIHRoZSBzdGF0ZSBvZiBsYXllciBhdmFpbGFiaWxpdHkgYW5kIHZpc2liaWxpdHkgZm9yIGVhY2ggbWFwXG4gICAgLy8gW1xuICAgIC8vICAge1xuICAgIC8vICAgICAgbGF5ZXJzOiB7bGF5ZXJfaWQ6IHRydWUgfCBmYWxzZX1cbiAgICAvLyAgIH1cbiAgICAvLyBdXG4gIF0sXG4gIHNwbGl0TWFwc1RvQmVNZXJnZWQ6IFtdLFxuICBpc01lcmdpbmdEYXRhc2V0czoge30sXG4gIC8vIGRlZmF1bHRzIGxheWVyIGNsYXNzZXNcbiAgbGF5ZXJDbGFzc2VzOiBMYXllckNsYXNzZXMsXG5cbiAgLy8gZGVmYXVsdCBhbmltYXRpb25cbiAgLy8gdGltZSBpbiB1bml4IHRpbWVzdGFtcCAobWlsbGlzZWNvbmRzKSAodGhlIG51bWJlciBvZiBzZWNvbmRzIHNpbmNlIHRoZSBVbml4IEVwb2NoKVxuICBhbmltYXRpb25Db25maWc6IERFRkFVTFRfQU5JTUFUSU9OX0NPTkZJRyxcblxuICBlZGl0b3I6IERFRkFVTFRfRURJVE9SLFxuXG4gIGZpbGVMb2FkaW5nOiBmYWxzZSxcbiAgZmlsZUxvYWRpbmdQcm9ncmVzczoge30sXG5cbiAgbG9hZGVyczogW10sXG4gIGxvYWRPcHRpb25zOiB7fSxcblxuICAvLyB2aXNTdGF0ZU1lcmdlcnNcbiAgbWVyZ2VyczogVklTX1NUQVRFX01FUkdFUlMsXG5cbiAgLy8ga2VwbGVyIHNjaGVtYXNcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYVxufTtcblxudHlwZSBVcGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGFUeXBlID0ge1xuICBsYXllcnM6IExheWVyW107XG4gIGxheWVyRGF0YTogYW55W107XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBzdGF0ZSB3aXRoIHVwZGF0ZWQgbGF5ZXIgYW5kIGxheWVyRGF0YVxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YTxTIGV4dGVuZHMgVXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhVHlwZT4oXG4gIHN0YXRlOiBTLFxuICB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fToge2xheWVyRGF0YT86IGFueTsgbGF5ZXI6IExheWVyOyBpZHg6IG51bWJlcn1cbik6IFMge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3RhdGUubGF5ZXJzLm1hcCgobHlyLCBpKSA9PiAoaSA9PT0gaWR4ID8gbGF5ZXIgOiBseXIpKSxcbiAgICBsYXllckRhdGE6IGxheWVyRGF0YVxuICAgICAgPyBzdGF0ZS5sYXllckRhdGEubWFwKChkLCBpKSA9PiAoaSA9PT0gaWR4ID8gbGF5ZXJEYXRhIDogZCkpXG4gICAgICA6IHN0YXRlLmxheWVyRGF0YVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVPbkxheWVyVmlzaWJpbGl0eUNoYW5nZTxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBsYXllcjogTGF5ZXIpOiBTIHtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGlmIChzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoKSB7XG4gICAgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIHNwbGl0TWFwczogbGF5ZXIuY29uZmlnLmlzVmlzaWJsZVxuICAgICAgICA/IGFkZE5ld0xheWVyc1RvU3BsaXRNYXAoc3RhdGUuc3BsaXRNYXBzLCBsYXllcilcbiAgICAgICAgOiByZW1vdmVMYXllckZyb21TcGxpdE1hcHMoc3RhdGUuc3BsaXRNYXBzLCBsYXllcilcbiAgICB9O1xuICB9XG5cbiAgaWYgKGxheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBDb21wYXJlcyB0d28gb2JqZWN0cyAob3IgYXJyYXlzKSBhbmQgcmV0dXJucyBhIG5ldyBvYmplY3Qgd2l0aCBvbmx5IHRoZVxuICogcHJvcGVydGllcyB0aGF0IGhhdmUgY2hhbmdlZCBiZXR3ZWVuIHRoZSB0d28gb2JqZWN0cy5cbiAqL1xuZnVuY3Rpb24gcGlja0NoYW5nZWRQcm9wczxUPihwcmV2OiBULCBuZXh0OiBUKTogUGFydGlhbDxUPiB7XG4gIGNvbnN0IGNoYW5nZWRQcm9wczogUGFydGlhbDxUPiA9IHt9O1xuICBjb25zdCBwaWNrUHJvcHNPZiA9IG9iaiA9PiB7XG4gICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hhbmdlZFByb3BzLCBrZXkpICYmXG4gICAgICAgICFpc0VxdWFsKHByZXZba2V5XSwgbmV4dFtrZXldKVxuICAgICAgKSB7XG4gICAgICAgIGNoYW5nZWRQcm9wc1trZXldID0gbmV4dFtrZXldO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBwaWNrUHJvcHNPZihwcmV2KTtcbiAgcGlja1Byb3BzT2YobmV4dCk7XG4gIHJldHVybiBjaGFuZ2VkUHJvcHM7XG59XG5cbmNvbnN0IFZJU1VBTF9DSEFOTkVMX1BST1BfVFlQRVMgPSBbJ2ZpZWxkJywgJ3NjYWxlJywgJ2RvbWFpbicsICdhZ2dyZWdhdGlvbiddO1xuXG4vKipcbiAqIEFwcGx5IGxheWVyIGNvbmZpZ1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eSwgbWF4LXN0YXRlbWVudHNcbmV4cG9ydCBmdW5jdGlvbiBhcHBseUxheWVyQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BcHBseUxheWVyQ29uZmlnVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXJJZCwgbmV3TGF5ZXJDb25maWcsIGxheWVySW5kZXh9ID0gYWN0aW9uO1xuICBjb25zdCBuZXdQYXJzZWRMYXllciA9XG4gICAgLy8gd2lsbCBtb3ZlIHZpc3VhbENoYW5uZWxzIHRvIHRoZSBjb25maWcgcHJvcFxuICAgIHBhcnNlTGF5ZXJDb25maWcoc3RhdGUuc2NoZW1hLCBuZXdMYXllckNvbmZpZyk7XG4gIGNvbnN0IG9sZExheWVyID0gc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBvbGRMYXllcklkKTtcbiAgaWYgKCFvbGRMYXllciB8fCAhbmV3UGFyc2VkTGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKGxheWVySW5kZXggIT09IG51bGwgJiYgbGF5ZXJJbmRleCAhPT0gdW5kZWZpbmVkICYmIHN0YXRlLmxheWVyc1tsYXllckluZGV4XSAhPT0gb2xkTGF5ZXIpIHtcbiAgICAvLyBsYXllckluZGV4IGlzIHByb3ZpZGVkLCBidXQgaXQgZG9lc24ndCBtYXRjaCB0aGUgb2xkTGF5ZXJcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW25ld1BhcnNlZExheWVyLmNvbmZpZy5kYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgLy8gTWFrZSBzdXJlIHRoZSBsYXllciBpcyB2YWxpZCBhbmQgY29udmVydCBpdCB0byBMYXllclxuICBjb25zdCBuZXdMYXllciA9IHZhbGlkYXRlTGF5ZXJXaXRoRGF0YShkYXRhc2V0LCBuZXdQYXJzZWRMYXllciwgc3RhdGUubGF5ZXJDbGFzc2VzKTtcbiAgaWYgKCFuZXdMYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBuZXh0U3RhdGUgPSBzdGF0ZTtcblxuICBpZiAobmV3TGF5ZXIudHlwZSAmJiBuZXdMYXllci50eXBlICE9PSBvbGRMYXllci50eXBlKSB7XG4gICAgY29uc3Qgb2xkTGF5ZXJJbmRleCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllcklkKTtcbiAgICBpZiAob2xkTGF5ZXJJbmRleCA+PSAwKSB7XG4gICAgICBuZXh0U3RhdGUgPSBsYXllclR5cGVDaGFuZ2VVcGRhdGVyKG5leHRTdGF0ZSwgbGF5ZXJUeXBlQ2hhbmdlKG9sZExheWVyLCBuZXdMYXllci50eXBlKSk7XG4gICAgICAvLyBsYXllclR5cGVDaGFuZ2VVcGRhdGVyIGNoYW5nZXMgdGhlIGlkIG9mIHRoZSBsYXllciwgc28gd2UgbmVlZCB0byBvYnRhaW4gdGhlIG5ldyBpZFxuICAgICAgLy8gYnV0IGZpcnN0IG1ha2Ugc3VyZSB0aGF0IHRoZSBsYXllciB3YXMgbm90IHJlbW92ZWRcbiAgICAgIGlmIChuZXh0U3RhdGUubGF5ZXJzLmxlbmd0aCA9PT0gc3RhdGUubGF5ZXJzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBuZXdMYXllcklkID0gbmV4dFN0YXRlLmxheWVyc1tvbGRMYXllckluZGV4XS5pZDtcbiAgICAgICAgbmV4dFN0YXRlID0gYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIoXG4gICAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICAgIGFwcGx5TGF5ZXJDb25maWcobmV3TGF5ZXJJZCwgey4uLm5ld0xheWVyQ29uZmlnLCBpZDogbmV3TGF5ZXJJZH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXh0U3RhdGU7XG4gIH1cblxuICAvLyBzZXJpYWxpemVMYXllcigpIG1pZ2h0IHJldHVybiBudWxsIGlmIHRoZSBvbGQgbGF5ZXIgaXMgbm90IHZhbGlkLFxuICAvLyB3ZSBzaG91bGQgc3RpbGwgYXBwbHkgdGhlIGNoYW5nZXMgaW4gdGhhdCBjYXNlXG4gIGNvbnN0IHNlcmlhbGl6ZWRPbGRMYXllciA9IHNlcmlhbGl6ZUxheWVyKG9sZExheWVyLCBzdGF0ZS5zY2hlbWEpID8/IHtjb25maWc6IHt9fTtcbiAgY29uc3Qgc2VyaWFsaXplZE5ld0xheWVyID0gc2VyaWFsaXplTGF5ZXIobmV3TGF5ZXIsIHN0YXRlLnNjaGVtYSk7XG4gIGlmICghc2VyaWFsaXplZE5ld0xheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmICghaXNFcXVhbChzZXJpYWxpemVkT2xkTGF5ZXIsIHNlcmlhbGl6ZWROZXdMYXllcikpIHtcbiAgICBjb25zdCBjaGFuZ2VkID0gcGlja0NoYW5nZWRQcm9wcyhzZXJpYWxpemVkT2xkTGF5ZXIuY29uZmlnLCBzZXJpYWxpemVkTmV3TGF5ZXIuY29uZmlnKTtcblxuICAgIGlmICgndmlzQ29uZmlnJyBpbiBjaGFuZ2VkKSB7XG4gICAgICBpZiAoY2hhbmdlZC52aXNDb25maWcpIHtcbiAgICAgICAgbmV4dFN0YXRlID0gbGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyKFxuICAgICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgICBsYXllclZpc0NvbmZpZ0NoYW5nZShvbGRMYXllciwgY2hhbmdlZC52aXNDb25maWcpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBkZWxldGUgY2hhbmdlZC52aXNDb25maWc7XG4gICAgfVxuXG4gICAgT2JqZWN0LmtleXMob2xkTGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goY2hhbm5lbE5hbWUgPT4ge1xuICAgICAgY29uc3QgY2hhbm5lbCA9IG9sZExheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxOYW1lXTtcbiAgICAgIGNvbnN0IGNoYW5uZWxQcm9wTmFtZXMgPSBWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTLm1hcChwcm9wID0+IGNoYW5uZWxbcHJvcF0pO1xuICAgICAgaWYgKGNoYW5uZWxQcm9wTmFtZXMuc29tZShwcm9wID0+IHByb3AgaW4gY2hhbmdlZCkpIHtcbiAgICAgICAgbmV4dFN0YXRlID0gbGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlcihcbiAgICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgICAgbGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlKFxuICAgICAgICAgICAgb2xkTGF5ZXIsXG4gICAgICAgICAgICBwaWNrKG5ld0xheWVyLmNvbmZpZywgY2hhbm5lbFByb3BOYW1lcyksXG4gICAgICAgICAgICBjaGFubmVsTmFtZVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIGNoYW5uZWxQcm9wTmFtZXMpIHtcbiAgICAgICAgICBkZWxldGUgY2hhbmdlZFtwcm9wXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKE9iamVjdC5rZXlzKGNoYW5nZWQpLmxlbmd0aCA+IDApIHtcbiAgICAgIG5leHRTdGF0ZSA9IGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICBsYXllckNvbmZpZ0NoYW5nZShvbGRMYXllciwgcGljayhuZXdMYXllci5jb25maWcsIE9iamVjdC5rZXlzKGNoYW5nZWQpKSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlbGF5ZXJWaXNpYmlsdHkoc3RhdGU6IFZpc1N0YXRlLCBuZXdMYXllcjogTGF5ZXIsIGlzVmlzaWJsZT86IGJvb2xlYW4pOiBWaXNTdGF0ZSB7XG4gIGxldCBuZXdTdGF0ZSA9IHVwZGF0ZVN0YXRlT25MYXllclZpc2liaWxpdHlDaGFuZ2Uoc3RhdGUsIG5ld0xheWVyKTtcbiAgY29uc3QgZmlsdGVySW5kZXggPSBmaWx0ZXJTeW5jZWRXaXRoVGltZWxpbmUoc3RhdGUpO1xuICBpZiAoaXNMYXllckFuaW1hdGFibGUobmV3TGF5ZXIpICYmIGZpbHRlckluZGV4ICE9PSAtMSkge1xuICAgIC8vIGlmIGxheWVyIGlzIGdvaW5nIHRvIGJlIHZpc2libGUgd2Ugc3luYyB3aXRoIGZpbHRlciBvdGhlcndpc2Ugd2UgbmVlZCB0byBjaGVjayB3aGV0aGVyIG90aGVyIGFuaW1hdGFibGUgbGF5ZXJzIGV4aXN0cyBhbmQgYXJlIHZpc2libGVcbiAgICBuZXdTdGF0ZSA9IHN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICBpZHg6IGZpbHRlckluZGV4LFxuICAgICAgZW5hYmxlOiBpc1Zpc2libGUgPyBpc1Zpc2libGUgOiBnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyhzdGF0ZS5sYXllcnMpLmxlbmd0aCA+IDBcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGJhc2UgY29uZmlnOiBkYXRhSWQsIGxhYmVsLCBjb2x1bW4sIGlzVmlzaWJsZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZXhwb3J0IGZ1bmN0aW9uIGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyfSA9IGFjdGlvbjtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgY29uc3QgcHJvcHMgPSBPYmplY3Qua2V5cyhhY3Rpb24ubmV3Q29uZmlnKTtcbiAgaWYgKFxuICAgIHR5cGVvZiBhY3Rpb24ubmV3Q29uZmlnLmRhdGFJZCA9PT0gJ3N0cmluZycgJiZcbiAgICBhY3Rpb24ubmV3Q29uZmlnLmRhdGFJZCAhPT0gb2xkTGF5ZXIuY29uZmlnLmRhdGFJZFxuICApIHtcbiAgICBjb25zdCB7ZGF0YUlkLCAuLi5yZXN0Q29uZmlnfSA9IGFjdGlvbi5uZXdDb25maWc7XG4gICAgY29uc3Qgc3RhdGVXaXRoRGF0YUlkID0gbGF5ZXJEYXRhSWRDaGFuZ2VVcGRhdGVyKHN0YXRlLCB7XG4gICAgICBvbGRMYXllcixcbiAgICAgIG5ld0NvbmZpZzoge2RhdGFJZH1cbiAgICB9KTtcbiAgICBjb25zdCBuZXh0TGF5ZXIgPSBzdGF0ZVdpdGhEYXRhSWQubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gICAgcmV0dXJuIG5leHRMYXllciAmJiBPYmplY3Qua2V5cyhyZXN0Q29uZmlnKS5sZW5ndGhcbiAgICAgID8gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKHN0YXRlV2l0aERhdGFJZCwge29sZExheWVyOiBuZXh0TGF5ZXIsIG5ld0NvbmZpZzogcmVzdENvbmZpZ30pXG4gICAgICA6IHN0YXRlV2l0aERhdGFJZDtcbiAgfVxuXG4gIGxldCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKGFjdGlvbi5uZXdDb25maWcpO1xuXG4gIGxldCBsYXllckRhdGE7XG5cbiAgaWYgKG5ld0xheWVyLnNob3VsZENhbGN1bGF0ZUxheWVyRGF0YShwcm9wcykpIHtcbiAgICBjb25zdCBvbGRMYXllckRhdGEgPSBzdGF0ZS5sYXllckRhdGFbaWR4XTtcblxuICAgIGNvbnN0IHVwZGF0ZUxheWVyRGF0YVJlc3VsdCA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIG9sZExheWVyRGF0YSk7XG4gICAgbmV3TGF5ZXIgPSB1cGRhdGVMYXllckRhdGFSZXN1bHQubGF5ZXI7XG4gICAgbGF5ZXJEYXRhID0gdXBkYXRlTGF5ZXJEYXRhUmVzdWx0LmxheWVyRGF0YTtcbiAgfVxuXG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICBpZiAoJ2lzVmlzaWJsZScgaW4gYWN0aW9uLm5ld0NvbmZpZykge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlbGF5ZXJWaXNpYmlsdHkobmV3U3RhdGUsIG5ld0xheWVyLCBhY3Rpb24ubmV3Q29uZmlnLmlzVmlzaWJsZSk7XG4gIH1cblxuICBpZiAoJ2NvbHVtbnMnIGluIGFjdGlvbi5uZXdDb25maWcgJiYgbmV3TGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkKSB7XG4gICAgLy8gVE9ETzogU2hhbiwgbWFrZSB0aGUgYW5pbWF0aW9uIGNvbmZpZyBmdW5jdGlvbiBtb3JlIHJvYnVzdFxuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV3U3RhdGUsIHtcbiAgICBsYXllcjogbmV3TGF5ZXIsXG4gICAgbGF5ZXJEYXRhLFxuICAgIGlkeFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxheWVyQW5pbWF0aW9uQ2hhbmdlVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBhY3Rpb24pOiBTIHtcbiAgY29uc3Qge29sZExheWVyLCBwcm9wLCB2YWx1ZX0gPSBhY3Rpb247XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG5cbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgYW5pbWF0aW9uOiB7XG4gICAgICAuLi5vbGRMYXllci5jb25maWcuYW5pbWF0aW9uLFxuICAgICAgW3Byb3BdOiB2YWx1ZVxuICAgIH1cbiAgfSk7XG5cbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgc3RhdGUubGF5ZXJEYXRhW2lkeF0pO1xuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEoc3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXJJZCwgaXNWaXNpYmxlLCBzcGxpdE1hcElkXG4gKiBoYW5kbGVzIHR3byBjYXNlczpcbiAqIDEpIHRvZ2dsZSB0aGUgdmlzaWJpbGl0eSBvZiBsb2NhbCBTcGxpdE1hcCBsYXllciAodmlzU3RhdGUuc3BsaXRNYXAubGF5ZXJzKVxuICogMikgdG9nZ2xlIHRoZSB2aXNpYmlsaXR5IG9mIGdsb2JhbCBsYXllciAodmlzU3RhdGUubGF5ZXJzKVxuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclRvZ2dsZVZpc2liaWxpdHlVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVG9nZ2xlVmlzaWJpbGl0eVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2xheWVySWQsIGlzVmlzaWJsZSwgc3BsaXRNYXBJZH0gPSBhY3Rpb247XG4gIGNvbnN0IGxheWVyID0gc3RhdGUubGF5ZXJzLmZpbmQoZCA9PiBkLmlkID09PSBsYXllcklkKTtcblxuICBpZiAoIWxheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG5cbiAgaWYgKHNwbGl0TWFwSWQpIHtcbiAgICAvLyBbY2FzZSAxXTogdG9nZ2xlIGxvY2FsIGxheWVyIHZpc2liaWxpdHkgZm9yIGVhY2ggU3BsaXRNYXBcbiAgICBjb25zdCBtYXBJbmRleCA9IG5ld1N0YXRlLnNwbGl0TWFwcy5maW5kSW5kZXgoc20gPT4gc20uaWQgPT09IHNwbGl0TWFwSWQpO1xuICAgIGlmIChpc1Zpc2libGUpIHtcbiAgICAgIC8vIDEpIGlmIHRoZSBsYXllciBpcyBpbnZpc2libGUgZ2xvYmFsbHlcbiAgICAgIC8vIC0+IHNldCBnbG9iYWwgdmlzaWJpbGl0eSB0byB0cnVlXG4gICAgICBuZXdTdGF0ZSA9IGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihuZXdTdGF0ZSwgbGF5ZXJDb25maWdDaGFuZ2UobGF5ZXIsIHtpc1Zpc2libGU6IHRydWV9KSk7XG5cbiAgICAgIC8vIC0+IHNldCBsb2NhbCB2aXNpYmlsaXR5IHRvIHRydWUgYW5kIHRoZSBsb2NhbCB2aXNpYmlsaXRpZXMgb2YgYWxsIG90aGVyIFNwbGl0TWFwcyB0byBmYWxzZVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgIHNwbGl0TWFwczogbmV3U3RhdGUuc3BsaXRNYXBzLm1hcChzbSA9PlxuICAgICAgICAgIHNtLmlkICE9PSBzcGxpdE1hcElkXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAuLi5zbSxcbiAgICAgICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgICAgIC4uLnNtLmxheWVycyxcbiAgICAgICAgICAgICAgICAgIFtsYXllcklkXTogZmFsc2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgIC4uLnNtLFxuICAgICAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAgICAgLi4uc20ubGF5ZXJzLFxuICAgICAgICAgICAgICAgICAgW2xheWVySWRdOiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIH07XG4gICAgfVxuICAgIC8vIDIpIGVsc2Ugd2hlbiB0aGUgbGF5ZXIgaXMgdmlzaWJsZSBnbG9iYWxseVxuICAgIHJldHVybiB0b2dnbGVMYXllckZvck1hcFVwZGF0ZXIobmV3U3RhdGUsIHRvZ2dsZUxheWVyRm9yTWFwKG1hcEluZGV4LCBsYXllcklkKSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gW2Nhc2UgMl06IHRvZ2dsZSBnbG9iYWwgbGF5ZXIgdmlzaWJpbGl0eVxuICAgIGNvbnN0IG5ld0xheWVyID0gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe2lzVmlzaWJsZX0pO1xuICAgIGNvbnN0IGlkeCA9IG5ld1N0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBsYXllcklkKTtcblxuICAgIG5ld1N0YXRlID0gdXBkYXRlbGF5ZXJWaXNpYmlsdHkobmV3U3RhdGUsIG5ld0xheWVyLCBpc1Zpc2libGUpO1xuICAgIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV3U3RhdGUsIHtcbiAgICAgIGxheWVyOiBuZXdMYXllcixcbiAgICAgIGlkeFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBzdGF0ZVxuICogQHJldHVybnMgaW5kZXggb2YgdGhlIGZpbHRlciBzeW5jZWQgdG8gdGltZWxpbmUgb3IgLTFcbiAqL1xuZnVuY3Rpb24gZmlsdGVyU3luY2VkV2l0aFRpbWVsaW5lKHN0YXRlOiBWaXNTdGF0ZSk6IG51bWJlciB7XG4gIHJldHVybiBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IChmIGFzIFRpbWVSYW5nZUZpbHRlcikuc3luY2VkV2l0aExheWVyVGltZWxpbmUpO1xufVxuXG4vKipcbiAqIFVwZGF0ZXMgaXNWYWxpZCBmbGFnIG9mIGEgbGF5ZXIuXG4gKiBVcGRhdGVzIGlzVmlzaWJsZSBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgaXNWYWxpZC5cbiAqIFRyaWdnZXJzIHVwZGF0ZSBvZiBkYXRhIGZvciB0aGUgbGF5ZXIgaW4gb3JkZXIgdG8gZ2V0IGVycm9ycyBhZ2FpbiBkdXJpbmcgbmV4dCB1cGRhdGUgaXRlcmF0aW9uLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJTZXRJc1ZhbGlkVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclNldElzVmFsaWRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgaXNWYWxpZH0gPSBhY3Rpb247XG5cbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgY29uc3QgbGF5ZXJUb1VwZGF0ZSA9IHN0YXRlLmxheWVyc1tpZHhdO1xuICBpZiAobGF5ZXJUb1VwZGF0ZSkge1xuICAgIGxldCBuZXdMYXllcjtcbiAgICBsZXQgbmV3RGF0YSA9IG51bGw7XG5cbiAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgLy8gVHJpZ2dlciBkYXRhIHVwZGF0ZSBpbiBvcmRlciB0byBzaG93IGVycm9ycyBhZ2FpbiBpZiBwcmVzZW50LlxuICAgICAgY29uc3Qge2xheWVyLCBsYXllckRhdGF9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKGxheWVyVG9VcGRhdGUsIHN0YXRlLCB1bmRlZmluZWQpO1xuICAgICAgbmV3TGF5ZXIgPSBsYXllcjtcbiAgICAgIG5ld0RhdGEgPSBsYXllckRhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xheWVyID0gbGF5ZXJUb1VwZGF0ZS51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgIGlzVmlzaWJsZTogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgbmV3TGF5ZXIuaXNWYWxpZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEoc3RhdGUsIHtpZHgsIGxheWVyOiBuZXdMYXllciwgbGF5ZXJEYXRhOiBuZXdEYXRhfSk7XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbmZ1bmN0aW9uIGFkZE9yUmVtb3ZlVGV4dExhYmVscyhuZXdGaWVsZHMsIHRleHRMYWJlbCwgZGVmYXVsdFRleHRMYWJlbCA9IERFRkFVTFRfVEVYVF9MQUJFTCkge1xuICBsZXQgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLnNsaWNlKCk7XG5cbiAgY29uc3QgY3VycmVudEZpZWxkcyA9IHRleHRMYWJlbC5tYXAodGwgPT4gdGwuZmllbGQgJiYgdGwuZmllbGQubmFtZSkuZmlsdGVyKGQgPT4gZCk7XG5cbiAgY29uc3QgYWRkRmllbGRzID0gbmV3RmllbGRzLmZpbHRlcihmID0+ICFjdXJyZW50RmllbGRzLmluY2x1ZGVzKGYubmFtZSkpO1xuICBjb25zdCBkZWxldGVGaWVsZHMgPSBjdXJyZW50RmllbGRzLmZpbHRlcihmID0+ICFuZXdGaWVsZHMuZmluZChmZCA9PiBmZC5uYW1lID09PSBmKSk7XG5cbiAgLy8gZGVsZXRlXG4gIG5ld1RleHRMYWJlbCA9IG5ld1RleHRMYWJlbC5maWx0ZXIodGwgPT4gdGwuZmllbGQgJiYgIWRlbGV0ZUZpZWxkcy5pbmNsdWRlcyh0bC5maWVsZC5uYW1lKSk7XG4gIG5ld1RleHRMYWJlbCA9ICFuZXdUZXh0TGFiZWwubGVuZ3RoID8gW2RlZmF1bHRUZXh0TGFiZWxdIDogbmV3VGV4dExhYmVsO1xuXG4gIC8vIGFkZFxuICBuZXdUZXh0TGFiZWwgPSBbXG4gICAgLi4ubmV3VGV4dExhYmVsLmZpbHRlcih0bCA9PiB0bC5maWVsZCksXG4gICAgLi4uYWRkRmllbGRzLm1hcChhZiA9PiAoe1xuICAgICAgLi4uZGVmYXVsdFRleHRMYWJlbCxcbiAgICAgIGZpZWxkOiBhZlxuICAgIH0pKVxuICBdO1xuXG4gIHJldHVybiBuZXdUZXh0TGFiZWw7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVRleHRMYWJlbFByb3BBbmRWYWx1ZShpZHgsIHByb3AsIHZhbHVlLCB0ZXh0TGFiZWwpIHtcbiAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGV4dExhYmVsW2lkeF0sIHByb3ApKSB7XG4gICAgcmV0dXJuIHRleHRMYWJlbDtcbiAgfVxuXG4gIGxldCBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwuc2xpY2UoKTtcblxuICBpZiAocHJvcCA9PT0gJ2ZpZWxkJyAmJiB2YWx1ZSA9PT0gbnVsbCAmJiB0ZXh0TGFiZWwubGVuZ3RoID4gMSkge1xuICAgIC8vIHJlbW92ZSBsYWJlbCB3aGVuIGZpZWxkIHZhbHVlIGlzIHNldCB0byBudWxsXG4gICAgbmV3VGV4dExhYmVsLnNwbGljZShpZHgsIDEpO1xuICB9IGVsc2UgaWYgKHByb3ApIHtcbiAgICBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwubWFwKCh0bCwgaSkgPT4gKGkgPT09IGlkeCA/IHsuLi50bCwgW3Byb3BdOiB2YWx1ZX0gOiB0bCkpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1RleHRMYWJlbDtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYmFzZSBjb25maWc6IGRhdGFJZCwgbGFiZWwsIGNvbHVtbiwgaXNWaXNpYmxlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJUZXh0TGFiZWxDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgaWR4LCBwcm9wLCB2YWx1ZX0gPSBhY3Rpb247XG4gIGNvbnN0IHt0ZXh0TGFiZWx9ID0gb2xkTGF5ZXIuY29uZmlnO1xuXG4gIC8vIHdoZW4gYWRkaW5nIGEgbmV3IGVtcHR5IHRleHQgbGFiZWwsXG4gIC8vIHJlbHkgb24gdGhlIGxheWVyJ3MgZGVmYXVsdCBjb25maWcsIG9yIHVzZSB0aGUgY29uc3RhbnQgREVGQVVMVF9URVhUX0xBQkVMXG4gIGNvbnN0IGRlZmF1bHRUZXh0TGFiZWwgPVxuICAgIG9sZExheWVyLmdldERlZmF1bHRMYXllckNvbmZpZyh7ZGF0YUlkOiAnJ30pPy50ZXh0TGFiZWw/LlswXSA/PyBERUZBVUxUX1RFWFRfTEFCRUw7XG5cbiAgbGV0IG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5zbGljZSgpO1xuICBpZiAoIXRleHRMYWJlbFtpZHhdICYmIGlkeCA9PT0gdGV4dExhYmVsLmxlbmd0aCkge1xuICAgIC8vIGlmIGlkeCBpcyBzZXQgdG8gbGVuZ3RoLCBhZGQgZW1wdHkgdGV4dCBsYWJlbFxuICAgIG5ld1RleHRMYWJlbCA9IFsuLi50ZXh0TGFiZWwsIGRlZmF1bHRUZXh0TGFiZWxdO1xuICB9XG5cbiAgaWYgKGlkeCA9PT0gJ2FsbCcgJiYgcHJvcCA9PT0gJ2ZpZWxkcycpIHtcbiAgICBuZXdUZXh0TGFiZWwgPSBhZGRPclJlbW92ZVRleHRMYWJlbHModmFsdWUsIHRleHRMYWJlbCwgZGVmYXVsdFRleHRMYWJlbCk7XG4gIH0gZWxzZSB7XG4gICAgbmV3VGV4dExhYmVsID0gdXBkYXRlVGV4dExhYmVsUHJvcEFuZFZhbHVlKGlkeCwgcHJvcCwgdmFsdWUsIG5ld1RleHRMYWJlbCk7XG4gIH1cbiAgLy8gdXBkYXRlIHRleHQgbGFiZWwgcHJvcCBhbmQgdmFsdWVcbiAgcmV0dXJuIGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihzdGF0ZSwge1xuICAgIG9sZExheWVyLFxuICAgIG5ld0NvbmZpZzoge3RleHRMYWJlbDogbmV3VGV4dExhYmVsfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEoZGF0YXNldCwgbGF5ZXJDbGFzc2VzLCBsYXllciwgc2NoZW1hKSB7XG4gIGNvbnN0IGxvYWRlZExheWVyID0gc2VyaWFsaXplTGF5ZXIobGF5ZXIsIHNjaGVtYSk7XG4gIHJldHVybiBsb2FkZWRMYXllclxuICAgID8gdmFsaWRhdGVMYXllcldpdGhEYXRhKGRhdGFzZXQsIGxvYWRlZExheWVyLCBsYXllckNsYXNzZXMsIHtcbiAgICAgICAgYWxsb3dFbXB0eUNvbHVtbjogdHJ1ZVxuICAgICAgfSlcbiAgICA6IG51bGw7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGNvbmZpZyBkYXRhSWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyRGF0YUlkQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IHtcbiAgICBvbGRMYXllcjogTGF5ZXI7XG4gICAgbmV3Q29uZmlnOiB7XG4gICAgICBkYXRhSWQ6IHN0cmluZztcbiAgICB9O1xuICB9XG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgbmV3Q29uZmlnfSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFJZH0gPSBuZXdDb25maWc7XG5cbiAgaWYgKCFvbGRMYXllciB8fCAhc3RhdGUuZGF0YXNldHNbZGF0YUlkXSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuXG4gIGxldCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtkYXRhSWR9KTtcblxuICAvLyB0aGlzIG1heSBoYXBwZW4gd2hlbiBhIGxheWVyIGlzIG5ldyAodHlwZTogbnVsbCBhbmQgbm8gY29sdW1ucykgYnV0IGl0J3Mgbm90IHJlYWR5IHRvIGJlIHNhdmVkXG4gIGlmIChuZXdMYXllci5pc1ZhbGlkVG9TYXZlKCkpIHtcbiAgICBjb25zdCB2YWxpZGF0ZWQgPSB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YShcbiAgICAgIHN0YXRlLmRhdGFzZXRzW2RhdGFJZF0sXG4gICAgICBzdGF0ZS5sYXllckNsYXNzZXMsXG4gICAgICBuZXdMYXllcixcbiAgICAgIHN0YXRlLnNjaGVtYVxuICAgICk7XG4gICAgLy8gaWYgY2FudCB2YWxpZGF0ZSBpdCB3aXRoIGRhdGEgY3JlYXRlIGEgbmV3IG9uZVxuICAgIGlmICghdmFsaWRhdGVkKSB7XG4gICAgICBjb25zdCBvbGRMYXllclR5cGUgPSBvbGRMYXllci50eXBlO1xuICAgICAgaWYgKG9sZExheWVyVHlwZSkge1xuICAgICAgICBuZXdMYXllciA9IG5ldyBzdGF0ZS5sYXllckNsYXNzZXNbb2xkTGF5ZXJUeXBlXSh7ZGF0YUlkLCBpZDogb2xkTGF5ZXIuaWR9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXIgPSB2YWxpZGF0ZWQ7XG4gICAgfVxuICB9XG5cbiAgbmV3TGF5ZXIgPSBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgaXNWaXNpYmxlOiBvbGRMYXllci5jb25maWcuaXNWaXNpYmxlLFxuICAgIGlzQ29uZmlnQWN0aXZlOiB0cnVlXG4gIH0pO1xuXG4gIG5ld0xheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzKTtcbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgdW5kZWZpbmVkKTtcblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRJbml0aWFsTGF5ZXJDb25maWcobGF5ZXIsIGRhdGFzZXRzLCBsYXllckNsYXNzZXMpOiBMYXllciB7XG4gIGxldCBuZXdMYXllciA9IGxheWVyO1xuICBpZiAoIU9iamVjdC5rZXlzKGRhdGFzZXRzKS5sZW5ndGgpIHtcbiAgICAvLyBubyBkYXRhIGlzIGxvYWRlZFxuICAgIHJldHVybiBsYXllcjtcbiAgfVxuICBpZiAoIWxheWVyLmNvbmZpZy5kYXRhSWQpIHtcbiAgICAvLyBzZXQgbGF5ZXIgZGF0YUlkXG4gICAgbmV3TGF5ZXIgPSBsYXllci51cGRhdGVMYXllckNvbmZpZyh7ZGF0YUlkOiBPYmplY3Qua2V5cyhkYXRhc2V0cylbMF19KTtcbiAgfVxuICBjb25zdCBkYXRhc2V0ID0gZGF0YXNldHNbbmV3TGF5ZXIuY29uZmlnLmRhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBsYXllcjtcbiAgfVxuXG4gIC8vIGZpbmQgZGVmYXV0IGxheWVyIHByb3BzXG4gIGNvbnN0IHJlc3VsdCA9XG4gICAgdHlwZW9mIGxheWVyQ2xhc3Nlc1tuZXdMYXllci50eXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMgPT09ICdmdW5jdGlvbidcbiAgICAgID8gbGF5ZXJDbGFzc2VzW25ld0xheWVyLnR5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyhkYXRhc2V0LCBbXSlcbiAgICAgIDoge3Byb3BzOiBbXX07XG5cbiAgLy8gYW4gYXJyYXkgb2YgcG9zc2libGUgcHJvcHMsIHVzZSAxc3Qgb25lXG4gIGNvbnN0IHByb3BzID0gQXJyYXkuaXNBcnJheShyZXN1bHQpID8gcmVzdWx0IDogcmVzdWx0LnByb3BzIHx8IFtdO1xuXG4gIGlmIChwcm9wcy5sZW5ndGgpIHtcbiAgICBuZXdMYXllciA9IG5ldyBsYXllckNsYXNzZXNbbGF5ZXIudHlwZV0oe1xuICAgICAgLi4ucHJvcHNbMF0sXG4gICAgICBsYWJlbDogbmV3TGF5ZXIuY29uZmlnLmxhYmVsLFxuICAgICAgZGF0YUlkOiBuZXdMYXllci5jb25maWcuZGF0YUlkLFxuICAgICAgaXNDb25maWdBY3RpdmU6IG5ld0xheWVyLmNvbmZpZy5pc0NvbmZpZ0FjdGl2ZVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB0eXBlb2YgbmV3TGF5ZXIuc2V0SW5pdGlhbExheWVyQ29uZmlnID09PSAnZnVuY3Rpb24nXG4gICAgPyBuZXdMYXllci5zZXRJbml0aWFsTGF5ZXJDb25maWcoZGF0YXNldClcbiAgICA6IG5ld0xheWVyO1xufVxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgdHlwZS4gUHJldmlld3MgbGF5ZXIgY29uZmlnIHdpbGwgYmUgY29waWVkIGlmIGFwcGxpY2FibGUuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclR5cGVDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgbmV3VHlwZX0gPSBhY3Rpb247XG4gIGlmICghb2xkTGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qgb2xkSWQgPSBvbGRMYXllci5pZDtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZElkKTtcblxuICBpZiAoIXN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXSkge1xuICAgIENvbnNvbGUuZXJyb3IoYCR7bmV3VHlwZX0gaXMgbm90IGEgdmFsaWQgbGF5ZXIgdHlwZWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsZXQgbmV3TGF5ZXIgPSBuZXcgc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdKHtcbiAgICAvLyBrZWVwIG9sZCBsYXllciBsYWJsZSBhbmQgaXNDb25maWdBY3RpdmVcbiAgICBsYWJlbDogb2xkTGF5ZXIuY29uZmlnLmxhYmVsLFxuICAgIGlzQ29uZmlnQWN0aXZlOiBvbGRMYXllci5jb25maWcuaXNDb25maWdBY3RpdmUsXG4gICAgZGF0YUlkOiBvbGRMYXllci5jb25maWcuZGF0YUlkXG4gIH0pO1xuXG4gIGlmICghb2xkTGF5ZXIudHlwZSkge1xuICAgIC8vIGlmIHNldHRpbmcgbGF5ZXIgdHlwZSBvbiBhbiBlbXB0eSBsYXllclxuICAgIG5ld0xheWVyID0gc2V0SW5pdGlhbExheWVyQ29uZmlnKG5ld0xheWVyLCBzdGF0ZS5kYXRhc2V0cywgc3RhdGUubGF5ZXJDbGFzc2VzKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBnZXQgYSBtaW50IGxheWVyLCB3aXRoIG5ldyBpZCBhbmQgdHlwZVxuICAgIC8vIGJlY2F1c2UgZGVjay5nbCB1c2VzIGlkIHRvIG1hdGNoIGJldHdlZW4gbmV3IGFuZCBvbGQgbGF5ZXIuXG4gICAgLy8gSWYgdHlwZSBoYXMgY2hhbmdlZCBidXQgaWQgaXMgdGhlIHNhbWUsIGl0IHdpbGwgYnJlYWtcbiAgICBuZXdMYXllci5hc3NpZ25Db25maWdUb0xheWVyKG9sZExheWVyLmNvbmZpZywgb2xkTGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MpO1xuICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzKTtcbiAgfVxuXG4gIGNvbnN0IHtjbGlja2VkLCBob3ZlckluZm99ID0gc3RhdGU7XG5cbiAgbGV0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNsaWNrZWQ6IG9sZExheWVyLmlzTGF5ZXJIb3ZlcmVkKGNsaWNrZWQpID8gdW5kZWZpbmVkIDogY2xpY2tlZCxcbiAgICBob3ZlckluZm86IG9sZExheWVyLmlzTGF5ZXJIb3ZlcmVkKGhvdmVySW5mbykgPyB1bmRlZmluZWQgOiBob3ZlckluZm9cbiAgfTtcblxuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIG5ld1N0YXRlKTtcbiAgbmV3U3RhdGUgPSB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV3U3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcblxuICBpZiAobGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkIHx8IG9sZExheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIC8vIHVwZGF0ZSBzcGxpdE1hcCBsYXllciBpZFxuICBpZiAoc3RhdGUuc3BsaXRNYXBzLmxlbmd0aCkge1xuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICBzcGxpdE1hcHM6IG5ld1N0YXRlLnNwbGl0TWFwcy5tYXAoc2V0dGluZ3MgPT4ge1xuICAgICAgICBjb25zdCB7W29sZElkXTogb2xkTGF5ZXJNYXAsIC4uLm90aGVyTGF5ZXJzfSA9IHNldHRpbmdzLmxheWVycztcbiAgICAgICAgcmV0dXJuIG9sZElkIGluIHNldHRpbmdzLmxheWVyc1xuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAuLi5zZXR0aW5ncyxcbiAgICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgICAgLi4ub3RoZXJMYXllcnMsXG4gICAgICAgICAgICAgICAgW2xheWVyLmlkXTogb2xkTGF5ZXJNYXBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogc2V0dGluZ3M7XG4gICAgICB9KVxuICAgIH07XG4gIH1cblxuICAvLyB1cGRhdGUgbGF5ZXJPcmRlciB3aXRoIG5ldyBpZFxuICBuZXdTdGF0ZSA9IHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBsYXllck9yZGVyOiBuZXdTdGF0ZS5sYXllck9yZGVyLm1hcChsYXllcklkID0+XG4gICAgICBsYXllcklkID09PSBvbGRMYXllci5pZCA/IG5ld0xheWVyLmlkIDogbGF5ZXJJZFxuICAgIClcbiAgfTtcblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIHZpc3VhbCBjaGFubmVsXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMge09iamVjdH0gbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclZpc3VhbENoYW5uZWxDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBuZXdDb25maWcsIG5ld1Zpc0NvbmZpZywgY2hhbm5lbH0gPSBhY3Rpb247XG4gIGlmICghb2xkTGF5ZXIuY29uZmlnLmRhdGFJZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tvbGRMYXllci5jb25maWcuZGF0YUlkXTtcblxuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBsZXQgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyhuZXdDb25maWcpO1xuICBpZiAobmV3VmlzQ29uZmlnKSBuZXdMYXllciA9IG5ld0xheWVyLnVwZGF0ZUxheWVyVmlzQ29uZmlnKG5ld1Zpc0NvbmZpZyk7XG5cbiAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsKGRhdGFzZXQsIGNoYW5uZWwpO1xuXG4gIC8vIGNhbGxpbmcgdXBkYXRlIGFuaW1hdGlvbiBkb21haW4gZmlyc3QgdG8gbWVyZ2UgYWxsIGxheWVyIGFuaW1hdGlvbiBkb21haW5cbiAgbGV0IHVwZGF0ZWRTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihzdGF0ZSk7XG5cbiAgY29uc3QgdmlzdWFsQ2hhbm5lbCA9IG9sZExheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdO1xuICBpZiAodmlzdWFsQ2hhbm5lbD8uY2hhbm5lbFNjYWxlVHlwZSA9PT0gQ0hBTk5FTF9TQ0FMRVMuY29sb3IgJiYgbmV3Q29uZmlnW3Zpc3VhbENoYW5uZWwuZmllbGRdKSB7XG4gICAgLy8gaWYgY29sb3IgZmllbGQgY2hhbmdlZCwgc2V0IGN1c3RvbUJyZWFrcyB0byBmYWxzZVxuICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyQ29sb3JVSSh2aXN1YWxDaGFubmVsLnJhbmdlLCB7XG4gICAgICBjb2xvclJhbmdlQ29uZmlnOiB7XG4gICAgICAgIC4uLm5ld0xheWVyLmNvbmZpZy5jb2xvclVJW3Zpc3VhbENoYW5uZWwucmFuZ2VdLmNvbG9yUmFuZ2VDb25maWcsXG4gICAgICAgIGN1c3RvbUJyZWFrczogZmFsc2VcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHVwZGF0ZWRTdGF0ZSA9IHtcbiAgICAgIC4uLnVwZGF0ZWRTdGF0ZSxcbiAgICAgIGxheWVyczogdXBkYXRlZFN0YXRlLmxheWVycy5tYXAobCA9PiAobC5pZCA9PT0gb2xkTGF5ZXIuaWQgPyBuZXdMYXllciA6IGwpKVxuICAgIH07XG4gIH1cblxuICBjb25zdCBvbGRMYXllckRhdGEgPSB1cGRhdGVkU3RhdGUubGF5ZXJEYXRhW2lkeF07XG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgdXBkYXRlZFN0YXRlLCBvbGRMYXllckRhdGEpO1xuXG4gIGlmIChcbiAgICB2aXN1YWxDaGFubmVsPy5jaGFubmVsU2NhbGVUeXBlID09PSBDSEFOTkVMX1NDQUxFUy5jb2xvciAmJlxuICAgIG5ld0NvbmZpZ1t2aXN1YWxDaGFubmVsPy5zY2FsZV0gPT09IFNDQUxFX1RZUEVTLmN1c3RvbU9yZGluYWwgJiZcbiAgICAhbmV3VmlzQ29uZmlnXG4gICkge1xuICAgIC8vIHdoZW4gc3dpdGNoaW5nIHRvIGN1c3RvbU9yZGluYWwgc2NhbGUsIGNyZWF0ZSBhIGN1c3RvbVBhbGV0dGUgaW4gY29sb3JVSSB3aXRoIHVwZGF0ZWQgY29sb3JEb21haW5cbiAgICBjb25zdCBjdXN0b21QYWxldHRlID0gaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlKHtcbiAgICAgIHNjYWxlOiBTQ0FMRV9UWVBFUy5jdXN0b21PcmRpbmFsLFxuICAgICAgZmllbGQ6IGxheWVyLmNvbmZpZ1t2aXN1YWxDaGFubmVsLmZpZWxkXSxcbiAgICAgIG9yZGluYWxEb21haW46IGxheWVyLmNvbmZpZ1tsYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsXS5kb21haW5dLFxuICAgICAgcmFuZ2U6IGxheWVyLmNvbmZpZy52aXNDb25maWdbdmlzdWFsQ2hhbm5lbC5yYW5nZV0sXG4gICAgICBjb2xvckJyZWFrczogbnVsbFxuICAgIH0pO1xuICAgIC8vIHVwZGF0ZSBjb2xvclJhbmdlIHdpdGggbmV3IGN1c3RvbVBhbGV0dGVcbiAgICBsYXllci51cGRhdGVMYXllckNvbG9yVUkodmlzdWFsQ2hhbm5lbC5yYW5nZSwge1xuICAgICAgc2hvd0NvbG9yQ2hhcnQ6IHRydWUsXG4gICAgICBjb2xvclJhbmdlQ29uZmlnOiB7XG4gICAgICAgIC4uLmxheWVyLmNvbmZpZy5jb2xvclVJW3Zpc3VhbENoYW5uZWwucmFuZ2VdLmNvbG9yUmFuZ2VDb25maWcsXG4gICAgICAgIGN1c3RvbUJyZWFrczogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGN1c3RvbVBhbGV0dGVcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHVwZGF0ZWRTdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBgdmlzQ29uZmlnYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyfSA9IGFjdGlvbjtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgY29uc3QgcHJvcHMgPSBPYmplY3Qua2V5cyhhY3Rpb24ubmV3VmlzQ29uZmlnKTtcblxuICBjb25zdCBuZXdWaXNDb25maWcgPSB7XG4gICAgLi4ub2xkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZyxcbiAgICAuLi5hY3Rpb24ubmV3VmlzQ29uZmlnXG4gIH07XG5cbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyh7dmlzQ29uZmlnOiBuZXdWaXNDb25maWd9KTtcblxuICBpZiAobmV3TGF5ZXIuc2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhKHByb3BzKSkge1xuICAgIGNvbnN0IG9sZExheWVyRGF0YSA9IHN0YXRlLmxheWVyRGF0YVtpZHhdO1xuICAgIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIG9sZExheWVyRGF0YSk7XG4gICAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2xheWVyOiBuZXdMYXllciwgaWR4fSk7XG59XG5cbi8qKlxuICogUmVzZXQgYW5pbWF0aW9uIGNvbmZpZyBjdXJyZW50IHRpbWUgdG8gYSBzcGVjaWZpZWQgdmFsdWVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKlxuICovXG5leHBvcnQgY29uc3Qgc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlciA9IDxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAge3ZhbHVlfTogVmlzU3RhdGVBY3Rpb25zLlNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXJBY3Rpb25cbik6IFMgPT4ge1xuICBjb25zdCBjdXJyZW50VGltZSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWVbMF0gOiB2YWx1ZTtcbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgY3VycmVudFRpbWVcbiAgICB9XG4gIH07XG4gIC8vIHVwZGF0ZSBhbmltYXRpb24gY29uZmlnIGZvciBlYWNoIGxheWVyXG4gIHJldHVybiBzdGF0ZS5sYXllcnMucmVkdWNlKChhY2N1LCBsKSA9PiB7XG4gICAgaWYgKGwuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkICYmIGwudHlwZSAhPT0gJ3RyaXAnKSB7XG4gICAgICByZXR1cm4gbGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyKGFjY3UsIHtvbGRMYXllcjogbCwgcHJvcDogJ2N1cnJlbnRUaW1lJywgY3VycmVudFRpbWV9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjY3U7XG4gIH0sIG5leHRTdGF0ZSk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgcHJvcGVydHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihzdGF0ZSwgYWN0aW9uKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIGFuaW1hdGlvbiB3aW5kb3dcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICB7aWQsIGFuaW1hdGlvbldpbmRvd306IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyQWN0aW9uXG4pOiBTIHtcbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gZi5pZCA9PT0gaWQpO1xuXG4gIGlmICghZmlsdGVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICBhbmltYXRpb25XaW5kb3dcbiAgfTtcblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5ld0ZpbHRlcikoc3RhdGUuZmlsdGVycylcbiAgfTtcblxuICBjb25zdCBuZXdTeW5jVGltZWxpbmVNb2RlID0gZ2V0U3luY0FuaW1hdGlvbk1vZGUobmV3RmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlcik7XG5cbiAgcmV0dXJuIHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyKG5ld1N0YXRlLCB7aWQsIG1vZGU6IG5ld1N5bmNUaW1lbGluZU1vZGV9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BcHBseUZpbHRlckNvbmZpZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2ZpbHRlcklkLCBuZXdGaWx0ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gU2VyaWFsaXplIHRoZSBmaWx0ZXJzIHRvIG9ubHkgY29tcGFyZSB0aGUgc2F2ZWQgcHJvcGVydGllc1xuICBjb25zdCBzZXJpYWxpemVkT2xkRmlsdGVyID0gc2VyaWFsaXplRmlsdGVyKG9sZEZpbHRlciwgc3RhdGUuc2NoZW1hKSA/PyB7Y29uZmlnOiB7fX07XG4gIGNvbnN0IHNlcmlhbGl6ZWROZXdGaWx0ZXIgPSBzZXJpYWxpemVGaWx0ZXIobmV3RmlsdGVyLCBzdGF0ZS5zY2hlbWEpO1xuICBpZiAoIXNlcmlhbGl6ZWROZXdGaWx0ZXIgfHwgaXNFcXVhbChzZXJpYWxpemVkT2xkRmlsdGVyLCBzZXJpYWxpemVkTmV3RmlsdGVyKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIElmIHRoZXJlIGFyZSBhbnkgY2hhbmdlcyB0byB0aGUgZmlsdGVyLCBhcHBseSB0aGVtXG4gIGNvbnN0IGNoYW5nZWQgPSBwaWNrQ2hhbmdlZFByb3BzKHNlcmlhbGl6ZWRPbGRGaWx0ZXIsIHNlcmlhbGl6ZWROZXdGaWx0ZXIpO1xuICBkZWxldGUgY2hhbmdlZFsnaWQnXTsgLy8gaWQgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkXG5cbiAgY29uc3QgZmlsdGVySW5kZXggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKGZpbHRlckluZGV4IDwgMCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihcbiAgICBzdGF0ZSxcbiAgICBzZXRGaWx0ZXIoZmlsdGVySW5kZXgsIE9iamVjdC5rZXlzKGNoYW5nZWQpLCBPYmplY3QudmFsdWVzKGNoYW5nZWQpKVxuICApO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgcHJvcGVydHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2lkeCwgdmFsdWVJbmRleCA9IDB9ID0gYWN0aW9uO1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgQ29uc29sZS5lcnJvcihgZmlsdGVycy4ke2lkeH0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChcbiAgICBBcnJheS5pc0FycmF5KGFjdGlvbi5wcm9wKSAmJlxuICAgICghQXJyYXkuaXNBcnJheShhY3Rpb24udmFsdWUpIHx8IGFjdGlvbi5wcm9wLmxlbmd0aCAhPT0gYWN0aW9uLnZhbHVlLmxlbmd0aClcbiAgKSB7XG4gICAgQ29uc29sZS5lcnJvcignRXhwZWN0aW5nIHZhbHVlIHRvIGJlIGFuIGFycmF5IG9mIHRoZSBzYW1lIGxlbmd0aCwgc2luY2UgcHJvcCBpcyBhbiBhcnJheScpO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICAvLyBjb252ZXJ0IHByb3AgYW5kIHZhbHVlIHRvIGFycmF5XG4gIGNvbnN0IHByb3BzID0gdG9BcnJheShhY3Rpb24ucHJvcCk7XG4gIGNvbnN0IHZhbHVlcyA9IEFycmF5LmlzQXJyYXkoYWN0aW9uLnByb3ApID8gdG9BcnJheShhY3Rpb24udmFsdWUpIDogW2FjdGlvbi52YWx1ZV07XG5cbiAgbGV0IG5ld0ZpbHRlciA9IG9sZEZpbHRlcjtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG5cbiAgbGV0IGRhdGFzZXRJZHNUb0ZpbHRlcjogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHByb3AgPSBwcm9wc1tpXTtcbiAgICBjb25zdCB2YWx1ZSA9IHZhbHVlc1tpXTtcbiAgICAvLyBXZSBjdXJyZW50bHkgZG8gbm90IHN1cHBvcnQgcGFzc2luZyBpbiBuYW1lIGFzIGFuIGFycmF5IGludG8gX3VwZGF0ZUZpbHRlclByb3AsIHNvIHdlIGNhbGwgaXQgbXVsdGlwbGUgdGltZXMgd2l0aCBlYWNoIG5hbWVcbiAgICAvLyBTZWUgdGhlIGNvbW1lbnQgaW4gdGhlcmUgYXMgdG8gd2hhdCBzaG91bGQgYmUgYWRkcmVzc2VkXG4gICAgbGV0IHJlcztcbiAgICBpZiAocHJvcCA9PT0gJ25hbWUnICYmIEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG4gICAgICByZXMgPSB2YWx1ZS5yZWR1Y2UoKGFjY3UsIHYpID0+IHtcbiAgICAgICAgcmV0dXJuIF91cGRhdGVGaWx0ZXJQcm9wKGFjY3UsIG5ld0ZpbHRlciwgcHJvcCwgdiwgdmFsdWVJbmRleCk7XG4gICAgICB9LCBuZXdTdGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcyA9IF91cGRhdGVGaWx0ZXJQcm9wKG5ld1N0YXRlLCBuZXdGaWx0ZXIsIHByb3AsIHZhbHVlLCB2YWx1ZUluZGV4KTtcbiAgICB9XG4gICAgbmV3RmlsdGVyID0gcmVzLmZpbHRlcjtcbiAgICBuZXdTdGF0ZSA9IHJlcy5zdGF0ZTtcbiAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSBkYXRhc2V0SWRzVG9GaWx0ZXIuY29uY2F0KHJlcy5kYXRhc2V0SWRzVG9GaWx0ZXIpO1xuICB9XG5cbiAgY29uc3QgZW5sYXJnZWRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiBmLnZpZXcgPT09IEZJTFRFUl9WSUVXX1RZUEVTLmVubGFyZ2VkKTtcblxuICBpZiAoZW5sYXJnZWRGaWx0ZXIgJiYgZW5sYXJnZWRGaWx0ZXIuaWQgIT09IG5ld0ZpbHRlci5pZCkge1xuICAgIC8vIHRoZXJlIHNob3VsZCBiZSBvbmx5IG9uZSBlbmxhcmdlZCBmaWx0ZXJcbiAgICBuZXdGaWx0ZXIudmlldyA9IEZJTFRFUl9WSUVXX1RZUEVTLnNpZGU7XG4gIH1cblxuICAvLyBzYXZlIG5ldyBmaWx0ZXJzIHRvIG5ld1N0YXRlXG4gIG5ld1N0YXRlID0gc2V0KFsnZmlsdGVycycsIGlkeF0sIG5ld0ZpbHRlciwgbmV3U3RhdGUpO1xuXG4gIC8vIGZpbHRlciBkYXRhXG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgIHVuaXEoZGF0YXNldElkc1RvRmlsdGVyKSxcbiAgICBuZXdTdGF0ZS5kYXRhc2V0cyxcbiAgICBuZXdTdGF0ZS5maWx0ZXJzLFxuICAgIG5ld1N0YXRlLmxheWVyc1xuICApO1xuXG4gIG5ld1N0YXRlID0gc2V0KFsnZGF0YXNldHMnXSwgZmlsdGVyZWREYXRhc2V0cywgbmV3U3RhdGUpO1xuXG4gIC8vIG5lZWQgdG8gdXBkYXRlIGZpbHRlclBsb3QgYWZ0ZXIgZmlsdGVyIERhdGFzZXQgZm9yIHBsb3QgdG8gdXBkYXRlIG9uIGZpbHRlcmVkIHJlc3VsdFxuICBjb25zdCBmaWx0ZXJXaXRoUExvdCA9IHVwZGF0ZUZpbHRlclBsb3QobmV3U3RhdGUuZGF0YXNldHMsIG5ld1N0YXRlLmZpbHRlcnNbaWR4XSk7XG5cbiAgbmV3U3RhdGUgPSBzZXQoWydmaWx0ZXJzJywgaWR4XSwgZmlsdGVyV2l0aFBMb3QsIG5ld1N0YXRlKTtcblxuICAvLyBkYXRhSWQgaXMgYW4gYXJyYXlcbiAgLy8gcGFzcyBvbmx5IHRoZSBkYXRhc2V0IHdlIG5lZWQgdG8gdXBkYXRlXG4gIG5ld1N0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5ld1N0YXRlLCBkYXRhc2V0SWRzVG9GaWx0ZXIsIG5ld0ZpbHRlcik7XG5cbiAgLy8gSWYgdGltZSByYW5nZSBmaWx0ZXIgdmFsdWUgd2FzIHVwZGF0ZWQsIGFkanVzdCBhbmltYXRpb24gY29uZmlnXG4gIGlmIChuZXdGaWx0ZXIudHlwZSA9PT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSAmJiBwcm9wcy5pbmNsdWRlcygndmFsdWUnKSkge1xuICAgIG5ld1N0YXRlID0gYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlcihuZXdTdGF0ZSwgYWN0aW9uLmlkeCk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbmZ1bmN0aW9uIF91cGRhdGVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCB2YWx1ZSwgZGF0YXNldHMpIHtcbiAgbGV0IG5ld0ZpbHRlciA9IGZpbHRlcjtcbiAgaWYgKGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF0pIHtcbiAgICAvLyBpZiBkYXRhSWQgYWxyZWFkeSBleGlzdFxuICAgIG5ld0ZpbHRlciA9IF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCBkYXRhc2V0cyk7XG4gIH1cbiAgaWYgKHZhbHVlKSB7XG4gICAgY29uc3QgbmV4dFZhbHVlID0gbmV3RmlsdGVyLmRhdGFJZC5zbGljZSgpO1xuICAgIG5leHRWYWx1ZVt2YWx1ZUluZGV4XSA9IHZhbHVlO1xuICAgIG5ld0ZpbHRlciA9IHNldChbJ2RhdGFJZCddLCBuZXh0VmFsdWUsIG5ld0ZpbHRlcik7XG4gIH1cbiAgcmV0dXJuIG5ld0ZpbHRlcjtcbn1cblxuZnVuY3Rpb24gX3JlbW92ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIGRhdGFzZXRzKSB7XG4gIGNvbnN0IGRhdGFJZCA9IGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF07XG5cbiAgaWYgKGZpbHRlci5kYXRhSWQubGVuZ3RoID09PSAxICYmIHZhbHVlSW5kZXggPT09IDApIHtcbiAgICAvLyBpZiByZW1vdmUgdGhlIG9ubHkgZGF0YUlkLCBjcmVhdGUgYW4gZW1wdHkgZmlsdGVyIGluc3RlYWQ7XG4gICAgcmV0dXJuIGdldERlZmF1bHRGaWx0ZXIoe2lkOiBmaWx0ZXIuaWR9KTtcbiAgfVxuXG4gIGlmIChkYXRhSWQpIHtcbiAgICBmaWx0ZXIgPSByZW1vdmVGaWx0ZXJQbG90KGZpbHRlciwgZGF0YUlkKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgcHJvcCBvZiBbJ2RhdGFJZCcsICduYW1lJywgJ2ZpZWxkSWR4JywgJ2dwdUNoYW5uZWwnXSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGZpbHRlcltwcm9wXSkpIHtcbiAgICAgIGNvbnN0IG5leHRWYWwgPSBmaWx0ZXJbcHJvcF0uc2xpY2UoKTtcbiAgICAgIG5leHRWYWwuc3BsaWNlKHZhbHVlSW5kZXgsIDEpO1xuICAgICAgZmlsdGVyID0gc2V0KFtwcm9wXSwgbmV4dFZhbCwgZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICAvLyBtZXJnZUZpZWxkRG9tYWluIGZvciB0aGUgcmVtYWluaW5nIGZpZWxkc1xuICBjb25zdCBkb21haW5TdGVwcyA9IG1lcmdlRmlsdGVyRG9tYWluKGZpbHRlciwgZGF0YXNldHMpO1xuXG4gIGNvbnN0IG5leHRGaWx0ZXIgPSB7XG4gICAgLi4uZmlsdGVyLFxuICAgIC8vIHZhbHVlOiBuZXh0VmFsdWUsXG4gICAgLi4uKGRvbWFpblN0ZXBzID8ge2RvbWFpbjogZG9tYWluU3RlcHM/LmRvbWFpbiwgc3RlcDogZG9tYWluU3RlcHM/LnN0ZXB9IDoge30pXG4gIH07XG5cbiAgY29uc3QgbmV4dFZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihuZXh0RmlsdGVyLnZhbHVlLCBuZXh0RmlsdGVyKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5uZXh0RmlsdGVyLFxuICAgIHZhbHVlOiBuZXh0VmFsdWVcbiAgfTtcbn1cblxuLyoqICpcbiAqIFVwZGF0ZXMgYSBzaW5nbGUgcHJvcGVydHkgb2YgYSBmaWx0ZXJcbiAqL1xuZnVuY3Rpb24gX3VwZGF0ZUZpbHRlclByb3Aoc3RhdGUsIGZpbHRlciwgcHJvcCwgdmFsdWUsIHZhbHVlSW5kZXgsIGRhdGFzZXRJZHM/KSB7XG4gIGxldCBkYXRhc2V0SWRzVG9GaWx0ZXI6IHN0cmluZ1tdID0gW107XG4gIHN3aXRjaCAocHJvcCkge1xuICAgIC8vIFRPRE86IE5leHQgUFIgZm9yIFVJIGlmIHdlIHVwZGF0ZSBmaWx0ZXJEYXRhSWQsIHdlIG5lZWQgdG8gY29uc2lkZXIgdHdvIGNhc2VzOlxuICAgIC8vIDEuIGRhdGFJZCBpcyBlbXB0eTogY3JlYXRlIGEgZGVmYXVsdCBmaWx0ZXJcbiAgICAvLyAyLiBBZGQgYSBuZXcgZGF0YXNldCBpZFxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMuZGF0YUlkOiB7XG4gICAgICBjb25zdCBvbGREYXRhSWQgPSBbLi4uZmlsdGVyLmRhdGFJZF07XG4gICAgICBmaWx0ZXIgPSBfdXBkYXRlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgdmFsdWUsIHN0YXRlLmRhdGFzZXRzKTtcbiAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IHVuaXEoWy4uLm9sZERhdGFJZCwgLi4uZmlsdGVyLmRhdGFJZF0pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMubmFtZToge1xuICAgICAgLy8gd2UgYXJlIHN1cHBvcnRpbmcgdGhlIGN1cnJlbnQgZnVuY3Rpb25hbGl0eVxuICAgICAgLy8gVE9ETzogTmV4dCBQUiBmb3IgVUkgZmlsdGVyIG5hbWUgd2lsbCBvbmx5IHVwZGF0ZSBmaWx0ZXIgbmFtZSBidXQgaXQgd29uJ3QgaGF2ZSBzaWRlIGVmZmVjdHNcbiAgICAgIC8vIHdlIGFyZSBnb25uYSB1c2UgcGFpciBvZiBkYXRhc2V0cyBhbmQgZmllbGRJZHggdG8gdXBkYXRlIHRoZSBmaWx0ZXJcbiAgICAgIGNvbnN0IGRhdGFzZXRJZCA9IGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF07XG4gICAgICBjb25zdCB7ZmlsdGVyOiB1cGRhdGVkRmlsdGVyLCBkYXRhc2V0OiBuZXdEYXRhc2V0fSA9IGFwcGx5RmlsdGVyRmllbGROYW1lKFxuICAgICAgICBmaWx0ZXIsXG4gICAgICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgICAgICBkYXRhc2V0SWQsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB2YWx1ZUluZGV4LFxuICAgICAgICB7bWVyZ2VEb21haW46IHZhbHVlSW5kZXggPiAwfVxuICAgICAgKTtcbiAgICAgIGlmICh1cGRhdGVkRmlsdGVyKSB7XG4gICAgICAgIGZpbHRlciA9IHVwZGF0ZWRGaWx0ZXI7XG4gICAgICAgIGlmIChmaWx0ZXIuZ3B1KSB7XG4gICAgICAgICAgZmlsdGVyID0gc2V0RmlsdGVyR3B1TW9kZShmaWx0ZXIsIHN0YXRlLmZpbHRlcnMpO1xuICAgICAgICAgIGZpbHRlciA9IGFzc2lnbkdwdUNoYW5uZWwoZmlsdGVyLCBzdGF0ZS5maWx0ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZSA9IHNldChbJ2RhdGFzZXRzJywgZGF0YXNldElkXSwgbmV3RGF0YXNldCwgc3RhdGUpO1xuICAgICAgICAvLyByZW1vdmUgZmlsdGVyIFBsb3QgYXQgZGF0YXNldElkLCBzbyBpdCB3aWxsIGJlIHJlY2FsY3VsYXRlZFxuICAgICAgICBmaWx0ZXIgPSByZW1vdmVGaWx0ZXJQbG90KGZpbHRlciwgZGF0YXNldElkKTtcblxuICAgICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSB1cGRhdGVkRmlsdGVyLmRhdGFJZDtcbiAgICAgIH1cbiAgICAgIC8vIG9ubHkgZmlsdGVyIHRoZSBjdXJyZW50IGRhdGFzZXRcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMubGF5ZXJJZDoge1xuICAgICAgLy8gV2UgbmVlZCB0byB1cGRhdGUgb25seSBkYXRhc2V0SWQvcyBpZiB3ZSBoYXZlIGFkZGVkL3JlbW92ZWQgbGF5ZXJzXG4gICAgICAvLyAtIGNoZWNrIGZvciBsYXllcklkIGNoYW5nZXMgKFhPUiB3b3JrcyBiZWNhdXNlIG9mIHN0cmluZyB2YWx1ZXMpXG4gICAgICAvLyBpZiBubyBkaWZmZXJlbmNlcyBiZXR3ZWVuIGxheWVySWRzLCBkb24ndCBkbyBhbnkgZmlsdGVyaW5nXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBjb25zdCBsYXllcklkRGlmZmVyZW5jZSA9IHhvcih2YWx1ZSwgZmlsdGVyLmxheWVySWQpO1xuXG4gICAgICBjb25zdCBsYXllckRhdGFJZHMgPSB1bmlxPHN0cmluZz4oXG4gICAgICAgIGxheWVySWREaWZmZXJlbmNlXG4gICAgICAgICAgLm1hcChsaWQgPT5cbiAgICAgICAgICAgIGdldChcbiAgICAgICAgICAgICAgc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsaWQpLFxuICAgICAgICAgICAgICBbJ2NvbmZpZycsICdkYXRhSWQnXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgICAuZmlsdGVyKGQgPT4gZCkgYXMgc3RyaW5nW11cbiAgICAgICk7XG5cbiAgICAgIC8vIG9ubHkgZmlsdGVyIGRhdGFzZXRzSWRzXG4gICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSBsYXllckRhdGFJZHM7XG5cbiAgICAgIC8vIFVwZGF0ZSBuZXdGaWx0ZXIgZGF0YUlkc1xuICAgICAgY29uc3QgbmV3RGF0YUlkcyA9IHVuaXE8c3RyaW5nPihcbiAgICAgICAgdmFsdWVcbiAgICAgICAgICA/Lm1hcChsaWQgPT5cbiAgICAgICAgICAgIGdldChcbiAgICAgICAgICAgICAgc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsaWQpLFxuICAgICAgICAgICAgICBbJ2NvbmZpZycsICdkYXRhSWQnXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgICAuZmlsdGVyKGQgPT4gZCkgYXMgc3RyaW5nW11cbiAgICAgICk7XG5cbiAgICAgIGZpbHRlciA9IHtcbiAgICAgICAgLi4uZmlsdGVyLFxuICAgICAgICBsYXllcklkOiB2YWx1ZSxcbiAgICAgICAgZGF0YUlkOiBuZXdEYXRhSWRzXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIGZpbHRlciA9IHNldChbcHJvcF0sIHZhbHVlLCBmaWx0ZXIpO1xuICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gWy4uLmZpbHRlci5kYXRhSWRdO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4ge2ZpbHRlciwgZGF0YXNldElkcywgZGF0YXNldElkc1RvRmlsdGVyLCBzdGF0ZX07XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1zdGF0ZW1lbnRzICovXG5cbi8qKlxuICogU2V0IHRoZSBwcm9wZXJ0eSBvZiBhIGZpbHRlciBwbG90XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RmlsdGVyUGxvdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkeCwgbmV3UHJvcCwgdmFsdWVJbmRleCA9IDB9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyUGxvdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKCFzdGF0ZS5maWx0ZXJzW2lkeF0pIHtcbiAgICBDb25zb2xlLmVycm9yKGBmaWx0ZXJzWyR7aWR4fV0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBuZXdGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG5cbiAgZm9yIChjb25zdCBwcm9wIGluIG5ld1Byb3ApIHtcbiAgICBpZiAocHJvcCA9PT0gJ3Bsb3RUeXBlJykge1xuICAgICAgbmV3RmlsdGVyID0gcGlja18oJ3Bsb3RUeXBlJykobWVyZ2VfKG5ld1Byb3AucGxvdFR5cGUpKShuZXdGaWx0ZXIpO1xuICAgIH0gZWxzZSBpZiAocHJvcCA9PT0gJ3lBeGlzJykge1xuICAgICAgY29uc3QgY2hhcnRUeXBlID0gbmV3UHJvcC55QXhpcyA/IFBMT1RfVFlQRVMubGluZUNoYXJ0IDogUExPVF9UWVBFUy5oaXN0b2dyYW07XG5cbiAgICAgIG5ld0ZpbHRlciA9IHBpY2tfKCdwbG90VHlwZScpKG1lcmdlXyh7dHlwZTogY2hhcnRUeXBlfSkpKG1lcmdlXyhuZXdQcm9wKShuZXdGaWx0ZXIpKTtcbiAgICB9XG4gIH1cblxuICBuZXdGaWx0ZXIgPSB1cGRhdGVGaWx0ZXJQbG90KHN0YXRlLmRhdGFzZXRzLCBuZXdGaWx0ZXIpO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+IChpID09PSBpZHggPyBuZXdGaWx0ZXIgOiBmKSlcbiAgfTtcbn07XG5cbi8qKlxuICogQWRkIGEgbmV3IGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZEZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkRmlsdGVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT5cbiAgIWFjdGlvbi5kYXRhSWRcbiAgICA/IHN0YXRlXG4gICAgOiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBmaWx0ZXJzOiBbLi4uc3RhdGUuZmlsdGVycywgZ2V0RGVmYXVsdEZpbHRlcih7ZGF0YUlkOiBhY3Rpb24uZGF0YUlkLCBpZDogYWN0aW9uLmlkfSldXG4gICAgICB9O1xuXG4vKipcbiAqIENyZWF0ZSBvciB1cGRhdGUgYSBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVPclVwZGF0ZUZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQ3JlYXRlT3JVcGRhdGVGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtpZCwgZGF0YUlkLCBmaWVsZCwgdmFsdWV9ID0gYWN0aW9uO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICBjb25zdCBvcmlnaW5hbEluZGV4ID0gbmV3U3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBpZCk7XG4gIGxldCBmaWx0ZXJJbmRleCA9IG9yaWdpbmFsSW5kZXg7XG4gIGlmICghaWQgJiYgIWRhdGFJZCkge1xuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfVxuICBpZiAob3JpZ2luYWxJbmRleCA8IDAgJiYgZGF0YUlkKSB7XG4gICAgbmV3U3RhdGUgPSBhZGRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7ZGF0YUlkfSk7XG4gICAgaWYgKG5ld1N0YXRlLmZpbHRlcnMubGVuZ3RoICE9PSBzdGF0ZS5maWx0ZXJzLmxlbmd0aCArIDEpIHtcbiAgICAgIC8vIE5vIG5ldyBmaWx0ZXIgd2FzIGFkZGVkXG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICAgIC8vIEhlcmUgd2UgYXJlIGFzc3VtaW5nIHRoYXQgdGhlIGZpbHRlciB3YXMgYWRkZWQgYXQgdGhlIGVuZFxuICAgIGZpbHRlckluZGV4ID0gbmV3U3RhdGUuZmlsdGVycy5sZW5ndGggLSAxO1xuICAgIG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySW5kZXhdID0ge1xuICAgICAgLi4ubmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJbmRleF0sXG4gICAgICAuLi4oaWQgPyB7aWR9IDogbnVsbClcbiAgICB9O1xuICB9XG5cbiAgLy8gTm8gbmVlZCB0byB1cGRhdGUgdGhpcyBpZiBpdCdzIGEgbmV3bHkgY3JlYXRlZCBmaWx0ZXJcbiAgLy8gRmlyc3Qgd2UgbWFrZSBzdXJlIGFsbCB0aGUgZGF0YUlkcyB0aGF0IGZpZWxkcyByZWZlciB0byBhcmUgdXBkYXRlZFxuICBpZiAob3JpZ2luYWxJbmRleCA+PSAwICYmIGRhdGFJZCkge1xuICAgIC8vIElmIHRoZSBkYXRhSWQgaXMgYW4gYXJyYXksIHdlIG5lZWQgdG8gdXBkYXRlIGVhY2ggb25lIGluZGl2aWR1YWxseSBhcyB0aGV5IG5lZWQgYSBjb3JyZWN0IHZhbHVlSW5kZXggcGFzc2VkXG4gICAgbmV3U3RhdGUgPSAoQXJyYXkuaXNBcnJheShkYXRhSWQpID8gZGF0YUlkIDogW2RhdGFJZF0pLnJlZHVjZSgoYWNjdSwgZCwgaW5kZXgpID0+IHtcbiAgICAgIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKGFjY3UsIHtcbiAgICAgICAgaWR4OiBmaWx0ZXJJbmRleCxcbiAgICAgICAgcHJvcDogJ2RhdGFJZCcsXG4gICAgICAgIHZhbHVlOiBkLFxuICAgICAgICB2YWx1ZUluZGV4OiBpbmRleFxuICAgICAgfSk7XG4gICAgfSwgbmV3U3RhdGUpO1xuICB9XG4gIC8vIFRoZW4gd2UgdXBkYXRlIHRoZSBmaWVsZHNcbiAgaWYgKGZpZWxkKSB7XG4gICAgLy8gSWYgdGhlIGZpZWxkIGlzIGFuIGFycmF5LCB3ZSBuZWVkIHRvIHVwZGF0ZSBlYWNoIGZpZWxkIGluZGl2aWR1YWxseSBhcyB0aGV5IG5lZWQgYSBjb3JyZWN0IHZhbHVlSW5kZXggcGFzc2VkXG4gICAgbmV3U3RhdGUgPSAoQXJyYXkuaXNBcnJheShmaWVsZCkgPyBmaWVsZCA6IFtmaWVsZF0pLnJlZHVjZSgoYWNjdSwgZiwgaW5kZXgpID0+IHtcbiAgICAgIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKGFjY3UsIHtcbiAgICAgICAgaWR4OiBmaWx0ZXJJbmRleCxcbiAgICAgICAgcHJvcDogJ25hbWUnLFxuICAgICAgICB2YWx1ZTogZixcbiAgICAgICAgdmFsdWVJbmRleDogaW5kZXhcbiAgICAgIH0pO1xuICAgIH0sIG5ld1N0YXRlKTtcbiAgfVxuICAvLyBUaGVuIHdlIHVwZGF0ZSB0aGUgdmFsdWUgc2VwYXJhdGVseVxuICBpZiAodmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJykge1xuICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge2lkeDogZmlsdGVySW5kZXgsIHByb3A6ICd2YWx1ZScsIHZhbHVlfSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59O1xuXG4vKipcbiAqIFNldCBsYXllciBjb2xvciBwYWxldHRlIHVpIHN0YXRlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3QgbGF5ZXJDb2xvclVJQ2hhbmdlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7b2xkTGF5ZXIsIHByb3AsIG5ld0NvbmZpZ306IFZpc1N0YXRlQWN0aW9ucy5MYXllckNvbG9yVUlDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IG9sZFZpeENvbmZpZyA9IG9sZExheWVyLmNvbmZpZy52aXNDb25maWdbcHJvcF07XG4gIGNvbnN0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb2xvclVJKHByb3AsIG5ld0NvbmZpZyk7XG4gIGNvbnN0IG5ld1Zpc0NvbmZpZyA9IG5ld0xheWVyLmNvbmZpZy52aXNDb25maWdbcHJvcF07XG4gIGlmIChvbGRWaXhDb25maWcgIT09IG5ld1Zpc0NvbmZpZykge1xuICAgIHJldHVybiBsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIoc3RhdGUsIHtcbiAgICAgIG9sZExheWVyLFxuICAgICAgbmV3VmlzQ29uZmlnOiB7XG4gICAgICAgIFtwcm9wXTogbmV3VmlzQ29uZmlnXG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN0YXRlLmxheWVycy5tYXAobCA9PiAobC5pZCA9PT0gb2xkTGF5ZXIuaWQgPyBuZXdMYXllciA6IGwpKVxuICB9O1xufTtcblxuLyoqXG4gKiBTdGFydCBhbmQgZW5kIGZpbHRlciBhbmltYXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVGaWx0ZXJBbmltYXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT4gKGkgPT09IGFjdGlvbi5pZHggPyB7Li4uZiwgaXNBbmltYXRpbmc6ICFmLmlzQW5pbWF0aW5nfSA6IGYpKVxufSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0ZpbHRlckFuaW1hdGlvbkNvbmZpZyhjb25maWc6IEFuaW1hdGlvbkNvbmZpZyB8IEZpbHRlckFuaW1hdGlvbkNvbmZpZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gJ2RhdGFJZCcgaW4gY29uZmlnICYmICdhbmltYXRpb25XaW5kb3cnIGluIGNvbmZpZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEFuaW1hdGlvbkNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0QW5pbWF0aW9uQ29uZmlnVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7Y29uZmlnfSA9IGFjdGlvbjtcbiAgaWYgKGlzRmlsdGVyQW5pbWF0aW9uQ29uZmlnKGNvbmZpZykpIHtcbiAgICAvLyBGaW5kIGZpbHRlciB1c2VkIGZvciBhbmltYXRpb25cbiAgICAvLyBBc3N1bWluZyB0aGVyZSdzIG9ubHkgb25lIGZpbHRlciB1c2VkIGZvciBhbmltYXRpb24sIHNlZSBzZXRGaWx0ZXJWaWV3VXBkYXRlclxuICAgIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChmID0+ICFpc1NpZGVGaWx0ZXIoZikpO1xuICAgIGlmICghZmlsdGVyKSB7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICAgIGNvbnN0IG5ld0ZpbHRlciA9IHsuLi5maWx0ZXIsIC4uLmNvbmZpZ307XG4gICAgcmV0dXJuIGFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlcihzdGF0ZSwgYXBwbHlGaWx0ZXJDb25maWcoZmlsdGVyLmlkLCBuZXdGaWx0ZXIpKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICAuLi5jb25maWdcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICBpc0FuaW1hdGluZzogIXN0YXRlLmFuaW1hdGlvbkNvbmZpZy5pc0FuaW1hdGluZ1xuICB9XG59KTtcblxuLyoqXG4gKiBIaWRlIGFuZCBzaG93IGxheWVyIGFuaW1hdGlvbiBjb250cm9sXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJBbmltYXRpb25Db250cm9sVXBkYXRlciA9IChzdGF0ZTogVmlzU3RhdGUpOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgIGhpZGVDb250cm9sOiAhc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmhpZGVDb250cm9sXG4gIH1cbn0pO1xuXG4vKipcbiAqIENoYW5nZSBmaWx0ZXIgYW5pbWF0aW9uIHNwZWVkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUZpbHRlckFuaW1hdGlvblNwZWVkVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PiAoaSA9PT0gYWN0aW9uLmlkeCA/IHsuLi5mLCBzcGVlZDogYWN0aW9uLnNwZWVkfSA6IGYpKVxufSk7XG5cbi8qKlxuICogVXBkYXRlIGFuaW1hdGlvbiBzcGVlZCB3aXRoIHRoZSB2ZXJ0aWNhbCBzcGVlZCBzbGlkZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKlxuICovXG5leHBvcnQgY29uc3QgdXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge3NwZWVkfTogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUxheWVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICBzcGVlZFxuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogU2hvdyBsYXJnZXIgdGltZSBmaWx0ZXIgYXQgYm90dG9tIGZvciB0aW1lIHBsYXliYWNrIChhcHBseSB0byB0aW1lIGZpbHRlciBvbmx5KVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEZpbHRlclZpZXdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlclZpZXdVcGRhdGVyQWN0aW9uXG4pID0+IHtcbiAgY29uc3Qge3ZpZXcsIGlkeH0gPSBhY3Rpb247XG4gIGNvbnN0IHNob3VsZFJlc2V0T3RoZXJGaWx0ZXJzVmlldyA9IHZpZXcgPT09IEZJTFRFUl9WSUVXX1RZUEVTLmVubGFyZ2VkO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PlxuICAgICAgaSA9PT0gaWR4XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uZixcbiAgICAgICAgICAgIHZpZXdcbiAgICAgICAgICB9XG4gICAgICAgIDogc2hvdWxkUmVzZXRPdGhlckZpbHRlcnNWaWV3XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uZixcbiAgICAgICAgICAgIHZpZXc6IEZJTFRFUl9WSUVXX1RZUEVTLnNpZGVcbiAgICAgICAgICB9XG4gICAgICAgIDogZlxuICAgIClcbiAgfTtcbn07XG5cbi8qKlxuICogVG9nZ2xlcyBmaWx0ZXIgZmVhdHVyZSB2aXNpYmlsaXR5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1thY3Rpb24uaWR4XTtcbiAgY29uc3QgaXNWaXNpYmxlID0gZ2V0KGZpbHRlciwgWyd2YWx1ZScsICdwcm9wZXJ0aWVzJywgJ2lzVmlzaWJsZSddKTtcblxuICBsZXQgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKHN0YXRlLCB7XG4gICAgaWR4OiBhY3Rpb24uaWR4LFxuICAgIHByb3A6ICdlbmFibGVkJyxcbiAgICB2YWx1ZTogIWlzVmlzaWJsZVxuICB9KTtcblxuICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZHg6IGFjdGlvbi5pZHgsXG4gICAgcHJvcDogJ3ZhbHVlJyxcbiAgICB2YWx1ZTogZmVhdHVyZVRvRmlsdGVyVmFsdWUoZmlsdGVyLnZhbHVlLCBmaWx0ZXIuaWQsIHtcbiAgICAgIGlzVmlzaWJsZTogIWlzVmlzaWJsZVxuICAgIH0pXG4gIH0pO1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtpZHh9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YUlkLCBpZH0gPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG5cbiAgY29uc3QgbmV3RmlsdGVycyA9IFtcbiAgICAuLi5zdGF0ZS5maWx0ZXJzLnNsaWNlKDAsIGlkeCksXG4gICAgLi4uc3RhdGUuZmlsdGVycy5zbGljZShpZHggKyAxLCBzdGF0ZS5maWx0ZXJzLmxlbmd0aClcbiAgXTtcblxuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhkYXRhSWQsIHN0YXRlLmRhdGFzZXRzLCBuZXdGaWx0ZXJzLCBzdGF0ZS5sYXllcnMpO1xuICBjb25zdCBuZXdFZGl0b3IgPVxuICAgIGdldEZpbHRlcklkSW5GZWF0dXJlKHN0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmUpID09PSBpZFxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICAgICAgICB9XG4gICAgICA6IHN0YXRlLmVkaXRvcjtcblxuICBsZXQgbmV3U3RhdGUgPSBzZXQoWydmaWx0ZXJzJ10sIG5ld0ZpbHRlcnMsIHN0YXRlKTtcbiAgbmV3U3RhdGUgPSBzZXQoWydkYXRhc2V0cyddLCBmaWx0ZXJlZERhdGFzZXRzLCBuZXdTdGF0ZSk7XG4gIG5ld1N0YXRlID0gc2V0KFsnZWRpdG9yJ10sIG5ld0VkaXRvciwgbmV3U3RhdGUpO1xuXG4gIHJldHVybiB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV3U3RhdGUsIGRhdGFJZCwgdW5kZWZpbmVkKTtcbn07XG5cbi8qKlxuICogQWRkIGEgbmV3IGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkTGF5ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZExheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBsZXQgbmV3TGF5ZXI7XG4gIGxldCBuZXdMYXllckRhdGE7XG4gIGlmIChhY3Rpb24uY29uZmlnKSB7XG4gICAgbmV3TGF5ZXIgPSBjcmVhdGVMYXllckZyb21Db25maWcoc3RhdGUsIGFjdGlvbi5jb25maWcpO1xuICAgIGlmICghbmV3TGF5ZXIpIHtcbiAgICAgIENvbnNvbGUud2FybihcbiAgICAgICAgJ0ZhaWxlZCB0byBjcmVhdGUgbGF5ZXIgZnJvbSBjb25maWcsIGl0IHVzdWFsbHkgbWVhbnMgdGhlIGNvbmZpZyBpcyBub3QgYmUgaW4gY29ycmVjdCBmb3JtYXQnLFxuICAgICAgICBhY3Rpb24uY29uZmlnXG4gICAgICApO1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUpO1xuICAgIG5ld0xheWVyID0gcmVzdWx0LmxheWVyO1xuICAgIG5ld0xheWVyRGF0YSA9IHJlc3VsdC5sYXllckRhdGE7XG4gIH0gZWxzZSB7XG4gICAgLy8gY3JlYXRlIGFuIGVtcHR5IGxheWVyIHdpdGggYSBzcGVjaWZpYyBkYXRhc2V0IG9yIGEgZGVmYXVsdCBvbmVcbiAgICBjb25zdCBkZWZhdWx0RGF0YXNldCA9IGFjdGlvbi5kYXRhc2V0SWQgPz8gT2JqZWN0LmtleXMoc3RhdGUuZGF0YXNldHMpWzBdO1xuICAgIG5ld0xheWVyID0gbmV3IExheWVyKHtcbiAgICAgIGlzVmlzaWJsZTogdHJ1ZSxcbiAgICAgIGlzQ29uZmlnQWN0aXZlOiB0cnVlLFxuICAgICAgZGF0YUlkOiBkZWZhdWx0RGF0YXNldFxuICAgIH0pO1xuICAgIG5ld0xheWVyRGF0YSA9IHt9O1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogWy4uLnN0YXRlLmxheWVycywgbmV3TGF5ZXJdLFxuICAgIGxheWVyRGF0YTogWy4uLnN0YXRlLmxheWVyRGF0YSwgbmV3TGF5ZXJEYXRhXSxcbiAgICAvLyBhZGQgbmV3IGxheWVyIGF0IHRoZSB0b3BcbiAgICBsYXllck9yZGVyOiBbbmV3TGF5ZXIuaWQsIC4uLnN0YXRlLmxheWVyT3JkZXJdLFxuICAgIHNwbGl0TWFwczogYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcChzdGF0ZS5zcGxpdE1hcHMsIG5ld0xheWVyKVxuICB9O1xuXG4gIGlmIChuZXdMYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59O1xuXG4vKipcbiAqIHJlbW92ZSBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUxheWVyVXBkYXRlcjxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUxheWVyVXBkYXRlckFjdGlvblxuKTogVCB7XG4gIGNvbnN0IGlkeCA9IE51bWJlci5pc0Zpbml0ZShpZClcbiAgICA/IC8vIHN1cHBvcnQgb2xkZXIgQVBJLCByZW1vdmUgbGF5ZXIgYnkgaWR4XG4gICAgICBOdW1iZXIoaWQpXG4gICAgOiBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gc3RhdGUubGF5ZXJzLmxlbmd0aCkge1xuICAgIC8vIGludmFsaWQgaW5kZXhcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgcmVtb3ZlIGxheWVyIHdpdGggaW52YWxpZCBpZHxpZHggJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7bGF5ZXJzLCBsYXllckRhdGEsIGxheWVyT3JkZXIsIGNsaWNrZWQsIGhvdmVySW5mb30gPSBzdGF0ZTtcbiAgY29uc3QgbGF5ZXJUb1JlbW92ZSA9IGxheWVyc1tpZHhdO1xuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IGZpbHRlck91dEJ5SWQobGF5ZXJUb1JlbW92ZS5pZCkobGF5ZXJzKSxcbiAgICBsYXllckRhdGE6IHJlbW92ZUVsZW1lbnRBdEluZGV4KGlkeCkobGF5ZXJEYXRhKSxcbiAgICBsYXllck9yZGVyOiBsYXllck9yZGVyLmZpbHRlcihsYXllcklkID0+IGxheWVySWQgIT09IGxheWVyVG9SZW1vdmUuaWQpLFxuICAgIGNsaWNrZWQ6IGxheWVyVG9SZW1vdmUuaXNMYXllckhvdmVyZWQoY2xpY2tlZCkgPyB1bmRlZmluZWQgOiBjbGlja2VkLFxuICAgIGhvdmVySW5mbzogbGF5ZXJUb1JlbW92ZS5pc0xheWVySG92ZXJlZChob3ZlckluZm8pID8gdW5kZWZpbmVkIDogaG92ZXJJbmZvLFxuICAgIHNwbGl0TWFwczogcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzKHN0YXRlLnNwbGl0TWFwcywgbGF5ZXJUb1JlbW92ZSlcbiAgICAvLyBUT0RPOiB1cGRhdGUgZmlsdGVycywgY3JlYXRlIGhlbHBlciB0byByZW1vdmUgbGF5ZXIgZm9ybSBmaWx0ZXIgKHJlbW92ZSBsYXllcmlkIGFuZCBkYXRhaWQpIGlmIG1hcHBlZFxuICB9O1xuXG4gIHJldHVybiB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xufVxuXG4vKipcbiAqIFJlb3JkZXIgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW9yZGVyTGF5ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtvcmRlcn06IFZpc1N0YXRlQWN0aW9ucy5SZW9yZGVyTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbGF5ZXJPcmRlcjogb3JkZXJcbn0pO1xuXG4vKipcbiAqIGR1cGxpY2F0ZSBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGR1cGxpY2F0ZUxheWVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuRHVwbGljYXRlTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IE51bWJlci5pc0Zpbml0ZShpZClcbiAgICA/IC8vIHN1cHBvcnQgb2xkZXIgQVBJLCByZW1vdmUgbGF5ZXIgYnkgaWR4XG4gICAgICBOdW1iZXIoaWQpXG4gICAgOiBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCAhc3RhdGUubGF5ZXJzW2lkeF0pIHtcbiAgICBDb25zb2xlLndhcm4oYGxheWVyICR7aWR4fSBub3QgZm91bmQgaW4gbGF5ZXJPcmRlcmApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtsYXllcnN9ID0gc3RhdGU7XG4gIGNvbnN0IG9yaWdpbmFsID0gbGF5ZXJzW2lkeF07XG5cbiAgY29uc3Qgb3JpZ2luYWxMYXllck9yZGVySWR4ID0gc3RhdGUubGF5ZXJPcmRlci5maW5kSW5kZXgobGlkID0+IGxpZCA9PT0gb3JpZ2luYWwuaWQpO1xuICBsZXQgbmV3TGFiZWwgPSBgQ29weSBvZiAke29yaWdpbmFsLmNvbmZpZy5sYWJlbH1gO1xuICBsZXQgcG9zdGZpeCA9IDA7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcbiAgd2hpbGUgKGxheWVycy5maW5kKGwgPT4gbC5jb25maWcubGFiZWwgPT09IG5ld0xhYmVsKSkge1xuICAgIG5ld0xhYmVsID0gYENvcHkgb2YgJHtvcmlnaW5hbC5jb25maWcubGFiZWx9ICR7Kytwb3N0Zml4fWA7XG4gIH1cblxuICAvLyBjb2xsZWN0IGxheWVyIGNvbmZpZyBmcm9tIG9yaWdpbmFsXG4gIGNvbnN0IGxvYWRlZExheWVyID0gc2VyaWFsaXplTGF5ZXIob3JpZ2luYWwsIHN0YXRlLnNjaGVtYSk7XG5cbiAgLy8gYXNzaWduIG5ldyBpZCBhbmQgbGFiZWwgdG8gY29waWVkIGxheWVyXG4gIGlmICghbG9hZGVkTGF5ZXI/LmNvbmZpZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsb2FkZWRMYXllci5jb25maWcubGFiZWwgPSBuZXdMYWJlbDtcbiAgbG9hZGVkTGF5ZXIuaWQgPSBnZW5lcmF0ZUhhc2hJZChMQVlFUl9JRF9MRU5HVEgpO1xuXG4gIC8vIGFkZCBsYXllciB0byBzdGF0ZVxuICBsZXQgbmV4dFN0YXRlID0gYWRkTGF5ZXJVcGRhdGVyKHN0YXRlLCB7Y29uZmlnOiBsb2FkZWRMYXllcn0pO1xuICAvLyByZXRyaWV2ZSBuZXdseSBjcmVhdGVkIGxheWVyXG4gIGNvbnN0IG5ld0xheWVyID0gbmV4dFN0YXRlLmxheWVyc1tuZXh0U3RhdGUubGF5ZXJzLmxlbmd0aCAtIDFdO1xuICAvLyB1cGRhdGUgbGF5ZXIgb3JkZXIgd2l0aCBuZXdMeWFlci5pZFxuICBjb25zdCBuZXdMYXllck9yZGVyID0gYXJyYXlJbnNlcnQoXG4gICAgbmV4dFN0YXRlLmxheWVyT3JkZXIuc2xpY2UoMSwgbmV4dFN0YXRlLmxheWVyT3JkZXIubGVuZ3RoKSxcbiAgICBvcmlnaW5hbExheWVyT3JkZXJJZHgsXG4gICAgbmV3TGF5ZXIuaWRcbiAgKTtcblxuICBuZXh0U3RhdGUgPSByZW9yZGVyTGF5ZXJVcGRhdGVyKG5leHRTdGF0ZSwge29yZGVyOiBuZXdMYXllck9yZGVyfSk7XG5cbiAgcmV0dXJuIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXh0U3RhdGUpO1xufTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgZWZmZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkRWZmZWN0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRFZmZlY3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmIChcbiAgICBhY3Rpb24uY29uZmlnPy50eXBlID09PSBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC50eXBlICYmXG4gICAgc3RhdGUuZWZmZWN0cy5zb21lKGVmZmVjdCA9PiBlZmZlY3QudHlwZSA9PT0gTElHSFRfQU5EX1NIQURPV19FRkZFQ1QudHlwZSlcbiAgKSB7XG4gICAgQ29uc29sZS53YXJuKGBDYW4ndCBhZGQgbW9yZSB0aGFuIG9uZSAke0xJR0hUX0FORF9TSEFET1dfRUZGRUNULm5hbWV9IGVmZmVjdGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0VmZmVjdCA9IGNyZWF0ZUVmZmVjdChhY3Rpb24uY29uZmlnKTtcblxuICAvLyBjb2xsYXBzZSBjb25maWd1cmF0b3JzIGZvciBvdGhlciBlZmZlY3RzXG4gIHN0YXRlLmVmZmVjdHMuZm9yRWFjaChlZmZlY3QgPT4gZWZmZWN0LnNldFByb3BzKHtpc0NvbmZpZ0FjdGl2ZTogZmFsc2V9KSk7XG5cbiAgY29uc3QgZWZmZWN0cyA9IFsuLi5zdGF0ZS5lZmZlY3RzLCBuZXdFZmZlY3RdO1xuICBjb25zdCBlZmZlY3RPcmRlciA9IGZpeEVmZmVjdE9yZGVyKGVmZmVjdHMsIFtuZXdFZmZlY3QuaWQsIC4uLnN0YXRlLmVmZmVjdE9yZGVyXSk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZmZlY3RzLFxuICAgIGVmZmVjdE9yZGVyXG4gIH07XG59O1xuXG4vKipcbiAqIHJlbW92ZSBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVFZmZlY3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmVmZmVjdHMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gc3RhdGUuZWZmZWN0cy5sZW5ndGgpIHtcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgcmVtb3ZlIGVmZmVjdCB3aXRoIGludmFsaWQgaWQgJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7ZWZmZWN0cywgZWZmZWN0T3JkZXJ9ID0gc3RhdGU7XG4gIGNvbnN0IGVmZmVjdFRvUmVtb3ZlID0gZWZmZWN0c1tpZHhdO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgZml4ZWQgaW4gdHNcbiAgICBlZmZlY3RzOiBmaWx0ZXJPdXRCeUlkKGVmZmVjdFRvUmVtb3ZlLmlkKShlZmZlY3RzKSxcbiAgICBlZmZlY3RPcmRlcjogZWZmZWN0T3JkZXIuZmlsdGVyKGVmZmVjdElkID0+IGVmZmVjdElkICE9PSBlZmZlY3RUb1JlbW92ZS5pZClcbiAgfTtcbn07XG5cbi8qKlxuICogUmVvcmRlciBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW9yZGVyRWZmZWN0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7b3JkZXJ9OiBWaXNTdGF0ZUFjdGlvbnMuUmVvcmRlckVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBlZmZlY3RPcmRlcjogZml4RWZmZWN0T3JkZXIoc3RhdGUuZWZmZWN0cywgWy4uLm9yZGVyXSlcbn0pO1xuXG4vKipcbiAqIFVwZGF0ZSBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZCwgcHJvcHN9OiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBpZHggPSBzdGF0ZS5lZmZlY3RzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDAgfHwgaWR4ID49IHN0YXRlLmVmZmVjdHMubGVuZ3RoKSB7XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHVwZGF0ZSBlZmZlY3Qgd2l0aCBpbnZhbGlkIGlkICR7aWR9YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IGVmZmVjdE9yZGVyID0gc3RhdGUuZWZmZWN0T3JkZXI7XG4gIGlmIChwcm9wcy5pZCAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmlkICE9PSBpZCkge1xuICAgIGNvbnN0IGlkeDIgPSBzdGF0ZS5lZmZlY3RzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IHByb3BzLmlkKTtcbiAgICBpZiAoaWR4MiA+PSAwKSB7XG4gICAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgdXBkYXRlIGVmZmVjdCB3aXRoIGV4aXN0aW5nIGVmZmVjdCBpZCAke2lkfWApO1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIGVmZmVjdE9yZGVyID0gZWZmZWN0T3JkZXIubWFwKGVmZmVjdE9yZGVySWQgPT5cbiAgICAgIGVmZmVjdE9yZGVySWQgPT09IGlkID8gKHByb3BzLmlkIGFzIHN0cmluZykgOiBlZmZlY3RPcmRlcklkXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IG5ld0VmZmVjdHMgPSBbLi4uc3RhdGUuZWZmZWN0c107XG4gIG5ld0VmZmVjdHNbaWR4XS5zZXRQcm9wcyhwcm9wcyk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZmZlY3RzOiBuZXdFZmZlY3RzLFxuICAgIGVmZmVjdE9yZGVyXG4gIH07XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIGRhdGFzZXQgYW5kIGFsbCBsYXllcnMsIGZpbHRlcnMsIHRvb2x0aXAgY29uZmlncyB0aGF0IGJhc2VkIG9uIGl0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRGF0YXNldFVwZGF0ZXI8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZURhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBUIHtcbiAgLy8gZXh0cmFjdCBkYXRhc2V0IGtleVxuICBjb25zdCB7ZGF0YUlkOiBkYXRhc2V0S2V5fSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFzZXRzfSA9IHN0YXRlO1xuXG4gIC8vIGNoZWNrIGlmIGRhdGFzZXQgaXMgcHJlc2VudFxuICBpZiAoIWRhdGFzZXRzW2RhdGFzZXRLZXldKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGxheWVycyxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgZGF0YXNldHM6IHtbZGF0YXNldEtleV06IGRhdGFzZXQsIC4uLm5ld0RhdGFzZXRzfVxuICB9ID0gc3RhdGU7XG5cbiAgY29uc3QgbGF5ZXJzVG9SZW1vdmUgPSBsYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuZGF0YUlkID09PSBkYXRhc2V0S2V5KS5tYXAobCA9PiBsLmlkKTtcblxuICAvLyByZW1vdmUgbGF5ZXJzIGFuZCBkYXRhc2V0c1xuICBsZXQgbmV3U3RhdGUgPSBsYXllcnNUb1JlbW92ZS5yZWR1Y2UoKGFjY3UsIGlkKSA9PiByZW1vdmVMYXllclVwZGF0ZXIoYWNjdSwge2lkfSksIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogbmV3RGF0YXNldHNcbiAgfSk7XG5cbiAgLy8gdXBkYXRlIGZpbHRlcnNcbiAgY29uc3QgZmlsdGVyczogRmlsdGVyW10gPSBbXTtcbiAgZm9yIChjb25zdCBmaWx0ZXIgb2YgbmV3U3RhdGUuZmlsdGVycykge1xuICAgIGNvbnN0IHZhbHVlSW5kZXggPSBmaWx0ZXIuZGF0YUlkLmluZGV4T2YoZGF0YXNldEtleSk7XG4gICAgaWYgKHZhbHVlSW5kZXggPj0gMCAmJiBmaWx0ZXIuZGF0YUlkLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIG9ubHkgcmVtb3ZlIG9uZSBzeW5jZWQgZGF0YXNldCBmcm9tIHRoZSBmaWx0ZXJcbiAgICAgIGZpbHRlcnMucHVzaChfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgZGF0YXNldHMpKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlSW5kZXggPCAwKSB7XG4gICAgICAvLyBsZWF2ZSB0aGUgZmlsdGVyIGFzIGlzXG4gICAgICBmaWx0ZXJzLnB1c2goZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICBuZXdTdGF0ZSA9IHsuLi5uZXdTdGF0ZSwgZmlsdGVyc307XG5cbiAgcmV0dXJuIHJlbW92ZURhdGFzZXRGcm9tSW50ZXJhY3Rpb25Db25maWcobmV3U3RhdGUsIHtkYXRhSWQ6IGRhdGFzZXRLZXl9KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlRGF0YXNldEZyb21JbnRlcmFjdGlvbkNvbmZpZyhzdGF0ZSwge2RhdGFJZH0pIHtcbiAgbGV0IHtpbnRlcmFjdGlvbkNvbmZpZ30gPSBzdGF0ZTtcbiAgY29uc3Qge3Rvb2x0aXB9ID0gaW50ZXJhY3Rpb25Db25maWc7XG4gIGlmICh0b29sdGlwKSB7XG4gICAgY29uc3Qge2NvbmZpZ30gPSB0b29sdGlwO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBjb25zdCB7W2RhdGFJZF06IGZpZWxkcywgLi4uZmllbGRzVG9TaG93fSA9IGNvbmZpZy5maWVsZHNUb1Nob3c7XG4gICAgaW50ZXJhY3Rpb25Db25maWcgPSB7XG4gICAgICAuLi5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgIHRvb2x0aXA6IHsuLi50b29sdGlwLCBjb25maWc6IHsuLi5jb25maWcsIGZpZWxkc1RvU2hvd319XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7Li4uc3RhdGUsIGludGVyYWN0aW9uQ29uZmlnfTtcbn1cbi8qKlxuICogdXBkYXRlIGxheWVyIGJsZW5kaW5nIG1vZGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVMYXllckJsZW5kaW5nVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVMYXllckJsZW5kaW5nVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGxheWVyQmxlbmRpbmc6IGFjdGlvbi5tb2RlXG59KTtcblxuLyoqXG4gKiB1cGRhdGUgb3ZlcmxheSBibGVuZGluZyBtb2RlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlT3ZlcmxheUJsZW5kaW5nVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVPdmVybGF5QmxlbmRpbmdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgb3ZlcmxheUJsZW5kaW5nOiBhY3Rpb24ubW9kZVxufSk7XG5cbi8qKlxuICogRGlzcGxheSBkYXRhc2V0IHRhYmxlIGluIGEgbW9kYWxcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzaG93RGF0YXNldFRhYmxlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TaG93RGF0YXNldFRhYmxlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRpbmdEYXRhc2V0OiBhY3Rpb24uZGF0YUlkXG4gIH07XG59O1xuXG4vKipcbiAqIEFkZCBjdXN0b20gY29sb3IgZm9yIGRhdGFzZXRzIGFuZCBsYXllcnNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVUYWJsZUNvbG9yVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVEYXRhc2V0Q29sb3JVcGRhdGVyXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyKHN0YXRlLCB7ZGF0YUlkOiBhY3Rpb24uZGF0YUlkLCBwcm9wczoge2NvbG9yOiBhY3Rpb24ubmV3Q29sb3J9fSk7XG59O1xuXG4vKipcbiAqIHJlc2V0IHZpc1N0YXRlIHRvIGluaXRpYWwgU3RhdGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZXNldE1hcENvbmZpZ1VwZGF0ZXIgPSAoc3RhdGU6IFZpc1N0YXRlKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uSU5JVElBTF9WSVNfU1RBVEUsXG4gIC4uLnN0YXRlLmluaXRpYWxTdGF0ZSxcbiAgaW5pdGlhbFN0YXRlOiBzdGF0ZS5pbml0aWFsU3RhdGVcbn0pO1xuXG4vKipcbiAqIFByb3BhZ2F0ZSBgdmlzU3RhdGVgIHJlZHVjZXIgd2l0aCBhIG5ldyBjb25maWd1cmF0aW9uLiBDdXJyZW50IGNvbmZpZyB3aWxsIGJlIG92ZXJyaWRlLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlY2VpdmVNYXBDb25maWdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtcbiAgICBwYXlsb2FkOiB7Y29uZmlnID0ge30sIG9wdGlvbnMgPSB7fX1cbiAgfToge1xuICAgIHR5cGU/OiB0eXBlb2YgQWN0aW9uVHlwZXMuUkVDRUlWRV9NQVBfQ09ORklHO1xuICAgIHBheWxvYWQ6IFJlY2VpdmVNYXBDb25maWdQYXlsb2FkO1xuICB9XG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmICghY29uZmlnLnZpc1N0YXRlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge2tlZXBFeGlzdGluZ0NvbmZpZ30gPSBvcHRpb25zO1xuXG4gIC8vIHJlc2V0IGNvbmZpZyBpZiBrZWVwRXhpc3RpbmdDb25maWcgaXMgZmFsc3lcbiAgbGV0IG1lcmdlZFN0YXRlID0gIWtlZXBFeGlzdGluZ0NvbmZpZyA/IHJlc2V0TWFwQ29uZmlnVXBkYXRlcihzdGF0ZSkgOiBzdGF0ZTtcbiAgZm9yIChjb25zdCBtZXJnZXIgb2Ygc3RhdGUubWVyZ2Vycykge1xuICAgIGlmIChpc1ZhbGlkTWVyZ2VyKG1lcmdlcikgJiYgaGFzUHJvcHNUb01lcmdlKGNvbmZpZy52aXNTdGF0ZSwgbWVyZ2VyLnByb3ApKSB7XG4gICAgICBtZXJnZWRTdGF0ZSA9IG1lcmdlci5tZXJnZShcbiAgICAgICAgbWVyZ2VkU3RhdGUsXG4gICAgICAgIGdldFByb3BWYWx1ZVRvTWVyZ2VyKGNvbmZpZy52aXNTdGF0ZSwgbWVyZ2VyLnByb3AsIG1lcmdlci50b01lcmdlUHJvcCksXG4gICAgICAgIC8vIGZyb21Db25maWdcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWVyZ2VkU3RhdGU7XG59O1xuXG4vKipcbiAqIFRyaWdnZXIgbGF5ZXIgaG92ZXIgZXZlbnQgd2l0aCBob3ZlcmVkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxheWVySG92ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLk9uTGF5ZXJIb3ZlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBob3ZlckluZm86IHtcbiAgICAvLyBkZWNrLmdsIGluZm8gaXMgbXV0YWJsZVxuICAgIC4uLmFjdGlvbi5pbmZvLFxuICAgIC4uLihOdW1iZXIuaXNGaW5pdGUoYWN0aW9uLm1hcEluZGV4KSA/IHttYXBJbmRleDogYWN0aW9uLm1hcEluZGV4fSA6IHt9KVxuICB9XG59KTtcblxuLyogZXNsaW50LWVuYWJsZSBtYXgtc3RhdGVtZW50cyAqL1xuXG4vKipcbiAqIFVwZGF0ZSBgaW50ZXJhY3Rpb25Db25maWdgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gaW50ZXJhY3Rpb25Db25maWdDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7Y29uZmlnfSA9IGFjdGlvbjtcblxuICBjb25zdCBpbnRlcmFjdGlvbkNvbmZpZyA9IHtcbiAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAuLi57W2NvbmZpZy5pZF06IGNvbmZpZ31cbiAgfTtcblxuICAvLyBEb24ndCBlbmFibGUgdG9vbHRpcCBhbmQgYnJ1c2ggYXQgdGhlIHNhbWUgdGltZVxuICAvLyBidXQgY29vcmRpbmF0ZXMgY2FuIGJlIHNob3duIGF0IGFsbCB0aW1lXG4gIGNvbnN0IGNvbnRyYWRpY3QgPSBbJ2JydXNoJywgJ3Rvb2x0aXAnXTtcblxuICBpZiAoXG4gICAgY29udHJhZGljdC5pbmNsdWRlcyhjb25maWcuaWQpICYmXG4gICAgY29uZmlnLmVuYWJsZWQgJiZcbiAgICAhc3RhdGUuaW50ZXJhY3Rpb25Db25maWdbY29uZmlnLmlkXS5lbmFibGVkXG4gICkge1xuICAgIC8vIG9ubHkgZW5hYmxlIG9uZSBpbnRlcmFjdGlvbiBhdCBhIHRpbWVcbiAgICBjb250cmFkaWN0LmZvckVhY2goayA9PiB7XG4gICAgICBpZiAoayAhPT0gY29uZmlnLmlkKSB7XG4gICAgICAgIGludGVyYWN0aW9uQ29uZmlnW2tdID0gey4uLmludGVyYWN0aW9uQ29uZmlnW2tdLCBlbmFibGVkOiBmYWxzZX07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZ1xuICB9O1xuXG4gIGlmIChjb25maWcuaWQgPT09ICdnZW9jb2RlcicgJiYgIWNvbmZpZy5lbmFibGVkKSB7XG4gICAgcmV0dXJuIHJlbW92ZURhdGFzZXRVcGRhdGVyKG5ld1N0YXRlLCB7ZGF0YUlkOiAnZ2VvY29kZXJfZGF0YXNldCd9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBUcmlnZ2VyIGxheWVyIGNsaWNrIGV2ZW50IHdpdGggY2xpY2tlZCBvYmplY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsYXllckNsaWNrVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5PbkxheWVyQ2xpY2tVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbW91c2VQb3M6IHN0YXRlLmludGVyYWN0aW9uQ29uZmlnLmNvb3JkaW5hdGUuZW5hYmxlZFxuICAgID8ge1xuICAgICAgICAuLi5zdGF0ZS5tb3VzZVBvcyxcbiAgICAgICAgcGlubmVkOiBzdGF0ZS5tb3VzZVBvcy5waW5uZWQgPyBudWxsIDogY2xvbmVEZWVwKHN0YXRlLm1vdXNlUG9zKVxuICAgICAgfVxuICAgIDogc3RhdGUubW91c2VQb3MsXG4gIGNsaWNrZWQ6IGFjdGlvbi5pbmZvICYmIGFjdGlvbi5pbmZvLnBpY2tlZCA/IGFjdGlvbi5pbmZvIDogbnVsbFxufSk7XG5cbi8qKlxuICogVHJpZ2dlciBtYXAgY2xpY2sgZXZlbnQsIHVuc2VsZWN0IGNsaWNrZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbWFwQ2xpY2tVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuT25NYXBDbGlja1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjbGlja2VkOiBudWxsXG4gIH07XG59O1xuXG4vKipcbiAqIFRyaWdnZXIgbWFwIG1vdmUgZXZlbnRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBtb3VzZU1vdmVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtldnR9OiBWaXNTdGF0ZUFjdGlvbnMuT25Nb3VzZU1vdmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmIChPYmplY3QudmFsdWVzKHN0YXRlLmludGVyYWN0aW9uQ29uZmlnKS5zb21lKGNvbmZpZyA9PiBjb25maWcuZW5hYmxlZCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBtb3VzZVBvczoge1xuICAgICAgICAuLi5zdGF0ZS5tb3VzZVBvcyxcbiAgICAgICAgLi4uKEFycmF5LmlzQXJyYXkoZXZ0LnBvaW50KSA/IHttb3VzZVBvc2l0aW9uOiBbLi4uZXZ0LnBvaW50XX0gOiB7fSksXG4gICAgICAgIC4uLihBcnJheS5pc0FycmF5KGV2dC5sbmdMYXQpID8ge2Nvb3JkaW5hdGU6IFsuLi5ldnQubG5nTGF0XX0gOiB7fSlcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufTtcbi8qKlxuICogVG9nZ2xlIHZpc2liaWxpdHkgb2YgYSBsYXllciBmb3IgYSBzcGxpdCBtYXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVTcGxpdE1hcFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBNYXBTdGF0ZUFjdGlvbnMuVG9nZ2xlU3BsaXRNYXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PlxuICBzdGF0ZS5zcGxpdE1hcHMgJiYgc3RhdGUuc3BsaXRNYXBzLmxlbmd0aCA9PT0gMFxuICAgID8ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgLy8gbWF5YmUgd2Ugc2hvdWxkIHVzZSBhbiBhcnJheSB0byBzdG9yZSBzdGF0ZSBmb3IgYSBzaW5nbGUgbWFwIGFzIHdlbGxcbiAgICAgICAgLy8gaWYgY3VycmVudCBtYXBzIGxlbmd0aCBpcyBlcXVhbCB0byAwIGl0IG1lYW5zIHRoYXQgd2UgYXJlIGFib3V0IHRvIHNwbGl0IHRoZSB2aWV3XG4gICAgICAgIHNwbGl0TWFwczogY29tcHV0ZVNwbGl0TWFwTGF5ZXJzKHN0YXRlLmxheWVycywge2R1cGxpY2F0ZTogZmFsc2V9KVxuICAgICAgfVxuICAgIDogY2xvc2VTcGVjaWZpY01hcEF0SW5kZXgoc3RhdGUsIGFjdGlvbik7XG5cbi8qKlxuICogVG9nZ2xlIHZpc2liaWxpdHkgb2YgYSBsYXllciBpbiBhIHNwbGl0IG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7bWFwSW5kZXgsIGxheWVySWR9OiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtzcGxpdE1hcHN9ID0gc3RhdGU7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBzcGxpdE1hcHM6IHNwbGl0TWFwcy5tYXAoKHNtLCBpKSA9PlxuICAgICAgaSA9PT0gbWFwSW5kZXhcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5zcGxpdE1hcHNbaV0sXG4gICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgLi4uc3BsaXRNYXBzW2ldLmxheWVycyxcbiAgICAgICAgICAgICAgLy8gaWYgbGF5ZXJJZCBub3QgaW4gbGF5ZXJzLCBzZXQgaXQgdG8gdmlzaWJsZVxuICAgICAgICAgICAgICBbbGF5ZXJJZF06ICFzcGxpdE1hcHNbaV0ubGF5ZXJzW2xheWVySWRdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA6IHNtXG4gICAgKVxuICB9O1xufTtcblxuLyoqXG4gKiBBZGQgbmV3IGRhdGFzZXQgdG8gYHZpc1N0YXRlYCwgd2l0aCBvcHRpb24gdG8gbG9hZCBhIG1hcCBjb25maWcgYWxvbmcgd2l0aCB0aGUgZGF0YXNldHNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgY29uc3QgdXBkYXRlVmlzRGF0YVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlVmlzRGF0YVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgLy8gZGF0YXNldHMgY2FuIGJlIGEgc2luZ2xlIGRhdGEgZW50cmllcyBvciBhbiBhcnJheSBvZiBtdWx0aXBsZSBkYXRhIGVudHJpZXNcbiAgY29uc3Qge2NvbmZpZywgb3B0aW9uc30gPSBhY3Rpb247XG5cbiAgLy8gYXBwbHkgY29uZmlnIGlmIHBhc3NlZCBmcm9tIGFjdGlvblxuICAvLyBUT0RPOiB3ZSBkb24ndCBoYW5kbGUgYXN5bmMgbWVyZ2VycyBoZXJlIHlldFxuICBjb25zdCBwcmV2aW91c1N0YXRlID0gY29uZmlnXG4gICAgPyByZWNlaXZlTWFwQ29uZmlnVXBkYXRlcihzdGF0ZSwge1xuICAgICAgICBwYXlsb2FkOiB7Y29uZmlnLCBvcHRpb25zfVxuICAgICAgfSlcbiAgICA6IHN0YXRlO1xuXG4gIC8vIGluZGljYXRlIHRoYXQgc29tZXRoaW5nIGlzIGluIHByb2dyZXNzXG4gIGNvbnN0IHNldElzTG9hZGluZ1Rhc2sgPSBBQ1RJT05fVEFTSygpLm1hcCgoKSA9PiB7XG4gICAgcmV0dXJuIHNldExvYWRpbmdJbmRpY2F0b3Ioe2NoYW5nZTogMX0pO1xuICB9KTtcbiAgY29uc3QgdXBkYXRlZFN0YXRlID0gd2l0aFRhc2socHJldmlvdXNTdGF0ZSwgc2V0SXNMb2FkaW5nVGFzayk7XG5cbiAgY29uc3QgZGF0YXNldHMgPSB0b0FycmF5KGFjdGlvbi5kYXRhc2V0cyk7XG5cbiAgY29uc3QgYWxsQ3JlYXRlRGF0YXNldHNUYXNrcyA9IGRhdGFzZXRzLm1hcChcbiAgICAoe2luZm8gPSB7fSwgLi4ucmVzdH0pID0+IGNyZWF0ZU5ld0RhdGFFbnRyeSh7aW5mbywgLi4ucmVzdH0sIHN0YXRlLmRhdGFzZXRzKSB8fCB7fVxuICApO1xuICAvLyBjYWxsIGFsbCBUYXNrc1xuICBjb25zdCBkYXRhc2V0VGFza3MgPSBUYXNrLmFsbFNldHRsZWQoYWxsQ3JlYXRlRGF0YXNldHNUYXNrcykubWFwKHJlc3VsdHMgPT5cbiAgICBjcmVhdGVOZXdEYXRhc2V0U3VjY2Vzcyh7cmVzdWx0cywgYWRkVG9NYXBPcHRpb25zOiBvcHRpb25zfSlcbiAgKTtcblxuICByZXR1cm4gd2l0aFRhc2sodXBkYXRlZFN0YXRlLCBkYXRhc2V0VGFza3MpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFBheWxvYWRBY3Rpb248Q3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NQYXlsb2FkPlxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyBjb25zb2xlLmxvZygnY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NVcGRhdGVyJywgYWN0aW9uLnBheWxvYWQpO1xuICBjb25zdCB7cmVzdWx0cywgYWRkVG9NYXBPcHRpb25zfSA9IGFjdGlvbi5wYXlsb2FkO1xuICBjb25zdCBuZXdEYXRhRW50cmllcyA9IHJlc3VsdHMucmVkdWNlKChhY2N1LCByZXN1bHQpID0+IHtcbiAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCcpIHtcbiAgICAgIGNvbnN0IGRhdGFzZXQgPSByZXN1bHQudmFsdWU7XG4gICAgICByZXR1cm4gey4uLmFjY3UsIFtkYXRhc2V0LmlkXTogZGF0YXNldH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGhhbmRsZSBjcmVhdGUgZGF0YXNldCBlcnJvclxuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgJ2NyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzVXBkYXRlcjogZmFpbGVkJyxcbiAgICAgICAgcmVzdWx0LnJlYXNvbiB8fCAocmVzdWx0IGFzIGFueSkudmFsdWVcbiAgICAgICk7XG4gICAgICByZXR1cm4gYWNjdTtcbiAgICB9XG4gIH0sIHt9IGFzIERhdGFzZXRzKTtcbiAgLy8gc2F2ZSBuZXcgZGF0YXNldCBlbnRyeSB0byBzdGF0ZVxuICBjb25zdCBtZXJnZWRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogbWVyZ2VEYXRhc2V0c0J5T3JkZXIoc3RhdGUsIG5ld0RhdGFFbnRyaWVzKVxuICB9O1xuXG4gIC8vIG1lcmdlIHN0YXRlIHdpdGggY29uZmlnIHRvIGJlIG1lcmdlZFxuICBjb25zdCBsYXllck1lcmdlcnMgPSBzdGF0ZS5tZXJnZXJzLmZpbHRlcihtID0+IG0ud2FpdEZvckxheWVyRGF0YSk7XG4gIGNvbnN0IGRhdGFzZXRNZXJnZXJzID0gc3RhdGUubWVyZ2Vycy5maWx0ZXIobSA9PiAhbGF5ZXJNZXJnZXJzLmluY2x1ZGVzKG0pKTtcblxuICBjb25zdCBuZXdEYXRhSWRzID0gT2JqZWN0LmtleXMobmV3RGF0YUVudHJpZXMpO1xuICBjb25zdCBwb3N0TWVyZ2VyUGF5bG9hZCA9IHtcbiAgICBuZXdEYXRhSWRzLFxuICAgIG9wdGlvbnM6IGFkZFRvTWFwT3B0aW9ucyxcbiAgICBsYXllck1lcmdlcnNcbiAgfTtcblxuICBjb25zdCB1cGRhdGVkU3RhdGUgPSBhcHBseU1lcmdlcnNVcGRhdGVyKG1lcmdlZFN0YXRlLCB7XG4gICAgbWVyZ2VyczogZGF0YXNldE1lcmdlcnMsXG4gICAgcG9zdE1lcmdlclBheWxvYWRcbiAgfSk7XG5cbiAgLy8gcmVzb2x2ZSBhY3RpdmUgbG9hZGluZyBpbml0aWF0ZWQgYnkgdXBkYXRlVmlzRGF0YVVwZGF0ZXJcbiAgY29uc3Qgc2V0SXNMb2FkaW5nVGFzayA9IEFDVElPTl9UQVNLKCkubWFwKCgpID0+IHtcbiAgICByZXR1cm4gc2V0TG9hZGluZ0luZGljYXRvcih7Y2hhbmdlOiAtMX0pO1xuICB9KTtcbiAgcmV0dXJuIHdpdGhUYXNrKHVwZGF0ZWRTdGF0ZSwgc2V0SXNMb2FkaW5nVGFzayk7XG59O1xuXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlNZXJnZXJzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IHtcbiAgICBtZXJnZXJzOiBNZXJnZXI8YW55PltdO1xuICAgIHBvc3RNZXJnZXJQYXlsb2FkOiBQb3N0TWVyZ2VyUGF5bG9hZDtcbiAgfVxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7bWVyZ2VycywgcG9zdE1lcmdlclBheWxvYWR9ID0gYWN0aW9uO1xuXG4gIC8vIG1lcmdlIHN0YXRlIHdpdGggY29uZmlnIHRvIGJlIG1lcmdlZFxuICBjb25zdCBtZXJnZVN0YXRlUmVzdWx0ID0gbWVyZ2VTdGF0ZUZyb21NZXJnZXJzKFxuICAgIHN0YXRlLFxuICAgIHtcbiAgICAgIC4uLklOSVRJQUxfVklTX1NUQVRFLFxuICAgICAgLi4uc3RhdGUuaW5pdGlhbFN0YXRlXG4gICAgfSxcbiAgICBtZXJnZXJzLFxuICAgIC8vIG5ld0RhdGFJZHMsXG4gICAgcG9zdE1lcmdlclBheWxvYWRcbiAgKTtcblxuICAvLyBpZiBhbGwgbWVyZ2VkLCBraWNrdXAgcG9zdCBtZXJnZSBwcm9jZXNzXG4gIC8vIGlmIG5vdCB3YWl0XG4gIHJldHVybiBtZXJnZVN0YXRlUmVzdWx0LmFsbE1lcmdlZFxuICAgID8gcG9zdE1lcmdlVXBkYXRlcihtZXJnZVN0YXRlUmVzdWx0Lm1lcmdlZFN0YXRlLCBwb3N0TWVyZ2VyUGF5bG9hZClcbiAgICA6IG1lcmdlU3RhdGVSZXN1bHQubWVyZ2VkU3RhdGU7XG59XG5cbi8qKlxuICogQWRkIG5ldyBkYXRhc2V0IHRvIGB2aXNTdGF0ZWAsIHdpdGggb3B0aW9uIHRvIGxvYWQgYSBtYXAgY29uZmlnIGFsb25nIHdpdGggdGhlIGRhdGFzZXRzXG4gKi9cbmZ1bmN0aW9uIHBvc3RNZXJnZVVwZGF0ZXIobWVyZ2VkU3RhdGU6IFZpc1N0YXRlLCBwb3N0TWVyZ2VyUGF5bG9hZDogUG9zdE1lcmdlclBheWxvYWQpOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtuZXdEYXRhSWRzLCBvcHRpb25zLCBsYXllck1lcmdlcnN9ID0gcG9zdE1lcmdlclBheWxvYWQ7XG4gIGNvbnN0IG5ld0ZpbHRlcnMgPSBtZXJnZWRTdGF0ZS5maWx0ZXJzLmZpbHRlcihmID0+XG4gICAgZi5kYXRhSWQuZmluZChmRGF0YUlkID0+IG5ld0RhdGFJZHMuaW5jbHVkZXMoZkRhdGFJZCkpXG4gICk7XG4gIGNvbnN0IGRhdGFzZXRGaWx0ZXJlZDogc3RyaW5nW10gPSB1bmlxKFxuICAgIG5ld0ZpbHRlcnMucmVkdWNlKChhY2N1LCBmKSA9PiBbLi4uYWNjdSwgLi4uZi5kYXRhSWRdLCBbXSBhcyBzdHJpbmdbXSlcbiAgKTtcbiAgY29uc3QgZGF0YUVtcHR5ID0gbmV3RGF0YUlkcy5sZW5ndGggPCAxO1xuXG4gIGxldCBuZXdMYXllcnMgPSAhZGF0YUVtcHR5XG4gICAgPyBtZXJnZWRTdGF0ZS5sYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuZGF0YUlkICYmIG5ld0RhdGFJZHMuaW5jbHVkZXMobC5jb25maWcuZGF0YUlkKSlcbiAgICA6IFtdO1xuXG4gIGNvbnN0IG5ld0RhdGFFbnRyaWVzID0gbmV3RGF0YUlkcy5yZWR1Y2UoXG4gICAgKGFjY3UsIGlkKSA9PiAoe1xuICAgICAgLi4uYWNjdSxcbiAgICAgIFtpZF06IG1lcmdlZFN0YXRlLmRhdGFzZXRzW2lkXVxuICAgIH0pLFxuICAgIHt9XG4gICk7XG5cbiAgaWYgKCFuZXdMYXllcnMubGVuZ3RoICYmIChvcHRpb25zIHx8IHt9KS5hdXRvQ3JlYXRlTGF5ZXJzICE9PSBmYWxzZSkge1xuICAgIC8vIG5vIGxheWVyIG1lcmdlZCwgZmluZCBkZWZhdWx0c1xuICAgIGNvbnN0IHJlc3VsdCA9IGFkZERlZmF1bHRMYXllcnMobWVyZ2VkU3RhdGUsIG5ld0RhdGFFbnRyaWVzKTtcbiAgICBtZXJnZWRTdGF0ZSA9IHJlc3VsdC5zdGF0ZTtcbiAgICBuZXdMYXllcnMgPSByZXN1bHQubmV3TGF5ZXJzO1xuICB9XG5cbiAgaWYgKG1lcmdlZFN0YXRlLnNwbGl0TWFwcy5sZW5ndGgpIHtcbiAgICAvLyBpZiBtYXAgaXMgc3BsaXQsIGFkZCBuZXcgbGF5ZXJzIHRvIHNwbGl0TWFwc1xuICAgIG5ld0xheWVycyA9IG1lcmdlZFN0YXRlLmxheWVycy5maWx0ZXIoXG4gICAgICBsID0+IGwuY29uZmlnLmRhdGFJZCAmJiBuZXdEYXRhSWRzLmluY2x1ZGVzKGwuY29uZmlnLmRhdGFJZClcbiAgICApO1xuICAgIG1lcmdlZFN0YXRlID0ge1xuICAgICAgLi4ubWVyZ2VkU3RhdGUsXG4gICAgICBzcGxpdE1hcHM6IGFkZE5ld0xheWVyc1RvU3BsaXRNYXAobWVyZ2VkU3RhdGUuc3BsaXRNYXBzLCBuZXdMYXllcnMpXG4gICAgfTtcbiAgfVxuXG4gIC8vIGlmIG5vIHRvb2x0aXBzIG1lcmdlZCBhZGQgZGVmYXVsdCB0b29sdGlwc1xuICBuZXdEYXRhSWRzLmZvckVhY2goZGF0YUlkID0+IHtcbiAgICBjb25zdCB0b29sdGlwRmllbGRzID0gbWVyZ2VkU3RhdGUuaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWcuZmllbGRzVG9TaG93W2RhdGFJZF07XG4gICAgLy8gbG9hZGluZyBkYXRhc2V0OiBhdXRvQ3JlYXRlVG9vbHRpcHMgaXMgZmFsc2UgYW5kIHdlIGRvbid0IHdhbnQgdG8gcnVuIGFkZERlZmF1bHRUb29sdGlwcyB3aGVuIHRvb2x0aXBGaWVsZHMgaXMgZW1wdHlcbiAgICBpZiAoXG4gICAgICBvcHRpb25zPy5hdXRvQ3JlYXRlVG9vbHRpcHMgIT09IGZhbHNlICYmXG4gICAgICAoIUFycmF5LmlzQXJyYXkodG9vbHRpcEZpZWxkcykgfHwgIXRvb2x0aXBGaWVsZHMubGVuZ3RoKVxuICAgICkge1xuICAgICAgLy8gYWRkaW5nIGRhdGFzZXQ6IGF1dG9DcmVhdGVUb29sdGlwcyBpcyB0cnVlXG4gICAgICBtZXJnZWRTdGF0ZSA9IGFkZERlZmF1bHRUb29sdGlwcyhtZXJnZWRTdGF0ZSwgbmV3RGF0YUVudHJpZXNbZGF0YUlkXSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCB1cGRhdGVkRGF0YXNldHMgPSBkYXRhRW1wdHlcbiAgICA/IE9iamVjdC5rZXlzKG1lcmdlZFN0YXRlLmRhdGFzZXRzKVxuICAgIDogdW5pcShPYmplY3Qua2V5cyhuZXdEYXRhRW50cmllcykuY29uY2F0KGRhdGFzZXRGaWx0ZXJlZCkpO1xuXG4gIGxldCB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobWVyZ2VkU3RhdGUsIHVwZGF0ZWREYXRhc2V0cywgdW5kZWZpbmVkKTtcblxuICAvLyByZWdpc3RlciBsYXllciBhbmltYXRpb24gZG9tYWluLFxuICAvLyBuZWVkIHRvIGJlIGNhbGxlZCBhZnRlciBsYXllciBkYXRhIGlzIGNhbGN1bGF0ZWRcbiAgdXBkYXRlZFN0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKHVwZGF0ZWRTdGF0ZSk7XG5cbiAgLy8gdHJ5IHRvIHByb2Nlc3MgbGF5ZXJNZXJnZXJzIGFmdGVyIGRhdGFzZXQrZGF0YXNldE1lcmdlcnNcbiAgdXBkYXRlZFN0YXRlID1cbiAgICBsYXllck1lcmdlcnMgJiYgbGF5ZXJNZXJnZXJzLmxlbmd0aCA+IDBcbiAgICAgID8gYXBwbHlNZXJnZXJzVXBkYXRlcih1cGRhdGVkU3RhdGUsIHtcbiAgICAgICAgICBtZXJnZXJzOiBsYXllck1lcmdlcnMsXG4gICAgICAgICAgcG9zdE1lcmdlclBheWxvYWQ6IHsuLi5wb3N0TWVyZ2VyUGF5bG9hZCwgbGF5ZXJNZXJnZXJzOiBbXX1cbiAgICAgICAgfSlcbiAgICAgIDogdXBkYXRlZFN0YXRlO1xuXG4gIC8vIGNlbnRlciB0aGUgbWFwIG9uY2UgdGhlIGRhdGFzZXQgaXMgY3JlYXRlZFxuICBpZiAobmV3TGF5ZXJzLmxlbmd0aCAmJiAob3B0aW9ucyB8fCB7fSkuY2VudGVyTWFwKSB7XG4gICAgY29uc3QgYm91bmRzID0gZmluZE1hcEJvdW5kcyhuZXdMYXllcnMpO1xuICAgIGlmIChib3VuZHMpIHtcbiAgICAgIGNvbnN0IGZpdEJvdW5kc1Rhc2sgPSBBQ1RJT05fVEFTSygpLm1hcCgoKSA9PiB7XG4gICAgICAgIHJldHVybiBmaXRNYXBCb3VuZHMoYm91bmRzKTtcbiAgICAgIH0pO1xuICAgICAgdXBkYXRlZFN0YXRlID0gd2l0aFRhc2sodXBkYXRlZFN0YXRlLCBmaXRCb3VuZHNUYXNrKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdXBkYXRlZFN0YXRlO1xufVxuXG4vKipcbiAqIFJlbmFtZSBhbiBleGlzdGluZyBkYXRhc2V0IGluIGB2aXNTdGF0ZWBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5hbWVEYXRhc2V0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW5hbWVEYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICByZXR1cm4gdXBkYXRlRGF0YXNldFByb3BzVXBkYXRlcihzdGF0ZSwge2RhdGFJZDogYWN0aW9uLmRhdGFJZCwgcHJvcHM6IHtsYWJlbDogYWN0aW9uLmxhYmVsfX0pO1xufVxuXG5jb25zdCBBTExPV0VEX1VQREFURV9EQVRBU0VUX1BST1BTID0gWydsYWJlbCcsICdjb2xvcicsICdtZXRhZGF0YSddO1xuXG4vKipcbiAqIFZhbGlkYXRlcyBwcm9wZXJ0aWVzIGJlZm9yZSB1cGRhdGluZyB0aGUgZGF0YXNldC5cbiAqIE1ha2VzIHN1cmUgZWFjaCBwcm9wZXJ0eSBpcyBpbiB0aGUgYWxsb3dlZCBsaXN0XG4gKiBNYWtlcyBzdXJlIGNvbG9yIHZhbHVlIGlzIFJHQlxuICogUGVyZm9ybXMgZGVlcCBtZXJnZSB3aGVuIHVwZGF0aW5nIG1ldGFkYXRhXG4gKi9cbmNvbnN0IHZhbGlkYXRlRGF0YXNldFVwZGF0ZVByb3BzID0gKHByb3BzLCBkYXRhc2V0KSA9PiB7XG4gIGNvbnN0IHZhbGlkYXRlZFByb3BzID0gT2JqZWN0LmVudHJpZXMocHJvcHMpLnJlZHVjZSgoYWNjLCBlbnRyeSkgPT4ge1xuICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IGVudHJ5O1xuICAgIC8vIGlzIGl0IGFsbG93ZWQgP1xuICAgIGlmICghQUxMT1dFRF9VUERBVEVfREFUQVNFVF9QUk9QUy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cblxuICAgIC8vIGlmIHdlIGFyZSBhZGRpbmcgYSBjb2xvciBidXQgaXQgaXMgbm90IFJHQiB3ZSBkb24ndCBhY2NlcHQgdGhlIHZhbHVlXG4gICAgLy8gaW4gdGhlIGZ1dHVyZSBhcyB3ZSBhZGQgbW9yZSBwcm9wcyB3ZSBzaG91bGQgY2hhbmdlIHRoaXMgaWYgaW50byBhIHN3aXRjaFxuICAgIGlmIChrZXkgPT09ICdjb2xvcicgJiYgIWlzUmdiQ29sb3IodmFsdWUpKSB7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cblxuICAgIC8vIGRvIHdlIG5lZWQgZGVlcCBtZXJnZSA/XG4gICAgcmV0dXJuIHsuLi5hY2MsIFtrZXldOiBpc1BsYWluT2JqZWN0KHZhbHVlKSA/IGRlZXBtZXJnZShkYXRhc2V0W2tleV0gfHwge30sIHZhbHVlKSA6IHZhbHVlfTtcbiAgfSwge30pO1xuXG4gIHJldHVybiB2YWxpZGF0ZWRQcm9wcztcbn07XG5cbi8qKlxuICogVXBkYXRlIERhdGFzZXQgcHJvcHMgKGxhYmVsLCBjb2xvciwgbWV0YSkuIERvIG5vdCB1c2UgdG8gdXBkYXRlIGRhdGEgb3IgYW55IHJlbGF0ZWQgcHJvcGVydGllc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRGF0YXNldFByb3BzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7ZGF0YUlkLCBwcm9wc30gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhc2V0c30gPSBzdGF0ZTtcbiAgY29uc3QgZXhpc3RpbmcgPSBkYXRhc2V0c1tkYXRhSWRdO1xuXG4gIGlmIChleGlzdGluZykge1xuICAgIGNvbnN0IHZhbGlkYXRlZFByb3BzID0gdmFsaWRhdGVEYXRhc2V0VXBkYXRlUHJvcHMocHJvcHMsIGV4aXN0aW5nKTtcbiAgICAvLyAgdmFsaWRhdGUgcHJvcHM6IGp1c3QgY29sb3IgZm9yIG5vd1xuICAgIC8vICB3ZSBvbmx5IGFsbG93IGxhYmVsLCBjb2xvciBhbmQgbWV0YSB0byBiZSB1cGRhdGVkXG4gICAgLy8gY29uc3QgbmV3VGFibGUgPSBjb3B5VGFibGVBbmRVcGRhdGUoZXhpc3RpbmcsIHZhbGlkYXRlZFByb3BzKTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBkYXRhc2V0czoge1xuICAgICAgICAuLi5kYXRhc2V0cyxcbiAgICAgICAgW2RhdGFJZF06IGNvcHlUYWJsZUFuZFVwZGF0ZShleGlzdGluZywgdmFsaWRhdGVkUHJvcHMpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBXaGVuIGEgdXNlciBjbGlja3Mgb24gdGhlIHNwZWNpZmljIG1hcCBjbG9zaW5nIGljb25cbiAqIHRoZSBhcHBsaWNhdGlvbiB3aWxsIGNsb3NlIHRoZSBzZWxlY3RlZCBtYXBcbiAqIGFuZCB3aWxsIG1lcmdlIHRoZSByZW1haW5pbmcgb25lIHdpdGggdGhlIGdsb2JhbCBzdGF0ZVxuICogVE9ETzogaSB0aGluayBpbiB0aGUgZnV0dXJlIHRoaXMgYWN0aW9uIHNob3VsZCBiZSBjYWxsZWQgbWVyZ2UgbWFwIGxheWVycyB3aXRoIGdsb2JhbCBzZXR0aW5nc1xuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlIGB2aXNTdGF0ZWBcbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb24gYWN0aW9uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsb3NlU3BlY2lmaWNNYXBBdEluZGV4PFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IE1hcFN0YXRlQWN0aW9ucy5Ub2dnbGVTcGxpdE1hcFVwZGF0ZXJBY3Rpb25cbik6IFMge1xuICAvLyByZXRyaWV2ZSBsYXllcnMgbWV0YSBkYXRhIGZyb20gdGhlIHJlbWFpbmluZyBtYXAgdGhhdCB3ZSBuZWVkIHRvIGtlZXBcbiAgY29uc3QgaW5kZXhUb1JldHJpZXZlID0gMSAtIGFjdGlvbi5wYXlsb2FkO1xuICBjb25zdCBtYXBMYXllcnMgPSBzdGF0ZS5zcGxpdE1hcHNbaW5kZXhUb1JldHJpZXZlXT8ubGF5ZXJzO1xuICBjb25zdCB7bGF5ZXJzfSA9IHN0YXRlO1xuXG4gIC8vIHVwZGF0ZSBsYXllciB2aXNpYmlsaXR5XG4gIGNvbnN0IG5ld0xheWVycyA9IGxheWVycy5tYXAobGF5ZXIgPT5cbiAgICBtYXBMYXllcnMgJiYgIW1hcExheWVyc1tsYXllci5pZF0gJiYgbGF5ZXIuY29uZmlnLmlzVmlzaWJsZVxuICAgICAgPyBsYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgICAgLy8gaWYgbGF5ZXIuaWQgaXMgbm90IGluIG1hcExheWVycywgaXQgc2hvdWxkIGJlIGluVmlzaWJsZVxuICAgICAgICAgIGlzVmlzaWJsZTogZmFsc2VcbiAgICAgICAgfSlcbiAgICAgIDogbGF5ZXJcbiAgKTtcblxuICAvLyBkZWxldGUgbWFwXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBuZXdMYXllcnMsXG4gICAgc3BsaXRNYXBzOiBbXVxuICB9O1xufVxuXG4vKipcbiAqIFRyaWdnZXIgZmlsZSBsb2FkaW5nIGRpc3BhdGNoIGBhZGREYXRhVG9NYXBgIGlmIHN1Y2NlZWQsIG9yIGBsb2FkRmlsZXNFcnJgIGlmIGZhaWxlZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxvYWRGaWxlc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7ZmlsZXMsIG9uRmluaXNoID0gbG9hZEZpbGVzU3VjY2Vzc30gPSBhY3Rpb247XG4gIGlmICghZmlsZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZmlsZUxvYWRpbmdQcm9ncmVzcyA9IEFycmF5LmZyb20oZmlsZXMpLnJlZHVjZShcbiAgICAoYWNjdSwgZiwgaSkgPT4gbWVyZ2VfKGluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzKGYsIGkpKShhY2N1KSxcbiAgICB7fVxuICApO1xuXG4gIGNvbnN0IGZpbGVMb2FkaW5nID0ge1xuICAgIGZpbGVDYWNoZTogW10sXG4gICAgZmlsZXNUb0xvYWQ6IGZpbGVzLFxuICAgIG9uRmluaXNoXG4gIH07XG5cbiAgY29uc3QgbmV4dFN0YXRlID0gbWVyZ2VfKHtmaWxlTG9hZGluZ1Byb2dyZXNzLCBmaWxlTG9hZGluZ30pKHN0YXRlKTtcblxuICByZXR1cm4gbG9hZE5leHRGaWxlVXBkYXRlcihuZXh0U3RhdGUpO1xufTtcblxuLyoqXG4gKiBTdWNlc3NmdWxseSBsb2FkZWQgb25lIGZpbGUsIG1vdmUgb24gdG8gdGhlIG5leHQgb25lXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEZpbGVTdGVwU3VjY2Vzc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVTdGVwU3VjY2Vzc0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIXN0YXRlLmZpbGVMb2FkaW5nKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHtmaWxlTmFtZSwgZmlsZUNhY2hlfSA9IGFjdGlvbjtcbiAgY29uc3Qge2ZpbGVzVG9Mb2FkLCBvbkZpbmlzaH0gPSBzdGF0ZS5maWxlTG9hZGluZztcbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiB7cGVyY2VudDogMSwgbWVzc2FnZTogJ0RvbmUnfVxuICB9KTtcblxuICAvLyBzYXZlIHByb2Nlc3NlZCBmaWxlIHRvIGZpbGVDYWNoZVxuICBjb25zdCBzdGF0ZVdpdGhDYWNoZSA9IHBpY2tfKCdmaWxlTG9hZGluZycpKG1lcmdlXyh7ZmlsZUNhY2hlfSkpKHN0YXRlV2l0aFByb2dyZXNzKTtcblxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc3RhdGVXaXRoQ2FjaGUsXG4gICAgREVMQVlfVEFTSygyMDApLm1hcChmaWxlc1RvTG9hZC5sZW5ndGggPyBsb2FkTmV4dEZpbGUgOiAoKSA9PiBvbkZpbmlzaChmaWxlQ2FjaGUpKVxuICApO1xufVxuXG4vLyB3aXRoVGFzazxUPihzdGF0ZTogVCwgdGFzazogYW55KTogVFxuXG4vKipcbiAqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZE5leHRGaWxlVXBkYXRlcihzdGF0ZTogVmlzU3RhdGUpOiBWaXNTdGF0ZSB7XG4gIGlmICghc3RhdGUuZmlsZUxvYWRpbmcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qge2ZpbGVzVG9Mb2FkfSA9IHN0YXRlLmZpbGVMb2FkaW5nO1xuICBjb25zdCBbZmlsZSwgLi4ucmVtYWluaW5nRmlsZXNUb0xvYWRdID0gZmlsZXNUb0xvYWQ7XG5cbiAgLy8gc2F2ZSBmaWxlc1RvTG9hZCB0byBzdGF0ZVxuICBjb25zdCBuZXh0U3RhdGUgPSBwaWNrXygnZmlsZUxvYWRpbmcnKShtZXJnZV8oe2ZpbGVzVG9Mb2FkOiByZW1haW5pbmdGaWxlc1RvTG9hZH0pKShzdGF0ZSk7XG5cbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihuZXh0U3RhdGUsIHtcbiAgICBmaWxlTmFtZTogZmlsZS5uYW1lLFxuICAgIHByb2dyZXNzOiB7cGVyY2VudDogMCwgbWVzc2FnZTogJ2xvYWRpbmcuLi4nfVxuICB9KTtcblxuICBjb25zdCB7bG9hZGVycywgbG9hZE9wdGlvbnN9ID0gc3RhdGU7XG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzdGF0ZVdpdGhQcm9ncmVzcyxcbiAgICBtYWtlTG9hZEZpbGVUYXNrKFxuICAgICAgZmlsZSxcbiAgICAgIG5leHRTdGF0ZS5maWxlTG9hZGluZyAmJiBuZXh0U3RhdGUuZmlsZUxvYWRpbmcuZmlsZUNhY2hlLFxuICAgICAgbG9hZGVycyxcbiAgICAgIGxvYWRPcHRpb25zXG4gICAgKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFrZUxvYWRGaWxlVGFzayhmaWxlLCBmaWxlQ2FjaGUsIGxvYWRlcnM6IExvYWRlcltdID0gW10sIGxvYWRPcHRpb25zID0ge30pIHtcbiAgcmV0dXJuIExPQURfRklMRV9UQVNLKHtmaWxlLCBmaWxlQ2FjaGUsIGxvYWRlcnMsIGxvYWRPcHRpb25zfSkuYmltYXAoXG4gICAgLy8gcHJldHRpZXIgaWdub3JlXG4gICAgLy8gc3VjY2Vzc1xuICAgIGdlbiA9PlxuICAgICAgbmV4dEZpbGVCYXRjaCh7XG4gICAgICAgIGdlbixcbiAgICAgICAgZmlsZU5hbWU6IGZpbGUubmFtZSxcbiAgICAgICAgb25GaW5pc2g6IHJlc3VsdCA9PlxuICAgICAgICAgIHByb2Nlc3NGaWxlQ29udGVudCh7XG4gICAgICAgICAgICBjb250ZW50OiByZXN1bHQsXG4gICAgICAgICAgICBmaWxlQ2FjaGVcbiAgICAgICAgICB9KVxuICAgICAgfSksXG5cbiAgICAvLyBlcnJvclxuICAgIGVyciA9PiBsb2FkRmlsZXNFcnIoZmlsZS5uYW1lLCBlcnIpXG4gICk7XG59XG5cbi8qKlxuICpcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzRmlsZUNvbnRlbnRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlByb2Nlc3NGaWxlQ29udGVudFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2NvbnRlbnQsIGZpbGVDYWNoZX0gPSBhY3Rpb24ucGF5bG9hZDtcblxuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWU6IGNvbnRlbnQuZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtwZXJjZW50OiAxLCBtZXNzYWdlOiAncHJvY2Vzc2luZy4uLid9XG4gIH0pO1xuXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzdGF0ZVdpdGhQcm9ncmVzcyxcbiAgICBQUk9DRVNTX0ZJTEVfREFUQSh7Y29udGVudCwgZmlsZUNhY2hlfSkuYmltYXAoXG4gICAgICByZXN1bHQgPT4gbG9hZEZpbGVTdGVwU3VjY2Vzcyh7ZmlsZU5hbWU6IGNvbnRlbnQuZmlsZU5hbWUsIGZpbGVDYWNoZTogcmVzdWx0fSksXG4gICAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGNvbnRlbnQuZmlsZU5hbWUsIGVycilcbiAgICApXG4gICk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVByb2dyZXNzKHByZXZQcm9ncmVzcyA9IHt9LCBwcm9ncmVzcykge1xuICAvLyBUaGlzIGhhcHBlbnMgd2hlbiByZWNlaXZpbmcgcXVlcnkgbWV0YWRhdGEgb3Igb3RoZXIgY2FzZXMgd2UgZG9uJ3RcbiAgLy8gaGF2ZSBhbiB1cGRhdGUgZm9yIHRoZSB1c2VyLlxuICBpZiAoIXByb2dyZXNzIHx8ICFwcm9ncmVzcy5wZXJjZW50KSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwZXJjZW50OiBwcm9ncmVzcy5wZXJjZW50XG4gIH07XG59XG5cbi8qKlxuICogZ2V0cyBjYWxsZWQgd2l0aCBwYXlsb2FkID0gQXN5bmNHZW5lcmF0b3I8Pz8/PlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IG5leHRGaWxlQmF0Y2hVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtcbiAgICBwYXlsb2FkOiB7Z2VuLCBmaWxlTmFtZSwgcHJvZ3Jlc3MsIGFjY3VtdWxhdGVkLCBvbkZpbmlzaH1cbiAgfTogVmlzU3RhdGVBY3Rpb25zLk5leHRGaWxlQmF0Y2hVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHN0YXRlV2l0aFByb2dyZXNzID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZSxcbiAgICBwcm9ncmVzczogcGFyc2VQcm9ncmVzcyhzdGF0ZS5maWxlTG9hZGluZ1Byb2dyZXNzW2ZpbGVOYW1lXSwgcHJvZ3Jlc3MpXG4gIH0pO1xuXG4gIHJldHVybiB3aXRoVGFzayhzdGF0ZVdpdGhQcm9ncmVzcywgW1xuICAgIC4uLihmaWxlTmFtZS5lbmRzV2l0aCgnYXJyb3cnKSAmJiBhY2N1bXVsYXRlZD8uZGF0YT8ubGVuZ3RoID4gMFxuICAgICAgPyBbXG4gICAgICAgICAgUFJPQ0VTU19GSUxFX0RBVEEoe2NvbnRlbnQ6IGFjY3VtdWxhdGVkLCBmaWxlQ2FjaGU6IFtdfSkuYmltYXAoXG4gICAgICAgICAgICByZXN1bHQgPT4gbG9hZEZpbGVzU3VjY2VzcyhyZXN1bHQpLFxuICAgICAgICAgICAgZXJyID0+IGxvYWRGaWxlc0VycihmaWxlTmFtZSwgZXJyKVxuICAgICAgICAgIClcbiAgICAgICAgXVxuICAgICAgOiBbXSksXG4gICAgVU5XUkFQX1RBU0soZ2VuLm5leHQoKSkuYmltYXAoXG4gICAgICAoe3ZhbHVlLCBkb25lfSkgPT4ge1xuICAgICAgICByZXR1cm4gZG9uZVxuICAgICAgICAgID8gb25GaW5pc2goYWNjdW11bGF0ZWQpXG4gICAgICAgICAgOiBuZXh0RmlsZUJhdGNoKHtcbiAgICAgICAgICAgICAgZ2VuLFxuICAgICAgICAgICAgICBmaWxlTmFtZSxcbiAgICAgICAgICAgICAgcHJvZ3Jlc3M6IHZhbHVlLnByb2dyZXNzLFxuICAgICAgICAgICAgICBhY2N1bXVsYXRlZDogdmFsdWUsXG4gICAgICAgICAgICAgIG9uRmluaXNoXG4gICAgICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGZpbGVOYW1lLCBlcnIpXG4gICAgKVxuICBdKTtcbn07XG5cbi8qKlxuICogVHJpZ2dlciBsb2FkaW5nIGZpbGUgZXJyb3JcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsb2FkRmlsZXNFcnJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtlcnJvciwgZmlsZU5hbWV9OiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVzRXJyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyB1cGRhdGUgdWkgd2l0aCBlcnJvciBtZXNzYWdlXG4gIENvbnNvbGUud2FybihlcnJvcik7XG4gIGlmICghc3RhdGUuZmlsZUxvYWRpbmcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qge2ZpbGVzVG9Mb2FkLCBvbkZpbmlzaCwgZmlsZUNhY2hlfSA9IHN0YXRlLmZpbGVMb2FkaW5nO1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtlcnJvcn1cbiAgfSk7XG5cbiAgLy8ga2ljayBvZmYgbmV4dCBmaWxlIG9yIGZpbmlzaFxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgbmV4dFN0YXRlLFxuICAgIERFTEFZX1RBU0soMjAwKS5tYXAoZmlsZXNUb0xvYWQubGVuZ3RoID8gbG9hZE5leHRGaWxlIDogKCkgPT4gb25GaW5pc2goZmlsZUNhY2hlKSlcbiAgKTtcbn07XG5cbi8qKlxuICogV2hlbiBzZWxlY3QgZGF0YXNldCBmb3IgZXhwb3J0LCBhcHBseSBjcHUgZmlsdGVyIHRvIHNlbGVjdGVkIGRhdGFzZXRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhcHBseUNQVUZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZH06IFZpc1N0YXRlQWN0aW9ucy5BcHBseUNQVUZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgLy8gYXBwbHkgY3B1RmlsdGVyXG4gIGNvbnN0IGRhdGFJZHMgPSB0b0FycmF5KGRhdGFJZCk7XG5cbiAgcmV0dXJuIGRhdGFJZHMucmVkdWNlKChhY2N1LCBpZCkgPT4gZmlsdGVyRGF0YXNldENQVShhY2N1LCBpZCksIHN0YXRlKTtcbn07XG5cbi8qKlxuICogVXNlciBpbnB1dCB0byB1cGRhdGUgdGhlIGluZm8gb2YgdGhlIG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldE1hcEluZm9VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldE1hcEluZm9VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbWFwSW5mbzoge1xuICAgIC4uLnN0YXRlLm1hcEluZm8sXG4gICAgLi4uYWN0aW9uLmluZm9cbiAgfVxufSk7XG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byB1cGRhdGUgQWxsIGxheWVyIGRvbWFpbiBhbmQgbGF5ZXIgZGF0YSBvZiBzdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRGVmYXVsdExheWVycyhcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBkYXRhc2V0czogRGF0YXNldHNcbik6IHtzdGF0ZTogVmlzU3RhdGU7IG5ld0xheWVyczogTGF5ZXJbXX0ge1xuICBjb25zdCBlbXB0eTogTGF5ZXJbXSA9IFtdO1xuICBjb25zdCBkZWZhdWx0TGF5ZXJzID0gT2JqZWN0LnZhbHVlcyhkYXRhc2V0cykucmVkdWNlKChhY2N1OiBMYXllcltdLCBkYXRhc2V0KSA9PiB7XG4gICAgY29uc3QgZm91bmRMYXllcnMgPSBmaW5kRGVmYXVsdExheWVyKGRhdGFzZXQsIHN0YXRlLmxheWVyQ2xhc3Nlcyk7XG4gICAgcmV0dXJuIGZvdW5kTGF5ZXJzICYmIGZvdW5kTGF5ZXJzLmxlbmd0aCA/IGFjY3UuY29uY2F0KGZvdW5kTGF5ZXJzKSA6IGFjY3U7XG4gIH0sIGVtcHR5KTtcblxuICByZXR1cm4ge1xuICAgIHN0YXRlOiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGxheWVyczogWy4uLnN0YXRlLmxheWVycywgLi4uZGVmYXVsdExheWVyc10sXG4gICAgICBsYXllck9yZGVyOiBbXG4gICAgICAgIC8vIHB1dCBuZXcgbGF5ZXJzIG9uIHRvcCBvZiBvbGQgb25lcyBpbiByZXZlcnNlXG4gICAgICAgIC4uLmdldExheWVyT3JkZXJGcm9tTGF5ZXJzKGRlZmF1bHRMYXllcnMpLFxuICAgICAgICAuLi5zdGF0ZS5sYXllck9yZGVyXG4gICAgICBdXG4gICAgfSxcbiAgICBuZXdMYXllcnM6IGRlZmF1bHRMYXllcnNcbiAgfTtcbn1cblxuLyoqXG4gKiBoZWxwZXIgZnVuY3Rpb24gdG8gZmluZCBkZWZhdWx0IHRvb2x0aXBzXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhc2V0XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZERlZmF1bHRUb29sdGlwcyhzdGF0ZSwgZGF0YXNldCkge1xuICBjb25zdCB0b29sdGlwRmllbGRzID0gZmluZEZpZWxkc1RvU2hvdyh7XG4gICAgLi4uZGF0YXNldCxcbiAgICBtYXhEZWZhdWx0VG9vbHRpcHM6IHN0YXRlLm1heERlZmF1bHRUb29sdGlwc1xuICB9KTtcbiAgY29uc3QgbWVyZ2VkID0ge1xuICAgIC4uLnN0YXRlLmludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAuY29uZmlnLmZpZWxkc1RvU2hvdyxcbiAgICAuLi50b29sdGlwRmllbGRzXG4gIH07XG5cbiAgcmV0dXJuIHNldChbJ2ludGVyYWN0aW9uQ29uZmlnJywgJ3Rvb2x0aXAnLCAnY29uZmlnJywgJ2ZpZWxkc1RvU2hvdyddLCBtZXJnZWQsIHN0YXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzKGZpbGUsIGluZGV4KSB7XG4gIGNvbnN0IGZpbGVOYW1lID0gZmlsZS5uYW1lIHx8IGBVbnRpdGxlZCBGaWxlICR7aW5kZXh9YDtcbiAgcmV0dXJuIHtcbiAgICBbZmlsZU5hbWVdOiB7XG4gICAgICAvLyBwZXJjZW50IG9mIGN1cnJlbnQgZmlsZVxuICAgICAgcGVyY2VudDogMCxcbiAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgZmlsZU5hbWUsXG4gICAgICBlcnJvcjogbnVsbFxuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7ZmlsZU5hbWUsIHByb2dyZXNzfSkge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gIHJldHVybiBwaWNrXygnZmlsZUxvYWRpbmdQcm9ncmVzcycpKHBpY2tfKGZpbGVOYW1lKShtZXJnZV8ocHJvZ3Jlc3MpKSkoc3RhdGUpO1xufVxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gdXBkYXRlIGxheWVyIGRvbWFpbnMgZm9yIGFuIGFycmF5IG9mIGRhdGFzZXRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGE8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGRhdGFJZDogc3RyaW5nIHwgc3RyaW5nW10sXG4gIHVwZGF0ZWRGaWx0ZXI/OiBGaWx0ZXJcbik6IFMge1xuICBjb25zdCBkYXRhSWRzID0gdHlwZW9mIGRhdGFJZCA9PT0gJ3N0cmluZycgPyBbZGF0YUlkXSA6IGRhdGFJZDtcbiAgY29uc3QgbmV3TGF5ZXJzOiBMYXllcltdID0gW107XG4gIGNvbnN0IG5ld0xheWVyRGF0YTogYW55W10gPSBbXTtcblxuICBzdGF0ZS5sYXllcnMuZm9yRWFjaCgob2xkTGF5ZXIsIGkpID0+IHtcbiAgICBpZiAob2xkTGF5ZXIuY29uZmlnLmRhdGFJZCAmJiBkYXRhSWRzLmluY2x1ZGVzKG9sZExheWVyLmNvbmZpZy5kYXRhSWQpKSB7XG4gICAgICAvLyBObyBuZWVkIHRvIHJlY2FsY3VsYXRlIGxheWVyIGRvbWFpbiBpZiBmaWx0ZXIgaGFzIGZpeGVkIGRvbWFpblxuICAgICAgY29uc3QgbmV3TGF5ZXIgPVxuICAgICAgICB1cGRhdGVkRmlsdGVyICYmIHVwZGF0ZWRGaWx0ZXIuZml4ZWREb21haW5cbiAgICAgICAgICA/IG9sZExheWVyXG4gICAgICAgICAgOiBvbGRMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cywgdXBkYXRlZEZpbHRlcik7XG5cbiAgICAgIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIHN0YXRlLmxheWVyRGF0YVtpXSk7XG5cbiAgICAgIG5ld0xheWVycy5wdXNoKGxheWVyKTtcbiAgICAgIG5ld0xheWVyRGF0YS5wdXNoKGxheWVyRGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xheWVycy5wdXNoKG9sZExheWVyKTtcbiAgICAgIG5ld0xheWVyRGF0YS5wdXNoKHN0YXRlLmxheWVyRGF0YVtpXSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IG5ld0xheWVycyxcbiAgICBsYXllckRhdGE6IG5ld0xheWVyRGF0YVxuICB9O1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbjxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTKTogUyB7XG4gIC8vIG1lcmdlIGFsbCBhbmltYXRhYmxlIGxheWVyIGRvbWFpbiBhbmQgdXBkYXRlIGdsb2JhbCBjb25maWdcbiAgY29uc3QgYW5pbWF0YWJsZUxheWVycyA9IGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzKHN0YXRlLmxheWVycyk7XG5cbiAgaWYgKCFhbmltYXRhYmxlTGF5ZXJzLmxlbmd0aCkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICAgIGRvbWFpbjogbnVsbCxcbiAgICAgICAgaXNBbmltYXRpbmc6IGZhbHNlLFxuICAgICAgICB0aW1lU3RlcHM6IG51bGwsXG4gICAgICAgIGRlZmF1bHRUaW1lRm9ybWF0OiBudWxsXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGxheWVyRG9tYWlucyA9IGFuaW1hdGFibGVMYXllcnMubWFwKGwgPT4gbC5jb25maWcuYW5pbWF0aW9uLmRvbWFpbiB8fCBbXSk7XG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgbWVyZ2VkRG9tYWluID0gbWVyZ2VUaW1lRG9tYWlucyhsYXllckRvbWFpbnMpO1xuICBjb25zdCBkZWZhdWx0VGltZUZvcm1hdCA9IGdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlcihtZXJnZWREb21haW4pO1xuXG4gIC8vIG1lcmdlIHRpbWVTdGVwc1xuICBsZXQgbWVyZ2VkVGltZVN0ZXBzOiBudW1iZXJbXSB8IG51bGwgPSB1bmlxPG51bWJlcj4oXG4gICAgYW5pbWF0YWJsZUxheWVycy5yZWR1Y2UoKGFjY3UsIGxheWVyKSA9PiB7XG4gICAgICBhY2N1LnB1c2goLi4uKGxheWVyLmNvbmZpZy5hbmltYXRpb24udGltZVN0ZXBzIHx8IFtdKSk7XG4gICAgICByZXR1cm4gYWNjdTtcbiAgICB9LCBbXSlcbiAgKS5zb3J0KCk7XG5cbiAgbWVyZ2VkVGltZVN0ZXBzID0gbWVyZ2VkVGltZVN0ZXBzLmxlbmd0aCA/IG1lcmdlZFRpbWVTdGVwcyA6IG51bGw7XG5cbiAgLy8gVE9ETzogYmV0dGVyIGhhbmRsaW5nIG9mIGR1cmF0aW9uIGNhbGN1bGF0aW9uXG4gIGNvbnN0IGR1cmF0aW9uID0gbWVyZ2VkVGltZVN0ZXBzXG4gICAgPyAoQkFTRV9TUEVFRCAqICgxMDAwIC8gRlBTKSkgLyBtZXJnZWRUaW1lU3RlcHMubGVuZ3RoIC8gKHN0YXRlLmFuaW1hdGlvbkNvbmZpZy5zcGVlZCB8fCAxKVxuICAgIDogbnVsbDtcblxuICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICBkb21haW46IG1lcmdlZERvbWFpbixcbiAgICAgIGRlZmF1bHRUaW1lRm9ybWF0LFxuICAgICAgZHVyYXRpb24sXG4gICAgICB0aW1lU3RlcHM6IG1lcmdlZFRpbWVTdGVwc1xuICAgIH1cbiAgfTtcblxuICAvLyByZXNldCBjdXJyZW50VGltZSBiYXNlZCBvbiBuZXcgZG9tYWluXG4gIGNvbnN0IHN5bmNlZEZpbHRlciA9IHN0YXRlLmZpbHRlcnM/LmZpbmQoZiA9PiAoZiBhcyBUaW1lUmFuZ2VGaWx0ZXIpLnN5bmNlZFdpdGhMYXllclRpbWVsaW5lKSBhc1xuICAgIHwgVGltZVJhbmdlRmlsdGVyXG4gICAgfCB1bmRlZmluZWQ7XG5cbiAgLy8gaWYgc3luY2VkIGZpbHRlciBleGlzdCB3ZWUgbmVlZCB0byBtZXJnZSBhbmltYXRpb25Db25maWcgYW5kIGZpbHRlciBkb21haW5zXG4gIC8vIGFuZCB2YWxpZGF0ZSB0aGUgY3VycmVudCB0aW1lIGFnYWluc3QgdGhlIG5ldyBtZXJnZWQgZG9tYWluXG4gIGNvbnN0IG5ld0FuaW1hdGlvbkRvbWFpbiA9IHN5bmNlZEZpbHRlclxuICAgID8gbWVyZ2VUaW1lRG9tYWlucyhbbWVyZ2VkRG9tYWluLCBzeW5jZWRGaWx0ZXIuZG9tYWluXSlcbiAgICA6IG1lcmdlZERvbWFpbjtcbiAgY29uc3QgY3VycmVudFRpbWUgPSBpc0luUmFuZ2Uoc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmN1cnJlbnRUaW1lLCBuZXdBbmltYXRpb25Eb21haW4pXG4gICAgPyBzdGF0ZS5hbmltYXRpb25Db25maWcuY3VycmVudFRpbWVcbiAgICA6IG5ld0FuaW1hdGlvbkRvbWFpblswXTtcblxuICBpZiAoY3VycmVudFRpbWUgIT09IHN0YXRlLmFuaW1hdGlvbkNvbmZpZy5jdXJyZW50VGltZSkge1xuICAgIC8vIGlmIGN1cnJlbnRUaW1lIGNoYW5nZWQsIG5lZWQgdG8gY2FsbCBhbmltYXRpb25UaW1lVXBkYXRlciB0byByZSBjYWxsIGZvcm1hdExheWVyRGF0YVxuICAgIHJldHVybiBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyKG5leHRTdGF0ZSwge3ZhbHVlOiBjdXJyZW50VGltZX0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgdGhlIHN0YXR1cyBvZiB0aGUgZWRpdG9yXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3Qgc2V0RWRpdG9yTW9kZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge21vZGV9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RWRpdG9yTW9kZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBlZGl0b3I6IHtcbiAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgbW9kZSxcbiAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGxcbiAgfVxufSk7XG5cbi8vIGNvbnN0IGZlYXR1cmVUb0ZpbHRlclZhbHVlID0gKGZlYXR1cmUpID0+ICh7Li4uZmVhdHVyZSwgaWQ6IGZlYXR1cmUuaWR9KTtcbi8qKlxuICogVXBkYXRlIGVkaXRvciBmZWF0dXJlc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZlYXR1cmVzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZXMgPSBbXX06IFZpc1N0YXRlQWN0aW9ucy5TZXRGZWF0dXJlc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgbGFzdEZlYXR1cmUgPSBmZWF0dXJlcy5sZW5ndGggJiYgZmVhdHVyZXNbZmVhdHVyZXMubGVuZ3RoIC0gMV07XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAvLyBvbmx5IHNhdmUgbm9uZSBmaWx0ZXIgZmVhdHVyZXMgdG8gZWRpdG9yXG4gICAgICBmZWF0dXJlczogZmVhdHVyZXMuZmlsdGVyKGYgPT4gIWdldEZpbHRlcklkSW5GZWF0dXJlKGYpKSxcbiAgICAgIG1vZGU6IGxhc3RGZWF0dXJlICYmIGxhc3RGZWF0dXJlLnByb3BlcnRpZXM/LmlzQ2xvc2VkID8gRURJVE9SX01PREVTLkVESVQgOiBzdGF0ZS5lZGl0b3IubW9kZVxuICAgIH1cbiAgfTtcblxuICAvLyBSZXRyaWV2ZSBleGlzdGluZyBmZWF0dXJlXG4gIGNvbnN0IHtzZWxlY3RlZEZlYXR1cmV9ID0gc3RhdGUuZWRpdG9yO1xuXG4gIC8vIElmIG5vIGZlYXR1cmUgaXMgc2VsZWN0ZWQgd2UgY2FuIHNpbXBseSByZXR1cm4gc2luY2Ugbm8gb3BlcmF0aW9uc1xuICBpZiAoIXNlbGVjdGVkRmVhdHVyZSkge1xuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfVxuXG4gIC8vIFRPRE86IGNoZWNrIGlmIHRoZSBmZWF0dXJlIGhhcyBjaGFuZ2VkXG4gIGNvbnN0IGZlYXR1cmUgPSBmZWF0dXJlcy5maW5kKGYgPT4gZi5pZCA9PT0gc2VsZWN0ZWRGZWF0dXJlLmlkKTtcblxuICAvLyBpZiBmZWF0dXJlIGlzIHBhcnQgb2YgYSBmaWx0ZXJcbiAgY29uc3QgZmlsdGVySWQgPSBmZWF0dXJlICYmIGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpO1xuICBpZiAoZmlsdGVySWQgJiYgZmVhdHVyZSkge1xuICAgIC8vIGFkZCBiYm94IGZvciBwb2x5Z29uIGZpbHRlciB0byBzcGVlZCB1cCBmaWx0ZXJpbmdcbiAgICBpZiAoZmVhdHVyZS5wcm9wZXJ0aWVzKSBmZWF0dXJlLnByb3BlcnRpZXMuYmJveCA9IGJib3goZmVhdHVyZSk7XG4gICAgY29uc3QgZmVhdHVyZVZhbHVlID0gZmVhdHVyZVRvRmlsdGVyVmFsdWUoZmVhdHVyZSwgZmlsdGVySWQpO1xuICAgIGNvbnN0IGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGZpbCA9PiBmaWwuaWQgPT09IGZpbHRlcklkKTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkeDogZmlsdGVySWR4LFxuICAgICAgcHJvcDogJ3ZhbHVlJyxcbiAgICAgIHZhbHVlOiBmZWF0dXJlVmFsdWVcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBTZXQgdGhlIGN1cnJlbnQgc2VsZWN0ZWQgZmVhdHVyZVxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3Qgc2V0U2VsZWN0ZWRGZWF0dXJlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZSwgc2VsZWN0aW9uQ29udGV4dH06IFZpc1N0YXRlQWN0aW9ucy5TZXRTZWxlY3RlZEZlYXR1cmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIC8vIGFkZCBiYm94IGZvciBwb2x5Z29uIGZpbHRlciB0byBzcGVlZCB1cCBmaWx0ZXJpbmdcbiAgaWYgKGZlYXR1cmUgJiYgZmVhdHVyZS5wcm9wZXJ0aWVzKSBmZWF0dXJlLnByb3BlcnRpZXMuYmJveCA9IGJib3goZmVhdHVyZSk7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBzZWxlY3RlZEZlYXR1cmU6IGZlYXR1cmUsXG4gICAgICBzZWxlY3Rpb25Db250ZXh0XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBEZWxldGUgZXhpc3RpbmcgZmVhdHVyZSBmcm9tIGZpbHRlcnNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxldGVGZWF0dXJlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZX06IFZpc1N0YXRlQWN0aW9ucy5EZWxldGVGZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWZlYXR1cmUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICAgIH1cbiAgfTtcblxuICBpZiAoZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSkpIHtcbiAgICBjb25zdCBmaWx0ZXJJZHggPSBuZXdTdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpKTtcblxuICAgIHJldHVybiBmaWx0ZXJJZHggPiAtMSA/IHJlbW92ZUZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtpZHg6IGZpbHRlcklkeH0pIDogbmV3U3RhdGU7XG4gIH1cblxuICAvLyBtb2RpZnkgZWRpdG9yIG9iamVjdFxuICBjb25zdCBuZXdFZGl0b3IgPSB7XG4gICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgIGZlYXR1cmVzOiBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMuZmlsdGVyKGYgPT4gZi5pZCAhPT0gZmVhdHVyZS5pZCksXG4gICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IG5ld0VkaXRvclxuICB9O1xufVxuXG4vKipcbiAqIFRvZ2dsZSBmZWF0dXJlIGFzIGxheWVyIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgcGF5bG9hZDogVmlzU3RhdGVBY3Rpb25zLlNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2xheWVyLCBmZWF0dXJlfSA9IHBheWxvYWQ7XG4gIGNvbnN0IGZpbHRlcklkID0gZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSk7XG5cbiAgLy8gbGV0IG5ld0ZpbHRlciA9IG51bGw7XG4gIGxldCBmaWx0ZXJJZHg7XG4gIGxldCBuZXdMYXllcklkID0gW2xheWVyLmlkXTtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIC8vIElmIHBvbHlnb24gZmlsdGVyIGFscmVhZHkgZXhpc3RzLCB3ZSBuZWVkIHRvIGZpbmQgb3V0IGlmIHRoZSBjdXJyZW50IGxheWVyIGlzIGFscmVhZHkgaW5jbHVkZWRcbiAgaWYgKGZpbHRlcklkKSB7XG4gICAgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG5cbiAgICBpZiAoIXN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSkge1xuICAgICAgLy8gd2hhdCBpZiBmaWx0ZXIgZG9lc24ndCBleGlzdD8uLi4gbm90IHBvc3NpYmxlLlxuICAgICAgLy8gYmVjYXVzZSBmZWF0dXJlcyBpbiB0aGUgZWRpdG9yIGlzIHBhc3NlZCBpbiBmcm9tIGZpbHRlcnMgYW5kIGVkaXRvcnMuXG4gICAgICAvLyBidXQgd2Ugd2lsbCBtb3ZlIHRoaXMgZmVhdHVyZSBiYWNrIHRvIGVkaXRvciBqdXN0IGluIGNhc2VcbiAgICAgIGNvbnN0IG5vbmVGaWx0ZXJGZWF0dXJlID0ge1xuICAgICAgICAuLi5mZWF0dXJlLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgLi4uZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICAgIGZpbHRlcklkOiBudWxsXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBlZGl0b3I6IHtcbiAgICAgICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAgICAgZmVhdHVyZXM6IFsuLi5zdGF0ZS5lZGl0b3IuZmVhdHVyZXMsIG5vbmVGaWx0ZXJGZWF0dXJlXSxcbiAgICAgICAgICBzZWxlY3RlZEZlYXR1cmU6IG5vbmVGaWx0ZXJGZWF0dXJlXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XTtcbiAgICBjb25zdCB7bGF5ZXJJZCA9IFtdfSA9IGZpbHRlcjtcbiAgICBjb25zdCBpc0xheWVySW5jbHVkZWQgPSBsYXllcklkLmluY2x1ZGVzKGxheWVyLmlkKTtcblxuICAgIG5ld0xheWVySWQgPSBpc0xheWVySW5jbHVkZWRcbiAgICAgID8gLy8gaWYgbGF5ZXIgaXMgaW5jbHVkZWQsIHJlbW92ZSBpdFxuICAgICAgICBsYXllcklkLmZpbHRlcihsID0+IGwgIT09IGxheWVyLmlkKVxuICAgICAgOiBbLi4ubGF5ZXJJZCwgbGF5ZXIuaWRdO1xuICB9IGVsc2Uge1xuICAgIC8vIGlmIHdlIGhhdmVuJ3QgY3JlYXRlIHRoZSBwb2x5Z29uIGZpbHRlciwgY3JlYXRlIGl0XG4gICAgY29uc3QgbmV3RmlsdGVyID0gZ2VuZXJhdGVQb2x5Z29uRmlsdGVyKFtdLCBmZWF0dXJlKTtcbiAgICBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmxlbmd0aDtcblxuICAgIC8vIGFkZCBmZWF0dXJlLCByZW1vdmUgZmVhdHVyZSBmcm9tIGVpZHRvclxuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBmaWx0ZXJzOiBbLi4uc3RhdGUuZmlsdGVycywgbmV3RmlsdGVyXSxcbiAgICAgIGVkaXRvcjoge1xuICAgICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAgIGZlYXR1cmVzOiBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMuZmlsdGVyKGYgPT4gZi5pZCAhPT0gZmVhdHVyZS5pZCksXG4gICAgICAgIHNlbGVjdGVkRmVhdHVyZTogbmV3RmlsdGVyLnZhbHVlXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgcHJvcDogJ2xheWVySWQnLFxuICAgIHZhbHVlOiBuZXdMYXllcklkXG4gIH0pO1xufVxuXG4vKipcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb3J0VGFibGVDb2x1bW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGNvbHVtbiwgbW9kZX06IFZpc1N0YXRlQWN0aW9ucy5Tb3J0VGFibGVDb2x1bW5VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IHNvcnRNb2RlID0gbW9kZTtcbiAgaWYgKCFzb3J0TW9kZSkge1xuICAgIGNvbnN0IGN1cnJlbnRNb2RlID0gZ2V0KGRhdGFzZXQsIFsnc29ydENvbHVtbicsIGNvbHVtbl0pO1xuICAgIC8vIEB0cy1pZ25vcmUgLSBzaG91bGQgYmUgZml4YWJsZSBpbiBhIFRTIGZpbGVcbiAgICBzb3J0TW9kZSA9IGN1cnJlbnRNb2RlXG4gICAgICA/IE9iamVjdC5rZXlzKFNPUlRfT1JERVIpLmZpbmQobSA9PiBtICE9PSBjdXJyZW50TW9kZSlcbiAgICAgIDogU09SVF9PUkRFUi5BU0NFTkRJTkc7XG4gIH1cblxuICBjb25zdCBzb3J0ZWQgPSBzb3J0RGF0YXNldEJ5Q29sdW1uKGRhdGFzZXQsIGNvbHVtbiwgc29ydE1vZGUpO1xuICByZXR1cm4gc2V0KFsnZGF0YXNldHMnLCBkYXRhSWRdLCBzb3J0ZWQsIHN0YXRlKTtcbn1cblxuLyoqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGluVGFibGVDb2x1bW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGNvbHVtbn06IFZpc1N0YXRlQWN0aW9ucy5QaW5UYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBuZXdEYXRhc2V0ID0gcGluVGFibGVDb2x1bW5zKGRhdGFzZXQsIGNvbHVtbik7XG5cbiAgcmV0dXJuIHNldChbJ2RhdGFzZXRzJywgZGF0YUlkXSwgbmV3RGF0YXNldCwgc3RhdGUpO1xufVxuXG4vKipcbiAqIENvcHkgY29sdW1uIGNvbnRlbnQgYXMgc3RyaW5nc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHlUYWJsZUNvbHVtblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgY29sdW1ufTogVmlzU3RhdGVBY3Rpb25zLkNvcHlUYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBmaWVsZElkeCA9IGRhdGFzZXQuZmllbGRzLmZpbmRJbmRleChmID0+IGYubmFtZSA9PT0gY29sdW1uKTtcbiAgaWYgKGZpZWxkSWR4IDwgMCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7dHlwZX0gPSBkYXRhc2V0LmZpZWxkc1tmaWVsZElkeF07XG4gIGNvbnN0IHRleHQgPSBkYXRhc2V0LmRhdGFDb250YWluZXJcbiAgICAubWFwKHJvdyA9PiBwYXJzZUZpZWxkVmFsdWUocm93LnZhbHVlQXQoZmllbGRJZHgpLCB0eXBlKSwgdHJ1ZSlcbiAgICAuam9pbignXFxuJyk7XG5cbiAgY29weSh0ZXh0KTtcblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogU2V0IGRpc3BsYXkgZm9ybWF0IGZyb20gY29sdW1ucyBmcm9tIHVzZXIgc2VsZWN0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0Q29sdW1uRGlzcGxheUZvcm1hdFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgZm9ybWF0c306IFZpc1N0YXRlQWN0aW9ucy5TZXRDb2x1bW5EaXNwbGF5Rm9ybWF0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBuZXdGaWVsZHMgPSBkYXRhc2V0LmZpZWxkcztcbiAgT2JqZWN0LmtleXMoZm9ybWF0cykuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgIGNvbnN0IGZpZWxkSWR4ID0gZGF0YXNldC5maWVsZHMuZmluZEluZGV4KGYgPT4gZi5uYW1lID09PSBjb2x1bW4pO1xuICAgIGlmIChmaWVsZElkeCA+PSAwKSB7XG4gICAgICBjb25zdCBkaXNwbGF5Rm9ybWF0ID0gZm9ybWF0c1tjb2x1bW5dO1xuICAgICAgY29uc3QgZmllbGQgPSBuZXdGaWVsZHNbZmllbGRJZHhdO1xuICAgICAgbmV3RmllbGRzID0gc3dhcF8obWVyZ2VfKHtkaXNwbGF5Rm9ybWF0fSkoZmllbGQpIGFzIHtpZDogc3RyaW5nfSkoXG4gICAgICAgIG5ld0ZpZWxkcyBhcyB7aWQ6IHN0cmluZ31bXVxuICAgICAgKSBhcyBGaWVsZFtdO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgbmV3RGF0YXNldCA9IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7ZmllbGRzOiBuZXdGaWVsZHMgYXMgRmllbGRbXX0pO1xuICBsZXQgbmV3U3RhdGUgPSBwaWNrXygnZGF0YXNldHMnKShtZXJnZV8oe1tkYXRhSWRdOiBuZXdEYXRhc2V0fSkpKHN0YXRlKTtcblxuICAvLyB1cGRhdGUgY29sb3JGaWVsZCBkaXNwbGF5Rm9ybWF0XG4gIG5ld1N0YXRlID0ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGxheWVyczogbmV3U3RhdGUubGF5ZXJzLm1hcChsYXllciA9PlxuICAgICAgbGF5ZXIuY29uZmlnPy5jb2xvckZpZWxkPy5uYW1lICYmIGxheWVyLmNvbmZpZy5jb2xvckZpZWxkLm5hbWUgaW4gZm9ybWF0c1xuICAgICAgICA/IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICAgIGNvbG9yRmllbGQ6IHtcbiAgICAgICAgICAgICAgLi4ubGF5ZXIuY29uZmlnLmNvbG9yRmllbGQsXG4gICAgICAgICAgICAgIGRpc3BsYXlGb3JtYXQ6IGZvcm1hdHNbbGF5ZXIuY29uZmlnLmNvbG9yRmllbGQubmFtZV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICA6IGxheWVyXG4gICAgKVxuICB9O1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZWRpdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUVkaXRvclZpc2liaWxpdHlVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICB2aXNpYmxlOiAhc3RhdGUuZWRpdG9yLnZpc2libGVcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR4LCBjb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgQ29uc29sZS5lcnJvcihgZmlsdGVycy4ke2lkeH0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChvbGRGaWx0ZXIudHlwZSAhPT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSkge1xuICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICBgc2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZyBjYW4gb25seSBiZSBjYWxsZWQgdG8gdXBkYXRlIGEgdGltZSBmaWx0ZXIuIGNoZWNrIGZpbHRlci50eXBlID09PSAndGltZVJhbmdlJ2BcbiAgICApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZXMgPSBjaGVja1RpbWVDb25maWdBcmdzKGNvbmZpZyk7XG5cbiAgcmV0dXJuIHBpY2tfKCdmaWx0ZXJzJykoc3dhcF8obWVyZ2VfKHVwZGF0ZXMpKG9sZEZpbHRlcikpKShzdGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrVGltZUNvbmZpZ0FyZ3MoY29uZmlnKSB7XG4gIGNvbnN0IGFsbG93ZWQgPSBbJ3RpbWVGb3JtYXQnLCAndGltZXpvbmUnXTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGNvbmZpZykucmVkdWNlKChhY2N1LCBwcm9wKSA9PiB7XG4gICAgaWYgKCFhbGxvd2VkLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICBDb25zb2xlLmVycm9yKFxuICAgICAgICBgc2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnIHRha2VzIHRpbWVGb3JtYXQgYW5kL29yIHRpbWV6b25lIGFzIG9wdGlvbnMsIGZvdW5kICR7cHJvcH1gXG4gICAgICApO1xuICAgICAgcmV0dXJuIGFjY3U7XG4gICAgfVxuXG4gICAgLy8gaGVyZSB3ZSBhcmUgTk9UIGNoZWNraW5nIGlmIHRpbWV6b25lIG9yIHRpbWVGb3JtYXQgaW5wdXQgaXMgdmFsaWRcbiAgICBhY2N1W3Byb3BdID0gY29uZmlnW3Byb3BdO1xuICAgIHJldHVybiBhY2N1O1xuICB9LCB7fSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGVkaXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7Y29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLlNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWNvbmZpZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB1cGRhdGVzID0gY2hlY2tUaW1lQ29uZmlnQXJncyhjb25maWcpO1xuICByZXR1cm4gcGlja18oJ2FuaW1hdGlvbkNvbmZpZycpKG1lcmdlXyh1cGRhdGVzKSkoc3RhdGUpO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBlZGl0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZVVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZUFjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtldmVudCwgbGF5ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCB7aWQ6IGRlY2tnbExheWVySWQsIGNvdW50fSA9IGV2ZW50O1xuICBpZiAoIWxheWVyKSB7XG4gICAgQ29uc29sZS53YXJuKGBsYXllckZpbHRlcmVkSXRlbXMgbGF5ZXIgZG9lc250IGV4aXN0c2ApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAobGF5ZXIuZmlsdGVyZWRJdGVtQ291bnQ/LltkZWNrZ2xMYXllcklkXSA9PT0gY291bnQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsYXllci5maWx0ZXJlZEl0ZW1Db3VudCA9IHtcbiAgICAuLi5sYXllci5maWx0ZXJlZEl0ZW1Db3VudCxcbiAgICBbZGVja2dsTGF5ZXJJZF06IGNvdW50XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN3YXBfKGxheWVyKShzdGF0ZS5sYXllcnMpXG4gIH07XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtc3RhdGVtZW50c1xuZXhwb3J0IGZ1bmN0aW9uIHN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2lkeDogZmlsdGVySWR4LCBlbmFibGUgPSBmYWxzZX0gPSBhY3Rpb247XG5cbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgbGV0IG5ld0ZpbHRlciA9IGZpbHRlcjtcblxuICAvLyBpZiB3ZSBlbmFibGUgc3luYyB3ZSBhcmUgZ29pbmcgdG8gbWVyZ2UgZmlsdGVyIGFuZCBhbmltYXRpb25Db25maWcgZG9tYWlucyBhbmQgc3RvcmUgaW50byBmaWx0ZXIuZG9tYWluXG4gIGlmIChlbmFibGUpIHtcbiAgICBjb25zdCBhbmltYXRhYmxlTGF5ZXJzID0gZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMobmV3U3RhdGUubGF5ZXJzKTtcbiAgICAvLyBpZiBubyBhbmltYXRhYmxlTGF5ZXJzIGFyZSBwcmVzZW50IHdlIHNpbXBseSByZXR1cm5cbiAgICBpZiAoIWFuaW1hdGFibGVMYXllcnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbmV3U3RhdGU7XG4gICAgfVxuXG4gICAgY29uc3QgaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyA9IGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMoYW5pbWF0YWJsZUxheWVycyk7XG4gICAgY29uc3QgaGFzSW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVyID0gQm9vbGVhbihpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLmxlbmd0aCk7XG5cbiAgICBjb25zdCBuZXdGaWx0ZXJEb21haW4gPSBtZXJnZVRpbWVEb21haW5zKFtmaWx0ZXIuZG9tYWluLCBuZXdTdGF0ZS5hbmltYXRpb25Db25maWcuZG9tYWluXSk7XG5cbiAgICAvLyB3ZSBvbmx5IHVwZGF0ZSBhbmltYXRpb25XaW5kb3cgaWYgd2UgaGF2ZSBpbnRlcnZhbCBiYXNlZCBhbmltYXRpb24gbGF5ZXJzIHdpdGggZGVmaW5lZCBpbnRlcnZhbHMgYW5kIHRoZSBjdXJyZW50IGZpbHRlciBhbmltYXRpb24gd2luZG93IGlzIG5vdCBpbnRlcnZhbFxuICAgIGlmIChoYXNJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXIpIHtcbiAgICAgIGlmIChmaWx0ZXIuYW5pbWF0aW9uV2luZG93ICE9PSBBTklNQVRJT05fV0lORE9XLmludGVydmFsKSB7XG4gICAgICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgICAgIGlkOiBmaWx0ZXIuaWQsXG4gICAgICAgICAgYW5pbWF0aW9uV2luZG93OiBBTklNQVRJT05fV0lORE9XLmludGVydmFsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gICAgICAvLyBhZGp1c3QgdGltZSBmaWx0ZXIgaW50ZXJ2YWxcbiAgICAgIG5ld0ZpbHRlciA9IGFkanVzdFRpbWVGaWx0ZXJJbnRlcnZhbChuZXdTdGF0ZSwgbmV3RmlsdGVyKTtcblxuICAgICAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgICAgIG5ld1N0YXRlID0ge1xuICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gICAgICB9O1xuICAgIH1cblxuICAgIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgICAvLyBhZGp1c3QgdmFsdWUgYmFzZWQgb24gbmV3IGRvbWFpblxuICAgIGNvbnN0IG5ld0ZpbHRlclZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihcbiAgICAgIG5ld0ZpbHRlci5hbmltYXRpb25XaW5kb3cgPT09IEFOSU1BVElPTl9XSU5ET1cuaW50ZXJ2YWxcbiAgICAgICAgPyBbbmV3RmlsdGVyRG9tYWluWzBdLCBuZXdGaWx0ZXJEb21haW5bMF1dXG4gICAgICAgIDogbmV3RmlsdGVyRG9tYWluLFxuICAgICAgey4uLm5ld0ZpbHRlciwgZG9tYWluOiBuZXdGaWx0ZXJEb21haW59XG4gICAgKTtcblxuICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgICBwcm9wOiAndmFsdWUnLFxuICAgICAgdmFsdWU6IG5ld0ZpbHRlclZhbHVlXG4gICAgfSk7XG5cbiAgICBuZXdGaWx0ZXIgPSB7XG4gICAgICAuLi4obmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlciksXG4gICAgICBzeW5jZWRXaXRoTGF5ZXJUaW1lbGluZTogdHJ1ZVxuICAgIH07XG5cbiAgICAvLyByZXBsYWNlIGZpbHRlciBpbiBzdGF0ZSB3aXRoIG5ld0ZpbHRlclxuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5ld0ZpbHRlcikobmV3U3RhdGUuZmlsdGVycylcbiAgICB9O1xuXG4gICAgbmV3U3RhdGUgPSBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWQ6IG5ld0ZpbHRlci5pZCxcbiAgICAgIG1vZGU6IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlcilcbiAgICB9KTtcblxuICAgIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgICAvLyBzZXQgdGhlIGFuaW1hdGlvbiBjb25maWcgdmFsdWUgdG8gbWF0Y2ggZmlsdGVyIHZhbHVlXG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIHZhbHVlOiBuZXdGaWx0ZXIudmFsdWVbbmV3RmlsdGVyLnN5bmNUaW1lbGluZU1vZGVdXG4gICAgfSk7XG4gIH1cblxuICAvLyBzZXQgZG9tYWluIGFuZCBzdGVwXG4gIG5ld0ZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgc3luY2VkV2l0aExheWVyVGltZWxpbmU6IGZhbHNlXG4gIH07XG5cbiAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgbmV3U3RhdGUgPSB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgLy8gcmVzZXQgc3luYyB0aW1lbGluZSBtb2RlXG4gIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZDogbmV3RmlsdGVyLmlkLFxuICAgIG1vZGU6IFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kXG4gIH0pO1xuXG4gIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgLy8gcmVzZXQgZmlsdGVyIHZhbHVlXG4gIGNvbnN0IG5ld0ZpbHRlclZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihuZXdGaWx0ZXIuZG9tYWluLCBuZXdGaWx0ZXIpO1xuXG4gIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICd2YWx1ZScsXG4gICAgdmFsdWU6IG5ld0ZpbHRlclZhbHVlXG4gIH0pO1xuXG4gIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZDogbmV3RmlsdGVyLmlkLFxuICAgIG1vZGU6IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlcilcbiAgfSk7XG5cbiAgLy8gcmVzZXQgYW5pbWF0aW9uIGNvbmZpZyBjdXJyZW50IHRpbWUgdG9cbiAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICB2YWx1ZTogbmV3U3RhdGUuYW5pbWF0aW9uQ29uZmlnLmRvbWFpbj8uWzBdID8/IG51bGxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuc2V0VGltZUZpbHRlclN5bmNUaW1lbGluZU1vZGVBY3Rpb25cbikge1xuICBjb25zdCB7aWQ6IGZpbHRlcklkLCBtb2RlOiBzeW5jVGltZWxpbmVNb2RlfSA9IGFjdGlvbjtcblxuICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKGZpbHRlcklkeCA9PT0gLTEpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gIGlmICghdmFsaWRhdGVTeW5jQW5pbWF0aW9uTW9kZShmaWx0ZXIsIHN5bmNUaW1lbGluZU1vZGUpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICBzeW5jVGltZWxpbmVNb2RlXG4gIH07XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKHN0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgcmV0dXJuIGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXIobmV3U3RhdGUsIGZpbHRlcklkeCk7XG59XG5cbmZ1bmN0aW9uIGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgZmlsdGVySWR4OiBudW1iZXIpOiBTIHtcbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdO1xuICBpZiAoKGZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXIpLnN5bmNlZFdpdGhMYXllclRpbWVsaW5lKSB7XG4gICAgY29uc3QgdGltZWxpbmVWYWx1ZSA9IGdldFRpbWVsaW5lVmFsdWVGcm9tRmlsdGVyKGZpbHRlcik7XG4gICAgY29uc3QgdmFsdWUgPSBzdGF0ZS5hbmltYXRpb25Db25maWcudGltZVN0ZXBzXG4gICAgICA/IHNuYXBUb01hcmtzKHRpbWVsaW5lVmFsdWUsIHN0YXRlLmFuaW1hdGlvbkNvbmZpZy50aW1lU3RlcHMpXG4gICAgICA6IHRpbWVsaW5lVmFsdWU7XG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIoc3RhdGUsIHt2YWx1ZX0pO1xuICB9XG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZnVuY3Rpb24gZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIoZmlsdGVyKSB7XG4gIHJldHVybiBmaWx0ZXIudmFsdWVbZmlsdGVyLnN5bmNUaW1lbGluZU1vZGVdO1xufVxuXG5mdW5jdGlvbiBnZXRTeW5jQW5pbWF0aW9uTW9kZShmaWx0ZXI6IFRpbWVSYW5nZUZpbHRlcikge1xuICBpZiAoZmlsdGVyLmFuaW1hdGlvbldpbmRvdyA9PT0gQU5JTUFUSU9OX1dJTkRPVy5mcmVlKSB7XG4gICAgcmV0dXJuIGZpbHRlci5zeW5jVGltZWxpbmVNb2RlID8/IFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kO1xuICB9XG5cbiAgcmV0dXJuIFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN5bmNBbmltYXRpb25Nb2RlKGZpbHRlcjogVGltZVJhbmdlRmlsdGVyLCBuZXdNb2RlOiBudW1iZXIpIHtcbiAgcmV0dXJuICEoXG4gICAgZmlsdGVyLmFuaW1hdGlvbldpbmRvdyAhPT0gQU5JTUFUSU9OX1dJTkRPVy5mcmVlICYmIG5ld01vZGUgPT09IFNZTkNfVElNRUxJTkVfTU9ERVMuc3RhcnRcbiAgKTtcbn1cblxuZnVuY3Rpb24gYWRqdXN0VGltZUZpbHRlckludGVydmFsKHN0YXRlLCBmaWx0ZXIpIHtcbiAgY29uc3QgaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyA9IGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMoc3RhdGUubGF5ZXJzKTtcblxuICBsZXQgaW50ZXJ2YWw6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBpZiAoaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycy5sZW5ndGggPiAwKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IGludGVydmFsSW5kZXggPSBpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLnJlZHVjZSgoY3VycmVudEluZGV4LCBsKSA9PiB7XG4gICAgICBpZiAobC5tZXRhLnRhcmdldFRpbWVJbnRlcnZhbCkge1xuICAgICAgICBjb25zdCBuZXdJbmRleCA9IFRJTUVfSU5URVJWQUxTX09SREVSRUQuZmluZEluZGV4KGkgPT4gaSA9PT0gbC5tZXRhLnRhcmdldFRpbWVJbnRlcnZhbCk7XG4gICAgICAgIHJldHVybiBuZXdJbmRleCA+IC0xICYmIG5ld0luZGV4IDwgY3VycmVudEluZGV4ID8gbmV3SW5kZXggOiBjdXJyZW50SW5kZXg7XG4gICAgICB9XG4gICAgfSwgVElNRV9JTlRFUlZBTFNfT1JERVJFRC5sZW5ndGggLSAxKTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgaGV4VGlsZUludGVydmFsID0gVElNRV9JTlRFUlZBTFNfT1JERVJFRFtpbnRlcnZhbEluZGV4XTtcbiAgICBpbnRlcnZhbCA9IExheWVyVG9GaWx0ZXJUaW1lSW50ZXJ2YWxbaGV4VGlsZUludGVydmFsXTtcbiAgfVxuXG4gIGlmICghaW50ZXJ2YWwpIHtcbiAgICByZXR1cm4gZmlsdGVyO1xuICB9XG5cbiAgLy8gYWRqdXN0IGZpbHRlclxuICBjb25zdCB0aW1lRm9ybWF0ID0gZ2V0RGVmYXVsdFRpbWVGb3JtYXQoaW50ZXJ2YWwpO1xuICBjb25zdCB1cGRhdGVkUGxvdFR5cGUgPSB7Li4uZmlsdGVyLnBsb3RUeXBlLCBpbnRlcnZhbCwgdGltZUZvcm1hdH07XG4gIGNvbnN0IG5ld0ZpbHRlciA9IHVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZShmaWx0ZXIsIHVwZGF0ZWRQbG90VHlwZSwgc3RhdGUuZGF0YXNldHMpO1xuICByZXR1cm4gYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyhzdGF0ZSwgbmV3RmlsdGVyKTtcbn1cblxuLy8gRmluZCBkYXRhSWQgZnJvbSBhIHNhdmVkIHZpc1N0YXRlIHByb3BlcnR5OlxuLy8gbGF5ZXJzLCBmaWx0ZXJzLCBpbnRlcmFjdGlvbnMsIGxheWVyQmxlbmRpbmcsIG92ZXJsYXlCbGVuZGluZywgc3BsaXRNYXBzLCBhbmltYXRpb25Db25maWcsIGVkaXRvclxuLy8gcmVwbGFjZSBpdCB3aXRoIGFub3RoZXIgZGF0YUlkXG5mdW5jdGlvbiBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHModmFsdWU6IGFueSwgZGF0YUlkOiBzdHJpbmcsIGRhdGFJZFRvUmVwbGFjZTogc3RyaW5nKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIC8vIGZvciBsYXllcnMsIGZpbHRlcnMsIGNhbGwgZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIG9uIGVhY2ggaXRlbSBpbiBhcnJheVxuICAgIGNvbnN0IHJlcGxhY2VkID0gdmFsdWVcbiAgICAgIC5tYXAodiA9PiBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHModiwgZGF0YUlkLCBkYXRhSWRUb1JlcGxhY2UpKVxuICAgICAgLmZpbHRlcihkID0+IGQpO1xuICAgIHJldHVybiByZXBsYWNlZC5sZW5ndGggPyByZXBsYWNlZCA6IG51bGw7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZS5kYXRhSWQgPT09ICdzdHJpbmcnICYmIHZhbHVlLmRhdGFJZCA9PT0gZGF0YUlkKSB7XG4gICAgLy8gb3RoZXJzXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgZGF0YUlkOiBkYXRhSWRUb1JlcGxhY2VcbiAgICB9O1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUuZGF0YUlkKSAmJiB2YWx1ZS5kYXRhSWQuaW5jbHVkZXMoZGF0YUlkKSkge1xuICAgIC8vIGZpbHRlclxuICAgIHJldHVybiB7XG4gICAgICAuLi52YWx1ZSxcbiAgICAgIGRhdGFJZDogdmFsdWUuZGF0YUlkLm1hcChkID0+IChkID09PSBkYXRhSWQgPyBkYXRhSWRUb1JlcGxhY2UgOiBkKSlcbiAgICB9O1xuICB9IGVsc2UgaWYgKHZhbHVlLmNvbmZpZz8uZGF0YUlkICYmIHZhbHVlLmNvbmZpZz8uZGF0YUlkID09PSBkYXRhSWQpIHtcbiAgICAvLyBsYXllclxuICAgIHJldHVybiB7XG4gICAgICAuLi52YWx1ZSxcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICAuLi52YWx1ZS5jb25maWcsXG4gICAgICAgIGRhdGFJZDogZGF0YUlkVG9SZXBsYWNlXG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlIGlmIChpc09iamVjdCh2YWx1ZSkgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBkYXRhSWQpKSB7XG4gICAgLy8gZm9yIHZhbHVlIHNhdmVkIGFzIHtbZGF0YUlkXTogey4uLn19XG4gICAgcmV0dXJuIHtbZGF0YUlkVG9SZXBsYWNlXTogdmFsdWVbZGF0YUlkXX07XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLy8gRmluZCBkYXRhc2V0SWRzIGRlcml2ZWQgYSBzYXZlZCB2aXNTdGF0ZSBQcm9wZXJ0eTtcbmZ1bmN0aW9uIGZpbmRDaGlsZERhdGFzZXRJZHModmFsdWUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gZm9yIGxheWVycywgZmlsdGVycywgY2FsbCBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMgb24gZWFjaCBpdGVtIGluIGFycmF5XG4gICAgY29uc3QgY2hpbGREYXRhSWRzID0gdmFsdWUubWFwKGZpbmRDaGlsZERhdGFzZXRJZHMpLmZpbHRlcihkID0+IGQpO1xuICAgIHJldHVybiBjaGlsZERhdGFJZHMubGVuZ3RoID8gY2hpbGREYXRhSWRzIDogbnVsbDtcbiAgfVxuXG4gIC8vIGNoaWxkIGRhdGEgaWQgdXN1YWxseSBzdG9yZXMgaW4gdGhlIGRlcml2ZWQgZGF0YXNldCBpbmZvXG4gIHJldHVybiB2YWx1ZT8ubmV3RGF0YXNldD8uaW5mby5pZCB8fCBudWxsO1xufVxuXG4vLyBtb3ZlZCB1bm1lcmdlZCBsYXllcnMsIGZpbHRlcnMsIGludGVyYWN0aW9uc1xuZnVuY3Rpb24gbW92ZVZhbHVlVG9CZU1lcmdlZChzdGF0ZSwgcHJvcFZhbHVlcywge3Byb3AsIHRvTWVyZ2VQcm9wLCBzYXZlVW5tZXJnZWR9KSB7XG4gIC8vIHJlbW92ZSBwcm9wIHZhbHVlIGZyb20gc3RhdGVcbiAgLy8gVE9ETzogc2hvdWxkIHdlIGFkZCByZW1vdmUgdXBkYXRlciB0byBtZXJnZXIgYXMgd2VsbD9cbiAgaWYgKCFwcm9wVmFsdWVzKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHN0YXRlUmVtb3ZlZCA9XG4gICAgcHJvcCA9PT0gJ2xheWVycydcbiAgICAgID8gcHJvcFZhbHVlcy5yZWR1Y2UoKGFjY3UsIHByb3BWYWx1ZSkgPT4gcmVtb3ZlTGF5ZXJVcGRhdGVyKGFjY3UsIHtpZDogcHJvcFZhbHVlLmlkfSksIHN0YXRlKVxuICAgICAgOiBBcnJheS5pc0FycmF5KHN0YXRlW3Byb3BdKVxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgW3Byb3BdOiBzdGF0ZVtwcm9wXS5maWx0ZXIocCA9PiAhcHJvcFZhbHVlcy5maW5kKHByb3BWYWx1ZSA9PiBwLmlkID09PSBwcm9wVmFsdWUuaWQpKVxuICAgICAgICB9XG4gICAgICA6IC8vIGlmIG5vdCBhcnJheSwgd2Ugd29uJ3QgcmVtb3ZlIGl0LCByZW1vdmUgZGF0YXNldCBzaG91bGQgaGFuZGxlIGl0XG4gICAgICAgIHN0YXRlO1xuXG4gIC8vIG1vdmUgdG8gc3RhdGVUb0JlTWVyZ2VkXG4gIGNvbnN0IHRvQmVNZXJnZWQgPSB7XG4gICAgW3RvTWVyZ2VQcm9wXTogc2F2ZVVubWVyZ2VkXG4gICAgICA/IC8vIGNhbGwgbWVyZ2Ugc2F2ZVVubWVyZ2VkIG1ldGhvZFxuICAgICAgICBzYXZlVW5tZXJnZWQoc3RhdGVSZW1vdmVkLCBwcm9wVmFsdWVzKVxuICAgICAgOiAvLyBpZiB0b01lcmdlUHJvcCBpcyBhcmFheSwgYXBwZW5kIHRvIGl0XG4gICAgICBBcnJheS5pc0FycmF5KHN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0pXG4gICAgICA/IFsuLi5zdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdLCAuLi5wcm9wVmFsdWVzXVxuICAgICAgOiAvLyBzYXZlIHByb3BWYWx1ZXMgdG8gdG9NZXJnZVxuICAgICAgaXNPYmplY3Qoc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSlcbiAgICAgID8ge1xuICAgICAgICAgIC4uLnN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0sXG4gICAgICAgICAgLi4ucHJvcFZhbHVlc1xuICAgICAgICB9XG4gICAgICA6IHN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlUmVtb3ZlZCxcbiAgICAuLi50b0JlTWVyZ2VkXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VEYXRhc2V0QW5kRGVwczxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGRhdGFJZFRvVXNlOiBzdHJpbmdcbik6IFQge1xuICByZXR1cm4gY29tcG9zZV88VD4oW1xuICAgIGFwcGx5XyhyZXBsYWNlRGF0YXNldERlcHNJblN0YXRlLCB7ZGF0YUlkLCBkYXRhSWRUb1VzZX0pLFxuICAgIGFwcGx5XyhyZW1vdmVEYXRhc2V0VXBkYXRlciwge2RhdGFJZH0pXG4gIF0pKHN0YXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVTdGF0ZUZvckRhdGFzZXRSZXBsYWNlPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YUlkVG9Vc2U6IHN0cmluZ1xuKTogVCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKHN0YXRlLCBzdGF0ZS5zY2hlbWEpO1xuICBjb25zdCBuZXh0U3RhdGUgPSByZXBsYWNlRGF0YXNldEFuZERlcHMoc3RhdGUsIGRhdGFJZCwgZGF0YUlkVG9Vc2UpO1xuICAvLyBtYWtlIGEgY29weSBvZiBsYXllck9yZGVyLCBiZWNhdXNlIGxheWVyIGlkIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGl0IGJ5IGNhbGxpbmcgcmVtb3ZlTGF5ZXJVcGRhdGVyXG4gIGNvbnN0IHByZXNlcnZlTGF5ZXJPcmRlciA9IFsuLi5zdGF0ZS5sYXllck9yZGVyXTtcblxuICAvLyBwcmVzZXJ2ZSBkYXRhc2V0IG9yZGVyXG4gIG5leHRTdGF0ZS5wcmVzZXJ2ZURhdGFzZXRPcmRlciA9IE9iamVjdC5rZXlzKHN0YXRlLmRhdGFzZXRzKS5tYXAoZCA9PlxuICAgIGQgPT09IGRhdGFJZCA/IGRhdGFJZFRvVXNlIDogZFxuICApO1xuXG4gIC8vIHByZXNlcnZlTGF5ZXJPcmRlclxuICBpZiAobmV4dFN0YXRlLmxheWVyVG9CZU1lcmdlZD8ubGVuZ3RoKSB7XG4gICAgLy8gY29weSBzcGxpdCBtYXBzIHRvIGJlIG1lcmdlZCwgYmVjYXVzZSBpdCB3aWxsIGJlIHJlc2V0IGluIHJlbW92ZSBsYXllclxuICAgIG5leHRTdGF0ZS5zcGxpdE1hcHNUb0JlTWVyZ2VkID0gc2VyaWFsaXplZFN0YXRlPy5zcGxpdE1hcHMgPz8gW107XG4gICAgbmV4dFN0YXRlLmxheWVyT3JkZXIgPSBbLi4ucHJlc2VydmVMYXllck9yZGVyXTtcbiAgfVxuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlRGF0YXNldERlcHNJblN0YXRlPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICB7ZGF0YUlkLCBkYXRhSWRUb1VzZX06IHtkYXRhSWQ6IHN0cmluZzsgZGF0YUlkVG9Vc2U6IHN0cmluZ31cbik6IFQge1xuICBjb25zdCBzZXJpYWxpemVkU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZShzdGF0ZSwgc3RhdGUuc2NoZW1hKTtcblxuICBjb25zdCBuZXh0U3RhdGUgPSBzdGF0ZS5tZXJnZXJzLnJlZHVjZShcbiAgICAoXG4gICAgICBhY2N1U3RhdGUsXG4gICAgICB7cHJvcCwgdG9NZXJnZVByb3AsIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzLCBnZXRDaGlsZERhdGFzZXRJZHMsIHNhdmVVbm1lcmdlZCwgcHJlc2VydmVPcmRlcn1cbiAgICApID0+IHtcbiAgICAgIC8vIGdldCBkYXRhc2V0IGlkcyB0aGF0IGFyZSBkZXBlbmRzIG9uIHRoaXMgZGF0YXNldFxuICAgICAgY29uc3QgcHJvcHMgPSB0b0FycmF5KHByb3ApO1xuICAgICAgY29uc3QgdG9NZXJnZVByb3BzID0gdG9BcnJheSh0b01lcmdlUHJvcCk7XG4gICAgICBjb25zdCBzYXZlZFByb3BzID0gc2VyaWFsaXplZFN0YXRlID8gcHJvcHMubWFwKHAgPT4gc2VyaWFsaXplZFN0YXRlW3BdKSA6IFtdO1xuXG4gICAgICBsZXQgcmVwbGFjZWRTdGF0ZSA9IGFjY3VTdGF0ZTtcbiAgICAgIHNhdmVkUHJvcHMuZm9yRWFjaCgocHJvcFZhbHVlLCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lcmdlck9wdGlvbnMgPSB7XG4gICAgICAgICAgcHJvcDogcHJvcHNbaV0sXG4gICAgICAgICAgdG9NZXJnZVByb3A6IHRvTWVyZ2VQcm9wc1tpXSxcbiAgICAgICAgICBnZXRDaGlsZERhdGFzZXRJZHMsXG4gICAgICAgICAgc2F2ZVVubWVyZ2VkXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVwbGFjZWRJdGVtID1cbiAgICAgICAgICByZXBsYWNlUGFyZW50RGF0YXNldElkcz8uKHByb3BWYWx1ZSwgZGF0YUlkLCBkYXRhSWRUb1VzZSkgfHxcbiAgICAgICAgICBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMocHJvcFZhbHVlLCBkYXRhSWQsIGRhdGFJZFRvVXNlKTtcbiAgICAgICAgcmVwbGFjZWRTdGF0ZSA9IHJlcGxhY2VkSXRlbVxuICAgICAgICAgID8gcmVwbGFjZVByb3BWYWx1ZUluU3RhdGUocmVwbGFjZWRTdGF0ZSwgcmVwbGFjZWRJdGVtLCBtZXJnZXJPcHRpb25zKVxuICAgICAgICAgIDogcmVwbGFjZWRTdGF0ZTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgbWVyZ2VyT3B0aW9ucy50b01lcmdlUHJvcCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgcmVwbGFjZWRTdGF0ZVttZXJnZXJPcHRpb25zLnRvTWVyZ2VQcm9wXT8ubGVuZ3RoICYmXG4gICAgICAgICAgcHJlc2VydmVPcmRlclxuICAgICAgICApIHtcbiAgICAgICAgICByZXBsYWNlZFN0YXRlW3ByZXNlcnZlT3JkZXJdID0gcHJvcFZhbHVlLm1hcChpdGVtID0+IGl0ZW0uaWQpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHJlcGxhY2VkU3RhdGU7XG4gICAgfSxcbiAgICBzdGF0ZVxuICApO1xuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VQcm9wVmFsdWVJblN0YXRlKFxuICBzdGF0ZSxcbiAgcmVwbGFjZWRJdGVtLFxuICB7cHJvcCwgdG9NZXJnZVByb3AsIGdldENoaWxkRGF0YXNldElkcywgc2F2ZVVubWVyZ2VkfVxuKSB7XG4gIC8vIHByb3AgaXMgZGVwZW5kcyBvbiB0aGUgZGF0YXNldCB0byBiZSByZXBsYWNlZFxuICAvLyByZW1vdmUgcHJvcCBmcm9tIHN0YXRlLCBhbmQgbW92ZSBpdCB0byB0b0JlTWVyZ2VkXG4gIGxldCBuZXh0U3RhdGUgPSBtb3ZlVmFsdWVUb0JlTWVyZ2VkKHN0YXRlLCByZXBsYWNlZEl0ZW0sIHtwcm9wLCB0b01lcmdlUHJvcCwgc2F2ZVVubWVyZ2VkfSk7XG4gIGNvbnN0IGNoaWxkRGF0YUlkcyA9IGdldENoaWxkRGF0YXNldElkcz8uKHJlcGxhY2VkSXRlbSkgfHwgZmluZENoaWxkRGF0YXNldElkcyhyZXBsYWNlZEl0ZW0pO1xuXG4gIGlmIChjaGlsZERhdGFJZHMpIHtcbiAgICBuZXh0U3RhdGUgPSB0b0FycmF5KGNoaWxkRGF0YUlkcykucmVkdWNlKChhY2N1LCBjaGlsZERhdGFJZCkgPT4ge1xuICAgICAgLy8gc2hvdWxkbid0IG5lZWQgdG8gY2hhbmdlIGNoaWxkIGRhdGFzZXQgaWQsXG4gICAgICAvLyBidXQgc3RpbGwgbmVlZCB0byBtb3ZlIG91dCBvZiBzdGF0ZSBhbmQgbWVyZ2UgYmFjayBpblxuICAgICAgcmV0dXJuIHJlcGxhY2VEYXRhc2V0QW5kRGVwcyhhY2N1LCBjaGlsZERhdGFJZCwgY2hpbGREYXRhSWQpO1xuICAgIH0sIG5leHRTdGF0ZSk7XG4gIH1cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxLQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxnQkFBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsVUFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsT0FBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksT0FBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUssUUFBQSxHQUFBTixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU0sUUFBQSxHQUFBUCxzQkFBQSxDQUFBQyxPQUFB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
|