@microsoft/ocsdk 0.5.22-main.8dbdcd5 → 0.6.0-main.b447bcc
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/README.md +5 -5
- package/dist/SDK.min.js +1 -1
- package/dist/SDK.min.js.LICENSE.txt +1 -1
- package/lib/Interfaces/ISDKConfiguration.d.ts +4 -0
- package/lib/Interfaces/ISDKConfiguration.js +1 -1
- package/lib/Model/IOCSDKLogData.d.ts +1 -0
- package/lib/Model/IOCSDKLogData.js +1 -1
- package/lib/SDK.js +19 -12
- package/lib/SDK.js.map +1 -1
- package/lib/Utils/TelemetryHelper.js +3 -2
- package/lib/Utils/TelemetryHelper.js.map +1 -1
- package/lib/Utils/axiosRetryHandler.d.ts +8 -1
- package/lib/Utils/axiosRetryHandler.js +28 -6
- package/lib/Utils/axiosRetryHandler.js.map +1 -1
- package/package.json +5 -5
package/lib/SDK.js
CHANGED
|
@@ -204,6 +204,7 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
204
204
|
data,
|
|
205
205
|
_httpRequestResponseTime2,
|
|
206
206
|
_elapsedTimeInMilliseconds2,
|
|
207
|
+
retryCount,
|
|
207
208
|
_args2 = arguments,
|
|
208
209
|
_t2;
|
|
209
210
|
return _regenerator["default"].wrap(function (_context2) {
|
|
@@ -221,6 +222,7 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
221
222
|
axiosInstance = _axios["default"].create();
|
|
222
223
|
(0, _axiosRetryHandler["default"])(axiosInstance, {
|
|
223
224
|
retries: this.configuration.maxRequestRetriesOnFailure,
|
|
225
|
+
retryOn429: this.configuration.getChatConfigRetryOn429,
|
|
224
226
|
waitTimeInMsBetweenRetries: this.configuration.waitTimeBetweenRetriesConfig.getChatConfig
|
|
225
227
|
});
|
|
226
228
|
requestHeaders = {};
|
|
@@ -239,22 +241,25 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
239
241
|
response = _context2.sent;
|
|
240
242
|
httpRequestResponseTime = backendTimer.milliSecondsElapsed;
|
|
241
243
|
elapsedTimeInMilliseconds = timer.milliSecondsElapsed;
|
|
242
|
-
data = response.data;
|
|
243
|
-
if (data
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
244
|
+
data = response.data; // Add type guard to prevent TypeError when backend returns non-object (e.g., empty string, null, undefined)
|
|
245
|
+
if ((0, _typeof2["default"])(data) === "object" && data !== null) {
|
|
246
|
+
if (data.LiveChatVersion) {
|
|
247
|
+
this.liveChatVersion = data.LiveChatVersion;
|
|
248
|
+
}
|
|
249
|
+
data.headers = {};
|
|
250
|
+
if (response.headers && response.headers["date"]) {
|
|
251
|
+
data.headers["date"] = response.headers["date"];
|
|
252
|
+
}
|
|
249
253
|
}
|
|
250
|
-
this.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.GETCHATCONFIGSUCCEEDED, "Get Chat config succeeded", requestId, response, elapsedTimeInMilliseconds, requestPath, method, undefined, undefined, requestHeaders, httpRequestResponseTime);
|
|
254
|
+
this.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.GETCHATCONFIGSUCCEEDED, "Get Chat config succeeded", requestId, response, elapsedTimeInMilliseconds, requestPath, method, undefined, undefined, requestHeaders, httpRequestResponseTime, (0, _axiosRetryHandler.getRetryCount)(response === null || response === void 0 ? void 0 : response.config));
|
|
251
255
|
return _context2.abrupt("return", data);
|
|
252
256
|
case 3:
|
|
253
257
|
_context2.prev = 3;
|
|
254
258
|
_t2 = _context2["catch"](1);
|
|
255
259
|
_httpRequestResponseTime2 = backendTimer.milliSecondsElapsed;
|
|
256
260
|
_elapsedTimeInMilliseconds2 = timer.milliSecondsElapsed;
|
|
257
|
-
|
|
261
|
+
retryCount = (0, _axiosRetryHandler.getRetryCount)(_t2 === null || _t2 === void 0 ? void 0 : _t2.config);
|
|
262
|
+
this.logWithLogger(_LogLevel.LogLevel.ERROR, _Enums.OCSDKTelemetryEvent.GETCHATCONFIGFAILED, "Get Chat config failed", requestId, undefined, _elapsedTimeInMilliseconds2, requestPath, method, _t2, undefined, requestHeaders, _httpRequestResponseTime2, retryCount);
|
|
258
263
|
return _context2.abrupt("return", Promise.reject(_t2));
|
|
259
264
|
case 4:
|
|
260
265
|
case "end":
|
|
@@ -2607,7 +2612,7 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
2607
2612
|
)
|
|
2608
2613
|
}, {
|
|
2609
2614
|
key: "logWithLogger",
|
|
2610
|
-
value: function logWithLogger(logLevel, telemetryEventType, description, requestId, response, elapsedTimeInMilliseconds, requestPath, method, error, requestPayload, requestHeaders, httpRequestResponseTime) {
|
|
2615
|
+
value: function logWithLogger(logLevel, telemetryEventType, description, requestId, response, elapsedTimeInMilliseconds, requestPath, method, error, requestPayload, requestHeaders, httpRequestResponseTime, retryCount) {
|
|
2611
2616
|
var _response, _response2, _response3;
|
|
2612
2617
|
// eslint-disable-line @typescript-eslint/no-explicit-any
|
|
2613
2618
|
if (!this.logger) {
|
|
@@ -2672,7 +2677,8 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
2672
2677
|
RequestHeaders: sanitizedRequestHeaders,
|
|
2673
2678
|
ResponseErrorcode: error ? (_response3 = error.response) === null || _response3 === void 0 || (_response3 = _response3.headers) === null || _response3 === void 0 ? void 0 : _response3.errorcode : undefined,
|
|
2674
2679
|
// eslint-disable-line @typescript-eslint/no-explicit-any
|
|
2675
|
-
AuthTokenDetails: authTokenDetails
|
|
2680
|
+
AuthTokenDetails: authTokenDetails,
|
|
2681
|
+
RetryCount: retryCount
|
|
2676
2682
|
};
|
|
2677
2683
|
this.logger.log(logLevel, telemetryEventType, customData, description);
|
|
2678
2684
|
}
|
|
@@ -2713,6 +2719,7 @@ _SDK = SDK;
|
|
|
2713
2719
|
getChatTokenRetryCount: 10,
|
|
2714
2720
|
getChatTokenTimeBetweenRetriesOnFailure: 10000,
|
|
2715
2721
|
getChatTokenRetryOn429: true,
|
|
2722
|
+
getChatConfigRetryOn429: true,
|
|
2716
2723
|
maxRequestRetriesOnFailure: 5,
|
|
2717
2724
|
defaultRequestTimeout: undefined,
|
|
2718
2725
|
requestTimeoutConfig: _SDK.defaultRequestTimeoutConfig,
|
|
@@ -2720,4 +2727,4 @@ _SDK = SDK;
|
|
|
2720
2727
|
waitTimeBetweenRetriesConfig: _waitTimeBetweenRetriesConfigs.waitTimeBetweenRetriesConfigs,
|
|
2721
2728
|
ocUserAgent: []
|
|
2722
2729
|
});
|
|
2723
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfRW51bXMiLCJyZXF1aXJlIiwiX2F4aW9zIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9heGlvc1JldHJ5SGFuZGxlciIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX0Jyb3dzZXJJbmZvIiwiX0NvbnN0YW50cyIsIl9DdXN0b21Db250ZXh0RGF0YSIsIl9EZXZpY2VJbmZvIiwiX2VuY0hleCIsIl9Mb2NhbGVzIiwiX0xvZ0xldmVsIiwiX0xvZ2dpbmdTYW5pdGl6ZXIiLCJfT1NJbmZvIiwiX09tbmljaGFubmVsRW5kcG9pbnRzIiwiX09tbmljaGFubmVsSFRUUEhlYWRlcnMiLCJfc2hhIiwiX1RpbWVyIiwiX2h0dHBIZWFkZXJzVXRpbHMiLCJfZW5kcG9pbnRzQ3JlYXRvcnMiLCJfaXNFeHBlY3RlZEF4aW9zRXJyb3IiLCJfU2Vzc2lvbkluaXRSZXRyeUhhbmRsZXIiLCJfdXVpZCIsIl93YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlncyIsIl9TREsiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJfdHlwZW9mMyIsImhhcyIsImdldCIsInNldCIsIl90MjEiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9uIiwiRiIsInMiLCJkb25lIiwidmFsdWUiLCJUeXBlRXJyb3IiLCJhIiwidSIsIm5leHQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIlNESyIsImV4cG9ydHMiLCJvbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24iLCJfdGhpcyIsImNvbmZpZ3VyYXRpb24iLCJ1bmRlZmluZWQiLCJkZWZhdWx0Q29uZmlndXJhdGlvbiIsImxvZ2dlciIsIl9jbGFzc0NhbGxDaGVjazIiLCJjb25jYXQiLCJTREtFcnJvciIsIkNsaWVudEhUVFBUaW1lb3V0RXJyb3JOYW1lIiwiQ2xpZW50SFRUUFRpbWVvdXRFcnJvck1lc3NhZ2UiLCJoZWFkZXJzIiwiYXV0aGNvZGVub25jZSIsImF1dGhDb2RlTm9uY2UiLCJzZXNzaW9uSWQiLCJPbW5pY2hhbm5lbEhUVFBIZWFkZXJzIiwib2NTZXNzaW9uSWQiLCJyZXF1ZXN0SWQiLCJjb3JyZWxhdGlvbklkIiwiX3R5cGVvZjIiLCJfaSIsIl9PYmplY3Qka2V5cyIsImtleSIsIl9pMiIsIl9PYmplY3Qka2V5czIiLCJjaGFubmVsSWQiLCJ2YWx1ZXMiLCJDaGFubmVsSWQiLCJpbmNsdWRlcyIsIkVycm9yIiwiY3VycmVudE9tbmljaGFubmVsQ29uZmlndXJhdGlvblBhcmFtZXRlcnMiLCJfaXRlcmF0b3IiLCJDb25zdGFudHMiLCJyZXF1aXJlZE9tbmljaGFubmVsQ29uZmlndXJhdGlvblBhcmFtZXRlcnMiLCJfc3RlcCIsImVyciIsIm9jVXNlckFnZW50IiwibGl2ZUNoYXRWZXJzaW9uIiwiTGl2ZUNoYXRWZXJzaW9uIiwiVjIiLCJfY3JlYXRlQ2xhc3MyIiwiX2dldExjd0Zjc0RldGFpbHMiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsInRpbWVyIiwicmVxdWVzdFBhdGgiLCJtZXRob2QiLCJ1cmwiLCJheGlvc0luc3RhbmNlIiwicmVxdWVzdEhlYWRlcnMiLCJiYWNrZW5kVGltZXIiLCJfdGhpcyRjb25maWd1cmF0aW9uJGQiLCJyZXNwb25zZSIsImh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lIiwiZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyIsImRhdGEiLCJfaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyIsIl90Iiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIlRpbWVyIiwiVElNRVIiLCJsb2dXaXRoTG9nZ2VyIiwiTG9nTGV2ZWwiLCJJTkZPIiwiT0NTREtUZWxlbWV0cnlFdmVudCIsIkdFVExDV0ZDU0RFVEFJTFNTVEFSVEVEIiwiT21uaWNoYW5uZWxFbmRwb2ludHMiLCJMY3dGY3NEZXRhaWxzUGF0aCIsIm9yZ0lkIiwib3JnVXJsIiwiYXhpb3MiLCJjcmVhdGUiLCJheGlvc1JldHJ5SGFuZGxlciIsInJldHJpZXMiLCJtYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSIsIndhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzIiwid2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZyIsImdldENoYXRDb25maWciLCJhZGRPY1VzZXJBZ2VudEhlYWRlciIsInRpbWVvdXQiLCJkZWZhdWx0UmVxdWVzdFRpbWVvdXQiLCJyZXF1ZXN0VGltZW91dENvbmZpZyIsInNlbnQiLCJtaWxsaVNlY29uZHNFbGFwc2VkIiwiR0VUTENXRkNTREVUQUlMU1NVQ0NFRURFRCIsImFicnVwdCIsIkVSUk9SIiwiR0VUTENXRkNTREVUQUlMU0ZBSUxFRCIsInN0b3AiLCJnZXRMY3dGY3NEZXRhaWxzIiwiX2dldENoYXRDb25maWciLCJfY2FsbGVlMiIsImJ5cGFzc0NhY2hlIiwiX3RoaXMkY29uZmlndXJhdGlvbiRkMiIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTIiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczIiLCJfYXJnczIiLCJfdDIiLCJfY29udGV4dDIiLCJHRVRDSEFUQ09ORklHRlNUQVJURUQiLCJ1dWlkdjQiLCJMaXZlQ2hhdENvbmZpZ1BhdGgiLCJ3aWRnZXRJZCIsImFkZERlZmF1bHRIZWFkZXJzIiwiYnlwYXNzQ2FjaGVIZWFkZXJzIiwiR0VUQ0hBVENPTkZJR1NVQ0NFRURFRCIsIkdFVENIQVRDT05GSUdGQUlMRUQiLCJQcm9taXNlIiwicmVqZWN0IiwiX3giLCJfZ2V0TFdJRGV0YWlscyIsIl9jYWxsZWU0IiwiX3RoaXMkY29uZmlndXJhdGlvbiRkMyIsIl90aGlzMiIsImdldExXSURldGFpbHNPcHRpb25hbFBhcmFtcyIsImF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4iLCJyZWNvbm5lY3RJZCIsInNob3VsZFVzZVNpZ1F1ZXJ5UGFyYW0iLCJwYXJhbXMiLCJvcHRpb25zIiwiX2FyZ3M0IiwiX2NvbnRleHQ0IiwiR0VUTFdJU1RBVFVTU1RBUlRFRCIsIkxpdmVDaGF0TGl2ZVdvcmtJdGVtRGV0YWlsc1BhdGgiLCJheGlvc1JldHJ5SGFuZGxlcldpdGhOb3RGb3VuZCIsImhlYWRlck92ZXJ3cml0ZXMiLCJnZXRMV0lEZXRhaWxzIiwiZGVmYXVsdEhlYWRlcnMiLCJMaXZlQ2hhdEF1dGhMaXZlV29ya0l0ZW1EZXRhaWxzUGF0aCIsInVzZVVuYXV0aFJlY29ubmVjdElkU2lnUXVlcnlQYXJhbSIsInNpZyIsIl9yZWYiLCJfY2FsbGVlMyIsInJlc29sdmUiLCJfaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUzIiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMzIiwiX3QzIiwiX2NvbnRleHQzIiwic2V0QXV0aENvZGVOb25jZSIsIkdFVExXSVNUQVRVU1NVQ0NFRURFRCIsIkdFVExXSVNUQVRVU0ZBSUxFRCIsImlzRXhwZWN0ZWRBeGlvc0Vycm9yIiwiYXhpb3NUaW1lb3V0RXJyb3JDb2RlIiwiSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UiLCJfeDMiLCJfeDQiLCJfeDIiLCJfZ2V0Q2hhdFRva2VuIiwiX2NhbGxlZTYiLCJfdGhpcyRjb25maWd1cmF0aW9uJGQ0IiwiX3RoaXMzIiwiZ2V0Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXMiLCJjdXJyZW50UmV0cnlDb3VudCIsImN1cnJlbnRMaXZlQ2hhdFZlcnNpb24iLCJyZWZyZXNoVG9rZW4iLCJNc09jQm90QXBwbGljYXRpb25JZCIsIm11bHRpQm90IiwiZW5kcG9pbnQiLCJfYXJnczYiLCJfY29udGV4dDYiLCJHRVRDSEFUVE9LRU5TVEFSVEVEIiwiY3JlYXRlR2V0Q2hhdFRva2VuRW5kcG9pbnQiLCJnZXRDaGF0VG9rZW4iLCJyZXRyeU9uNDI5IiwiZ2V0Q2hhdFRva2VuUmV0cnlPbjQyOSIsIl9yZWYyIiwiX2NhbGxlZTUiLCJfaHR0cFJlcXVlc3RSZXNwb25zZVRpbWU0IiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHM0IiwiX3Q0IiwiX2NvbnRleHQ1IiwidG9Mb3dlckNhc2UiLCJHRVRDSEFUVE9LRU5TVUNDRUVERUQiLCJzdGF0dXMiLCJub0NvbnRlbnRTdGF0dXNDb2RlIiwiR0VUQ0hBVFRPS0VORkFJTEVEIiwiX3g2IiwiX3g3IiwiX3g1IiwiX2dldFJlY29ubmVjdGFibGVDaGF0cyIsIl9jYWxsZWU4IiwicmVjb25uZWN0YWJsZUNoYXRzUGFyYW1zIiwiX3RoaXMkY29uZmlndXJhdGlvbiRkNSIsIl90aGlzNCIsIl9jb250ZXh0OCIsIkdFVFJFQ09OTkVDVEFCTEVDSEFUU1NUQVJURUQiLCJMaXZlQ2hhdEdldFJlY29ubmVjdGFibGVDaGF0c1BhdGgiLCJnZXRSZWNvbm5lY3RhYmxlQ2hhdHMiLCJfcmVmMyIsIl9jYWxsZWU3IiwiX2h0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lNSIsIl9lbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzNSIsIl90NSIsIl9jb250ZXh0NyIsIkdFVFJFQ09OTkVDVEFCTEVDSEFUU1NVQ0NFRURFRCIsIkdFVFJFQ09OTkVDVEFCTEVDSEFUU0ZBSUxFRCIsIl94OSIsIl94MCIsIl94OCIsIl9nZXRSZWNvbm5lY3RBdmFpbGFiaWxpdHkiLCJfY2FsbGVlMCIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDYiLCJfdGhpczUiLCJvcHRpb25hbFBhcmFtcyIsIl9hcmdzMCIsIl9jb250ZXh0MCIsIkdFVFJFQ09OTkVDVEFWQUlMQUJJTElUWVNUQVJURUQiLCJMaXZlQ2hhdFJlY29ubmVjdEF2YWlsYWJpbGl0eVBhdGgiLCJnZXRSZWNvbm5lY3RBdmFpbGFiaWxpdHkiLCJfcmVmNCIsIl9jYWxsZWU5IiwiX2h0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lNiIsIl9lbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzNiIsIl90NiIsIl9jb250ZXh0OSIsIkdFVFJFQ09OTkVDVEFWQUlMQUJJTElUWVNVQ0NFRURFRCIsIldBUk4iLCJHRVRSRUNPTk5FQ1RBVkFJTEFCSUxJVFlGQUlMRUQiLCJfeDEwIiwiX3gxMSIsIl94MSIsIl9nZXRBZ2VudEF2YWlsYWJpbGl0eSIsIl9jYWxsZWUxMCIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDciLCJfdGhpczYiLCJxdWV1ZUF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zIiwiaW5pdENvbnRleHQiLCJnZXRDb250ZXh0IiwiY2FjaE9iaiIsInRlbXBBcnIiLCJfYXJnczEwIiwiX2NvbnRleHQxMCIsIkdFVEFHRU5UQVZBSUxBQklMSVRZU1RBUlRFRCIsIkdldEFnZW50QXZhaWxhYmlsaXR5UGF0aCIsImdldEFnZW50QXZhaWxhYmlsaXR5IiwiY3VzdG9tQ29udGV4dERhdGEiLCJDdXN0b21Db250ZXh0RGF0YSIsInNvcnQiLCJhc3NpZ24iLCJwb3J0YWxjb250YWN0aWQiLCJjYWNoZUtleSIsIlNIQTI1NiIsIkpTT04iLCJzdHJpbmdpZnkiLCJIZXgiLCJ3aW5kb3ciLCJkb2N1bWVudCIsImJyb3dzZXIiLCJCcm93c2VySW5mbyIsImdldEJyb3dzZXJOYW1lIiwiZGV2aWNlIiwiRGV2aWNlSW5mbyIsImdldERldmljZVR5cGUiLCJvcmlnaW51cmwiLCJsb2NhdGlvbiIsImhyZWYiLCJvcyIsIk9TSW5mbyIsImdldE9zVHlwZSIsImxvY2FsZSIsImRlZmF1bHRMb2NhbGUiLCJMb2NhbGVzIiwic3VwcG9ydGVkTG9jYWxlcyIsIl9yZWY1IiwiX2NhbGxlZTEiLCJfZGF0YSIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTciLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczciLCJfdDciLCJfY29udGV4dDEiLCJHRVRBR0VOVEFWQUlMQUJJTElUWVNVQ0NFRURFRCIsIkdFVEFHRU5UQVZBSUxBQklMSVRZRkFJTEVEIiwiX3gxMyIsIl94MTQiLCJfeDEyIiwiX3Nlc3Npb25Jbml0IiwiX2NhbGxlZTEyIiwiX3RoaXMkY29uZmlndXJhdGlvbiRkOCIsIl90aGlzNyIsInNlc3Npb25Jbml0T3B0aW9uYWxQYXJhbXMiLCJiYXNlUGF0aCIsIl9hcmdzMTIiLCJfY29udGV4dDEyIiwiU0VTU0lPTklOSVRTVEFSVEVEIiwic2Vzc2lvbkluaXQiLCJzaG91bGRSZXRyeSIsImVycm9yIiwic2Vzc2lvbkluaXRSZXRyeUhhbmRsZXIiLCJMaXZlQ2hhdEF1dGhTZXNzaW9uSW5pdFBhdGgiLCJMaXZlQ2hhdFNlc3Npb25Jbml0UGF0aCIsInNldFJlcXVlc3RJZEhlYWRlciIsIl9yZWY2IiwiX2NhbGxlZTExIiwiX2h0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lOCIsIl9lbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzOCIsIl90OCIsIl9jb250ZXh0MTEiLCJTRVNTSU9OSU5JVFNVQ0NFRURFRCIsIlNFU1NJT05JTklURkFJTEVEIiwiX3gxNiIsIl94MTciLCJfeDE1IiwiX2NyZWF0ZUNvbnZlcnNhdGlvbiIsIl9jYWxsZWUxMyIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDkiLCJfZGF0YTIiLCJfaHR0cFJlcXVlc3RSZXNwb25zZVRpbWU5IiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHM5IiwiX2FyZ3MxMyIsIl90OSIsIl9jb250ZXh0MTMiLCJDUkVBVEVTRVNTSU9OU1RBUlRFRCIsIkxpdmVDaGF0Q29ubmVjdG9yQXV0aFBhdGgiLCJMaXZlQ2hhdENvbm5lY3RvclBhdGgiLCJDUkVBVEVTRVNTSU9OU1VDQ0VFREVEIiwiQ1JFQVRFU0VTU0lPTkZBSUxFRCIsImNyZWF0ZUNvbnZlcnNhdGlvbiIsIl94MTgiLCJfc2Vzc2lvbkNsb3NlIiwiX2NhbGxlZTE1IiwiX3RoaXMkY29uZmlndXJhdGlvbiRkMCIsIl90aGlzOCIsInNlc3Npb25DbG9zZU9wdGlvbmFsUGFyYW1zIiwiaXNSZWNvbm5lY3RDaGF0IiwiaXNQZXJzaXN0ZW50Q2hhdCIsImNoYXRJZCIsIl9hcmdzMTUiLCJfY29udGV4dDE1IiwiU0VTU0lPTkNMT1NFU1RBUlRFRCIsIkxpdmVDaGF0U2Vzc2lvbkNsb3NlUGF0aCIsInNlc3Npb25DbG9zZSIsIkxpdmVDaGF0QXV0aFNlc3Npb25DbG9zZVBhdGgiLCJfcmVmNyIsIl9jYWxsZWUxNCIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTAiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczAiLCJfdDAiLCJfY29udGV4dDE0IiwiU0VTU0lPTkNMT1NFU1VDQ0VFREVEIiwiU0VTU0lPTkNMT1NFRkFJTEVEIiwiY29kZSIsIl94MjAiLCJfeDIxIiwiX3gxOSIsIl92YWxpZGF0ZUF1dGhDaGF0UmVjb3JkIiwiX2NhbGxlZTE3IiwidmFsaWRhdGVBdXRoQ2hhdFJlY29yZE9wdGlvbmFsUGFyYW1zIiwiX3RoaXMkY29uZmlndXJhdGlvbiRkMSIsIl90aGlzOSIsIl9jb250ZXh0MTciLCJWQUxJREFURUFVVEhDSEFUUkVDT1JEU1RBUlRFRCIsIkxpdmVDaGF0VmFsaWRhdGVBdXRoQ2hhdE1hcFJlY29yZFBhdGgiLCJ2YWxpZGF0ZUF1dGhDaGF0UmVjb3JkIiwidmFsaWRhdGVBdXRoQ2hhdFJlY29yZFRpbWVvdXQiLCJfcmVmOCIsIl9jYWxsZWUxNiIsIl9yZXNwb25zZSRkYXRhIiwiX2h0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lMSIsIl9lbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzMSIsIl90MSIsIl9jb250ZXh0MTYiLCJhdXRoQ2hhdEV4aXN0IiwiVkFMSURBVEVBVVRIQ0hBVFJFQ09SRFNVQ0NFRURFRCIsIlZBTElEQVRFQVVUSENIQVRSRUNPUkRGQUlMRUQiLCJfeDI0IiwiX3gyNSIsIl94MjIiLCJfeDIzIiwiX3N1Ym1pdFBvc3RDaGF0UmVzcG9uc2UiLCJfY2FsbGVlMTkiLCJwb3N0Q2hhdFJlc3BvbnNlIiwiX3RoaXMkY29uZmlndXJhdGlvbiRkMTAiLCJfdGhpczAiLCJzdWJtaXRQb3N0Q2hhdFJlc3BvbnNlT3B0aW9uYWxQYXJhbXMiLCJfYXJnczE5IiwiX2NvbnRleHQxOSIsIlNVQk1JVFBPU1RDSEFUU1RBUlRFRCIsIkxpdmVDaGF0U3VibWl0UG9zdENoYXRQYXRoIiwic3VibWl0UG9zdENoYXRSZXNwb25zZSIsIkxpdmVDaGF0QXV0aFN1Ym1pdFBvc3RDaGF0UGF0aCIsIl9yZWY5IiwiX2NhbGxlZTE4IiwiX2h0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lMTAiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczEwIiwiX3QxMCIsIl9jb250ZXh0MTgiLCJTVUJNSVRQT1NUQ0hBVFNVQ0NFRURFRCIsIlNVQk1JVFBPU1RDSEFURkFJTEVEIiwiX3gyOCIsIl94MjkiLCJfeDI2IiwiX3gyNyIsIl9nZXRTdXJ2ZXlJbnZpdGVMaW5rIiwiX2NhbGxlZTIxIiwic3VydmV5T3duZXJJZCIsInN1cnZleUludml0ZUFQSVJlcXVlc3RCb2R5IiwiX3RoaXMkY29uZmlndXJhdGlvbiRkMTEiLCJfdGhpczEiLCJnZXRzdXJ2ZXlJbnZpdGVMaW5rT3B0aW9uYWxQYXJhbXMiLCJfYXJnczIxIiwiX2NvbnRleHQyMSIsImxvZyIsIkdFVFNVUlZFWUlOVklURUxJTktTVEFSVEVEIiwiU3VydmV5T3duZXJJZCIsIkxpdmVDaGF0R2V0U3VydmV5SW52aXRlTGlua1BhdGgiLCJnZXRTdXJ2ZXlJbnZpdGVMaW5rIiwiTGl2ZUNoYXRBdXRoR2V0U3VydmV5SW52aXRlTGlua1BhdGgiLCJ3aWRnZXRBcHBJZCIsIl9yZWYwIiwiX2NhbGxlZTIwIiwiX2h0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lMTEiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczExIiwiX3QxMSIsIl9jb250ZXh0MjAiLCJHRVRTVVJWRVlJTlZJVEVMSU5LU1VDQ0VFREVEIiwiR0VUU1VSVkVZSU5WSVRFTElOS0ZBSUxFRCIsIl94MzIiLCJfeDMzIiwiX3gzMCIsIl94MzEiLCJfZ2V0Q2hhdFRyYW5zY3JpcHRzIiwiX2NhbGxlZTIzIiwidG9rZW4iLCJfdGhpcyRjb25maWd1cmF0aW9uJGQxMiIsIl90aGlzMTAiLCJnZXRDaGF0VHJhbnNjcmlwdHNPcHRpb25hbFBhcmFtcyIsIl9hcmdzMjMiLCJfY29udGV4dDIzIiwiR0VUQ0hBVFRSQU5TQ1JJUFRTVEFSVEVEIiwiTGl2ZUNoYXRHZXRDaGF0VHJhbnNjcmlwdFBhdGgiLCJnZXRDaGF0VHJhbnNjcmlwdHMiLCJvcmdhbml6YXRpb25JZCIsImF1dGhvcml6YXRpb24iLCJMaXZlQ2hhdHYyR2V0Q2hhdFRyYW5zY3JpcHRQYXRoIiwiTGl2ZUNoYXR2MkF1dGhHZXRDaGF0VHJhbnNjcmlwdFBhdGgiLCJMaXZlQ2hhdEF1dGhHZXRDaGF0VHJhbnNjcmlwdFBhdGgiLCJfcmVmMSIsIl9jYWxsZWUyMiIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTEyIiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMxMiIsIl90MTIiLCJfY29udGV4dDIyIiwiR0VUQ0hBVFRSQU5TQ1JJUFRTVUNDRUVERUQiLCJHRVRDSEFUVFJBTlNDUklQVEZBSUxFRCIsIl94MzciLCJfeDM4IiwiX3gzNCIsIl94MzUiLCJfeDM2IiwiX2dldFBlcnNpc3RlbnRDaGF0SGlzdG9yeSIsIl9jYWxsZWUyNSIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDEzIiwiX3RoaXMxMSIsImdldFBlcnNpc3RlbnRDaGF0SGlzdG9yeU9wdGlvbmFsUGFyYW1zIiwicGFnZVNpemUiLCJwYWdlVG9rZW4iLCJlcnJvck1lc3NhZ2UiLCJfYXJnczI1IiwiX2NvbnRleHQyNSIsIkdFVFBFUlNJU1RFTlRDSEFUSElTVE9SWVNUQVJURUQiLCJHRVRQRVJTSVNURU5UQ0hBVEhJU1RPUllGQUlMRUQiLCJMaXZlQ2hhdEF1dGhHZXRQZXJzaXN0ZW50Q2hhdEhpc3RvcnlQYXRoIiwiZ2V0UGVyc2lzdGVudENoYXRIaXN0b3J5IiwiX3JlZjEwIiwiX2NhbGxlZTI0IiwiX2h0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lMTMiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczEzIiwiX3QxMyIsIl9jb250ZXh0MjQiLCJHRVRQRVJTSVNURU5UQ0hBVEhJU1RPUllTVUNDRUVERUQiLCJfeDQwIiwiX3g0MSIsIl94MzkiLCJfZW1haWxUcmFuc2NyaXB0IiwiX2NhbGxlZTI3IiwiZW1haWxSZXF1ZXN0Qm9keSIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDE0IiwiX3RoaXMxMiIsImVtYWlsVHJhbnNjcmlwdE9wdGlvbmFsUGFyYW1zIiwiX2FyZ3MyNyIsIl9jb250ZXh0MjciLCJFTUFJTFRSQU5TQ1JJUFRTVEFSVEVEIiwiTGl2ZUNoYXRUcmFuc2NyaXB0RW1haWxSZXF1ZXN0UGF0aCIsImVtYWlsVHJhbnNjcmlwdCIsIkxpdmVDaGF0QXV0aFRyYW5zY3JpcHRFbWFpbFJlcXVlc3RQYXRoIiwiX3JlZjExIiwiX2NhbGxlZTI2IiwiX2h0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lMTQiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczE0IiwiX3QxNCIsIl9jb250ZXh0MjYiLCJFTUFJTFRSQU5TQ1JJUFRTVUNDRUVERUQiLCJFTUFJTFRSQU5TQ1JJUFRGQUlMRUQiLCJfeDQ1IiwiX3g0NiIsIl94NDIiLCJfeDQzIiwiX3g0NCIsIl9mZXRjaERhdGFNYXNraW5nSW5mbyIsIl9jYWxsZWUyOSIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDE1IiwiX3RoaXMxMyIsIl9jb250ZXh0MjkiLCJGRVRDSERBVEFNQVNLSU5HU1RBUlRFRCIsIkxpdmVDaGF0RmV0Y2hEYXRhTWFza2luZ0luZm9QYXRoIiwiZmV0Y2hEYXRhTWFza2luZ0luZm8iLCJfcmVmMTIiLCJfY2FsbGVlMjgiLCJfaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUxNSIsIl9lbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzMTUiLCJfdDE1IiwiX2NvbnRleHQyOCIsIkZFVENIREFUQU1BU0tJTkdTVUNDRUVERUQiLCJGRVRDSERBVEFNQVNLSU5HRkFJTEVEIiwiX3g0OCIsIl94NDkiLCJfeDQ3IiwiX21ha2VTZWNvbmRhcnlDaGFubmVsRXZlbnRSZXF1ZXN0IiwiX2NhbGxlZTMxIiwic2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UmVxdWVzdEJvZHkiLCJfdGhpcyRjb25maWd1cmF0aW9uJGQxNiIsIl90aGlzMTQiLCJzZWNvbmRhcnlDaGFubmVsRXZlbnRPcHRpb25hbFBhcmFtcyIsIl9hcmdzMzEiLCJfY29udGV4dDMxIiwiU0VDT05EQVJZQ0hBTk5FTEVWRU5UUkVRVUVTVFNUQVJURUQiLCJMaXZlQ2hhdFNlY29uZGFyeUNoYW5uZWxFdmVudFBhdGgiLCJtYWtlU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UmVxdWVzdCIsIkxpdmVDaGF0QXV0aFNlY29uZGFyeUNoYW5uZWxFdmVudFBhdGgiLCJkZWZhdWx0Q2hhbm5lbElkIiwiX3JlZjEzIiwiX2NhbGxlZTMwIiwiX2h0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lMTYiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczE2IiwiX3QxNiIsIl9jb250ZXh0MzAiLCJTRUNPTkRBUllDSEFOTkVMRVZFTlRSRVFVRVNUU1VDQ0VFREVEIiwiU0VDT05EQVJZQ0hBTk5FTEVWRU5UUkVRVUVTVEZBSUxFRCIsIl94NTIiLCJfeDUzIiwiX3g1MCIsIl94NTEiLCJfc2VuZFR5cGluZ0luZGljYXRvciIsIl9jYWxsZWUzMyIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDE3IiwiX3RoaXMxNSIsInNlbmRUeXBpbmdJbmRpY2F0b3JPcHRpb25hbFBhcmFtcyIsImN1c3RvbWVyRGlzcGxheU5hbWUiLCJfYXJnczMzIiwiX2NvbnRleHQzMyIsIlNlbmRUeXBpbmdJbmRpY2F0b3JQYXRoIiwic2VuZFR5cGluZ0luZGljYXRvciIsIl9yZWYxNCIsIl9jYWxsZWUzMiIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTE3IiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMxNyIsIl90MTciLCJfY29udGV4dDMyIiwiU0VORFRZUElOR0lORElDQVRPUlNVQ0NFRURFRCIsIlNFTkRUWVBJTkdJTkRJQ0FUT1JGQUlMRUQiLCJfeDU2IiwiX3g1NyIsIl94NTQiLCJfeDU1IiwiX21pZENvbnZlcnNhdGlvbkF1dGhlbnRpY2F0ZUNoYXQiLCJfY2FsbGVlMzUiLCJhdXRoZW50aWNhdGVDaGF0UGFyYW1zIiwiX3RoaXMkY29uZmlndXJhdGlvbiRkMTgiLCJfdGhpczE2IiwiX2NvbnRleHQzNSIsIk1JREFVVEhFTlRJQ0FURUNIQVRTVEFSVEVEIiwiTUlEQVVUSEVOVElDQVRFQ0hBVEZBSUxFRCIsIkxpdmVDaGF0QXV0aE1pZENvbnZlcnNhdGlvblBhdGgiLCJtaWRDb252ZXJzYXRpb25BdXRoZW50aWNhdGVDaGF0IiwiX3JlZjE1IiwiX2NhbGxlZTM0IiwiX2h0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lMTgiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczE4IiwiX3QxOCIsIl9jb250ZXh0MzQiLCJNSURBVVRIRU5USUNBVEVDSEFUU1VDQ0VFREVEIiwiX3g2MCIsIl94NjEiLCJfeDU4IiwiX3g1OSIsIl9nZXRVbnJlYWRNZXNzYWdlQ291bnQiLCJfY2FsbGVlMzciLCJfdGhpcyRjb25maWd1cmF0aW9uJGQxOSIsIl90aGlzMTciLCJfY29udGV4dDM3IiwiR0VUVU5SRUFETUVTU0FHRUNPVU5UU1RBUlRFRCIsImdldFVucmVhZE1lc3NhZ2VDb3VudCIsIl9yZWYxNiIsIl9jYWxsZWUzNiIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTE5IiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMxOSIsIl90MTkiLCJfY29udGV4dDM2IiwiR0VUVU5SRUFETUVTU0FHRUNPVU5UU1VDQ0VFREVEIiwiR0VUVU5SRUFETUVTU0FHRUNPVU5URkFJTEVEIiwiX3g2MyIsIl94NjQiLCJfeDYyIiwiX3NlbmRSZWFkUmVjZWlwdCIsIl9jYWxsZWUzOSIsIm1lc3NhZ2VJZCIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDIwIiwiX3RoaXMxOCIsIl9jb250ZXh0MzkiLCJTRU5EUkVBRFJFQ0VJUFRTVEFSVEVEIiwic2VuZFJlYWRSZWNlaXB0IiwiX3JlZjE3IiwiX2NhbGxlZTM4IiwiX2h0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lMjAiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczIwIiwiX3QyMCIsIl9jb250ZXh0MzgiLCJTRU5EUkVBRFJFQ0VJUFRTVUNDRUVERUQiLCJTRU5EUkVBRFJFQ0VJUFRGQUlMRUQiLCJfeDY4IiwiX3g2OSIsIl94NjUiLCJfeDY2IiwiX3g2NyIsImxvZ0xldmVsIiwidGVsZW1ldHJ5RXZlbnRUeXBlIiwiZGVzY3JpcHRpb24iLCJyZXF1ZXN0UGF5bG9hZCIsIl9yZXNwb25zZSIsIl9yZXNwb25zZTIiLCJfcmVzcG9uc2UzIiwiTG9nZ2luZ1Nhbml0aXplciIsInN0cmlwRXJyb3JTZW5zaXRpdmVQcm9wZXJ0aWVzIiwic2FuaXRpemVkUmVxdWVzdFBheWxvYWQiLCJzdHJpcEN1c3RvbUNvbnRleHREYXRhVmFsdWVzIiwicHJlQ2hhdFJlc3BvbnNlIiwic3RyaXBQcmVDaGF0UmVzcG9uc2UiLCJzdHJpcEdlb2xvY2F0aW9uIiwic2FuaXRpemVkUmVxdWVzdEhlYWRlcnMiLCJhdXRoVG9rZW5EZXRhaWxzIiwic3RyaXBSZXF1ZXN0SGVhZGVyc1NlbnNpdGl2ZVByb3BlcnRpZXMiLCJhdG9iIiwicGF5bG9hZCIsInNwbGl0IiwianNvbkRhdGEiLCJwYXJzZSIsImx3aUNvbnRleHRzIiwic3ViIiwiZXhwIiwibHdpQ29udGV4dHNEYXRhIiwiX3VudXNlZCIsImN1c3RvbURhdGEiLCJSZXF1ZXN0SWQiLCJSZWdpb24iLCJFbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzIiwiSHR0cFJlcXVlc3RSZXNwb25zZVRpbWUiLCJUcmFuc2FjdGlvbklkIiwidHJhbnNhY3Rpb25pZCIsIlJlcXVlc3RQYXRoIiwiUmVxdWVzdE1ldGhvZCIsIlJlc3BvbnNlU3RhdHVzQ29kZSIsIkV4Y2VwdGlvbkRldGFpbHMiLCJSZXF1ZXN0UGF5bG9hZCIsIlJlcXVlc3RIZWFkZXJzIiwiUmVzcG9uc2VFcnJvcmNvZGUiLCJlcnJvcmNvZGUiLCJBdXRoVG9rZW5EZXRhaWxzIiwic2V0U2Vzc2lvbklkSGVhZGVyIiwic2V0Q29ycmVsYXRpb25JZEluSGVhZGVyIiwic3Vic3RyaW5nIiwiZ2V0Q2hhdFRva2VuUmV0cnlDb3VudCIsImdldENoYXRUb2tlblRpbWVCZXR3ZWVuUmV0cmllc09uRmFpbHVyZSIsImRlZmF1bHRSZXF1ZXN0VGltZW91dENvbmZpZyIsIndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWdzIl0sInNvdXJjZVJvb3QiOiJvY3NkazovLy8iLCJzb3VyY2VzIjpbIi4uL3NyYy9TREsudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbm5lbElkLCBMaXZlQ2hhdFZlcnNpb24sIE9DU0RLVGVsZW1ldHJ5RXZlbnQsIFNES0Vycm9yIH0gZnJvbSBcIi4vQ29tbW9uL0VudW1zXCI7XG5pbXBvcnQgYXhpb3MsIHsgQXhpb3NSZXF1ZXN0Q29uZmlnLCBBeGlvc1Jlc3BvbnNlIH0gZnJvbSBcImF4aW9zXCI7XG5pbXBvcnQgYXhpb3NSZXRyeUhhbmRsZXIsIHsgYXhpb3NSZXRyeUhhbmRsZXJXaXRoTm90Rm91bmQgfSBmcm9tIFwiLi9VdGlscy9heGlvc1JldHJ5SGFuZGxlclwiO1xuXG5pbXBvcnQgeyBCcm93c2VySW5mbyB9IGZyb20gXCIuL1V0aWxzL0Jyb3dzZXJJbmZvXCI7XG5pbXBvcnQgQ29uc3RhbnRzIGZyb20gXCIuL0NvbW1vbi9Db25zdGFudHNcIjtcbmltcG9ydCB7IEN1c3RvbUNvbnRleHREYXRhIH0gZnJvbSBcIi4vVXRpbHMvQ3VzdG9tQ29udGV4dERhdGFcIjtcbmltcG9ydCB7IERldmljZUluZm8gfSBmcm9tIFwiLi9VdGlscy9EZXZpY2VJbmZvXCI7XG5pbXBvcnQgRmV0Y2hDaGF0VG9rZW5SZXNwb25zZSBmcm9tIFwiLi9Nb2RlbC9GZXRjaENoYXRUb2tlblJlc3BvbnNlXCI7XG5pbXBvcnQgSGV4IGZyb20gXCJjcnlwdG8tanMvZW5jLWhleFwiO1xuaW1wb3J0IElEYXRhTWFza2luZ0luZm8gZnJvbSBcIi4vSW50ZXJmYWNlcy9JRGF0YU1hc2tpbmdJbmZvXCI7XG5pbXBvcnQgSUVtYWlsVHJhbnNjcmlwdE9wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSUVtYWlsVHJhbnNjcmlwdE9wdGlvbmFsUGFyYW1zXCI7XG5pbXBvcnQgSUdldENoYXRUb2tlbk9wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSUdldENoYXRUb2tlbk9wdGlvbmFsUGFyYW1zXCI7XG5pbXBvcnQgSUdldENoYXRUcmFuc2NyaXB0c09wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSUdldENoYXRUcmFuc2NyaXB0c09wdGlvbmFsUGFyYW1zXCI7XG5pbXBvcnQgSUdldExXSURldGFpbHNPcHRpb25hbFBhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lHZXRMV0lEZXRhaWxzT3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJR2V0UGVyc2lzdGVudENoYXRIaXN0b3J5T3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JR2V0UGVyc2lzdGVudENoYXRIaXN0b3J5T3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJR2V0UXVldWVBdmFpbGFiaWxpdHlPcHRpb25hbFBhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lHZXRRdWV1ZUF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zXCI7XG5pbXBvcnQgSUdldFN1cnZleUludml0ZUxpbmtPcHRpb25hbFBhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lHZXRTdXJ2ZXlJbnZpdGVMaW5rT3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJT21uaWNoYW5uZWxDb25maWd1cmF0aW9uIGZyb20gXCIuL0ludGVyZmFjZXMvSU9tbmljaGFubmVsQ29uZmlndXJhdGlvblwiO1xuaW1wb3J0IElSZWNvbm5lY3RBdmFpbGFiaWxpdHlPcHRpb25hbFBhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lSZWNvbm5lY3RBdmFpbGFiaWxpdHlPcHRpb25hbFBhcmFtc1wiO1xuaW1wb3J0IElSZWNvbm5lY3RhYmxlQ2hhdHNQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JUmVjb25uZWN0YWJsZUNoYXRzUGFyYW1zXCI7XG5pbXBvcnQgSVNESyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lTREtcIjtcbmltcG9ydCBJU0RLQ29uZmlndXJhdGlvbiBmcm9tIFwiLi9JbnRlcmZhY2VzL0lTREtDb25maWd1cmF0aW9uXCI7XG5pbXBvcnQgSVNlY29uZGFyeUNoYW5uZWxFdmVudE9wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSVNlY29uZGFyeUNoYW5uZWxFdmVudE9wdGlvbmFsUGFyYW1zXCI7XG5pbXBvcnQgSVNlbmRUeXBpbmdJbmRpY2F0b3JPcHRpb25hbFBhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lTZW5kVHlwaW5nSW5kaWNhdG9yT3B0aW9uYWxQYXJhbXNcIlxuaW1wb3J0IElTZXNzaW9uQ2xvc2VPcHRpb25hbFBhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lTZXNzaW9uQ2xvc2VPcHRpb25hbFBhcmFtc1wiO1xuaW1wb3J0IElTZXNzaW9uSW5pdE9wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSVNlc3Npb25Jbml0T3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJU3VibWl0UG9zdENoYXRSZXNwb25zZU9wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSVN1Ym1pdFBvc3RDaGF0UmVzcG9uc2VPcHRpb25hbFBhcmFtc1wiO1xuaW1wb3J0IElWYWxpZGF0ZUF1dGhDaGF0UmVjb3JkT3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JVmFsaWRhdGVBdXRoQ2hhdFJlY29yZE9wdGlvbmFsUGFyYW1zXCI7XG5pbXBvcnQgSW5pdENvbnRleHQgZnJvbSBcIi4vTW9kZWwvSW5pdENvbnRleHRcIjtcbmltcG9ydCBMb2NhbGVzIGZyb20gXCIuL0NvbW1vbi9Mb2NhbGVzXCI7XG5pbXBvcnQgeyBMb2dMZXZlbCB9IGZyb20gXCIuL01vZGVsL0xvZ0xldmVsXCI7XG5pbXBvcnQgeyBMb2dnaW5nU2FuaXRpemVyIH0gZnJvbSBcIi4vVXRpbHMvTG9nZ2luZ1Nhbml0aXplclwiO1xuaW1wb3J0IE9DU0RLTG9nZ2VyIGZyb20gXCIuL0NvbW1vbi9PQ1NES0xvZ2dlclwiO1xuaW1wb3J0IHsgT1NJbmZvIH0gZnJvbSBcIi4vVXRpbHMvT1NJbmZvXCI7XG5pbXBvcnQgT21uaWNoYW5uZWxFbmRwb2ludHMgZnJvbSBcIi4vQ29tbW9uL09tbmljaGFubmVsRW5kcG9pbnRzXCI7XG5pbXBvcnQgT21uaWNoYW5uZWxIVFRQSGVhZGVycyBmcm9tIFwiLi9Db21tb24vT21uaWNoYW5uZWxIVFRQSGVhZGVyc1wiO1xuaW1wb3J0IE9tbmljaGFubmVsUXVlcnlQYXJhbWV0ZXIgZnJvbSBcIi4vSW50ZXJmYWNlcy9PbW5pY2hhbm5lbFF1ZXJ5UGFyYW1ldGVyXCI7XG5pbXBvcnQgUXVldWVBdmFpbGFiaWxpdHkgZnJvbSBcIi4vTW9kZWwvUXVldWVBdmFpbGFiaWxpdHlcIjtcbmltcG9ydCBSZWNvbm5lY3RBdmFpbGFiaWxpdHkgZnJvbSBcIi4vTW9kZWwvUmVjb25uZWN0QXZhaWxhYmlsaXR5XCI7XG5pbXBvcnQgUmVjb25uZWN0TWFwcGluZ1JlY29yZCBmcm9tIFwiLi9Nb2RlbC9SZWNvbm5lY3RNYXBwaW5nUmVjb3JkXCI7XG5pbXBvcnQgeyBSZXF1ZXN0VGltZW91dENvbmZpZyB9IGZyb20gXCIuL0NvbW1vbi9SZXF1ZXN0VGltZW91dENvbmZpZ1wiO1xuaW1wb3J0IFNIQTI1NiBmcm9tIFwiY3J5cHRvLWpzL3NoYTI1NlwiO1xuaW1wb3J0IHsgU3RyaW5nTWFwIH0gZnJvbSBcIi4vQ29tbW9uL01hcHBpbmdzXCI7XG5pbXBvcnQgeyBUaW1lciB9IGZyb20gXCIuL1V0aWxzL1RpbWVyXCI7XG5pbXBvcnQgeyBhZGRPY1VzZXJBZ2VudEhlYWRlciB9IGZyb20gXCIuL1V0aWxzL2h0dHBIZWFkZXJzVXRpbHNcIjtcbmltcG9ydCB7IGNyZWF0ZUdldENoYXRUb2tlbkVuZHBvaW50IH0gZnJvbSBcIi4vVXRpbHMvZW5kcG9pbnRzQ3JlYXRvcnNcIjtcbmltcG9ydCBpc0V4cGVjdGVkQXhpb3NFcnJvciBmcm9tIFwiLi9VdGlscy9pc0V4cGVjdGVkQXhpb3NFcnJvclwiO1xuaW1wb3J0IHNlc3Npb25Jbml0UmV0cnlIYW5kbGVyIGZyb20gXCIuL1V0aWxzL1Nlc3Npb25Jbml0UmV0cnlIYW5kbGVyXCI7XG5pbXBvcnQgeyB1dWlkdjQgfSBmcm9tIFwiLi9VdGlscy91dWlkXCI7XG5pbXBvcnQgeyB3YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlncyB9IGZyb20gXCIuL1V0aWxzL3dhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWdzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNESyBpbXBsZW1lbnRzIElTREsge1xuICBwcml2YXRlIHN0YXRpYyBkZWZhdWx0UmVxdWVzdFRpbWVvdXRDb25maWc6IFJlcXVlc3RUaW1lb3V0Q29uZmlnID0ge1xuICAgIGdldENoYXRDb25maWc6IDEyMDAwMCxcbiAgICBnZXRMV0lEZXRhaWxzOiAxNTAwMCxcbiAgICBnZXRDaGF0VG9rZW46IDE1MDAwLFxuICAgIHNlc3Npb25Jbml0OiAxNTAwMCxcbiAgICBzZXNzaW9uQ2xvc2U6IDE1MDAwLFxuICAgIGdldFJlY29ubmVjdGFibGVDaGF0czogMTUwMDAsXG4gICAgZ2V0UmVjb25uZWN0QXZhaWxhYmlsaXR5OiAxNTAwMCxcbiAgICBzdWJtaXRQb3N0Q2hhdFJlc3BvbnNlOiAxNTAwMCxcbiAgICBnZXRTdXJ2ZXlJbnZpdGVMaW5rOiAxNTAwMCxcbiAgICBnZXRDaGF0VHJhbnNjcmlwdHM6IDMwMDAwLFxuICAgIGVtYWlsVHJhbnNjcmlwdDogNTAwMCxcbiAgICBmZXRjaERhdGFNYXNraW5nSW5mbzogNTAwMCxcbiAgICBtYWtlU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UmVxdWVzdDogMTUwMDAsXG4gICAgZ2V0QWdlbnRBdmFpbGFiaWxpdHk6IDE1MDAwLFxuICAgIHNlbmRUeXBpbmdJbmRpY2F0b3I6IDUwMDAsXG4gICAgdmFsaWRhdGVBdXRoQ2hhdFJlY29yZFRpbWVvdXQ6IDE1MDAwLFxuICAgIGdldFBlcnNpc3RlbnRDaGF0SGlzdG9yeTogMTUwMDAsXG4gICAgbWlkQ29udmVyc2F0aW9uQXV0aGVudGljYXRlQ2hhdDogMTUwMDAsXG4gICAgZ2V0VW5yZWFkTWVzc2FnZUNvdW50OiAxNTAwMCxcbiAgICBzZW5kUmVhZFJlY2VpcHQ6IDUwMDBcbiAgfTtcblxuICBwcml2YXRlIHN0YXRpYyBkZWZhdWx0Q29uZmlndXJhdGlvbjogSVNES0NvbmZpZ3VyYXRpb24gPSB7XG4gICAgYXV0aENvZGVOb25jZTogdXVpZHY0KCkuc3Vic3RyaW5nKDAsIDgpLFxuICAgIGdldENoYXRUb2tlblJldHJ5Q291bnQ6IDEwLFxuICAgIGdldENoYXRUb2tlblRpbWVCZXR3ZWVuUmV0cmllc09uRmFpbHVyZTogMTAwMDAsXG4gICAgZ2V0Q2hhdFRva2VuUmV0cnlPbjQyOTogdHJ1ZSxcbiAgICBtYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZTogNSxcbiAgICBkZWZhdWx0UmVxdWVzdFRpbWVvdXQ6IHVuZGVmaW5lZCxcbiAgICByZXF1ZXN0VGltZW91dENvbmZpZzogU0RLLmRlZmF1bHRSZXF1ZXN0VGltZW91dENvbmZpZyxcbiAgICB1c2VVbmF1dGhSZWNvbm5lY3RJZFNpZ1F1ZXJ5UGFyYW06IGZhbHNlLFxuICAgIHdhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWc6IHdhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWdzLFxuICAgIG9jVXNlckFnZW50OiBbXVxuICB9O1xuXG4gIGxpdmVDaGF0VmVyc2lvbjogbnVtYmVyO1xuICBzZXNzaW9uSWQ/OiBzdHJpbmc7XG4gIG9jVXNlckFnZW50OiBzdHJpbmdbXTtcbiAgSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UgPSBgJHtTREtFcnJvci5DbGllbnRIVFRQVGltZW91dEVycm9yTmFtZX06ICR7U0RLRXJyb3IuQ2xpZW50SFRUUFRpbWVvdXRFcnJvck1lc3NhZ2V9YDtcblxuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIG9tbmljaGFubmVsQ29uZmlndXJhdGlvbjogSU9tbmljaGFubmVsQ29uZmlndXJhdGlvbiwgcHJpdmF0ZSBjb25maWd1cmF0aW9uOiBJU0RLQ29uZmlndXJhdGlvbiA9IFNESy5kZWZhdWx0Q29uZmlndXJhdGlvbiwgcHJpdmF0ZSBsb2dnZXI/OiBPQ1NES0xvZ2dlcikge1xuICAgIC8vIFNldHMgdG8gZGVmYXVsdCBjb25maWd1cmF0aW9uIGlmIHBhc3NlZCBjb25maWd1cmF0aW9uIGlzIGVtcHR5IG9yIGlzIG5vdCBhbiBvYmplY3RcbiAgICBpZiAoIU9iamVjdC5rZXlzKHRoaXMuY29uZmlndXJhdGlvbikubGVuZ3RoIHx8IHR5cGVvZiAoY29uZmlndXJhdGlvbikgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IFNESy5kZWZhdWx0Q29uZmlndXJhdGlvbjtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBTREsgY29uZmlnXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoU0RLLmRlZmF1bHRDb25maWd1cmF0aW9uKSkge1xuICAgICAgaWYgKCF0aGlzLmNvbmZpZ3VyYXRpb24uaGFzT3duUHJvcGVydHkoa2V5KSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb25bYCR7a2V5fWBdID0gU0RLLmRlZmF1bHRDb25maWd1cmF0aW9uW2Ake2tleX1gXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBpbmRpdmlkdWFsIGVuZHBvaW50VGltZW91dCBjb25maWdcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhTREsuZGVmYXVsdENvbmZpZ3VyYXRpb25bXCJyZXF1ZXN0VGltZW91dENvbmZpZ1wiXSkpIHtcbiAgICAgIGlmICghdGhpcy5jb25maWd1cmF0aW9uW1wicmVxdWVzdFRpbWVvdXRDb25maWdcIl0uaGFzT3duUHJvcGVydHkoa2V5KSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb25bXCJyZXF1ZXN0VGltZW91dENvbmZpZ1wiXVtgJHtrZXl9YF0gPSBTREsuZGVmYXVsdENvbmZpZ3VyYXRpb25bXCJyZXF1ZXN0VGltZW91dENvbmZpZ1wiXVtgJHtrZXl9YF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgY2hhbm5lbElkXG4gICAgY29uc3QgeyBjaGFubmVsSWQgfSA9IG9tbmljaGFubmVsQ29uZmlndXJhdGlvbjtcbiAgICBpZiAoIU9iamVjdC52YWx1ZXMoQ2hhbm5lbElkKS5pbmNsdWRlcyhjaGFubmVsSWQgYXMgQ2hhbm5lbElkKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGNoYW5uZWxJZGApO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIE9DIGNvbmZpZ1xuICAgIGNvbnN0IGN1cnJlbnRPbW5pY2hhbm5lbENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzID0gT2JqZWN0LmtleXMob21uaWNoYW5uZWxDb25maWd1cmF0aW9uKTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBDb25zdGFudHMucmVxdWlyZWRPbW5pY2hhbm5lbENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzKSB7XG4gICAgICBpZiAoIWN1cnJlbnRPbW5pY2hhbm5lbENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nICcke2tleX0nIGluIE9tbmljaGFubmVsQ29uZmlndXJhdGlvbmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMub2NVc2VyQWdlbnQgPSB0aGlzLmNvbmZpZ3VyYXRpb24ub2NVc2VyQWdlbnQ7XG4gICAgdGhpcy5saXZlQ2hhdFZlcnNpb24gPSBMaXZlQ2hhdFZlcnNpb24uVjI7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIExDVyBGQ1MgRGV0YWlscyBvZiB0aGUgT3JnLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldExjd0Zjc0RldGFpbHMoKTogUHJvbWlzZTxvYmplY3QgfCB2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVExDV0ZDU0RFVEFJTFNTVEFSVEVELCBcIkdldCBMQ1cgRkNTIGRldGFpbHMgc3RhcnRlZFwiLCBcIlwiKTtcblxuICAgIGNvbnN0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxjd0Zjc0RldGFpbHNQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJHRVRcIjtcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcihheGlvc0luc3RhbmNlLCB7XG4gICAgICByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUsXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcuZ2V0Q2hhdENvbmZpZ1xuICAgIH0pO1xuXG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnMgPSB7fTtcbiAgICBhZGRPY1VzZXJBZ2VudEhlYWRlcih0aGlzLm9jVXNlckFnZW50LCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBjb25zdCBiYWNrZW5kVGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2UuZ2V0KHVybCwge1xuICAgICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZ2V0Q2hhdENvbmZpZ1xuICAgICAgfSk7XG4gICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICBjb25zdCB7IGRhdGEgfSA9IHJlc3BvbnNlO1xuICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUTENXRkNTREVUQUlMU1NVQ0NFRURFRCwgXCJHZXQgTENXIEZDUyBkZXRhaWxzIHN1Y2NlZWRlZFwiLCBcIlwiLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVExDV0ZDU0RFVEFJTFNGQUlMRUQsIFwiR2V0IExDVyBGQ1MgZGV0YWlscyBmYWlsZWRcIiwgXCJcIiwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgY2hhdCBjb25maWcuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQ6IFJlcXVlc3RJZCB0byB1c2UgdG8gZ2V0IGNoYXQgY29uZmlnIChPcHRpb25hbCkuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0Q2hhdENvbmZpZyhyZXF1ZXN0SWQ6IHN0cmluZywgYnlwYXNzQ2FjaGUgPSBmYWxzZSk6IFByb21pc2U8b2JqZWN0IHwgdm9pZD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRDSEFUQ09ORklHRlNUQVJURUQsIFwiR2V0IENoYXQgY29uZmlnIHN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcbiAgICBpZiAoIXJlcXVlc3RJZCkge1xuICAgICAgcmVxdWVzdElkID0gdXVpZHY0KCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRDb25maWdQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfT9yZXF1ZXN0SWQ9JHtyZXF1ZXN0SWR9JmNoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiR0VUXCI7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLmdldENoYXRDb25maWdcbiAgICB9KTtcblxuICAgIGxldCByZXF1ZXN0SGVhZGVycyA9IHt9O1xuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBpZiAoYnlwYXNzQ2FjaGUpIHtcbiAgICAgIHJlcXVlc3RIZWFkZXJzID0geyAuLi5Db25zdGFudHMuYnlwYXNzQ2FjaGVIZWFkZXJzLCAuLi5yZXF1ZXN0SGVhZGVycyB9O1xuICAgIH1cblxuICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZS5nZXQodXJsLCB7XG4gICAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5nZXRDaGF0Q29uZmlnXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgIGNvbnN0IHsgZGF0YSB9ID0gcmVzcG9uc2U7XG5cbiAgICAgIGlmIChkYXRhLkxpdmVDaGF0VmVyc2lvbikge1xuICAgICAgICB0aGlzLmxpdmVDaGF0VmVyc2lvbiA9IGRhdGEuTGl2ZUNoYXRWZXJzaW9uO1xuICAgICAgfVxuXG4gICAgICBkYXRhLmhlYWRlcnMgPSB7fTtcbiAgICAgIGlmIChyZXNwb25zZS5oZWFkZXJzICYmIHJlc3BvbnNlLmhlYWRlcnNbXCJkYXRlXCJdKSB7XG4gICAgICAgIGRhdGEuaGVhZGVyc1tcImRhdGVcIl0gPSByZXNwb25zZS5oZWFkZXJzW1wiZGF0ZVwiXTtcbiAgICAgIH1cbiAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVENIQVRDT05GSUdTVUNDRUVERUQsIFwiR2V0IENoYXQgY29uZmlnIHN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcblxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRDSEFUQ09ORklHRkFJTEVELCBcIkdldCBDaGF0IGNvbmZpZyBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIExXSSBkZXRhaWxzLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkOiBSZXF1ZXN0SWQgdG8gdXNlIHRvIGdldCBjaGF0IGNvbmZpZyAoT3B0aW9uYWwpLlxuICAgKiBAcGFyYW0gZ2V0TFdJRGV0YWlsc09wdGlvbmFsUGFyYW1zOiBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBnZXQgTFdJIERldGFpbHMuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0TFdJRGV0YWlscyhyZXF1ZXN0SWQ6IHN0cmluZywgZ2V0TFdJRGV0YWlsc09wdGlvbmFsUGFyYW1zOiBJR2V0TFdJRGV0YWlsc09wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPG9iamVjdD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRMV0lTVEFUVVNTVEFSVEVELCBcIkdldCBMV0kgRGV0YWlscyBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG5cbiAgICBpZiAoIXJlcXVlc3RJZCkge1xuICAgICAgcmVxdWVzdElkID0gdXVpZHY0KCk7XG4gICAgfVxuXG4gICAgLy8gY29uc3RydWN0IGEgZW5kcG9pbnQgZm9yIGFub255bW91cyBjaGF0cyB0byBnZXQgTFdJIERldGFpbHNcbiAgICBsZXQgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRMaXZlV29ya0l0ZW1EZXRhaWxzUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXJXaXRoTm90Rm91bmQoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgaGVhZGVyT3ZlcndyaXRlczogW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0sXG4gICAgICByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUsXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcuZ2V0TFdJRGV0YWlscyxcbiAgICB9KTtcblxuICAgIC8vIEV4dHJhY3QgYXV0aCB0b2tlbiBhbmQgcmVjb25uZWN0IGlkIGZyb20gb3B0aW9uYWwgcGFyYW1cbiAgICBjb25zdCB7IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIHJlY29ubmVjdElkIH0gPSBnZXRMV0lEZXRhaWxzT3B0aW9uYWxQYXJhbXM7XG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IENvbnN0YW50cy5kZWZhdWx0SGVhZGVycztcblxuICAgIC8vIHVwZGF0ZWQgYXV0aCBlbmRwb2ludCBmb3IgYXV0aGVudGljYXRlZCBjaGF0cyBhbmQgYWRkIGF1dGggdG9rZW4gaW4gaGVhZGVyXG4gICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0QXV0aExpdmVXb3JrSXRlbURldGFpbHNQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke3JlcXVlc3RJZH1gO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG4gICAgfVxuXG4gICAgdGhpcy5hZGREZWZhdWx0SGVhZGVycyhyZXF1ZXN0SWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIC8vIElmIHNob3VsZCBvbmx5IGJlIGFwcGxpY2FibGUgb24gdW5hdXRoIGNoYXQgJiB0aGUgZmxhZyBlbmFibGVkXG4gICAgY29uc3Qgc2hvdWxkVXNlU2lnUXVlcnlQYXJhbSA9ICFhdXRoZW50aWNhdGVkVXNlclRva2VuICYmIHRoaXMuY29uZmlndXJhdGlvbi51c2VVbmF1dGhSZWNvbm5lY3RJZFNpZ1F1ZXJ5UGFyYW0gPT09IHRydWU7XG4gICAgaWYgKHJlY29ubmVjdElkKSB7XG4gICAgICBpZiAoIXNob3VsZFVzZVNpZ1F1ZXJ5UGFyYW0pIHtcbiAgICAgICAgcmVxdWVzdFBhdGggKz0gYC8ke3JlY29ubmVjdElkfWA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1zOiBPbW5pY2hhbm5lbFF1ZXJ5UGFyYW1ldGVyID0ge1xuICAgICAgY2hhbm5lbElkOiB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWRcbiAgICB9O1xuXG4gICAgaWYgKHJlY29ubmVjdElkKSB7XG4gICAgICBpZiAoc2hvdWxkVXNlU2lnUXVlcnlQYXJhbSkge1xuICAgICAgICBwYXJhbXMuc2lnID0gcmVjb25uZWN0SWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIkdFVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgcGFyYW1zLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZ2V0TFdJRGV0YWlsc1xuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgZGF0YSwgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcblxuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRMV0lTVEFUVVNTVUNDRUVERUQsIFwiR2V0IExXSSBEZXRhaWxzIHN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgcmVzb2x2ZShkYXRhKTtcblxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRMV0lTVEFUVVNGQUlMRUQsIFwiR2V0IExXSSBEZXRhaWxzIGZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdCggbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBGZXRjaGVzIHRoZSBjaGF0IHRva2VuIGZyb20gT21uaWNoYW5uZWwgdG8gam9pbiBUMSB0aHJlYWQuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQ6IFJlcXVlc3RJZCB0byB1c2UgZm9yIGdldGNoYXR0b2tlbiAoT3B0aW9uYWwpLlxuICAgKiBAcGFyYW0gZ2V0Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXM6IE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIGdldCBjaGF0IHRva2VuLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldENoYXRUb2tlbihyZXF1ZXN0SWQ6IHN0cmluZywgZ2V0Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXM6IElHZXRDaGF0VG9rZW5PcHRpb25hbFBhcmFtcyA9IHt9LCBjdXJyZW50UmV0cnlDb3VudDogbnVtYmVyID0gMCk6IFByb21pc2U8RmV0Y2hDaGF0VG9rZW5SZXNwb25zZT4geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1pbmZlcnJhYmxlLXR5cGVzXG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIGNvbnN0IHsgcmVjb25uZWN0SWQsIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIGN1cnJlbnRMaXZlQ2hhdFZlcnNpb24sIHJlZnJlc2hUb2tlbiwgTXNPY0JvdEFwcGxpY2F0aW9uSWQgfSA9IGdldENoYXRUb2tlbk9wdGlvbmFsUGFyYW1zO1xuICAgIGNvbnN0IG11bHRpQm90ID0gKE1zT2NCb3RBcHBsaWNhdGlvbklkICYmIE1zT2NCb3RBcHBsaWNhdGlvbklkLmxlbmd0aCA+IDApPyB0cnVlOiBmYWxzZTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRDSEFUVE9LRU5TVEFSVEVELCBcIkdldCBDaGF0IFRva2VuIFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcblxuICAgIGlmIChjdXJyZW50UmV0cnlDb3VudCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjdXJyZW50UmV0cnlDb3VudGApO1xuICAgIH1cblxuICAgIGlmICghcmVxdWVzdElkKSB7XG4gICAgICByZXF1ZXN0SWQgPSB1dWlkdjQoKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0gQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzO1xuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBjb25zdCBlbmRwb2ludCA9IGNyZWF0ZUdldENoYXRUb2tlbkVuZHBvaW50KGN1cnJlbnRMaXZlQ2hhdFZlcnNpb24gYXMgTGl2ZUNoYXRWZXJzaW9uIHx8IHRoaXMubGl2ZUNoYXRWZXJzaW9uLCBhdXRoZW50aWNhdGVkVXNlclRva2VuID8gdHJ1ZSA6IGZhbHNlLCBtdWx0aUJvdCk7XG5cbiAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG4gICAgfVxuXG4gICAgbGV0IHJlcXVlc3RQYXRoID0gYC8ke2VuZHBvaW50fS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke3JlcXVlc3RJZH1gO1xuICAgIFxuICAgIC8vIElmIHNob3VsZCBvbmx5IGJlIGFwcGxpY2FibGUgb24gdW5hdXRoIGNoYXQgJiB0aGUgZmxhZyBlbmFibGVkXG4gICAgY29uc3Qgc2hvdWxkVXNlU2lnUXVlcnlQYXJhbSA9ICFhdXRoZW50aWNhdGVkVXNlclRva2VuICYmIHRoaXMuY29uZmlndXJhdGlvbi51c2VVbmF1dGhSZWNvbm5lY3RJZFNpZ1F1ZXJ5UGFyYW0gPT09IHRydWU7XG4gICAgaWYgKHJlY29ubmVjdElkKSB7XG4gICAgICBpZiAoIXNob3VsZFVzZVNpZ1F1ZXJ5UGFyYW0pIHtcbiAgICAgICAgcmVxdWVzdFBhdGggKz0gYC8ke3JlY29ubmVjdElkfWA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1zOiBPbW5pY2hhbm5lbFF1ZXJ5UGFyYW1ldGVyID0ge1xuICAgICAgY2hhbm5lbElkOiB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWRcbiAgICB9XG4gICAgaWYgKE1zT2NCb3RBcHBsaWNhdGlvbklkICYmIE1zT2NCb3RBcHBsaWNhdGlvbklkLmxlbmd0aCA+IDApIHtcbiAgICAgIHBhcmFtc1snTXMtT2MtQm90LUFwcGxpY2F0aW9uLUlkJ10gPSBNc09jQm90QXBwbGljYXRpb25JZDtcbiAgICB9XG5cbiAgICBpZiAocmVmcmVzaFRva2VuKSB7XG4gICAgICBwYXJhbXMucmVmcmVzaFRva2VuID0gJ3RydWUnXG4gICAgfVxuXG4gICAgaWYgKHJlY29ubmVjdElkKSB7XG4gICAgICBpZiAoc2hvdWxkVXNlU2lnUXVlcnlQYXJhbSkge1xuICAgICAgICBwYXJhbXMuc2lnID0gcmVjb25uZWN0SWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIkdFVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgcGFyYW1zLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZ2V0Q2hhdFRva2VuXG4gICAgfTtcblxuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcihheGlvc0luc3RhbmNlLCB7XG4gICAgICBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSxcbiAgICAgIHJldHJpZXM6IChjdXJyZW50UmV0cnlDb3VudCA+IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSkgPyBjdXJyZW50UmV0cnlDb3VudCA6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHJldHJ5T240Mjk6IHRoaXMuY29uZmlndXJhdGlvbi5nZXRDaGF0VG9rZW5SZXRyeU9uNDI5LFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLmdldENoYXRUb2tlblxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGRhdGEsIGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgaWYgKGhlYWRlcnMpIHtcbiAgICAgICAgICBpZiAoaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLm9jU2Vzc2lvbklkLnRvTG93ZXJDYXNlKCldKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb25JZCA9IGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5vY1Nlc3Npb25JZC50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXNvbHZlcyBvbmx5IGlmIGl0IGNvbnRhaW5zIGNoYXQgdG9rZW4gcmVzcG9uc2Ugd2hpY2ggb25seSBoYXBwZW5zIG9uIHN0YXR1cyAyMDBcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBjaGVjayBpZiBkYXRhIGlzIGVtcHR5LCBpZiBzbywgdGhlbiByZWplY3QgdGhlIHByb21pc2VcbiAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoZGF0YSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKFwiRW1wdHkgZGF0YSByZWNlaXZlZCBmcm9tIGdldENoYXRUb2tlblwiKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGF0YS5yZXF1ZXN0SWQgPSByZXF1ZXN0SWQ7XG4gICAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQ0hBVFRPS0VOU1VDQ0VFREVELCBcIkdldCBDaGF0IFRva2VuIHN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5vIGNvbnRlbnQgZm9yIHJlY29ubmVjdCBjaGF0IGNhc2Ugc2hvdWxkbid0IGJlIHJldHJpZWQuXG4gICAgICAgIGlmIChyZWNvbm5lY3RJZCAmJiByZXNwb25zZS5zdGF0dXMgPT09IENvbnN0YW50cy5ub0NvbnRlbnRTdGF0dXNDb2RlKSB7XG4gICAgICAgICAgcmVqZWN0KHJlc3BvbnNlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRDSEFUVE9LRU5GQUlMRUQsIFwiR2V0IENoYXQgVG9rZW4gZmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgICAgcmVqZWN0KCBuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyB0aGUgcmVjb25uZWN0YWJsZSBjaGF0cyBmcm9tIG9tbmljaGFubmVsIGZyb20gdGhlIGdpdmVuIHVzZXIgaW5mb3JtYXRpb24gaW4gSldUIHRva2VuKGNsYWltIG5hbWU6IHN1YikuXG4gICAqIEBwYXJhbSByZWNvbm5lY3RhYmxlQ2hhdHNQYXJhbXMgTWFuZGF0ZSBwYXJhbWV0ZXJzIGZvciBnZXQgcmVjb25uZWN0YWJsZSBjaGF0cy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRSZWNvbm5lY3RhYmxlQ2hhdHMocmVjb25uZWN0YWJsZUNoYXRzUGFyYW1zOiBJUmVjb25uZWN0YWJsZUNoYXRzUGFyYW1zKTogUHJvbWlzZTxSZWNvbm5lY3RNYXBwaW5nUmVjb3JkIHwgdm9pZD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICBjb25zdCB7IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gfSA9IHJlY29ubmVjdGFibGVDaGF0c1BhcmFtcztcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRSRUNPTk5FQ1RBQkxFQ0hBVFNTVEFSVEVELCBcIkdldCBSZWNvbm5lY3RhYmxlIGNoYXQgU3RhcnRlZFwiKTtcbiAgICBjb25zdCByZXF1ZXN0SWQgPSByZWNvbm5lY3RhYmxlQ2hhdHNQYXJhbXM/LnJlcXVlc3RJZDtcblxuICAgIGNvbnN0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0R2V0UmVjb25uZWN0YWJsZUNoYXRzUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSBDb25zdGFudHMuZGVmYXVsdEhlYWRlcnM7XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuXG4gICAgdGhpcy5hZGREZWZhdWx0SGVhZGVycyhyZXF1ZXN0SWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJHRVRcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLmdldFJlY29ubmVjdGFibGVDaGF0c1xuICAgIH07XG5cbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgZGF0YSwgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcblxuICAgICAgICAvLyBSZXNvbHZlcyBvbmx5IGlmIGl0IGNvbnRhaW5zIHJlY29ubmVjdGFibGUgY2hhdHMgcmVzcG9uc2Ugd2hpY2ggb25seSBoYXBwZW5zIG9uIHN0YXR1cyAyMDBcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRSRUNPTk5FQ1RBQkxFQ0hBVFNTVUNDRUVERUQsIFwiR2V0IFJlY29ubmVjdGFibGUgQ2hhdHMgU3VjY2VlZGVkIGFuZCBvbGQgc2Vzc2lvbiByZXR1cm5lZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBObyBkYXRhIGZvdW5kIGluIHRoZSBvbGQgc2Vzc2lvbnMgc28gcmV0dXJuaW5nIG51bGxcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFJFQ09OTkVDVEFCTEVDSEFUU0ZBSUxFRCwgXCJHZXQgUmVjb25uZWN0YWJsZSBDaGF0cyBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gKiBGZXRjaGVzIHRoZSByZWNvbm5lY3RhYmxlIGNoYXRzIGZyb20gb21uaWNoYW5uZWwgZnJvbSB0aGUgZ2l2ZW4gdXNlciBpbmZvcm1hdGlvbiBpbiBKV1QgdG9rZW4oY2xhaW0gbmFtZTogc3ViKS5cbiAqIEBwYXJhbSByZWNvbm5lY3RhYmxlQ2hhdHNQYXJhbXMgTWFuZGF0ZSBwYXJhbWV0ZXJzIGZvciBnZXQgcmVjb25uZWN0YWJsZSBjaGF0cy5cbiAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0UmVjb25uZWN0QXZhaWxhYmlsaXR5KHJlY29ubmVjdElkOiBzdHJpbmcsIG9wdGlvbmFsUGFyYW1zOiBJUmVjb25uZWN0QXZhaWxhYmlsaXR5T3B0aW9uYWxQYXJhbXMgPSB7fSk6IFByb21pc2U8UmVjb25uZWN0QXZhaWxhYmlsaXR5IHwgdm9pZD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRSRUNPTk5FQ1RBVkFJTEFCSUxJVFlTVEFSVEVELCBcIkdldCBSZWNvbm5lY3RhYmxlIGF2YWlsYWJpbGl0eSBTdGFydGVkXCIpO1xuXG4gICAgY29uc3QgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRSZWNvbm5lY3RBdmFpbGFiaWxpdHlQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke3JlY29ubmVjdElkfWA7XG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IENvbnN0YW50cy5kZWZhdWx0SGVhZGVycztcblxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMob3B0aW9uYWxQYXJhbXM/LnJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIkdFVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZ2V0UmVjb25uZWN0QXZhaWxhYmlsaXR5XG4gICAgfTtcblxuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gcmVzcG9uc2U7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUUkVDT05ORUNUQVZBSUxBQklMSVRZU1VDQ0VFREVELCBcIkdldCBSZWNvbm5lY3QgYXZhaWxhYmlsaXR5IHN1Y2NlZWRlZFwiLCBvcHRpb25hbFBhcmFtcz8ucmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG5cbiAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBObyBkYXRhIGZvdW5kIHNvIHJldHVybmluZyBudWxsXG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5XQVJOLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFJFQ09OTkVDVEFWQUlMQUJJTElUWVNVQ0NFRURFRCwgXCJHZXQgUmVjb25uZWN0IGF2YWlsYWJpbGl0eSBkaWRuJ3Qgc2VuZCBhbnkgdmFsaWQgZGF0YVwiLCBvcHRpb25hbFBhcmFtcz8ucmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG5cbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFJFQ09OTkVDVEFWQUlMQUJJTElUWUZBSUxFRCwgXCJHZXQgUmVjb25uZWN0IEF2YWlsYWJpbGl0eSBmYWlsZWRcIiwgb3B0aW9uYWxQYXJhbXM/LnJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgICAgcmVqZWN0KCBuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gcmVxdWVzdElkOiBSZXF1ZXN0SWQgdG8gdXNlIGZvciBzZXNzaW9uIGluaXQuXG4gICAqIEBwYXJhbSBxdWV1ZUF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zOiBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBzZXNzaW9uIGluaXQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0QWdlbnRBdmFpbGFiaWxpdHkocmVxdWVzdElkOiBzdHJpbmcsIHF1ZXVlQXZhaWxhYmlsaXR5T3B0aW9uYWxQYXJhbXM6IElHZXRRdWV1ZUF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPFF1ZXVlQXZhaWxhYmlsaXR5PiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVEFHRU5UQVZBSUxBQklMSVRZU1RBUlRFRCwgXCJHZXQgYWdlbnQgYXZhaWxhYmlsaXR5IFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcblxuICAgIGNvbnN0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkdldEFnZW50QXZhaWxhYmlsaXR5UGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD1sY3dgO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcihheGlvc0luc3RhbmNlLCB7XG4gICAgICBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSxcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5nZXRBZ2VudEF2YWlsYWJpbGl0eVxuICAgIH0pO1xuXG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuLCBpbml0Q29udGV4dCwgZ2V0Q29udGV4dCB9ID0gcXVldWVBdmFpbGFiaWxpdHlPcHRpb25hbFBhcmFtcztcblxuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSBDb25zdGFudHMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG4gICAgfVxuXG4gICAgdGhpcy5hZGREZWZhdWx0SGVhZGVycyhyZXF1ZXN0SWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIGNvbnN0IGRhdGE6IEluaXRDb250ZXh0ID0gaW5pdENvbnRleHQgfHwge307XG5cbiAgICBjb25zdCBjYWNoT2JqID0ge1xuICAgICAgXCJvcmdJZFwiOiB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZCxcbiAgICAgIFwid2lkZ2V0SWRcIjogdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWRcbiAgICB9XG5cbiAgICBpZiAoZGF0YSAmJiBkYXRhLmN1c3RvbUNvbnRleHREYXRhKSB7XG4gICAgICBjb25zdCB0ZW1wQXJyID0gQ3VzdG9tQ29udGV4dERhdGEuc29ydChkYXRhLmN1c3RvbUNvbnRleHREYXRhKTtcbiAgICAgIE9iamVjdC5hc3NpZ24oY2FjaE9iaiwgeyBcImN1c3RvbUNvbnRleHRcIjogdGVtcEFyciB9KTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YS5wb3J0YWxjb250YWN0aWQpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oY2FjaE9iaiwgeyBcInBvcnRhbGNvbnRhY3RpZFwiOiBkYXRhLnBvcnRhbGNvbnRhY3RpZCB9KTtcbiAgICB9XG5cbiAgICAvL2RhdGEuY2FjaGVLZXkgPSBoYXNoLmNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShKU09OLnN0cmluZ2lmeShjYWNoT2JqKSkuZGlnZXN0KCdoZXgnKS50b1N0cmluZygpO1xuICAgIGRhdGEuY2FjaGVLZXkgPSBTSEEyNTYoSlNPTi5zdHJpbmdpZnkoY2FjaE9iaikpLnRvU3RyaW5nKEhleCk7XG5cbiAgICBpZiAoZ2V0Q29udGV4dCAmJiAhd2luZG93LmRvY3VtZW50KSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBnZXRDb250ZXh0IGlzIG9ubHkgc3VwcG9ydGVkIG9uIHdlYiBicm93c2Vyc2ApKTtcbiAgICB9XG5cbiAgICBpZiAoZ2V0Q29udGV4dCkge1xuICAgICAgZGF0YS5icm93c2VyID0gQnJvd3NlckluZm8uZ2V0QnJvd3Nlck5hbWUoKTtcbiAgICAgIGRhdGEuZGV2aWNlID0gRGV2aWNlSW5mby5nZXREZXZpY2VUeXBlKCk7XG4gICAgICBkYXRhLm9yaWdpbnVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgICAgZGF0YS5vcyA9IE9TSW5mby5nZXRPc1R5cGUoKTtcbiAgICB9XG5cbiAgICBpZiAoIWRhdGEubG9jYWxlKSB7XG4gICAgICBkYXRhLmxvY2FsZSA9IENvbnN0YW50cy5kZWZhdWx0TG9jYWxlO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGxvY2FsZVxuICAgIGlmIChkYXRhLmxvY2FsZSAmJiAhTG9jYWxlcy5zdXBwb3J0ZWRMb2NhbGVzLmluY2x1ZGVzKGRhdGEubG9jYWxlKSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgbG9jYWxlOiAnJHtkYXRhLmxvY2FsZX0nYCkpO1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJQT1NUXCI7XG5cbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBkYXRhLFxuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5nZXRBZ2VudEF2YWlsYWJpbGl0eVxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgZGF0YSwgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcblxuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVEFHRU5UQVZBSUxBQklMSVRZU1VDQ0VFREVELCBcIkdldCBhZ2VudCBhdmFpbGFiaWxpdHkgc3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuXG4gICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRBR0VOVEFWQUlMQUJJTElUWUZBSUxFRCwgXCJHZXQgYWdlbnQgYXZhaWxhYmlsaXR5IGZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcblxuICAgICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgICAgcmVqZWN0KCBuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqJ1xuICAgKiBTdGFydHMgYSBzZXNzaW9uIHRvIG9tbmljaGFubmVsLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkOiBSZXF1ZXN0SWQgdG8gdXNlIGZvciBzZXNzaW9uIGluaXQuXG4gICAqIEBwYXJhbSBzZXNzaW9uSW5pdE9wdGlvbmFsUGFyYW1zOiBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBzZXNzaW9uIGluaXQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2Vzc2lvbkluaXQocmVxdWVzdElkOiBzdHJpbmcsIHNlc3Npb25Jbml0T3B0aW9uYWxQYXJhbXM6IElTZXNzaW9uSW5pdE9wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VTU0lPTklOSVRTVEFSVEVELCBcIlNlc3Npb24gSW5pdCBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGNvbnN0IHJldHJ5T240MjkgPSB0cnVlO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5zZXNzaW9uSW5pdCxcbiAgICAgIHNob3VsZFJldHJ5OiAoZXJyb3IpID0+IHNlc3Npb25Jbml0UmV0cnlIYW5kbGVyKGVycm9yLCByZXRyeU9uNDI5KSxcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdXG4gICAgfSk7XG5cbiAgICBjb25zdCB7IHJlY29ubmVjdElkLCBhdXRoZW50aWNhdGVkVXNlclRva2VuLCBpbml0Q29udGV4dCwgZ2V0Q29udGV4dCB9ID0gc2Vzc2lvbkluaXRPcHRpb25hbFBhcmFtcztcbiAgICBjb25zdCBkYXRhOiBJbml0Q29udGV4dCA9IGluaXRDb250ZXh0IHx8IHt9O1xuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSB7IC4uLkNvbnN0YW50cy5kZWZhdWx0SGVhZGVycyB9O1xuXG4gICAgY29uc3QgYmFzZVBhdGggPSBhdXRoZW50aWNhdGVkVXNlclRva2VuXG4gICAgICA/IE9tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0QXV0aFNlc3Npb25Jbml0UGF0aFxuICAgICAgOiBPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdFNlc3Npb25Jbml0UGF0aDtcblxuICAgIGxldCByZXF1ZXN0UGF0aCA9IGAvJHtiYXNlUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9YDtcblxuICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7ICAgICBcbiAgICAgIE9iamVjdC5hc3NpZ24ocmVxdWVzdEhlYWRlcnMsIHtcbiAgICAgICAgW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl06IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sXG4gICAgICAgIFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdOiB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgdGhpcy5zZXRSZXF1ZXN0SWRIZWFkZXIocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cblxuICAgIC8vIElmIHNob3VsZCBvbmx5IGJlIGFwcGxpY2FibGUgb24gdW5hdXRoIGNoYXQgJiB0aGUgZmxhZyBlbmFibGVkXG4gICAgY29uc3Qgc2hvdWxkVXNlU2lnUXVlcnlQYXJhbSA9ICFhdXRoZW50aWNhdGVkVXNlclRva2VuICYmIHRoaXMuY29uZmlndXJhdGlvbi51c2VVbmF1dGhSZWNvbm5lY3RJZFNpZ1F1ZXJ5UGFyYW0gPT09IHRydWU7XG4gICAgaWYgKHJlY29ubmVjdElkKSB7XG4gICAgICBpZiAoIXNob3VsZFVzZVNpZ1F1ZXJ5UGFyYW0pIHtcbiAgICAgICAgcmVxdWVzdFBhdGggKz0gYC8ke3JlY29ubmVjdElkfWA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1zOiBPbW5pY2hhbm5lbFF1ZXJ5UGFyYW1ldGVyID0ge1xuICAgICAgY2hhbm5lbElkOiB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWRcbiAgICB9XG5cbiAgICBpZiAocmVjb25uZWN0SWQgJiYgc2hvdWxkVXNlU2lnUXVlcnlQYXJhbSkge1xuICAgICAgcGFyYW1zLnNpZyA9IHJlY29ubmVjdElkO1xuICAgIH1cblxuICAgIGlmIChnZXRDb250ZXh0ICYmICF3aW5kb3cuZG9jdW1lbnQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYGdldENvbnRleHQgaXMgb25seSBzdXBwb3J0ZWQgb24gd2ViIGJyb3dzZXJzYCkpO1xuICAgIH1cblxuICAgIGlmIChnZXRDb250ZXh0KSB7XG4gICAgICBkYXRhLmJyb3dzZXIgPSBCcm93c2VySW5mby5nZXRCcm93c2VyTmFtZSgpO1xuICAgICAgZGF0YS5kZXZpY2UgPSBEZXZpY2VJbmZvLmdldERldmljZVR5cGUoKTtcbiAgICAgIGRhdGEub3JpZ2ludXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XG4gICAgICBkYXRhLm9zID0gT1NJbmZvLmdldE9zVHlwZSgpO1xuICAgIH1cblxuICAgIC8vIFNldCBkZWZhdWx0IGxvY2FsZSBpZiBsb2NhbGUgaXMgZW1wdHlcbiAgICBpZiAoIWRhdGEubG9jYWxlKSB7XG4gICAgICBkYXRhLmxvY2FsZSA9IENvbnN0YW50cy5kZWZhdWx0TG9jYWxlO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGxvY2FsZVxuICAgIGlmIChkYXRhLmxvY2FsZSAmJiAhTG9jYWxlcy5zdXBwb3J0ZWRMb2NhbGVzLmluY2x1ZGVzKGRhdGEubG9jYWxlKSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgbG9jYWxlOiAnJHtkYXRhLmxvY2FsZX0nYCkpO1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJQT1NUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgZGF0YSxcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgcGFyYW1zLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuc2Vzc2lvbkluaXRcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VTU0lPTklOSVRTVUNDRUVERUQsIFwiU2Vzc2lvbiBJbml0IFN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIGRhdGEsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VTU0lPTklOSVRGQUlMRUQsIFwiU2Vzc2lvbiBJbml0IGZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIGRhdGEsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIFxuICAgICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgICAgcmVqZWN0KCBuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGNyZWF0ZUNvbnZlcnNhdGlvbihyZXF1ZXN0SWQ6IHN0cmluZywgc2Vzc2lvbkluaXRPcHRpb25hbFBhcmFtczogSVNlc3Npb25Jbml0T3B0aW9uYWxQYXJhbXMgPSB7fSk6IFByb21pc2U8RmV0Y2hDaGF0VG9rZW5SZXNwb25zZT4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5DUkVBVEVTRVNTSU9OU1RBUlRFRCwgXCJDcmVhdGUgY29udmVyc2F0aW9uIGNhbGwgU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBjb25zdCByZXRyeU9uNDI5ID0gdHJ1ZTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcihheGlvc0luc3RhbmNlLCB7XG4gICAgICByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUsXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcuc2Vzc2lvbkluaXQsXG4gICAgICBzaG91bGRSZXRyeTogKGVycm9yKSA9PiBzZXNzaW9uSW5pdFJldHJ5SGFuZGxlcihlcnJvciwgcmV0cnlPbjQyOSksXG4gICAgICBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXVxuICAgIH0pO1xuXG4gICAgY29uc3QgeyByZWNvbm5lY3RJZCwgYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgaW5pdENvbnRleHQsIGdldENvbnRleHQgfSA9IHNlc3Npb25Jbml0T3B0aW9uYWxQYXJhbXM7XG4gICAgY29uc3QgZGF0YTogSW5pdENvbnRleHQgPSBpbml0Q29udGV4dCB8fCB7fTtcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0geyAuLi5Db25zdGFudHMuZGVmYXVsdEhlYWRlcnMgfTtcblxuICAgIGNvbnN0IGJhc2VQYXRoID0gYXV0aGVudGljYXRlZFVzZXJUb2tlblxuICAgICAgPyBPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdENvbm5lY3RvckF1dGhQYXRoXG4gICAgICA6IE9tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0Q29ubmVjdG9yUGF0aDtcblxuICAgIGNvbnN0IHJlcXVlc3RQYXRoID0gYC8ke2Jhc2VQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS93aWRnZXRBcHAvJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vY29udmVyc2F0aW9uYDtcblxuICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7ICAgICBcbiAgICAgIE9iamVjdC5hc3NpZ24ocmVxdWVzdEhlYWRlcnMsIHtcbiAgICAgICAgW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl06IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sXG4gICAgICAgIFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdOiB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgdGhpcy5zZXRSZXF1ZXN0SWRIZWFkZXIocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBpZiAocmVjb25uZWN0SWQpIHtcbiAgICAgIGRhdGEucmVjb25uZWN0SWQgPSByZWNvbm5lY3RJZDtcbiAgICB9XG5cbiAgICBkYXRhLmNoYW5uZWxJZCA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZDtcblxuICAgIGlmIChnZXRDb250ZXh0ICYmICF3aW5kb3cuZG9jdW1lbnQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYGdldENvbnRleHQgaXMgb25seSBzdXBwb3J0ZWQgb24gd2ViIGJyb3dzZXJzYCkpO1xuICAgIH1cblxuICAgIGlmIChnZXRDb250ZXh0KSB7XG4gICAgICBkYXRhLmJyb3dzZXIgPSBCcm93c2VySW5mby5nZXRCcm93c2VyTmFtZSgpO1xuICAgICAgZGF0YS5kZXZpY2UgPSBEZXZpY2VJbmZvLmdldERldmljZVR5cGUoKTtcbiAgICAgIGRhdGEub3JpZ2ludXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XG4gICAgICBkYXRhLm9zID0gT1NJbmZvLmdldE9zVHlwZSgpO1xuICAgIH1cblxuICAgIC8vIFNldCBkZWZhdWx0IGxvY2FsZSBpZiBsb2NhbGUgaXMgZW1wdHlcbiAgICBpZiAoIWRhdGEubG9jYWxlKSB7XG4gICAgICBkYXRhLmxvY2FsZSA9IENvbnN0YW50cy5kZWZhdWx0TG9jYWxlO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGxvY2FsZVxuICAgIGlmIChkYXRhLmxvY2FsZSAmJiAhTG9jYWxlcy5zdXBwb3J0ZWRMb2NhbGVzLmluY2x1ZGVzKGRhdGEubG9jYWxlKSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgbG9jYWxlOiAnJHtkYXRhLmxvY2FsZX0nYCkpO1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJQT1NUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgZGF0YSxcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuc2Vzc2lvbkluaXRcbiAgICB9O1xuXG4gICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgY29uc3QgeyBkYXRhLCBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcblxuICAgICAgaWYgKGhlYWRlcnMpIHtcbiAgICAgICAgaWYgKGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5vY1Nlc3Npb25JZC50b0xvd2VyQ2FzZSgpXSkge1xuICAgICAgICAgIHRoaXMuc2Vzc2lvbklkID0gaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLm9jU2Vzc2lvbklkLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIGNoZWNrIGlmIGRhdGEgaXMgZW1wdHksIGlmIHNvLCB0aGVuIHRocm93IGFuIGVycm9yXG4gICAgICBpZiAoT2JqZWN0LmtleXMoZGF0YSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVtcHR5IGRhdGEgcmVjZWl2ZWQgZnJvbSBnZXRDaGF0VG9rZW5cIik7XG4gICAgICB9XG5cbiAgICAgIGRhdGEucmVxdWVzdElkID0gcmVxdWVzdElkO1xuICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuQ1JFQVRFU0VTU0lPTlNVQ0NFRURFRCwgXCJDcmVhdGUgY292ZXJzYXRpb24gY2FsbCBTdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkNSRUFURVNFU1NJT05GQUlMRUQsIFwiQ3JlYXRlIGNvbnZlcnNhdGlvbiBjYWxsIGZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIGRhdGEsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICBcbiAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyB0aGUgb21uaWNoYW5uZWwgc2Vzc2lvbi5cbiAgICogQHBhcmFtIHJlcXVlc3RJZDogUmVxdWVzdElkIHRvIHVzZSBmb3Igc2Vzc2lvbiBjbG9zZSAoc2FtZSByZXF1ZXN0IGlkIGZvciBzZXNzaW9uIGluaXQpLlxuICAgKiBAcGFyYW0gc2Vzc2lvbkNsb3NlT3B0aW9uYWxQYXJhbXM6IE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHNlc3Npb24gY2xvc2UuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2Vzc2lvbkNsb3NlKHJlcXVlc3RJZDogc3RyaW5nLCBzZXNzaW9uQ2xvc2VPcHRpb25hbFBhcmFtczogSVNlc3Npb25DbG9zZU9wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VTU0lPTkNMT1NFU1RBUlRFRCwgXCJTZXNzaW9uIENsb3NlIFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcblxuICAgIGxldCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdFNlc3Npb25DbG9zZVBhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVxdWVzdElkfT9jaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgaGVhZGVyT3ZlcndyaXRlczogW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0sXG4gICAgICByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUsXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcuc2Vzc2lvbkNsb3NlXG4gICAgfSk7XG5cbiAgICBjb25zdCB7IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIGlzUmVjb25uZWN0Q2hhdCwgaXNQZXJzaXN0ZW50Q2hhdCwgY2hhdElkIH0gPSBzZXNzaW9uQ2xvc2VPcHRpb25hbFBhcmFtcztcblxuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSBDb25zdGFudHMuZGVmYXVsdEhlYWRlcnM7XG4gICAgY29uc3QgZGF0YTogYW55ID0ge307IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGRhdGEuY2hhdElkID0gY2hhdElkO1xuXG4gICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0QXV0aFNlc3Npb25DbG9zZVBhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVxdWVzdElkfT9jaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgIH1cblxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBpZiAoaXNSZWNvbm5lY3RDaGF0KSB7XG4gICAgICByZXF1ZXN0UGF0aCArPSBgJmlzUmVjb25uZWN0Q2hhdD10cnVlYDtcbiAgICB9XG5cbiAgICBpZiAoaXNQZXJzaXN0ZW50Q2hhdCkge1xuICAgICAgcmVxdWVzdFBhdGggKz0gYCZpc1BlcnNpc3RlbnRDaGF0PXRydWVgO1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJQT1NUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgZGF0YSxcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuc2Vzc2lvbkNsb3NlXG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBiYWNrZW5kVGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFU1NJT05DTE9TRVNVQ0NFRURFRCwgXCJTZXNzaW9uIENsb3NlIHN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcblxuICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VTU0lPTkNMT1NFRkFJTEVELCBcIlNlc3Npb24gY2xvc2UgZmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICBpZiAoZXJyb3IuY29kZSA9PT0gQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkge1xuICAgICAgICAgIHJlamVjdCggbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRoZSBhdXRoIGNoYXQgcmVjb3JkIGV4aXN0cyBpbiBkYXRhYmFzZS5cbiAgICogQHBhcmFtIHJlcXVlc3RJZDogUmVxdWVzdElkIGZvciB2YWxpZGF0ZUF1dGhDaGF0UmVjb3JkIChzYW1lIHJlcXVlc3QgaWQgZm9yIHNlc3Npb24gaW5pdCkuXG4gICAqIEBwYXJhbSB2YWxpZGF0ZUF1dGhDaGF0UmVjb3JkT3B0aW9uYWxQYXJhbXM6IE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHZhbGlkYXRlQXV0aENoYXRSZWNvcmQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdmFsaWRhdGVBdXRoQ2hhdFJlY29yZChyZXF1ZXN0SWQ6IHN0cmluZywgdmFsaWRhdGVBdXRoQ2hhdFJlY29yZE9wdGlvbmFsUGFyYW1zOiBJVmFsaWRhdGVBdXRoQ2hhdFJlY29yZE9wdGlvbmFsUGFyYW1zKTogUHJvbWlzZTxvYmplY3Q+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuVkFMSURBVEVBVVRIQ0hBVFJFQ09SRFNUQVJURUQsIFwiVmFsaWRhdGUgQXV0aCBDaGF0IFJlY29yZCBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG5cbiAgICBjb25zdCB7IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIGNoYXRJZCB9ID0gdmFsaWRhdGVBdXRoQ2hhdFJlY29yZE9wdGlvbmFsUGFyYW1zO1xuICAgIGNvbnN0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0VmFsaWRhdGVBdXRoQ2hhdE1hcFJlY29yZFBhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7Y2hhdElkfS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLFxuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLnZhbGlkYXRlQXV0aENoYXRSZWNvcmRcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSBDb25zdGFudHMuZGVmYXVsdEhlYWRlcnM7XG4gICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgIH1cblxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiR0VUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy52YWxpZGF0ZUF1dGhDaGF0UmVjb3JkVGltZW91dFxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuXG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBpZiAocmVzcG9uc2UuZGF0YT8uYXV0aENoYXRFeGlzdCA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlZBTElEQVRFQVVUSENIQVRSRUNPUkRTVUNDRUVERUQsIFwiVmFsaWRhdGUgQXV0aCBDaGF0IFJlY29yZCBzdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG5cbiAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlLmRhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlZBTElEQVRFQVVUSENIQVRSRUNPUkRGQUlMRUQsIFwiVmFsaWRhdGUgQXV0aCBDaGF0IFJlY29yZCBGYWlsZWQuIFJlY29yZCBpcyBub3QgZm91bmQgb3IgcmVxdWVzdCBpcyBub3QgYXV0aG9yaXplZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcblxuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJWYWxpZGF0ZSBBdXRoIENoYXQgUmVjb3JkIEZhaWxlZC4gUmVjb3JkIGlzIG5vdCBmb3VuZCBvciByZXF1ZXN0IGlzIG5vdCBhdXRob3JpemVkXCIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuXG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5WQUxJREFURUFVVEhDSEFUUkVDT1JERkFJTEVELCBcIlZhbGlkYXRlIEF1dGggQ2hhdCBSZWNvcmQgZmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuXG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyb3IudG9TdHJpbmcoKSA9PT0gXCJFcnJvcjogUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSA0MDRcIikgeyAvLyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgcmVzb2x2ZSh7fSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1Ym1pdHMgcG9zdCBjaGF0IHJlc3BvbnNlLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3RJZCBvZiB0aGUgb21uaWNoYW5uZWwgc2Vzc2lvbi5cbiAgICogQHBhcmFtIHBvc3RDaGF0UmVzcG9uc2UgUG9zdCBjaGF0IHJlc3BvbnNlIHRvIHN1Ym1pdC5cbiAgICogQHBhcmFtIHN1Ym1pdFBvc3RDaGF0UmVzcG9uc2VPcHRpb25hbFBhcmFtczogT3B0aW9uYWwgcGFyYW1ldGVycyBmb3Igc3VibWl0IHBvc3QgY2hhdCByZXNwb25zZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzdWJtaXRQb3N0Q2hhdFJlc3BvbnNlKHJlcXVlc3RJZDogc3RyaW5nLCBwb3N0Q2hhdFJlc3BvbnNlOiBvYmplY3QsIHN1Ym1pdFBvc3RDaGF0UmVzcG9uc2VPcHRpb25hbFBhcmFtczogSVN1Ym1pdFBvc3RDaGF0UmVzcG9uc2VPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNVQk1JVFBPU1RDSEFUU1RBUlRFRCwgXCJTdWJtaXQgUG9zdCBDaGF0IFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcblxuICAgIGxldCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdFN1Ym1pdFBvc3RDaGF0UGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcihheGlvc0luc3RhbmNlLCB7XG4gICAgICBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSxcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5zdWJtaXRQb3N0Q2hhdFJlc3BvbnNlXG4gICAgfSk7XG5cbiAgICBjb25zdCB7IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gfSA9IHN1Ym1pdFBvc3RDaGF0UmVzcG9uc2VPcHRpb25hbFBhcmFtcztcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0gQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzO1xuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRBdXRoU3VibWl0UG9zdENoYXRQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KHBvc3RDaGF0UmVzcG9uc2UpLFxuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5zdWJtaXRQb3N0Q2hhdFJlc3BvbnNlXG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBiYWNrZW5kVGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNVQk1JVFBPU1RDSEFUU1VDQ0VFREVELCBcIlN1Ym1pdCBQb3N0IENoYXQgc3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuXG4gICAgICAgIHJlc29sdmUoKTtcblxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5TVUJNSVRQT1NUQ0hBVEZBSUxFRCwgXCJTdWJtaXQgUG9zdCBDaGF0IEZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdCggbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1Ym1pdHMgcG9zdCBjaGF0IHJlc3BvbnNlLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3RJZCBvZiB0aGUgb21uaWNoYW5uZWwgc2Vzc2lvbi5cbiAgICogQHBhcmFtIHBvc3RDaGF0UmVzcG9uc2UgUG9zdCBjaGF0IHJlc3BvbnNlIHRvIHN1Ym1pdC5cbiAgICogQHBhcmFtIHN1Ym1pdFBvc3RDaGF0UmVzcG9uc2VPcHRpb25hbFBhcmFtczogT3B0aW9uYWwgcGFyYW1ldGVycyBmb3Igc3VibWl0IHBvc3QgY2hhdCByZXNwb25zZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRTdXJ2ZXlJbnZpdGVMaW5rKHN1cnZleU93bmVySWQ6IHN0cmluZywgc3VydmV5SW52aXRlQVBJUmVxdWVzdEJvZHk6IG9iamVjdCwgZ2V0c3VydmV5SW52aXRlTGlua09wdGlvbmFsUGFyYW1zOiBJR2V0U3VydmV5SW52aXRlTGlua09wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPG9iamVjdD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICBpZiAodGhpcy5sb2dnZXIpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmxvZyhMb2dMZXZlbC5JTkZPLFxuICAgICAgICBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFNVUlZFWUlOVklURUxJTktTVEFSVEVELFxuICAgICAgICB7IFN1cnZleU93bmVySWQ6IHN1cnZleU93bmVySWQgfSxcbiAgICAgICAgXCJHZXQgU3VydmV5IEludml0ZSBMaW5rIFN0YXJ0ZWRcIik7XG4gICAgfVxuICAgIGxldCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEdldFN1cnZleUludml0ZUxpbmtQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3N1cnZleU93bmVySWR9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgaGVhZGVyT3ZlcndyaXRlczogW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0sXG4gICAgICByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUsXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcuZ2V0U3VydmV5SW52aXRlTGlua1xuICAgIH0pO1xuXG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuLCByZXF1ZXN0SWQgfSA9IGdldHN1cnZleUludml0ZUxpbmtPcHRpb25hbFBhcmFtcztcblxuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSBDb25zdGFudHMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRBdXRoR2V0U3VydmV5SW52aXRlTGlua1BhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7c3VydmV5T3duZXJJZH1gO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLndpZGdldEFwcElkXSA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkO1xuICAgIH1cblxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBpZiAocmVxdWVzdElkKSB7XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLnJlcXVlc3RJZF0gPSByZXF1ZXN0SWQ7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIlBPU1RcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeShzdXJ2ZXlJbnZpdGVBUElSZXF1ZXN0Qm9keSksXG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLmdldFN1cnZleUludml0ZUxpbmtcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgZGF0YSwgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcblxuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUU1VSVkVZSU5WSVRFTElOS1NVQ0NFRURFRCwgXCJHZXQgU3VydmV5IEludml0ZSBMaW5rIFN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUU1VSVkVZSU5WSVRFTElOS0ZBSUxFRCwgXCJHZXQgU3VydmV5IEludml0ZSBMaW5rIGZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdCggbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjaGF0IHRyYW5zY3JpcHRzIGZvciBjdXN0b21lci5cbiAgICogQHBhcmFtIHJlcXVlc3RJZCBSZXF1ZXN0SWQgb2YgdGhlIG9tbmljaGFubmVsIHNlc3Npb24uXG4gICAqIEBwYXJhbSBjaGF0SWQgQ2hhdCB0aHJlYWQgSWQuXG4gICAqIEBwYXJhbSB0b2tlbiBTa3lwZSB0b2tlbi5cbiAgICogQHBhcmFtIGdldENoYXRUcmFuc2NyaXB0c09wdGlvbmFsUGFyYW1zIE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIGdldCBjaGF0IHRyYW5zY3JpcHRzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldENoYXRUcmFuc2NyaXB0cyhyZXF1ZXN0SWQ6IHN0cmluZywgY2hhdElkOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcsIGdldENoYXRUcmFuc2NyaXB0c09wdGlvbmFsUGFyYW1zOiBJR2V0Q2hhdFRyYW5zY3JpcHRzT3B0aW9uYWxQYXJhbXMgPSB7fSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVENIQVRUUkFOU0NSSVBUU1RBUlRFRCwgXCJHZXQgQ2hhdCBUcmFuc2NyaXB0IFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcblxuICAgIGxldCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEdldENoYXRUcmFuc2NyaXB0UGF0aH0vJHtjaGF0SWR9LyR7cmVxdWVzdElkfT9jaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgaGVhZGVyT3ZlcndyaXRlczogW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0sXG4gICAgICByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUsXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcuZ2V0Q2hhdFRyYW5zY3JpcHRzXG4gICAgfSk7XG5cbiAgICBjb25zdCB7IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIGN1cnJlbnRMaXZlQ2hhdFZlcnNpb24gfSA9IGdldENoYXRUcmFuc2NyaXB0c09wdGlvbmFsUGFyYW1zO1xuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSBDb25zdGFudHMuZGVmYXVsdEhlYWRlcnM7XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5vcmdhbml6YXRpb25JZF0gPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZDtcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLndpZGdldEFwcElkXSA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkO1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aG9yaXphdGlvbl0gPSB0b2tlbjtcblxuICAgIGlmICh0aGlzLmxpdmVDaGF0VmVyc2lvbiA9PT0gTGl2ZUNoYXRWZXJzaW9uLlYyIHx8IChjdXJyZW50TGl2ZUNoYXRWZXJzaW9uICYmIGN1cnJlbnRMaXZlQ2hhdFZlcnNpb24gPT09IExpdmVDaGF0VmVyc2lvbi5WMikpIHtcbiAgICAgIHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0djJHZXRDaGF0VHJhbnNjcmlwdFBhdGh9LyR7Y2hhdElkfS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgICAgICByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdHYyQXV0aEdldENoYXRUcmFuc2NyaXB0UGF0aH0vJHtjaGF0SWR9LyR7cmVxdWVzdElkfT9jaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG4gICAgICByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEF1dGhHZXRDaGF0VHJhbnNjcmlwdFBhdGh9LyR7Y2hhdElkfS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgfVxuXG4gICAgdGhpcy5hZGREZWZhdWx0SGVhZGVycyhyZXF1ZXN0SWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJHRVRcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLmdldENoYXRUcmFuc2NyaXB0c1xuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgZGF0YSwgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQ0hBVFRSQU5TQ1JJUFRTVUNDRUVERUQsIFwiR2V0IENoYXQgVHJhbnNjcmlwdCBzdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRDSEFUVFJBTlNDUklQVEZBSUxFRCwgXCJHZXQgQ2hhdCBUcmFuc2NyaXB0IGZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuXG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgcGVyc2lzdGVudCBjaGF0IGhpc3RvcnkgZm9yIGF1dGhlbnRpY2F0ZWQgdXNlcnMuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQgUmVxdWVzdElkIG9mIHRoZSBvbW5pY2hhbm5lbCBzZXNzaW9uIChPcHRpb25hbCkuXG4gICAqIEBwYXJhbSBnZXRQZXJzaXN0ZW50Q2hhdEhpc3RvcnlPcHRpb25hbFBhcmFtcyBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBnZXQgcGVyc2lzdGVudCBjaGF0IGhpc3RvcnkuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0UGVyc2lzdGVudENoYXRIaXN0b3J5KHJlcXVlc3RJZDogc3RyaW5nLCBnZXRQZXJzaXN0ZW50Q2hhdEhpc3RvcnlPcHRpb25hbFBhcmFtczogSUdldFBlcnNpc3RlbnRDaGF0SGlzdG9yeU9wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPG9iamVjdD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRQRVJTSVNURU5UQ0hBVEhJU1RPUllTVEFSVEVELCBcIkdldCBQZXJzaXN0ZW50IENoYXQgSGlzdG9yeSBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG5cbiAgICBjb25zdCB7IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIHBhZ2VTaXplLCBwYWdlVG9rZW4gfSA9IGdldFBlcnNpc3RlbnRDaGF0SGlzdG9yeU9wdGlvbmFsUGFyYW1zO1xuXG4gICAgaWYgKCFhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBcIkF1dGhlbnRpY2F0ZWQgdXNlciB0b2tlbiBpcyByZXF1aXJlZCBmb3IgcGVyc2lzdGVudCBjaGF0IGhpc3RvcnlcIjtcbiAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRQRVJTSVNURU5UQ0hBVEhJU1RPUllGQUlMRUQsIFwiR2V0IFBlcnNpc3RlbnQgQ2hhdCBIaXN0b3J5IGZhaWxlZCAtIE1pc3NpbmcgYXV0aGVudGljYXRlZCB1c2VyIHRva2VuXCIsIHJlcXVlc3RJZCk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGVycm9yTWVzc2FnZSkpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0QXV0aEdldFBlcnNpc3RlbnRDaGF0SGlzdG9yeVBhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9L3dpZGdldGFwcC8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS9jb252ZXJzYXRpb24vaGlzdG9yeWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLFxuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLmdldFBlcnNpc3RlbnRDaGF0SGlzdG9yeVxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IHsgLi4uQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzIH07XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuXG4gICAgdGhpcy5hZGREZWZhdWx0SGVhZGVycyhyZXF1ZXN0SWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIGNvbnN0IHBhcmFtczogT21uaWNoYW5uZWxRdWVyeVBhcmFtZXRlciA9IHt9O1xuICAgIFxuICAgIGlmIChwYWdlU2l6ZSkge1xuICAgICAgcGFyYW1zLnBhZ2VTaXplID0gcGFnZVNpemUudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICAvLyBpbiBjYXNlIHBhZ2UgdG9rZW4gaXMgYXNzaWduZWQgZnJvbSBtdXRhdGVkIGhlYWRlcnMsIHdlIG92ZXJyaWRlIHdpdGggdGhlIGFjdHVhbCB2YWx1ZSBvciBlbXB0eVxuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMucGFnZVRva2VuXSA9IHBhZ2VUb2tlbiB8fCBcIlwiO1xuICAgXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIkdFVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgcGFyYW1zLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZ2V0UGVyc2lzdGVudENoYXRIaXN0b3J5XG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBiYWNrZW5kVGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBkYXRhLCBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuXG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFBFUlNJU1RFTlRDSEFUSElTVE9SWVNVQ0NFRURFRCwgXCJHZXQgUGVyc2lzdGVudCBDaGF0IEhpc3Rvcnkgc3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRQRVJTSVNURU5UQ0hBVEhJU1RPUllGQUlMRUQsIFwiR2V0IFBlcnNpc3RlbnQgQ2hhdCBIaXN0b3J5IGZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgXG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWFpbCB0cmFuc2NyaXB0IHRvIGN1c3RvbWVyLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3RJZCBvZiB0aGUgb21uaWNoYW5uZWwgc2Vzc2lvbi5cbiAgICogQHBhcmFtIHRva2VuIFNreXBlIHRva2VuLlxuICAgKiBAcGFyYW0gZW1haWxSZXF1ZXN0Qm9keSBFbWFpbCByZXF1ZXN0IGJvZHkuXG4gICAqIEBwYXJhbSBlbWFpbFRyYW5zY3JpcHRPcHRpb25hbFBhcmFtcyBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBlbWFpbCB0cmFuc2NyaXB0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGVtYWlsVHJhbnNjcmlwdChyZXF1ZXN0SWQ6IHN0cmluZywgdG9rZW46IHN0cmluZywgZW1haWxSZXF1ZXN0Qm9keTogb2JqZWN0LCBlbWFpbFRyYW5zY3JpcHRPcHRpb25hbFBhcmFtczogSUVtYWlsVHJhbnNjcmlwdE9wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuRU1BSUxUUkFOU0NSSVBUU1RBUlRFRCwgXCJFbWFpbCBUcmFuc2NyaXB0IFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcblxuICAgIGxldCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdFRyYW5zY3JpcHRFbWFpbFJlcXVlc3RQYXRofS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLFxuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLmVtYWlsVHJhbnNjcmlwdFxuICAgIH0pO1xuXG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuIH0gPSBlbWFpbFRyYW5zY3JpcHRPcHRpb25hbFBhcmFtcztcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0gQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzO1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMub3JnYW5pemF0aW9uSWRdID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWQ7XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy53aWRnZXRBcHBJZF0gPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZDtcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhvcml6YXRpb25dID0gdG9rZW47XG5cbiAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG4gICAgICByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEF1dGhUcmFuc2NyaXB0RW1haWxSZXF1ZXN0UGF0aH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgIH1cblxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KGVtYWlsUmVxdWVzdEJvZHkpLFxuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5lbWFpbFRyYW5zY3JpcHRcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcblxuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuRU1BSUxUUkFOU0NSSVBUU1VDQ0VFREVELCBcIkVtYWlsIFRyYW5zY3JpcHQgc3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkVNQUlMVFJBTlNDUklQVEZBSUxFRCwgXCJFbWFpbCBUcmFuc2NyaXB0IEZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdCggbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIGRhdGEgbWFza2luZyBpbmZvIG9mIHRoZSBvcmcuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQgUmVxdWVzdElkIG9mIHRoZSBvbW5pY2hhbm5lbCBzZXNzaW9uIChPcHRpb25hbCkuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZmV0Y2hEYXRhTWFza2luZ0luZm8ocmVxdWVzdElkOiBzdHJpbmcpOiBQcm9taXNlPElEYXRhTWFza2luZ0luZm8+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuRkVUQ0hEQVRBTUFTS0lOR1NUQVJURUQsIFwiRmV0Y2ggRGF0YSBNYXNraW5nIFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcbiAgICBpZiAoIXJlcXVlc3RJZCkge1xuICAgICAgcmVxdWVzdElkID0gdXVpZHY0KCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRGZXRjaERhdGFNYXNraW5nSW5mb1BhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLmZldGNoRGF0YU1hc2tpbmdJbmZvXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0gQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzO1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMub3JnYW5pemF0aW9uSWRdID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWQ7XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5yZXF1ZXN0SWRdID0gcmVxdWVzdElkO1xuXG4gICAgdGhpcy5hZGREZWZhdWx0SGVhZGVycyhyZXF1ZXN0SWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJHRVRcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLmZldGNoRGF0YU1hc2tpbmdJbmZvXG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBiYWNrZW5kVGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBkYXRhIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuRkVUQ0hEQVRBTUFTS0lOR1NVQ0NFRURFRCwgXCJGZXRjaCBEYXRhIE1hc2tpbmcgc3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5GRVRDSERBVEFNQVNLSU5HRkFJTEVELCBcIkZldGNoIERhdGEgTWFza2luZyBGYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlcyBhIHNlY29uZGFyeSBjaGFubmVsIGV2ZW50IG5ldHdvcmsgY2FsbCB0byBPbW5pY2hhbm5lbC5cbiAgICogQHBhcmFtIHJlcXVlc3RJZCBSZXF1ZXN0SWQgdG8gdXNlIGZvciBzZWNvbmRhcnkgY2hhbm5lbCBldmVudFxuICAgKiBAcGFyYW0gc2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UmVxdWVzdEJvZHkgc2Vjb25kYXJ5Q2hhbm5lbCBldmVudCByZXF1ZXN0IGJvZHlcbiAgICogQHBhcmFtIHNlY29uZGFyeUNoYW5uZWxFdmVudE9wdGlvbmFsUGFyYW1zIE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHNlY29uZGFyeSBjaGFubmVsIGV2ZW50cy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBtYWtlU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UmVxdWVzdChyZXF1ZXN0SWQ6IHN0cmluZywgc2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UmVxdWVzdEJvZHk6IG9iamVjdCwgc2Vjb25kYXJ5Q2hhbm5lbEV2ZW50T3B0aW9uYWxQYXJhbXM6IElTZWNvbmRhcnlDaGFubmVsRXZlbnRPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFQ09OREFSWUNIQU5ORUxFVkVOVFJFUVVFU1RTVEFSVEVELCBcIlNlY29uZGFyeSBDaGFubmVsIEV2ZW50IFJlcXVlc3QgU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuXG4gICAgbGV0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0U2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgaGVhZGVyT3ZlcndyaXRlczogW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0sXG4gICAgICByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUsXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcubWFrZVNlY29uZGFyeUNoYW5uZWxFdmVudFJlcXVlc3RcbiAgICB9KTtcblxuICAgIGNvbnN0IHsgYXV0aGVudGljYXRlZFVzZXJUb2tlbiB9ID0gc2Vjb25kYXJ5Q2hhbm5lbEV2ZW50T3B0aW9uYWxQYXJhbXM7XG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IENvbnN0YW50cy5kZWZhdWx0SGVhZGVycztcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLm9yZ2FuaXphdGlvbklkXSA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkO1xuXG4gICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgICAgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRBdXRoU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9YDtcbiAgICB9XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgcmVxdWVzdFBhdGggKz0gXCI/Y2hhbm5lbElkPVwiICsgQ29uc3RhbnRzLmRlZmF1bHRDaGFubmVsSWQ7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KHNlY29uZGFyeUNoYW5uZWxFdmVudFJlcXVlc3RCb2R5KSxcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcubWFrZVNlY29uZGFyeUNoYW5uZWxFdmVudFJlcXVlc3RcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFQ09OREFSWUNIQU5ORUxFVkVOVFJFUVVFU1RTVUNDRUVERUQsIFwiU2Vjb25kYXJ5IENoYW5uZWwgRXZlbnQgUmVxdWVzdCBTdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VDT05EQVJZQ0hBTk5FTEVWRU5UUkVRVUVTVEZBSUxFRCwgXCJTZWNvbmRhcnkgQ2hhbm5lbCBFdmVudCBSZXF1ZXN0IEZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdCggbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqIFNlbmQgdHlwaW5nIGluZGljYXRvclxuICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3RJZCBvZiB0aGUgb21uaWNoYW5uZWwgc2Vzc2lvbi5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZW5kVHlwaW5nSW5kaWNhdG9yKHJlcXVlc3RJZDogc3RyaW5nLCBjdXJyZW50TGl2ZUNoYXRWZXJzaW9uOiBudW1iZXIsIHNlbmRUeXBpbmdJbmRpY2F0b3JPcHRpb25hbFBhcmFtczogSVNlbmRUeXBpbmdJbmRpY2F0b3JPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gYXZvaWRpbmcgbG9nZ2luZyBJbmZvIGZvciB0eXBpbmdpbmRpY2F0b3IgdG8gcmVkdWNlIGxvZyB0cmFmZmljXG4gICAgaWYgKCFjdXJyZW50TGl2ZUNoYXRWZXJzaW9uIHx8IGN1cnJlbnRMaXZlQ2hhdFZlcnNpb24gIT09IExpdmVDaGF0VmVyc2lvbi5WMikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgY29uc3QgeyBjdXN0b21lckRpc3BsYXlOYW1lIH0gPSBzZW5kVHlwaW5nSW5kaWNhdG9yT3B0aW9uYWxQYXJhbXM7XG4gICAgaWYgKCFjdXJyZW50TGl2ZUNoYXRWZXJzaW9uIHx8IGN1cnJlbnRMaXZlQ2hhdFZlcnNpb24gIT09IExpdmVDaGF0VmVyc2lvbi5WMikgeyB0aHJvdyBuZXcgRXJyb3IoJ1R5cGluZyBpbmRpY2F0b3IgaXMgb25seSBzdXBwb3J0ZWQgb24gdjInKSB9XG4gICAgY29uc3QgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuU2VuZFR5cGluZ0luZGljYXRvclBhdGh9LyR7cmVxdWVzdElkfWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuXG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IENvbnN0YW50cy5kZWZhdWx0SGVhZGVycztcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLm9yZ2FuaXphdGlvbklkXSA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkO1xuICAgIGlmIChjdXN0b21lckRpc3BsYXlOYW1lKSB7XG4gICAgICByZXF1ZXN0SGVhZGVyc1tDb25zdGFudHMuY3VzdG9tZXJEaXNwbGF5TmFtZV0gPSBjdXN0b21lckRpc3BsYXlOYW1lO1xuICAgIH1cblxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuc2VuZFR5cGluZ0luZGljYXRvclxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFTkRUWVBJTkdJTkRJQ0FUT1JTVUNDRUVERUQsIFwiU2VuZCBUeXBpbmcgSW5kaWNhdG9yIFN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5TRU5EVFlQSU5HSU5ESUNBVE9SRkFJTEVELCBcIlNlbmQgVHlwaW5nIEluZGljYXRvciBGYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG5cbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdCggbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEF1dGhlbnRpY2F0ZXMgYW4gb25nb2luZyAocHJldmlvdXNseSB1bmF1dGhlbnRpY2F0ZWQpIGNoYXQgc2Vzc2lvbi5cbiAgICogVXBncmFkZXMgZW5nYWdlbWVudCBjb250ZXh0IHNvIHN1YnNlcXVlbnQgY2FsbHMgdXNlIGF1dGhlbnRpY2F0ZWQgZW5kcG9pbnRzLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkIEN1cnJlbnQgcmVxdWVzdC9jb3JyZWxhdGlvbiBpZFxuICAgKiBAcGFyYW0gYXV0aGVudGljYXRlQ2hhdFBhcmFtcyB7IGNoYXRJZCwgYXV0aGVudGljYXRlZFVzZXJUb2tlbiB9XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbWlkQ29udmVyc2F0aW9uQXV0aGVudGljYXRlQ2hhdChyZXF1ZXN0SWQ6IHN0cmluZywgYXV0aGVudGljYXRlQ2hhdFBhcmFtczogeyBjaGF0SWQ6IHN0cmluZzsgYXV0aGVudGljYXRlZFVzZXJUb2tlbjogc3RyaW5nIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuTUlEQVVUSEVOVElDQVRFQ0hBVFNUQVJURUQsIFwiTWlkLUF1dGhlbnRpY2F0ZSBDaGF0IFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcblxuICAgIGNvbnN0IHsgY2hhdElkLCBhdXRoZW50aWNhdGVkVXNlclRva2VuIH0gPSBhdXRoZW50aWNhdGVDaGF0UGFyYW1zO1xuXG4gICAgaWYgKCFjaGF0SWQgfHwgIWF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5NSURBVVRIRU5USUNBVEVDSEFURkFJTEVELFxuICAgICAgICBcIk1pZC1BdXRoZW50aWNhdGUgQ2hhdCBGYWlsZWQgLSBjaGF0SWQgYW5kIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gYXJlIHJlcXVpcmVkXCIsIHJlcXVlc3RJZCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJjaGF0SWQgYW5kIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gYXJlIHJlcXVpcmVkXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0QXV0aE1pZENvbnZlcnNhdGlvblBhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7Y2hhdElkfS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLFxuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLm1pZENvbnZlcnNhdGlvbkF1dGhlbnRpY2F0ZUNoYXRcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSB7IC4uLkNvbnN0YW50cy5kZWZhdWx0SGVhZGVycyB9O1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZTtcblxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgdGhpcy5zZXRSZXF1ZXN0SWRIZWFkZXIocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcubWlkQ29udmVyc2F0aW9uQXV0aGVudGljYXRlQ2hhdFxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcblxuICAgICAgICBpZiAoaGVhZGVycyAmJiBoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMub2NTZXNzaW9uSWQudG9Mb3dlckNhc2UoKV0pIHtcbiAgICAgICAgICB0aGlzLnNlc3Npb25JZCA9IGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5vY1Nlc3Npb25JZC50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50Lk1JREFVVEhFTlRJQ0FURUNIQVRTVUNDRUVERUQsIFwiTWlkLUF1dGhlbnRpY2F0ZSBDaGF0IFN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5NSURBVVRIRU5USUNBVEVDSEFURkFJTEVELCBcIk1pZC1BdXRoZW50aWNhdGUgQ2hhdCBGYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG5cbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgdW5yZWFkIG1lc3NhZ2UgY291bnQgZm9yIHRoZSBhdXRoZW50aWNhdGVkIHVzZXIuXG4gICAqIEF1dGgtb25seSBlbmRwb2ludCDigJQgZG9lcyBub3QgcmVxdWlyZSBhbiBhY3RpdmUgY2hhdCBzZXNzaW9uLlxuICAgKiBAcGFyYW0gYXV0aGVudGljYXRlZFVzZXJUb2tlbiBBdXRoIHRva2VuIGZvciB0aGUgdXNlci5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRVbnJlYWRNZXNzYWdlQ291bnQoYXV0aGVudGljYXRlZFVzZXJUb2tlbjogc3RyaW5nKTogUHJvbWlzZTxvYmplY3Q+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgY29uc3QgcmVxdWVzdElkID0gdXVpZHY0KCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUVU5SRUFETUVTU0FHRUNPVU5UU1RBUlRFRCwgXCJHZXQgVW5yZWFkIE1lc3NhZ2UgQ291bnQgU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuXG4gICAgY29uc3QgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRDb25uZWN0b3JBdXRoUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vd2lkZ2V0YXBwLyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9L3VucmVhZG1lc3NhZ2VzYDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLmdldFVucmVhZE1lc3NhZ2VDb3VudFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IHsgLi4uQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzIH07XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuXG4gICAgdGhpcy5hZGREZWZhdWx0SGVhZGVycyhyZXF1ZXN0SWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJHRVRcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLmdldFVucmVhZE1lc3NhZ2VDb3VudFxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBkYXRhLCBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUVU5SRUFETUVTU0FHRUNPVU5UU1VDQ0VFREVELCBcIkdldCBVbnJlYWQgTWVzc2FnZSBDb3VudCBTdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFVOUkVBRE1FU1NBR0VDT1VOVEZBSUxFRCwgXCJHZXQgVW5yZWFkIE1lc3NhZ2UgQ291bnQgRmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2VuZHMgYSByZWFkIHJlY2VpcHQgZm9yIGEgc3BlY2lmaWMgbWVzc2FnZSBpbiBhbiBhdXRoZW50aWNhdGVkIGNvbnZlcnNhdGlvbi5cbiAgICogVXBkYXRlcyB0aGUgdW5yZWFkIG1lc3NhZ2UgY291bnRlciBvbiB0aGUgc2VydmVyIGFuZCBmb3J3YXJkcyB0aGUgcmVjZWlwdCB0byBBQ1MuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQgUmVxdWVzdElkIChjb252ZXJzYXRpb25UaHJlYWRJZCkgb2YgdGhlIGNvbnZlcnNhdGlvbi5cbiAgICogQHBhcmFtIG1lc3NhZ2VJZCBUaGUgQUNTIG1lc3NhZ2UgSUQgdG8gbWFyayBhcyByZWFkLlxuICAgKiBAcGFyYW0gYXV0aGVudGljYXRlZFVzZXJUb2tlbiBBdXRoIHRva2VuIGZvciB0aGUgdXNlci5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZW5kUmVhZFJlY2VpcHQocmVxdWVzdElkOiBzdHJpbmcsIG1lc3NhZ2VJZDogc3RyaW5nLCBhdXRoZW50aWNhdGVkVXNlclRva2VuOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VORFJFQURSRUNFSVBUU1RBUlRFRCwgXCJTZW5kIFJlYWQgUmVjZWlwdCBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG5cbiAgICBjb25zdCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdENvbm5lY3RvckF1dGhQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS93aWRnZXRhcHAvJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vY29udmVyc2F0aW9ucy8ke3JlcXVlc3RJZH0vcmVhZHJlY2VpcHRgO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcihheGlvc0luc3RhbmNlLCB7XG4gICAgICByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUsXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcuc2VuZFJlYWRSZWNlaXB0XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0geyAuLi5Db25zdGFudHMuZGVmYXVsdEhlYWRlcnMgfTtcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIlBPU1RcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeSh7IG1lc3NhZ2VJZCB9KSxcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuc2VuZFJlYWRSZWNlaXB0XG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBiYWNrZW5kVGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5TRU5EUkVBRFJFQ0VJUFRTVUNDRUVERUQsIFwiU2VuZCBSZWFkIFJlY2VpcHQgU3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFTkRSRUFEUkVDRUlQVEZBSUxFRCwgXCJTZW5kIFJlYWQgUmVjZWlwdCBGYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGxvZ2dpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBsb2dMZXZlbCBMb2cgbGV2ZWwgZm9yIGxvZ2dpbmcuXG4gICAqIEBwYXJhbSB0ZWxlbWV0cnlFdmVudFR5cGUgVGVsZW1ldHJ5IGV2ZW50IHR5cGUgaW4gd2hpY2ggZXZlbnQgd2lsbCBiZSBsb2dnZWQuXG4gICAqIEBwYXJhbSBkZXNjcmlwdGlvbiBEZXNjcmlwdGlvbiBvZiB0aGUgZXZlbnQuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQgUmVxdWVzdCBJRFxuICAgKiBAcGFyYW0gcmVzcG9uc2UgUmVzcG9uc2VcbiAgICogQHBhcmFtIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgRWxhcHNlZCB0aW1lIGluIG1zXG4gICAqIEBwYXJhbSByZXF1ZXN0UGF0aCBSZXF1ZXN0IHBhdGhcbiAgICogQHBhcmFtIG1ldGhvZCBNZXRob2RcbiAgICogQHBhcmFtIGVycm9yIEVycm9yXG4gICAqIEBwYXJhbSBkYXRhIERhdGFcbiAgICovXG4gIHByaXZhdGUgbG9nV2l0aExvZ2dlcihsb2dMZXZlbDogTG9nTGV2ZWwsIHRlbGVtZXRyeUV2ZW50VHlwZTogT0NTREtUZWxlbWV0cnlFdmVudCwgZGVzY3JpcHRpb246IHN0cmluZywgcmVxdWVzdElkPzogc3RyaW5nLCByZXNwb25zZT86IEF4aW9zUmVzcG9uc2U8YW55PiwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcz86IG51bWJlciwgcmVxdWVzdFBhdGg/OiBzdHJpbmcsIG1ldGhvZD86IHN0cmluZywgZXJyb3I/OiB1bmtub3duLCByZXF1ZXN0UGF5bG9hZD86IGFueSwgcmVxdWVzdEhlYWRlcnM/OiBhbnksIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lPzogbnVtYmVyKTogdm9pZCB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGlmICghdGhpcy5sb2dnZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICBMb2dnaW5nU2FuaXRpemVyLnN0cmlwRXJyb3JTZW5zaXRpdmVQcm9wZXJ0aWVzKGVycm9yKTtcbiAgICB9XG5cbiAgICBsZXQgc2FuaXRpemVkUmVxdWVzdFBheWxvYWQgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHJlcXVlc3RQYXlsb2FkKSB7XG4gICAgICBzYW5pdGl6ZWRSZXF1ZXN0UGF5bG9hZCA9IHsgLi4ucmVxdWVzdFBheWxvYWQgfTtcbiAgICAgIGlmIChzYW5pdGl6ZWRSZXF1ZXN0UGF5bG9hZC5jdXN0b21Db250ZXh0RGF0YSkge1xuICAgICAgICBMb2dnaW5nU2FuaXRpemVyLnN0cmlwQ3VzdG9tQ29udGV4dERhdGFWYWx1ZXMoc2FuaXRpemVkUmVxdWVzdFBheWxvYWQuY3VzdG9tQ29udGV4dERhdGEpO1xuICAgICAgfVxuICAgICAgaWYgKHNhbml0aXplZFJlcXVlc3RQYXlsb2FkLnByZUNoYXRSZXNwb25zZSkge1xuICAgICAgICBMb2dnaW5nU2FuaXRpemVyLnN0cmlwUHJlQ2hhdFJlc3BvbnNlKHNhbml0aXplZFJlcXVlc3RQYXlsb2FkLnByZUNoYXRSZXNwb25zZSk7XG4gICAgICB9XG4gICAgICBMb2dnaW5nU2FuaXRpemVyLnN0cmlwR2VvbG9jYXRpb24oc2FuaXRpemVkUmVxdWVzdFBheWxvYWQpO1xuICAgIH1cblxuICAgIGxldCBzYW5pdGl6ZWRSZXF1ZXN0SGVhZGVycyA9IHVuZGVmaW5lZDtcbiAgICBsZXQgYXV0aFRva2VuRGV0YWlsczogYW55ID0gdW5kZWZpbmVkOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBpZiAocmVxdWVzdEhlYWRlcnMpIHtcbiAgICAgIHNhbml0aXplZFJlcXVlc3RIZWFkZXJzID0geyAuLi5yZXF1ZXN0SGVhZGVycyB9O1xuICAgICAgTG9nZ2luZ1Nhbml0aXplci5zdHJpcFJlcXVlc3RIZWFkZXJzU2Vuc2l0aXZlUHJvcGVydGllcyhzYW5pdGl6ZWRSZXF1ZXN0SGVhZGVycyk7XG5cbiAgICAgIGlmIChyZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dKSB7XG4gICAgICAgIGlmICh3aW5kb3cuZG9jdW1lbnQgJiYgd2luZG93LmF0b2IpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdG9rZW4gPSByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dO1xuICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IHRva2VuLnNwbGl0KFwiLlwiKVsxXTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB3aW5kb3cuYXRvYihwYXlsb2FkKTtcbiAgICAgICAgICAgIGNvbnN0IGpzb25EYXRhID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgICAgICAgIGNvbnN0IGx3aUNvbnRleHRzID0ganNvbkRhdGFbXCJsd2ljb250ZXh0c1wiXTtcbiAgICAgICAgICAgIGF1dGhUb2tlbkRldGFpbHMgPSB7XG4gICAgICAgICAgICAgIHN1YjoganNvbkRhdGFbXCJzdWJcIl0sXG4gICAgICAgICAgICAgIGV4cDoganNvbkRhdGFbXCJleHBcIl1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChsd2lDb250ZXh0cykge1xuICAgICAgICAgICAgICBjb25zdCBsd2lDb250ZXh0c0RhdGEgPSBKU09OLnBhcnNlKGx3aUNvbnRleHRzKTtcbiAgICAgICAgICAgICAgTG9nZ2luZ1Nhbml0aXplci5zdHJpcEN1c3RvbUNvbnRleHREYXRhVmFsdWVzKGx3aUNvbnRleHRzRGF0YSk7XG4gICAgICAgICAgICAgIGF1dGhUb2tlbkRldGFpbHMubHdpQ29udGV4dHMgPSBsd2lDb250ZXh0c0RhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY3VzdG9tRGF0YSA9IHtcbiAgICAgIFJlcXVlc3RJZDogcmVxdWVzdElkLFxuICAgICAgUmVnaW9uOiByZXNwb25zZT8uZGF0YS5SZWdpb24sXG4gICAgICBFbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzOiBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLFxuICAgICAgSHR0cFJlcXVlc3RSZXNwb25zZVRpbWU6IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lLFxuICAgICAgVHJhbnNhY3Rpb25JZDogcmVzcG9uc2U/LmhlYWRlcnNbQ29uc3RhbnRzLnRyYW5zYWN0aW9uaWRdLFxuICAgICAgUmVxdWVzdFBhdGg6IHJlcXVlc3RQYXRoLFxuICAgICAgUmVxdWVzdE1ldGhvZDogbWV0aG9kLFxuICAgICAgUmVzcG9uc2VTdGF0dXNDb2RlOiByZXNwb25zZSA/IHJlc3BvbnNlLnN0YXR1cyA6IGVycm9yID8gKGVycm9yIGFzIGFueSkucmVzcG9uc2U/LnN0YXR1cyA6IHVuZGVmaW5lZCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICBcbiAgICAgIEV4Y2VwdGlvbkRldGFpbHM6IGVycm9yID8gKGVycm9yIGFzIGFueSkucmVzcG9uc2U/LmRhdGEgfHwgZXJyb3IgOiB1bmRlZmluZWQsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgUmVxdWVzdFBheWxvYWQ6IHNhbml0aXplZFJlcXVlc3RQYXlsb2FkLFxuICAgICAgUmVxdWVzdEhlYWRlcnM6IHNhbml0aXplZFJlcXVlc3RIZWFkZXJzLFxuICAgICAgUmVzcG9uc2VFcnJvcmNvZGU6IGVycm9yID8gKGVycm9yIGFzIGFueSkucmVzcG9uc2U/LmhlYWRlcnM/LmVycm9yY29kZSA6IHVuZGVmaW5lZCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICBBdXRoVG9rZW5EZXRhaWxzOiBhdXRoVG9rZW5EZXRhaWxzXG4gICAgfTtcbiAgICB0aGlzLmxvZ2dlci5sb2cobG9nTGV2ZWwsIHRlbGVtZXRyeUV2ZW50VHlwZSwgY3VzdG9tRGF0YSwgZGVzY3JpcHRpb24pO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgcHJpdmF0ZSBzZXRBdXRoQ29kZU5vbmNlID0gKGhlYWRlcnM6IGFueSkgPT4ge1xuICAgIGlmIChoZWFkZXJzPy5hdXRoY29kZW5vbmNlKSB7XG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZSA9IGhlYWRlcnM/LmF1dGhjb2Rlbm9uY2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGREZWZhdWx0SGVhZGVycyhyZXF1ZXN0SWQ6IHN0cmluZyB8IHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCk6IHZvaWQge1xuICAgIHRoaXMuc2V0U2Vzc2lvbklkSGVhZGVyKHRoaXMuc2Vzc2lvbklkLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgYWRkT2NVc2VyQWdlbnRIZWFkZXIodGhpcy5vY1VzZXJBZ2VudCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgIHRoaXMuc2V0Q29ycmVsYXRpb25JZEluSGVhZGVyKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgcHJpdmF0ZSBzZXRTZXNzaW9uSWRIZWFkZXIgPSAoc2Vzc2lvbklkOiBzdHJpbmcgfCB1bmRlZmluZWQsIGhlYWRlcnM6IGFueSkgPT4ge1xuICAgIGlmIChzZXNzaW9uSWQpIHtcbiAgICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5vY1Nlc3Npb25JZF0gPSBzZXNzaW9uSWQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRSZXF1ZXN0SWRIZWFkZXIgPSAocmVxdWVzdElkOiBzdHJpbmcgfCB1bmRlZmluZWQsIGhlYWRlcnM6IFN0cmluZ01hcCkgPT4ge1xuICAgIGlmIChyZXF1ZXN0SWQpIHtcbiAgICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5yZXF1ZXN0SWRdID0gcmVxdWVzdElkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0Q29ycmVsYXRpb25JZEluSGVhZGVyID0gKGNvcnJlbGF0aW9uSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCwgaGVhZGVyczogU3RyaW5nTWFwKSA9PiB7XG4gICAgaWYgKGNvcnJlbGF0aW9uSWQpIHtcbiAgICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5jb3JyZWxhdGlvbklkXSA9IGNvcnJlbGF0aW9uSWQ7XG4gICAgfVxuICB9XG59XG5cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxNQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxrQkFBQSxHQUFBQyx1QkFBQSxDQUFBSixPQUFBO0FBRUEsSUFBQUssWUFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sVUFBQSxHQUFBSixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQU8sa0JBQUEsR0FBQVAsT0FBQTtBQUNBLElBQUFRLFdBQUEsR0FBQVIsT0FBQTtBQUVBLElBQUFTLE9BQUEsR0FBQVAsc0JBQUEsQ0FBQUYsT0FBQTtBQXFCQSxJQUFBVSxRQUFBLEdBQUFSLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBVyxTQUFBLEdBQUFYLE9BQUE7QUFDQSxJQUFBWSxpQkFBQSxHQUFBWixPQUFBO0FBRUEsSUFBQWEsT0FBQSxHQUFBYixPQUFBO0FBQ0EsSUFBQWMscUJBQUEsR0FBQVosc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFlLHVCQUFBLEdBQUFiLHNCQUFBLENBQUFGLE9BQUE7QUFNQSxJQUFBZ0IsSUFBQSxHQUFBZCxzQkFBQSxDQUFBRixPQUFBO0FBRUEsSUFBQWlCLE1BQUEsR0FBQWpCLE9BQUE7QUFDQSxJQUFBa0IsaUJBQUEsR0FBQWxCLE9BQUE7QUFDQSxJQUFBbUIsa0JBQUEsR0FBQW5CLE9BQUE7QUFDQSxJQUFBb0IscUJBQUEsR0FBQWxCLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBcUIsd0JBQUEsR0FBQW5CLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBc0IsS0FBQSxHQUFBdEIsT0FBQTtBQUNBLElBQUF1Qiw4QkFBQSxHQUFBdkIsT0FBQTtBQUFzRixJQUFBd0IsSUFBQTtBQUFBLFNBQUFwQix3QkFBQXFCLENBQUEsRUFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxNQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUF2Qix1QkFBQSxZQUFBQSx3QkFBQXFCLENBQUEsRUFBQUMsQ0FBQSxTQUFBQSxDQUFBLElBQUFELENBQUEsSUFBQUEsQ0FBQSxDQUFBSyxVQUFBLFNBQUFMLENBQUEsTUFBQU0sQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsS0FBQUMsU0FBQSxtQkFBQVQsQ0FBQSxpQkFBQUEsQ0FBQSxnQkFBQVUsUUFBQSxDQUFBVixDQUFBLDBCQUFBQSxDQUFBLFNBQUFRLENBQUEsTUFBQUYsQ0FBQSxHQUFBTCxDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxRQUFBRyxDQUFBLENBQUFLLEdBQUEsQ0FBQVgsQ0FBQSxVQUFBTSxDQUFBLENBQUFNLEdBQUEsQ0FBQVosQ0FBQSxHQUFBTSxDQUFBLENBQUFPLEdBQUEsQ0FBQWIsQ0FBQSxFQUFBUSxDQUFBLGNBQUFNLElBQUEsSUFBQWQsQ0FBQSxnQkFBQWMsSUFBQSxPQUFBQyxjQUFBLENBQUFDLElBQUEsQ0FBQWhCLENBQUEsRUFBQWMsSUFBQSxPQUFBUCxDQUFBLElBQUFELENBQUEsR0FBQVcsTUFBQSxDQUFBQyxjQUFBLEtBQUFELE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQW5CLENBQUEsRUFBQWMsSUFBQSxPQUFBUCxDQUFBLENBQUFLLEdBQUEsSUFBQUwsQ0FBQSxDQUFBTSxHQUFBLElBQUFQLENBQUEsQ0FBQUUsQ0FBQSxFQUFBTSxJQUFBLEVBQUFQLENBQUEsSUFBQUMsQ0FBQSxDQUFBTSxJQUFBLElBQUFkLENBQUEsQ0FBQWMsSUFBQSxXQUFBTixDQUFBLEtBQUFSLENBQUEsRUFBQUMsQ0FBQTtBQUFBLFNBQUFtQixRQUFBcEIsQ0FBQSxFQUFBRyxDQUFBLFFBQUFGLENBQUEsR0FBQWdCLE1BQUEsQ0FBQUksSUFBQSxDQUFBckIsQ0FBQSxPQUFBaUIsTUFBQSxDQUFBSyxxQkFBQSxRQUFBaEIsQ0FBQSxHQUFBVyxNQUFBLENBQUFLLHFCQUFBLENBQUF0QixDQUFBLEdBQUFHLENBQUEsS0FBQUcsQ0FBQSxHQUFBQSxDQUFBLENBQUFpQixNQUFBLFdBQUFwQixDQUFBLFdBQUFjLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQW5CLENBQUEsRUFBQUcsQ0FBQSxFQUFBcUIsVUFBQSxPQUFBdkIsQ0FBQSxDQUFBd0IsSUFBQSxDQUFBQyxLQUFBLENBQUF6QixDQUFBLEVBQUFLLENBQUEsWUFBQUwsQ0FBQTtBQUFBLFNBQUEwQixjQUFBM0IsQ0FBQSxhQUFBRyxDQUFBLE1BQUFBLENBQUEsR0FBQXlCLFNBQUEsQ0FBQUMsTUFBQSxFQUFBMUIsQ0FBQSxVQUFBRixDQUFBLFdBQUEyQixTQUFBLENBQUF6QixDQUFBLElBQUF5QixTQUFBLENBQUF6QixDQUFBLFFBQUFBLENBQUEsT0FBQWlCLE9BQUEsQ0FBQUgsTUFBQSxDQUFBaEIsQ0FBQSxPQUFBNkIsT0FBQSxXQUFBM0IsQ0FBQSxRQUFBNEIsZ0JBQUEsYUFBQS9CLENBQUEsRUFBQUcsQ0FBQSxFQUFBRixDQUFBLENBQUFFLENBQUEsU0FBQWMsTUFBQSxDQUFBZSx5QkFBQSxHQUFBZixNQUFBLENBQUFnQixnQkFBQSxDQUFBakMsQ0FBQSxFQUFBaUIsTUFBQSxDQUFBZSx5QkFBQSxDQUFBL0IsQ0FBQSxLQUFBbUIsT0FBQSxDQUFBSCxNQUFBLENBQUFoQixDQUFBLEdBQUE2QixPQUFBLFdBQUEzQixDQUFBLElBQUFjLE1BQUEsQ0FBQUMsY0FBQSxDQUFBbEIsQ0FBQSxFQUFBRyxDQUFBLEVBQUFjLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWxCLENBQUEsRUFBQUUsQ0FBQSxpQkFBQUgsQ0FBQTtBQUFBLFNBQUFrQywyQkFBQS9CLENBQUEsRUFBQUgsQ0FBQSxRQUFBQyxDQUFBLHlCQUFBa0MsTUFBQSxJQUFBaEMsQ0FBQSxDQUFBZ0MsTUFBQSxDQUFBQyxRQUFBLEtBQUFqQyxDQUFBLHFCQUFBRixDQUFBLFFBQUFvQyxLQUFBLENBQUFDLE9BQUEsQ0FBQW5DLENBQUEsTUFBQUYsQ0FBQSxHQUFBc0MsMkJBQUEsQ0FBQXBDLENBQUEsTUFBQUgsQ0FBQSxJQUFBRyxDQUFBLHVCQUFBQSxDQUFBLENBQUEwQixNQUFBLElBQUE1QixDQUFBLEtBQUFFLENBQUEsR0FBQUYsQ0FBQSxPQUFBdUMsRUFBQSxNQUFBQyxDQUFBLFlBQUFBLEVBQUEsZUFBQUMsQ0FBQSxFQUFBRCxDQUFBLEVBQUFyQyxDQUFBLFdBQUFBLEVBQUEsV0FBQW9DLEVBQUEsSUFBQXJDLENBQUEsQ0FBQTBCLE1BQUEsS0FBQWMsSUFBQSxXQUFBQSxJQUFBLE1BQUFDLEtBQUEsRUFBQXpDLENBQUEsQ0FBQXFDLEVBQUEsVUFBQXhDLENBQUEsV0FBQUEsRUFBQUcsQ0FBQSxVQUFBQSxDQUFBLEtBQUFLLENBQUEsRUFBQWlDLENBQUEsZ0JBQUFJLFNBQUEsaUpBQUF2QyxDQUFBLEVBQUF3QyxDQUFBLE9BQUFDLENBQUEsZ0JBQUFMLENBQUEsV0FBQUEsRUFBQSxJQUFBekMsQ0FBQSxHQUFBQSxDQUFBLENBQUFlLElBQUEsQ0FBQWIsQ0FBQSxNQUFBQyxDQUFBLFdBQUFBLEVBQUEsUUFBQUQsQ0FBQSxHQUFBRixDQUFBLENBQUErQyxJQUFBLFdBQUFGLENBQUEsR0FBQTNDLENBQUEsQ0FBQXdDLElBQUEsRUFBQXhDLENBQUEsS0FBQUgsQ0FBQSxXQUFBQSxFQUFBRyxDQUFBLElBQUE0QyxDQUFBLE9BQUF6QyxDQUFBLEdBQUFILENBQUEsS0FBQUssQ0FBQSxXQUFBQSxFQUFBLFVBQUFzQyxDQUFBLFlBQUE3QyxDQUFBLGNBQUFBLENBQUEsOEJBQUE4QyxDQUFBLFFBQUF6QyxDQUFBO0FBQUEsU0FBQWlDLDRCQUFBcEMsQ0FBQSxFQUFBMkMsQ0FBQSxRQUFBM0MsQ0FBQSwyQkFBQUEsQ0FBQSxTQUFBOEMsaUJBQUEsQ0FBQTlDLENBQUEsRUFBQTJDLENBQUEsT0FBQTdDLENBQUEsTUFBQWlELFFBQUEsQ0FBQWxDLElBQUEsQ0FBQWIsQ0FBQSxFQUFBZ0QsS0FBQSw2QkFBQWxELENBQUEsSUFBQUUsQ0FBQSxDQUFBaUQsV0FBQSxLQUFBbkQsQ0FBQSxHQUFBRSxDQUFBLENBQUFpRCxXQUFBLENBQUFDLElBQUEsYUFBQXBELENBQUEsY0FBQUEsQ0FBQSxHQUFBb0MsS0FBQSxDQUFBaUIsSUFBQSxDQUFBbkQsQ0FBQSxvQkFBQUYsQ0FBQSwrQ0FBQXNELElBQUEsQ0FBQXRELENBQUEsSUFBQWdELGlCQUFBLENBQUE5QyxDQUFBLEVBQUEyQyxDQUFBO0FBQUEsU0FBQUcsa0JBQUE5QyxDQUFBLEVBQUEyQyxDQUFBLGFBQUFBLENBQUEsSUFBQUEsQ0FBQSxHQUFBM0MsQ0FBQSxDQUFBMEIsTUFBQSxNQUFBaUIsQ0FBQSxHQUFBM0MsQ0FBQSxDQUFBMEIsTUFBQSxZQUFBN0IsQ0FBQSxNQUFBSSxDQUFBLEdBQUFpQyxLQUFBLENBQUFTLENBQUEsR0FBQTlDLENBQUEsR0FBQThDLENBQUEsRUFBQTlDLENBQUEsSUFBQUksQ0FBQSxDQUFBSixDQUFBLElBQUFHLENBQUEsQ0FBQUgsQ0FBQSxVQUFBSSxDQUFBO0FBQUEsSUFFakVvRCxHQUFHLEdBQUFDLE9BQUE7RUEyQ3RCLFNBQUFELElBQTJCRSx3QkFBbUQsRUFBcUc7SUFBQSxJQUFBQyxLQUFBO0lBQUEsSUFBM0ZDLGFBQWdDLEdBQUFoQyxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBaUMsU0FBQSxHQUFBakMsU0FBQSxNQUFHNEIsR0FBRyxDQUFDTSxvQkFBb0I7SUFBQSxJQUFVQyxNQUFvQixHQUFBbkMsU0FBQSxDQUFBQyxNQUFBLE9BQUFELFNBQUEsTUFBQWlDLFNBQUE7SUFBQSxJQUFBRyxnQkFBQSxtQkFBQVIsR0FBQTtJQUFBLEtBQXRKRSx3QkFBbUQsR0FBbkRBLHdCQUFtRDtJQUFBLEtBQVVFLGFBQWdDLEdBQWhDQSxhQUFnQztJQUFBLEtBQXFDRyxNQUFvQixHQUFwQkEsTUFBb0I7SUFBQSxJQUFBaEMsZ0JBQUE7SUFBQSxJQUFBQSxnQkFBQTtJQUFBLElBQUFBLGdCQUFBO0lBQUEsSUFBQUEsZ0JBQUEsaURBQUFrQyxNQUFBLENBSHBKQyxlQUFRLENBQUNDLDBCQUEwQixRQUFBRixNQUFBLENBQUtDLGVBQVEsQ0FBQ0UsNkJBQTZCO0lBZ3JEM0c7SUFBQSxJQUFBckMsZ0JBQUEsdUNBQzJCLFVBQUNzQyxPQUFZLEVBQUs7TUFDM0MsSUFBSUEsT0FBTyxhQUFQQSxPQUFPLGVBQVBBLE9BQU8sQ0FBRUMsYUFBYSxFQUFFO1FBQzFCWCxLQUFJLENBQUNDLGFBQWEsQ0FBQ1csYUFBYSxHQUFHRixPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRUMsYUFBYTtNQUMzRDtJQUNGLENBQUM7SUFRRDtJQUFBLElBQUF2QyxnQkFBQSx5Q0FDNkIsVUFBQ3lDLFNBQTZCLEVBQUVILE9BQVksRUFBSztNQUM1RSxJQUFJRyxTQUFTLEVBQUU7UUFDYkgsT0FBTyxDQUFDSSxrQ0FBc0IsQ0FBQ0MsV0FBVyxDQUFDLEdBQUdGLFNBQVM7TUFDekQ7SUFDRixDQUFDO0lBQUEsSUFBQXpDLGdCQUFBLHlDQUU0QixVQUFDNEMsU0FBNkIsRUFBRU4sT0FBa0IsRUFBSztNQUNsRixJQUFJTSxTQUFTLEVBQUU7UUFDYk4sT0FBTyxDQUFDSSxrQ0FBc0IsQ0FBQ0UsU0FBUyxDQUFDLEdBQUdBLFNBQVM7TUFDdkQ7SUFDRixDQUFDO0lBQUEsSUFBQTVDLGdCQUFBLCtDQUVrQyxVQUFDNkMsYUFBaUMsRUFBRVAsT0FBa0IsRUFBSztNQUM1RixJQUFJTyxhQUFhLEVBQUU7UUFDakJQLE9BQU8sQ0FBQ0ksa0NBQXNCLENBQUNHLGFBQWEsQ0FBQyxHQUFHQSxhQUFhO01BQy9EO0lBQ0YsQ0FBQztJQTFzREM7SUFDQSxJQUFJLENBQUMzRCxNQUFNLENBQUNJLElBQUksQ0FBQyxJQUFJLENBQUN1QyxhQUFhLENBQUMsQ0FBQy9CLE1BQU0sSUFBSSxJQUFBZ0QsUUFBQSxhQUFRakIsYUFBYSxNQUFNLFFBQVEsRUFBRTtNQUNsRixJQUFJLENBQUNBLGFBQWEsR0FBR0osR0FBRyxDQUFDTSxvQkFBb0I7SUFDL0M7O0lBRUE7SUFDQSxTQUFBZ0IsRUFBQSxNQUFBQyxZQUFBLEdBQWtCOUQsTUFBTSxDQUFDSSxJQUFJLENBQUNtQyxHQUFHLENBQUNNLG9CQUFvQixDQUFDLEVBQUFnQixFQUFBLEdBQUFDLFlBQUEsQ0FBQWxELE1BQUEsRUFBQWlELEVBQUEsSUFBRTtNQUFwRCxJQUFNRSxHQUFHLEdBQUFELFlBQUEsQ0FBQUQsRUFBQTtNQUNaLElBQUksQ0FBQyxJQUFJLENBQUNsQixhQUFhLENBQUM3QyxjQUFjLENBQUNpRSxHQUFHLENBQUMsRUFBRTtRQUFFO1FBQzdDLElBQUksQ0FBQ3BCLGFBQWEsSUFBQUssTUFBQSxDQUFJZSxHQUFHLEVBQUcsR0FBR3hCLEdBQUcsQ0FBQ00sb0JBQW9CLElBQUFHLE1BQUEsQ0FBSWUsR0FBRyxFQUFHO01BQ25FO0lBQ0Y7O0lBRUE7SUFDQSxTQUFBQyxHQUFBLE1BQUFDLGFBQUEsR0FBa0JqRSxNQUFNLENBQUNJLElBQUksQ0FBQ21DLEdBQUcsQ0FBQ00sb0JBQW9CLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxFQUFBbUIsR0FBQSxHQUFBQyxhQUFBLENBQUFyRCxNQUFBLEVBQUFvRCxHQUFBLElBQUU7TUFBNUUsSUFBTUQsSUFBRyxHQUFBRSxhQUFBLENBQUFELEdBQUE7TUFDWixJQUFJLENBQUMsSUFBSSxDQUFDckIsYUFBYSxDQUFDLHNCQUFzQixDQUFDLENBQUM3QyxjQUFjLENBQUNpRSxJQUFHLENBQUMsRUFBRTtRQUFFO1FBQ3JFLElBQUksQ0FBQ3BCLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFBSyxNQUFBLENBQUllLElBQUcsRUFBRyxHQUFHeEIsR0FBRyxDQUFDTSxvQkFBb0IsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFBRyxNQUFBLENBQUllLElBQUcsRUFBRztNQUNuSDtJQUNGOztJQUVBO0lBQ0EsSUFBUUcsU0FBUyxHQUFLekIsd0JBQXdCLENBQXRDeUIsU0FBUztJQUNqQixJQUFJLENBQUNsRSxNQUFNLENBQUNtRSxNQUFNLENBQUNDLGdCQUFTLENBQUMsQ0FBQ0MsUUFBUSxDQUFDSCxTQUFzQixDQUFDLEVBQUU7TUFDOUQsTUFBTSxJQUFJSSxLQUFLLG9CQUFvQixDQUFDO0lBQ3RDOztJQUVBO0lBQ0EsSUFBTUMseUNBQXlDLEdBQUd2RSxNQUFNLENBQUNJLElBQUksQ0FBQ3FDLHdCQUF3QixDQUFDO0lBQUMsSUFBQStCLFNBQUEsR0FBQXZELDBCQUFBLENBQ3RFd0QscUJBQVMsQ0FBQ0MsMENBQTBDO01BQUFDLEtBQUE7SUFBQTtNQUF0RSxLQUFBSCxTQUFBLENBQUEvQyxDQUFBLE1BQUFrRCxLQUFBLEdBQUFILFNBQUEsQ0FBQXJGLENBQUEsSUFBQXVDLElBQUEsR0FBd0U7UUFBQSxJQUE3RHFDLEtBQUcsR0FBQVksS0FBQSxDQUFBaEQsS0FBQTtRQUNaLElBQUksQ0FBQzRDLHlDQUF5QyxDQUFDRixRQUFRLENBQUNOLEtBQUcsQ0FBQyxFQUFFO1VBQzVELE1BQU0sSUFBSU8sS0FBSyxhQUFBdEIsTUFBQSxDQUFhZSxLQUFHLGtDQUErQixDQUFDO1FBQ2pFO01BQ0Y7SUFBQyxTQUFBYSxHQUFBO01BQUFKLFNBQUEsQ0FBQXpGLENBQUEsQ0FBQTZGLEdBQUE7SUFBQTtNQUFBSixTQUFBLENBQUFqRixDQUFBO0lBQUE7SUFFRCxJQUFJLENBQUNzRixXQUFXLEdBQUcsSUFBSSxDQUFDbEMsYUFBYSxDQUFDa0MsV0FBVztJQUNqRCxJQUFJLENBQUNDLGVBQWUsR0FBR0Msc0JBQWUsQ0FBQ0MsRUFBRTtFQUMzQzs7RUFHQTtBQUNGO0FBQ0E7RUFGRSxXQUFBQyxhQUFBLGFBQUExQyxHQUFBO0lBQUF3QixHQUFBO0lBQUFwQyxLQUFBO01BQUEsSUFBQXVELGlCQUFBLE9BQUFDLGtCQUFBLDBCQUFBQyxZQUFBLFlBQUFDLElBQUEsQ0FHQSxTQUFBQyxRQUFBO1FBQUEsSUFBQUMsS0FBQSxFQUFBQyxXQUFBLEVBQUFDLE1BQUEsRUFBQUMsR0FBQSxFQUFBQyxhQUFBLEVBQUFDLGNBQUEsRUFBQUMsWUFBQSxFQUFBQyxxQkFBQSxFQUFBQyxRQUFBLEVBQUFDLHVCQUFBLEVBQUFDLHlCQUFBLEVBQUFDLElBQUEsRUFBQUMsd0JBQUEsRUFBQUMsMEJBQUEsRUFBQUMsRUFBQTtRQUFBLE9BQUFqQixZQUFBLFlBQUFrQixJQUFBLFdBQUFDLFFBQUE7VUFBQSxrQkFBQUEsUUFBQSxDQUFBQyxJQUFBLEdBQUFELFFBQUEsQ0FBQXhFLElBQUE7WUFBQTtjQUNRd0QsS0FBSyxHQUFHa0IsWUFBSyxDQUFDQyxLQUFLLENBQUMsQ0FBQztjQUMzQixJQUFJLENBQUNDLGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQ0MsSUFBSSxFQUFFQywwQkFBbUIsQ0FBQ0MsdUJBQXVCLEVBQUUsNkJBQTZCLEVBQUUsRUFBRSxDQUFDO2NBRTNHdkIsV0FBVyxPQUFBeEMsTUFBQSxDQUFPZ0UsZ0NBQW9CLENBQUNDLGlCQUFpQixPQUFBakUsTUFBQSxDQUFJLElBQUksQ0FBQ1Asd0JBQXdCLENBQUN5RSxLQUFLO2NBQy9GekIsTUFBTSxHQUFHLEtBQUs7Y0FDZEMsR0FBRyxNQUFBMUMsTUFBQSxDQUFNLElBQUksQ0FBQ1Asd0JBQXdCLENBQUMwRSxNQUFNLEVBQUFuRSxNQUFBLENBQUd3QyxXQUFXO2NBQzNERyxhQUFhLEdBQUd5QixpQkFBSyxDQUFDQyxNQUFNLENBQUMsQ0FBQztjQUNwQyxJQUFBQyw2QkFBaUIsRUFBQzNCLGFBQWEsRUFBRTtnQkFDL0I0QixPQUFPLEVBQUUsSUFBSSxDQUFDNUUsYUFBYSxDQUFDNkUsMEJBQTBCO2dCQUN0REMsMEJBQTBCLEVBQUUsSUFBSSxDQUFDOUUsYUFBYSxDQUFDK0UsNEJBQTRCLENBQUNDO2NBQzlFLENBQUMsQ0FBQztjQUVJL0IsY0FBYyxHQUFHLENBQUMsQ0FBQztjQUN6QixJQUFBZ0Msc0NBQW9CLEVBQUMsSUFBSSxDQUFDL0MsV0FBVyxFQUFFZSxjQUFjLENBQUM7Y0FFaERDLFlBQVksR0FBR1ksWUFBSyxDQUFDQyxLQUFLLENBQUMsQ0FBQztjQUFBSCxRQUFBLENBQUFDLElBQUE7Y0FBQUQsUUFBQSxDQUFBeEUsSUFBQTtjQUFBLE9BRVQ0RCxhQUFhLENBQUNoRyxHQUFHLENBQUMrRixHQUFHLEVBQUU7Z0JBQzVDdEMsT0FBTyxFQUFFd0MsY0FBYztnQkFDdkJpQyxPQUFPLEdBQUEvQixxQkFBQSxHQUFFLElBQUksQ0FBQ25ELGFBQWEsQ0FBQ21GLHFCQUFxQixjQUFBaEMscUJBQUEsY0FBQUEscUJBQUEsR0FBSSxJQUFJLENBQUNuRCxhQUFhLENBQUNvRixvQkFBb0IsQ0FBQ0o7Y0FDL0YsQ0FBQyxDQUFDO1lBQUE7Y0FISTVCLFFBQVEsR0FBQVEsUUFBQSxDQUFBeUIsSUFBQTtjQUlSaEMsdUJBQXVCLEdBQUdILFlBQVksQ0FBQ29DLG1CQUFtQjtjQUMxRGhDLHlCQUF5QixHQUFHVixLQUFLLENBQUMwQyxtQkFBbUI7Y0FDbkQvQixJQUFJLEdBQUtILFFBQVEsQ0FBakJHLElBQUk7Y0FDWixJQUFJLENBQUNTLGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQ0MsSUFBSSxFQUFFQywwQkFBbUIsQ0FBQ29CLHlCQUF5QixFQUFFLCtCQUErQixFQUFFLEVBQUUsRUFBRW5DLFFBQVEsRUFBRUUseUJBQXlCLEVBQUVULFdBQVcsRUFBRUMsTUFBTSxFQUFFN0MsU0FBUyxFQUFFQSxTQUFTLEVBQUVnRCxjQUFjLEVBQUVJLHVCQUF1QixDQUFDO2NBQUMsT0FBQU8sUUFBQSxDQUFBNEIsTUFBQSxXQUN4T2pDLElBQUk7WUFBQTtjQUFBSyxRQUFBLENBQUFDLElBQUE7Y0FBQUgsRUFBQSxHQUFBRSxRQUFBO2NBRUxQLHdCQUF1QixHQUFHSCxZQUFZLENBQUNvQyxtQkFBbUI7Y0FDMURoQywwQkFBeUIsR0FBR1YsS0FBSyxDQUFDMEMsbUJBQW1CO2NBQzNELElBQUksQ0FBQ3RCLGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQ3dCLEtBQUssRUFBRXRCLDBCQUFtQixDQUFDdUIsc0JBQXNCLEVBQUUsNEJBQTRCLEVBQUUsRUFBRSxFQUFFekYsU0FBUyxFQUFFcUQsMEJBQXlCLEVBQUVULFdBQVcsRUFBRUMsTUFBTSxFQUFBWSxFQUFBLEVBQVN6RCxTQUFTLEVBQUVnRCxjQUFjLEVBQUVJLHdCQUF1QixDQUFDO2NBQUMsTUFBQUssRUFBQTtZQUFBO1lBQUE7Y0FBQSxPQUFBRSxRQUFBLENBQUErQixJQUFBO1VBQUE7UUFBQSxHQUFBaEQsT0FBQTtNQUFBLENBRzFPO01BQUEsU0FqQ1lpRCxnQkFBZ0JBLENBQUE7UUFBQSxPQUFBckQsaUJBQUEsQ0FBQXpFLEtBQUEsT0FBQUUsU0FBQTtNQUFBO01BQUEsT0FBaEI0SCxnQkFBZ0I7SUFBQTtJQW1DN0I7QUFDRjtBQUNBO0FBQ0E7SUFIRTtFQUFBO0lBQUF4RSxHQUFBO0lBQUFwQyxLQUFBO01BQUEsSUFBQTZHLGNBQUEsT0FBQXJELGtCQUFBLDBCQUFBQyxZQUFBLFlBQUFDLElBQUEsQ0FJQSxTQUFBb0QsU0FBMkIvRSxTQUFpQjtRQUFBLElBQUFnRixXQUFBO1VBQUFuRCxLQUFBO1VBQUFDLFdBQUE7VUFBQUMsTUFBQTtVQUFBQyxHQUFBO1VBQUFDLGFBQUE7VUFBQUMsY0FBQTtVQUFBQyxZQUFBO1VBQUE4QyxzQkFBQTtVQUFBNUMsUUFBQTtVQUFBQyx1QkFBQTtVQUFBQyx5QkFBQTtVQUFBQyxJQUFBO1VBQUEwQyx5QkFBQTtVQUFBQywyQkFBQTtVQUFBQyxNQUFBLEdBQUFuSSxTQUFBO1VBQUFvSSxHQUFBO1FBQUEsT0FBQTNELFlBQUEsWUFBQWtCLElBQUEsV0FBQTBDLFNBQUE7VUFBQSxrQkFBQUEsU0FBQSxDQUFBeEMsSUFBQSxHQUFBd0MsU0FBQSxDQUFBakgsSUFBQTtZQUFBO2NBQUUyRyxXQUFXLEdBQUFJLE1BQUEsQ0FBQWxJLE1BQUEsUUFBQWtJLE1BQUEsUUFBQWxHLFNBQUEsR0FBQWtHLE1BQUEsTUFBRyxLQUFLO2NBQ3pEdkQsS0FBSyxHQUFHa0IsWUFBSyxDQUFDQyxLQUFLLENBQUMsQ0FBQztjQUMzQixJQUFJLENBQUNDLGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQ0MsSUFBSSxFQUFFQywwQkFBbUIsQ0FBQ21DLHFCQUFxQixFQUFFLHlCQUF5QixFQUFFdkYsU0FBUyxDQUFDO2NBQ2xILElBQUksQ0FBQ0EsU0FBUyxFQUFFO2dCQUNkQSxTQUFTLEdBQUcsSUFBQXdGLFlBQU0sRUFBQyxDQUFDO2NBQ3RCO2NBRU0xRCxXQUFXLE9BQUF4QyxNQUFBLENBQU9nRSxnQ0FBb0IsQ0FBQ21DLGtCQUFrQixPQUFBbkcsTUFBQSxDQUFJLElBQUksQ0FBQ1Asd0JBQXdCLENBQUN5RSxLQUFLLE9BQUFsRSxNQUFBLENBQUksSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQzJHLFFBQVEsaUJBQUFwRyxNQUFBLENBQWNVLFNBQVMsaUJBQUFWLE1BQUEsQ0FBYyxJQUFJLENBQUNQLHdCQUF3QixDQUFDeUIsU0FBUztjQUN0TnVCLE1BQU0sR0FBRyxLQUFLO2NBQ2RDLEdBQUcsTUFBQTFDLE1BQUEsQ0FBTSxJQUFJLENBQUNQLHdCQUF3QixDQUFDMEUsTUFBTSxFQUFBbkUsTUFBQSxDQUFHd0MsV0FBVztjQUMzREcsYUFBYSxHQUFHeUIsaUJBQUssQ0FBQ0MsTUFBTSxDQUFDLENBQUM7Y0FDcEMsSUFBQUMsNkJBQWlCLEVBQUMzQixhQUFhLEVBQUU7Z0JBQy9CNEIsT0FBTyxFQUFFLElBQUksQ0FBQzVFLGFBQWEsQ0FBQzZFLDBCQUEwQjtnQkFDdERDLDBCQUEwQixFQUFFLElBQUksQ0FBQzlFLGFBQWEsQ0FBQytFLDRCQUE0QixDQUFDQztjQUM5RSxDQUFDLENBQUM7Y0FFRS9CLGNBQWMsR0FBRyxDQUFDLENBQUM7Y0FDdkIsSUFBSSxDQUFDeUQsaUJBQWlCLENBQUMzRixTQUFTLEVBQUVrQyxjQUFjLENBQUM7Y0FFakQsSUFBSThDLFdBQVcsRUFBRTtnQkFDZjlDLGNBQWMsR0FBQWxGLGFBQUEsQ0FBQUEsYUFBQSxLQUFRK0QscUJBQVMsQ0FBQzZFLGtCQUFrQixHQUFLMUQsY0FBYyxDQUFFO2NBQ3pFO2NBRU1DLFlBQVksR0FBR1ksWUFBSyxDQUFDQyxLQUFLLENBQUMsQ0FBQztjQUFBc0MsU0FBQSxDQUFBeEMsSUFBQTtjQUFBd0MsU0FBQSxDQUFBakgsSUFBQTtjQUFBLE9BRVQ0RCxhQUFhLENBQUNoRyxHQUFHLENBQUMrRixHQUFHLEVBQUU7Z0JBQzVDdEMsT0FBTyxFQUFFd0MsY0FBYztnQkFDdkJpQyxPQUFPLEdBQUFjLHNCQUFBLEdBQUUsSUFBSSxDQUFDaEcsYUFBYSxDQUFDbUYscUJBQXFCLGNBQUFhLHNCQUFBLGNBQUFBLHNCQUFBLEdBQUksSUFBSSxDQUFDaEcsYUFBYSxDQUFDb0Ysb0JBQW9CLENBQUNKO2NBQy9GLENBQUMsQ0FBQztZQUFBO2NBSEk1QixRQUFRLEdBQUFpRCxTQUFBLENBQUFoQixJQUFBO2NBSVJoQyx1QkFBdUIsR0FBR0gsWUFBWSxDQUFDb0MsbUJBQW1CO2NBQzFEaEMseUJBQXlCLEdBQUdWLEtBQUssQ0FBQzBDLG1CQUFtQjtjQUNuRC9CLElBQUksR0FBS0gsUUFBUSxDQUFqQkcsSUFBSTtjQUVaLElBQUlBLElBQUksQ0FBQ25CLGVBQWUsRUFBRTtnQkFDeEIsSUFBSSxDQUFDRCxlQUFlLEdBQUdvQixJQUFJLENBQUNuQixlQUFlO2NBQzdDO2NBRUFtQixJQUFJLENBQUM5QyxPQUFPLEdBQUcsQ0FBQyxDQUFDO2NBQ2pCLElBQUkyQyxRQUFRLENBQUMzQyxPQUFPLElBQUkyQyxRQUFRLENBQUMzQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ2hEOEMsSUFBSSxDQUFDOUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHMkMsUUFBUSxDQUFDM0MsT0FBTyxDQUFDLE1BQU0sQ0FBQztjQUNqRDtjQUNBLElBQUksQ0FBQ3VELGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQ0MsSUFBSSxFQUFFQywwQkFBbUIsQ0FBQ3lDLHNCQUFzQixFQUFFLDJCQUEyQixFQUFFN0YsU0FBUyxFQUFFcUMsUUFBUSxFQUFFRSx5QkFBeUIsRUFBRVQsV0FBVyxFQUFFQyxNQUFNLEVBQUU3QyxTQUFTLEVBQUVBLFNBQVMsRUFBRWdELGNBQWMsRUFBRUksdUJBQXVCLENBQUM7Y0FBQyxPQUFBZ0QsU0FBQSxDQUFBYixNQUFBLFdBRXhPakMsSUFBSTtZQUFBO2NBQUE4QyxTQUFBLENBQUF4QyxJQUFBO2NBQUF1QyxHQUFBLEdBQUFDLFNBQUE7Y0FFTGhELHlCQUF1QixHQUFHSCxZQUFZLENBQUNvQyxtQkFBbUI7Y0FDMURoQywyQkFBeUIsR0FBR1YsS0FBSyxDQUFDMEMsbUJBQW1CO2NBQzNELElBQUksQ0FBQ3RCLGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQ3dCLEtBQUssRUFBRXRCLDBCQUFtQixDQUFDMEMsbUJBQW1CLEVBQUUsd0JBQXdCLEVBQUU5RixTQUFTLEVBQUVkLFNBQVMsRUFBRXFELDJCQUF5QixFQUFFVCxXQUFXLEVBQUVDLE1BQU0sRUFBQXNELEdBQUEsRUFBU25HLFNBQVMsRUFBRWdELGNBQWMsRUFBRUkseUJBQXVCLENBQUM7Y0FBQyxPQUFBZ0QsU0FBQSxDQUFBYixNQUFBLFdBQ2hPc0IsT0FBTyxDQUFDQyxNQUFNLENBQUFYLEdBQU0sQ0FBQztZQUFBO1lBQUE7Y0FBQSxPQUFBQyxTQUFBLENBQUFWLElBQUE7VUFBQTtRQUFBLEdBQUFHLFFBQUE7TUFBQSxDQUUvQjtNQUFBLFNBbERZZCxhQUFhQSxDQUFBZ0MsRUFBQTtRQUFBLE9BQUFuQixjQUFBLENBQUEvSCxLQUFBLE9BQUFFLFNBQUE7TUFBQTtNQUFBLE9BQWJnSCxhQUFhO0lBQUE7SUFvRDFCO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7SUFKRTtFQUFBO0lBQUE1RCxHQUFBO0lBQUFwQyxLQUFBO01BQUEsSUFBQWlJLGNBQUEsT0FBQXpFLGtCQUFBLDBCQUFBQyxZQUFBLFlBQUFDLElBQUEsQ0FLQSxTQUFBd0UsU0FBMkJuRyxTQUFpQjtRQUFBLElBQUFvRyxzQkFBQTtVQUFBQyxNQUFBO1FBQUEsSUFBQUMsMkJBQUE7VUFBQXpFLEtBQUE7VUFBQUMsV0FBQTtVQUFBRyxhQUFBO1VBQUFzRSxzQkFBQTtVQUFBQyxXQUFBO1VBQUF0RSxjQUFBO1VBQUF1RSxzQkFBQTtVQUFBQyxNQUFBO1VBQUExRSxHQUFBO1VBQUFELE1BQUE7VUFBQTRFLE9BQUE7VUFBQUMsTUFBQSxHQUFBM0osU0FBQTtRQUFBLE9BQUF5RSxZQUFBLFlBQUFrQixJQUFBLFdBQUFpRSxTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQS9ELElBQUEsR0FBQStELFNBQUEsQ0FBQXhJLElBQUE7WUFBQTtjQUFFaUksMkJBQXlELEdBQUFNLE1BQUEsQ0FBQTFKLE1BQUEsUUFBQTBKLE1BQUEsUUFBQTFILFNBQUEsR0FBQTBILE1BQUEsTUFBRyxDQUFDLENBQUM7Y0FDcEcvRSxLQUFLLEdBQUdrQixZQUFLLENBQUNDLEtBQUssQ0FBQyxDQUFDO2NBQzNCLElBQUksQ0FBQ0MsYUFBYSxDQUFDQyxrQkFBUSxDQUFDQyxJQUFJLEVBQUVDLDBCQUFtQixDQUFDMEQsbUJBQW1CLEVBQUUseUJBQXlCLEVBQUU5RyxTQUFTLENBQUM7Y0FFaEgsSUFBSSxDQUFDQSxTQUFTLEVBQUU7Z0JBQ2RBLFNBQVMsR0FBRyxJQUFBd0YsWUFBTSxFQUFDLENBQUM7Y0FDdEI7O2NBRUE7Y0FDSTFELFdBQVcsT0FBQXhDLE1BQUEsQ0FBT2dFLGdDQUFvQixDQUFDeUQsK0JBQStCLE9BQUF6SCxNQUFBLENBQUksSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQ3lFLEtBQUssT0FBQWxFLE1BQUEsQ0FBSSxJQUFJLENBQUNQLHdCQUF3QixDQUFDMkcsUUFBUSxPQUFBcEcsTUFBQSxDQUFJVSxTQUFTO2NBQ2xLaUMsYUFBYSxHQUFHeUIsaUJBQUssQ0FBQ0MsTUFBTSxDQUFDLENBQUM7Y0FDcEMsSUFBQXFELGdEQUE2QixFQUFDL0UsYUFBYSxFQUFFO2dCQUMzQ2dGLGdCQUFnQixFQUFFLENBQUNuSCxrQ0FBc0IsQ0FBQ0YsYUFBYSxDQUFDO2dCQUN4RGlFLE9BQU8sRUFBRSxJQUFJLENBQUM1RSxhQUFhLENBQUM2RSwwQkFBMEI7Z0JBQ3REQywwQkFBMEIsRUFBRSxJQUFJLENBQUM5RSxhQUFhLENBQUMrRSw0QkFBNEIsQ0FBQ2tEO2NBQzlFLENBQUMsQ0FBQzs7Y0FFRjtjQUNRWCxzQkFBc0IsR0FBa0JELDJCQUEyQixDQUFuRUMsc0JBQXNCLEVBQUVDLFdBQVcsR0FBS0YsMkJBQTJCLENBQTNDRSxXQUFXO2NBQ3JDdEUsY0FBeUIsR0FBR25CLHFCQUFTLENBQUNvRyxjQUFjLEVBRTFEO2NBQ0EsSUFBSVosc0JBQXNCLEVBQUU7Z0JBQzFCekUsV0FBVyxPQUFBeEMsTUFBQSxDQUFPZ0UsZ0NBQW9CLENBQUM4RCxtQ0FBbUMsT0FBQTlILE1BQUEsQ0FBSSxJQUFJLENBQUNQLHdCQUF3QixDQUFDeUUsS0FBSyxPQUFBbEUsTUFBQSxDQUFJLElBQUksQ0FBQ1Asd0JBQXdCLENBQUMyRyxRQUFRLE9BQUFwRyxNQUFBLENBQUlVLFNBQVMsQ0FBRTtnQkFDMUtrQyxjQUFjLENBQUNwQyxrQ0FBc0IsQ0FBQ3lHLHNCQUFzQixDQUFDLEdBQUdBLHNCQUFzQjtnQkFDdEZyRSxjQUFjLENBQUNwQyxrQ0FBc0IsQ0FBQ0YsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDWCxhQUFhLENBQUNXLGFBQWE7Y0FDekY7Y0FFQSxJQUFJLENBQUMrRixpQkFBaUIsQ0FBQzNGLFNBQVMsRUFBRWtDLGNBQWMsQ0FBQzs7Y0FFakQ7Y0FDTXVFLHNCQUFzQixHQUFHLENBQUNGLHNCQUFzQixJQUFJLElBQUksQ0FBQ3RILGFBQWEsQ0FBQ29JLGlDQUFpQyxLQUFLLElBQUk7Y0FDdkgsSUFBSWIsV0FBVyxFQUFFO2dCQUNmLElBQUksQ0FBQ0Msc0JBQXNCLEVBQUU7a0JBQzNCM0UsV0FBVyxRQUFBeEMsTUFBQSxDQUFRa0gsV0FBVyxDQUFFO2dCQUNsQztjQUNGO2NBRU1FLE1BQWlDLEdBQUc7Z0JBQ3hDbEcsU0FBUyxFQUFFLElBQUksQ0FBQ3pCLHdCQUF3QixDQUFDeUI7Y0FDM0MsQ0FBQztjQUVELElBQUlnRyxXQUFXLEVBQUU7Z0JBQ2YsSUFBSUMsc0JBQXNCLEVBQUU7a0JBQzFCQyxNQUFNLENBQUNZLEdBQUcsR0FBR2QsV0FBVztnQkFDMUI7Y0FDRjtjQUVNeEUsR0FBRyxNQUFBMUMsTUFBQSxDQUFNLElBQUksQ0FBQ1Asd0JBQXdCLENBQUMwRSxNQUFNLEVBQUFuRSxNQUFBLENBQUd3QyxXQUFXO2NBQzNEQyxNQUFNLEdBQUcsS0FBSztjQUNkNEUsT0FBMkIsR0FBRztnQkFDbENqSCxPQUFPLEVBQUV3QyxjQUFjO2dCQUN2QkgsTUFBTSxFQUFOQSxNQUFNO2dCQUNOQyxHQUFHLEVBQUhBLEdBQUc7Z0JBQ0gwRSxNQUFNLEVBQU5BLE1BQU07Z0JBQ052QyxPQUFPLEdBQUFpQyxzQkFBQSxHQUFFLElBQUksQ0FBQ25ILGFBQWEsQ0FBQ21GLHFCQUFxQixjQUFBZ0Msc0JBQUEsY0FBQUEsc0JBQUEsR0FBSSxJQUFJLENBQUNuSCxhQUFhLENBQUNvRixvQkFBb0IsQ0FBQzZDO2NBQy9GLENBQUM7Y0FBQSxPQUFBTCxTQUFBLENBQUFwQyxNQUFBLFdBRU0sSUFBSXNCLE9BQU87Z0JBQUEsSUFBQXdCLElBQUEsT0FBQTlGLGtCQUFBLDBCQUFBQyxZQUFBLFlBQUFDLElBQUEsQ0FBQyxTQUFBNkYsU0FBT0MsT0FBTyxFQUFFekIsTUFBTTtrQkFBQSxJQUFBN0QsWUFBQSxFQUFBRSxRQUFBLEVBQUFDLHVCQUFBLEVBQUFDLHlCQUFBLEVBQUFDLElBQUEsRUFBQTlDLE9BQUEsRUFBQWdJLHlCQUFBLEVBQUFDLDJCQUFBLEVBQUFDLEdBQUE7a0JBQUEsT0FBQWxHLFlBQUEsWUFBQWtCLElBQUEsV0FBQWlGLFNBQUE7b0JBQUEsa0JBQUFBLFNBQUEsQ0FBQS9FLElBQUEsR0FBQStFLFNBQUEsQ0FBQXhKLElBQUE7c0JBQUE7d0JBQ2pDOEQsWUFBWSxHQUFHWSxZQUFLLENBQUNDLEtBQUssQ0FBQyxDQUFDO3dCQUFBNkUsU0FBQSxDQUFBL0UsSUFBQTt3QkFBQStFLFNBQUEsQ0FBQXhKLElBQUE7d0JBQUEsT0FFVDRELGFBQWEsQ0FBQzBFLE9BQU8sQ0FBQztzQkFBQTt3QkFBdkN0RSxRQUFRLEdBQUF3RixTQUFBLENBQUF2RCxJQUFBO3dCQUNSaEMsdUJBQXVCLEdBQUdILFlBQVksQ0FBQ29DLG1CQUFtQjt3QkFDMURoQyx5QkFBeUIsR0FBR1YsS0FBSyxDQUFDMEMsbUJBQW1CO3dCQUNuRC9CLElBQUksR0FBY0gsUUFBUSxDQUExQkcsSUFBSSxFQUFFOUMsT0FBTyxHQUFLMkMsUUFBUSxDQUFwQjNDLE9BQU87d0JBQ3JCMkcsTUFBSSxDQUFDeUIsZ0JBQWdCLENBQUNwSSxPQUFPLENBQUM7d0JBRTlCMkcsTUFBSSxDQUFDcEQsYUFBYSxDQUFDQyxrQkFBUSxDQUFDQyxJQUFJLEVBQUVDLDBCQUFtQixDQUFDMkUscUJBQXFCLEVBQUUsMkJBQTJCLEVBQUUvSCxTQUFTLEVBQUVxQyxRQUFRLEVBQUVFLHlCQUF5QixFQUFFVCxXQUFXLEVBQUVDLE1BQU0sRUFBRTdDLFNBQVMsRUFBRUEsU0FBUyxFQUFFZ0QsY0FBYyxFQUFFSSx1QkFBdUIsQ0FBQzt3QkFDN09tRixPQUFPLENBQUNqRixJQUFJLENBQUM7d0JBQUNxRixTQUFBLENBQUF4SixJQUFBO3dCQUFBO3NCQUFBO3dCQUFBd0osU0FBQSxDQUFBL0UsSUFBQTt3QkFBQThFLEdBQUEsR0FBQUMsU0FBQTt3QkFHUnZGLHlCQUF1QixHQUFHSCxZQUFZLENBQUNvQyxtQkFBbUI7d0JBQzFEaEMsMkJBQXlCLEdBQUdWLEtBQUssQ0FBQzBDLG1CQUFtQjt3QkFDM0Q4QixNQUFJLENBQUNwRCxhQUFhLENBQUNDLGtCQUFRLENBQUN3QixLQUFLLEVBQUV0QiwwQkFBbUIsQ0FBQzRFLGtCQUFrQixFQUFFLHdCQUF3QixFQUFFaEksU0FBUyxFQUFFZCxTQUFTLEVBQUVxRCwyQkFBeUIsRUFBRVQsV0FBVyxFQUFFQyxNQUFNLEVBQUE2RixHQUFBLEVBQVMxSSxTQUFTLEVBQUVnRCxjQUFjLEVBQUVJLHlCQUF1QixDQUFDO3dCQUNyTyxJQUFJLElBQUEyRixnQ0FBb0IsRUFBQUwsR0FBQSxFQUFRN0cscUJBQVMsQ0FBQ21ILHFCQUFxQixDQUFDLEVBQUU7MEJBQ2hFbEMsTUFBTSxDQUFFLElBQUlwRixLQUFLLENBQUN5RixNQUFJLENBQUM4Qix1QkFBdUIsQ0FBQyxDQUFDO3dCQUNsRDt3QkFDQW5DLE1BQU0sQ0FBQTRCLEdBQU0sQ0FBQztzQkFBQztzQkFBQTt3QkFBQSxPQUFBQyxTQUFBLENBQUFqRCxJQUFBO29CQUFBO2tCQUFBLEdBQUE0QyxRQUFBO2dCQUFBLENBRWpCO2dCQUFBLGlCQUFBWSxHQUFBLEVBQUFDLEdBQUE7a0JBQUEsT0FBQWQsSUFBQSxDQUFBeEssS0FBQSxPQUFBRSxTQUFBO2dCQUFBO2NBQUEsSUFBQztZQUFBO1lBQUE7Y0FBQSxPQUFBNEosU0FBQSxDQUFBakMsSUFBQTtVQUFBO1FBQUEsR0FBQXVCLFFBQUE7TUFBQSxDQUNIO01BQUEsU0FoRlllLGFBQWFBLENBQUFvQixHQUFBO1FBQUEsT0FBQXBDLGNBQUEsQ0FBQW5KLEtBQUEsT0FBQUUsU0FBQTtNQUFBO01BQUEsT0FBYmlLLGFBQWE7SUFBQTtJQWlGMUI7QUFDRjtBQUNBO0FBQ0E7QUFDQTtJQUpFO0VBQUE7SUFBQTdHLEdBQUE7SUFBQXBDLEtBQUE7TUFBQSxJQUFBc0ssYUFBQSxPQUFBOUcsa0JBQUEsMEJBQUFDLFlBQUEsWUFBQUMsSUFBQSxDQUtBLFNBQUE2RyxTQUEwQnhJLFNBQWlCO1FBQUEsSUFBQXlJLHNCQUFBO1VBQUFDLE1BQUE7UUFBQSxJQUFBQywwQkFBQTtVQUFBQyxpQkFBQTtVQUFBL0csS0FBQTtVQUFBMkUsV0FBQTtVQUFBRCxzQkFBQTtVQUFBc0Msc0JBQUE7VUFBQUMsWUFBQTtVQUFBQyxvQkFBQTtVQUFBQyxRQUFBO1VBQUE5RyxjQUFBO1VBQUErRyxRQUFBO1VBQUFuSCxXQUFBO1VBQUEyRSxzQkFBQTtVQUFBQyxNQUFBO1VBQUExRSxHQUFBO1VBQUFELE1BQUE7VUFBQTRFLE9BQUE7VUFBQTFFLGFBQUE7VUFBQWlILE1BQUEsR0FBQWpNLFNBQUE7UUFBQSxPQUFBeUUsWUFBQSxZQUFBa0IsSUFBQSxXQUFBdUcsU0FBQTtVQUFBLGtCQUFBQSxTQUFBLENBQUFyRyxJQUFBLEdBQUFxRyxTQUFBLENBQUE5SyxJQUFBO1lBQUE7Y0FBRXNLLDBCQUF1RCxHQUFBTyxNQUFBLENBQUFoTSxNQUFBLFFBQUFnTSxNQUFBLFFBQUFoSyxTQUFBLEdBQUFnSyxNQUFBLE1BQUcsQ0FBQyxDQUFDO2NBQUVOLGlCQUF5QixHQUFBTSxNQUFBLENBQUFoTSxNQUFBLFFBQUFnTSxNQUFBLFFBQUFoSyxTQUFBLEdBQUFnSyxNQUFBLE1BQUcsQ0FBQztjQUFxQztjQUNyS3JILEtBQUssR0FBR2tCLFlBQUssQ0FBQ0MsS0FBSyxDQUFDLENBQUM7Y0FDbkJ3RCxXQUFXLEdBQXlGbUMsMEJBQTBCLENBQTlIbkMsV0FBVyxFQUFFRCxzQkFBc0IsR0FBaUVvQywwQkFBMEIsQ0FBakhwQyxzQkFBc0IsRUFBRXNDLHNCQUFzQixHQUF5Q0YsMEJBQTBCLENBQXpGRSxzQkFBc0IsRUFBRUMsWUFBWSxHQUEyQkgsMEJBQTBCLENBQWpFRyxZQUFZLEVBQUVDLG9CQUFvQixHQUFLSiwwQkFBMEIsQ0FBbkRJLG9CQUFvQjtjQUNqR0MsUUFBUSxHQUFJRCxvQkFBb0IsSUFBSUEsb0JBQW9CLENBQUM3TCxNQUFNLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRSxLQUFLO2NBQ3ZGLElBQUksQ0FBQytGLGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQ0MsSUFBSSxFQUFFQywwQkFBbUIsQ0FBQ2dHLG1CQUFtQixFQUFFLHdCQUF3QixFQUFFcEosU0FBUyxDQUFDO2NBQUMsTUFFNUc0SSxpQkFBaUIsR0FBRyxDQUFDO2dCQUFBTyxTQUFBLENBQUE5SyxJQUFBO2dCQUFBO2NBQUE7Y0FBQSxNQUNqQixJQUFJdUMsS0FBSyw0QkFBNEIsQ0FBQztZQUFBO2NBRzlDLElBQUksQ0FBQ1osU0FBUyxFQUFFO2dCQUNkQSxTQUFTLEdBQUcsSUFBQXdGLFlBQU0sRUFBQyxDQUFDO2NBQ3RCO2NBRU10RCxjQUF5QixHQUFHbkIscUJBQVMsQ0FBQ29HLGNBQWM7Y0FDMUQsSUFBSSxDQUFDeEIsaUJBQWlCLENBQUMzRixTQUFTLEVBQUVrQyxjQUFjLENBQUM7Y0FFM0MrRyxRQUFRLEdBQUcsSUFBQUksNkNBQTBCLEVBQUNSLHNCQUFzQixJQUF1QixJQUFJLENBQUN6SCxlQUFlLEVBQUVtRixzQkFBc0IsR0FBRyxJQUFJLEdBQUcsS0FBSyxFQUFFeUMsUUFBUSxDQUFDO2NBRS9KLElBQUl6QyxzQkFBc0IsRUFBRTtnQkFDMUJyRSxjQUFjLENBQUNwQyxrQ0FBc0IsQ0FBQ3lHLHNCQUFzQixDQUFDLEdBQUdBLHNCQUFzQjtnQkFDdEZyRSxjQUFjLENBQUNwQyxrQ0FBc0IsQ0FBQ0YsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDWCxhQUFhLENBQUNXLGFBQWE7Y0FDekY7Y0FFSWtDLFdBQVcsT0FBQXhDLE1BQUEsQ0FBTzJKLFFBQVEsT0FBQTNKLE1BQUEsQ0FBSSxJQUFJLENBQUNQLHdCQUF3QixDQUFDeUUsS0FBSyxPQUFBbEUsTUFBQSxDQUFJLElBQUksQ0FBQ1Asd0JBQXdCLENBQUMyRyxRQUFRLE9BQUFwRyxNQUFBLENBQUlVLFNBQVMsR0FFNUg7Y0FDTXlHLHNCQUFzQixHQUFHLENBQUNGLHNCQUFzQixJQUFJLElBQUksQ0FBQ3RILGFBQWEsQ0FBQ29JLGlDQUFpQyxLQUFLLElBQUk7Y0FDdkgsSUFBSWIsV0FBVyxFQUFFO2dCQUNmLElBQUksQ0FBQ0Msc0JBQXNCLEVBQUU7a0JBQzNCM0UsV0FBVyxRQUFBeEMsTUFBQSxDQUFRa0gsV0FBVyxDQUFFO2dCQUNsQztjQUNGO2NBRU1FLE1BQWlDLEdBQUc7Z0JBQ3hDbEcsU0FBUyxFQUFFLElBQUksQ0FBQ3pCLHdCQUF3QixDQUFDeUI7Y0FDM0MsQ0FBQztjQUNELElBQUl1SSxvQkFBb0IsSUFBSUEsb0JBQW9CLENBQUM3TCxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUMzRHdKLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxHQUFHcUMsb0JBQW9CO2NBQzNEO2NBRUEsSUFBSUQsWUFBWSxFQUFFO2dCQUNoQnBDLE1BQU0sQ0FBQ29DLFlBQVksR0FBRyxNQUFNO2NBQzlCO2NBRUEsSUFBSXRDLFdBQVcsRUFBRTtnQkFDZixJQUFJQyxzQkFBc0IsRUFBRTtrQkFDMUJDLE1BQU0sQ0FBQ1ksR0FBRyxHQUFHZCxXQUFXO2dCQUMxQjtjQUNGO2NBRU14RSxHQUFHLE1BQUExQyxNQUFBLENBQU0sSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQzBFLE1BQU0sRUFBQW5FLE1BQUEsQ0FBR3dDLFdBQVc7Y0FDM0RDLE1BQU0sR0FBRyxLQUFLO2NBQ2Q0RSxPQUEyQixHQUFHO2dCQUNsQ2pILE9BQU8sRUFBRXdDLGNBQWM7Z0JBQ3ZCSCxNQUFNLEVBQU5BLE1BQU07Z0JBQ05DLEdBQUcsRUFBSEEsR0FBRztnQkFDSDBFLE1BQU0sRUFBTkEsTUFBTTtnQkFDTnZDLE9BQU8sR0FBQXNFLHNCQUFBLEdBQUUsSUFBSSxDQUFDeEosYUFBYSxDQUFDbUYscUJBQXFCLGNBQUFxRSxzQkFBQSxjQUFBQSxzQkFBQSxHQUFJLElBQUksQ0FBQ3hKLGFBQWEsQ0FBQ29GLG9CQUFvQixDQUFDaUY7Y0FDL0YsQ0FBQztjQUVLckgsYUFBYSxHQUFHeUIsaUJBQUssQ0FBQ0MsTUFBTSxDQUFDLENBQUM7Y0FDcEMsSUFBQUMsNkJBQWlCLEVBQUMzQixhQUFhLEVBQUU7Z0JBQy9CZ0YsZ0JBQWdCLEVBQUUsQ0FBQ25ILGtDQUFzQixDQUFDRixhQUFhLENBQUM7Z0JBQ3hEaUUsT0FBTyxFQUFHK0UsaUJBQWlCLEdBQUcsSUFBSSxDQUFDM0osYUFBYSxDQUFDNkUsMEJBQTBCLEdBQUk4RSxpQkFBaUIsR0FBRyxJQUFJLENBQUMzSixhQUFhLENBQUM2RSwwQkFBMEI7Z0JBQ2hKeUYsVUFBVSxFQUFFLElBQUksQ0FBQ3RLLGFBQWEsQ0FBQ3VLLHNCQUFzQjtnQkFDckR6RiwwQkFBMEIsRUFBRSxJQUFJLENBQUM5RSxhQUFhLENBQUMrRSw0QkFBNEIsQ0FBQ3NGO2NBQzlFLENBQUMsQ0FBQztjQUFDLE9BQUFILFNBQUEsQ0FBQTFFLE1BQUEsV0FFSSxJQUFJc0IsT0FBTztnQkFBQSxJQUFBMEQsS0FBQSxPQUFBaEksa0JBQUEsMEJBQUFDLFlBQUEsWUFBQUMsSUFBQSxDQUFDLFNBQUErSCxTQUFPakMsT0FBTyxFQUFFekIsTUFBTTtrQkFBQSxJQUFBN0QsWUFBQSxFQUFBRSxRQUFBLEVBQUFDLHVCQUFBLEVBQUFDLHlCQUFBLEVBQUFDLElBQUEsRUFBQTlDLE9BQUEsRUFBQWlLLHlCQUFBLEVBQUFDLDJCQUFBLEVBQUFDLEdBQUE7a0JBQUEsT0FBQW5JLFlBQUEsWUFBQWtCLElBQUEsV0FBQWtILFNBQUE7b0JBQUEsa0JBQUFBLFNBQUEsQ0FBQWhILElBQUEsR0FBQWdILFNBQUEsQ0FBQXpMLElBQUE7c0JBQUE7d0JBQ2pDOEQsWUFBWSxHQUFHWSxZQUFLLENBQUNDLEtBQUssQ0FBQyxDQUFDO3dCQUFBOEcsU0FBQSxDQUFBaEgsSUFBQTt3QkFBQWdILFNBQUEsQ0FBQXpMLElBQUE7d0JBQUEsT0FFVDRELGFBQWEsQ0FBQzBFLE9BQU8sQ0FBQztzQkFBQTt3QkFBdkN0RSxRQUFRLEdBQUF5SCxTQUFBLENBQUF4RixJQUFBO3dCQUNSaEMsdUJBQXVCLEdBQUdILFlBQVksQ0FBQ29DLG1CQUFtQjt3QkFDMURoQyx5QkFBeUIsR0FBR1YsS0FBSyxDQUFDMEMsbUJBQW1CO3dCQUNuRC9CLElBQUksR0FBY0gsUUFBUSxDQUExQkcsSUFBSSxFQUFFOUMsT0FBTyxHQUFLMkMsUUFBUSxDQUFwQjNDLE9BQU87d0JBQ3JCZ0osTUFBSSxDQUFDWixnQkFBZ0IsQ0FBQ3BJLE9BQU8sQ0FBQzt3QkFFOUIsSUFBSUEsT0FBTyxFQUFFOzBCQUNYLElBQUlBLE9BQU8sQ0FBQ0ksa0NBQXNCLENBQUNDLFdBQVcsQ0FBQ2dLLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRTs0QkFDN0RyQixNQUFJLENBQUM3SSxTQUFTLEdBQUdILE9BQU8sQ0FBQ0ksa0NBQXNCLENBQUNDLFdBQVcsQ0FBQ2dLLFdBQVcsQ0FBQyxDQUFDLENBQUM7MEJBQzVFO3dCQUNGOzt3QkFFQTt3QkFBQSxLQUNJdkgsSUFBSTswQkFBQXNILFNBQUEsQ0FBQXpMLElBQUE7MEJBQUE7d0JBQUE7d0JBQUEsTUFHRi9CLE1BQU0sQ0FBQ0ksSUFBSSxDQUFDOEYsSUFBSSxDQUFDLENBQUN0RixNQUFNLEtBQUssQ0FBQzswQkFBQTRNLFNBQUEsQ0FBQXpMLElBQUE7MEJBQUE7d0JBQUE7d0JBQ2hDMkgsTUFBTSxDQUFDLElBQUlwRixLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQzt3QkFBQyxPQUFBa0osU0FBQSxDQUFBckYsTUFBQTtzQkFBQTt3QkFJN0RqQyxJQUFJLENBQUN4QyxTQUFTLEdBQUdBLFNBQVM7d0JBQzFCMEksTUFBSSxDQUFDekYsYUFBYSxDQUFDQyxrQkFBUSxDQUFDQyxJQUFJLEVBQUVDLDBCQUFtQixDQUFDNEcscUJBQXFCLEVBQUUsMEJBQTBCLEVBQUVoSyxTQUFTLEVBQUVxQyxRQUFRLEVBQUVFLHlCQUF5QixFQUFFVCxXQUFXLEVBQUVDLE1BQU0sRUFBRTdDLFNBQVMsRUFBRUEsU0FBUyxFQUFFZ0QsY0FBYyxFQUFFSSx1QkFBdUIsQ0FBQzt3QkFDNU9tRixPQUFPLENBQUNqRixJQUFJLENBQUM7d0JBQUMsT0FBQXNILFNBQUEsQ0FBQXJGLE1BQUE7c0JBQUE7d0JBQUEsTUFLWitCLFdBQVcsSUFBSW5FLFFBQVEsQ0FBQzRILE1BQU0sS0FBS2xKLHFCQUFTLENBQUNtSixtQkFBbUI7MEJBQUFKLFNBQUEsQ0FBQXpMLElBQUE7MEJBQUE7d0JBQUE7d0JBQ2xFMkgsTUFBTSxDQUFDM0QsUUFBUSxDQUFDO3dCQUFDLE9BQUF5SCxTQUFBLENBQUFyRixNQUFBO3NCQUFBO3dCQUFBcUYsU0FBQSxDQUFBekwsSUFBQTt3QkFBQTtzQkFBQTt3QkFBQXlMLFNBQUEsQ0FBQWhILElBQUE7d0JBQUErRyxHQUFBLEdBQUFDLFNBQUE7d0JBS2J4SCx5QkFBdUIsR0FBR0gsWUFBWSxDQUFDb0MsbUJBQW1CO3dCQUMxRGhDLDJCQUF5QixHQUFHVixLQUFLLENBQUMwQyxtQkFBbUI7d0JBQzNEbUUsTUFBSSxDQUFDekYsYUFBYSxDQUFDQyxrQkFBUSxDQUFDd0IsS0FBSyxFQUFFdEIsMEJBQW1CLENBQUMrRyxrQkFBa0IsRUFBRSx1QkFBdUIsRUFBRW5LLFNBQVMsRUFBRWQsU0FBUyxFQUFFcUQsMkJBQXlCLEVBQUVULFdBQVcsRUFBRUMsTUFBTSxFQUFBOEgsR0FBQSxFQUFTM0ssU0FBUyxFQUFFZ0QsY0FBYyxFQUFFSSx5QkFBdUIsQ0FBQzt3QkFDcE8sSUFBSSxJQUFBMkYsZ0NBQW9CLEVBQUE0QixHQUFBLEVBQVE5SSxxQkFBUyxDQUFDbUgscUJBQXFCLENBQUMsRUFBRTswQkFDaEVsQyxNQUFNLENBQUUsSUFBSXBGLEtBQUssQ0FBQzhILE1BQUksQ0FBQ1AsdUJBQXVCLENBQUMsQ0FBQzt3QkFDbEQ7d0JBQ0FuQyxNQUFNLENBQUE2RCxHQUFNLENBQUM7c0JBQUM7c0JBQUE7d0JBQUEsT0FBQUMsU0FBQSxDQUFBbEYsSUFBQTtvQkFBQTtrQkFBQSxHQUFBOEUsUUFBQTtnQkFBQSxDQUVqQjtnQkFBQSxpQkFBQVUsR0FBQSxFQUFBQyxHQUFBO2tCQUFBLE9BQUFaLEtBQUEsQ0FBQTFNLEtBQUEsT0FBQUUsU0FBQTtnQkFBQTtjQUFBLElBQUM7WUFBQTtZQUFBO2NBQUEsT0FBQWtNLFNBQUEsQ0FBQXZFLElBQUE7VUFBQTtRQUFBLEdBQUE0RCxRQUFBO01BQUEsQ0FDSDtNQUFBLFNBbkhZYyxZQUFZQSxDQUFBZ0IsR0FBQTtRQUFBLE9BQUEvQixhQUFBLENBQUF4TCxLQUFBLE9BQUFFLFNBQUE7TUFBQTtNQUFBLE9BQVpxTSxZQUFZO0lBQUE7SUFxSHpCO0FBQ0Y7QUFDQTtBQUNBO0lBSEU7RUFBQTtJQUFBakosR0FBQTtJQUFBcEMsS0FBQTtNQUFBLElBQUFzTSxzQkFBQSxPQUFBOUksa0JBQUEsMEJBQUFDLFlBQUEsWUFBQUMsSUFBQSxDQUlBLFNBQUE2SSxTQUFtQ0Msd0JBQW1EO1FBQUEsSUFBQUMsc0JBQUE7VUFBQUMsTUFBQTtRQUFBLElBQUE5SSxLQUFBLEVBQUEwRSxzQkFBQSxFQUFBdkcsU0FBQSxFQUFBOEIsV0FBQSxFQUFBSSxjQUFBLEVBQUFGLEdBQUEsRUFBQUQsTUFBQSxFQUFBNEUsT0FBQSxFQUFBMUUsYUFBQTtRQUFBLE9BQUFQLFlBQUEsWUFBQWtCLElBQUEsV0FBQWdJLFNBQUE7VUFBQSxrQkFBQUEsU0FBQSxDQUFBOUgsSUFBQSxHQUFBOEgsU0FBQSxDQUFBdk0sSUFBQTtZQUFBO2NBQzlFd0QsS0FBSyxHQUFHa0IsWUFBSyxDQUFDQyxLQUFLLENBQUMsQ0FBQztjQUNuQnVELHNCQUFzQixHQUFLa0Usd0JBQXdCLENBQW5EbEUsc0JBQXNCO2NBQzlCLElBQUksQ0FBQ3RELGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQ0MsSUFBSSxFQUFFQywwQkFBbUIsQ0FBQ3lILDRCQUE0QixFQUFFLGdDQUFnQyxDQUFDO2NBQy9HN0ssU0FBUyxHQUFHeUssd0JBQXdCLGFBQXhCQSx3QkFBd0IsdUJBQXhCQSx3QkFBd0IsQ0FBRXpLLFNBQVM7Y0FFL0M4QixXQUFXLE9BQUF4QyxNQUFBLENBQU9nRSxnQ0FBb0IsQ0FBQ3dILGlDQUFpQyxPQUFBeEwsTUFBQSxDQUFJLElBQUksQ0FBQ1Asd0JBQXdCLENBQUN5RSxLQUFLLE9BQUFsRSxNQUFBLENBQUksSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQzJHLFFBQVEsT0FBQXBHLE1BQUEsQ0FBSVUsU0FBUyxpQkFBQVYsTUFBQSxDQUFjLElBQUksQ0FBQ1Asd0JBQXdCLENBQUN5QixTQUFTO2NBQzNOMEIsY0FBeUIsR0FBR25CLHFCQUFTLENBQUNvRyxjQUFjO2NBQzFEakYsY0FBYyxDQUFDcEMsa0NBQXNCLENBQUN5RyxzQkFBc0IsQ0FBQyxHQUFHQSxzQkFBc0I7Y0FDdEZyRSxjQUFjLENBQUNwQyxrQ0FBc0IsQ0FBQ0YsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDWCxhQUFhLENBQUNXLGFBQWE7Y0FFdkYsSUFBSSxDQUFDK0YsaUJBQWlCLENBQUMzRixTQUFTLEVBQUVrQyxjQUFjLENBQUM7Y0FFM0NGLEdBQUcsTUFBQTFDLE1BQUEsQ0FBTSxJQUFJLENBQUNQLHdCQUF3QixDQUFDMEUsTUFBTSxFQUFBbkUsTUFBQSxDQUFHd0MsV0FBVztjQUMzREMsTUFBTSxHQUFHLEtBQUs7Y0FDZDRFLE9BQTJCLEdBQUc7Z0JBQ2xDakgsT0FBTyxFQUFFd0MsY0FBYztnQkFDdkJILE1BQU0sRUFBTkEsTUFBTTtnQkFDTkMsR0FBRyxFQUFIQSxHQUFHO2dCQUNIbUMsT0FBTyxHQUFBdUcsc0JBQUEsR0FBRSxJQUFJLENBQUN6TCxhQUFhLENBQUNtRixxQkFBcUIsY0FBQXNHLHNCQUFBLGNBQUFBLHNCQUFBLEdBQUksSUFBSSxDQUFDekwsYUFBYSxDQUFDb0Ysb0JBQW9CLENBQUMwRztjQUMvRixDQUFDO2NBRUs5SSxhQUFhLEdBQUd5QixpQkFBSyxDQUFDQyxNQUFNLENBQUMsQ0FBQztjQUFBLE9BQUFpSCxTQUFBLENBQUFuRyxNQUFBLFdBRTdCLElBQUlzQixPQUFPO2dCQUFBLElBQUFpRixLQUFBLE9BQUF2SixrQkFBQSwwQkFBQUMsWUFBQSxZQUFBQyxJQUFBLENBQUMsU0FBQXNKLFNBQU94RCxPQUFPLEVBQUV6QixNQUFNO2tCQUFBLElBQUE3RCxZQUFBLEVBQUFFLFFBQUEsRUFBQUMsdUJBQUEsRUFBQUMseUJBQUEsRUFBQUMsSUFBQSxFQUFBOUMsT0FBQSxFQUFBd0wseUJBQUEsRUFBQUMsMkJBQUEsRUFBQUMsR0FBQTtrQkFBQSxPQUFBMUosWUFBQSxZQUFBa0IsSUFBQSxXQUFBeUksU0FBQTtvQkFBQSxrQkFBQUEsU0FBQSxDQUFBdkksSUFBQSxHQUFBdUksU0FBQSxDQUFBaE4sSUFBQTtzQkFBQTt3QkFDakM4RCxZQUFZLEdBQUdZLFlBQUssQ0FBQ0MsS0FBSyxDQUFDLENBQUM7d0JBQUFxSSxTQUFBLENBQUF2SSxJQUFBO3dCQUFBdUksU0FBQSxDQUFBaE4sSUFBQTt3QkFBQSxPQUVUNEQsYUFBYSxDQUFDMEUsT0FBTyxDQUFDO3NCQUFBO3dCQUF2Q3RFLFFBQVEsR0FBQWdKLFNBQUEsQ0FBQS9HLElBQUE7d0JBQ1JoQyx1QkFBdUIsR0FBR0gsWUFBWSxDQUFDb0MsbUJBQW1CO3dCQUMxRGhDLHlCQUF5QixHQUFHVixLQUFLLENBQUMwQyxtQkFBbUI7d0JBQ25EL0IsSUFBSSxHQUFjSCxRQUFRLENBQTFCRyxJQUFJLEVBQUU5QyxPQUFPLEdBQUsyQyxRQUFRLENBQXBCM0MsT0FBTzt3QkFDckJpTCxNQUFJLENBQUM3QyxnQkFBZ0IsQ0FBQ3BJLE9BQU8sQ0FBQzs7d0JBRTlCO3dCQUFBLEtBQ0k4QyxJQUFJOzBCQUFBNkksU0FBQSxDQUFBaE4sSUFBQTswQkFBQTt3QkFBQTt3QkFDTnNNLE1BQUksQ0FBQzFILGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQ0MsSUFBSSxFQUFFQywwQkFBbUIsQ0FBQ2tJLDhCQUE4QixFQUFFLDREQUE0RCxFQUFFdEwsU0FBUyxFQUFFcUMsUUFBUSxFQUFFRSx5QkFBeUIsRUFBRVQsV0FBVyxFQUFFQyxNQUFNLEVBQUU3QyxTQUFTLEVBQUVBLFNBQVMsRUFBRWdELGNBQWMsRUFBRUksdUJBQXVCLENBQUM7d0JBQ3ZSbUYsT0FBTyxDQUFDakYsSUFBSSxDQUFDO3dCQUFDLE9BQUE2SSxTQUFBLENBQUE1RyxNQUFBO3NCQUFBO3dCQUdoQjt3QkFDQWdELE9BQU8sQ0FBQyxDQUFDO3dCQUFDLE9BQUE0RCxTQUFBLENBQUE1RyxNQUFBO3NCQUFBO3dCQUFBNEcsU0FBQSxDQUFBdkksSUFBQTt3QkFBQXNJLEdBQUEsR0FBQUMsU0FBQTt3QkFHSi9JLHlCQUF1QixHQUFHSCxZQUFZLENBQUNvQyxtQkFBbUI7d0JBQzFEaEMsMkJBQXlCLEdBQUdWLEtBQUssQ0FBQzBDLG1CQUFtQjt3QkFDM0RvRyxNQUFJLENBQUMxSCxhQUFhLENBQUNDLGtCQUFRLENBQUN3QixLQUFLLEVBQUV0QiwwQkFBbUIsQ0FBQ21JLDJCQUEyQixFQUFFLGdDQUFnQyxFQUFFdkwsU0FBUyxFQUFFZCxTQUFTLEVBQUVxRCwyQkFBeUIsRUFBRVQsV0FBVyxFQUFFQyxNQUFNLEVBQUFxSixHQUFBLEVBQVNsTSxTQUFTLEVBQUVnRCxjQUFjLEVBQUVJLHlCQUF1QixDQUFDO3dCQUN0UCxJQUFJLElBQUEyRixnQ0FBb0IsRUFBQW1ELEdBQUEsRUFBUXJLLHFCQUFTLENBQUNtSCxxQkFBcUIsQ0FBQyxFQUFFOzBCQUNoRWxDLE1BQU0sQ0FBRSxJQUFJcEYsS0FBSyxDQUFDK0osTUFBSSxDQUFDeEMsdUJBQXVCLENBQUMsQ0FBQzt3QkFDbEQ7d0JBQ0FuQyxNQUFNLENBQUFvRixHQUFNLENBQUM7d0JBQUMsT0FBQUMsU0FBQSxDQUFBNUcsTUFBQTtzQkFBQTtzQkFBQTt3QkFBQSxPQUFBNEcsU0FBQSxDQUFBekcsSUFBQTtvQkFBQTtrQkFBQSxHQUFBcUcsUUFBQTtnQkFBQSxDQUdqQjtnQkFBQSxpQkFBQU8sR0FBQSxFQUFBQyxHQUFBO2tCQUFBLE9BQUFULEtBQUEsQ0FBQWpPLEtBQUEsT0FBQUUsU0FBQTtnQkFBQTtjQUFBLElBQUM7WUFBQTtZQUFBO2NBQUEsT0FBQTJOLFNBQUEsQ0FBQWhHLElBQUE7VUFBQTtRQUFBLEdBQUE0RixRQUFBO01BQUEsQ0FDSDtNQUFBLFNBckRZTyxxQkFBcUJBLENBQUFXLEdBQUE7UUFBQSxPQUFBbkIsc0JBQUEsQ0FBQXhOLEtBQUEsT0FBQUUsU0FBQTtNQUFBO01BQUEsT0FBckI4TixxQkFBcUI7SUFBQTtJQXVEbEM7QUFDRjtBQUNBO0FBQ0E7SUFIRTtFQUFBO0lBQUExSyxHQUFBO0lBQUFwQyxLQUFBO01BQUEsSUFBQTBOLHlCQUFBLE9BQUFsSyxrQkFBQSwwQkFBQUMsWUFBQSxZQUFBQyxJQUFBLENBSUEsU0FBQWlLLFNBQXNDcEYsV0FBbUI7UUFBQSxJQUFBcUYsc0JBQUE7VUFBQUMsTUFBQTtRQUFBLElBQUFDLGNBQUE7VUFBQWxLLEtBQUE7VUFBQUMsV0FBQTtVQUFBSSxjQUFBO1VBQUFGLEdBQUE7VUFBQUQsTUFBQTtVQUFBNEUsT0FBQTtVQUFBMUUsYUFBQTtVQUFBK0osTUFBQSxHQUFBL08sU0FBQTtRQUFBLE9BQUF5RSxZQUFBLFlBQUFrQixJQUFBLFdBQUFxSixTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQW5KLElBQUEsR0FBQW1KLFNBQUEsQ0FBQTVOLElBQUE7WUFBQTtjQUFFME4sY0FBb0QsR0FBQUMsTUFBQSxDQUFBOU8sTUFBQSxRQUFBOE8sTUFBQSxRQUFBOU0sU0FBQSxHQUFBOE0sTUFBQSxNQUFHLENBQUMsQ0FBQztjQUM1R25LLEtBQUssR0FBR2tCLFlBQUssQ0FBQ0MsS0FBSyxDQUFDLENBQUM7Y0FDM0IsSUFBSSxDQUFDQyxhQUFhLENBQUNDLGtCQUFRLENBQUNDLElBQUksRUFBRUMsMEJBQW1CLENBQUM4SSwrQkFBK0IsRUFBRSx3Q0FBd0MsQ0FBQztjQUUxSHBLLFdBQVcsT0FBQXhDLE1BQUEsQ0FBT2dFLGdDQUFvQixDQUFDNkksaUNBQWlDLE9BQUE3TSxNQUFBLENBQUksSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQ3lFLEtBQUssT0FBQWxFLE1BQUEsQ0FBSSxJQUFJLENBQUNQLHdCQUF3QixDQUFDMkcsUUFBUSxPQUFBcEcsTUFBQSxDQUFJa0gsV0FBVztjQUN4S3RFLGNBQXlCLEdBQUduQixxQkFBUyxDQUFDb0csY0FBYztjQUUxRCxJQUFJLENBQUN4QixpQkFBaUIsQ0FBQ29HLGNBQWMsYUFBZEEsY0FBYyx1QkFBZEEsY0FBYyxDQUFFL0wsU0FBUyxFQUFFa0MsY0FBYyxDQUFDO2NBRTNERixHQUFHLE1BQUExQyxNQUFBLENBQU0sSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQzBFLE1BQU0sRUFBQW5FLE1BQUEsQ0FBR3dDLFdBQVc7Y0FDM0RDLE1BQU0sR0FBRyxLQUFLO2NBQ2Q0RSxPQUEyQixHQUFHO2dCQUNsQ2pILE9BQU8sRUFBRXdDLGNBQWM7Z0JBQ3ZCSCxNQUFNLEVBQU5BLE1BQU07Z0JBQ05DLEdBQUcsRUFBSEEsR0FBRztnQkFDSG1DLE9BQU8sR0FBQTBILHNCQUFBLEdBQUUsSUFBSSxDQUFDNU0sYUFBYSxDQUFDbUYscUJBQXFCLGNBQUF5SCxzQkFBQSxjQUFBQSxzQkFBQSxHQUFJLElBQUksQ0FBQzVNLGFBQWEsQ0FBQ29GLG9CQUFvQixDQUFDK0g7Y0FDL0YsQ0FBQztjQUVLbkssYUFBYSxHQUFHeUIsaUJBQUssQ0FBQ0MsTUFBTSxDQUFDLENBQUM7Y0FBQSxPQUFBc0ksU0FBQSxDQUFBeEgsTUFBQSxXQUM3QixJQUFJc0IsT0FBTztnQkFBQSxJQUFBc0csS0FBQSxPQUFBNUssa0JBQUEsMEJBQUFDLFlBQUEsWUFBQUMsSUFBQSxDQUFDLFNBQUEySyxTQUFPN0UsT0FBTyxFQUFFekIsTUFBTTtrQkFBQSxJQUFBN0QsWUFBQSxFQUFBRSxRQUFBLEVBQUFDLHVCQUFBLEVBQUFDLHlCQUFBLEVBQUFDLElBQUEsRUFBQStKLHlCQUFBLEVBQUFDLDJCQUFBLEVBQUFDLEdBQUE7a0JBQUEsT0FBQS9LLFlBQUEsWUFBQWtCLElBQUEsV0FBQThKLFNBQUE7b0JBQUEsa0JBQUFBLFNBQUEsQ0FBQTVKLElBQUEsR0FBQTRKLFNBQUEsQ0FBQXJPLElBQUE7c0JBQUE7d0JBQ2pDOEQsWUFBWSxHQUFHWSxZQUFLLENBQUNDLEtBQUssQ0FBQyxDQUFDO3dCQUFBMEosU0FBQSxDQUFBNUosSUFBQTt3QkFBQTRKLFNBQUEsQ0FBQXJPLElBQUE7d0JBQUEsT0FFVDRELGFBQWEsQ0FBQzBFLE9BQU8sQ0FBQztzQkFBQTt3QkFBdkN0RSxRQUFRLEdBQUFxSyxTQUFBLENBQUFwSSxJQUFBO3dCQUNSaEMsdUJBQXVCLEdBQUdILFlBQVksQ0FBQ29DLG1CQUFtQjt3QkFDMURoQyx5QkFBeUIsR0FBR1YsS0FBSyxDQUFDMEMsbUJBQW1CO3dCQUNuRC9CLElBQUksR0FBS0gsUUFBUSxDQUFqQkcsSUFBSTt3QkFBQSxLQUNSQSxJQUFJOzBCQUFBa0ssU0FBQSxDQUFBck8sSUFBQTswQkFBQTt3QkFBQTt3QkFDTnlOLE1BQUksQ0FBQzdJLGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQ0MsSUFBSSxFQUFFQywwQkFBbUIsQ0FBQ3VKLGlDQUFpQyxFQUFFLHNDQUFzQyxFQUFFWixjQUFjLGFBQWRBLGNBQWMsdUJBQWRBLGNBQWMsQ0FBRS9MLFNBQVMsRUFBRXFDLFFBQVEsRUFBRUUseUJBQXlCLEVBQUVULFdBQVcsRUFBRUMsTUFBTSxFQUFFN0MsU0FBUyxFQUFFQSxTQUFTLEVBQUVnRCxjQUFjLEVBQUVJLHVCQUF1QixDQUFDO3dCQUVwUm1GLE9BQU8sQ0FBQ2pGLElBQUksQ0FBQzt3QkFBQyxPQUFBa0ssU0FBQSxDQUFBakksTUFBQTtzQkFBQTt3QkFHaEI7d0JBQ0FxSCxNQUFJLENBQUM3SSxhQUFhLENBQUNDLGtCQUFRLENBQUMwSixJQUFJLEVBQUV4SiwwQkFBbUIsQ0FBQ3VKLGlDQUFpQyxFQUFFLHVEQUF1RCxFQUFFWixjQUFjLGFBQWRBLGNBQWMsdUJBQWRBLGNBQWMsQ0FBRS9MLFNBQVMsRUFBRXFDLFFBQVEsRUFBRUUseUJBQXlCLEVBQUVULFdBQVcsRUFBRUMsTUFBTSxFQUFFN0MsU0FBUyxFQUFFQSxTQUFTLEVBQUVnRCxjQUFjLEVBQUVJLHVCQUF1QixDQUFDO3dCQUVyU21GLE9BQU8sQ0FBQyxDQUFDO3dCQUFDLE9BQUFpRixTQUFBLENBQUFqSSxNQUFBO3NCQUFBO3dCQUFBaUksU0FBQSxDQUFBNUosSUFBQTt3QkFBQTJKLEdBQUEsR0FBQUMsU0FBQTt3QkFHSnBLLHlCQUF1QixHQUFHSCxZQUFZLENBQUNvQyxtQkFBbUI7d0JBQzFEaEMsMkJBQXlCLEdBQUdWLEtBQUssQ0FBQzBDLG1CQUFtQjt3QkFDM0R1SCxNQUFJLENBQUM3SSxhQUFhLENBQUNDLGtCQUFRLENBQUN3QixLQUFLLEVBQUV0QiwwQkFBbUIsQ0FBQ3lKLDhCQUE4QixFQUFFLG1DQUFtQyxFQUFFZCxjQUFjLGFBQWRBLGNBQWMsdUJBQWRBLGNBQWMsQ0FBRS9MLFNBQVMsRUFBRWQsU0FBUyxFQUFFcUQsMkJBQXlCLEVBQUVULFdBQVcsRUFBRUMsTUFBTSxFQUFBMEssR0FBQSxFQUFTdk4sU0FBUyxFQUFFZ0QsY0FBYyxFQUFFSSx5QkFBdUIsQ0FBQzt3QkFDNVEsSUFBSSxJQUFBMkYsZ0NBQW9CLEVBQUF3RSxHQUFBLEVBQVExTCxxQkFBUyxDQUFDbUgscUJBQXFCLENBQUMsRUFBRTswQkFDaEVsQyxNQUFNLENBQUUsSUFBSXBGLEtBQUssQ0FBQ2tMLE1BQUksQ0FBQzNELHVCQUF1QixDQUFDLENBQUM7d0JBQ2xEO3dCQUNBbkMsTUFBTSxDQUFBeUcsR0FBTSxDQUFDO3dCQUFDLE9BQUFDLFNBQUEsQ0FBQWpJLE1BQUE7c0JBQUE7c0JBQUE7d0JBQUEsT0FBQWlJLFNBQUEsQ0FBQTlILElBQUE7b0JBQUE7a0JBQUEsR0FBQTBILFFBQUE7Z0JBQUEsQ0FHakI7Z0JBQUEsaUJBQUFRLElBQUEsRUFBQUMsSUFBQTtrQkFBQSxPQUFBVixLQUFBLENBQUF0UCxLQUFBLE9BQUFFLFNBQUE7Z0JBQUE7Y0FBQSxJQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUFnUCxTQUFBLENBQUFySCxJQUFBO1VBQUE7UUFBQSxHQUFBZ0gsUUFBQTtNQUFBLENBQ0g7TUFBQSxTQWhEWVEsd0JBQXdCQSxDQUFBWSxHQUFBO1FBQUEsT0FBQXJCLHlCQUFBLENBQUE1TyxLQUFBLE9BQUFFLFNBQUE7TUFBQTtNQUFBLE9BQXhCbVAsd0JBQXdCO0lBQUE7SUFrRHJDO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7SUFKRTtFQUFBO0lBQUEvTCxHQUFBO0lBQUFwQyxLQUFBO01BQUEsSUFBQWdQLHFCQUFBLE9BQUF4TCxrQkFBQSwwQkFBQUMsWUFBQSxZQUFBQyxJQUFBLENBS0EsU0FBQXVMLFVBQWtDbE4sU0FBaUI7UUFBQSxJQUFBbU4sc0JBQUE7VUFBQUMsTUFBQTtRQUFBLElBQUFDLCtCQUFBO1VBQUF4TCxLQUFBO1VBQUFDLFdBQUE7VUFBQUcsYUFBQTtVQUFBc0Usc0JBQUE7VUFBQStHLFdBQUE7VUFBQUMsVUFBQTtVQUFBckwsY0FBQTtVQUFBTSxJQUFBO1VBQUFnTCxPQUFBO1VBQUFDLE9BQUE7VUFBQXpMLEdBQUE7VUFBQUQsTUFBQTtVQUFBNEUsT0FBQTtVQUFBK0csT0FBQSxHQUFBelEsU0FBQTtRQUFBLE9BQUF5RSxZQUFBLFlBQUFrQixJQUFBLFdBQUErSyxVQUFBO1VBQUEsa0JBQUFBLFVBQUEsQ0FBQTdLLElBQUEsR0FBQTZLLFVBQUEsQ0FBQXRQLElBQUE7WUFBQTtjQUFFZ1AsK0JBQW9FLEdBQUFLLE9BQUEsQ0FBQXhRLE1BQUEsUUFBQXdRLE9BQUEsUUFBQXhPLFNBQUEsR0FBQXdPLE9BQUEsTUFBRyxDQUFDLENBQUM7Y0FDdEg3TCxLQUFLLEdBQUdrQixZQUFLLENBQUNDLEtBQUssQ0FBQyxDQUFDO2NBQzNCLElBQUksQ0FBQ0MsYUFBYSxDQUFDQyxrQkFBUSxDQUFDQyxJQUFJLEVBQUVDLDBCQUFtQixDQUFDd0ssMkJBQTJCLEVBQUUsZ0NBQWdDLEVBQUU1TixTQUFTLENBQUM7Y0FFekg4QixXQUFXLE9BQUF4QyxNQUFBLENBQU9nRSxnQ0FBb0IsQ0FBQ3VLLHdCQUF3QixPQUFBdk8sTUFBQSxDQUFJLElBQUksQ0FBQ1Asd0JBQXdCLENBQUN5RSxLQUFLLE9BQUFsRSxNQUFBLENBQUksSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQzJHLFFBQVEsT0FBQXBHLE1BQUEsQ0FBSVUsU0FBUztjQUM3SmlDLGFBQWEsR0FBR3lCLGlCQUFLLENBQUNDLE1BQU0sQ0FBQyxDQUFDO2NBQ3BDLElBQUFDLDZCQUFpQixFQUFDM0IsYUFBYSxFQUFFO2dCQUMvQmdGLGdCQUFnQixFQUFFLENBQUNuSCxrQ0FBc0IsQ0FBQ0YsYUFBYSxDQUFDO2dCQUN4RGlFLE9BQU8sRUFBRSxJQUFJLENBQUM1RSxhQUFhLENBQUM2RSwwQkFBMEI7Z0JBQ3REQywwQkFBMEIsRUFBRSxJQUFJLENBQUM5RSxhQUFhLENBQUMrRSw0QkFBNEIsQ0FBQzhKO2NBQzlFLENBQUMsQ0FBQztjQUVNdkgsc0JBQXNCLEdBQThCOEcsK0JBQStCLENBQW5GOUcsc0JBQXNCLEVBQUUrRyxXQUFXLEdBQWlCRCwrQkFBK0IsQ0FBM0RDLFdBQVcsRUFBRUMsVUFBVSxHQUFLRiwrQkFBK0IsQ0FBOUNFLFVBQVU7Y0FFakRyTCxjQUF5QixHQUFHbkIscUJBQVMsQ0FBQ29HLGNBQWM7Y0FFMUQsSUFBSVosc0JBQXNCLEVBQUU7Z0JBQzFCckUsY0FBYyxDQUFDcEMsa0NBQXNCLENBQUN5RyxzQkFBc0IsQ0FBQyxHQUFHQSxzQkFBc0I7Z0JBQ3RGckUsY0FBYyxDQUFDcEMsa0NBQXNCLENBQUNGLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQ1gsYUFBYSxDQUFDVyxhQUFhO2NBQ3pGO2NBRUEsSUFBSSxDQUFDK0YsaUJBQWlCLENBQUMzRixTQUFTLEVBQUVrQyxjQUFjLENBQUM7Y0FFM0NNLElBQWlCLEdBQUc4SyxXQUFXLElBQUksQ0FBQyxDQUFDO2NBRXJDRSxPQUFPLEdBQUc7Z0JBQ2QsT0FBTyxFQUFFLElBQUksQ0FBQ3pPLHdCQUF3QixDQUFDeUUsS0FBSztnQkFDNUMsVUFBVSxFQUFFLElBQUksQ0FBQ3pFLHdCQUF3QixDQUFDMkc7Y0FDNUMsQ0FBQztjQUVELElBQUlsRCxJQUFJLElBQUlBLElBQUksQ0FBQ3VMLGlCQUFpQixFQUFFO2dCQUM1Qk4sT0FBTyxHQUFHTyxvQ0FBaUIsQ0FBQ0MsSUFBSSxDQUFDekwsSUFBSSxDQUFDdUwsaUJBQWlCLENBQUM7Z0JBQzlEelIsTUFBTSxDQUFDNFIsTUFBTSxDQUFDVixPQUFPLEVBQUU7a0JBQUUsZUFBZSxFQUFFQztnQkFBUSxDQUFDLENBQUM7Y0FDdEQ7Y0FFQSxJQUFJakwsSUFBSSxDQUFDMkwsZUFBZSxFQUFFO2dCQUN4QjdSLE1BQU0sQ0FBQzRSLE1BQU0sQ0FBQ1YsT0FBTyxFQUFFO2tCQUFFLGlCQUFpQixFQUFFaEwsSUFBSSxDQUFDMkw7Z0JBQWdCLENBQUMsQ0FBQztjQUNyRTs7Y0FFQTtjQUNBM0wsSUFBSSxDQUFDNEwsUUFBUSxHQUFHLElBQUFDLGVBQU0sRUFBQ0MsSUFBSSxDQUFDQyxTQUFTLENBQUNmLE9BQU8sQ0FBQyxDQUFDLENBQUNqUCxRQUFRLENBQUNpUSxrQkFBRyxDQUFDO2NBQUMsTUFFMURqQixVQUFVLElBQUksQ0FBQ2tCLE1BQU0sQ0FBQ0MsUUFBUTtnQkFBQWYsVUFBQSxDQUFBdFAsSUFBQTtnQkFBQTtjQUFBO2NBQUEsT0FBQXNQLFVBQUEsQ0FBQWxKLE1BQUEsV0FDekJzQixPQUFPLENBQUNDLE1BQU0sQ0FBQyxJQUFJcEYsS0FBSywrQ0FBK0MsQ0FBQyxDQUFDO1lBQUE7Y0FHbEYsSUFBSTJNLFVBQVUsRUFBRTtnQkFDZC9LLElBQUksQ0FBQ21NLE9BQU8sR0FBR0Msd0JBQVcsQ0FBQ0MsY0FBYyxDQUFDLENBQUM7Z0JBQzNDck0sSUFBSSxDQUFDc00sTUFBTSxHQUFHQyxzQkFBVSxDQUFDQyxhQUFhLENBQUMsQ0FBQztnQkFDeEN4TSxJQUFJLENBQUN5TSxTQUFTLEdBQUdSLE1BQU0sQ0FBQ1MsUUFBUSxDQUFDQyxJQUFJO2dCQUNyQzNNLElBQUksQ0FBQzRNLEVBQUUsR0FBR0MsY0FBTSxDQUFDQyxTQUFTLENBQUMsQ0FBQztjQUM5QjtjQUVBLElBQUksQ0FBQzlNLElBQUksQ0FBQytNLE1BQU0sRUFBRTtnQkFDaEIvTSxJQUFJLENBQUMrTSxNQUFNLEdBQUd4TyxxQkFBUyxDQUFDeU8sYUFBYTtjQUN2Qzs7Y0FFQTtjQUFBLE1BQ0loTixJQUFJLENBQUMrTSxNQUFNLElBQUksQ0FBQ0UsbUJBQU8sQ0FBQ0MsZ0JBQWdCLENBQUMvTyxRQUFRLENBQUM2QixJQUFJLENBQUMrTSxNQUFNLENBQUM7Z0JBQUE1QixVQUFBLENBQUF0UCxJQUFBO2dCQUFBO2NBQUE7Y0FBQSxPQUFBc1AsVUFBQSxDQUFBbEosTUFBQSxXQUN6RHNCLE9BQU8sQ0FBQ0MsTUFBTSxDQUFDLElBQUlwRixLQUFLLHlCQUFBdEIsTUFBQSxDQUF5QmtELElBQUksQ0FBQytNLE1BQU0sTUFBRyxDQUFDLENBQUM7WUFBQTtjQUdwRXZOLEdBQUcsTUFBQTFDLE1BQUEsQ0FBTSxJQUFJLENBQUNQLHdCQUF3QixDQUFDMEUsTUFBTSxFQUFBbkUsTUFBQSxDQUFHd0MsV0FBVztjQUMzREMsTUFBTSxHQUFHLE1BQU07Y0FFZjRFLE9BQTJCLEdBQUc7Z0JBQ2xDbkUsSUFBSSxFQUFKQSxJQUFJO2dCQUNKOUMsT0FBTyxFQUFFd0MsY0FBYztnQkFDdkJILE1BQU0sRUFBTkEsTUFBTTtnQkFDTkMsR0FBRyxFQUFIQSxHQUFHO2dCQUNIbUMsT0FBTyxHQUFBZ0osc0JBQUEsR0FBRSxJQUFJLENBQUNsTyxhQUFhLENBQUNtRixxQkFBcUIsY0FBQStJLHNCQUFBLGNBQUFBLHNCQUFBLEdBQUksSUFBSSxDQUFDbE8sYUFBYSxDQUFDb0Ysb0JBQW9CLENBQUN5SjtjQUMvRixDQUFDO2NBQUEsT0FBQUgsVUFBQSxDQUFBbEosTUFBQSxXQUVNLElBQUlzQixPQUFPO2dCQUFBLElBQUE0SixLQUFBLE9BQUFsTyxrQkFBQSwwQkFBQUMsWUFBQSxZQUFBQyxJQUFBLENBQUMsU0FBQWlPLFNBQU9uSSxPQUFPLEVBQUV6QixNQUFNO2tCQUFBLElBQUE3RCxZQUFBLEVBQUFFLFFBQUEsRUFBQUMsdUJBQUEsRUFBQUMseUJBQUEsRUFBQXNOLEtBQUEsRUFBQW5RLE9BQUEsRUFBQW9RLHlCQUFBLEVBQUFDLDJCQUFBLEVBQUFDLEdBQUE7a0JBQUEsT0FBQXRPLFlBQUEsWUFBQWtCLElBQUEsV0FBQXFOLFNBQUE7b0JBQUEsa0JBQUFBLFNBQUEsQ0FBQW5OLElBQUEsR0FBQW1OLFNBQUEsQ0FBQTVSLElBQUE7c0JBQUE7d0JBQ2pDOEQsWUFBWSxHQUFHWSxZQUFLLENBQUNDLEtBQUssQ0FBQyxDQUFDO3dCQUFBaU4sU0FBQSxDQUFBbk4sSUFBQTt3QkFBQW1OLFNBQUEsQ0FBQTVSLElBQUE7d0JBQUEsT0FFVDRELGFBQWEsQ0FBQzBFLE9BQU8sQ0FBQztzQkFBQTt3QkFBdkN0RSxRQUFRLEdBQUE0TixTQUFBLENBQUEzTCxJQUFBO3dCQUNSaEMsdUJBQXVCLEdBQUdILFlBQVksQ0FBQ29DLG1CQUFtQjt3QkFDMURoQyx5QkFBeUIsR0FBR1YsS0FBSyxDQUFDMEMsbUJBQW1CO3dCQUNuRC9CLEtBQUksR0FBY0gsUUFBUSxDQUExQkcsSUFBSSxFQUFFOUMsT0FBTyxHQUFLMkMsUUFBUSxDQUFwQjNDLE9BQU87d0JBQ3JCME4sTUFBSSxDQUFDdEYsZ0JBQWdCLENBQUNwSSxPQUFPLENBQUM7d0JBRTlCLElBQUk4QyxLQUFJLEVBQUU7MEJBQ1I0SyxNQUFJLENBQUNuSyxhQUFhLENBQUNDLGtCQUFRLENBQUNDLElBQUksRUFBRUMsMEJBQW1CLENBQUM4TSw2QkFBNkIsRUFBRSxrQ0FBa0MsRUFBRWxRLFNBQVMsRUFBRXFDLFFBQVEsRUFBRUUseUJBQXlCLEVBQUVULFdBQVcsRUFBRUMsTUFBTSxFQUFFN0MsU0FBUyxFQUFFQSxTQUFTLEVBQUVnRCxjQUFjLEVBQUVJLHVCQUF1QixDQUFDOzBCQUU1UG1GLE9BQU8sQ0FBQ2pGLEtBQUksQ0FBQzt3QkFDZjt3QkFBQ3lOLFNBQUEsQ0FBQTVSLElBQUE7d0JBQUE7c0JBQUE7d0JBQUE0UixTQUFBLENBQUFuTixJQUFBO3dCQUFBa04sR0FBQSxHQUFBQyxTQUFBO3dCQUVLM04seUJBQXVCLEdBQUdILFlBQVksQ0FBQ29DLG1CQUFtQjt3QkFDMURoQywyQkFBeUIsR0FBR1YsS0FBSyxDQUFDMEMsbUJBQW1CO3dCQUMzRDZJLE1BQUksQ0FBQ25LLGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQ3dCLEtBQUssRUFBRXRCLDBCQUFtQixDQUFDK00sMEJBQTBCLEVBQUUsK0JBQStCLEVBQUVuUSxTQUFTLEVBQUVkLFNBQVMsRUFBRXFELDJCQUF5QixFQUFFVCxXQUFXLEVBQUVDLE1BQU0sRUFBQWlPLEdBQUEsRUFBUzlRLFNBQVMsRUFBRWdELGNBQWMsRUFBRUkseUJBQXVCLENBQUM7d0JBQUMsS0FFalAsSUFBQTJGLGdDQUFvQixFQUFBK0gsR0FBQSxFQUFRalAscUJBQVMsQ0FBQ21ILHFCQUFxQixDQUFDOzBCQUFBK0gsU0FBQSxDQUFBNVIsSUFBQTswQkFBQTt3QkFBQTt3QkFDOUQySCxNQUFNLENBQUUsSUFBSXBGLEtBQUssQ0FBQ3dNLE1BQUksQ0FBQ2pGLHVCQUF1QixDQUFDLENBQUM7d0JBQUMsT0FBQThILFNBQUEsQ0FBQXhMLE1BQUE7c0JBQUE7d0JBR25EdUIsTUFBTSxDQUFBZ0ssR0FBTSxDQUFDO3NCQUFDO3NCQUFBO3dCQUFBLE9BQUFDLFNBQUEsQ0FBQXJMLElBQUE7b0JBQUE7a0JBQUEsR0FBQWdMLFFBQUE7Z0JBQUEsQ0FFakI7Z0JBQUEsaUJBQUFRLElBQUEsRUFBQUMsSUFBQTtrQkFBQSxPQUFBVixLQUFBLENBQUE1UyxLQUFBLE9BQUFFLFNBQUE7Z0JBQUE7Y0FBQSxJQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUEwUSxVQUFBLENBQUEvSSxJQUFBO1VBQUE7UUFBQSxHQUFBc0ksU0FBQTtNQUFBLENBQ0g7TUFBQSxTQW5HWVksb0JBQW9CQSxDQUFBd0MsSUFBQTtRQUFBLE9BQUFyRCxxQkFBQSxDQUFBbFEsS0FBQSxPQUFBRSxTQUFBO01BQUE7TUFBQSxPQUFwQjZRLG9CQUFvQjtJQUFBO0lBcUdqQztBQUNGO0FBQ0E7QUFDQTtBQUNBO0lBSkU7RUFBQTtJQUFBek4sR0FBQTtJQUFBcEMsS0FBQTtNQUFBLElBQUFzUyxZQUFBLE9BQUE5TyxrQkFBQSwwQkFBQUMsWUFBQSxZQUFBQyxJQUFBLENBS0EsU0FBQTZPLFVBQXlCeFEsU0FBaUI7UUFBQSxJQUFBeVEsc0JBQUE7VUFBQUMsTUFBQTtRQUFBLElBQUFDLHlCQUFBO1VBQUE5TyxLQUFBO1VBQUFJLGFBQUE7VUFBQXNILFVBQUE7VUFBQS9DLFdBQUE7VUFBQUQsc0JBQUE7VUFBQStHLFdBQUE7VUFBQUMsVUFBQTtVQUFBL0ssSUFBQTtVQUFBTixjQUFBO1VBQUEwTyxRQUFBO1VBQUE5TyxXQUFBO1VBQUEyRSxzQkFBQTtVQUFBQyxNQUFBO1VBQUExRSxHQUFBO1VBQUFELE1BQUE7VUFBQTRFLE9BQUE7VUFBQWtLLE9BQUEsR0FBQTVULFNBQUE7UUFBQSxPQUFBeUUsWUFBQSxZQUFBa0IsSUFBQSxXQUFBa08sVUFBQTtVQUFBLGtCQUFBQSxVQUFBLENBQUFoTyxJQUFBLEdBQUFnTyxVQUFBLENBQUF6UyxJQUFBO1lBQUE7Y0FBRXNTLHlCQUFxRCxHQUFBRSxPQUFBLENBQUEzVCxNQUFBLFFBQUEyVCxPQUFBLFFBQUEzUixTQUFBLEdBQUEyUixPQUFBLE1BQUcsQ0FBQyxDQUFDO2NBQzlGaFAsS0FBSyxHQUFHa0IsWUFBSyxDQUFDQyxLQUFLLENBQUMsQ0FBQztjQUMzQixJQUFJLENBQUNDLGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQ0MsSUFBSSxFQUFFQywwQkFBbUIsQ0FBQzJOLGtCQUFrQixFQUFFLHNCQUFzQixFQUFFL1EsU0FBUyxDQUFDO2NBQ3RHaUMsYUFBYSxHQUFHeUIsaUJBQUssQ0FBQ0MsTUFBTSxDQUFDLENBQUM7Y0FDOUI0RixVQUFVLEdBQUcsSUFBSTtjQUN2QixJQUFBM0YsNkJBQWlCLEVBQUMzQixhQUFhLEVBQUU7Z0JBQy9CNEIsT0FBTyxFQUFFLElBQUksQ0FBQzVFLGFBQWEsQ0FBQzZFLDBCQUEwQjtnQkFDdERDLDBCQUEwQixFQUFFLElBQUksQ0FBQzlFLGFBQWEsQ0FBQytFLDRCQUE0QixDQUFDZ04sV0FBVztnQkFDdkZDLFdBQVcsRUFBRSxTQUFiQSxXQUFXQSxDQUFHQyxLQUFLO2tCQUFBLE9BQUssSUFBQUMsbUNBQXVCLEVBQUNELEtBQUssRUFBRTNILFVBQVUsQ0FBQztnQkFBQTtnQkFDbEV0QyxnQkFBZ0IsRUFBRSxDQUFDbkgsa0NBQXNCLENBQUNGLGFBQWE7Y0FDekQsQ0FBQyxDQUFDO2NBRU00RyxXQUFXLEdBQXNEbUsseUJBQXlCLENBQTFGbkssV0FBVyxFQUFFRCxzQkFBc0IsR0FBOEJvSyx5QkFBeUIsQ0FBN0VwSyxzQkFBc0IsRUFBRStHLFdBQVcsR0FBaUJxRCx5QkFBeUIsQ0FBckRyRCxXQUFXLEVBQUVDLFVBQVUsR0FBS29ELHlCQUF5QixDQUF4Q3BELFVBQVU7Y0FDOUQvSyxJQUFpQixHQUFHOEssV0FBVyxJQUFJLENBQUMsQ0FBQztjQUNyQ3BMLGNBQXlCLEdBQUFsRixhQUFBLEtBQVErRCxxQkFBUyxDQUFDb0csY0FBYztjQUV6RHlKLFFBQVEsR0FBR3JLLHNCQUFzQixHQUNuQ2pELGdDQUFvQixDQUFDOE4sMkJBQTJCLEdBQ2hEOU4sZ0NBQW9CLENBQUMrTix1QkFBdUI7Y0FFNUN2UCxXQUFXLE9BQUF4QyxNQUFBLENBQU9zUixRQUFRLE9BQUF0UixNQUFBLENBQUksSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQ3lFLEtBQUssT0FBQWxFLE1BQUEsQ0FBSSxJQUFJLENBQUNQLHdCQUF3QixDQUFDMkcsUUFBUSxPQUFBcEcsTUFBQSxDQUFJVSxTQUFTO2NBRTVILElBQUl1RyxzQkFBc0IsRUFBRTtnQkFDMUJqSyxNQUFNLENBQUM0UixNQUFNLENBQUNoTSxjQUFjLE1BQUE5RSxnQkFBQSxpQkFBQUEsZ0JBQUEsaUJBQ3pCMEMsa0NBQXNCLENBQUN5RyxzQkFBc0IsRUFBR0Esc0JBQXNCLEdBQ3RFekcsa0NBQXNCLENBQUNGLGFBQWEsRUFBRyxJQUFJLENBQUNYLGFBQWEsQ0FBQ1csYUFBYSxDQUN6RSxDQUFDO2NBQ0o7Y0FFQSxJQUFJLENBQUMrRixpQkFBaUIsQ0FBQzNGLFNBQVMsRUFBRWtDLGNBQWMsQ0FBQztjQUNqRCxJQUFJLENBQUNvUCxrQkFBa0IsQ0FBQ3RSLFNBQVMsRUFBRWtDLGNBQWMsQ0FBQzs7Y0FHbEQ7Y0FDTXVFLHNCQUFzQixHQUFHLENBQUNGLHNCQUFzQixJQUFJLElBQUksQ0FBQ3RILGFBQWEsQ0FBQ29JLGlDQUFpQyxLQUFLLElBQUk7Y0FDdkgsSUFBSWIsV0FBVyxFQUFFO2dCQUNmLElBQUksQ0FBQ0Msc0JBQXNCLEVBQUU7a0JBQzNCM0UsV0FBVyxRQUFBeEMsTUFBQSxDQUFRa0gsV0FBVyxDQUFFO2dCQUNsQztjQUNGO2NBRU1FLE1BQWlDLEdBQUc7Z0JBQ3hDbEcsU0FBUyxFQUFFLElBQUksQ0FBQ3pCLHdCQUF3QixDQUFDeUI7Y0FDM0MsQ0FBQztjQUVELElBQUlnRyxXQUFXLElBQUlDLHNCQUFzQixFQUFFO2dCQUN6Q0MsTUFBTSxDQUFDWSxHQUFHLEdBQUdkLFdBQVc7Y0FDMUI7Y0FBQyxNQUVHK0csVUFBVSxJQUFJLENBQUNrQixNQUFNLENBQUNDLFFBQVE7Z0JBQUFvQyxVQUFBLENBQUF6UyxJQUFBO2dCQUFBO2NBQUE7Y0FBQSxPQUFBeVMsVUFBQSxDQUFBck0sTUFBQSxXQUN6QnNCLE9BQU8sQ0FBQ0MsTUFBTSxDQUFDLElBQUlwRixLQUFLLCtDQUErQyxDQUFDLENBQUM7WUFBQTtjQUdsRixJQUFJMk0sVUFBVSxFQUFFO2dCQUNkL0ssSUFBSSxDQUFDbU0sT0FBTyxHQUFHQyx3QkFBVyxDQUFDQyxjQUFjLENBQUMsQ0FBQztnQkFDM0NyTSxJQUFJLENBQUNzTSxNQUFNLEdBQUdDLHNCQUFVLENBQUNDLGFBQWEsQ0FBQyxDQUFDO2dCQUN4Q3hNLElBQUksQ0FBQ3lNLFNBQVMsR0FBR1IsTUFBTSxDQUFDUyxRQUFRLENBQUNDLElBQUk7Z0JBQ3JDM00sSUFBSSxDQUFDNE0sRUFBRSxHQUFHQyxjQUFNLENBQUNDLFNBQVMsQ0FBQyxDQUFDO2NBQzlCOztjQUVBO2NBQ0EsSUFBSSxDQUFDOU0sSUFBSSxDQUFDK00sTUFBTSxFQUFFO2dCQUNoQi9NLElBQUksQ0FBQytNLE1BQU0sR0FBR3hPLHFCQUFTLENBQUN5TyxhQUFhO2NBQ3ZDOztjQUVBO2NBQUEsTUFDSWhOLElBQUksQ0FBQytNLE1BQU0sSUFBSSxDQUFDRSxtQkFBTyxDQUFDQyxnQkFBZ0IsQ0FBQy9PLFFBQVEsQ0FBQzZCLElBQUksQ0FBQytNLE1BQU0sQ0FBQztnQkFBQXVCLFVBQUEsQ0FBQXpTLElBQUE7Z0JBQUE7Y0FBQTtjQUFBLE9BQUF5UyxVQUFBLENBQUFyTSxNQUFBLFdBQ3pEc0IsT0FBTyxDQUFDQyxNQUFNLENBQUMsSUFBSXBGLEtBQUsseUJBQUF0QixNQUFBLENBQXlCa0QsSUFBSSxDQUFDK00sTUFBTSxNQUFHLENBQUMsQ0FBQztZQUFBO2NBR3BFdk4sR0FBRyxNQUFBMUMsTUFBQSxDQUFNLElBQUksQ0FBQ1Asd0JBQXdCLENBQUMwRSxNQUFNLEVBQUFuRSxNQUFBLENBQUd3QyxXQUFXO2NBQzNEQyxNQUFNLEdBQUcsTUFBTTtjQUNmNEUsT0FBMkIsR0FBRztnQkFDbENuRSxJQUFJLEVBQUpBLElBQUk7Z0JBQ0o5QyxPQUFPLEVBQUV3QyxjQUFjO2dCQUN2QkgsTUFBTSxFQUFOQSxNQUFNO2dCQUNOQyxHQUFHLEVBQUhBLEdBQUc7Z0JBQ0gwRSxNQUFNLEVBQU5BLE1BQU07Z0JBQ052QyxPQUFPLEdBQUFzTSxzQkFBQSxHQUFFLElBQUksQ0FBQ3hSLGFBQWEsQ0FBQ21GLHFCQUFxQixjQUFBcU0sc0JBQUEsY0FBQUEsc0JBQUEsR0FBSSxJQUFJLENBQUN4UixhQUFhLENBQUNvRixvQkFBb0IsQ0FBQzJNO2NBQy9GLENBQUM7Y0FBQSxPQUFBRixVQUFBLENBQUFyTSxNQUFBLFdBRU0sSUFBSXNCLE9BQU87Z0JBQUEsSUFBQXdMLEtBQUEsT0FBQTlQLGtCQUFBLDBCQUFBQyxZQUFBLFlBQUFDLElBQUEsQ0FBQyxTQUFBNlAsVUFBTy9KLE9BQU8sRUFBRXpCLE1BQU07a0JBQUEsSUFBQTdELFlBQUEsRUFBQUUsUUFBQSxFQUFBQyx1QkFBQSxFQUFBQyx5QkFBQSxFQUFBN0MsT0FBQSxFQUFBK1IseUJBQUEsRUFBQUMsMkJBQUEsRUFBQUMsR0FBQTtrQkFBQSxPQUFBalEsWUFBQSxZQUFBa0IsSUFBQSxXQUFBZ1AsVUFBQTtvQkFBQSxrQkFBQUEsVUFBQSxDQUFBOU8sSUFBQSxHQUFBOE8sVUFBQSxDQUFBdlQsSUFBQTtzQkFBQTt3QkFDakM4RCxZQUFZLEdBQUdZLFlBQUssQ0FBQ0MsS0FBSyxDQUFDLENBQUM7d0JBQUE0TyxVQUFBLENBQUE5TyxJQUFBO3dCQUFBOE8sVUFBQSxDQUFBdlQsSUFBQTt3QkFBQSxPQUVUNEQsYUFBYSxDQUFDMEUsT0FBTyxDQUFDO3NCQUFBO3dCQUF2Q3RFLFFBQVEsR0FBQXVQLFVBQUEsQ0FBQXROLElBQUE7d0JBQ1JoQyx1QkFBdUIsR0FBR0gsWUFBWSxDQUFDb0MsbUJBQW1CO3dCQUMxRGhDLHlCQUF5QixHQUFHVixLQUFLLENBQUMwQyxtQkFBbUI7d0JBQ25EN0UsT0FBTyxHQUFLMkMsUUFBUSxDQUFwQjNDLE9BQU87d0JBQ2ZnUixNQUFJLENBQUM1SSxnQkFBZ0IsQ0FBQ3BJLE9BQU8sQ0FBQzt3QkFFOUJnUixNQUFJLENBQUN6TixhQUFhLENBQUNDLGtCQUFRLENBQUNDLElBQUksRUFBRUMsMEJBQW1CLENBQUN5TyxvQkFBb0IsRUFBRSx3QkFBd0IsRUFBRTdSLFNBQVMsRUFBRXFDLFFBQVEsRUFBRUUseUJBQXlCLEVBQUVULFdBQVcsRUFBRUMsTUFBTSxFQUFFN0MsU0FBUyxFQUFFc0QsSUFBSSxFQUFFTixjQUFjLEVBQUVJLHVCQUF1QixDQUFDO3dCQUNwT21GLE9BQU8sQ0FBQyxDQUFDO3dCQUFDbUssVUFBQSxDQUFBdlQsSUFBQTt3QkFBQTtzQkFBQTt3QkFBQXVULFVBQUEsQ0FBQTlPLElBQUE7d0JBQUE2TyxHQUFBLEdBQUFDLFVBQUE7d0JBRUp0UCx5QkFBdUIsR0FBR0gsWUFBWSxDQUFDb0MsbUJBQW1CO3dCQUMxRGhDLDJCQUF5QixHQUFHVixLQUFLLENBQUMwQyxtQkFBbUI7d0JBQzNEbU0sTUFBSSxDQUFDek4sYUFBYSxDQUFDQyxrQkFBUSxDQUFDd0IsS0FBSyxFQUFFdEIsMEJBQW1CLENBQUMwTyxpQkFBaUIsRUFBRSxxQkFBcUIsRUFBRTlSLFNBQVMsRUFBRWQsU0FBUyxFQUFFcUQsMkJBQXlCLEVBQUVULFdBQVcsRUFBRUMsTUFBTSxFQUFBNFAsR0FBQSxFQUFTblAsSUFBSSxFQUFFTixjQUFjLEVBQUVJLHlCQUF1QixDQUFDO3dCQUFDLEtBRXpOLElBQUEyRixnQ0FBb0IsRUFBQTBKLEdBQUEsRUFBUTVRLHFCQUFTLENBQUNtSCxxQkFBcUIsQ0FBQzswQkFBQTBKLFVBQUEsQ0FBQXZULElBQUE7MEJBQUE7d0JBQUE7d0JBQzlEMkgsTUFBTSxDQUFFLElBQUlwRixLQUFLLENBQUM4UCxNQUFJLENBQUN2SSx1QkFBdUIsQ0FBQyxDQUFDO3dCQUFDLE9BQUF5SixVQUFBLENBQUFuTixNQUFBO3NCQUFBO3dCQUduRHVCLE1BQU0sQ0FBQTJMLEdBQU0sQ0FBQztzQkFBQztzQkFBQTt3QkFBQSxPQUFBQyxVQUFBLENBQUFoTixJQUFBO29CQUFBO2tCQUFBLEdBQUE0TSxTQUFBO2dCQUFBLENBRWpCO2dCQUFBLGlCQUFBTyxJQUFBLEVBQUFDLElBQUE7a0JBQUEsT0FBQVQsS0FBQSxDQUFBeFUsS0FBQSxPQUFBRSxTQUFBO2dCQUFBO2NBQUEsSUFBQztZQUFBO1lBQUE7Y0FBQSxPQUFBNlQsVUFBQSxDQUFBbE0sSUFBQTtVQUFBO1FBQUEsR0FBQTRMLFNBQUE7TUFBQSxDQUNIO01BQUEsU0F4R1lRLFdBQVdBLENBQUFpQixJQUFBO1FBQUEsT0FBQTFCLFlBQUEsQ0FBQXhULEtBQUEsT0FBQUUsU0FBQTtNQUFBO01BQUEsT0FBWCtULFdBQVc7SUFBQTtFQUFBO0lBQUEzUSxHQUFBO0lBQUFwQyxLQUFBO01BQUEsSUFBQWlVLG1CQUFBLE9BQUF6USxrQkFBQSwwQkFBQUMsWUFBQSxZQUFBQyxJQUFBLENBMEd4QixTQUFBd1EsVUFBZ0NuUyxTQUFpQjtRQUFBLElBQUFvUyxzQkFBQTtRQUFBLElBQUF6Qix5QkFBQTtVQUFBOU8sS0FBQTtVQUFBSSxhQUFBO1VBQUFzSCxVQUFBO1VBQUEvQyxXQUFBO1VBQUFELHNCQUFBO1VBQUErRyxXQUFBO1VBQUFDLFVBQUE7VUFBQS9LLElBQUE7VUFBQU4sY0FBQTtVQUFBME8sUUFBQTtVQUFBOU8sV0FBQTtVQUFBRSxHQUFBO1VBQUFELE1BQUE7VUFBQTRFLE9BQUE7VUFBQXhFLFlBQUE7VUFBQUUsUUFBQTtVQUFBQyx1QkFBQTtVQUFBQyx5QkFBQTtVQUFBOFAsTUFBQTtVQUFBM1MsT0FBQTtVQUFBNFMseUJBQUE7VUFBQUMsMkJBQUE7VUFBQUMsT0FBQSxHQUFBdlYsU0FBQTtVQUFBd1YsR0FBQTtRQUFBLE9BQUEvUSxZQUFBLFlBQUFrQixJQUFBLFdBQUE4UCxVQUFBO1VBQUEsa0JBQUFBLFVBQUEsQ0FBQTVQLElBQUEsR0FBQTRQLFVBQUEsQ0FBQXJVLElBQUE7WUFBQTtjQUFFc1MseUJBQXFELEdBQUE2QixPQUFBLENBQUF0VixNQUFBLFFBQUFzVixPQUFBLFFBQUF0VCxTQUFBLEdBQUFzVCxPQUFBLE1BQUcsQ0FBQyxDQUFDO2NBQ3JHM1EsS0FBSyxHQUFHa0IsWUFBSyxDQUFDQyxLQUFLLENBQUMsQ0FBQztjQUMzQixJQUFJLENBQUNDLGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQ0MsSUFBSSxFQUFFQywwQkFBbUIsQ0FBQ3VQLG9CQUFvQixFQUFFLGtDQUFrQyxFQUFFM1MsU0FBUyxDQUFDO2NBQ3BIaUMsYUFBYSxHQUFHeUIsaUJBQUssQ0FBQ0MsTUFBTSxDQUFDLENBQUM7Y0FDOUI0RixVQUFVLEdBQUcsSUFBSTtjQUN2QixJQUFBM0YsNkJBQWlCLEVBQUMzQixhQUFhLEVBQUU7Z0JBQy9CNEIsT0FBTyxFQUFFLElBQUksQ0FBQzVFLGFBQWEsQ0FBQzZFLDBCQUEwQjtnQkFDdERDLDBCQUEwQixFQUFFLElBQUksQ0FBQzlFLGFBQWEsQ0FBQytFLDRCQUE0QixDQUFDZ04sV0FBVztnQkFDdkZDLFdBQVcsRUFBRSxTQUFiQSxXQUFXQSxDQUFHQyxLQUFLO2tCQUFBLE9BQUssSUFBQUMsbUNBQXVCLEVBQUNELEtBQUssRUFBRTNILFVBQVUsQ0FBQztnQkFBQTtnQkFDbEV0QyxnQkFBZ0IsRUFBRSxDQUFDbkgsa0NBQXNCLENBQUNGLGFBQWE7Y0FDekQsQ0FBQyxDQUFDO2NBRU00RyxXQUFXLEdBQXNEbUsseUJBQXlCLENBQTFGbkssV0FBVyxFQUFFRCxzQkFBc0IsR0FBOEJvSyx5QkFBeUIsQ0FBN0VwSyxzQkFBc0IsRUFBRStHLFdBQVcsR0FBaUJxRCx5QkFBeUIsQ0FBckRyRCxXQUFXLEVBQUVDLFVBQVUsR0FBS29ELHlCQUF5QixDQUF4Q3BELFVBQVU7Y0FDOUQvSyxJQUFpQixHQUFHOEssV0FBVyxJQUFJLENBQUMsQ0FBQztjQUNyQ3BMLGNBQXlCLEdBQUFsRixhQUFBLEtBQVErRCxxQkFBUyxDQUFDb0csY0FBYztjQUV6RHlKLFFBQVEsR0FBR3JLLHNCQUFzQixHQUNuQ2pELGdDQUFvQixDQUFDc1AseUJBQXlCLEdBQzlDdFAsZ0NBQW9CLENBQUN1UCxxQkFBcUI7Y0FFeEMvUSxXQUFXLE9BQUF4QyxNQUFBLENBQU9zUixRQUFRLE9BQUF0UixNQUFBLENBQUksSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQ3lFLEtBQUssaUJBQUFsRSxNQUFBLENBQWMsSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQzJHLFFBQVE7Y0FFM0gsSUFBSWEsc0JBQXNCLEVBQUU7Z0JBQzFCakssTUFBTSxDQUFDNFIsTUFBTSxDQUFDaE0sY0FBYyxNQUFBOUUsZ0JBQUEsaUJBQUFBLGdCQUFBLGlCQUN6QjBDLGtDQUFzQixDQUFDeUcsc0JBQXNCLEVBQUdBLHNCQUFzQixHQUN0RXpHLGtDQUFzQixDQUFDRixhQUFhLEVBQUcsSUFBSSxDQUFDWCxhQUFhLENBQUNXLGFBQWEsQ0FDekUsQ0FBQztjQUNKO2NBRUEsSUFBSSxDQUFDK0YsaUJBQWlCLENBQUMzRixTQUFTLEVBQUVrQyxjQUFjLENBQUM7Y0FDakQsSUFBSSxDQUFDb1Asa0JBQWtCLENBQUN0UixTQUFTLEVBQUVrQyxjQUFjLENBQUM7Y0FFbEQsSUFBSXNFLFdBQVcsRUFBRTtnQkFDZmhFLElBQUksQ0FBQ2dFLFdBQVcsR0FBR0EsV0FBVztjQUNoQztjQUVBaEUsSUFBSSxDQUFDaEMsU0FBUyxHQUFHLElBQUksQ0FBQ3pCLHdCQUF3QixDQUFDeUIsU0FBUztjQUFDLE1BRXJEK00sVUFBVSxJQUFJLENBQUNrQixNQUFNLENBQUNDLFFBQVE7Z0JBQUFnRSxVQUFBLENBQUFyVSxJQUFBO2dCQUFBO2NBQUE7Y0FBQSxPQUFBcVUsVUFBQSxDQUFBak8sTUFBQSxXQUN6QnNCLE9BQU8sQ0FBQ0MsTUFBTSxDQUFDLElBQUlwRixLQUFLLCtDQUErQyxDQUFDLENBQUM7WUFBQTtjQUdsRixJQUFJMk0sVUFBVSxFQUFFO2dCQUNkL0ssSUFBSSxDQUFDbU0sT0FBTyxHQUFHQyx3QkFBVyxDQUFDQyxjQUFjLENBQUMsQ0FBQztnQkFDM0NyTSxJQUFJLENBQUNzTSxNQUFNLEdBQUdDLHNCQUFVLENBQUNDLGFBQWEsQ0FBQyxDQUFDO2dCQUN4Q3hNLElBQUksQ0FBQ3lNLFNBQVMsR0FBR1IsTUFBTSxDQUFDUyxRQUFRLENBQUNDLElBQUk7Z0JBQ3JDM00sSUFBSSxDQUFDNE0sRUFBRSxHQUFHQyxjQUFNLENBQUNDLFNBQVMsQ0FBQyxDQUFDO2NBQzlCOztjQUVBO2NBQ0EsSUFBSSxDQUFDOU0sSUFBSSxDQUFDK00sTUFBTSxFQUFFO2dCQUNoQi9NLElBQUksQ0FBQytNLE1BQU0sR0FBR3hPLHFCQUFTLENBQUN5TyxhQUFhO2NBQ3ZDOztjQUVBO2NBQUEsTUFDSWhOLElBQUksQ0FBQytNLE1BQU0sSUFBSSxDQUFDRSxtQkFBTyxDQUFDQyxnQkFBZ0IsQ0FBQy9PLFFBQVEsQ0FBQzZCLElBQUksQ0FBQytNLE1BQU0sQ0FBQztnQkFBQW1ELFVBQUEsQ0FBQXJVLElBQUE7Z0JBQUE7Y0FBQTtjQUFBLE9BQUFxVSxVQUFBLENBQUFqTyxNQUFBLFdBQ3pEc0IsT0FBTyxDQUFDQyxNQUFNLENBQUMsSUFBSXBGLEtBQUsseUJBQUF0QixNQUFBLENBQXlCa0QsSUFBSSxDQUFDK00sTUFBTSxNQUFHLENBQUMsQ0FBQztZQUFBO2NBR3BFdk4sR0FBRyxNQUFBMUMsTUFBQSxDQUFNLElBQUksQ0FBQ1Asd0JBQXdCLENBQUMwRSxNQUFNLEVBQUFuRSxNQUFBLENBQUd3QyxXQUFXO2NBQzNEQyxNQUFNLEdBQUcsTUFBTTtjQUNmNEUsT0FBMkIsR0FBRztnQkFDbENuRSxJQUFJLEVBQUpBLElBQUk7Z0JBQ0o5QyxPQUFPLEVBQUV3QyxjQUFjO2dCQUN2QkgsTUFBTSxFQUFOQSxNQUFNO2dCQUNOQyxHQUFHLEVBQUhBLEdBQUc7Z0JBQ0htQyxPQUFPLEdBQUFpTyxzQkFBQSxHQUFFLElBQUksQ0FBQ25ULGFBQWEsQ0FBQ21GLHFCQUFxQixjQUFBZ08sc0JBQUEsY0FBQUEsc0JBQUEsR0FBSSxJQUFJLENBQUNuVCxhQUFhLENBQUNvRixvQkFBb0IsQ0FBQzJNO2NBQy9GLENBQUM7Y0FFSzdPLFlBQVksR0FBR1ksWUFBSyxDQUFDQyxLQUFLLENBQUMsQ0FBQztjQUFBMFAsVUFBQSxDQUFBNVAsSUFBQTtjQUFBNFAsVUFBQSxDQUFBclUsSUFBQTtjQUFBLE9BRVQ0RCxhQUFhLENBQUMwRSxPQUFPLENBQUM7WUFBQTtjQUF2Q3RFLFFBQVEsR0FBQXFRLFVBQUEsQ0FBQXBPLElBQUE7Y0FDUmhDLHVCQUF1QixHQUFHSCxZQUFZLENBQUNvQyxtQkFBbUI7Y0FDMURoQyx5QkFBeUIsR0FBR1YsS0FBSyxDQUFDMEMsbUJBQW1CO2NBQ25EL0IsTUFBSSxHQUFjSCxRQUFRLENBQTFCRyxJQUFJLEVBQUU5QyxPQUFPLEdBQUsyQyxRQUFRLENBQXBCM0MsT0FBTztjQUNyQixJQUFJLENBQUNvSSxnQkFBZ0IsQ0FBQ3BJLE9BQU8sQ0FBQztjQUU5QixJQUFJQSxPQUFPLEVBQUU7Z0JBQ1gsSUFBSUEsT0FBTyxDQUFDSSxrQ0FBc0IsQ0FBQ0MsV0FBVyxDQUFDZ0ssV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFO2tCQUM3RCxJQUFJLENBQUNsSyxTQUFTLEdBQUdILE9BQU8sQ0FBQ0ksa0NBQXNCLENBQUNDLFdBQVcsQ0FBQ2dLLFdBQVcsQ0FBQyxDQUFDLENBQUM7Z0JBQzVFO2NBQ0Y7O2NBRUE7Y0FBQSxNQUNJek4sTUFBTSxDQUFDSSxJQUFJLENBQUM4RixNQUFJLENBQUMsQ0FBQ3RGLE1BQU0sS0FBSyxDQUFDO2dCQUFBd1YsVUFBQSxDQUFBclUsSUFBQTtnQkFBQTtjQUFBO2NBQUEsTUFDMUIsSUFBSXVDLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQztZQUFBO2NBRzFENEIsTUFBSSxDQUFDeEMsU0FBUyxHQUFHQSxTQUFTO2NBQzFCLElBQUksQ0FBQ2lELGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQ0MsSUFBSSxFQUFFQywwQkFBbUIsQ0FBQzBQLHNCQUFzQixFQUFFLG1DQUFtQyxFQUFFOVMsU0FBUyxFQUFFcUMsUUFBUSxFQUFFRSx5QkFBeUIsRUFBRVQsV0FBVyxFQUFFQyxNQUFNLEVBQUU3QyxTQUFTLEVBQUVBLFNBQVMsRUFBRWdELGNBQWMsRUFBRUksdUJBQXVCLENBQUM7Y0FBQyxPQUFBb1EsVUFBQSxDQUFBak8sTUFBQSxXQUNoUGpDLE1BQUk7WUFBQTtjQUFBa1EsVUFBQSxDQUFBNVAsSUFBQTtjQUFBMlAsR0FBQSxHQUFBQyxVQUFBO2NBRUxwUSx5QkFBdUIsR0FBR0gsWUFBWSxDQUFDb0MsbUJBQW1CO2NBQzFEaEMsMkJBQXlCLEdBQUdWLEtBQUssQ0FBQzBDLG1CQUFtQjtjQUMzRCxJQUFJLENBQUN0QixhQUFhLENBQUNDLGtCQUFRLENBQUN3QixLQUFLLEVBQUV0QiwwQkFBbUIsQ0FBQzJQLG1CQUFtQixFQUFFLGlDQUFpQyxFQUFFL1MsU0FBUyxFQUFFZCxTQUFTLEVBQUVxRCwyQkFBeUIsRUFBRVQsV0FBVyxFQUFFQyxNQUFNLEVBQUEwUSxHQUFBLEVBQVNqUSxJQUFJLEVBQUVOLGNBQWMsRUFBRUkseUJBQXVCLENBQUM7Y0FBQyxLQUV2TyxJQUFBMkYsZ0NBQW9CLEVBQUF3SyxHQUFBLEVBQVExUixxQkFBUyxDQUFDbUgscUJBQXFCLENBQUM7Z0JBQUF3SyxVQUFBLENBQUFyVSxJQUFBO2dCQUFBO2NBQUE7Y0FBQSxNQUN4RCxJQUFJdUMsS0FBSyxDQUFDLElBQUksQ0FBQ3VILHVCQUF1QixDQUFDO1lBQUE7Y0FBQSxNQUFBc0ssR0FBQTtZQUFBO1lBQUE7Y0FBQSxPQUFBQyxVQUFBLENBQUE5TixJQUFBO1VBQUE7UUFBQSxHQUFBdU4sU0FBQTtNQUFBLENBSWxEO01BQUEsU0FyR1lhLGtCQUFrQkEsQ0FBQUMsSUFBQTtRQUFBLE9BQUFmLG1CQUFBLENBQUFuVixLQUFBLE9BQUFFLFNBQUE7TUFBQTtNQUFBLE9BQWxCK1Ysa0JBQWtCO0lBQUE7SUF1Ry9CO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7RUFKRTtJQUFBM1MsR0FBQTtJQUFBcEMsS0FBQTtNQUFBLElBQUFpVixhQUFBLE9BQUF6UixrQkFBQSwwQkFBQUMsWUFBQSxZQUFBQyxJQUFBLENBS0EsU0FBQXdSLFVBQTBCblQsU0FBaUI7UUFBQSxJQUFBb1Qsc0JBQUE7VUFBQUMsTUFBQTtRQUFBLElBQUFDLDBCQUFBO1VBQUF6UixLQUFBO1VBQUFDLFdBQUE7VUFBQUcsYUFBQTtVQUFBc0Usc0JBQUE7VUFBQWdOLGVBQUE7VUFBQUMsZ0JBQUE7VUFBQUMsTUFBQTtVQUFBdlIsY0FBQTtVQUFBTSxJQUFBO1VBQUFSLEdBQUE7VUFBQUQsTUFBQTtVQUFBNEUsT0FBQTtVQUFBK00sT0FBQSxHQUFBelcsU0FBQTtRQUFBLE9BQUF5RSxZQUFBLFlBQUFrQixJQUFBLFdBQUErUSxVQUFBO1VBQUEsa0JBQUFBLFVBQUEsQ0FBQTdRLElBQUEsR0FBQTZRLFVBQUEsQ0FBQXRWLElBQUE7WUFBQTtjQUFFaVYsMEJBQXVELEdBQUFJLE9BQUEsQ0FBQXhXLE1BQUEsUUFBQXdXLE9BQUEsUUFBQXhVLFNBQUEsR0FBQXdVLE9BQUEsTUFBRyxDQUFDLENBQUM7Y0FDakc3UixLQUFLLEdBQUdrQixZQUFLLENBQUNDLEtBQUssQ0FBQyxDQUFDO2NBQzNCLElBQUksQ0FBQ0MsYUFBYSxDQUFDQyxrQkFBUSxDQUFDQyxJQUFJLEVBQUVDLDBCQUFtQixDQUFDd1EsbUJBQW1CLEVBQUUsdUJBQXVCLEVBQUU1VCxTQUFTLENBQUM7Y0FFMUc4QixXQUFXLE9BQUF4QyxNQUFBLENBQU9nRSxnQ0FBb0IsQ0FBQ3VRLHdCQUF3QixPQUFBdlUsTUFBQSxDQUFJLElBQUksQ0FBQ1Asd0JBQXdCLENBQUN5RSxLQUFLLE9BQUFsRSxNQUFBLENBQUksSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQzJHLFFBQVEsT0FBQXBHLE1BQUEsQ0FBSVUsU0FBUyxpQkFBQVYsTUFBQSxDQUFjLElBQUksQ0FBQ1Asd0JBQXdCLENBQUN5QixTQUFTO2NBQ2hOeUIsYUFBYSxHQUFHeUIsaUJBQUssQ0FBQ0MsTUFBTSxDQUFDLENBQUM7Y0FDcEMsSUFBQUMsNkJBQWlCLEVBQUMzQixhQUFhLEVBQUU7Z0JBQy9CZ0YsZ0JBQWdCLEVBQUUsQ0FBQ25ILGtDQUFzQixDQUFDRixhQUFhLENBQUM7Z0JBQ3hEaUUsT0FBTyxFQUFFLElBQUksQ0FBQzVFLGFBQWEsQ0FBQzZFLDBCQUEwQjtnQkFDdERDLDBCQUEwQixFQUFFLElBQUksQ0FBQzlFLGFBQWEsQ0FBQytFLDRCQUE0QixDQUFDOFA7Y0FDOUUsQ0FBQyxDQUFDO2NBRU12TixzQkFBc0IsR0FBZ0QrTSwwQkFBMEIsQ0FBaEcvTSxzQkFBc0IsRUFBRWdOLGVBQWUsR0FBK0JELDBCQUEwQixDQUF4RUMsZUFBZSxFQUFFQyxnQkFBZ0IsR0FBYUYsMEJBQTBCLENBQXZERSxnQkFBZ0IsRUFBRUMsTUFBTSxHQUFLSCwwQkFBMEIsQ0FBckNHLE1BQU07Y0FFbkV2UixjQUF5QixHQUFHbkIscUJBQVMsQ0FBQ29HLGNBQWM7Y0FDcEQzRSxJQUFTLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Y0FDdEJBLElBQUksQ0FBQ2lSLE1BQU0sR0FBR0EsTUFBTTtjQUVwQixJQUFJbE4sc0JBQXNCLEVBQUU7Z0JBQzFCekUsV0FBVyxPQUFBeEMsTUFBQSxDQUFPZ0UsZ0NBQW9CLENBQUN5USw0QkFBNEIsT0FBQXpVLE1BQUEsQ0FBSSxJQUFJLENBQUNQLHdCQUF3QixDQUFDeUUsS0FBSyxPQUFBbEUsTUFBQSxDQUFJLElBQUksQ0FBQ1Asd0JBQXdCLENBQUMyRyxRQUFRLE9BQUFwRyxNQUFBLENBQUlVLFNBQVMsaUJBQUFWLE1BQUEsQ0FBYyxJQUFJLENBQUNQLHdCQUF3QixDQUFDeUIsU0FBUyxDQUFFO2dCQUN4TjBCLGNBQWMsQ0FBQ3BDLGtDQUFzQixDQUFDeUcsc0JBQXNCLENBQUMsR0FBR0Esc0JBQXNCO2dCQUN0RnJFLGNBQWMsQ0FBQ3BDLGtDQUFzQixDQUFDRixhQUFhLENBQUMsR0FBRyxJQUFJLENBQUNYLGFBQWEsQ0FBQ1csYUFBYTtjQUN6RjtjQUVBLElBQUksQ0FBQytGLGlCQUFpQixDQUFDM0YsU0FBUyxFQUFFa0MsY0FBYyxDQUFDO2NBRWpELElBQUlxUixlQUFlLEVBQUU7Z0JBQ25CelIsV0FBVywyQkFBMkI7Y0FDeEM7Y0FFQSxJQUFJMFIsZ0JBQWdCLEVBQUU7Z0JBQ3BCMVIsV0FBVyw0QkFBNEI7Y0FDekM7Y0FFTUUsR0FBRyxNQUFBMUMsTUFBQSxDQUFNLElBQUksQ0FBQ1Asd0JBQXdCLENBQUMwRSxNQUFNLEVBQUFuRSxNQUFBLENBQUd3QyxXQUFXO2NBQzNEQyxNQUFNLEdBQUcsTUFBTTtjQUNmNEUsT0FBMkIsR0FBRztnQkFDbENuRSxJQUFJLEVBQUpBLElBQUk7Z0JBQ0o5QyxPQUFPLEVBQUV3QyxjQUFjO2dCQUN2QkgsTUFBTSxFQUFOQSxNQUFNO2dCQUNOQyxHQUFHLEVBQUhBLEdBQUc7Z0JBQ0htQyxPQUFPLEdBQUFpUCxzQkFBQSxHQUFFLElBQUksQ0FBQ25VLGFBQWEsQ0FBQ21GLHFCQUFxQixjQUFBZ1Asc0JBQUEsY0FBQUEsc0JBQUEsR0FBSSxJQUFJLENBQUNuVSxhQUFhLENBQUNvRixvQkFBb0IsQ0FBQ3lQO2NBQy9GLENBQUM7Y0FBQSxPQUFBSCxVQUFBLENBQUFsUCxNQUFBLFdBRU0sSUFBSXNCLE9BQU87Z0JBQUEsSUFBQWlPLEtBQUEsT0FBQXZTLGtCQUFBLDBCQUFBQyxZQUFBLFlBQUFDLElBQUEsQ0FBQyxTQUFBc1MsVUFBT3hNLE9BQU8sRUFBRXpCLE1BQU07a0JBQUEsSUFBQTdELFlBQUEsRUFBQUUsUUFBQSxFQUFBQyx1QkFBQSxFQUFBNUMsT0FBQSxFQUFBNkMseUJBQUEsRUFBQTJSLHlCQUFBLEVBQUFDLDJCQUFBLEVBQUFDLEdBQUE7a0JBQUEsT0FBQTFTLFlBQUEsWUFBQWtCLElBQUEsV0FBQXlSLFVBQUE7b0JBQUEsa0JBQUFBLFVBQUEsQ0FBQXZSLElBQUEsR0FBQXVSLFVBQUEsQ0FBQWhXLElBQUE7c0JBQUE7d0JBQ2pDOEQsWUFBWSxHQUFHWSxZQUFLLENBQUNDLEtBQUssQ0FBQyxDQUFDO3dCQUFBcVIsVUFBQSxDQUFBdlIsSUFBQTt3QkFBQXVSLFVBQUEsQ0FBQWhXLElBQUE7d0JBQUEsT0FFVDRELGFBQWEsQ0FBQzBFLE9BQU8sQ0FBQztzQkFBQTt3QkFBdkN0RSxRQUFRLEdBQUFnUyxVQUFBLENBQUEvUCxJQUFBO3dCQUNSaEMsdUJBQXVCLEdBQUdILFlBQVksQ0FBQ29DLG1CQUFtQjt3QkFDeEQ3RSxPQUFPLEdBQUsyQyxRQUFRLENBQXBCM0MsT0FBTzt3QkFDZjJULE1BQUksQ0FBQ3ZMLGdCQUFnQixDQUFDcEksT0FBTyxDQUFDO3dCQUV4QjZDLHlCQUF5QixHQUFHVixLQUFLLENBQUMwQyxtQkFBbUI7d0JBQzNEOE8sTUFBSSxDQUFDcFEsYUFBYSxDQUFDQyxrQkFBUSxDQUFDQyxJQUFJLEVBQUVDLDBCQUFtQixDQUFDa1IscUJBQXFCLEVBQUUseUJBQXlCLEVBQUV0VSxTQUFTLEVBQUVxQyxRQUFRLEVBQUVFLHlCQUF5QixFQUFFVCxXQUFXLEVBQUVDLE1BQU0sRUFBRTdDLFNBQVMsRUFBRUEsU0FBUyxFQUFFZ0QsY0FBYyxFQUFFSSx1QkFBdUIsQ0FBQzt3QkFFM09tRixPQUFPLENBQUMsQ0FBQzt3QkFDVDt3QkFBQTRNLFVBQUEsQ0FBQWhXLElBQUE7d0JBQUE7c0JBQUE7d0JBQUFnVyxVQUFBLENBQUF2UixJQUFBO3dCQUFBc1IsR0FBQSxHQUFBQyxVQUFBO3dCQUVNL1IseUJBQXVCLEdBQUdILFlBQVksQ0FBQ29DLG1CQUFtQjt3QkFDMURoQywyQkFBeUIsR0FBR1YsS0FBSyxDQUFDMEMsbUJBQW1CO3dCQUMzRDhPLE1BQUksQ0FBQ3BRLGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQ3dCLEtBQUssRUFBRXRCLDBCQUFtQixDQUFDbVIsa0JBQWtCLEVBQUUsc0JBQXNCLEVBQUV2VSxTQUFTLEVBQUVkLFNBQVMsRUFBRXFELDJCQUF5QixFQUFFVCxXQUFXLEVBQUVDLE1BQU0sRUFBQXFTLEdBQUEsRUFBU2xWLFNBQVMsRUFBRWdELGNBQWMsRUFBRUkseUJBQXVCLENBQUM7d0JBQ25PLElBQUk4UixHQUFBLENBQU1JLElBQUksS0FBS3pULHFCQUFTLENBQUNtSCxxQkFBcUIsRUFBRTswQkFDbERsQyxNQUFNLENBQUUsSUFBSXBGLEtBQUssQ0FBQ3lTLE1BQUksQ0FBQ2xMLHVCQUF1QixDQUFDLENBQUM7d0JBQ2xEO3dCQUNBbkMsTUFBTSxDQUFBb08sR0FBTSxDQUFDO3NCQUFDO3NCQUFBO3dCQUFBLE9BQUFDLFVBQUEsQ0FBQXpQLElBQUE7b0JBQUE7a0JBQUEsR0FBQXFQLFNBQUE7Z0JBQUEsQ0FFakI7Z0JBQUEsaUJBQUFRLElBQUEsRUFBQUMsSUFBQTtrQkFBQSxPQUFBVixLQUFBLENBQUFqWCxLQUFBLE9BQUFFLFNBQUE7Z0JBQUE7Y0FBQSxJQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUEwVyxVQUFBLENBQUEvTyxJQUFBO1VBQUE7UUFBQSxHQUFBdU8sU0FBQTtNQUFBLENBQ0g7TUFBQSxTQW5FWVcsWUFBWUEsQ0FBQWEsSUFBQTtRQUFBLE9BQUF6QixhQUFBLENBQUFuVyxLQUFBLE9BQUFFLFNBQUE7TUFBQTtNQUFBLE9BQVo2VyxZQUFZO0lBQUE7SUFxRXpCO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7SUFKRTtFQUFBO0lBQUF6VCxHQUFBO0lBQUFwQyxLQUFBO01BQUEsSUFBQTJXLHVCQUFBLE9BQUFuVCxrQkFBQSwwQkFBQUMsWUFBQSxZQUFBQyxJQUFBLENBS0EsU0FBQWtULFVBQW9DN1UsU0FBaUIsRUFBRThVLG9DQUEyRTtRQUFBLElBQUFDLHNCQUFBO1VBQUFDLE1BQUE7UUFBQSxJQUFBblQsS0FBQSxFQUFBMEUsc0JBQUEsRUFBQWtOLE1BQUEsRUFBQTNSLFdBQUEsRUFBQUcsYUFBQSxFQUFBQyxjQUFBLEVBQUFGLEdBQUEsRUFBQUQsTUFBQSxFQUFBNEUsT0FBQTtRQUFBLE9BQUFqRixZQUFBLFlBQUFrQixJQUFBLFdBQUFxUyxVQUFBO1VBQUEsa0JBQUFBLFVBQUEsQ0FBQW5TLElBQUEsR0FBQW1TLFVBQUEsQ0FBQTVXLElBQUE7WUFBQTtjQUMxSHdELEtBQUssR0FBR2tCLFlBQUssQ0FBQ0MsS0FBSyxDQUFDLENBQUM7Y0FDM0IsSUFBSSxDQUFDQyxhQUFhLENBQUNDLGtCQUFRLENBQUNDLElBQUksRUFBRUMsMEJBQW1CLENBQUM4Uiw2QkFBNkIsRUFBRSxtQ0FBbUMsRUFBRWxWLFNBQVMsQ0FBQztjQUU1SHVHLHNCQUFzQixHQUFhdU8sb0NBQW9DLENBQXZFdk8sc0JBQXNCLEVBQUVrTixNQUFNLEdBQUtxQixvQ0FBb0MsQ0FBL0NyQixNQUFNO2NBQ2hDM1IsV0FBVyxPQUFBeEMsTUFBQSxDQUFPZ0UsZ0NBQW9CLENBQUM2UixxQ0FBcUMsT0FBQTdWLE1BQUEsQ0FBSSxJQUFJLENBQUNQLHdCQUF3QixDQUFDeUUsS0FBSyxPQUFBbEUsTUFBQSxDQUFJLElBQUksQ0FBQ1Asd0JBQXdCLENBQUMyRyxRQUFRLE9BQUFwRyxNQUFBLENBQUltVSxNQUFNLE9BQUFuVSxNQUFBLENBQUlVLFNBQVMsaUJBQUFWLE1BQUEsQ0FBYyxJQUFJLENBQUNQLHdCQUF3QixDQUFDeUIsU0FBUztjQUN6T3lCLGFBQWEsR0FBR3lCLGlCQUFLLENBQUNDLE1BQU0sQ0FBQyxDQUFDO2NBQ3BDLElBQUFDLDZCQUFpQixFQUFDM0IsYUFBYSxFQUFFO2dCQUMvQmdGLGdCQUFnQixFQUFFLENBQUNuSCxrQ0FBc0IsQ0FBQ0YsYUFBYSxDQUFDO2dCQUN4RGlFLE9BQU8sRUFBRSxJQUFJLENBQUM1RSxhQUFhLENBQUM2RSwwQkFBMEI7Z0JBQ3REQywwQkFBMEIsRUFBRSxJQUFJLENBQUM5RSxhQUFhLENBQUMrRSw0QkFBNEIsQ0FBQ29SO2NBQzlFLENBQUMsQ0FBQztjQUVJbFQsY0FBeUIsR0FBR25CLHFCQUFTLENBQUNvRyxjQUFjO2NBQzFELElBQUlaLHNCQUFzQixFQUFFO2dCQUMxQnJFLGNBQWMsQ0FBQ3BDLGtDQUFzQixDQUFDeUcsc0JBQXNCLENBQUMsR0FBR0Esc0JBQXNCO2dCQUN0RnJFLGNBQWMsQ0FBQ3BDLGtDQUFzQixDQUFDRixhQUFhLENBQUMsR0FBRyxJQUFJLENBQUNYLGFBQWEsQ0FBQ1csYUFBYTtjQUN6RjtjQUVBLElBQUksQ0FBQytGLGlCQUFpQixDQUFDM0YsU0FBUyxFQUFFa0MsY0FBYyxDQUFDO2NBRTNDRixHQUFHLE1BQUExQyxNQUFBLENBQU0sSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQzBFLE1BQU0sRUFBQW5FLE1BQUEsQ0FBR3dDLFdBQVc7Y0FDM0RDLE1BQU0sR0FBRyxLQUFLO2NBQ2Q0RSxPQUEyQixHQUFHO2dCQUNsQ2pILE9BQU8sRUFBRXdDLGNBQWM7Z0JBQ3ZCSCxNQUFNLEVBQU5BLE1BQU07Z0JBQ05DLEdBQUcsRUFBSEEsR0FBRztnQkFDSG1DLE9BQU8sR0FBQTRRLHNCQUFBLEdBQUUsSUFBSSxDQUFDOVYsYUFBYSxDQUFDbUYscUJBQXFCLGNBQUEyUSxzQkFBQSxjQUFBQSxzQkFBQSxHQUFJLElBQUksQ0FBQzlWLGFBQWEsQ0FBQ29GLG9CQUFvQixDQUFDZ1I7Y0FDL0YsQ0FBQztjQUFBLE9BQUFKLFVBQUEsQ0FBQXhRLE1BQUEsV0FFTSxJQUFJc0IsT0FBTztnQkFBQSxJQUFBdVAsS0FBQSxPQUFBN1Qsa0JBQUEsMEJBQUFDLFlBQUEsWUFBQUMsSUFBQSxDQUFDLFNBQUE0VCxVQUFPOU4sT0FBTyxFQUFFekIsTUFBTTtrQkFBQSxJQUFBN0QsWUFBQSxFQUFBcVQsY0FBQSxFQUFBblQsUUFBQSxFQUFBQyx1QkFBQSxFQUFBNUMsT0FBQSxFQUFBNkMseUJBQUEsRUFBQWtULHlCQUFBLEVBQUFDLDJCQUFBLEVBQUFDLEdBQUE7a0JBQUEsT0FBQWpVLFlBQUEsWUFBQWtCLElBQUEsV0FBQWdULFVBQUE7b0JBQUEsa0JBQUFBLFVBQUEsQ0FBQTlTLElBQUEsR0FBQThTLFVBQUEsQ0FBQXZYLElBQUE7c0JBQUE7d0JBQ2pDOEQsWUFBWSxHQUFHWSxZQUFLLENBQUNDLEtBQUssQ0FBQyxDQUFDO3dCQUFBNFMsVUFBQSxDQUFBOVMsSUFBQTt3QkFBQThTLFVBQUEsQ0FBQXZYLElBQUE7d0JBQUEsT0FFVDRELGFBQWEsQ0FBQzBFLE9BQU8sQ0FBQztzQkFBQTt3QkFBdkN0RSxRQUFRLEdBQUF1VCxVQUFBLENBQUF0UixJQUFBO3dCQUNSaEMsdUJBQXVCLEdBQUdILFlBQVksQ0FBQ29DLG1CQUFtQjt3QkFDeEQ3RSxPQUFPLEdBQUsyQyxRQUFRLENBQXBCM0MsT0FBTzt3QkFDZnNWLE1BQUksQ0FBQ2xOLGdCQUFnQixDQUFDcEksT0FBTyxDQUFDO3dCQUV4QjZDLHlCQUF5QixHQUFHVixLQUFLLENBQUMwQyxtQkFBbUI7d0JBQzNELElBQUksRUFBQWlSLGNBQUEsR0FBQW5ULFFBQVEsQ0FBQ0csSUFBSSxjQUFBZ1QsY0FBQSx1QkFBYkEsY0FBQSxDQUFlSyxhQUFhLE1BQUssSUFBSSxFQUFFOzBCQUN6Q2IsTUFBSSxDQUFDL1IsYUFBYSxDQUFDQyxrQkFBUSxDQUFDQyxJQUFJLEVBQUVDLDBCQUFtQixDQUFDMFMsK0JBQStCLEVBQUUscUNBQXFDLEVBQUU5VixTQUFTLEVBQUVxQyxRQUFRLEVBQUVFLHlCQUF5QixFQUFFVCxXQUFXLEVBQUVDLE1BQU0sRUFBRTdDLFNBQVMsRUFBRUEsU0FBUyxFQUFFZ0QsY0FBYyxFQUFFSSx1QkFBdUIsQ0FBQzswQkFFalFtRixPQUFPLENBQUNwRixRQUFRLENBQUNHLElBQUksQ0FBQzt3QkFDeEIsQ0FBQyxNQUFNOzBCQUNMd1MsTUFBSSxDQUFDL1IsYUFBYSxDQUFDQyxrQkFBUSxDQUFDQyxJQUFJLEVBQUVDLDBCQUFtQixDQUFDMlMsNEJBQTRCLEVBQUUsb0ZBQW9GLEVBQUUvVixTQUFTLEVBQUVxQyxRQUFRLEVBQUVFLHlCQUF5QixFQUFFVCxXQUFXLEVBQUVDLE1BQU0sRUFBRTdDLFNBQVMsRUFBRUEsU0FBUyxFQUFFZ0QsY0FBYyxFQUFFSSx1QkFBdUIsQ0FBQzswQkFFN1MwRCxNQUFNLENBQUMsSUFBSXBGLEtBQUssQ0FBQyxvRkFBb0YsQ0FBQyxDQUFDO3dCQUN6Rzs7d0JBRUE7d0JBQUFnVixVQUFBLENBQUF2WCxJQUFBO3dCQUFBO3NCQUFBO3dCQUFBdVgsVUFBQSxDQUFBOVMsSUFBQTt3QkFBQTZTLEdBQUEsR0FBQUMsVUFBQTt3QkFFTXRULHlCQUF1QixHQUFHSCxZQUFZLENBQUNvQyxtQkFBbUI7d0JBQzFEaEMsMkJBQXlCLEdBQUdWLEtBQUssQ0FBQzBDLG1CQUFtQjt3QkFFM0R5USxNQUFJLENBQUMvUixhQUFhLENBQUNDLGtCQUFRLENBQUN3QixLQUFLLEVBQUV0QiwwQkFBbUIsQ0FBQzJTLDRCQUE0QixFQUFFLGtDQUFrQyxFQUFFL1YsU0FBUyxFQUFFZCxTQUFTLEVBQUVxRCwyQkFBeUIsRUFBRVQsV0FBVyxFQUFFQyxNQUFNLEVBQUE0VCxHQUFBLEVBQVN6VyxTQUFTLEVBQUVnRCxjQUFjLEVBQUVJLHlCQUF1QixDQUFDO3dCQUV6UCxJQUFJLElBQUEyRixnQ0FBb0IsRUFBQTBOLEdBQUEsRUFBUTVVLHFCQUFTLENBQUNtSCxxQkFBcUIsQ0FBQyxFQUFFOzBCQUNoRWxDLE1BQU0sQ0FBRSxJQUFJcEYsS0FBSyxDQUFDb1UsTUFBSSxDQUFDN00sdUJBQXVCLENBQUMsQ0FBQzt3QkFDbEQ7d0JBRUEsSUFBSXdOLEdBQUEsQ0FBTXBYLFFBQVEsQ0FBQyxDQUFDLEtBQUssNENBQTRDLEVBQUU7MEJBQUU7MEJBQ3ZFa0osT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNiLENBQUMsTUFBTTswQkFDTHpCLE1BQU0sQ0FBQTJQLEdBQU0sQ0FBQzt3QkFDZjtzQkFBQztzQkFBQTt3QkFBQSxPQUFBQyxVQUFBLENBQUFoUixJQUFBO29CQUFBO2tCQUFBLEdBQUEyUSxTQUFBO2dCQUFBLENBRUo7Z0JBQUEsaUJBQUFTLElBQUEsRUFBQUMsSUFBQTtrQkFBQSxPQUFBWCxLQUFBLENBQUF2WSxLQUFBLE9BQUFFLFNBQUE7Z0JBQUE7Y0FBQSxJQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUFnWSxVQUFBLENBQUFyUSxJQUFBO1VBQUE7UUFBQSxHQUFBaVEsU0FBQTtNQUFBLENBQ0g7TUFBQSxTQW5FWU8sc0JBQXNCQSxDQUFBYyxJQUFBLEVBQUFDLElBQUE7UUFBQSxPQUFBdkIsdUJBQUEsQ0FBQTdYLEtBQUEsT0FBQUUsU0FBQTtNQUFBO01BQUEsT0FBdEJtWSxzQkFBc0I7SUFBQTtJQXFFbkM7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBTEU7RUFBQTtJQUFBL1UsR0FBQTtJQUFBcEMsS0FBQTtNQUFBLElBQUFtWSx1QkFBQSxPQUFBM1Usa0JBQUEsMEJBQUFDLFlBQUEsWUFBQUMsSUFBQSxDQU1BLFNBQUEwVSxVQUFvQ3JXLFNBQWlCLEVBQUVzVyxnQkFBd0I7UUFBQSxJQUFBQyx1QkFBQTtVQUFBQyxNQUFBO1FBQUEsSUFBQUMsb0NBQUE7VUFBQTVVLEtBQUE7VUFBQUMsV0FBQTtVQUFBRyxhQUFBO1VBQUFzRSxzQkFBQTtVQUFBckUsY0FBQTtVQUFBRixHQUFBO1VBQUFELE1BQUE7VUFBQTRFLE9BQUE7VUFBQStQLE9BQUEsR0FBQXpaLFNBQUE7UUFBQSxPQUFBeUUsWUFBQSxZQUFBa0IsSUFBQSxXQUFBK1QsVUFBQTtVQUFBLGtCQUFBQSxVQUFBLENBQUE3VCxJQUFBLEdBQUE2VCxVQUFBLENBQUF0WSxJQUFBO1lBQUE7Y0FBRW9ZLG9DQUEyRSxHQUFBQyxPQUFBLENBQUF4WixNQUFBLFFBQUF3WixPQUFBLFFBQUF4WCxTQUFBLEdBQUF3WCxPQUFBLE1BQUcsQ0FBQyxDQUFDO2NBQ3pKN1UsS0FBSyxHQUFHa0IsWUFBSyxDQUFDQyxLQUFLLENBQUMsQ0FBQztjQUMzQixJQUFJLENBQUNDLGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQ0MsSUFBSSxFQUFFQywwQkFBbUIsQ0FBQ3dULHFCQUFxQixFQUFFLDBCQUEwQixFQUFFNVcsU0FBUyxDQUFDO2NBRS9HOEIsV0FBVyxPQUFBeEMsTUFBQSxDQUFPZ0UsZ0NBQW9CLENBQUN1VCwwQkFBMEIsT0FBQXZYLE1BQUEsQ0FBSSxJQUFJLENBQUNQLHdCQUF3QixDQUFDeUUsS0FBSyxPQUFBbEUsTUFBQSxDQUFJLElBQUksQ0FBQ1Asd0JBQXdCLENBQUMyRyxRQUFRLE9BQUFwRyxNQUFBLENBQUlVLFNBQVMsaUJBQUFWLE1BQUEsQ0FBYyxJQUFJLENBQUNQLHdCQUF3QixDQUFDeUIsU0FBUztjQUNsTnlCLGFBQWEsR0FBR3lCLGlCQUFLLENBQUNDLE1BQU0sQ0FBQyxDQUFDO2NBQ3BDLElBQUFDLDZCQUFpQixFQUFDM0IsYUFBYSxFQUFFO2dCQUMvQmdGLGdCQUFnQixFQUFFLENBQUNuSCxrQ0FBc0IsQ0FBQ0YsYUFBYSxDQUFDO2dCQUN4RGlFLE9BQU8sRUFBRSxJQUFJLENBQUM1RSxhQUFhLENBQUM2RSwwQkFBMEI7Z0JBQ3REQywwQkFBMEIsRUFBRSxJQUFJLENBQUM5RSxhQUFhLENBQUMrRSw0QkFBNEIsQ0FBQzhTO2NBQzlFLENBQUMsQ0FBQztjQUVNdlEsc0JBQXNCLEdBQUtrUSxvQ0FBb0MsQ0FBL0RsUSxzQkFBc0I7Y0FDeEJyRSxjQUF5QixHQUFHbkIscUJBQVMsQ0FBQ29HLGNBQWM7Y0FDMUQsSUFBSSxDQUFDeEIsaUJBQWlCLENBQUMzRixTQUFTLEVBQUVrQyxjQUFjLENBQUM7Y0FFakQsSUFBSXFFLHNCQUFzQixFQUFFO2dCQUMxQnpFLFdBQVcsT0FBQXhDLE1BQUEsQ0FBT2dFLGdDQUFvQixDQUFDeVQsOEJBQThCLE9BQUF6WCxNQUFBLENBQUksSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQ3lFLEtBQUssT0FBQWxFLE1BQUEsQ0FBSSxJQUFJLENBQUNQLHdCQUF3QixDQUFDMkcsUUFBUSxPQUFBcEcsTUFBQSxDQUFJVSxTQUFTLGlCQUFBVixNQUFBLENBQWMsSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQ3lCLFNBQVMsQ0FBRTtnQkFDMU4wQixjQUFjLENBQUNwQyxrQ0FBc0IsQ0FBQ3lHLHNCQUFzQixDQUFDLEdBQUdBLHNCQUFzQjtnQkFDdEZyRSxjQUFjLENBQUNwQyxrQ0FBc0IsQ0FBQ0YsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDWCxhQUFhLENBQUNXLGFBQWE7Y0FDekY7Y0FFTW9DLEdBQUcsTUFBQTFDLE1BQUEsQ0FBTSxJQUFJLENBQUNQLHdCQUF3QixDQUFDMEUsTUFBTSxFQUFBbkUsTUFBQSxDQUFHd0MsV0FBVztjQUMzREMsTUFBTSxHQUFHLE1BQU07Y0FDZjRFLE9BQTJCLEdBQUc7Z0JBQ2xDbkUsSUFBSSxFQUFFOEwsSUFBSSxDQUFDQyxTQUFTLENBQUMrSCxnQkFBZ0IsQ0FBQztnQkFDdEM1VyxPQUFPLEVBQUV3QyxjQUFjO2dCQUN2QkgsTUFBTSxFQUFOQSxNQUFNO2dCQUNOQyxHQUFHLEVBQUhBLEdBQUc7Z0JBQ0htQyxPQUFPLEdBQUFvUyx1QkFBQSxHQUFFLElBQUksQ0FBQ3RYLGFBQWEsQ0FBQ21GLHFCQUFxQixjQUFBbVMsdUJBQUEsY0FBQUEsdUJBQUEsR0FBSSxJQUFJLENBQUN0WCxhQUFhLENBQUNvRixvQkFBb0IsQ0FBQ3lTO2NBQy9GLENBQUM7Y0FBQSxPQUFBSCxVQUFBLENBQUFsUyxNQUFBLFdBRU0sSUFBSXNCLE9BQU87Z0JBQUEsSUFBQWlSLEtBQUEsT0FBQXZWLGtCQUFBLDBCQUFBQyxZQUFBLFlBQUFDLElBQUEsQ0FBQyxTQUFBc1YsVUFBT3hQLE9BQU8sRUFBRXpCLE1BQU07a0JBQUEsSUFBQTdELFlBQUEsRUFBQUUsUUFBQSxFQUFBQyx1QkFBQSxFQUFBNUMsT0FBQSxFQUFBNkMseUJBQUEsRUFBQTJVLDBCQUFBLEVBQUFDLDRCQUFBLEVBQUFDLElBQUE7a0JBQUEsT0FBQTFWLFlBQUEsWUFBQWtCLElBQUEsV0FBQXlVLFVBQUE7b0JBQUEsa0JBQUFBLFVBQUEsQ0FBQXZVLElBQUEsR0FBQXVVLFVBQUEsQ0FBQWhaLElBQUE7c0JBQUE7d0JBQ2pDOEQsWUFBWSxHQUFHWSxZQUFLLENBQUNDLEtBQUssQ0FBQyxDQUFDO3dCQUFBcVUsVUFBQSxDQUFBdlUsSUFBQTt3QkFBQXVVLFVBQUEsQ0FBQWhaLElBQUE7d0JBQUEsT0FFVDRELGFBQWEsQ0FBQzBFLE9BQU8sQ0FBQztzQkFBQTt3QkFBdkN0RSxRQUFRLEdBQUFnVixVQUFBLENBQUEvUyxJQUFBO3dCQUNSaEMsdUJBQXVCLEdBQUdILFlBQVksQ0FBQ29DLG1CQUFtQjt3QkFDeEQ3RSxPQUFPLEdBQUsyQyxRQUFRLENBQXBCM0MsT0FBTzt3QkFDZjhXLE1BQUksQ0FBQzFPLGdCQUFnQixDQUFDcEksT0FBTyxDQUFDO3dCQUV4QjZDLHlCQUF5QixHQUFHVixLQUFLLENBQUMwQyxtQkFBbUI7d0JBQzNEaVMsTUFBSSxDQUFDdlQsYUFBYSxDQUFDQyxrQkFBUSxDQUFDQyxJQUFJLEVBQUVDLDBCQUFtQixDQUFDa1UsdUJBQXVCLEVBQUUsNEJBQTRCLEVBQUV0WCxTQUFTLEVBQUVxQyxRQUFRLEVBQUVFLHlCQUF5QixFQUFFVCxXQUFXLEVBQUVDLE1BQU0sRUFBRTdDLFNBQVMsRUFBRUEsU0FBUyxFQUFFZ0QsY0FBYyxFQUFFSSx1QkFBdUIsQ0FBQzt3QkFFaFBtRixPQUFPLENBQUMsQ0FBQzt3QkFBQzRQLFVBQUEsQ0FBQWhaLElBQUE7d0JBQUE7c0JBQUE7d0JBQUFnWixVQUFBLENBQUF2VSxJQUFBO3dCQUFBc1UsSUFBQSxHQUFBQyxVQUFBO3dCQUdKL1UsMEJBQXVCLEdBQUdILFlBQVksQ0FBQ29DLG1CQUFtQjt3QkFDMURoQyw0QkFBeUIsR0FBR1YsS0FBSyxDQUFDMEMsbUJBQW1CO3dCQUMzRGlTLE1BQUksQ0FBQ3ZULGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQ3dCLEtBQUssRUFBRXRCLDBCQUFtQixDQUFDbVUsb0JBQW9CLEVBQUUseUJBQXlCLEVBQUV2WCxTQUFTLEVBQUVkLFNBQVMsRUFBRXFELDRCQUF5QixFQUFFVCxXQUFXLEVBQUVDLE1BQU0sRUFBQXFWLElBQUEsRUFBU2xZLFNBQVMsRUFBRWdELGNBQWMsRUFBRUksMEJBQXVCLENBQUM7d0JBQ3hPLElBQUksSUFBQTJGLGdDQUFvQixFQUFBbVAsSUFBQSxFQUFRclcscUJBQVMsQ0FBQ21ILHFCQUFxQixDQUFDLEVBQUU7MEJBQ2hFbEMsTUFBTSxDQUFFLElBQUlwRixLQUFLLENBQUM0VixNQUFJLENBQUNyTyx1QkFBdUIsQ0FBQyxDQUFDO3dCQUNsRDt3QkFDQW5DLE1BQU0sQ0FBQW9SLElBQU0sQ0FBQztzQkFBQztzQkFBQTt3QkFBQSxPQUFBQyxVQUFBLENBQUF6UyxJQUFBO29CQUFBO2tCQUFBLEdBQUFxUyxTQUFBO2dCQUFBLENBRWpCO2dCQUFBLGlCQUFBTyxJQUFBLEVBQUFDLElBQUE7a0JBQUEsT0FBQVQsS0FBQSxDQUFBamEsS0FBQSxPQUFBRSxTQUFBO2dCQUFBO2NBQUEsSUFBQztZQUFBO1lBQUE7Y0FBQSxPQUFBMFosVUFBQSxDQUFBL1IsSUFBQTtVQUFBO1FBQUEsR0FBQXlSLFNBQUE7TUFBQSxDQUNIO01BQUEsU0F2RFlTLHNCQUFzQkEsQ0FBQVksSUFBQSxFQUFBQyxJQUFBO1FBQUEsT0FBQXZCLHVCQUFBLENBQUFyWixLQUFBLE9BQUFFLFNBQUE7TUFBQTtNQUFBLE9BQXRCNlosc0JBQXNCO0lBQUE7SUF5RG5DO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUxFO0VBQUE7SUFBQXpXLEdBQUE7SUFBQXBDLEtBQUE7TUFBQSxJQUFBMlosb0JBQUEsT0FBQW5XLGtCQUFBLDBCQUFBQyxZQUFBLFlBQUFDLElBQUEsQ0FNQSxTQUFBa1csVUFBaUNDLGFBQXFCLEVBQUVDLDBCQUFrQztRQUFBLElBQUFDLHVCQUFBO1VBQUFDLE1BQUE7UUFBQSxJQUFBQyxpQ0FBQTtVQUFBclcsS0FBQTtVQUFBQyxXQUFBO1VBQUFHLGFBQUE7VUFBQXNFLHNCQUFBO1VBQUF2RyxTQUFBO1VBQUFrQyxjQUFBO1VBQUFGLEdBQUE7VUFBQUQsTUFBQTtVQUFBNEUsT0FBQTtVQUFBd1IsT0FBQSxHQUFBbGIsU0FBQTtRQUFBLE9BQUF5RSxZQUFBLFlBQUFrQixJQUFBLFdBQUF3VixVQUFBO1VBQUEsa0JBQUFBLFVBQUEsQ0FBQXRWLElBQUEsR0FBQXNWLFVBQUEsQ0FBQS9aLElBQUE7WUFBQTtjQUFFNlosaUNBQXFFLEdBQUFDLE9BQUEsQ0FBQWpiLE1BQUEsUUFBQWliLE9BQUEsUUFBQWpaLFNBQUEsR0FBQWlaLE9BQUEsTUFBRyxDQUFDLENBQUM7Y0FDOUp0VyxLQUFLLEdBQUdrQixZQUFLLENBQUNDLEtBQUssQ0FBQyxDQUFDO2NBQzNCLElBQUksSUFBSSxDQUFDNUQsTUFBTSxFQUFFO2dCQUNmLElBQUksQ0FBQ0EsTUFBTSxDQUFDaVosR0FBRyxDQUFDblYsa0JBQVEsQ0FBQ0MsSUFBSSxFQUMzQkMsMEJBQW1CLENBQUNrViwwQkFBMEIsRUFDOUM7a0JBQUVDLGFBQWEsRUFBRVQ7Z0JBQWMsQ0FBQyxFQUNoQyxnQ0FBZ0MsQ0FBQztjQUNyQztjQUNJaFcsV0FBVyxPQUFBeEMsTUFBQSxDQUFPZ0UsZ0NBQW9CLENBQUNrViwrQkFBK0IsT0FBQWxaLE1BQUEsQ0FBSSxJQUFJLENBQUNQLHdCQUF3QixDQUFDeUUsS0FBSyxPQUFBbEUsTUFBQSxDQUFJd1ksYUFBYTtjQUM1SDdWLGFBQWEsR0FBR3lCLGlCQUFLLENBQUNDLE1BQU0sQ0FBQyxDQUFDO2NBQ3BDLElBQUFDLDZCQUFpQixFQUFDM0IsYUFBYSxFQUFFO2dCQUMvQmdGLGdCQUFnQixFQUFFLENBQUNuSCxrQ0FBc0IsQ0FBQ0YsYUFBYSxDQUFDO2dCQUN4RGlFLE9BQU8sRUFBRSxJQUFJLENBQUM1RSxhQUFhLENBQUM2RSwwQkFBMEI7Z0JBQ3REQywwQkFBMEIsRUFBRSxJQUFJLENBQUM5RSxhQUFhLENBQUMrRSw0QkFBNEIsQ0FBQ3lVO2NBQzlFLENBQUMsQ0FBQztjQUVNbFMsc0JBQXNCLEdBQWdCMlIsaUNBQWlDLENBQXZFM1Isc0JBQXNCLEVBQUV2RyxTQUFTLEdBQUtrWSxpQ0FBaUMsQ0FBL0NsWSxTQUFTO2NBRW5Da0MsY0FBeUIsR0FBR25CLHFCQUFTLENBQUNvRyxjQUFjO2NBRTFELElBQUlaLHNCQUFzQixFQUFFO2dCQUMxQnpFLFdBQVcsT0FBQXhDLE1BQUEsQ0FBT2dFLGdDQUFvQixDQUFDb1YsbUNBQW1DLE9BQUFwWixNQUFBLENBQUksSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQ3lFLEtBQUssT0FBQWxFLE1BQUEsQ0FBSXdZLGFBQWEsQ0FBRTtnQkFDcEk1VixjQUFjLENBQUNwQyxrQ0FBc0IsQ0FBQ3lHLHNCQUFzQixDQUFDLEdBQUdBLHNCQUFzQjtnQkFDdEZyRSxjQUFjLENBQUNwQyxrQ0FBc0IsQ0FBQ0YsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDWCxhQUFhLENBQUNXLGFBQWE7Z0JBQ3ZGc0MsY0FBYyxDQUFDcEMsa0NBQXNCLENBQUM2WSxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUM1Wix3QkFBd0IsQ0FBQzJHLFFBQVE7Y0FDN0Y7Y0FFQSxJQUFJLENBQUNDLGlCQUFpQixDQUFDM0YsU0FBUyxFQUFFa0MsY0FBYyxDQUFDO2NBRWpELElBQUlsQyxTQUFTLEVBQUU7Z0JBQ2JrQyxjQUFjLENBQUNwQyxrQ0FBc0IsQ0FBQ0UsU0FBUyxDQUFDLEdBQUdBLFNBQVM7Y0FDOUQ7Y0FFTWdDLEdBQUcsTUFBQTFDLE1BQUEsQ0FBTSxJQUFJLENBQUNQLHdCQUF3QixDQUFDMEUsTUFBTSxFQUFBbkUsTUFBQSxDQUFHd0MsV0FBVztjQUMzREMsTUFBTSxHQUFHLE1BQU07Y0FDZjRFLE9BQTJCLEdBQUc7Z0JBQ2xDbkUsSUFBSSxFQUFFOEwsSUFBSSxDQUFDQyxTQUFTLENBQUN3SiwwQkFBMEIsQ0FBQztnQkFDaERyWSxPQUFPLEVBQUV3QyxjQUFjO2dCQUN2QkgsTUFBTSxFQUFOQSxNQUFNO2dCQUNOQyxHQUFHLEVBQUhBLEdBQUc7Z0JBQ0htQyxPQUFPLEdBQUE2VCx1QkFBQSxHQUFFLElBQUksQ0FBQy9ZLGFBQWEsQ0FBQ21GLHFCQUFxQixjQUFBNFQsdUJBQUEsY0FBQUEsdUJBQUEsR0FBSSxJQUFJLENBQUMvWSxhQUFhLENBQUNvRixvQkFBb0IsQ0FBQ29VO2NBQy9GLENBQUM7Y0FBQSxPQUFBTCxVQUFBLENBQUEzVCxNQUFBLFdBRU0sSUFBSXNCLE9BQU87Z0JBQUEsSUFBQTZTLEtBQUEsT0FBQW5YLGtCQUFBLDBCQUFBQyxZQUFBLFlBQUFDLElBQUEsQ0FBQyxTQUFBa1gsVUFBT3BSLE9BQU8sRUFBRXpCLE1BQU07a0JBQUEsSUFBQTdELFlBQUEsRUFBQUUsUUFBQSxFQUFBQyx1QkFBQSxFQUFBRSxJQUFBLEVBQUE5QyxPQUFBLEVBQUE2Qyx5QkFBQSxFQUFBdVcsMEJBQUEsRUFBQUMsNEJBQUEsRUFBQUMsSUFBQTtrQkFBQSxPQUFBdFgsWUFBQSxZQUFBa0IsSUFBQSxXQUFBcVcsVUFBQTtvQkFBQSxrQkFBQUEsVUFBQSxDQUFBblcsSUFBQSxHQUFBbVcsVUFBQSxDQUFBNWEsSUFBQTtzQkFBQTt3QkFDakM4RCxZQUFZLEdBQUdZLFlBQUssQ0FBQ0MsS0FBSyxDQUFDLENBQUM7d0JBQUFpVyxVQUFBLENBQUFuVyxJQUFBO3dCQUFBbVcsVUFBQSxDQUFBNWEsSUFBQTt3QkFBQSxPQUVUNEQsYUFBYSxDQUFDMEUsT0FBTyxDQUFDO3NCQUFBO3dCQUF2Q3RFLFFBQVEsR0FBQTRXLFVBQUEsQ0FBQTNVLElBQUE7d0JBQ1JoQyx1QkFBdUIsR0FBR0gsWUFBWSxDQUFDb0MsbUJBQW1CO3dCQUN4RC9CLElBQUksR0FBY0gsUUFBUSxDQUExQkcsSUFBSSxFQUFFOUMsT0FBTyxHQUFLMkMsUUFBUSxDQUFwQjNDLE9BQU87d0JBQ3JCdVksTUFBSSxDQUFDblEsZ0JBQWdCLENBQUNwSSxPQUFPLENBQUM7d0JBRXhCNkMseUJBQXlCLEdBQUdWLEtBQUssQ0FBQzBDLG1CQUFtQjt3QkFDM0QwVCxNQUFJLENBQUNoVixhQUFhLENBQUNDLGtCQUFRLENBQUNDLElBQUksRUFBRUMsMEJBQW1CLENBQUM4Viw0QkFBNEIsRUFBRSxrQ0FBa0MsRUFBRWxaLFNBQVMsRUFBRXFDLFFBQVEsRUFBRUUseUJBQXlCLEVBQUVULFdBQVcsRUFBRUMsTUFBTSxFQUFFN0MsU0FBUyxFQUFFQSxTQUFTLEVBQUVnRCxjQUFjLEVBQUVJLHVCQUF1QixDQUFDO3dCQUMzUG1GLE9BQU8sQ0FBQ2pGLElBQUksQ0FBQzt3QkFBQ3lXLFVBQUEsQ0FBQTVhLElBQUE7d0JBQUE7c0JBQUE7d0JBQUE0YSxVQUFBLENBQUFuVyxJQUFBO3dCQUFBa1csSUFBQSxHQUFBQyxVQUFBO3dCQUVSM1csMEJBQXVCLEdBQUdILFlBQVksQ0FBQ29DLG1CQUFtQjt3QkFDMURoQyw0QkFBeUIsR0FBR1YsS0FBSyxDQUFDMEMsbUJBQW1CO3dCQUMzRDBULE1BQUksQ0FBQ2hWLGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQ3dCLEtBQUssRUFBRXRCLDBCQUFtQixDQUFDK1YseUJBQXlCLEVBQUUsK0JBQStCLEVBQUVuWixTQUFTLEVBQUVkLFNBQVMsRUFBRXFELDRCQUF5QixFQUFFVCxXQUFXLEVBQUVDLE1BQU0sRUFBQWlYLElBQUEsRUFBUzlaLFNBQVMsRUFBRWdELGNBQWMsRUFBRUksMEJBQXVCLENBQUM7d0JBQ25QLElBQUksSUFBQTJGLGdDQUFvQixFQUFBK1EsSUFBQSxFQUFRalkscUJBQVMsQ0FBQ21ILHFCQUFxQixDQUFDLEVBQUU7MEJBQ2hFbEMsTUFBTSxDQUFFLElBQUlwRixLQUFLLENBQUNxWCxNQUFJLENBQUM5UCx1QkFBdUIsQ0FBQyxDQUFDO3dCQUNsRDt3QkFDQW5DLE1BQU0sQ0FBQWdULElBQU0sQ0FBQztzQkFBQztzQkFBQTt3QkFBQSxPQUFBQyxVQUFBLENBQUFyVSxJQUFBO29CQUFBO2tCQUFBLEdBQUFpVSxTQUFBO2dCQUFBLENBRWpCO2dCQUFBLGlCQUFBTyxJQUFBLEVBQUFDLElBQUE7a0JBQUEsT0FBQVQsS0FBQSxDQUFBN2IsS0FBQSxPQUFBRSxTQUFBO2dCQUFBO2NBQUEsSUFBQztZQUFBO1lBQUE7Y0FBQSxPQUFBbWIsVUFBQSxDQUFBeFQsSUFBQTtVQUFBO1FBQUEsR0FBQWlULFNBQUE7TUFBQSxDQUNIO01BQUEsU0FoRVlZLG1CQUFtQkEsQ0FBQWEsSUFBQSxFQUFBQyxJQUFBO1FBQUEsT0FBQTNCLG9CQUFBLENBQUE3YSxLQUFBLE9BQUFFLFNBQUE7TUFBQTtNQUFBLE9BQW5Cd2IsbUJBQW1CO0lBQUE7SUFrRWhDO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBTkU7RUFBQTtJQUFBcFksR0FBQTtJQUFBcEMsS0FBQTtNQUFBLElBQUF1YixtQkFBQSxPQUFBL1gsa0JBQUEsMEJBQUFDLFlBQUEsWUFBQUMsSUFBQSxDQU9BLFNBQUE4WCxVQUFnQ3paLFNBQWlCLEVBQUV5VCxNQUFjLEVBQUVpRyxLQUFhO1FBQUEsSUFBQUMsdUJBQUE7VUFBQUMsT0FBQTtRQUFBLElBQUFDLGdDQUFBO1VBQUFoWSxLQUFBO1VBQUFDLFdBQUE7VUFBQUcsYUFBQTtVQUFBc0Usc0JBQUE7VUFBQXNDLHNCQUFBO1VBQUEzRyxjQUFBO1VBQUFGLEdBQUE7VUFBQUQsTUFBQTtVQUFBNEUsT0FBQTtVQUFBbVQsT0FBQSxHQUFBN2MsU0FBQTtRQUFBLE9BQUF5RSxZQUFBLFlBQUFrQixJQUFBLFdBQUFtWCxVQUFBO1VBQUEsa0JBQUFBLFVBQUEsQ0FBQWpYLElBQUEsR0FBQWlYLFVBQUEsQ0FBQTFiLElBQUE7WUFBQTtjQUFFd2IsZ0NBQW1FLEdBQUFDLE9BQUEsQ0FBQTVjLE1BQUEsUUFBQTRjLE9BQUEsUUFBQTVhLFNBQUEsR0FBQTRhLE9BQUEsTUFBRyxDQUFDLENBQUM7Y0FDbEpqWSxLQUFLLEdBQUdrQixZQUFLLENBQUNDLEtBQUssQ0FBQyxDQUFDO2NBQzNCLElBQUksQ0FBQ0MsYUFBYSxDQUFDQyxrQkFBUSxDQUFDQyxJQUFJLEVBQUVDLDBCQUFtQixDQUFDNFcsd0JBQXdCLEVBQUUsNkJBQTZCLEVBQUVoYSxTQUFTLENBQUM7Y0FFckg4QixXQUFXLE9BQUF4QyxNQUFBLENBQU9nRSxnQ0FBb0IsQ0FBQzJXLDZCQUE2QixPQUFBM2EsTUFBQSxDQUFJbVUsTUFBTSxPQUFBblUsTUFBQSxDQUFJVSxTQUFTLGlCQUFBVixNQUFBLENBQWMsSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQ3lCLFNBQVM7Y0FDOUl5QixhQUFhLEdBQUd5QixpQkFBSyxDQUFDQyxNQUFNLENBQUMsQ0FBQztjQUNwQyxJQUFBQyw2QkFBaUIsRUFBQzNCLGFBQWEsRUFBRTtnQkFDL0JnRixnQkFBZ0IsRUFBRSxDQUFDbkgsa0NBQXNCLENBQUNGLGFBQWEsQ0FBQztnQkFDeERpRSxPQUFPLEVBQUUsSUFBSSxDQUFDNUUsYUFBYSxDQUFDNkUsMEJBQTBCO2dCQUN0REMsMEJBQTBCLEVBQUUsSUFBSSxDQUFDOUUsYUFBYSxDQUFDK0UsNEJBQTRCLENBQUNrVztjQUM5RSxDQUFDLENBQUM7Y0FFTTNULHNCQUFzQixHQUE2QnNULGdDQUFnQyxDQUFuRnRULHNCQUFzQixFQUFFc0Msc0JBQXNCLEdBQUtnUixnQ0FBZ0MsQ0FBM0RoUixzQkFBc0I7Y0FDaEQzRyxjQUF5QixHQUFHbkIscUJBQVMsQ0FBQ29HLGNBQWM7Y0FDMURqRixjQUFjLENBQUNwQyxrQ0FBc0IsQ0FBQ3FhLGNBQWMsQ0FBQyxHQUFHLElBQUksQ0FBQ3BiLHdCQUF3QixDQUFDeUUsS0FBSztjQUMzRnRCLGNBQWMsQ0FBQ3BDLGtDQUFzQixDQUFDNlksV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDNVosd0JBQXdCLENBQUMyRyxRQUFRO2NBQzNGeEQsY0FBYyxDQUFDcEMsa0NBQXNCLENBQUNzYSxhQUFhLENBQUMsR0FBR1YsS0FBSztjQUU1RCxJQUFJLElBQUksQ0FBQ3RZLGVBQWUsS0FBS0Msc0JBQWUsQ0FBQ0MsRUFBRSxJQUFLdUgsc0JBQXNCLElBQUlBLHNCQUFzQixLQUFLeEgsc0JBQWUsQ0FBQ0MsRUFBRyxFQUFFO2dCQUM1SFEsV0FBVyxPQUFBeEMsTUFBQSxDQUFPZ0UsZ0NBQW9CLENBQUMrVywrQkFBK0IsT0FBQS9hLE1BQUEsQ0FBSW1VLE1BQU0sT0FBQW5VLE1BQUEsQ0FBSVUsU0FBUyxpQkFBQVYsTUFBQSxDQUFjLElBQUksQ0FBQ1Asd0JBQXdCLENBQUN5QixTQUFTLENBQUU7Z0JBQ3BKLElBQUkrRixzQkFBc0IsRUFBRTtrQkFDMUJyRSxjQUFjLENBQUNwQyxrQ0FBc0IsQ0FBQ3lHLHNCQUFzQixDQUFDLEdBQUdBLHNCQUFzQjtrQkFDdEZyRSxjQUFjLENBQUNwQyxrQ0FBc0IsQ0FBQ0YsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDWCxhQUFhLENBQUNXLGFBQWE7a0JBQ3ZGa0MsV0FBVyxPQUFBeEMsTUFBQSxDQUFPZ0UsZ0NBQW9CLENBQUNnWCxtQ0FBbUMsT0FBQWhiLE1BQUEsQ0FBSW1VLE1BQU0sT0FBQW5VLE1BQUEsQ0FBSVUsU0FBUyxpQkFBQVYsTUFBQSxDQUFjLElBQUksQ0FBQ1Asd0JBQXdCLENBQUN5QixTQUFTLENBQUU7Z0JBQzFKO2NBQ0YsQ0FBQyxNQUNJLElBQUkrRixzQkFBc0IsRUFBRTtnQkFDL0JyRSxjQUFjLENBQUNwQyxrQ0FBc0IsQ0FBQ3lHLHNCQUFzQixDQUFDLEdBQUdBLHNCQUFzQjtnQkFDdEZyRSxjQUFjLENBQUNwQyxrQ0FBc0IsQ0FBQ0YsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDWCxhQUFhLENBQUNXLGFBQWE7Z0JBQ3ZGa0MsV0FBVyxPQUFBeEMsTUFBQSxDQUFPZ0UsZ0NBQW9CLENBQUNpWCxpQ0FBaUMsT0FBQWpiLE1BQUEsQ0FBSW1VLE1BQU0sT0FBQW5VLE1BQUEsQ0FBSVUsU0FBUyxpQkFBQVYsTUFBQSxDQUFjLElBQUksQ0FBQ1Asd0JBQXdCLENBQUN5QixTQUFTLENBQUU7Y0FDeEo7Y0FFQSxJQUFJLENBQUNtRixpQkFBaUIsQ0FBQzNGLFNBQVMsRUFBRWtDLGNBQWMsQ0FBQztjQUUzQ0YsR0FBRyxNQUFBMUMsTUFBQSxDQUFNLElBQUksQ0FBQ1Asd0JBQXdCLENBQUMwRSxNQUFNLEVBQUFuRSxNQUFBLENBQUd3QyxXQUFXO2NBQzNEQyxNQUFNLEdBQUcsS0FBSztjQUNkNEUsT0FBMkIsR0FBRztnQkFDbENqSCxPQUFPLEVBQUV3QyxjQUFjO2dCQUN2QkgsTUFBTSxFQUFOQSxNQUFNO2dCQUNOQyxHQUFHLEVBQUhBLEdBQUc7Z0JBQ0htQyxPQUFPLEdBQUF3Vix1QkFBQSxHQUFFLElBQUksQ0FBQzFhLGFBQWEsQ0FBQ21GLHFCQUFxQixjQUFBdVYsdUJBQUEsY0FBQUEsdUJBQUEsR0FBSSxJQUFJLENBQUMxYSxhQUFhLENBQUNvRixvQkFBb0IsQ0FBQzZWO2NBQy9GLENBQUM7Y0FBQSxPQUFBSCxVQUFBLENBQUF0VixNQUFBLFdBRU0sSUFBSXNCLE9BQU87Z0JBQUEsSUFBQXlVLEtBQUEsT0FBQS9ZLGtCQUFBLDBCQUFBQyxZQUFBLFlBQUFDLElBQUEsQ0FBQyxTQUFBOFksVUFBT2hULE9BQU8sRUFBRXpCLE1BQU07a0JBQUEsSUFBQTdELFlBQUEsRUFBQUUsUUFBQSxFQUFBQyx1QkFBQSxFQUFBQyx5QkFBQSxFQUFBQyxJQUFBLEVBQUE5QyxPQUFBLEVBQUFnYiwwQkFBQSxFQUFBQyw0QkFBQSxFQUFBQyxJQUFBO2tCQUFBLE9BQUFsWixZQUFBLFlBQUFrQixJQUFBLFdBQUFpWSxVQUFBO29CQUFBLGtCQUFBQSxVQUFBLENBQUEvWCxJQUFBLEdBQUErWCxVQUFBLENBQUF4YyxJQUFBO3NCQUFBO3dCQUNqQzhELFlBQVksR0FBR1ksWUFBSyxDQUFDQyxLQUFLLENBQUMsQ0FBQzt3QkFBQTZYLFVBQUEsQ0FBQS9YLElBQUE7d0JBQUErWCxVQUFBLENBQUF4YyxJQUFBO3dCQUFBLE9BRVQ0RCxhQUFhLENBQUMwRSxPQUFPLENBQUM7c0JBQUE7d0JBQXZDdEUsUUFBUSxHQUFBd1ksVUFBQSxDQUFBdlcsSUFBQTt3QkFDUmhDLHVCQUF1QixHQUFHSCxZQUFZLENBQUNvQyxtQkFBbUI7d0JBQzFEaEMseUJBQXlCLEdBQUdWLEtBQUssQ0FBQzBDLG1CQUFtQjt3QkFDbkQvQixJQUFJLEdBQWNILFFBQVEsQ0FBMUJHLElBQUksRUFBRTlDLE9BQU8sR0FBSzJDLFFBQVEsQ0FBcEIzQyxPQUFPO3dCQUNyQmthLE9BQUksQ0FBQzlSLGdCQUFnQixDQUFDcEksT0FBTyxDQUFDO3dCQUM5QmthLE9BQUksQ0FBQzNXLGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQ0MsSUFBSSxFQUFFQywwQkFBbUIsQ0FBQzBYLDBCQUEwQixFQUFFLCtCQUErQixFQUFFOWEsU0FBUyxFQUFFcUMsUUFBUSxFQUFFRSx5QkFBeUIsRUFBRVQsV0FBVyxFQUFFQyxNQUFNLEVBQUU3QyxTQUFTLEVBQUVBLFNBQVMsRUFBRWdELGNBQWMsRUFBRUksdUJBQXVCLENBQUM7d0JBQ3RQbUYsT0FBTyxDQUFDakYsSUFBSSxDQUFDO3dCQUFDcVksVUFBQSxDQUFBeGMsSUFBQTt3QkFBQTtzQkFBQTt3QkFBQXdjLFVBQUEsQ0FBQS9YLElBQUE7d0JBQUE4WCxJQUFBLEdBQUFDLFVBQUE7d0JBRVJ2WSwwQkFBdUIsR0FBR0gsWUFBWSxDQUFDb0MsbUJBQW1CO3dCQUUxRGhDLDRCQUF5QixHQUFHVixLQUFLLENBQUMwQyxtQkFBbUI7d0JBQzNEcVYsT0FBSSxDQUFDM1csYUFBYSxDQUFDQyxrQkFBUSxDQUFDd0IsS0FBSyxFQUFFdEIsMEJBQW1CLENBQUMyWCx1QkFBdUIsRUFBRSw0QkFBNEIsRUFBRS9hLFNBQVMsRUFBRWQsU0FBUyxFQUFFcUQsNEJBQXlCLEVBQUVULFdBQVcsRUFBRUMsTUFBTSxFQUFBNlksSUFBQSxFQUFTMWIsU0FBUyxFQUFFZ0QsY0FBYyxFQUFFSSwwQkFBdUIsQ0FBQzt3QkFDOU8sSUFBSSxJQUFBMkYsZ0NBQW9CLEVBQUEyUyxJQUFBLEVBQVE3WixxQkFBUyxDQUFDbUgscUJBQXFCLENBQUMsRUFBRTswQkFDaEVsQyxNQUFNLENBQUMsSUFBSXBGLEtBQUssQ0FBQ2daLE9BQUksQ0FBQ3pSLHVCQUF1QixDQUFDLENBQUM7d0JBRWpEO3dCQUNBbkMsTUFBTSxDQUFBNFUsSUFBTSxDQUFDO3NCQUFDO3NCQUFBO3dCQUFBLE9BQUFDLFVBQUEsQ0FBQWpXLElBQUE7b0JBQUE7a0JBQUEsR0FBQTZWLFNBQUE7Z0JBQUEsQ0FFakI7Z0JBQUEsaUJBQUFPLElBQUEsRUFBQUMsSUFBQTtrQkFBQSxPQUFBVCxLQUFBLENBQUF6ZCxLQUFBLE9BQUFFLFNBQUE7Z0JBQUE7Y0FBQSxJQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUE4YyxVQUFBLENBQUFuVixJQUFBO1VBQUE7UUFBQSxHQUFBNlUsU0FBQTtNQUFBLENBQ0g7TUFBQSxTQWpFWVMsa0JBQWtCQSxDQUFBZ0IsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUE7UUFBQSxPQUFBNUIsbUJBQUEsQ0FBQXpjLEtBQUEsT0FBQUUsU0FBQTtNQUFBO01BQUEsT0FBbEJpZCxrQkFBa0I7SUFBQTtJQW1FL0I7QUFDRjtBQUNBO0FBQ0E7QUFDQTtJQUpFO0VBQUE7SUFBQTdaLEdBQUE7SUFBQXBDLEtBQUE7TUFBQSxJQUFBb2QseUJBQUEsT0FBQTVaLGtCQUFBLDBCQUFBQyxZQUFBLFlBQUFDLElBQUEsQ0FLQSxTQUFBMlosVUFBc0N0YixTQUFpQjtRQUFBLElBQUF1Yix1QkFBQTtVQUFBQyxPQUFBO1FBQUEsSUFBQUMsc0NBQUE7VUFBQTVaLEtBQUE7VUFBQTBFLHNCQUFBO1VBQUFtVixRQUFBO1VBQUFDLFNBQUE7VUFBQUMsWUFBQTtVQUFBOVosV0FBQTtVQUFBRyxhQUFBO1VBQUFDLGNBQUE7VUFBQXdFLE1BQUE7VUFBQTFFLEdBQUE7VUFBQUQsTUFBQTtVQUFBNEUsT0FBQTtVQUFBa1YsT0FBQSxHQUFBNWUsU0FBQTtRQUFBLE9BQUF5RSxZQUFBLFlBQUFrQixJQUFBLFdBQUFrWixVQUFBO1VBQUEsa0JBQUFBLFVBQUEsQ0FBQWhaLElBQUEsR0FBQWdaLFVBQUEsQ0FBQXpkLElBQUE7WUFBQTtjQUFFb2Qsc0NBQStFLEdBQUFJLE9BQUEsQ0FBQTNlLE1BQUEsUUFBQTJlLE9BQUEsUUFBQTNjLFNBQUEsR0FBQTJjLE9BQUEsTUFBRyxDQUFDLENBQUM7Y0FDckloYSxLQUFLLEdBQUdrQixZQUFLLENBQUNDLEtBQUssQ0FBQyxDQUFDO2NBQzNCLElBQUksQ0FBQ0MsYUFBYSxDQUFDQyxrQkFBUSxDQUFDQyxJQUFJLEVBQUVDLDBCQUFtQixDQUFDMlksK0JBQStCLEVBQUUscUNBQXFDLEVBQUUvYixTQUFTLENBQUM7Y0FFaEl1RyxzQkFBc0IsR0FBMEJrVixzQ0FBc0MsQ0FBdEZsVixzQkFBc0IsRUFBRW1WLFFBQVEsR0FBZ0JELHNDQUFzQyxDQUE5REMsUUFBUSxFQUFFQyxTQUFTLEdBQUtGLHNDQUFzQyxDQUFwREUsU0FBUztjQUFBLElBRTlDcFYsc0JBQXNCO2dCQUFBdVYsVUFBQSxDQUFBemQsSUFBQTtnQkFBQTtjQUFBO2NBQ25CdWQsWUFBWSxHQUFHLGtFQUFrRTtjQUN2RixJQUFJLENBQUMzWSxhQUFhLENBQUNDLGtCQUFRLENBQUN3QixLQUFLLEVBQUV0QiwwQkFBbUIsQ0FBQzRZLDhCQUE4QixFQUFFLHVFQUF1RSxFQUFFaGMsU0FBUyxDQUFDO2NBQUMsT0FBQThiLFVBQUEsQ0FBQXJYLE1BQUEsV0FDcEtzQixPQUFPLENBQUNDLE1BQU0sQ0FBQyxJQUFJcEYsS0FBSyxDQUFDZ2IsWUFBWSxDQUFDLENBQUM7WUFBQTtjQUcxQzlaLFdBQVcsT0FBQXhDLE1BQUEsQ0FBT2dFLGdDQUFvQixDQUFDMlksd0NBQXdDLE9BQUEzYyxNQUFBLENBQUksSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQ3lFLEtBQUssaUJBQUFsRSxNQUFBLENBQWMsSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQzJHLFFBQVE7Y0FDMUt6RCxhQUFhLEdBQUd5QixpQkFBSyxDQUFDQyxNQUFNLENBQUMsQ0FBQztjQUNwQyxJQUFBQyw2QkFBaUIsRUFBQzNCLGFBQWEsRUFBRTtnQkFDL0JnRixnQkFBZ0IsRUFBRSxDQUFDbkgsa0NBQXNCLENBQUNGLGFBQWEsQ0FBQztnQkFDeERpRSxPQUFPLEVBQUUsSUFBSSxDQUFDNUUsYUFBYSxDQUFDNkUsMEJBQTBCO2dCQUN0REMsMEJBQTBCLEVBQUUsSUFBSSxDQUFDOUUsYUFBYSxDQUFDK0UsNEJBQTRCLENBQUNrWTtjQUM5RSxDQUFDLENBQUM7Y0FFSWhhLGNBQXlCLEdBQUFsRixhQUFBLEtBQVErRCxxQkFBUyxDQUFDb0csY0FBYztjQUMvRGpGLGNBQWMsQ0FBQ3BDLGtDQUFzQixDQUFDeUcsc0JBQXNCLENBQUMsR0FBR0Esc0JBQXNCO2NBQ3RGckUsY0FBYyxDQUFDcEMsa0NBQXNCLENBQUNGLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQ1gsYUFBYSxDQUFDVyxhQUFhO2NBRXZGLElBQUksQ0FBQytGLGlCQUFpQixDQUFDM0YsU0FBUyxFQUFFa0MsY0FBYyxDQUFDO2NBRTNDd0UsTUFBaUMsR0FBRyxDQUFDLENBQUM7Y0FFNUMsSUFBSWdWLFFBQVEsRUFBRTtnQkFDWmhWLE1BQU0sQ0FBQ2dWLFFBQVEsR0FBR0EsUUFBUSxDQUFDbmQsUUFBUSxDQUFDLENBQUM7Y0FDdkM7O2NBRUE7Y0FDQTJELGNBQWMsQ0FBQ3BDLGtDQUFzQixDQUFDNmIsU0FBUyxDQUFDLEdBQUdBLFNBQVMsSUFBSSxFQUFFO2NBRTVEM1osR0FBRyxNQUFBMUMsTUFBQSxDQUFNLElBQUksQ0FBQ1Asd0JBQXdCLENBQUMwRSxNQUFNLEVBQUFuRSxNQUFBLENBQUd3QyxXQUFXO2NBQzNEQyxNQUFNLEdBQUcsS0FBSztjQUNkNEUsT0FBMkIsR0FBRztnQkFDbENqSCxPQUFPLEVBQUV3QyxjQUFjO2dCQUN2QkgsTUFBTSxFQUFOQSxNQUFNO2dCQUNOQyxHQUFHLEVBQUhBLEdBQUc7Z0JBQ0gwRSxNQUFNLEVBQU5BLE1BQU07Z0JBQ052QyxPQUFPLEdBQUFvWCx1QkFBQSxHQUFFLElBQUksQ0FBQ3RjLGFBQWEsQ0FBQ21GLHFCQUFxQixjQUFBbVgsdUJBQUEsY0FBQUEsdUJBQUEsR0FBSSxJQUFJLENBQUN0YyxhQUFhLENBQUNvRixvQkFBb0IsQ0FBQzZYO2NBQy9GLENBQUM7Y0FBQSxPQUFBSixVQUFBLENBQUFyWCxNQUFBLFdBRU0sSUFBSXNCLE9BQU87Z0JBQUEsSUFBQW9XLE1BQUEsT0FBQTFhLGtCQUFBLDBCQUFBQyxZQUFBLFlBQUFDLElBQUEsQ0FBQyxTQUFBeWEsVUFBTzNVLE9BQU8sRUFBRXpCLE1BQU07a0JBQUEsSUFBQTdELFlBQUEsRUFBQUUsUUFBQSxFQUFBQyx1QkFBQSxFQUFBQyx5QkFBQSxFQUFBQyxJQUFBLEVBQUE5QyxPQUFBLEVBQUEyYywwQkFBQSxFQUFBQyw0QkFBQSxFQUFBQyxJQUFBO2tCQUFBLE9BQUE3YSxZQUFBLFlBQUFrQixJQUFBLFdBQUE0WixVQUFBO29CQUFBLGtCQUFBQSxVQUFBLENBQUExWixJQUFBLEdBQUEwWixVQUFBLENBQUFuZSxJQUFBO3NCQUFBO3dCQUNqQzhELFlBQVksR0FBR1ksWUFBSyxDQUFDQyxLQUFLLENBQUMsQ0FBQzt3QkFBQXdaLFVBQUEsQ0FBQTFaLElBQUE7d0JBQUEwWixVQUFBLENBQUFuZSxJQUFBO3dCQUFBLE9BRVQ0RCxhQUFhLENBQUMwRSxPQUFPLENBQUM7c0JBQUE7d0JBQXZDdEUsUUFBUSxHQUFBbWEsVUFBQSxDQUFBbFksSUFBQTt3QkFDUmhDLHVCQUF1QixHQUFHSCxZQUFZLENBQUNvQyxtQkFBbUI7d0JBQzFEaEMseUJBQXlCLEdBQUdWLEtBQUssQ0FBQzBDLG1CQUFtQjt3QkFDbkQvQixJQUFJLEdBQWNILFFBQVEsQ0FBMUJHLElBQUksRUFBRTlDLE9BQU8sR0FBSzJDLFFBQVEsQ0FBcEIzQyxPQUFPO3dCQUNyQjhiLE9BQUksQ0FBQzFULGdCQUFnQixDQUFDcEksT0FBTyxDQUFDO3dCQUU5QjhiLE9BQUksQ0FBQ3ZZLGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQ0MsSUFBSSxFQUFFQywwQkFBbUIsQ0FBQ3FaLGlDQUFpQyxFQUFFLHVDQUF1QyxFQUFFemMsU0FBUyxFQUFFcUMsUUFBUSxFQUFFRSx5QkFBeUIsRUFBRVQsV0FBVyxFQUFFQyxNQUFNLEVBQUU3QyxTQUFTLEVBQUVBLFNBQVMsRUFBRWdELGNBQWMsRUFBRUksdUJBQXVCLENBQUM7d0JBQ3JRbUYsT0FBTyxDQUFDakYsSUFBSSxDQUFDO3dCQUFDZ2EsVUFBQSxDQUFBbmUsSUFBQTt3QkFBQTtzQkFBQTt3QkFBQW1lLFVBQUEsQ0FBQTFaLElBQUE7d0JBQUF5WixJQUFBLEdBQUFDLFVBQUE7d0JBRVJsYSwwQkFBdUIsR0FBR0gsWUFBWSxDQUFDb0MsbUJBQW1CO3dCQUMxRGhDLDRCQUF5QixHQUFHVixLQUFLLENBQUMwQyxtQkFBbUI7d0JBQzNEaVgsT0FBSSxDQUFDdlksYUFBYSxDQUFDQyxrQkFBUSxDQUFDd0IsS0FBSyxFQUFFdEIsMEJBQW1CLENBQUM0WSw4QkFBOEIsRUFBRSxvQ0FBb0MsRUFBRWhjLFNBQVMsRUFBRWQsU0FBUyxFQUFFcUQsNEJBQXlCLEVBQUVULFdBQVcsRUFBRUMsTUFBTSxFQUFBd2EsSUFBQSxFQUFTcmQsU0FBUyxFQUFFZ0QsY0FBYyxFQUFFSSwwQkFBdUIsQ0FBQzt3QkFBQyxLQUUxUCxJQUFBMkYsZ0NBQW9CLEVBQUFzVSxJQUFBLEVBQVF4YixxQkFBUyxDQUFDbUgscUJBQXFCLENBQUM7MEJBQUFzVSxVQUFBLENBQUFuZSxJQUFBOzBCQUFBO3dCQUFBO3dCQUM5RDJILE1BQU0sQ0FBQyxJQUFJcEYsS0FBSyxDQUFDNGEsT0FBSSxDQUFDclQsdUJBQXVCLENBQUMsQ0FBQzt3QkFBQyxPQUFBcVUsVUFBQSxDQUFBL1gsTUFBQTtzQkFBQTt3QkFHbER1QixNQUFNLENBQUF1VyxJQUFNLENBQUM7c0JBQUM7c0JBQUE7d0JBQUEsT0FBQUMsVUFBQSxDQUFBNVgsSUFBQTtvQkFBQTtrQkFBQSxHQUFBd1gsU0FBQTtnQkFBQSxDQUVqQjtnQkFBQSxpQkFBQU0sSUFBQSxFQUFBQyxJQUFBO2tCQUFBLE9BQUFSLE1BQUEsQ0FBQXBmLEtBQUEsT0FBQUUsU0FBQTtnQkFBQTtjQUFBLElBQUM7WUFBQTtZQUFBO2NBQUEsT0FBQTZlLFVBQUEsQ0FBQWxYLElBQUE7VUFBQTtRQUFBLEdBQUEwVyxTQUFBO01BQUEsQ0FDSDtNQUFBLFNBcEVZWSx3QkFBd0JBLENBQUFVLElBQUE7UUFBQSxPQUFBdkIseUJBQUEsQ0FBQXRlLEtBQUEsT0FBQUUsU0FBQTtNQUFBO01BQUEsT0FBeEJpZix3QkFBd0I7SUFBQTtJQXNFckM7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFORTtFQUFBO0lBQUE3YixHQUFBO0lBQUFwQyxLQUFBO01BQUEsSUFBQTRlLGdCQUFBLE9BQUFwYixrQkFBQSwwQkFBQUMsWUFBQSxZQUFBQyxJQUFBLENBT0EsU0FBQW1iLFVBQTZCOWMsU0FBaUIsRUFBRTBaLEtBQWEsRUFBRXFELGdCQUF3QjtRQUFBLElBQUFDLHVCQUFBO1VBQUFDLE9BQUE7UUFBQSxJQUFBQyw2QkFBQTtVQUFBcmIsS0FBQTtVQUFBQyxXQUFBO1VBQUFHLGFBQUE7VUFBQXNFLHNCQUFBO1VBQUFyRSxjQUFBO1VBQUFGLEdBQUE7VUFBQUQsTUFBQTtVQUFBNEUsT0FBQTtVQUFBd1csT0FBQSxHQUFBbGdCLFNBQUE7UUFBQSxPQUFBeUUsWUFBQSxZQUFBa0IsSUFBQSxXQUFBd2EsVUFBQTtVQUFBLGtCQUFBQSxVQUFBLENBQUF0YSxJQUFBLEdBQUFzYSxVQUFBLENBQUEvZSxJQUFBO1lBQUE7Y0FBRTZlLDZCQUE2RCxHQUFBQyxPQUFBLENBQUFqZ0IsTUFBQSxRQUFBaWdCLE9BQUEsUUFBQWplLFNBQUEsR0FBQWllLE9BQUEsTUFBRyxDQUFDLENBQUM7Y0FDbkp0YixLQUFLLEdBQUdrQixZQUFLLENBQUNDLEtBQUssQ0FBQyxDQUFDO2NBQzNCLElBQUksQ0FBQ0MsYUFBYSxDQUFDQyxrQkFBUSxDQUFDQyxJQUFJLEVBQUVDLDBCQUFtQixDQUFDaWEsc0JBQXNCLEVBQUUsMEJBQTBCLEVBQUVyZCxTQUFTLENBQUM7Y0FFaEg4QixXQUFXLE9BQUF4QyxNQUFBLENBQU9nRSxnQ0FBb0IsQ0FBQ2dhLGtDQUFrQyxPQUFBaGUsTUFBQSxDQUFJVSxTQUFTLGlCQUFBVixNQUFBLENBQWMsSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQ3lCLFNBQVM7Y0FDekl5QixhQUFhLEdBQUd5QixpQkFBSyxDQUFDQyxNQUFNLENBQUMsQ0FBQztjQUNwQyxJQUFBQyw2QkFBaUIsRUFBQzNCLGFBQWEsRUFBRTtnQkFDL0JnRixnQkFBZ0IsRUFBRSxDQUFDbkgsa0NBQXNCLENBQUNGLGFBQWEsQ0FBQztnQkFDeERpRSxPQUFPLEVBQUUsSUFBSSxDQUFDNUUsYUFBYSxDQUFDNkUsMEJBQTBCO2dCQUN0REMsMEJBQTBCLEVBQUUsSUFBSSxDQUFDOUUsYUFBYSxDQUFDK0UsNEJBQTRCLENBQUN1WjtjQUM5RSxDQUFDLENBQUM7Y0FFTWhYLHNCQUFzQixHQUFLMlcsNkJBQTZCLENBQXhEM1csc0JBQXNCO2NBQ3hCckUsY0FBeUIsR0FBR25CLHFCQUFTLENBQUNvRyxjQUFjO2NBQzFEakYsY0FBYyxDQUFDcEMsa0NBQXNCLENBQUNxYSxjQUFjLENBQUMsR0FBRyxJQUFJLENBQUNwYix3QkFBd0IsQ0FBQ3lFLEtBQUs7Y0FDM0Z0QixjQUFjLENBQUNwQyxrQ0FBc0IsQ0FBQzZZLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQzVaLHdCQUF3QixDQUFDMkcsUUFBUTtjQUMzRnhELGNBQWMsQ0FBQ3BDLGtDQUFzQixDQUFDc2EsYUFBYSxDQUFDLEdBQUdWLEtBQUs7Y0FFNUQsSUFBSW5ULHNCQUFzQixFQUFFO2dCQUMxQnJFLGNBQWMsQ0FBQ3BDLGtDQUFzQixDQUFDeUcsc0JBQXNCLENBQUMsR0FBR0Esc0JBQXNCO2dCQUN0RnJFLGNBQWMsQ0FBQ3BDLGtDQUFzQixDQUFDRixhQUFhLENBQUMsR0FBRyxJQUFJLENBQUNYLGFBQWEsQ0FBQ1csYUFBYTtnQkFDdkZrQyxXQUFXLE9BQUF4QyxNQUFBLENBQU9nRSxnQ0FBb0IsQ0FBQ2thLHNDQUFzQyxPQUFBbGUsTUFBQSxDQUFJVSxTQUFTLGlCQUFBVixNQUFBLENBQWMsSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQ3lCLFNBQVMsQ0FBRTtjQUNuSjtjQUVBLElBQUksQ0FBQ21GLGlCQUFpQixDQUFDM0YsU0FBUyxFQUFFa0MsY0FBYyxDQUFDO2NBRTNDRixHQUFHLE1BQUExQyxNQUFBLENBQU0sSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQzBFLE1BQU0sRUFBQW5FLE1BQUEsQ0FBR3dDLFdBQVc7Y0FDM0RDLE1BQU0sR0FBRyxNQUFNO2NBQ2Y0RSxPQUEyQixHQUFHO2dCQUNsQ25FLElBQUksRUFBRThMLElBQUksQ0FBQ0MsU0FBUyxDQUFDd08sZ0JBQWdCLENBQUM7Z0JBQ3RDcmQsT0FBTyxFQUFFd0MsY0FBYztnQkFDdkJILE1BQU0sRUFBTkEsTUFBTTtnQkFDTkMsR0FBRyxFQUFIQSxHQUFHO2dCQUNIbUMsT0FBTyxHQUFBNlksdUJBQUEsR0FBRSxJQUFJLENBQUMvZCxhQUFhLENBQUNtRixxQkFBcUIsY0FBQTRZLHVCQUFBLGNBQUFBLHVCQUFBLEdBQUksSUFBSSxDQUFDL2QsYUFBYSxDQUFDb0Ysb0JBQW9CLENBQUNrWjtjQUMvRixDQUFDO2NBQUEsT0FBQUgsVUFBQSxDQUFBM1ksTUFBQSxXQUVNLElBQUlzQixPQUFPO2dCQUFBLElBQUEwWCxNQUFBLE9BQUFoYyxrQkFBQSwwQkFBQUMsWUFBQSxZQUFBQyxJQUFBLENBQUMsU0FBQStiLFVBQU9qVyxPQUFPLEVBQUV6QixNQUFNO2tCQUFBLElBQUE3RCxZQUFBLEVBQUFFLFFBQUEsRUFBQUMsdUJBQUEsRUFBQTVDLE9BQUEsRUFBQTZDLHlCQUFBLEVBQUFvYiwwQkFBQSxFQUFBQyw0QkFBQSxFQUFBQyxJQUFBO2tCQUFBLE9BQUFuYyxZQUFBLFlBQUFrQixJQUFBLFdBQUFrYixVQUFBO29CQUFBLGtCQUFBQSxVQUFBLENBQUFoYixJQUFBLEdBQUFnYixVQUFBLENBQUF6ZixJQUFBO3NCQUFBO3dCQUNqQzhELFlBQVksR0FBR1ksWUFBSyxDQUFDQyxLQUFLLENBQUMsQ0FBQzt3QkFBQThhLFVBQUEsQ0FBQWhiLElBQUE7d0JBQUFnYixVQUFBLENBQUF6ZixJQUFBO3dCQUFBLE9BRVQ0RCxhQUFhLENBQUMwRSxPQUFPLENBQUM7c0JBQUE7d0JBQXZDdEUsUUFBUSxHQUFBeWIsVUFBQSxDQUFBeFosSUFBQTt3QkFDUmhDLHVCQUF1QixHQUFHSCxZQUFZLENBQUNvQyxtQkFBbUI7d0JBQ3hEN0UsT0FBTyxHQUFLMkMsUUFBUSxDQUFwQjNDLE9BQU87d0JBQ2Z1ZCxPQUFJLENBQUNuVixnQkFBZ0IsQ0FBQ3BJLE9BQU8sQ0FBQzt3QkFFeEI2Qyx5QkFBeUIsR0FBR1YsS0FBSyxDQUFDMEMsbUJBQW1CO3dCQUMzRDBZLE9BQUksQ0FBQ2hhLGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQ0MsSUFBSSxFQUFFQywwQkFBbUIsQ0FBQzJhLHdCQUF3QixFQUFFLDRCQUE0QixFQUFFL2QsU0FBUyxFQUFFcUMsUUFBUSxFQUFFRSx5QkFBeUIsRUFBRVQsV0FBVyxFQUFFQyxNQUFNLEVBQUU3QyxTQUFTLEVBQUVBLFNBQVMsRUFBRWdELGNBQWMsRUFBRUksdUJBQXVCLENBQUM7d0JBQ2pQbUYsT0FBTyxDQUFDLENBQUM7d0JBQUNxVyxVQUFBLENBQUF6ZixJQUFBO3dCQUFBO3NCQUFBO3dCQUFBeWYsVUFBQSxDQUFBaGIsSUFBQTt3QkFBQSthLElBQUEsR0FBQUMsVUFBQTt3QkFFSnhiLDBCQUF1QixHQUFHSCxZQUFZLENBQUNvQyxtQkFBbUI7d0JBQzFEaEMsNEJBQXlCLEdBQUdWLEtBQUssQ0FBQzBDLG1CQUFtQjt3QkFDM0QwWSxPQUFJLENBQUNoYSxhQUFhLENBQUNDLGtCQUFRLENBQUN3QixLQUFLLEVBQUV0QiwwQkFBbUIsQ0FBQzRhLHFCQUFxQixFQUFFLHlCQUF5QixFQUFFaGUsU0FBUyxFQUFFZCxTQUFTLEVBQUVxRCw0QkFBeUIsRUFBRVQsV0FBVyxFQUFFQyxNQUFNLEVBQUE4YixJQUFBLEVBQVMzZSxTQUFTLEVBQUVnRCxjQUFjLEVBQUVJLDBCQUF1QixDQUFDO3dCQUN6TyxJQUFJLElBQUEyRixnQ0FBb0IsRUFBQTRWLElBQUEsRUFBUTljLHFCQUFTLENBQUNtSCxxQkFBcUIsQ0FBQyxFQUFFOzBCQUNoRWxDLE1BQU0sQ0FBRSxJQUFJcEYsS0FBSyxDQUFDcWMsT0FBSSxDQUFDOVUsdUJBQXVCLENBQUMsQ0FBQzt3QkFDbEQ7d0JBQ0FuQyxNQUFNLENBQUE2WCxJQUFNLENBQUM7c0JBQUM7c0JBQUE7d0JBQUEsT0FBQUMsVUFBQSxDQUFBbFosSUFBQTtvQkFBQTtrQkFBQSxHQUFBOFksU0FBQTtnQkFBQSxDQUVqQjtnQkFBQSxpQkFBQU8sSUFBQSxFQUFBQyxJQUFBO2tCQUFBLE9BQUFULE1BQUEsQ0FBQTFnQixLQUFBLE9BQUFFLFNBQUE7Z0JBQUE7Y0FBQSxJQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUFtZ0IsVUFBQSxDQUFBeFksSUFBQTtVQUFBO1FBQUEsR0FBQWtZLFNBQUE7TUFBQSxDQUNIO01BQUEsU0F6RFlTLGVBQWVBLENBQUFZLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBO1FBQUEsT0FBQXhCLGdCQUFBLENBQUE5ZixLQUFBLE9BQUFFLFNBQUE7TUFBQTtNQUFBLE9BQWZzZ0IsZUFBZTtJQUFBO0lBMkQ1QjtBQUNGO0FBQ0E7QUFDQTtJQUhFO0VBQUE7SUFBQWxkLEdBQUE7SUFBQXBDLEtBQUE7TUFBQSxJQUFBcWdCLHFCQUFBLE9BQUE3YyxrQkFBQSwwQkFBQUMsWUFBQSxZQUFBQyxJQUFBLENBSUEsU0FBQTRjLFVBQWtDdmUsU0FBaUI7UUFBQSxJQUFBd2UsdUJBQUE7VUFBQUMsT0FBQTtRQUFBLElBQUE1YyxLQUFBLEVBQUFDLFdBQUEsRUFBQUcsYUFBQSxFQUFBQyxjQUFBLEVBQUFGLEdBQUEsRUFBQUQsTUFBQSxFQUFBNEUsT0FBQTtRQUFBLE9BQUFqRixZQUFBLFlBQUFrQixJQUFBLFdBQUE4YixVQUFBO1VBQUEsa0JBQUFBLFVBQUEsQ0FBQTViLElBQUEsR0FBQTRiLFVBQUEsQ0FBQXJnQixJQUFBO1lBQUE7Y0FDM0N3RCxLQUFLLEdBQUdrQixZQUFLLENBQUNDLEtBQUssQ0FBQyxDQUFDO2NBQzNCLElBQUksQ0FBQ0MsYUFBYSxDQUFDQyxrQkFBUSxDQUFDQyxJQUFJLEVBQUVDLDBCQUFtQixDQUFDdWIsdUJBQXVCLEVBQUUsNEJBQTRCLEVBQUUzZSxTQUFTLENBQUM7Y0FDdkgsSUFBSSxDQUFDQSxTQUFTLEVBQUU7Z0JBQ2RBLFNBQVMsR0FBRyxJQUFBd0YsWUFBTSxFQUFDLENBQUM7Y0FDdEI7Y0FFTTFELFdBQVcsT0FBQXhDLE1BQUEsQ0FBT2dFLGdDQUFvQixDQUFDc2IsZ0NBQWdDLE9BQUF0ZixNQUFBLENBQUksSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQ3lFLEtBQUs7Y0FDOUd2QixhQUFhLEdBQUd5QixpQkFBSyxDQUFDQyxNQUFNLENBQUMsQ0FBQztjQUNwQyxJQUFBQyw2QkFBaUIsRUFBQzNCLGFBQWEsRUFBRTtnQkFDL0I0QixPQUFPLEVBQUUsSUFBSSxDQUFDNUUsYUFBYSxDQUFDNkUsMEJBQTBCO2dCQUN0REMsMEJBQTBCLEVBQUUsSUFBSSxDQUFDOUUsYUFBYSxDQUFDK0UsNEJBQTRCLENBQUM2YTtjQUM5RSxDQUFDLENBQUM7Y0FFSTNjLGNBQXlCLEdBQUduQixxQkFBUyxDQUFDb0csY0FBYztjQUMxRGpGLGNBQWMsQ0FBQ3BDLGtDQUFzQixDQUFDcWEsY0FBYyxDQUFDLEdBQUcsSUFBSSxDQUFDcGIsd0JBQXdCLENBQUN5RSxLQUFLO2NBQzNGdEIsY0FBYyxDQUFDcEMsa0NBQXNCLENBQUNFLFNBQVMsQ0FBQyxHQUFHQSxTQUFTO2NBRTVELElBQUksQ0FBQzJGLGlCQUFpQixDQUFDM0YsU0FBUyxFQUFFa0MsY0FBYyxDQUFDO2NBRTNDRixHQUFHLE1BQUExQyxNQUFBLENBQU0sSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQzBFLE1BQU0sRUFBQW5FLE1BQUEsQ0FBR3dDLFdBQVc7Y0FDM0RDLE1BQU0sR0FBRyxLQUFLO2NBQ2Q0RSxPQUEyQixHQUFHO2dCQUNsQ2pILE9BQU8sRUFBRXdDLGNBQWM7Z0JBQ3ZCSCxNQUFNLEVBQU5BLE1BQU07Z0JBQ05DLEdBQUcsRUFBSEEsR0FBRztnQkFDSG1DLE9BQU8sR0FBQXFhLHVCQUFBLEdBQUUsSUFBSSxDQUFDdmYsYUFBYSxDQUFDbUYscUJBQXFCLGNBQUFvYSx1QkFBQSxjQUFBQSx1QkFBQSxHQUFJLElBQUksQ0FBQ3ZmLGFBQWEsQ0FBQ29GLG9CQUFvQixDQUFDd2E7Y0FDL0YsQ0FBQztjQUFBLE9BQUFILFVBQUEsQ0FBQWphLE1BQUEsV0FFTSxJQUFJc0IsT0FBTztnQkFBQSxJQUFBK1ksTUFBQSxPQUFBcmQsa0JBQUEsMEJBQUFDLFlBQUEsWUFBQUMsSUFBQSxDQUFDLFNBQUFvZCxVQUFPdFgsT0FBTyxFQUFFekIsTUFBTTtrQkFBQSxJQUFBN0QsWUFBQSxFQUFBRSxRQUFBLEVBQUFDLHVCQUFBLEVBQUFDLHlCQUFBLEVBQUFDLElBQUEsRUFBQXdjLDBCQUFBLEVBQUFDLDRCQUFBLEVBQUFDLElBQUE7a0JBQUEsT0FBQXhkLFlBQUEsWUFBQWtCLElBQUEsV0FBQXVjLFVBQUE7b0JBQUEsa0JBQUFBLFVBQUEsQ0FBQXJjLElBQUEsR0FBQXFjLFVBQUEsQ0FBQTlnQixJQUFBO3NCQUFBO3dCQUNqQzhELFlBQVksR0FBR1ksWUFBSyxDQUFDQyxLQUFLLENBQUMsQ0FBQzt3QkFBQW1jLFVBQUEsQ0FBQXJjLElBQUE7d0JBQUFxYyxVQUFBLENBQUE5Z0IsSUFBQTt3QkFBQSxPQUVUNEQsYUFBYSxDQUFDMEUsT0FBTyxDQUFDO3NCQUFBO3dCQUF2Q3RFLFFBQVEsR0FBQThjLFVBQUEsQ0FBQTdhLElBQUE7d0JBQ1JoQyx1QkFBdUIsR0FBR0gsWUFBWSxDQUFDb0MsbUJBQW1CO3dCQUMxRGhDLHlCQUF5QixHQUFHVixLQUFLLENBQUMwQyxtQkFBbUI7d0JBQ25EL0IsSUFBSSxHQUFLSCxRQUFRLENBQWpCRyxJQUFJO3dCQUNaaWMsT0FBSSxDQUFDeGIsYUFBYSxDQUFDQyxrQkFBUSxDQUFDQyxJQUFJLEVBQUVDLDBCQUFtQixDQUFDZ2MseUJBQXlCLEVBQUUsOEJBQThCLEVBQUVwZixTQUFTLEVBQUVxQyxRQUFRLEVBQUVFLHlCQUF5QixFQUFFVCxXQUFXLEVBQUVDLE1BQU0sRUFBRTdDLFNBQVMsRUFBRUEsU0FBUyxFQUFFZ0QsY0FBYyxFQUFFSSx1QkFBdUIsQ0FBQzt3QkFDcFBtRixPQUFPLENBQUNqRixJQUFJLENBQUM7d0JBQUMyYyxVQUFBLENBQUE5Z0IsSUFBQTt3QkFBQTtzQkFBQTt3QkFBQThnQixVQUFBLENBQUFyYyxJQUFBO3dCQUFBb2MsSUFBQSxHQUFBQyxVQUFBO3dCQUVSN2MsMEJBQXVCLEdBQUdILFlBQVksQ0FBQ29DLG1CQUFtQjt3QkFDMURoQyw0QkFBeUIsR0FBR1YsS0FBSyxDQUFDMEMsbUJBQW1CO3dCQUMzRGthLE9BQUksQ0FBQ3hiLGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQ3dCLEtBQUssRUFBRXRCLDBCQUFtQixDQUFDaWMsc0JBQXNCLEVBQUUsMkJBQTJCLEVBQUVyZixTQUFTLEVBQUVkLFNBQVMsRUFBRXFELDRCQUF5QixFQUFFVCxXQUFXLEVBQUVDLE1BQU0sRUFBQW1kLElBQUEsRUFBU2hnQixTQUFTLEVBQUVnRCxjQUFjLEVBQUVJLDBCQUF1QixDQUFDO3dCQUM1TyxJQUFJLElBQUEyRixnQ0FBb0IsRUFBQWlYLElBQUEsRUFBUW5lLHFCQUFTLENBQUNtSCxxQkFBcUIsQ0FBQyxFQUFFOzBCQUNoRWxDLE1BQU0sQ0FBRSxJQUFJcEYsS0FBSyxDQUFDNmQsT0FBSSxDQUFDdFcsdUJBQXVCLENBQUMsQ0FBQzt3QkFDbEQ7d0JBQ0FuQyxNQUFNLENBQUFrWixJQUFNLENBQUM7c0JBQUM7c0JBQUE7d0JBQUEsT0FBQUMsVUFBQSxDQUFBdmEsSUFBQTtvQkFBQTtrQkFBQSxHQUFBbWEsU0FBQTtnQkFBQSxDQUVqQjtnQkFBQSxpQkFBQU8sSUFBQSxFQUFBQyxJQUFBO2tCQUFBLE9BQUFULE1BQUEsQ0FBQS9oQixLQUFBLE9BQUFFLFNBQUE7Z0JBQUE7Y0FBQSxJQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUF5aEIsVUFBQSxDQUFBOVosSUFBQTtVQUFBO1FBQUEsR0FBQTJaLFNBQUE7TUFBQSxDQUNIO01BQUEsU0FoRFlNLG9CQUFvQkEsQ0FBQVcsSUFBQTtRQUFBLE9BQUFsQixxQkFBQSxDQUFBdmhCLEtBQUEsT0FBQUUsU0FBQTtNQUFBO01BQUEsT0FBcEI0aEIsb0JBQW9CO0lBQUE7SUFrRGpDO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUxFO0VBQUE7SUFBQXhlLEdBQUE7SUFBQXBDLEtBQUE7TUFBQSxJQUFBd2hCLGlDQUFBLE9BQUFoZSxrQkFBQSwwQkFBQUMsWUFBQSxZQUFBQyxJQUFBLENBTUEsU0FBQStkLFVBQThDMWYsU0FBaUIsRUFBRTJmLGdDQUF3QztRQUFBLElBQUFDLHVCQUFBO1VBQUFDLE9BQUE7UUFBQSxJQUFBQyxtQ0FBQTtVQUFBamUsS0FBQTtVQUFBQyxXQUFBO1VBQUFHLGFBQUE7VUFBQXNFLHNCQUFBO1VBQUFyRSxjQUFBO1VBQUFGLEdBQUE7VUFBQUQsTUFBQTtVQUFBNEUsT0FBQTtVQUFBb1osT0FBQSxHQUFBOWlCLFNBQUE7UUFBQSxPQUFBeUUsWUFBQSxZQUFBa0IsSUFBQSxXQUFBb2QsVUFBQTtVQUFBLGtCQUFBQSxVQUFBLENBQUFsZCxJQUFBLEdBQUFrZCxVQUFBLENBQUEzaEIsSUFBQTtZQUFBO2NBQUV5aEIsbUNBQXlFLEdBQUFDLE9BQUEsQ0FBQTdpQixNQUFBLFFBQUE2aUIsT0FBQSxRQUFBN2dCLFNBQUEsR0FBQTZnQixPQUFBLE1BQUcsQ0FBQyxDQUFDO2NBQ2pMbGUsS0FBSyxHQUFHa0IsWUFBSyxDQUFDQyxLQUFLLENBQUMsQ0FBQztjQUMzQixJQUFJLENBQUNDLGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQ0MsSUFBSSxFQUFFQywwQkFBbUIsQ0FBQzZjLG1DQUFtQyxFQUFFLHlDQUF5QyxFQUFFamdCLFNBQVMsQ0FBQztjQUU1SThCLFdBQVcsT0FBQXhDLE1BQUEsQ0FBT2dFLGdDQUFvQixDQUFDNGMsaUNBQWlDLE9BQUE1Z0IsTUFBQSxDQUFJLElBQUksQ0FBQ1Asd0JBQXdCLENBQUN5RSxLQUFLLE9BQUFsRSxNQUFBLENBQUksSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQzJHLFFBQVEsT0FBQXBHLE1BQUEsQ0FBSVUsU0FBUztjQUNwS2lDLGFBQWEsR0FBR3lCLGlCQUFLLENBQUNDLE1BQU0sQ0FBQyxDQUFDO2NBQ3BDLElBQUFDLDZCQUFpQixFQUFDM0IsYUFBYSxFQUFFO2dCQUMvQmdGLGdCQUFnQixFQUFFLENBQUNuSCxrQ0FBc0IsQ0FBQ0YsYUFBYSxDQUFDO2dCQUN4RGlFLE9BQU8sRUFBRSxJQUFJLENBQUM1RSxhQUFhLENBQUM2RSwwQkFBMEI7Z0JBQ3REQywwQkFBMEIsRUFBRSxJQUFJLENBQUM5RSxhQUFhLENBQUMrRSw0QkFBNEIsQ0FBQ21jO2NBQzlFLENBQUMsQ0FBQztjQUVNNVosc0JBQXNCLEdBQUt1WixtQ0FBbUMsQ0FBOUR2WixzQkFBc0I7Y0FDeEJyRSxjQUF5QixHQUFHbkIscUJBQVMsQ0FBQ29HLGNBQWM7Y0FDMURqRixjQUFjLENBQUNwQyxrQ0FBc0IsQ0FBQ3FhLGNBQWMsQ0FBQyxHQUFHLElBQUksQ0FBQ3BiLHdCQUF3QixDQUFDeUUsS0FBSztjQUUzRixJQUFJK0Msc0JBQXNCLEVBQUU7Z0JBQzFCckUsY0FBYyxDQUFDcEMsa0NBQXNCLENBQUN5RyxzQkFBc0IsQ0FBQyxHQUFHQSxzQkFBc0I7Z0JBQ3RGckUsY0FBYyxDQUFDcEMsa0NBQXNCLENBQUNGLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQ1gsYUFBYSxDQUFDVyxhQUFhO2dCQUN2RmtDLFdBQVcsT0FBQXhDLE1BQUEsQ0FBT2dFLGdDQUFvQixDQUFDOGMscUNBQXFDLE9BQUE5Z0IsTUFBQSxDQUFJLElBQUksQ0FBQ1Asd0JBQXdCLENBQUN5RSxLQUFLLE9BQUFsRSxNQUFBLENBQUksSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQzJHLFFBQVEsT0FBQXBHLE1BQUEsQ0FBSVUsU0FBUyxDQUFFO2NBQzlLO2NBRUEsSUFBSSxDQUFDMkYsaUJBQWlCLENBQUMzRixTQUFTLEVBQUVrQyxjQUFjLENBQUM7Y0FFakRKLFdBQVcsSUFBSSxhQUFhLEdBQUdmLHFCQUFTLENBQUNzZixnQkFBZ0I7Y0FFbkRyZSxHQUFHLE1BQUExQyxNQUFBLENBQU0sSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQzBFLE1BQU0sRUFBQW5FLE1BQUEsQ0FBR3dDLFdBQVc7Y0FDM0RDLE1BQU0sR0FBRyxNQUFNO2NBQ2Y0RSxPQUEyQixHQUFHO2dCQUNsQ25FLElBQUksRUFBRThMLElBQUksQ0FBQ0MsU0FBUyxDQUFDb1IsZ0NBQWdDLENBQUM7Z0JBQ3REamdCLE9BQU8sRUFBRXdDLGNBQWM7Z0JBQ3ZCSCxNQUFNLEVBQU5BLE1BQU07Z0JBQ05DLEdBQUcsRUFBSEEsR0FBRztnQkFDSG1DLE9BQU8sR0FBQXliLHVCQUFBLEdBQUUsSUFBSSxDQUFDM2dCLGFBQWEsQ0FBQ21GLHFCQUFxQixjQUFBd2IsdUJBQUEsY0FBQUEsdUJBQUEsR0FBSSxJQUFJLENBQUMzZ0IsYUFBYSxDQUFDb0Ysb0JBQW9CLENBQUM4YjtjQUMvRixDQUFDO2NBQUEsT0FBQUgsVUFBQSxDQUFBdmIsTUFBQSxXQUVNLElBQUlzQixPQUFPO2dCQUFBLElBQUF1YSxNQUFBLE9BQUE3ZSxrQkFBQSwwQkFBQUMsWUFBQSxZQUFBQyxJQUFBLENBQUMsU0FBQTRlLFVBQU85WSxPQUFPLEVBQUV6QixNQUFNO2tCQUFBLElBQUE3RCxZQUFBLEVBQUFFLFFBQUEsRUFBQUMsdUJBQUEsRUFBQTVDLE9BQUEsRUFBQTZDLHlCQUFBLEVBQUFpZSwwQkFBQSxFQUFBQyw0QkFBQSxFQUFBQyxJQUFBO2tCQUFBLE9BQUFoZixZQUFBLFlBQUFrQixJQUFBLFdBQUErZCxVQUFBO29CQUFBLGtCQUFBQSxVQUFBLENBQUE3ZCxJQUFBLEdBQUE2ZCxVQUFBLENBQUF0aUIsSUFBQTtzQkFBQTt3QkFDakM4RCxZQUFZLEdBQUdZLFlBQUssQ0FBQ0MsS0FBSyxDQUFDLENBQUM7d0JBQUEyZCxVQUFBLENBQUE3ZCxJQUFBO3dCQUFBNmQsVUFBQSxDQUFBdGlCLElBQUE7d0JBQUEsT0FFVDRELGFBQWEsQ0FBQzBFLE9BQU8sQ0FBQztzQkFBQTt3QkFBdkN0RSxRQUFRLEdBQUFzZSxVQUFBLENBQUFyYyxJQUFBO3dCQUNSaEMsdUJBQXVCLEdBQUdILFlBQVksQ0FBQ29DLG1CQUFtQjt3QkFDeEQ3RSxPQUFPLEdBQUsyQyxRQUFRLENBQXBCM0MsT0FBTzt3QkFDZm1nQixPQUFJLENBQUMvWCxnQkFBZ0IsQ0FBQ3BJLE9BQU8sQ0FBQzt3QkFDeEI2Qyx5QkFBeUIsR0FBR1YsS0FBSyxDQUFDMEMsbUJBQW1CO3dCQUMzRHNiLE9BQUksQ0FBQzVjLGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQ0MsSUFBSSxFQUFFQywwQkFBbUIsQ0FBQ3dkLHFDQUFxQyxFQUFFLDJDQUEyQyxFQUFFNWdCLFNBQVMsRUFBRXFDLFFBQVEsRUFBRUUseUJBQXlCLEVBQUVULFdBQVcsRUFBRUMsTUFBTSxFQUFFN0MsU0FBUyxFQUFFQSxTQUFTLEVBQUVnRCxjQUFjLEVBQUVJLHVCQUF1QixDQUFDO3dCQUM3UW1GLE9BQU8sQ0FBQyxDQUFDO3dCQUFDa1osVUFBQSxDQUFBdGlCLElBQUE7d0JBQUE7c0JBQUE7d0JBQUFzaUIsVUFBQSxDQUFBN2QsSUFBQTt3QkFBQTRkLElBQUEsR0FBQUMsVUFBQTt3QkFFSnJlLDBCQUF1QixHQUFHSCxZQUFZLENBQUNvQyxtQkFBbUI7d0JBQzFEaEMsNEJBQXlCLEdBQUdWLEtBQUssQ0FBQzBDLG1CQUFtQjt3QkFDM0RzYixPQUFJLENBQUM1YyxhQUFhLENBQUNDLGtCQUFRLENBQUN3QixLQUFLLEVBQUV0QiwwQkFBbUIsQ0FBQ3lkLGtDQUFrQyxFQUFFLHdDQUF3QyxFQUFFN2dCLFNBQVMsRUFBRWQsU0FBUyxFQUFFcUQsNEJBQXlCLEVBQUVULFdBQVcsRUFBRUMsTUFBTSxFQUFBMmUsSUFBQSxFQUFTeGhCLFNBQVMsRUFBRWdELGNBQWMsRUFBRUksMEJBQXVCLENBQUM7d0JBQ3JRLElBQUksSUFBQTJGLGdDQUFvQixFQUFBeVksSUFBQSxFQUFRM2YscUJBQVMsQ0FBQ21ILHFCQUFxQixDQUFDLEVBQUU7MEJBQ2hFbEMsTUFBTSxDQUFFLElBQUlwRixLQUFLLENBQUNpZixPQUFJLENBQUMxWCx1QkFBdUIsQ0FBQyxDQUFDO3dCQUNsRDt3QkFDQW5DLE1BQU0sQ0FBQTBhLElBQU0sQ0FBQztzQkFBQztzQkFBQTt3QkFBQSxPQUFBQyxVQUFBLENBQUEvYixJQUFBO29CQUFBO2tCQUFBLEdBQUEyYixTQUFBO2dCQUFBLENBRWpCO2dCQUFBLGlCQUFBTyxJQUFBLEVBQUFDLElBQUE7a0JBQUEsT0FBQVQsTUFBQSxDQUFBdmpCLEtBQUEsT0FBQUUsU0FBQTtnQkFBQTtjQUFBLElBQUM7WUFBQTtZQUFBO2NBQUEsT0FBQStpQixVQUFBLENBQUFwYixJQUFBO1VBQUE7UUFBQSxHQUFBOGEsU0FBQTtNQUFBLENBQ0g7TUFBQSxTQXhEWVMsZ0NBQWdDQSxDQUFBYSxJQUFBLEVBQUFDLElBQUE7UUFBQSxPQUFBeEIsaUNBQUEsQ0FBQTFpQixLQUFBLE9BQUFFLFNBQUE7TUFBQTtNQUFBLE9BQWhDa2pCLGdDQUFnQztJQUFBO0lBMEQ3QztBQUNGO0FBQ0E7SUFGRTtFQUFBO0lBQUE5ZixHQUFBO0lBQUFwQyxLQUFBO01BQUEsSUFBQWlqQixvQkFBQSxPQUFBemYsa0JBQUEsMEJBQUFDLFlBQUEsWUFBQUMsSUFBQSxDQUdBLFNBQUF3ZixVQUFpQ25oQixTQUFpQixFQUFFNkksc0JBQThCO1FBQUEsSUFBQXVZLHVCQUFBO1VBQUFDLE9BQUE7UUFBQSxJQUFBQyxpQ0FBQTtVQUFBemYsS0FBQTtVQUFBMGYsbUJBQUE7VUFBQXpmLFdBQUE7VUFBQUcsYUFBQTtVQUFBQyxjQUFBO1VBQUFGLEdBQUE7VUFBQUQsTUFBQTtVQUFBNEUsT0FBQTtVQUFBNmEsT0FBQSxHQUFBdmtCLFNBQUE7UUFBQSxPQUFBeUUsWUFBQSxZQUFBa0IsSUFBQSxXQUFBNmUsVUFBQTtVQUFBLGtCQUFBQSxVQUFBLENBQUEzZSxJQUFBLEdBQUEyZSxVQUFBLENBQUFwakIsSUFBQTtZQUFBO2NBQUVpakIsaUNBQXFFLEdBQUFFLE9BQUEsQ0FBQXRrQixNQUFBLFFBQUFza0IsT0FBQSxRQUFBdGlCLFNBQUEsR0FBQXNpQixPQUFBLE1BQUcsQ0FBQyxDQUFDO2NBQUEsTUFFeEosQ0FBQzNZLHNCQUFzQixJQUFJQSxzQkFBc0IsS0FBS3hILHNCQUFlLENBQUNDLEVBQUU7Z0JBQUFtZ0IsVUFBQSxDQUFBcGpCLElBQUE7Z0JBQUE7Y0FBQTtjQUFBLE9BQUFvakIsVUFBQSxDQUFBaGQsTUFBQSxXQUNuRXNCLE9BQU8sQ0FBQzBCLE9BQU8sQ0FBQyxDQUFDO1lBQUE7Y0FFcEI1RixLQUFLLEdBQUdrQixZQUFLLENBQUNDLEtBQUssQ0FBQyxDQUFDO2NBQ25CdWUsbUJBQW1CLEdBQUtELGlDQUFpQyxDQUF6REMsbUJBQW1CO2NBQUEsTUFDdkIsQ0FBQzFZLHNCQUFzQixJQUFJQSxzQkFBc0IsS0FBS3hILHNCQUFlLENBQUNDLEVBQUU7Z0JBQUFtZ0IsVUFBQSxDQUFBcGpCLElBQUE7Z0JBQUE7Y0FBQTtjQUFBLE1BQVUsSUFBSXVDLEtBQUssQ0FBQywwQ0FBMEMsQ0FBQztZQUFBO2NBQ3JJa0IsV0FBVyxPQUFBeEMsTUFBQSxDQUFPZ0UsZ0NBQW9CLENBQUNvZSx1QkFBdUIsT0FBQXBpQixNQUFBLENBQUlVLFNBQVM7Y0FDM0VpQyxhQUFhLEdBQUd5QixpQkFBSyxDQUFDQyxNQUFNLENBQUMsQ0FBQztjQUU5QnpCLGNBQXlCLEdBQUduQixxQkFBUyxDQUFDb0csY0FBYztjQUMxRGpGLGNBQWMsQ0FBQ3BDLGtDQUFzQixDQUFDcWEsY0FBYyxDQUFDLEdBQUcsSUFBSSxDQUFDcGIsd0JBQXdCLENBQUN5RSxLQUFLO2NBQzNGLElBQUkrZCxtQkFBbUIsRUFBRTtnQkFDdkJyZixjQUFjLENBQUNuQixxQkFBUyxDQUFDd2dCLG1CQUFtQixDQUFDLEdBQUdBLG1CQUFtQjtjQUNyRTtjQUVBLElBQUksQ0FBQzViLGlCQUFpQixDQUFDM0YsU0FBUyxFQUFFa0MsY0FBYyxDQUFDO2NBRTNDRixHQUFHLE1BQUExQyxNQUFBLENBQU0sSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQzBFLE1BQU0sRUFBQW5FLE1BQUEsQ0FBR3dDLFdBQVc7Y0FDM0RDLE1BQU0sR0FBRyxNQUFNO2NBQ2Y0RSxPQUEyQixHQUFHO2dCQUNsQ2pILE9BQU8sRUFBRXdDLGNBQWM7Z0JBQ3ZCSCxNQUFNLEVBQU5BLE1BQU07Z0JBQ05DLEdBQUcsRUFBSEEsR0FBRztnQkFDSG1DLE9BQU8sR0FBQWlkLHVCQUFBLEdBQUUsSUFBSSxDQUFDbmlCLGFBQWEsQ0FBQ21GLHFCQUFxQixjQUFBZ2QsdUJBQUEsY0FBQUEsdUJBQUEsR0FBSSxJQUFJLENBQUNuaUIsYUFBYSxDQUFDb0Ysb0JBQW9CLENBQUNzZDtjQUMvRixDQUFDO2NBQUEsT0FBQUYsVUFBQSxDQUFBaGQsTUFBQSxXQUVNLElBQUlzQixPQUFPO2dCQUFBLElBQUE2YixNQUFBLE9BQUFuZ0Isa0JBQUEsMEJBQUFDLFlBQUEsWUFBQUMsSUFBQSxDQUFDLFNBQUFrZ0IsVUFBT3BhLE9BQU8sRUFBRXpCLE1BQU07a0JBQUEsSUFBQTdELFlBQUEsRUFBQUUsUUFBQSxFQUFBQyx1QkFBQSxFQUFBQyx5QkFBQSxFQUFBdWYsMEJBQUEsRUFBQUMsNEJBQUEsRUFBQUMsSUFBQTtrQkFBQSxPQUFBdGdCLFlBQUEsWUFBQWtCLElBQUEsV0FBQXFmLFVBQUE7b0JBQUEsa0JBQUFBLFVBQUEsQ0FBQW5mLElBQUEsR0FBQW1mLFVBQUEsQ0FBQTVqQixJQUFBO3NCQUFBO3dCQUNqQzhELFlBQVksR0FBR1ksWUFBSyxDQUFDQyxLQUFLLENBQUMsQ0FBQzt3QkFBQWlmLFVBQUEsQ0FBQW5mLElBQUE7d0JBQUFtZixVQUFBLENBQUE1akIsSUFBQTt3QkFBQSxPQUVUNEQsYUFBYSxDQUFDMEUsT0FBTyxDQUFDO3NCQUFBO3dCQUF2Q3RFLFFBQVEsR0FBQTRmLFVBQUEsQ0FBQTNkLElBQUE7d0JBQ1JoQyx1QkFBdUIsR0FBR0gsWUFBWSxDQUFDb0MsbUJBQW1CO3dCQUMxRGhDLHlCQUF5QixHQUFHVixLQUFLLENBQUMwQyxtQkFBbUI7d0JBQzNEOGMsT0FBSSxDQUFDcGUsYUFBYSxDQUFDQyxrQkFBUSxDQUFDQyxJQUFJLEVBQUVDLDBCQUFtQixDQUFDOGUsNEJBQTRCLEVBQUUsaUNBQWlDLEVBQUVsaUIsU0FBUyxFQUFFcUMsUUFBUSxFQUFFRSx5QkFBeUIsRUFBRVQsV0FBVyxFQUFFQyxNQUFNLEVBQUU3QyxTQUFTLEVBQUVBLFNBQVMsRUFBRWdELGNBQWMsRUFBRUksdUJBQXVCLENBQUM7d0JBQzFQbUYsT0FBTyxDQUFDLENBQUM7d0JBQUN3YSxVQUFBLENBQUE1akIsSUFBQTt3QkFBQTtzQkFBQTt3QkFBQTRqQixVQUFBLENBQUFuZixJQUFBO3dCQUFBa2YsSUFBQSxHQUFBQyxVQUFBO3dCQUVKM2YsMEJBQXVCLEdBQUdILFlBQVksQ0FBQ29DLG1CQUFtQjt3QkFDMURoQyw0QkFBeUIsR0FBR1YsS0FBSyxDQUFDMEMsbUJBQW1CO3dCQUMzRDhjLE9BQUksQ0FBQ3BlLGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQ3dCLEtBQUssRUFBRXRCLDBCQUFtQixDQUFDK2UseUJBQXlCLEVBQUUsOEJBQThCLEVBQUVuaUIsU0FBUyxFQUFFZCxTQUFTLEVBQUVxRCw0QkFBeUIsRUFBRVQsV0FBVyxFQUFFQyxNQUFNLEVBQUFpZ0IsSUFBQSxFQUFTOWlCLFNBQVMsRUFBRWdELGNBQWMsRUFBRUksMEJBQXVCLENBQUM7d0JBRWxQLElBQUksSUFBQTJGLGdDQUFvQixFQUFBK1osSUFBQSxFQUFRamhCLHFCQUFTLENBQUNtSCxxQkFBcUIsQ0FBQyxFQUFFOzBCQUNoRWxDLE1BQU0sQ0FBRSxJQUFJcEYsS0FBSyxDQUFDeWdCLE9BQUksQ0FBQ2xaLHVCQUF1QixDQUFDLENBQUM7d0JBQ2xEO3dCQUNBbkMsTUFBTSxDQUFBZ2MsSUFBTSxDQUFDO3NCQUFDO3NCQUFBO3dCQUFBLE9BQUFDLFVBQUEsQ0FBQXJkLElBQUE7b0JBQUE7a0JBQUEsR0FBQWlkLFNBQUE7Z0JBQUEsQ0FFakI7Z0JBQUEsaUJBQUFPLElBQUEsRUFBQUMsSUFBQTtrQkFBQSxPQUFBVCxNQUFBLENBQUE3a0IsS0FBQSxPQUFBRSxTQUFBO2dCQUFBO2NBQUEsSUFBQztZQUFBO1lBQUE7Y0FBQSxPQUFBd2tCLFVBQUEsQ0FBQTdjLElBQUE7VUFBQTtRQUFBLEdBQUF1YyxTQUFBO01BQUEsQ0FDSDtNQUFBLFNBL0NZUSxtQkFBbUJBLENBQUFXLElBQUEsRUFBQUMsSUFBQTtRQUFBLE9BQUFyQixvQkFBQSxDQUFBbmtCLEtBQUEsT0FBQUUsU0FBQTtNQUFBO01BQUEsT0FBbkIwa0IsbUJBQW1CO0lBQUE7SUFpRGhDO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUxFO0VBQUE7SUFBQXRoQixHQUFBO0lBQUFwQyxLQUFBO01BQUEsSUFBQXVrQixnQ0FBQSxPQUFBL2dCLGtCQUFBLDBCQUFBQyxZQUFBLFlBQUFDLElBQUEsQ0FNQSxTQUFBOGdCLFVBQTZDemlCLFNBQWlCLEVBQUUwaUIsc0JBQTBFO1FBQUEsSUFBQUMsdUJBQUE7VUFBQUMsT0FBQTtRQUFBLElBQUEvZ0IsS0FBQSxFQUFBNFIsTUFBQSxFQUFBbE4sc0JBQUEsRUFBQXpFLFdBQUEsRUFBQUcsYUFBQSxFQUFBQyxjQUFBLEVBQUFGLEdBQUEsRUFBQUQsTUFBQSxFQUFBNEUsT0FBQTtRQUFBLE9BQUFqRixZQUFBLFlBQUFrQixJQUFBLFdBQUFpZ0IsVUFBQTtVQUFBLGtCQUFBQSxVQUFBLENBQUEvZixJQUFBLEdBQUErZixVQUFBLENBQUF4a0IsSUFBQTtZQUFBO2NBQ2xJd0QsS0FBSyxHQUFHa0IsWUFBSyxDQUFDQyxLQUFLLENBQUMsQ0FBQztjQUMzQixJQUFJLENBQUNDLGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQ0MsSUFBSSxFQUFFQywwQkFBbUIsQ0FBQzBmLDBCQUEwQixFQUFFLCtCQUErQixFQUFFOWlCLFNBQVMsQ0FBQztjQUVySHlULE1BQU0sR0FBNkJpUCxzQkFBc0IsQ0FBekRqUCxNQUFNLEVBQUVsTixzQkFBc0IsR0FBS21jLHNCQUFzQixDQUFqRG5jLHNCQUFzQjtjQUFBLE1BRWxDLENBQUNrTixNQUFNLElBQUksQ0FBQ2xOLHNCQUFzQjtnQkFBQXNjLFVBQUEsQ0FBQXhrQixJQUFBO2dCQUFBO2NBQUE7Y0FDcEMsSUFBSSxDQUFDNEUsYUFBYSxDQUFDQyxrQkFBUSxDQUFDd0IsS0FBSyxFQUFFdEIsMEJBQW1CLENBQUMyZix5QkFBeUIsRUFDOUUsK0VBQStFLEVBQUUvaUIsU0FBUyxDQUFDO2NBQUMsTUFDeEYsSUFBSVksS0FBSyxDQUFDLGdEQUFnRCxDQUFDO1lBQUE7Y0FHN0RrQixXQUFXLE9BQUF4QyxNQUFBLENBQU9nRSxnQ0FBb0IsQ0FBQzBmLCtCQUErQixPQUFBMWpCLE1BQUEsQ0FBSSxJQUFJLENBQUNQLHdCQUF3QixDQUFDeUUsS0FBSyxPQUFBbEUsTUFBQSxDQUFJLElBQUksQ0FBQ1Asd0JBQXdCLENBQUMyRyxRQUFRLE9BQUFwRyxNQUFBLENBQUltVSxNQUFNLE9BQUFuVSxNQUFBLENBQUlVLFNBQVMsaUJBQUFWLE1BQUEsQ0FBYyxJQUFJLENBQUNQLHdCQUF3QixDQUFDeUIsU0FBUztjQUNuT3lCLGFBQWEsR0FBR3lCLGlCQUFLLENBQUNDLE1BQU0sQ0FBQyxDQUFDO2NBQ3BDLElBQUFDLDZCQUFpQixFQUFDM0IsYUFBYSxFQUFFO2dCQUMvQmdGLGdCQUFnQixFQUFFLENBQUNuSCxrQ0FBc0IsQ0FBQ0YsYUFBYSxDQUFDO2dCQUN4RGlFLE9BQU8sRUFBRSxJQUFJLENBQUM1RSxhQUFhLENBQUM2RSwwQkFBMEI7Z0JBQ3REQywwQkFBMEIsRUFBRSxJQUFJLENBQUM5RSxhQUFhLENBQUMrRSw0QkFBNEIsQ0FBQ2lmO2NBQzlFLENBQUMsQ0FBQztjQUVJL2dCLGNBQXlCLEdBQUFsRixhQUFBLEtBQVErRCxxQkFBUyxDQUFDb0csY0FBYztjQUMvRGpGLGNBQWMsQ0FBQ3BDLGtDQUFzQixDQUFDeUcsc0JBQXNCLENBQUMsR0FBR0Esc0JBQXNCO2NBQ3RGckUsY0FBYyxDQUFDcEMsa0NBQXNCLENBQUNGLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQ1gsYUFBYSxDQUFDVyxhQUFhO2NBRXZGLElBQUksQ0FBQytGLGlCQUFpQixDQUFDM0YsU0FBUyxFQUFFa0MsY0FBYyxDQUFDO2NBQ2pELElBQUksQ0FBQ29QLGtCQUFrQixDQUFDdFIsU0FBUyxFQUFFa0MsY0FBYyxDQUFDO2NBRTVDRixHQUFHLE1BQUExQyxNQUFBLENBQU0sSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQzBFLE1BQU0sRUFBQW5FLE1BQUEsQ0FBR3dDLFdBQVc7Y0FDM0RDLE1BQU0sR0FBRyxNQUFNO2NBQ2Y0RSxPQUEyQixHQUFHO2dCQUNsQ2pILE9BQU8sRUFBRXdDLGNBQWM7Z0JBQ3ZCSCxNQUFNLEVBQU5BLE1BQU07Z0JBQ05DLEdBQUcsRUFBSEEsR0FBRztnQkFDSG1DLE9BQU8sR0FBQXdlLHVCQUFBLEdBQUUsSUFBSSxDQUFDMWpCLGFBQWEsQ0FBQ21GLHFCQUFxQixjQUFBdWUsdUJBQUEsY0FBQUEsdUJBQUEsR0FBSSxJQUFJLENBQUMxakIsYUFBYSxDQUFDb0Ysb0JBQW9CLENBQUM0ZTtjQUMvRixDQUFDO2NBQUEsT0FBQUosVUFBQSxDQUFBcGUsTUFBQSxXQUVNLElBQUlzQixPQUFPO2dCQUFBLElBQUFtZCxNQUFBLE9BQUF6aEIsa0JBQUEsMEJBQUFDLFlBQUEsWUFBQUMsSUFBQSxDQUFDLFNBQUF3aEIsVUFBTzFiLE9BQU8sRUFBRXpCLE1BQU07a0JBQUEsSUFBQTdELFlBQUEsRUFBQUUsUUFBQSxFQUFBQyx1QkFBQSxFQUFBQyx5QkFBQSxFQUFBN0MsT0FBQSxFQUFBMGpCLDBCQUFBLEVBQUFDLDRCQUFBLEVBQUFDLElBQUE7a0JBQUEsT0FBQTVoQixZQUFBLFlBQUFrQixJQUFBLFdBQUEyZ0IsVUFBQTtvQkFBQSxrQkFBQUEsVUFBQSxDQUFBemdCLElBQUEsR0FBQXlnQixVQUFBLENBQUFsbEIsSUFBQTtzQkFBQTt3QkFDakM4RCxZQUFZLEdBQUdZLFlBQUssQ0FBQ0MsS0FBSyxDQUFDLENBQUM7d0JBQUF1Z0IsVUFBQSxDQUFBemdCLElBQUE7d0JBQUF5Z0IsVUFBQSxDQUFBbGxCLElBQUE7d0JBQUEsT0FFVDRELGFBQWEsQ0FBQzBFLE9BQU8sQ0FBQztzQkFBQTt3QkFBdkN0RSxRQUFRLEdBQUFraEIsVUFBQSxDQUFBamYsSUFBQTt3QkFDUmhDLHVCQUF1QixHQUFHSCxZQUFZLENBQUNvQyxtQkFBbUI7d0JBQzFEaEMseUJBQXlCLEdBQUdWLEtBQUssQ0FBQzBDLG1CQUFtQjt3QkFDbkQ3RSxPQUFPLEdBQUsyQyxRQUFRLENBQXBCM0MsT0FBTzt3QkFDZmtqQixPQUFJLENBQUM5YSxnQkFBZ0IsQ0FBQ3BJLE9BQU8sQ0FBQzt3QkFFOUIsSUFBSUEsT0FBTyxJQUFJQSxPQUFPLENBQUNJLGtDQUFzQixDQUFDQyxXQUFXLENBQUNnSyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUU7MEJBQ3hFNlksT0FBSSxDQUFDL2lCLFNBQVMsR0FBR0gsT0FBTyxDQUFDSSxrQ0FBc0IsQ0FBQ0MsV0FBVyxDQUFDZ0ssV0FBVyxDQUFDLENBQUMsQ0FBQzt3QkFDNUU7d0JBRUE2WSxPQUFJLENBQUMzZixhQUFhLENBQUNDLGtCQUFRLENBQUNDLElBQUksRUFBRUMsMEJBQW1CLENBQUNvZ0IsNEJBQTRCLEVBQUUsaUNBQWlDLEVBQUV4akIsU0FBUyxFQUFFcUMsUUFBUSxFQUFFRSx5QkFBeUIsRUFBRVQsV0FBVyxFQUFFQyxNQUFNLEVBQUU3QyxTQUFTLEVBQUVBLFNBQVMsRUFBRWdELGNBQWMsRUFBRUksdUJBQXVCLENBQUM7d0JBQzFQbUYsT0FBTyxDQUFDLENBQUM7d0JBQUM4YixVQUFBLENBQUFsbEIsSUFBQTt3QkFBQTtzQkFBQTt3QkFBQWtsQixVQUFBLENBQUF6Z0IsSUFBQTt3QkFBQXdnQixJQUFBLEdBQUFDLFVBQUE7d0JBRUpqaEIsMEJBQXVCLEdBQUdILFlBQVksQ0FBQ29DLG1CQUFtQjt3QkFDMURoQyw0QkFBeUIsR0FBR1YsS0FBSyxDQUFDMEMsbUJBQW1CO3dCQUMzRHFlLE9BQUksQ0FBQzNmLGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQ3dCLEtBQUssRUFBRXRCLDBCQUFtQixDQUFDMmYseUJBQXlCLEVBQUUsOEJBQThCLEVBQUUvaUIsU0FBUyxFQUFFZCxTQUFTLEVBQUVxRCw0QkFBeUIsRUFBRVQsV0FBVyxFQUFFQyxNQUFNLEVBQUF1aEIsSUFBQSxFQUFTcGtCLFNBQVMsRUFBRWdELGNBQWMsRUFBRUksMEJBQXVCLENBQUM7d0JBQUMsS0FFL08sSUFBQTJGLGdDQUFvQixFQUFBcWIsSUFBQSxFQUFRdmlCLHFCQUFTLENBQUNtSCxxQkFBcUIsQ0FBQzswQkFBQXFiLFVBQUEsQ0FBQWxsQixJQUFBOzBCQUFBO3dCQUFBO3dCQUM5RDJILE1BQU0sQ0FBQyxJQUFJcEYsS0FBSyxDQUFDZ2lCLE9BQUksQ0FBQ3phLHVCQUF1QixDQUFDLENBQUM7d0JBQUMsT0FBQW9iLFVBQUEsQ0FBQTllLE1BQUE7c0JBQUE7d0JBR2xEdUIsTUFBTSxDQUFBc2QsSUFBTSxDQUFDO3NCQUFDO3NCQUFBO3dCQUFBLE9BQUFDLFVBQUEsQ0FBQTNlLElBQUE7b0JBQUE7a0JBQUEsR0FBQXVlLFNBQUE7Z0JBQUEsQ0FFakI7Z0JBQUEsaUJBQUFNLElBQUEsRUFBQUMsSUFBQTtrQkFBQSxPQUFBUixNQUFBLENBQUFubUIsS0FBQSxPQUFBRSxTQUFBO2dCQUFBO2NBQUEsSUFBQztZQUFBO1lBQUE7Y0FBQSxPQUFBNGxCLFVBQUEsQ0FBQWplLElBQUE7VUFBQTtRQUFBLEdBQUE2ZCxTQUFBO01BQUEsQ0FDSDtNQUFBLFNBL0RZUSwrQkFBK0JBLENBQUFVLElBQUEsRUFBQUMsSUFBQTtRQUFBLE9BQUFwQixnQ0FBQSxDQUFBemxCLEtBQUEsT0FBQUUsU0FBQTtNQUFBO01BQUEsT0FBL0JnbUIsK0JBQStCO0lBQUE7SUFpRTVDO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7SUFKRTtFQUFBO0lBQUE1aUIsR0FBQTtJQUFBcEMsS0FBQTtNQUFBLElBQUE0bEIsc0JBQUEsT0FBQXBpQixrQkFBQSwwQkFBQUMsWUFBQSxZQUFBQyxJQUFBLENBS0EsU0FBQW1pQixVQUFtQ3ZkLHNCQUE4QjtRQUFBLElBQUF3ZCx1QkFBQTtVQUFBQyxPQUFBO1FBQUEsSUFBQW5pQixLQUFBLEVBQUE3QixTQUFBLEVBQUE4QixXQUFBLEVBQUFHLGFBQUEsRUFBQUMsY0FBQSxFQUFBRixHQUFBLEVBQUFELE1BQUEsRUFBQTRFLE9BQUE7UUFBQSxPQUFBakYsWUFBQSxZQUFBa0IsSUFBQSxXQUFBcWhCLFVBQUE7VUFBQSxrQkFBQUEsVUFBQSxDQUFBbmhCLElBQUEsR0FBQW1oQixVQUFBLENBQUE1bEIsSUFBQTtZQUFBO2NBQ3pEd0QsS0FBSyxHQUFHa0IsWUFBSyxDQUFDQyxLQUFLLENBQUMsQ0FBQztjQUNyQmhELFNBQVMsR0FBRyxJQUFBd0YsWUFBTSxFQUFDLENBQUM7Y0FDMUIsSUFBSSxDQUFDdkMsYUFBYSxDQUFDQyxrQkFBUSxDQUFDQyxJQUFJLEVBQUVDLDBCQUFtQixDQUFDOGdCLDRCQUE0QixFQUFFLGtDQUFrQyxFQUFFbGtCLFNBQVMsQ0FBQztjQUU1SDhCLFdBQVcsT0FBQXhDLE1BQUEsQ0FBT2dFLGdDQUFvQixDQUFDc1AseUJBQXlCLE9BQUF0VCxNQUFBLENBQUksSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQ3lFLEtBQUssaUJBQUFsRSxNQUFBLENBQWMsSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQzJHLFFBQVE7Y0FDM0p6RCxhQUFhLEdBQUd5QixpQkFBSyxDQUFDQyxNQUFNLENBQUMsQ0FBQztjQUNwQyxJQUFBQyw2QkFBaUIsRUFBQzNCLGFBQWEsRUFBRTtnQkFDL0I0QixPQUFPLEVBQUUsSUFBSSxDQUFDNUUsYUFBYSxDQUFDNkUsMEJBQTBCO2dCQUN0REMsMEJBQTBCLEVBQUUsSUFBSSxDQUFDOUUsYUFBYSxDQUFDK0UsNEJBQTRCLENBQUNtZ0I7Y0FDOUUsQ0FBQyxDQUFDO2NBRUlqaUIsY0FBeUIsR0FBQWxGLGFBQUEsS0FBUStELHFCQUFTLENBQUNvRyxjQUFjO2NBQy9EakYsY0FBYyxDQUFDcEMsa0NBQXNCLENBQUN5RyxzQkFBc0IsQ0FBQyxHQUFHQSxzQkFBc0I7Y0FDdEZyRSxjQUFjLENBQUNwQyxrQ0FBc0IsQ0FBQ0YsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDWCxhQUFhLENBQUNXLGFBQWE7Y0FFdkYsSUFBSSxDQUFDK0YsaUJBQWlCLENBQUMzRixTQUFTLEVBQUVrQyxjQUFjLENBQUM7Y0FFM0NGLEdBQUcsTUFBQTFDLE1BQUEsQ0FBTSxJQUFJLENBQUNQLHdCQUF3QixDQUFDMEUsTUFBTSxFQUFBbkUsTUFBQSxDQUFHd0MsV0FBVztjQUMzREMsTUFBTSxHQUFHLEtBQUs7Y0FDZDRFLE9BQTJCLEdBQUc7Z0JBQ2xDakgsT0FBTyxFQUFFd0MsY0FBYztnQkFDdkJILE1BQU0sRUFBTkEsTUFBTTtnQkFDTkMsR0FBRyxFQUFIQSxHQUFHO2dCQUNIbUMsT0FBTyxHQUFBNGYsdUJBQUEsR0FBRSxJQUFJLENBQUM5a0IsYUFBYSxDQUFDbUYscUJBQXFCLGNBQUEyZix1QkFBQSxjQUFBQSx1QkFBQSxHQUFJLElBQUksQ0FBQzlrQixhQUFhLENBQUNvRixvQkFBb0IsQ0FBQzhmO2NBQy9GLENBQUM7Y0FBQSxPQUFBRixVQUFBLENBQUF4ZixNQUFBLFdBRU0sSUFBSXNCLE9BQU87Z0JBQUEsSUFBQXFlLE1BQUEsT0FBQTNpQixrQkFBQSwwQkFBQUMsWUFBQSxZQUFBQyxJQUFBLENBQUMsU0FBQTBpQixVQUFPNWMsT0FBTyxFQUFFekIsTUFBTTtrQkFBQSxJQUFBN0QsWUFBQSxFQUFBRSxRQUFBLEVBQUFDLHVCQUFBLEVBQUFFLElBQUEsRUFBQTlDLE9BQUEsRUFBQTZDLHlCQUFBLEVBQUEraEIsMEJBQUEsRUFBQUMsNEJBQUEsRUFBQUMsSUFBQTtrQkFBQSxPQUFBOWlCLFlBQUEsWUFBQWtCLElBQUEsV0FBQTZoQixVQUFBO29CQUFBLGtCQUFBQSxVQUFBLENBQUEzaEIsSUFBQSxHQUFBMmhCLFVBQUEsQ0FBQXBtQixJQUFBO3NCQUFBO3dCQUNqQzhELFlBQVksR0FBR1ksWUFBSyxDQUFDQyxLQUFLLENBQUMsQ0FBQzt3QkFBQXloQixVQUFBLENBQUEzaEIsSUFBQTt3QkFBQTJoQixVQUFBLENBQUFwbUIsSUFBQTt3QkFBQSxPQUVUNEQsYUFBYSxDQUFDMEUsT0FBTyxDQUFDO3NCQUFBO3dCQUF2Q3RFLFFBQVEsR0FBQW9pQixVQUFBLENBQUFuZ0IsSUFBQTt3QkFDUmhDLHVCQUF1QixHQUFHSCxZQUFZLENBQUNvQyxtQkFBbUI7d0JBQ3hEL0IsSUFBSSxHQUFjSCxRQUFRLENBQTFCRyxJQUFJLEVBQUU5QyxPQUFPLEdBQUsyQyxRQUFRLENBQXBCM0MsT0FBTzt3QkFDckJza0IsT0FBSSxDQUFDbGMsZ0JBQWdCLENBQUNwSSxPQUFPLENBQUM7d0JBQ3hCNkMseUJBQXlCLEdBQUdWLEtBQUssQ0FBQzBDLG1CQUFtQjt3QkFDM0R5ZixPQUFJLENBQUMvZ0IsYUFBYSxDQUFDQyxrQkFBUSxDQUFDQyxJQUFJLEVBQUVDLDBCQUFtQixDQUFDc2hCLDhCQUE4QixFQUFFLG9DQUFvQyxFQUFFMWtCLFNBQVMsRUFBRXFDLFFBQVEsRUFBRUUseUJBQXlCLEVBQUVULFdBQVcsRUFBRUMsTUFBTSxFQUFFN0MsU0FBUyxFQUFFQSxTQUFTLEVBQUVnRCxjQUFjLEVBQUVJLHVCQUF1QixDQUFDO3dCQUMvUG1GLE9BQU8sQ0FBQ2pGLElBQUksQ0FBQzt3QkFBQ2lpQixVQUFBLENBQUFwbUIsSUFBQTt3QkFBQTtzQkFBQTt3QkFBQW9tQixVQUFBLENBQUEzaEIsSUFBQTt3QkFBQTBoQixJQUFBLEdBQUFDLFVBQUE7d0JBRVJuaUIsMEJBQXVCLEdBQUdILFlBQVksQ0FBQ29DLG1CQUFtQjt3QkFDMURoQyw0QkFBeUIsR0FBR1YsS0FBSyxDQUFDMEMsbUJBQW1CO3dCQUMzRHlmLE9BQUksQ0FBQy9nQixhQUFhLENBQUNDLGtCQUFRLENBQUN3QixLQUFLLEVBQUV0QiwwQkFBbUIsQ0FBQ3VoQiwyQkFBMkIsRUFBRSxpQ0FBaUMsRUFBRTNrQixTQUFTLEVBQUVkLFNBQVMsRUFBRXFELDRCQUF5QixFQUFFVCxXQUFXLEVBQUVDLE1BQU0sRUFBQXlpQixJQUFBLEVBQVN0bEIsU0FBUyxFQUFFZ0QsY0FBYyxFQUFFSSwwQkFBdUIsQ0FBQzt3QkFBQyxLQUNwUCxJQUFBMkYsZ0NBQW9CLEVBQUF1YyxJQUFBLEVBQVF6akIscUJBQVMsQ0FBQ21ILHFCQUFxQixDQUFDOzBCQUFBdWMsVUFBQSxDQUFBcG1CLElBQUE7MEJBQUE7d0JBQUE7d0JBQzlEMkgsTUFBTSxDQUFDLElBQUlwRixLQUFLLENBQUNvakIsT0FBSSxDQUFDN2IsdUJBQXVCLENBQUMsQ0FBQzt3QkFBQyxPQUFBc2MsVUFBQSxDQUFBaGdCLE1BQUE7c0JBQUE7d0JBR2xEdUIsTUFBTSxDQUFBd2UsSUFBTSxDQUFDO3NCQUFDO3NCQUFBO3dCQUFBLE9BQUFDLFVBQUEsQ0FBQTdmLElBQUE7b0JBQUE7a0JBQUEsR0FBQXlmLFNBQUE7Z0JBQUEsQ0FFakI7Z0JBQUEsaUJBQUFPLElBQUEsRUFBQUMsSUFBQTtrQkFBQSxPQUFBVCxNQUFBLENBQUFybkIsS0FBQSxPQUFBRSxTQUFBO2dCQUFBO2NBQUEsSUFBQztZQUFBO1lBQUE7Y0FBQSxPQUFBZ25CLFVBQUEsQ0FBQXJmLElBQUE7VUFBQTtRQUFBLEdBQUFrZixTQUFBO01BQUEsQ0FDSDtNQUFBLFNBaERZSyxxQkFBcUJBLENBQUFXLElBQUE7UUFBQSxPQUFBakIsc0JBQUEsQ0FBQTltQixLQUFBLE9BQUFFLFNBQUE7TUFBQTtNQUFBLE9BQXJCa25CLHFCQUFxQjtJQUFBO0lBa0RsQztBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQU5FO0VBQUE7SUFBQTlqQixHQUFBO0lBQUFwQyxLQUFBO01BQUEsSUFBQThtQixnQkFBQSxPQUFBdGpCLGtCQUFBLDBCQUFBQyxZQUFBLFlBQUFDLElBQUEsQ0FPQSxTQUFBcWpCLFVBQTZCaGxCLFNBQWlCLEVBQUVpbEIsU0FBaUIsRUFBRTFlLHNCQUE4QjtRQUFBLElBQUEyZSx1QkFBQTtVQUFBQyxPQUFBO1FBQUEsSUFBQXRqQixLQUFBLEVBQUFDLFdBQUEsRUFBQUcsYUFBQSxFQUFBQyxjQUFBLEVBQUFGLEdBQUEsRUFBQUQsTUFBQSxFQUFBNEUsT0FBQTtRQUFBLE9BQUFqRixZQUFBLFlBQUFrQixJQUFBLFdBQUF3aUIsVUFBQTtVQUFBLGtCQUFBQSxVQUFBLENBQUF0aUIsSUFBQSxHQUFBc2lCLFVBQUEsQ0FBQS9tQixJQUFBO1lBQUE7Y0FDekZ3RCxLQUFLLEdBQUdrQixZQUFLLENBQUNDLEtBQUssQ0FBQyxDQUFDO2NBQzNCLElBQUksQ0FBQ0MsYUFBYSxDQUFDQyxrQkFBUSxDQUFDQyxJQUFJLEVBQUVDLDBCQUFtQixDQUFDaWlCLHNCQUFzQixFQUFFLDJCQUEyQixFQUFFcmxCLFNBQVMsQ0FBQztjQUUvRzhCLFdBQVcsT0FBQXhDLE1BQUEsQ0FBT2dFLGdDQUFvQixDQUFDc1AseUJBQXlCLE9BQUF0VCxNQUFBLENBQUksSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQ3lFLEtBQUssaUJBQUFsRSxNQUFBLENBQWMsSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQzJHLFFBQVEscUJBQUFwRyxNQUFBLENBQWtCVSxTQUFTO2NBQ3RMaUMsYUFBYSxHQUFHeUIsaUJBQUssQ0FBQ0MsTUFBTSxDQUFDLENBQUM7Y0FDcEMsSUFBQUMsNkJBQWlCLEVBQUMzQixhQUFhLEVBQUU7Z0JBQy9CNEIsT0FBTyxFQUFFLElBQUksQ0FBQzVFLGFBQWEsQ0FBQzZFLDBCQUEwQjtnQkFDdERDLDBCQUEwQixFQUFFLElBQUksQ0FBQzlFLGFBQWEsQ0FBQytFLDRCQUE0QixDQUFDc2hCO2NBQzlFLENBQUMsQ0FBQztjQUVJcGpCLGNBQXlCLEdBQUFsRixhQUFBLEtBQVErRCxxQkFBUyxDQUFDb0csY0FBYztjQUMvRGpGLGNBQWMsQ0FBQ3BDLGtDQUFzQixDQUFDeUcsc0JBQXNCLENBQUMsR0FBR0Esc0JBQXNCO2NBQ3RGckUsY0FBYyxDQUFDcEMsa0NBQXNCLENBQUNGLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQ1gsYUFBYSxDQUFDVyxhQUFhO2NBRXZGLElBQUksQ0FBQytGLGlCQUFpQixDQUFDM0YsU0FBUyxFQUFFa0MsY0FBYyxDQUFDO2NBRTNDRixHQUFHLE1BQUExQyxNQUFBLENBQU0sSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQzBFLE1BQU0sRUFBQW5FLE1BQUEsQ0FBR3dDLFdBQVc7Y0FDM0RDLE1BQU0sR0FBRyxNQUFNO2NBQ2Y0RSxPQUEyQixHQUFHO2dCQUNsQ25FLElBQUksRUFBRThMLElBQUksQ0FBQ0MsU0FBUyxDQUFDO2tCQUFFMFcsU0FBUyxFQUFUQTtnQkFBVSxDQUFDLENBQUM7Z0JBQ25DdmxCLE9BQU8sRUFBRXdDLGNBQWM7Z0JBQ3ZCSCxNQUFNLEVBQU5BLE1BQU07Z0JBQ05DLEdBQUcsRUFBSEEsR0FBRztnQkFDSG1DLE9BQU8sR0FBQStnQix1QkFBQSxHQUFFLElBQUksQ0FBQ2ptQixhQUFhLENBQUNtRixxQkFBcUIsY0FBQThnQix1QkFBQSxjQUFBQSx1QkFBQSxHQUFJLElBQUksQ0FBQ2ptQixhQUFhLENBQUNvRixvQkFBb0IsQ0FBQ2loQjtjQUMvRixDQUFDO2NBQUEsT0FBQUYsVUFBQSxDQUFBM2dCLE1BQUEsV0FFTSxJQUFJc0IsT0FBTztnQkFBQSxJQUFBd2YsTUFBQSxPQUFBOWpCLGtCQUFBLDBCQUFBQyxZQUFBLFlBQUFDLElBQUEsQ0FBQyxTQUFBNmpCLFVBQU8vZCxPQUFPLEVBQUV6QixNQUFNO2tCQUFBLElBQUE3RCxZQUFBLEVBQUFFLFFBQUEsRUFBQUMsdUJBQUEsRUFBQTVDLE9BQUEsRUFBQTZDLHlCQUFBLEVBQUFrakIsMEJBQUEsRUFBQUMsNEJBQUEsRUFBQUMsSUFBQTtrQkFBQSxPQUFBamtCLFlBQUEsWUFBQWtCLElBQUEsV0FBQWdqQixVQUFBO29CQUFBLGtCQUFBQSxVQUFBLENBQUE5aUIsSUFBQSxHQUFBOGlCLFVBQUEsQ0FBQXZuQixJQUFBO3NCQUFBO3dCQUNqQzhELFlBQVksR0FBR1ksWUFBSyxDQUFDQyxLQUFLLENBQUMsQ0FBQzt3QkFBQTRpQixVQUFBLENBQUE5aUIsSUFBQTt3QkFBQThpQixVQUFBLENBQUF2bkIsSUFBQTt3QkFBQSxPQUVUNEQsYUFBYSxDQUFDMEUsT0FBTyxDQUFDO3NCQUFBO3dCQUF2Q3RFLFFBQVEsR0FBQXVqQixVQUFBLENBQUF0aEIsSUFBQTt3QkFDUmhDLHVCQUF1QixHQUFHSCxZQUFZLENBQUNvQyxtQkFBbUI7d0JBQ3hEN0UsT0FBTyxHQUFLMkMsUUFBUSxDQUFwQjNDLE9BQU87d0JBQ2Z5bEIsT0FBSSxDQUFDcmQsZ0JBQWdCLENBQUNwSSxPQUFPLENBQUM7d0JBQ3hCNkMseUJBQXlCLEdBQUdWLEtBQUssQ0FBQzBDLG1CQUFtQjt3QkFDM0Q0Z0IsT0FBSSxDQUFDbGlCLGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQ0MsSUFBSSxFQUFFQywwQkFBbUIsQ0FBQ3lpQix3QkFBd0IsRUFBRSw2QkFBNkIsRUFBRTdsQixTQUFTLEVBQUVxQyxRQUFRLEVBQUVFLHlCQUF5QixFQUFFVCxXQUFXLEVBQUVDLE1BQU0sRUFBRTdDLFNBQVMsRUFBRUEsU0FBUyxFQUFFZ0QsY0FBYyxFQUFFSSx1QkFBdUIsQ0FBQzt3QkFDbFBtRixPQUFPLENBQUMsQ0FBQzt3QkFBQ21lLFVBQUEsQ0FBQXZuQixJQUFBO3dCQUFBO3NCQUFBO3dCQUFBdW5CLFVBQUEsQ0FBQTlpQixJQUFBO3dCQUFBNmlCLElBQUEsR0FBQUMsVUFBQTt3QkFFSnRqQiwwQkFBdUIsR0FBR0gsWUFBWSxDQUFDb0MsbUJBQW1CO3dCQUMxRGhDLDRCQUF5QixHQUFHVixLQUFLLENBQUMwQyxtQkFBbUI7d0JBQzNENGdCLE9BQUksQ0FBQ2xpQixhQUFhLENBQUNDLGtCQUFRLENBQUN3QixLQUFLLEVBQUV0QiwwQkFBbUIsQ0FBQzBpQixxQkFBcUIsRUFBRSwwQkFBMEIsRUFBRTlsQixTQUFTLEVBQUVkLFNBQVMsRUFBRXFELDRCQUF5QixFQUFFVCxXQUFXLEVBQUVDLE1BQU0sRUFBQTRqQixJQUFBLEVBQVN6bUIsU0FBUyxFQUFFZ0QsY0FBYyxFQUFFSSwwQkFBdUIsQ0FBQzt3QkFBQyxLQUN2TyxJQUFBMkYsZ0NBQW9CLEVBQUEwZCxJQUFBLEVBQVE1a0IscUJBQVMsQ0FBQ21ILHFCQUFxQixDQUFDOzBCQUFBMGQsVUFBQSxDQUFBdm5CLElBQUE7MEJBQUE7d0JBQUE7d0JBQzlEMkgsTUFBTSxDQUFDLElBQUlwRixLQUFLLENBQUN1a0IsT0FBSSxDQUFDaGQsdUJBQXVCLENBQUMsQ0FBQzt3QkFBQyxPQUFBeWQsVUFBQSxDQUFBbmhCLE1BQUE7c0JBQUE7d0JBR2xEdUIsTUFBTSxDQUFBMmYsSUFBTSxDQUFDO3NCQUFDO3NCQUFBO3dCQUFBLE9BQUFDLFVBQUEsQ0FBQWhoQixJQUFBO29CQUFBO2tCQUFBLEdBQUE0Z0IsU0FBQTtnQkFBQSxDQUVqQjtnQkFBQSxpQkFBQU8sSUFBQSxFQUFBQyxJQUFBO2tCQUFBLE9BQUFULE1BQUEsQ0FBQXhvQixLQUFBLE9BQUFFLFNBQUE7Z0JBQUE7Y0FBQSxJQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUFtb0IsVUFBQSxDQUFBeGdCLElBQUE7VUFBQTtRQUFBLEdBQUFvZ0IsU0FBQTtNQUFBLENBQ0g7TUFBQSxTQWhEWU0sZUFBZUEsQ0FBQVcsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUE7UUFBQSxPQUFBcEIsZ0JBQUEsQ0FBQWhvQixLQUFBLE9BQUFFLFNBQUE7TUFBQTtNQUFBLE9BQWZxb0IsZUFBZTtJQUFBO0lBa0Q1QjtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBYkU7RUFBQTtJQUFBamxCLEdBQUE7SUFBQXBDLEtBQUEsRUFjQSxTQUFRZ0YsYUFBYUEsQ0FBQ21qQixRQUFrQixFQUFFQyxrQkFBdUMsRUFBRUMsV0FBbUIsRUFBRXRtQixTQUFrQixFQUFFcUMsUUFBNkIsRUFBRUUseUJBQWtDLEVBQUVULFdBQW9CLEVBQUVDLE1BQWUsRUFBRW1QLEtBQWUsRUFBRXFWLGNBQW9CLEVBQUVya0IsY0FBb0IsRUFBRUksdUJBQWdDLEVBQVE7TUFBQSxJQUFBa2tCLFNBQUEsRUFBQUMsVUFBQSxFQUFBQyxVQUFBO01BQUU7TUFDM1UsSUFBSSxDQUFDLElBQUksQ0FBQ3RuQixNQUFNLEVBQUU7UUFDaEI7TUFDRjtNQUNBLElBQUk4UixLQUFLLEVBQUU7UUFDVHlWLGtDQUFnQixDQUFDQyw2QkFBNkIsQ0FBQzFWLEtBQUssQ0FBQztNQUN2RDtNQUVBLElBQUkyVix1QkFBdUIsR0FBRzNuQixTQUFTO01BQ3ZDLElBQUlxbkIsY0FBYyxFQUFFO1FBQ2xCTSx1QkFBdUIsR0FBQTdwQixhQUFBLEtBQVF1cEIsY0FBYyxDQUFFO1FBQy9DLElBQUlNLHVCQUF1QixDQUFDOVksaUJBQWlCLEVBQUU7VUFDN0M0WSxrQ0FBZ0IsQ0FBQ0csNEJBQTRCLENBQUNELHVCQUF1QixDQUFDOVksaUJBQWlCLENBQUM7UUFDMUY7UUFDQSxJQUFJOFksdUJBQXVCLENBQUNFLGVBQWUsRUFBRTtVQUMzQ0osa0NBQWdCLENBQUNLLG9CQUFvQixDQUFDSCx1QkFBdUIsQ0FBQ0UsZUFBZSxDQUFDO1FBQ2hGO1FBQ0FKLGtDQUFnQixDQUFDTSxnQkFBZ0IsQ0FBQ0osdUJBQXVCLENBQUM7TUFDNUQ7TUFFQSxJQUFJSyx1QkFBdUIsR0FBR2hvQixTQUFTO01BQ3ZDLElBQUlpb0IsZ0JBQXFCLEdBQUdqb0IsU0FBUyxDQUFDLENBQUM7TUFDdkMsSUFBSWdELGNBQWMsRUFBRTtRQUNsQmdsQix1QkFBdUIsR0FBQWxxQixhQUFBLEtBQVFrRixjQUFjLENBQUU7UUFDL0N5a0Isa0NBQWdCLENBQUNTLHNDQUFzQyxDQUFDRix1QkFBdUIsQ0FBQztRQUVoRixJQUFJaGxCLGNBQWMsQ0FBQ3BDLGtDQUFzQixDQUFDeUcsc0JBQXNCLENBQUMsRUFBRTtVQUNqRSxJQUFJa0ksTUFBTSxDQUFDQyxRQUFRLElBQUlELE1BQU0sQ0FBQzRZLElBQUksRUFBRTtZQUNsQyxJQUFJO2NBQ0YsSUFBTTNOLEtBQUssR0FBR3hYLGNBQWMsQ0FBQ3BDLGtDQUFzQixDQUFDeUcsc0JBQXNCLENBQUM7Y0FDM0UsSUFBTStnQixPQUFPLEdBQUc1TixLQUFLLENBQUM2TixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ25DLElBQU0va0IsSUFBSSxHQUFHaU0sTUFBTSxDQUFDNFksSUFBSSxDQUFDQyxPQUFPLENBQUM7Y0FDakMsSUFBTUUsUUFBUSxHQUFHbFosSUFBSSxDQUFDbVosS0FBSyxDQUFDamxCLElBQUksQ0FBQztjQUNqQyxJQUFNa2xCLFdBQVcsR0FBR0YsUUFBUSxDQUFDLGFBQWEsQ0FBQztjQUMzQ0wsZ0JBQWdCLEdBQUc7Z0JBQ2pCUSxHQUFHLEVBQUVILFFBQVEsQ0FBQyxLQUFLLENBQUM7Z0JBQ3BCSSxHQUFHLEVBQUVKLFFBQVEsQ0FBQyxLQUFLO2NBQ3JCLENBQUM7Y0FFRCxJQUFJRSxXQUFXLEVBQUU7Z0JBQ2YsSUFBTUcsZUFBZSxHQUFHdlosSUFBSSxDQUFDbVosS0FBSyxDQUFDQyxXQUFXLENBQUM7Z0JBQy9DZixrQ0FBZ0IsQ0FBQ0csNEJBQTRCLENBQUNlLGVBQWUsQ0FBQztnQkFDOURWLGdCQUFnQixDQUFDTyxXQUFXLEdBQUdHLGVBQWU7Y0FDaEQ7WUFDRixDQUFDLENBQUMsT0FBQUMsT0FBQSxFQUFNO2NBQ047WUFBQTtVQUVKO1FBQ0Y7TUFDRjtNQUVBLElBQU1DLFVBQVUsR0FBRztRQUNqQkMsU0FBUyxFQUFFaG9CLFNBQVM7UUFDcEJpb0IsTUFBTSxFQUFFNWxCLFFBQVEsYUFBUkEsUUFBUSx1QkFBUkEsUUFBUSxDQUFFRyxJQUFJLENBQUN5bEIsTUFBTTtRQUM3QkMseUJBQXlCLEVBQUUzbEIseUJBQXlCO1FBQ3BENGxCLHVCQUF1QixFQUFFN2xCLHVCQUF1QjtRQUNoRDhsQixhQUFhLEVBQUUvbEIsUUFBUSxhQUFSQSxRQUFRLHVCQUFSQSxRQUFRLENBQUUzQyxPQUFPLENBQUNxQixxQkFBUyxDQUFDc25CLGFBQWEsQ0FBQztRQUN6REMsV0FBVyxFQUFFeG1CLFdBQVc7UUFDeEJ5bUIsYUFBYSxFQUFFeG1CLE1BQU07UUFDckJ5bUIsa0JBQWtCLEVBQUVubUIsUUFBUSxHQUFHQSxRQUFRLENBQUM0SCxNQUFNLEdBQUdpSCxLQUFLLElBQUFzVixTQUFBLEdBQUl0VixLQUFLLENBQVM3TyxRQUFRLGNBQUFta0IsU0FBQSx1QkFBdkJBLFNBQUEsQ0FBeUJ2YyxNQUFNLEdBQUcvSyxTQUFTO1FBQUU7O1FBRXRHdXBCLGdCQUFnQixFQUFFdlgsS0FBSyxHQUFHLEVBQUF1VixVQUFBLEdBQUN2VixLQUFLLENBQVM3TyxRQUFRLGNBQUFva0IsVUFBQSx1QkFBdkJBLFVBQUEsQ0FBeUJqa0IsSUFBSSxLQUFJME8sS0FBSyxHQUFHaFMsU0FBUztRQUFFO1FBQzlFd3BCLGNBQWMsRUFBRTdCLHVCQUF1QjtRQUN2QzhCLGNBQWMsRUFBRXpCLHVCQUF1QjtRQUN2QzBCLGlCQUFpQixFQUFFMVgsS0FBSyxJQUFBd1YsVUFBQSxHQUFJeFYsS0FBSyxDQUFTN08sUUFBUSxjQUFBcWtCLFVBQUEsZ0JBQUFBLFVBQUEsR0FBdkJBLFVBQUEsQ0FBeUJobkIsT0FBTyxjQUFBZ25CLFVBQUEsdUJBQWhDQSxVQUFBLENBQWtDbUMsU0FBUyxHQUFHM3BCLFNBQVM7UUFBRTtRQUNwRjRwQixnQkFBZ0IsRUFBRTNCO01BQ3BCLENBQUM7TUFDRCxJQUFJLENBQUMvbkIsTUFBTSxDQUFDaVosR0FBRyxDQUFDK04sUUFBUSxFQUFFQyxrQkFBa0IsRUFBRTBCLFVBQVUsRUFBRXpCLFdBQVcsQ0FBQztJQUN4RTtFQUFDO0lBQUFqbUIsR0FBQTtJQUFBcEMsS0FBQSxFQVNELFNBQVEwSCxpQkFBaUJBLENBQUMzRixTQUE2QixFQUFFa0MsY0FBeUIsRUFBUTtNQUN4RixJQUFJLENBQUM2bUIsa0JBQWtCLENBQUMsSUFBSSxDQUFDbHBCLFNBQVMsRUFBRXFDLGNBQWMsQ0FBQztNQUN2RCxJQUFBZ0Msc0NBQW9CLEVBQUMsSUFBSSxDQUFDL0MsV0FBVyxFQUFFZSxjQUFjLENBQUM7TUFDdEQsSUFBSSxDQUFDOG1CLHdCQUF3QixDQUFDaHBCLFNBQVMsRUFBRWtDLGNBQWMsQ0FBQztJQUMxRDtFQUFDO0FBQUE7QUFBQTlHLElBQUEsR0FudURrQnlELEdBQUc7QUFBQSxJQUFBekIsZ0JBQUEsYUFBSHlCLEdBQUcsaUNBQzZDO0VBQ2pFb0YsYUFBYSxFQUFFLE1BQU07RUFDckJpRCxhQUFhLEVBQUUsS0FBSztFQUNwQm9DLFlBQVksRUFBRSxLQUFLO0VBQ25CMEgsV0FBVyxFQUFFLEtBQUs7RUFDbEI4QyxZQUFZLEVBQUUsS0FBSztFQUNuQi9JLHFCQUFxQixFQUFFLEtBQUs7RUFDNUJxQix3QkFBd0IsRUFBRSxLQUFLO0VBQy9CMEssc0JBQXNCLEVBQUUsS0FBSztFQUM3QjJCLG1CQUFtQixFQUFFLEtBQUs7RUFDMUJ5QixrQkFBa0IsRUFBRSxLQUFLO0VBQ3pCcUQsZUFBZSxFQUFFLElBQUk7RUFDckJzQixvQkFBb0IsRUFBRSxJQUFJO0VBQzFCc0IsZ0NBQWdDLEVBQUUsS0FBSztFQUN2Q3JTLG9CQUFvQixFQUFFLEtBQUs7RUFDM0I2VCxtQkFBbUIsRUFBRSxJQUFJO0VBQ3pCdE0sNkJBQTZCLEVBQUUsS0FBSztFQUNwQzZHLHdCQUF3QixFQUFFLEtBQUs7RUFDL0IrRywrQkFBK0IsRUFBRSxLQUFLO0VBQ3RDa0IscUJBQXFCLEVBQUUsS0FBSztFQUM1Qm1CLGVBQWUsRUFBRTtBQUNuQixDQUFDO0FBQUEsSUFBQWxvQixnQkFBQSxhQXRCa0J5QixHQUFHLDBCQXdCbUM7RUFDdkRlLGFBQWEsRUFBRSxJQUFBNEYsWUFBTSxFQUFDLENBQUMsQ0FBQ3lqQixTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUN2Q0Msc0JBQXNCLEVBQUUsRUFBRTtFQUMxQkMsdUNBQXVDLEVBQUUsS0FBSztFQUM5QzNmLHNCQUFzQixFQUFFLElBQUk7RUFDNUIxRiwwQkFBMEIsRUFBRSxDQUFDO0VBQzdCTSxxQkFBcUIsRUFBRWxGLFNBQVM7RUFDaENtRixvQkFBb0IsRUFBRXhGLElBQUcsQ0FBQ3VxQiwyQkFBMkI7RUFDckQvaEIsaUNBQWlDLEVBQUUsS0FBSztFQUN4Q3JELDRCQUE0QixFQUFFcWxCLDREQUE2QjtFQUMzRGxvQixXQUFXLEVBQUU7QUFDZixDQUFDIiwiaWdub3JlTGlzdCI6W119
|
|
2730
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfRW51bXMiLCJyZXF1aXJlIiwiX2F4aW9zIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9heGlvc1JldHJ5SGFuZGxlciIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX0Jyb3dzZXJJbmZvIiwiX0NvbnN0YW50cyIsIl9DdXN0b21Db250ZXh0RGF0YSIsIl9EZXZpY2VJbmZvIiwiX2VuY0hleCIsIl9Mb2NhbGVzIiwiX0xvZ0xldmVsIiwiX0xvZ2dpbmdTYW5pdGl6ZXIiLCJfT1NJbmZvIiwiX09tbmljaGFubmVsRW5kcG9pbnRzIiwiX09tbmljaGFubmVsSFRUUEhlYWRlcnMiLCJfc2hhIiwiX1RpbWVyIiwiX2h0dHBIZWFkZXJzVXRpbHMiLCJfZW5kcG9pbnRzQ3JlYXRvcnMiLCJfaXNFeHBlY3RlZEF4aW9zRXJyb3IiLCJfU2Vzc2lvbkluaXRSZXRyeUhhbmRsZXIiLCJfdXVpZCIsIl93YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlncyIsIl9TREsiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJfdHlwZW9mMyIsImhhcyIsImdldCIsInNldCIsIl90MjEiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9uIiwiRiIsInMiLCJkb25lIiwidmFsdWUiLCJUeXBlRXJyb3IiLCJhIiwidSIsIm5leHQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIlNESyIsImV4cG9ydHMiLCJvbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24iLCJfdGhpcyIsImNvbmZpZ3VyYXRpb24iLCJ1bmRlZmluZWQiLCJkZWZhdWx0Q29uZmlndXJhdGlvbiIsImxvZ2dlciIsIl9jbGFzc0NhbGxDaGVjazIiLCJjb25jYXQiLCJTREtFcnJvciIsIkNsaWVudEhUVFBUaW1lb3V0RXJyb3JOYW1lIiwiQ2xpZW50SFRUUFRpbWVvdXRFcnJvck1lc3NhZ2UiLCJoZWFkZXJzIiwiYXV0aGNvZGVub25jZSIsImF1dGhDb2RlTm9uY2UiLCJzZXNzaW9uSWQiLCJPbW5pY2hhbm5lbEhUVFBIZWFkZXJzIiwib2NTZXNzaW9uSWQiLCJyZXF1ZXN0SWQiLCJjb3JyZWxhdGlvbklkIiwiX3R5cGVvZjIiLCJfaSIsIl9PYmplY3Qka2V5cyIsImtleSIsIl9pMiIsIl9PYmplY3Qka2V5czIiLCJjaGFubmVsSWQiLCJ2YWx1ZXMiLCJDaGFubmVsSWQiLCJpbmNsdWRlcyIsIkVycm9yIiwiY3VycmVudE9tbmljaGFubmVsQ29uZmlndXJhdGlvblBhcmFtZXRlcnMiLCJfaXRlcmF0b3IiLCJDb25zdGFudHMiLCJyZXF1aXJlZE9tbmljaGFubmVsQ29uZmlndXJhdGlvblBhcmFtZXRlcnMiLCJfc3RlcCIsImVyciIsIm9jVXNlckFnZW50IiwibGl2ZUNoYXRWZXJzaW9uIiwiTGl2ZUNoYXRWZXJzaW9uIiwiVjIiLCJfY3JlYXRlQ2xhc3MyIiwiX2dldExjd0Zjc0RldGFpbHMiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsInRpbWVyIiwicmVxdWVzdFBhdGgiLCJtZXRob2QiLCJ1cmwiLCJheGlvc0luc3RhbmNlIiwicmVxdWVzdEhlYWRlcnMiLCJiYWNrZW5kVGltZXIiLCJfdGhpcyRjb25maWd1cmF0aW9uJGQiLCJyZXNwb25zZSIsImh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lIiwiZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyIsImRhdGEiLCJfaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyIsIl90Iiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIlRpbWVyIiwiVElNRVIiLCJsb2dXaXRoTG9nZ2VyIiwiTG9nTGV2ZWwiLCJJTkZPIiwiT0NTREtUZWxlbWV0cnlFdmVudCIsIkdFVExDV0ZDU0RFVEFJTFNTVEFSVEVEIiwiT21uaWNoYW5uZWxFbmRwb2ludHMiLCJMY3dGY3NEZXRhaWxzUGF0aCIsIm9yZ0lkIiwib3JnVXJsIiwiYXhpb3MiLCJjcmVhdGUiLCJheGlvc1JldHJ5SGFuZGxlciIsInJldHJpZXMiLCJtYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSIsIndhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzIiwid2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZyIsImdldENoYXRDb25maWciLCJhZGRPY1VzZXJBZ2VudEhlYWRlciIsInRpbWVvdXQiLCJkZWZhdWx0UmVxdWVzdFRpbWVvdXQiLCJyZXF1ZXN0VGltZW91dENvbmZpZyIsInNlbnQiLCJtaWxsaVNlY29uZHNFbGFwc2VkIiwiR0VUTENXRkNTREVUQUlMU1NVQ0NFRURFRCIsImFicnVwdCIsIkVSUk9SIiwiR0VUTENXRkNTREVUQUlMU0ZBSUxFRCIsInN0b3AiLCJnZXRMY3dGY3NEZXRhaWxzIiwiX2dldENoYXRDb25maWciLCJfY2FsbGVlMiIsImJ5cGFzc0NhY2hlIiwiX3RoaXMkY29uZmlndXJhdGlvbiRkMiIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTIiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczIiLCJyZXRyeUNvdW50IiwiX2FyZ3MyIiwiX3QyIiwiX2NvbnRleHQyIiwiR0VUQ0hBVENPTkZJR0ZTVEFSVEVEIiwidXVpZHY0IiwiTGl2ZUNoYXRDb25maWdQYXRoIiwid2lkZ2V0SWQiLCJyZXRyeU9uNDI5IiwiZ2V0Q2hhdENvbmZpZ1JldHJ5T240MjkiLCJhZGREZWZhdWx0SGVhZGVycyIsImJ5cGFzc0NhY2hlSGVhZGVycyIsIkdFVENIQVRDT05GSUdTVUNDRUVERUQiLCJnZXRSZXRyeUNvdW50IiwiY29uZmlnIiwiR0VUQ0hBVENPTkZJR0ZBSUxFRCIsIlByb21pc2UiLCJyZWplY3QiLCJfeCIsIl9nZXRMV0lEZXRhaWxzIiwiX2NhbGxlZTQiLCJfdGhpcyRjb25maWd1cmF0aW9uJGQzIiwiX3RoaXMyIiwiZ2V0TFdJRGV0YWlsc09wdGlvbmFsUGFyYW1zIiwiYXV0aGVudGljYXRlZFVzZXJUb2tlbiIsInJlY29ubmVjdElkIiwic2hvdWxkVXNlU2lnUXVlcnlQYXJhbSIsInBhcmFtcyIsIm9wdGlvbnMiLCJfYXJnczQiLCJfY29udGV4dDQiLCJHRVRMV0lTVEFUVVNTVEFSVEVEIiwiTGl2ZUNoYXRMaXZlV29ya0l0ZW1EZXRhaWxzUGF0aCIsImF4aW9zUmV0cnlIYW5kbGVyV2l0aE5vdEZvdW5kIiwiaGVhZGVyT3ZlcndyaXRlcyIsImdldExXSURldGFpbHMiLCJkZWZhdWx0SGVhZGVycyIsIkxpdmVDaGF0QXV0aExpdmVXb3JrSXRlbURldGFpbHNQYXRoIiwidXNlVW5hdXRoUmVjb25uZWN0SWRTaWdRdWVyeVBhcmFtIiwic2lnIiwiX3JlZiIsIl9jYWxsZWUzIiwicmVzb2x2ZSIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTMiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczMiLCJfdDMiLCJfY29udGV4dDMiLCJzZXRBdXRoQ29kZU5vbmNlIiwiR0VUTFdJU1RBVFVTU1VDQ0VFREVEIiwiR0VUTFdJU1RBVFVTRkFJTEVEIiwiaXNFeHBlY3RlZEF4aW9zRXJyb3IiLCJheGlvc1RpbWVvdXRFcnJvckNvZGUiLCJIVFRQVGltZU91dEVycm9yTWVzc2FnZSIsIl94MyIsIl94NCIsIl94MiIsIl9nZXRDaGF0VG9rZW4iLCJfY2FsbGVlNiIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDQiLCJfdGhpczMiLCJnZXRDaGF0VG9rZW5PcHRpb25hbFBhcmFtcyIsImN1cnJlbnRSZXRyeUNvdW50IiwiY3VycmVudExpdmVDaGF0VmVyc2lvbiIsInJlZnJlc2hUb2tlbiIsIk1zT2NCb3RBcHBsaWNhdGlvbklkIiwibXVsdGlCb3QiLCJlbmRwb2ludCIsIl9hcmdzNiIsIl9jb250ZXh0NiIsIkdFVENIQVRUT0tFTlNUQVJURUQiLCJjcmVhdGVHZXRDaGF0VG9rZW5FbmRwb2ludCIsImdldENoYXRUb2tlbiIsImdldENoYXRUb2tlblJldHJ5T240MjkiLCJfcmVmMiIsIl9jYWxsZWU1IiwiX2h0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lNCIsIl9lbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzNCIsIl90NCIsIl9jb250ZXh0NSIsInRvTG93ZXJDYXNlIiwiR0VUQ0hBVFRPS0VOU1VDQ0VFREVEIiwic3RhdHVzIiwibm9Db250ZW50U3RhdHVzQ29kZSIsIkdFVENIQVRUT0tFTkZBSUxFRCIsIl94NiIsIl94NyIsIl94NSIsIl9nZXRSZWNvbm5lY3RhYmxlQ2hhdHMiLCJfY2FsbGVlOCIsInJlY29ubmVjdGFibGVDaGF0c1BhcmFtcyIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDUiLCJfdGhpczQiLCJfY29udGV4dDgiLCJHRVRSRUNPTk5FQ1RBQkxFQ0hBVFNTVEFSVEVEIiwiTGl2ZUNoYXRHZXRSZWNvbm5lY3RhYmxlQ2hhdHNQYXRoIiwiZ2V0UmVjb25uZWN0YWJsZUNoYXRzIiwiX3JlZjMiLCJfY2FsbGVlNyIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTUiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczUiLCJfdDUiLCJfY29udGV4dDciLCJHRVRSRUNPTk5FQ1RBQkxFQ0hBVFNTVUNDRUVERUQiLCJHRVRSRUNPTk5FQ1RBQkxFQ0hBVFNGQUlMRUQiLCJfeDkiLCJfeDAiLCJfeDgiLCJfZ2V0UmVjb25uZWN0QXZhaWxhYmlsaXR5IiwiX2NhbGxlZTAiLCJfdGhpcyRjb25maWd1cmF0aW9uJGQ2IiwiX3RoaXM1Iiwib3B0aW9uYWxQYXJhbXMiLCJfYXJnczAiLCJfY29udGV4dDAiLCJHRVRSRUNPTk5FQ1RBVkFJTEFCSUxJVFlTVEFSVEVEIiwiTGl2ZUNoYXRSZWNvbm5lY3RBdmFpbGFiaWxpdHlQYXRoIiwiZ2V0UmVjb25uZWN0QXZhaWxhYmlsaXR5IiwiX3JlZjQiLCJfY2FsbGVlOSIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTYiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczYiLCJfdDYiLCJfY29udGV4dDkiLCJHRVRSRUNPTk5FQ1RBVkFJTEFCSUxJVFlTVUNDRUVERUQiLCJXQVJOIiwiR0VUUkVDT05ORUNUQVZBSUxBQklMSVRZRkFJTEVEIiwiX3gxMCIsIl94MTEiLCJfeDEiLCJfZ2V0QWdlbnRBdmFpbGFiaWxpdHkiLCJfY2FsbGVlMTAiLCJfdGhpcyRjb25maWd1cmF0aW9uJGQ3IiwiX3RoaXM2IiwicXVldWVBdmFpbGFiaWxpdHlPcHRpb25hbFBhcmFtcyIsImluaXRDb250ZXh0IiwiZ2V0Q29udGV4dCIsImNhY2hPYmoiLCJ0ZW1wQXJyIiwiX2FyZ3MxMCIsIl9jb250ZXh0MTAiLCJHRVRBR0VOVEFWQUlMQUJJTElUWVNUQVJURUQiLCJHZXRBZ2VudEF2YWlsYWJpbGl0eVBhdGgiLCJnZXRBZ2VudEF2YWlsYWJpbGl0eSIsImN1c3RvbUNvbnRleHREYXRhIiwiQ3VzdG9tQ29udGV4dERhdGEiLCJzb3J0IiwiYXNzaWduIiwicG9ydGFsY29udGFjdGlkIiwiY2FjaGVLZXkiLCJTSEEyNTYiLCJKU09OIiwic3RyaW5naWZ5IiwiSGV4Iiwid2luZG93IiwiZG9jdW1lbnQiLCJicm93c2VyIiwiQnJvd3NlckluZm8iLCJnZXRCcm93c2VyTmFtZSIsImRldmljZSIsIkRldmljZUluZm8iLCJnZXREZXZpY2VUeXBlIiwib3JpZ2ludXJsIiwibG9jYXRpb24iLCJocmVmIiwib3MiLCJPU0luZm8iLCJnZXRPc1R5cGUiLCJsb2NhbGUiLCJkZWZhdWx0TG9jYWxlIiwiTG9jYWxlcyIsInN1cHBvcnRlZExvY2FsZXMiLCJfcmVmNSIsIl9jYWxsZWUxIiwiX2RhdGEiLCJfaHR0cFJlcXVlc3RSZXNwb25zZVRpbWU3IiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHM3IiwiX3Q3IiwiX2NvbnRleHQxIiwiR0VUQUdFTlRBVkFJTEFCSUxJVFlTVUNDRUVERUQiLCJHRVRBR0VOVEFWQUlMQUJJTElUWUZBSUxFRCIsIl94MTMiLCJfeDE0IiwiX3gxMiIsIl9zZXNzaW9uSW5pdCIsIl9jYWxsZWUxMiIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDgiLCJfdGhpczciLCJzZXNzaW9uSW5pdE9wdGlvbmFsUGFyYW1zIiwiYmFzZVBhdGgiLCJfYXJnczEyIiwiX2NvbnRleHQxMiIsIlNFU1NJT05JTklUU1RBUlRFRCIsInNlc3Npb25Jbml0Iiwic2hvdWxkUmV0cnkiLCJlcnJvciIsInNlc3Npb25Jbml0UmV0cnlIYW5kbGVyIiwiTGl2ZUNoYXRBdXRoU2Vzc2lvbkluaXRQYXRoIiwiTGl2ZUNoYXRTZXNzaW9uSW5pdFBhdGgiLCJzZXRSZXF1ZXN0SWRIZWFkZXIiLCJfcmVmNiIsIl9jYWxsZWUxMSIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTgiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczgiLCJfdDgiLCJfY29udGV4dDExIiwiU0VTU0lPTklOSVRTVUNDRUVERUQiLCJTRVNTSU9OSU5JVEZBSUxFRCIsIl94MTYiLCJfeDE3IiwiX3gxNSIsIl9jcmVhdGVDb252ZXJzYXRpb24iLCJfY2FsbGVlMTMiLCJfdGhpcyRjb25maWd1cmF0aW9uJGQ5IiwiX2RhdGEyIiwiX2h0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lOSIsIl9lbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzOSIsIl9hcmdzMTMiLCJfdDkiLCJfY29udGV4dDEzIiwiQ1JFQVRFU0VTU0lPTlNUQVJURUQiLCJMaXZlQ2hhdENvbm5lY3RvckF1dGhQYXRoIiwiTGl2ZUNoYXRDb25uZWN0b3JQYXRoIiwiQ1JFQVRFU0VTU0lPTlNVQ0NFRURFRCIsIkNSRUFURVNFU1NJT05GQUlMRUQiLCJjcmVhdGVDb252ZXJzYXRpb24iLCJfeDE4IiwiX3Nlc3Npb25DbG9zZSIsIl9jYWxsZWUxNSIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDAiLCJfdGhpczgiLCJzZXNzaW9uQ2xvc2VPcHRpb25hbFBhcmFtcyIsImlzUmVjb25uZWN0Q2hhdCIsImlzUGVyc2lzdGVudENoYXQiLCJjaGF0SWQiLCJfYXJnczE1IiwiX2NvbnRleHQxNSIsIlNFU1NJT05DTE9TRVNUQVJURUQiLCJMaXZlQ2hhdFNlc3Npb25DbG9zZVBhdGgiLCJzZXNzaW9uQ2xvc2UiLCJMaXZlQ2hhdEF1dGhTZXNzaW9uQ2xvc2VQYXRoIiwiX3JlZjciLCJfY2FsbGVlMTQiLCJfaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUwIiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMwIiwiX3QwIiwiX2NvbnRleHQxNCIsIlNFU1NJT05DTE9TRVNVQ0NFRURFRCIsIlNFU1NJT05DTE9TRUZBSUxFRCIsImNvZGUiLCJfeDIwIiwiX3gyMSIsIl94MTkiLCJfdmFsaWRhdGVBdXRoQ2hhdFJlY29yZCIsIl9jYWxsZWUxNyIsInZhbGlkYXRlQXV0aENoYXRSZWNvcmRPcHRpb25hbFBhcmFtcyIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDEiLCJfdGhpczkiLCJfY29udGV4dDE3IiwiVkFMSURBVEVBVVRIQ0hBVFJFQ09SRFNUQVJURUQiLCJMaXZlQ2hhdFZhbGlkYXRlQXV0aENoYXRNYXBSZWNvcmRQYXRoIiwidmFsaWRhdGVBdXRoQ2hhdFJlY29yZCIsInZhbGlkYXRlQXV0aENoYXRSZWNvcmRUaW1lb3V0IiwiX3JlZjgiLCJfY2FsbGVlMTYiLCJfcmVzcG9uc2UkZGF0YSIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTEiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczEiLCJfdDEiLCJfY29udGV4dDE2IiwiYXV0aENoYXRFeGlzdCIsIlZBTElEQVRFQVVUSENIQVRSRUNPUkRTVUNDRUVERUQiLCJWQUxJREFURUFVVEhDSEFUUkVDT1JERkFJTEVEIiwiX3gyNCIsIl94MjUiLCJfeDIyIiwiX3gyMyIsIl9zdWJtaXRQb3N0Q2hhdFJlc3BvbnNlIiwiX2NhbGxlZTE5IiwicG9zdENoYXRSZXNwb25zZSIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDEwIiwiX3RoaXMwIiwic3VibWl0UG9zdENoYXRSZXNwb25zZU9wdGlvbmFsUGFyYW1zIiwiX2FyZ3MxOSIsIl9jb250ZXh0MTkiLCJTVUJNSVRQT1NUQ0hBVFNUQVJURUQiLCJMaXZlQ2hhdFN1Ym1pdFBvc3RDaGF0UGF0aCIsInN1Ym1pdFBvc3RDaGF0UmVzcG9uc2UiLCJMaXZlQ2hhdEF1dGhTdWJtaXRQb3N0Q2hhdFBhdGgiLCJfcmVmOSIsIl9jYWxsZWUxOCIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTEwIiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMxMCIsIl90MTAiLCJfY29udGV4dDE4IiwiU1VCTUlUUE9TVENIQVRTVUNDRUVERUQiLCJTVUJNSVRQT1NUQ0hBVEZBSUxFRCIsIl94MjgiLCJfeDI5IiwiX3gyNiIsIl94MjciLCJfZ2V0U3VydmV5SW52aXRlTGluayIsIl9jYWxsZWUyMSIsInN1cnZleU93bmVySWQiLCJzdXJ2ZXlJbnZpdGVBUElSZXF1ZXN0Qm9keSIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDExIiwiX3RoaXMxIiwiZ2V0c3VydmV5SW52aXRlTGlua09wdGlvbmFsUGFyYW1zIiwiX2FyZ3MyMSIsIl9jb250ZXh0MjEiLCJsb2ciLCJHRVRTVVJWRVlJTlZJVEVMSU5LU1RBUlRFRCIsIlN1cnZleU93bmVySWQiLCJMaXZlQ2hhdEdldFN1cnZleUludml0ZUxpbmtQYXRoIiwiZ2V0U3VydmV5SW52aXRlTGluayIsIkxpdmVDaGF0QXV0aEdldFN1cnZleUludml0ZUxpbmtQYXRoIiwid2lkZ2V0QXBwSWQiLCJfcmVmMCIsIl9jYWxsZWUyMCIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTExIiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMxMSIsIl90MTEiLCJfY29udGV4dDIwIiwiR0VUU1VSVkVZSU5WSVRFTElOS1NVQ0NFRURFRCIsIkdFVFNVUlZFWUlOVklURUxJTktGQUlMRUQiLCJfeDMyIiwiX3gzMyIsIl94MzAiLCJfeDMxIiwiX2dldENoYXRUcmFuc2NyaXB0cyIsIl9jYWxsZWUyMyIsInRva2VuIiwiX3RoaXMkY29uZmlndXJhdGlvbiRkMTIiLCJfdGhpczEwIiwiZ2V0Q2hhdFRyYW5zY3JpcHRzT3B0aW9uYWxQYXJhbXMiLCJfYXJnczIzIiwiX2NvbnRleHQyMyIsIkdFVENIQVRUUkFOU0NSSVBUU1RBUlRFRCIsIkxpdmVDaGF0R2V0Q2hhdFRyYW5zY3JpcHRQYXRoIiwiZ2V0Q2hhdFRyYW5zY3JpcHRzIiwib3JnYW5pemF0aW9uSWQiLCJhdXRob3JpemF0aW9uIiwiTGl2ZUNoYXR2MkdldENoYXRUcmFuc2NyaXB0UGF0aCIsIkxpdmVDaGF0djJBdXRoR2V0Q2hhdFRyYW5zY3JpcHRQYXRoIiwiTGl2ZUNoYXRBdXRoR2V0Q2hhdFRyYW5zY3JpcHRQYXRoIiwiX3JlZjEiLCJfY2FsbGVlMjIiLCJfaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUxMiIsIl9lbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzMTIiLCJfdDEyIiwiX2NvbnRleHQyMiIsIkdFVENIQVRUUkFOU0NSSVBUU1VDQ0VFREVEIiwiR0VUQ0hBVFRSQU5TQ1JJUFRGQUlMRUQiLCJfeDM3IiwiX3gzOCIsIl94MzQiLCJfeDM1IiwiX3gzNiIsIl9nZXRQZXJzaXN0ZW50Q2hhdEhpc3RvcnkiLCJfY2FsbGVlMjUiLCJfdGhpcyRjb25maWd1cmF0aW9uJGQxMyIsIl90aGlzMTEiLCJnZXRQZXJzaXN0ZW50Q2hhdEhpc3RvcnlPcHRpb25hbFBhcmFtcyIsInBhZ2VTaXplIiwicGFnZVRva2VuIiwiZXJyb3JNZXNzYWdlIiwiX2FyZ3MyNSIsIl9jb250ZXh0MjUiLCJHRVRQRVJTSVNURU5UQ0hBVEhJU1RPUllTVEFSVEVEIiwiR0VUUEVSU0lTVEVOVENIQVRISVNUT1JZRkFJTEVEIiwiTGl2ZUNoYXRBdXRoR2V0UGVyc2lzdGVudENoYXRIaXN0b3J5UGF0aCIsImdldFBlcnNpc3RlbnRDaGF0SGlzdG9yeSIsIl9yZWYxMCIsIl9jYWxsZWUyNCIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTEzIiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMxMyIsIl90MTMiLCJfY29udGV4dDI0IiwiR0VUUEVSU0lTVEVOVENIQVRISVNUT1JZU1VDQ0VFREVEIiwiX3g0MCIsIl94NDEiLCJfeDM5IiwiX2VtYWlsVHJhbnNjcmlwdCIsIl9jYWxsZWUyNyIsImVtYWlsUmVxdWVzdEJvZHkiLCJfdGhpcyRjb25maWd1cmF0aW9uJGQxNCIsIl90aGlzMTIiLCJlbWFpbFRyYW5zY3JpcHRPcHRpb25hbFBhcmFtcyIsIl9hcmdzMjciLCJfY29udGV4dDI3IiwiRU1BSUxUUkFOU0NSSVBUU1RBUlRFRCIsIkxpdmVDaGF0VHJhbnNjcmlwdEVtYWlsUmVxdWVzdFBhdGgiLCJlbWFpbFRyYW5zY3JpcHQiLCJMaXZlQ2hhdEF1dGhUcmFuc2NyaXB0RW1haWxSZXF1ZXN0UGF0aCIsIl9yZWYxMSIsIl9jYWxsZWUyNiIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTE0IiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMxNCIsIl90MTQiLCJfY29udGV4dDI2IiwiRU1BSUxUUkFOU0NSSVBUU1VDQ0VFREVEIiwiRU1BSUxUUkFOU0NSSVBURkFJTEVEIiwiX3g0NSIsIl94NDYiLCJfeDQyIiwiX3g0MyIsIl94NDQiLCJfZmV0Y2hEYXRhTWFza2luZ0luZm8iLCJfY2FsbGVlMjkiLCJfdGhpcyRjb25maWd1cmF0aW9uJGQxNSIsIl90aGlzMTMiLCJfY29udGV4dDI5IiwiRkVUQ0hEQVRBTUFTS0lOR1NUQVJURUQiLCJMaXZlQ2hhdEZldGNoRGF0YU1hc2tpbmdJbmZvUGF0aCIsImZldGNoRGF0YU1hc2tpbmdJbmZvIiwiX3JlZjEyIiwiX2NhbGxlZTI4IiwiX2h0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lMTUiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczE1IiwiX3QxNSIsIl9jb250ZXh0MjgiLCJGRVRDSERBVEFNQVNLSU5HU1VDQ0VFREVEIiwiRkVUQ0hEQVRBTUFTS0lOR0ZBSUxFRCIsIl94NDgiLCJfeDQ5IiwiX3g0NyIsIl9tYWtlU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UmVxdWVzdCIsIl9jYWxsZWUzMSIsInNlY29uZGFyeUNoYW5uZWxFdmVudFJlcXVlc3RCb2R5IiwiX3RoaXMkY29uZmlndXJhdGlvbiRkMTYiLCJfdGhpczE0Iiwic2Vjb25kYXJ5Q2hhbm5lbEV2ZW50T3B0aW9uYWxQYXJhbXMiLCJfYXJnczMxIiwiX2NvbnRleHQzMSIsIlNFQ09OREFSWUNIQU5ORUxFVkVOVFJFUVVFU1RTVEFSVEVEIiwiTGl2ZUNoYXRTZWNvbmRhcnlDaGFubmVsRXZlbnRQYXRoIiwibWFrZVNlY29uZGFyeUNoYW5uZWxFdmVudFJlcXVlc3QiLCJMaXZlQ2hhdEF1dGhTZWNvbmRhcnlDaGFubmVsRXZlbnRQYXRoIiwiZGVmYXVsdENoYW5uZWxJZCIsIl9yZWYxMyIsIl9jYWxsZWUzMCIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTE2IiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMxNiIsIl90MTYiLCJfY29udGV4dDMwIiwiU0VDT05EQVJZQ0hBTk5FTEVWRU5UUkVRVUVTVFNVQ0NFRURFRCIsIlNFQ09OREFSWUNIQU5ORUxFVkVOVFJFUVVFU1RGQUlMRUQiLCJfeDUyIiwiX3g1MyIsIl94NTAiLCJfeDUxIiwiX3NlbmRUeXBpbmdJbmRpY2F0b3IiLCJfY2FsbGVlMzMiLCJfdGhpcyRjb25maWd1cmF0aW9uJGQxNyIsIl90aGlzMTUiLCJzZW5kVHlwaW5nSW5kaWNhdG9yT3B0aW9uYWxQYXJhbXMiLCJjdXN0b21lckRpc3BsYXlOYW1lIiwiX2FyZ3MzMyIsIl9jb250ZXh0MzMiLCJTZW5kVHlwaW5nSW5kaWNhdG9yUGF0aCIsInNlbmRUeXBpbmdJbmRpY2F0b3IiLCJfcmVmMTQiLCJfY2FsbGVlMzIiLCJfaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUxNyIsIl9lbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzMTciLCJfdDE3IiwiX2NvbnRleHQzMiIsIlNFTkRUWVBJTkdJTkRJQ0FUT1JTVUNDRUVERUQiLCJTRU5EVFlQSU5HSU5ESUNBVE9SRkFJTEVEIiwiX3g1NiIsIl94NTciLCJfeDU0IiwiX3g1NSIsIl9taWRDb252ZXJzYXRpb25BdXRoZW50aWNhdGVDaGF0IiwiX2NhbGxlZTM1IiwiYXV0aGVudGljYXRlQ2hhdFBhcmFtcyIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDE4IiwiX3RoaXMxNiIsIl9jb250ZXh0MzUiLCJNSURBVVRIRU5USUNBVEVDSEFUU1RBUlRFRCIsIk1JREFVVEhFTlRJQ0FURUNIQVRGQUlMRUQiLCJMaXZlQ2hhdEF1dGhNaWRDb252ZXJzYXRpb25QYXRoIiwibWlkQ29udmVyc2F0aW9uQXV0aGVudGljYXRlQ2hhdCIsIl9yZWYxNSIsIl9jYWxsZWUzNCIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTE4IiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMxOCIsIl90MTgiLCJfY29udGV4dDM0IiwiTUlEQVVUSEVOVElDQVRFQ0hBVFNVQ0NFRURFRCIsIl94NjAiLCJfeDYxIiwiX3g1OCIsIl94NTkiLCJfZ2V0VW5yZWFkTWVzc2FnZUNvdW50IiwiX2NhbGxlZTM3IiwiX3RoaXMkY29uZmlndXJhdGlvbiRkMTkiLCJfdGhpczE3IiwiX2NvbnRleHQzNyIsIkdFVFVOUkVBRE1FU1NBR0VDT1VOVFNUQVJURUQiLCJnZXRVbnJlYWRNZXNzYWdlQ291bnQiLCJfcmVmMTYiLCJfY2FsbGVlMzYiLCJfaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUxOSIsIl9lbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzMTkiLCJfdDE5IiwiX2NvbnRleHQzNiIsIkdFVFVOUkVBRE1FU1NBR0VDT1VOVFNVQ0NFRURFRCIsIkdFVFVOUkVBRE1FU1NBR0VDT1VOVEZBSUxFRCIsIl94NjMiLCJfeDY0IiwiX3g2MiIsIl9zZW5kUmVhZFJlY2VpcHQiLCJfY2FsbGVlMzkiLCJtZXNzYWdlSWQiLCJfdGhpcyRjb25maWd1cmF0aW9uJGQyMCIsIl90aGlzMTgiLCJfY29udGV4dDM5IiwiU0VORFJFQURSRUNFSVBUU1RBUlRFRCIsInNlbmRSZWFkUmVjZWlwdCIsIl9yZWYxNyIsIl9jYWxsZWUzOCIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTIwIiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMyMCIsIl90MjAiLCJfY29udGV4dDM4IiwiU0VORFJFQURSRUNFSVBUU1VDQ0VFREVEIiwiU0VORFJFQURSRUNFSVBURkFJTEVEIiwiX3g2OCIsIl94NjkiLCJfeDY1IiwiX3g2NiIsIl94NjciLCJsb2dMZXZlbCIsInRlbGVtZXRyeUV2ZW50VHlwZSIsImRlc2NyaXB0aW9uIiwicmVxdWVzdFBheWxvYWQiLCJfcmVzcG9uc2UiLCJfcmVzcG9uc2UyIiwiX3Jlc3BvbnNlMyIsIkxvZ2dpbmdTYW5pdGl6ZXIiLCJzdHJpcEVycm9yU2Vuc2l0aXZlUHJvcGVydGllcyIsInNhbml0aXplZFJlcXVlc3RQYXlsb2FkIiwic3RyaXBDdXN0b21Db250ZXh0RGF0YVZhbHVlcyIsInByZUNoYXRSZXNwb25zZSIsInN0cmlwUHJlQ2hhdFJlc3BvbnNlIiwic3RyaXBHZW9sb2NhdGlvbiIsInNhbml0aXplZFJlcXVlc3RIZWFkZXJzIiwiYXV0aFRva2VuRGV0YWlscyIsInN0cmlwUmVxdWVzdEhlYWRlcnNTZW5zaXRpdmVQcm9wZXJ0aWVzIiwiYXRvYiIsInBheWxvYWQiLCJzcGxpdCIsImpzb25EYXRhIiwicGFyc2UiLCJsd2lDb250ZXh0cyIsInN1YiIsImV4cCIsImx3aUNvbnRleHRzRGF0YSIsIl91bnVzZWQiLCJjdXN0b21EYXRhIiwiUmVxdWVzdElkIiwiUmVnaW9uIiwiRWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyIsIkh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lIiwiVHJhbnNhY3Rpb25JZCIsInRyYW5zYWN0aW9uaWQiLCJSZXF1ZXN0UGF0aCIsIlJlcXVlc3RNZXRob2QiLCJSZXNwb25zZVN0YXR1c0NvZGUiLCJFeGNlcHRpb25EZXRhaWxzIiwiUmVxdWVzdFBheWxvYWQiLCJSZXF1ZXN0SGVhZGVycyIsIlJlc3BvbnNlRXJyb3Jjb2RlIiwiZXJyb3Jjb2RlIiwiQXV0aFRva2VuRGV0YWlscyIsIlJldHJ5Q291bnQiLCJzZXRTZXNzaW9uSWRIZWFkZXIiLCJzZXRDb3JyZWxhdGlvbklkSW5IZWFkZXIiLCJzdWJzdHJpbmciLCJnZXRDaGF0VG9rZW5SZXRyeUNvdW50IiwiZ2V0Q2hhdFRva2VuVGltZUJldHdlZW5SZXRyaWVzT25GYWlsdXJlIiwiZGVmYXVsdFJlcXVlc3RUaW1lb3V0Q29uZmlnIiwid2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZ3MiXSwic291cmNlUm9vdCI6Im9jc2RrOi8vLyIsInNvdXJjZXMiOlsiLi4vc3JjL1NESy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFubmVsSWQsIExpdmVDaGF0VmVyc2lvbiwgT0NTREtUZWxlbWV0cnlFdmVudCwgU0RLRXJyb3IgfSBmcm9tIFwiLi9Db21tb24vRW51bXNcIjtcbmltcG9ydCBheGlvcywgeyBBeGlvc0Vycm9yLCBBeGlvc1JlcXVlc3RDb25maWcsIEF4aW9zUmVzcG9uc2UgfSBmcm9tIFwiYXhpb3NcIjtcbmltcG9ydCBheGlvc1JldHJ5SGFuZGxlciwgeyBheGlvc1JldHJ5SGFuZGxlcldpdGhOb3RGb3VuZCwgZ2V0UmV0cnlDb3VudCB9IGZyb20gXCIuL1V0aWxzL2F4aW9zUmV0cnlIYW5kbGVyXCI7XG5cbmltcG9ydCB7IEJyb3dzZXJJbmZvIH0gZnJvbSBcIi4vVXRpbHMvQnJvd3NlckluZm9cIjtcbmltcG9ydCBDb25zdGFudHMgZnJvbSBcIi4vQ29tbW9uL0NvbnN0YW50c1wiO1xuaW1wb3J0IHsgQ3VzdG9tQ29udGV4dERhdGEgfSBmcm9tIFwiLi9VdGlscy9DdXN0b21Db250ZXh0RGF0YVwiO1xuaW1wb3J0IHsgRGV2aWNlSW5mbyB9IGZyb20gXCIuL1V0aWxzL0RldmljZUluZm9cIjtcbmltcG9ydCBGZXRjaENoYXRUb2tlblJlc3BvbnNlIGZyb20gXCIuL01vZGVsL0ZldGNoQ2hhdFRva2VuUmVzcG9uc2VcIjtcbmltcG9ydCBIZXggZnJvbSBcImNyeXB0by1qcy9lbmMtaGV4XCI7XG5pbXBvcnQgSURhdGFNYXNraW5nSW5mbyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lEYXRhTWFza2luZ0luZm9cIjtcbmltcG9ydCBJRW1haWxUcmFuc2NyaXB0T3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JRW1haWxUcmFuc2NyaXB0T3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJR2V0Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JR2V0Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJR2V0Q2hhdFRyYW5zY3JpcHRzT3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JR2V0Q2hhdFRyYW5zY3JpcHRzT3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJR2V0TFdJRGV0YWlsc09wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSUdldExXSURldGFpbHNPcHRpb25hbFBhcmFtc1wiO1xuaW1wb3J0IElHZXRQZXJzaXN0ZW50Q2hhdEhpc3RvcnlPcHRpb25hbFBhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lHZXRQZXJzaXN0ZW50Q2hhdEhpc3RvcnlPcHRpb25hbFBhcmFtc1wiO1xuaW1wb3J0IElHZXRRdWV1ZUF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSUdldFF1ZXVlQXZhaWxhYmlsaXR5T3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJR2V0U3VydmV5SW52aXRlTGlua09wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSUdldFN1cnZleUludml0ZUxpbmtPcHRpb25hbFBhcmFtc1wiO1xuaW1wb3J0IElPbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24gZnJvbSBcIi4vSW50ZXJmYWNlcy9JT21uaWNoYW5uZWxDb25maWd1cmF0aW9uXCI7XG5pbXBvcnQgSVJlY29ubmVjdEF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSVJlY29ubmVjdEF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zXCI7XG5pbXBvcnQgSVJlY29ubmVjdGFibGVDaGF0c1BhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lSZWNvbm5lY3RhYmxlQ2hhdHNQYXJhbXNcIjtcbmltcG9ydCBJU0RLIGZyb20gXCIuL0ludGVyZmFjZXMvSVNES1wiO1xuaW1wb3J0IElTREtDb25maWd1cmF0aW9uIGZyb20gXCIuL0ludGVyZmFjZXMvSVNES0NvbmZpZ3VyYXRpb25cIjtcbmltcG9ydCBJU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50T3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50T3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJU2VuZFR5cGluZ0luZGljYXRvck9wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSVNlbmRUeXBpbmdJbmRpY2F0b3JPcHRpb25hbFBhcmFtc1wiXG5pbXBvcnQgSVNlc3Npb25DbG9zZU9wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSVNlc3Npb25DbG9zZU9wdGlvbmFsUGFyYW1zXCI7XG5pbXBvcnQgSVNlc3Npb25Jbml0T3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JU2Vzc2lvbkluaXRPcHRpb25hbFBhcmFtc1wiO1xuaW1wb3J0IElTdWJtaXRQb3N0Q2hhdFJlc3BvbnNlT3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JU3VibWl0UG9zdENoYXRSZXNwb25zZU9wdGlvbmFsUGFyYW1zXCI7XG5pbXBvcnQgSVZhbGlkYXRlQXV0aENoYXRSZWNvcmRPcHRpb25hbFBhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lWYWxpZGF0ZUF1dGhDaGF0UmVjb3JkT3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJbml0Q29udGV4dCBmcm9tIFwiLi9Nb2RlbC9Jbml0Q29udGV4dFwiO1xuaW1wb3J0IExvY2FsZXMgZnJvbSBcIi4vQ29tbW9uL0xvY2FsZXNcIjtcbmltcG9ydCB7IExvZ0xldmVsIH0gZnJvbSBcIi4vTW9kZWwvTG9nTGV2ZWxcIjtcbmltcG9ydCB7IExvZ2dpbmdTYW5pdGl6ZXIgfSBmcm9tIFwiLi9VdGlscy9Mb2dnaW5nU2FuaXRpemVyXCI7XG5pbXBvcnQgT0NTREtMb2dnZXIgZnJvbSBcIi4vQ29tbW9uL09DU0RLTG9nZ2VyXCI7XG5pbXBvcnQgeyBPU0luZm8gfSBmcm9tIFwiLi9VdGlscy9PU0luZm9cIjtcbmltcG9ydCBPbW5pY2hhbm5lbEVuZHBvaW50cyBmcm9tIFwiLi9Db21tb24vT21uaWNoYW5uZWxFbmRwb2ludHNcIjtcbmltcG9ydCBPbW5pY2hhbm5lbEhUVFBIZWFkZXJzIGZyb20gXCIuL0NvbW1vbi9PbW5pY2hhbm5lbEhUVFBIZWFkZXJzXCI7XG5pbXBvcnQgT21uaWNoYW5uZWxRdWVyeVBhcmFtZXRlciBmcm9tIFwiLi9JbnRlcmZhY2VzL09tbmljaGFubmVsUXVlcnlQYXJhbWV0ZXJcIjtcbmltcG9ydCBRdWV1ZUF2YWlsYWJpbGl0eSBmcm9tIFwiLi9Nb2RlbC9RdWV1ZUF2YWlsYWJpbGl0eVwiO1xuaW1wb3J0IFJlY29ubmVjdEF2YWlsYWJpbGl0eSBmcm9tIFwiLi9Nb2RlbC9SZWNvbm5lY3RBdmFpbGFiaWxpdHlcIjtcbmltcG9ydCBSZWNvbm5lY3RNYXBwaW5nUmVjb3JkIGZyb20gXCIuL01vZGVsL1JlY29ubmVjdE1hcHBpbmdSZWNvcmRcIjtcbmltcG9ydCB7IFJlcXVlc3RUaW1lb3V0Q29uZmlnIH0gZnJvbSBcIi4vQ29tbW9uL1JlcXVlc3RUaW1lb3V0Q29uZmlnXCI7XG5pbXBvcnQgU0hBMjU2IGZyb20gXCJjcnlwdG8tanMvc2hhMjU2XCI7XG5pbXBvcnQgeyBTdHJpbmdNYXAgfSBmcm9tIFwiLi9Db21tb24vTWFwcGluZ3NcIjtcbmltcG9ydCB7IFRpbWVyIH0gZnJvbSBcIi4vVXRpbHMvVGltZXJcIjtcbmltcG9ydCB7IGFkZE9jVXNlckFnZW50SGVhZGVyIH0gZnJvbSBcIi4vVXRpbHMvaHR0cEhlYWRlcnNVdGlsc1wiO1xuaW1wb3J0IHsgY3JlYXRlR2V0Q2hhdFRva2VuRW5kcG9pbnQgfSBmcm9tIFwiLi9VdGlscy9lbmRwb2ludHNDcmVhdG9yc1wiO1xuaW1wb3J0IGlzRXhwZWN0ZWRBeGlvc0Vycm9yIGZyb20gXCIuL1V0aWxzL2lzRXhwZWN0ZWRBeGlvc0Vycm9yXCI7XG5pbXBvcnQgc2Vzc2lvbkluaXRSZXRyeUhhbmRsZXIgZnJvbSBcIi4vVXRpbHMvU2Vzc2lvbkluaXRSZXRyeUhhbmRsZXJcIjtcbmltcG9ydCB7IHV1aWR2NCB9IGZyb20gXCIuL1V0aWxzL3V1aWRcIjtcbmltcG9ydCB7IHdhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWdzIH0gZnJvbSBcIi4vVXRpbHMvd2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZ3NcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU0RLIGltcGxlbWVudHMgSVNESyB7XG4gIHByaXZhdGUgc3RhdGljIGRlZmF1bHRSZXF1ZXN0VGltZW91dENvbmZpZzogUmVxdWVzdFRpbWVvdXRDb25maWcgPSB7XG4gICAgZ2V0Q2hhdENvbmZpZzogMTIwMDAwLFxuICAgIGdldExXSURldGFpbHM6IDE1MDAwLFxuICAgIGdldENoYXRUb2tlbjogMTUwMDAsXG4gICAgc2Vzc2lvbkluaXQ6IDE1MDAwLFxuICAgIHNlc3Npb25DbG9zZTogMTUwMDAsXG4gICAgZ2V0UmVjb25uZWN0YWJsZUNoYXRzOiAxNTAwMCxcbiAgICBnZXRSZWNvbm5lY3RBdmFpbGFiaWxpdHk6IDE1MDAwLFxuICAgIHN1Ym1pdFBvc3RDaGF0UmVzcG9uc2U6IDE1MDAwLFxuICAgIGdldFN1cnZleUludml0ZUxpbms6IDE1MDAwLFxuICAgIGdldENoYXRUcmFuc2NyaXB0czogMzAwMDAsXG4gICAgZW1haWxUcmFuc2NyaXB0OiA1MDAwLFxuICAgIGZldGNoRGF0YU1hc2tpbmdJbmZvOiA1MDAwLFxuICAgIG1ha2VTZWNvbmRhcnlDaGFubmVsRXZlbnRSZXF1ZXN0OiAxNTAwMCxcbiAgICBnZXRBZ2VudEF2YWlsYWJpbGl0eTogMTUwMDAsXG4gICAgc2VuZFR5cGluZ0luZGljYXRvcjogNTAwMCxcbiAgICB2YWxpZGF0ZUF1dGhDaGF0UmVjb3JkVGltZW91dDogMTUwMDAsXG4gICAgZ2V0UGVyc2lzdGVudENoYXRIaXN0b3J5OiAxNTAwMCxcbiAgICBtaWRDb252ZXJzYXRpb25BdXRoZW50aWNhdGVDaGF0OiAxNTAwMCxcbiAgICBnZXRVbnJlYWRNZXNzYWdlQ291bnQ6IDE1MDAwLFxuICAgIHNlbmRSZWFkUmVjZWlwdDogNTAwMFxuICB9O1xuXG4gIHByaXZhdGUgc3RhdGljIGRlZmF1bHRDb25maWd1cmF0aW9uOiBJU0RLQ29uZmlndXJhdGlvbiA9IHtcbiAgICBhdXRoQ29kZU5vbmNlOiB1dWlkdjQoKS5zdWJzdHJpbmcoMCwgOCksXG4gICAgZ2V0Q2hhdFRva2VuUmV0cnlDb3VudDogMTAsXG4gICAgZ2V0Q2hhdFRva2VuVGltZUJldHdlZW5SZXRyaWVzT25GYWlsdXJlOiAxMDAwMCxcbiAgICBnZXRDaGF0VG9rZW5SZXRyeU9uNDI5OiB0cnVlLFxuICAgIGdldENoYXRDb25maWdSZXRyeU9uNDI5OiB0cnVlLFxuICAgIG1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlOiA1LFxuICAgIGRlZmF1bHRSZXF1ZXN0VGltZW91dDogdW5kZWZpbmVkLFxuICAgIHJlcXVlc3RUaW1lb3V0Q29uZmlnOiBTREsuZGVmYXVsdFJlcXVlc3RUaW1lb3V0Q29uZmlnLFxuICAgIHVzZVVuYXV0aFJlY29ubmVjdElkU2lnUXVlcnlQYXJhbTogZmFsc2UsXG4gICAgd2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZzogd2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZ3MsXG4gICAgb2NVc2VyQWdlbnQ6IFtdXG4gIH07XG5cbiAgbGl2ZUNoYXRWZXJzaW9uOiBudW1iZXI7XG4gIHNlc3Npb25JZD86IHN0cmluZztcbiAgb2NVc2VyQWdlbnQ6IHN0cmluZ1tdO1xuICBIVFRQVGltZU91dEVycm9yTWVzc2FnZSA9IGAke1NES0Vycm9yLkNsaWVudEhUVFBUaW1lb3V0RXJyb3JOYW1lfTogJHtTREtFcnJvci5DbGllbnRIVFRQVGltZW91dEVycm9yTWVzc2FnZX1gO1xuXG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgb21uaWNoYW5uZWxDb25maWd1cmF0aW9uOiBJT21uaWNoYW5uZWxDb25maWd1cmF0aW9uLCBwcml2YXRlIGNvbmZpZ3VyYXRpb246IElTREtDb25maWd1cmF0aW9uID0gU0RLLmRlZmF1bHRDb25maWd1cmF0aW9uLCBwcml2YXRlIGxvZ2dlcj86IE9DU0RLTG9nZ2VyKSB7XG4gICAgLy8gU2V0cyB0byBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gaWYgcGFzc2VkIGNvbmZpZ3VyYXRpb24gaXMgZW1wdHkgb3IgaXMgbm90IGFuIG9iamVjdFxuICAgIGlmICghT2JqZWN0LmtleXModGhpcy5jb25maWd1cmF0aW9uKS5sZW5ndGggfHwgdHlwZW9mIChjb25maWd1cmF0aW9uKSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgdGhpcy5jb25maWd1cmF0aW9uID0gU0RLLmRlZmF1bHRDb25maWd1cmF0aW9uO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIFNESyBjb25maWdcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhTREsuZGVmYXVsdENvbmZpZ3VyYXRpb24pKSB7XG4gICAgICBpZiAoIXRoaXMuY29uZmlndXJhdGlvbi5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbltgJHtrZXl9YF0gPSBTREsuZGVmYXVsdENvbmZpZ3VyYXRpb25bYCR7a2V5fWBdO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGluZGl2aWR1YWwgZW5kcG9pbnRUaW1lb3V0IGNvbmZpZ1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKFNESy5kZWZhdWx0Q29uZmlndXJhdGlvbltcInJlcXVlc3RUaW1lb3V0Q29uZmlnXCJdKSkge1xuICAgICAgaWYgKCF0aGlzLmNvbmZpZ3VyYXRpb25bXCJyZXF1ZXN0VGltZW91dENvbmZpZ1wiXS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbltcInJlcXVlc3RUaW1lb3V0Q29uZmlnXCJdW2Ake2tleX1gXSA9IFNESy5kZWZhdWx0Q29uZmlndXJhdGlvbltcInJlcXVlc3RUaW1lb3V0Q29uZmlnXCJdW2Ake2tleX1gXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBjaGFubmVsSWRcbiAgICBjb25zdCB7IGNoYW5uZWxJZCB9ID0gb21uaWNoYW5uZWxDb25maWd1cmF0aW9uO1xuICAgIGlmICghT2JqZWN0LnZhbHVlcyhDaGFubmVsSWQpLmluY2x1ZGVzKGNoYW5uZWxJZCBhcyBDaGFubmVsSWQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgY2hhbm5lbElkYCk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgT0MgY29uZmlnXG4gICAgY29uc3QgY3VycmVudE9tbmljaGFubmVsQ29uZmlndXJhdGlvblBhcmFtZXRlcnMgPSBPYmplY3Qua2V5cyhvbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24pO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIENvbnN0YW50cy5yZXF1aXJlZE9tbmljaGFubmVsQ29uZmlndXJhdGlvblBhcmFtZXRlcnMpIHtcbiAgICAgIGlmICghY3VycmVudE9tbmljaGFubmVsQ29uZmlndXJhdGlvblBhcmFtZXRlcnMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgJyR7a2V5fScgaW4gT21uaWNoYW5uZWxDb25maWd1cmF0aW9uYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5vY1VzZXJBZ2VudCA9IHRoaXMuY29uZmlndXJhdGlvbi5vY1VzZXJBZ2VudDtcbiAgICB0aGlzLmxpdmVDaGF0VmVyc2lvbiA9IExpdmVDaGF0VmVyc2lvbi5WMjtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEZldGNoZXMgTENXIEZDUyBEZXRhaWxzIG9mIHRoZSBPcmcuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0TGN3RmNzRGV0YWlscygpOiBQcm9taXNlPG9iamVjdCB8IHZvaWQ+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUTENXRkNTREVUQUlMU1NUQVJURUQsIFwiR2V0IExDVyBGQ1MgZGV0YWlscyBzdGFydGVkXCIsIFwiXCIpO1xuXG4gICAgY29uc3QgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGN3RmNzRGV0YWlsc1BhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIkdFVFwiO1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5nZXRDaGF0Q29uZmlnXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXF1ZXN0SGVhZGVycyA9IHt9O1xuICAgIGFkZE9jVXNlckFnZW50SGVhZGVyKHRoaXMub2NVc2VyQWdlbnQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZS5nZXQodXJsLCB7XG4gICAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5nZXRDaGF0Q29uZmlnXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgIGNvbnN0IHsgZGF0YSB9ID0gcmVzcG9uc2U7XG4gICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRMQ1dGQ1NERVRBSUxTU1VDQ0VFREVELCBcIkdldCBMQ1cgRkNTIGRldGFpbHMgc3VjY2VlZGVkXCIsIFwiXCIsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUTENXRkNTREVUQUlMU0ZBSUxFRCwgXCJHZXQgTENXIEZDUyBkZXRhaWxzIGZhaWxlZFwiLCBcIlwiLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyBjaGF0IGNvbmZpZy5cbiAgICogQHBhcmFtIHJlcXVlc3RJZDogUmVxdWVzdElkIHRvIHVzZSB0byBnZXQgY2hhdCBjb25maWcgKE9wdGlvbmFsKS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRDaGF0Q29uZmlnKHJlcXVlc3RJZDogc3RyaW5nLCBieXBhc3NDYWNoZSA9IGZhbHNlKTogUHJvbWlzZTxvYmplY3QgfCB2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVENIQVRDT05GSUdGU1RBUlRFRCwgXCJHZXQgQ2hhdCBjb25maWcgc3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuICAgIGlmICghcmVxdWVzdElkKSB7XG4gICAgICByZXF1ZXN0SWQgPSB1dWlkdjQoKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdENvbmZpZ1BhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9P3JlcXVlc3RJZD0ke3JlcXVlc3RJZH0mY2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJHRVRcIjtcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcihheGlvc0luc3RhbmNlLCB7XG4gICAgICByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUsXG4gICAgICByZXRyeU9uNDI5OiB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0Q2hhdENvbmZpZ1JldHJ5T240MjksXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcuZ2V0Q2hhdENvbmZpZ1xuICAgIH0pO1xuXG4gICAgbGV0IHJlcXVlc3RIZWFkZXJzID0ge307XG4gICAgdGhpcy5hZGREZWZhdWx0SGVhZGVycyhyZXF1ZXN0SWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIGlmIChieXBhc3NDYWNoZSkge1xuICAgICAgcmVxdWVzdEhlYWRlcnMgPSB7IC4uLkNvbnN0YW50cy5ieXBhc3NDYWNoZUhlYWRlcnMsIC4uLnJlcXVlc3RIZWFkZXJzIH07XG4gICAgfVxuXG4gICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlLmdldCh1cmwsIHtcbiAgICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLmdldENoYXRDb25maWdcbiAgICAgIH0pO1xuICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgY29uc3QgeyBkYXRhIH0gPSByZXNwb25zZTtcblxuICAgICAgLy8gQWRkIHR5cGUgZ3VhcmQgdG8gcHJldmVudCBUeXBlRXJyb3Igd2hlbiBiYWNrZW5kIHJldHVybnMgbm9uLW9iamVjdCAoZS5nLiwgZW1wdHkgc3RyaW5nLCBudWxsLCB1bmRlZmluZWQpXG4gICAgICBpZiAodHlwZW9mIGRhdGEgPT09IFwib2JqZWN0XCIgJiYgZGF0YSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoZGF0YS5MaXZlQ2hhdFZlcnNpb24pIHtcbiAgICAgICAgICB0aGlzLmxpdmVDaGF0VmVyc2lvbiA9IGRhdGEuTGl2ZUNoYXRWZXJzaW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgZGF0YS5oZWFkZXJzID0ge307XG4gICAgICAgIGlmIChyZXNwb25zZS5oZWFkZXJzICYmIHJlc3BvbnNlLmhlYWRlcnNbXCJkYXRlXCJdKSB7XG4gICAgICAgICAgZGF0YS5oZWFkZXJzW1wiZGF0ZVwiXSA9IHJlc3BvbnNlLmhlYWRlcnNbXCJkYXRlXCJdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRDSEFUQ09ORklHU1VDQ0VFREVELCBcIkdldCBDaGF0IGNvbmZpZyBzdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSwgZ2V0UmV0cnlDb3VudChyZXNwb25zZT8uY29uZmlnKSk7XG5cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICBjb25zdCByZXRyeUNvdW50ID0gZ2V0UmV0cnlDb3VudCgoZXJyb3IgYXMgQXhpb3NFcnJvcik/LmNvbmZpZyk7XG4gICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQ0hBVENPTkZJR0ZBSUxFRCwgXCJHZXQgQ2hhdCBjb25maWcgZmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUsIHJldHJ5Q291bnQpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyBMV0kgZGV0YWlscy5cbiAgICogQHBhcmFtIHJlcXVlc3RJZDogUmVxdWVzdElkIHRvIHVzZSB0byBnZXQgY2hhdCBjb25maWcgKE9wdGlvbmFsKS5cbiAgICogQHBhcmFtIGdldExXSURldGFpbHNPcHRpb25hbFBhcmFtczogT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgZ2V0IExXSSBEZXRhaWxzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldExXSURldGFpbHMocmVxdWVzdElkOiBzdHJpbmcsIGdldExXSURldGFpbHNPcHRpb25hbFBhcmFtczogSUdldExXSURldGFpbHNPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTxvYmplY3Q+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUTFdJU1RBVFVTU1RBUlRFRCwgXCJHZXQgTFdJIERldGFpbHMgU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuXG4gICAgaWYgKCFyZXF1ZXN0SWQpIHtcbiAgICAgIHJlcXVlc3RJZCA9IHV1aWR2NCgpO1xuICAgIH1cblxuICAgIC8vIGNvbnN0cnVjdCBhIGVuZHBvaW50IGZvciBhbm9ueW1vdXMgY2hhdHMgdG8gZ2V0IExXSSBEZXRhaWxzXG4gICAgbGV0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0TGl2ZVdvcmtJdGVtRGV0YWlsc1BhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVxdWVzdElkfWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyV2l0aE5vdEZvdW5kKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLFxuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLmdldExXSURldGFpbHMsXG4gICAgfSk7XG5cbiAgICAvLyBFeHRyYWN0IGF1dGggdG9rZW4gYW5kIHJlY29ubmVjdCBpZCBmcm9tIG9wdGlvbmFsIHBhcmFtXG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuLCByZWNvbm5lY3RJZCB9ID0gZ2V0TFdJRGV0YWlsc09wdGlvbmFsUGFyYW1zO1xuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSBDb25zdGFudHMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICAvLyB1cGRhdGVkIGF1dGggZW5kcG9pbnQgZm9yIGF1dGhlbnRpY2F0ZWQgY2hhdHMgYW5kIGFkZCBhdXRoIHRva2VuIGluIGhlYWRlclxuICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEF1dGhMaXZlV29ya0l0ZW1EZXRhaWxzUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9YDtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgIH1cblxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICAvLyBJZiBzaG91bGQgb25seSBiZSBhcHBsaWNhYmxlIG9uIHVuYXV0aCBjaGF0ICYgdGhlIGZsYWcgZW5hYmxlZFxuICAgIGNvbnN0IHNob3VsZFVzZVNpZ1F1ZXJ5UGFyYW0gPSAhYXV0aGVudGljYXRlZFVzZXJUb2tlbiAmJiB0aGlzLmNvbmZpZ3VyYXRpb24udXNlVW5hdXRoUmVjb25uZWN0SWRTaWdRdWVyeVBhcmFtID09PSB0cnVlO1xuICAgIGlmIChyZWNvbm5lY3RJZCkge1xuICAgICAgaWYgKCFzaG91bGRVc2VTaWdRdWVyeVBhcmFtKSB7XG4gICAgICAgIHJlcXVlc3RQYXRoICs9IGAvJHtyZWNvbm5lY3RJZH1gO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHBhcmFtczogT21uaWNoYW5uZWxRdWVyeVBhcmFtZXRlciA9IHtcbiAgICAgIGNoYW5uZWxJZDogdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkXG4gICAgfTtcblxuICAgIGlmIChyZWNvbm5lY3RJZCkge1xuICAgICAgaWYgKHNob3VsZFVzZVNpZ1F1ZXJ5UGFyYW0pIHtcbiAgICAgICAgcGFyYW1zLnNpZyA9IHJlY29ubmVjdElkO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJHRVRcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHBhcmFtcyxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLmdldExXSURldGFpbHNcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGRhdGEsIGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUTFdJU1RBVFVTU1VDQ0VFREVELCBcIkdldCBMV0kgRGV0YWlscyBzdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIHJlc29sdmUoZGF0YSk7XG5cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUTFdJU1RBVFVTRkFJTEVELCBcIkdldCBMV0kgRGV0YWlscyBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogRmV0Y2hlcyB0aGUgY2hhdCB0b2tlbiBmcm9tIE9tbmljaGFubmVsIHRvIGpvaW4gVDEgdGhyZWFkLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkOiBSZXF1ZXN0SWQgdG8gdXNlIGZvciBnZXRjaGF0dG9rZW4gKE9wdGlvbmFsKS5cbiAgICogQHBhcmFtIGdldENoYXRUb2tlbk9wdGlvbmFsUGFyYW1zOiBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBnZXQgY2hhdCB0b2tlbi5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRDaGF0VG9rZW4ocmVxdWVzdElkOiBzdHJpbmcsIGdldENoYXRUb2tlbk9wdGlvbmFsUGFyYW1zOiBJR2V0Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXMgPSB7fSwgY3VycmVudFJldHJ5Q291bnQ6IG51bWJlciA9IDApOiBQcm9taXNlPEZldGNoQ2hhdFRva2VuUmVzcG9uc2U+IHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8taW5mZXJyYWJsZS10eXBlc1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICBjb25zdCB7IHJlY29ubmVjdElkLCBhdXRoZW50aWNhdGVkVXNlclRva2VuLCBjdXJyZW50TGl2ZUNoYXRWZXJzaW9uLCByZWZyZXNoVG9rZW4sIE1zT2NCb3RBcHBsaWNhdGlvbklkIH0gPSBnZXRDaGF0VG9rZW5PcHRpb25hbFBhcmFtcztcbiAgICBjb25zdCBtdWx0aUJvdCA9IChNc09jQm90QXBwbGljYXRpb25JZCAmJiBNc09jQm90QXBwbGljYXRpb25JZC5sZW5ndGggPiAwKT8gdHJ1ZTogZmFsc2U7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQ0hBVFRPS0VOU1RBUlRFRCwgXCJHZXQgQ2hhdCBUb2tlbiBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG5cbiAgICBpZiAoY3VycmVudFJldHJ5Q291bnQgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgY3VycmVudFJldHJ5Q291bnRgKTtcbiAgICB9XG5cbiAgICBpZiAoIXJlcXVlc3RJZCkge1xuICAgICAgcmVxdWVzdElkID0gdXVpZHY0KCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IENvbnN0YW50cy5kZWZhdWx0SGVhZGVycztcbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgY29uc3QgZW5kcG9pbnQgPSBjcmVhdGVHZXRDaGF0VG9rZW5FbmRwb2ludChjdXJyZW50TGl2ZUNoYXRWZXJzaW9uIGFzIExpdmVDaGF0VmVyc2lvbiB8fCB0aGlzLmxpdmVDaGF0VmVyc2lvbiwgYXV0aGVudGljYXRlZFVzZXJUb2tlbiA/IHRydWUgOiBmYWxzZSwgbXVsdGlCb3QpO1xuXG4gICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgIH1cblxuICAgIGxldCByZXF1ZXN0UGF0aCA9IGAvJHtlbmRwb2ludH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9YDtcbiAgICBcbiAgICAvLyBJZiBzaG91bGQgb25seSBiZSBhcHBsaWNhYmxlIG9uIHVuYXV0aCBjaGF0ICYgdGhlIGZsYWcgZW5hYmxlZFxuICAgIGNvbnN0IHNob3VsZFVzZVNpZ1F1ZXJ5UGFyYW0gPSAhYXV0aGVudGljYXRlZFVzZXJUb2tlbiAmJiB0aGlzLmNvbmZpZ3VyYXRpb24udXNlVW5hdXRoUmVjb25uZWN0SWRTaWdRdWVyeVBhcmFtID09PSB0cnVlO1xuICAgIGlmIChyZWNvbm5lY3RJZCkge1xuICAgICAgaWYgKCFzaG91bGRVc2VTaWdRdWVyeVBhcmFtKSB7XG4gICAgICAgIHJlcXVlc3RQYXRoICs9IGAvJHtyZWNvbm5lY3RJZH1gO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHBhcmFtczogT21uaWNoYW5uZWxRdWVyeVBhcmFtZXRlciA9IHtcbiAgICAgIGNoYW5uZWxJZDogdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkXG4gICAgfVxuICAgIGlmIChNc09jQm90QXBwbGljYXRpb25JZCAmJiBNc09jQm90QXBwbGljYXRpb25JZC5sZW5ndGggPiAwKSB7XG4gICAgICBwYXJhbXNbJ01zLU9jLUJvdC1BcHBsaWNhdGlvbi1JZCddID0gTXNPY0JvdEFwcGxpY2F0aW9uSWQ7XG4gICAgfVxuXG4gICAgaWYgKHJlZnJlc2hUb2tlbikge1xuICAgICAgcGFyYW1zLnJlZnJlc2hUb2tlbiA9ICd0cnVlJ1xuICAgIH1cblxuICAgIGlmIChyZWNvbm5lY3RJZCkge1xuICAgICAgaWYgKHNob3VsZFVzZVNpZ1F1ZXJ5UGFyYW0pIHtcbiAgICAgICAgcGFyYW1zLnNpZyA9IHJlY29ubmVjdElkO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJHRVRcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHBhcmFtcyxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLmdldENoYXRUb2tlblxuICAgIH07XG5cbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgaGVhZGVyT3ZlcndyaXRlczogW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0sXG4gICAgICByZXRyaWVzOiAoY3VycmVudFJldHJ5Q291bnQgPiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUpID8gY3VycmVudFJldHJ5Q291bnQgOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUsXG4gICAgICByZXRyeU9uNDI5OiB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0Q2hhdFRva2VuUmV0cnlPbjQyOSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5nZXRDaGF0VG9rZW5cbiAgICB9KTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBiYWNrZW5kVGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBkYXRhLCBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuXG4gICAgICAgIGlmIChoZWFkZXJzKSB7XG4gICAgICAgICAgaWYgKGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5vY1Nlc3Npb25JZC50b0xvd2VyQ2FzZSgpXSkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uSWQgPSBoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMub2NTZXNzaW9uSWQudG9Mb3dlckNhc2UoKV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVzb2x2ZXMgb25seSBpZiBpdCBjb250YWlucyBjaGF0IHRva2VuIHJlc3BvbnNlIHdoaWNoIG9ubHkgaGFwcGVucyBvbiBzdGF0dXMgMjAwXG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gY2hlY2sgaWYgZGF0YSBpcyBlbXB0eSwgaWYgc28sIHRoZW4gcmVqZWN0IHRoZSBwcm9taXNlXG4gICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIkVtcHR5IGRhdGEgcmVjZWl2ZWQgZnJvbSBnZXRDaGF0VG9rZW5cIikpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRhdGEucmVxdWVzdElkID0gcmVxdWVzdElkO1xuICAgICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVENIQVRUT0tFTlNVQ0NFRURFRCwgXCJHZXQgQ2hhdCBUb2tlbiBzdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBObyBjb250ZW50IGZvciByZWNvbm5lY3QgY2hhdCBjYXNlIHNob3VsZG4ndCBiZSByZXRyaWVkLlxuICAgICAgICBpZiAocmVjb25uZWN0SWQgJiYgcmVzcG9uc2Uuc3RhdHVzID09PSBDb25zdGFudHMubm9Db250ZW50U3RhdHVzQ29kZSkge1xuICAgICAgICAgIHJlamVjdChyZXNwb25zZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQ0hBVFRPS0VORkFJTEVELCBcIkdldCBDaGF0IFRva2VuIGZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdCggbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgdGhlIHJlY29ubmVjdGFibGUgY2hhdHMgZnJvbSBvbW5pY2hhbm5lbCBmcm9tIHRoZSBnaXZlbiB1c2VyIGluZm9ybWF0aW9uIGluIEpXVCB0b2tlbihjbGFpbSBuYW1lOiBzdWIpLlxuICAgKiBAcGFyYW0gcmVjb25uZWN0YWJsZUNoYXRzUGFyYW1zIE1hbmRhdGUgcGFyYW1ldGVycyBmb3IgZ2V0IHJlY29ubmVjdGFibGUgY2hhdHMuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0UmVjb25uZWN0YWJsZUNoYXRzKHJlY29ubmVjdGFibGVDaGF0c1BhcmFtczogSVJlY29ubmVjdGFibGVDaGF0c1BhcmFtcyk6IFByb21pc2U8UmVjb25uZWN0TWFwcGluZ1JlY29yZCB8IHZvaWQ+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuIH0gPSByZWNvbm5lY3RhYmxlQ2hhdHNQYXJhbXM7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUUkVDT05ORUNUQUJMRUNIQVRTU1RBUlRFRCwgXCJHZXQgUmVjb25uZWN0YWJsZSBjaGF0IFN0YXJ0ZWRcIik7XG4gICAgY29uc3QgcmVxdWVzdElkID0gcmVjb25uZWN0YWJsZUNoYXRzUGFyYW1zPy5yZXF1ZXN0SWQ7XG5cbiAgICBjb25zdCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEdldFJlY29ubmVjdGFibGVDaGF0c1BhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVxdWVzdElkfT9jaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0gQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzO1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZTtcblxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiR0VUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5nZXRSZWNvbm5lY3RhYmxlQ2hhdHNcbiAgICB9O1xuXG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGRhdGEsIGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgLy8gUmVzb2x2ZXMgb25seSBpZiBpdCBjb250YWlucyByZWNvbm5lY3RhYmxlIGNoYXRzIHJlc3BvbnNlIHdoaWNoIG9ubHkgaGFwcGVucyBvbiBzdGF0dXMgMjAwXG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUUkVDT05ORUNUQUJMRUNIQVRTU1VDQ0VFREVELCBcIkdldCBSZWNvbm5lY3RhYmxlIENoYXRzIFN1Y2NlZWRlZCBhbmQgb2xkIHNlc3Npb24gcmV0dXJuZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gTm8gZGF0YSBmb3VuZCBpbiB0aGUgb2xkIHNlc3Npb25zIHNvIHJldHVybmluZyBudWxsXG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRSRUNPTk5FQ1RBQkxFQ0hBVFNGQUlMRUQsIFwiR2V0IFJlY29ubmVjdGFibGUgQ2hhdHMgZmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgICAgcmVqZWN0KCBuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICogRmV0Y2hlcyB0aGUgcmVjb25uZWN0YWJsZSBjaGF0cyBmcm9tIG9tbmljaGFubmVsIGZyb20gdGhlIGdpdmVuIHVzZXIgaW5mb3JtYXRpb24gaW4gSldUIHRva2VuKGNsYWltIG5hbWU6IHN1YikuXG4gKiBAcGFyYW0gcmVjb25uZWN0YWJsZUNoYXRzUGFyYW1zIE1hbmRhdGUgcGFyYW1ldGVycyBmb3IgZ2V0IHJlY29ubmVjdGFibGUgY2hhdHMuXG4gKi9cbiAgcHVibGljIGFzeW5jIGdldFJlY29ubmVjdEF2YWlsYWJpbGl0eShyZWNvbm5lY3RJZDogc3RyaW5nLCBvcHRpb25hbFBhcmFtczogSVJlY29ubmVjdEF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPFJlY29ubmVjdEF2YWlsYWJpbGl0eSB8IHZvaWQ+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUUkVDT05ORUNUQVZBSUxBQklMSVRZU1RBUlRFRCwgXCJHZXQgUmVjb25uZWN0YWJsZSBhdmFpbGFiaWxpdHkgU3RhcnRlZFwiKTtcblxuICAgIGNvbnN0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0UmVjb25uZWN0QXZhaWxhYmlsaXR5UGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZWNvbm5lY3RJZH1gO1xuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSBDb25zdGFudHMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKG9wdGlvbmFsUGFyYW1zPy5yZXF1ZXN0SWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJHRVRcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLmdldFJlY29ubmVjdEF2YWlsYWJpbGl0eVxuICAgIH07XG5cbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGRhdGEgfSA9IHJlc3BvbnNlO1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFJFQ09OTkVDVEFWQUlMQUJJTElUWVNVQ0NFRURFRCwgXCJHZXQgUmVjb25uZWN0IGF2YWlsYWJpbGl0eSBzdWNjZWVkZWRcIiwgb3B0aW9uYWxQYXJhbXM/LnJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuXG4gICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gTm8gZGF0YSBmb3VuZCBzbyByZXR1cm5pbmcgbnVsbFxuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuV0FSTiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRSRUNPTk5FQ1RBVkFJTEFCSUxJVFlTVUNDRUVERUQsIFwiR2V0IFJlY29ubmVjdCBhdmFpbGFiaWxpdHkgZGlkbid0IHNlbmQgYW55IHZhbGlkIGRhdGFcIiwgb3B0aW9uYWxQYXJhbXM/LnJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuXG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRSRUNPTk5FQ1RBVkFJTEFCSUxJVFlGQUlMRUQsIFwiR2V0IFJlY29ubmVjdCBBdmFpbGFiaWxpdHkgZmFpbGVkXCIsIG9wdGlvbmFsUGFyYW1zPy5yZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdCggbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHJlcXVlc3RJZDogUmVxdWVzdElkIHRvIHVzZSBmb3Igc2Vzc2lvbiBpbml0LlxuICAgKiBAcGFyYW0gcXVldWVBdmFpbGFiaWxpdHlPcHRpb25hbFBhcmFtczogT3B0aW9uYWwgcGFyYW1ldGVycyBmb3Igc2Vzc2lvbiBpbml0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldEFnZW50QXZhaWxhYmlsaXR5KHJlcXVlc3RJZDogc3RyaW5nLCBxdWV1ZUF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zOiBJR2V0UXVldWVBdmFpbGFiaWxpdHlPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTxRdWV1ZUF2YWlsYWJpbGl0eT4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRBR0VOVEFWQUlMQUJJTElUWVNUQVJURUQsIFwiR2V0IGFnZW50IGF2YWlsYWJpbGl0eSBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG5cbiAgICBjb25zdCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5HZXRBZ2VudEF2YWlsYWJpbGl0eVBhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVxdWVzdElkfT9jaGFubmVsSWQ9bGN3YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgaGVhZGVyT3ZlcndyaXRlczogW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0sXG4gICAgICByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUsXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcuZ2V0QWdlbnRBdmFpbGFiaWxpdHlcbiAgICB9KTtcblxuICAgIGNvbnN0IHsgYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgaW5pdENvbnRleHQsIGdldENvbnRleHQgfSA9IHF1ZXVlQXZhaWxhYmlsaXR5T3B0aW9uYWxQYXJhbXM7XG5cbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0gQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgIH1cblxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBjb25zdCBkYXRhOiBJbml0Q29udGV4dCA9IGluaXRDb250ZXh0IHx8IHt9O1xuXG4gICAgY29uc3QgY2FjaE9iaiA9IHtcbiAgICAgIFwib3JnSWRcIjogdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWQsXG4gICAgICBcIndpZGdldElkXCI6IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkXG4gICAgfVxuXG4gICAgaWYgKGRhdGEgJiYgZGF0YS5jdXN0b21Db250ZXh0RGF0YSkge1xuICAgICAgY29uc3QgdGVtcEFyciA9IEN1c3RvbUNvbnRleHREYXRhLnNvcnQoZGF0YS5jdXN0b21Db250ZXh0RGF0YSk7XG4gICAgICBPYmplY3QuYXNzaWduKGNhY2hPYmosIHsgXCJjdXN0b21Db250ZXh0XCI6IHRlbXBBcnIgfSk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEucG9ydGFsY29udGFjdGlkKSB7XG4gICAgICBPYmplY3QuYXNzaWduKGNhY2hPYmosIHsgXCJwb3J0YWxjb250YWN0aWRcIjogZGF0YS5wb3J0YWxjb250YWN0aWQgfSk7XG4gICAgfVxuXG4gICAgLy9kYXRhLmNhY2hlS2V5ID0gaGFzaC5jcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUoSlNPTi5zdHJpbmdpZnkoY2FjaE9iaikpLmRpZ2VzdCgnaGV4JykudG9TdHJpbmcoKTtcbiAgICBkYXRhLmNhY2hlS2V5ID0gU0hBMjU2KEpTT04uc3RyaW5naWZ5KGNhY2hPYmopKS50b1N0cmluZyhIZXgpO1xuXG4gICAgaWYgKGdldENvbnRleHQgJiYgIXdpbmRvdy5kb2N1bWVudCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgZ2V0Q29udGV4dCBpcyBvbmx5IHN1cHBvcnRlZCBvbiB3ZWIgYnJvd3NlcnNgKSk7XG4gICAgfVxuXG4gICAgaWYgKGdldENvbnRleHQpIHtcbiAgICAgIGRhdGEuYnJvd3NlciA9IEJyb3dzZXJJbmZvLmdldEJyb3dzZXJOYW1lKCk7XG4gICAgICBkYXRhLmRldmljZSA9IERldmljZUluZm8uZ2V0RGV2aWNlVHlwZSgpO1xuICAgICAgZGF0YS5vcmlnaW51cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiAgICAgIGRhdGEub3MgPSBPU0luZm8uZ2V0T3NUeXBlKCk7XG4gICAgfVxuXG4gICAgaWYgKCFkYXRhLmxvY2FsZSkge1xuICAgICAgZGF0YS5sb2NhbGUgPSBDb25zdGFudHMuZGVmYXVsdExvY2FsZTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBsb2NhbGVcbiAgICBpZiAoZGF0YS5sb2NhbGUgJiYgIUxvY2FsZXMuc3VwcG9ydGVkTG9jYWxlcy5pbmNsdWRlcyhkYXRhLmxvY2FsZSkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGxvY2FsZTogJyR7ZGF0YS5sb2NhbGV9J2ApKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuXG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgZGF0YSxcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZ2V0QWdlbnRBdmFpbGFiaWxpdHlcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGRhdGEsIGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRBR0VOVEFWQUlMQUJJTElUWVNVQ0NFRURFRCwgXCJHZXQgYWdlbnQgYXZhaWxhYmlsaXR5IHN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcblxuICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQUdFTlRBVkFJTEFCSUxJVFlGQUlMRUQsIFwiR2V0IGFnZW50IGF2YWlsYWJpbGl0eSBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG5cbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdCggbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKidcbiAgICogU3RhcnRzIGEgc2Vzc2lvbiB0byBvbW5pY2hhbm5lbC5cbiAgICogQHBhcmFtIHJlcXVlc3RJZDogUmVxdWVzdElkIHRvIHVzZSBmb3Igc2Vzc2lvbiBpbml0LlxuICAgKiBAcGFyYW0gc2Vzc2lvbkluaXRPcHRpb25hbFBhcmFtczogT3B0aW9uYWwgcGFyYW1ldGVycyBmb3Igc2Vzc2lvbiBpbml0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNlc3Npb25Jbml0KHJlcXVlc3RJZDogc3RyaW5nLCBzZXNzaW9uSW5pdE9wdGlvbmFsUGFyYW1zOiBJU2Vzc2lvbkluaXRPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFU1NJT05JTklUU1RBUlRFRCwgXCJTZXNzaW9uIEluaXQgU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBjb25zdCByZXRyeU9uNDI5ID0gdHJ1ZTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcihheGlvc0luc3RhbmNlLCB7XG4gICAgICByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUsXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcuc2Vzc2lvbkluaXQsXG4gICAgICBzaG91bGRSZXRyeTogKGVycm9yKSA9PiBzZXNzaW9uSW5pdFJldHJ5SGFuZGxlcihlcnJvciwgcmV0cnlPbjQyOSksXG4gICAgICBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXVxuICAgIH0pO1xuXG4gICAgY29uc3QgeyByZWNvbm5lY3RJZCwgYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgaW5pdENvbnRleHQsIGdldENvbnRleHQgfSA9IHNlc3Npb25Jbml0T3B0aW9uYWxQYXJhbXM7XG4gICAgY29uc3QgZGF0YTogSW5pdENvbnRleHQgPSBpbml0Q29udGV4dCB8fCB7fTtcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0geyAuLi5Db25zdGFudHMuZGVmYXVsdEhlYWRlcnMgfTtcblxuICAgIGNvbnN0IGJhc2VQYXRoID0gYXV0aGVudGljYXRlZFVzZXJUb2tlblxuICAgICAgPyBPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEF1dGhTZXNzaW9uSW5pdFBhdGhcbiAgICAgIDogT21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRTZXNzaW9uSW5pdFBhdGg7XG5cbiAgICBsZXQgcmVxdWVzdFBhdGggPSBgLyR7YmFzZVBhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVxdWVzdElkfWA7XG5cbiAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikgeyAgICAgXG4gICAgICBPYmplY3QuYXNzaWduKHJlcXVlc3RIZWFkZXJzLCB7XG4gICAgICAgIFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dOiBhdXRoZW50aWNhdGVkVXNlclRva2VuLFxuICAgICAgICBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXTogdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2UsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgIHRoaXMuc2V0UmVxdWVzdElkSGVhZGVyKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG5cbiAgICAvLyBJZiBzaG91bGQgb25seSBiZSBhcHBsaWNhYmxlIG9uIHVuYXV0aCBjaGF0ICYgdGhlIGZsYWcgZW5hYmxlZFxuICAgIGNvbnN0IHNob3VsZFVzZVNpZ1F1ZXJ5UGFyYW0gPSAhYXV0aGVudGljYXRlZFVzZXJUb2tlbiAmJiB0aGlzLmNvbmZpZ3VyYXRpb24udXNlVW5hdXRoUmVjb25uZWN0SWRTaWdRdWVyeVBhcmFtID09PSB0cnVlO1xuICAgIGlmIChyZWNvbm5lY3RJZCkge1xuICAgICAgaWYgKCFzaG91bGRVc2VTaWdRdWVyeVBhcmFtKSB7XG4gICAgICAgIHJlcXVlc3RQYXRoICs9IGAvJHtyZWNvbm5lY3RJZH1gO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHBhcmFtczogT21uaWNoYW5uZWxRdWVyeVBhcmFtZXRlciA9IHtcbiAgICAgIGNoYW5uZWxJZDogdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkXG4gICAgfVxuXG4gICAgaWYgKHJlY29ubmVjdElkICYmIHNob3VsZFVzZVNpZ1F1ZXJ5UGFyYW0pIHtcbiAgICAgIHBhcmFtcy5zaWcgPSByZWNvbm5lY3RJZDtcbiAgICB9XG5cbiAgICBpZiAoZ2V0Q29udGV4dCAmJiAhd2luZG93LmRvY3VtZW50KSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBnZXRDb250ZXh0IGlzIG9ubHkgc3VwcG9ydGVkIG9uIHdlYiBicm93c2Vyc2ApKTtcbiAgICB9XG5cbiAgICBpZiAoZ2V0Q29udGV4dCkge1xuICAgICAgZGF0YS5icm93c2VyID0gQnJvd3NlckluZm8uZ2V0QnJvd3Nlck5hbWUoKTtcbiAgICAgIGRhdGEuZGV2aWNlID0gRGV2aWNlSW5mby5nZXREZXZpY2VUeXBlKCk7XG4gICAgICBkYXRhLm9yaWdpbnVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgICAgZGF0YS5vcyA9IE9TSW5mby5nZXRPc1R5cGUoKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgZGVmYXVsdCBsb2NhbGUgaWYgbG9jYWxlIGlzIGVtcHR5XG4gICAgaWYgKCFkYXRhLmxvY2FsZSkge1xuICAgICAgZGF0YS5sb2NhbGUgPSBDb25zdGFudHMuZGVmYXVsdExvY2FsZTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBsb2NhbGVcbiAgICBpZiAoZGF0YS5sb2NhbGUgJiYgIUxvY2FsZXMuc3VwcG9ydGVkTG9jYWxlcy5pbmNsdWRlcyhkYXRhLmxvY2FsZSkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGxvY2FsZTogJyR7ZGF0YS5sb2NhbGV9J2ApKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGRhdGEsXG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHBhcmFtcyxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLnNlc3Npb25Jbml0XG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBiYWNrZW5kVGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuXG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFU1NJT05JTklUU1VDQ0VFREVELCBcIlNlc3Npb24gSW5pdCBTdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCBkYXRhLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFU1NJT05JTklURkFJTEVELCBcIlNlc3Npb24gSW5pdCBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCBkYXRhLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICBcbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdCggbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjcmVhdGVDb252ZXJzYXRpb24ocmVxdWVzdElkOiBzdHJpbmcsIHNlc3Npb25Jbml0T3B0aW9uYWxQYXJhbXM6IElTZXNzaW9uSW5pdE9wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPEZldGNoQ2hhdFRva2VuUmVzcG9uc2U+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuQ1JFQVRFU0VTU0lPTlNUQVJURUQsIFwiQ3JlYXRlIGNvbnZlcnNhdGlvbiBjYWxsIFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgY29uc3QgcmV0cnlPbjQyOSA9IHRydWU7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLnNlc3Npb25Jbml0LFxuICAgICAgc2hvdWxkUmV0cnk6IChlcnJvcikgPT4gc2Vzc2lvbkluaXRSZXRyeUhhbmRsZXIoZXJyb3IsIHJldHJ5T240MjkpLFxuICAgICAgaGVhZGVyT3ZlcndyaXRlczogW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV1cbiAgICB9KTtcblxuICAgIGNvbnN0IHsgcmVjb25uZWN0SWQsIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIGluaXRDb250ZXh0LCBnZXRDb250ZXh0IH0gPSBzZXNzaW9uSW5pdE9wdGlvbmFsUGFyYW1zO1xuICAgIGNvbnN0IGRhdGE6IEluaXRDb250ZXh0ID0gaW5pdENvbnRleHQgfHwge307XG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IHsgLi4uQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzIH07XG5cbiAgICBjb25zdCBiYXNlUGF0aCA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5cbiAgICAgID8gT21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRDb25uZWN0b3JBdXRoUGF0aFxuICAgICAgOiBPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdENvbm5lY3RvclBhdGg7XG5cbiAgICBjb25zdCByZXF1ZXN0UGF0aCA9IGAvJHtiYXNlUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vd2lkZ2V0QXBwLyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9L2NvbnZlcnNhdGlvbmA7XG5cbiAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikgeyAgICAgXG4gICAgICBPYmplY3QuYXNzaWduKHJlcXVlc3RIZWFkZXJzLCB7XG4gICAgICAgIFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dOiBhdXRoZW50aWNhdGVkVXNlclRva2VuLFxuICAgICAgICBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXTogdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2UsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgIHRoaXMuc2V0UmVxdWVzdElkSGVhZGVyKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgaWYgKHJlY29ubmVjdElkKSB7XG4gICAgICBkYXRhLnJlY29ubmVjdElkID0gcmVjb25uZWN0SWQ7XG4gICAgfVxuXG4gICAgZGF0YS5jaGFubmVsSWQgPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWQ7XG5cbiAgICBpZiAoZ2V0Q29udGV4dCAmJiAhd2luZG93LmRvY3VtZW50KSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBnZXRDb250ZXh0IGlzIG9ubHkgc3VwcG9ydGVkIG9uIHdlYiBicm93c2Vyc2ApKTtcbiAgICB9XG5cbiAgICBpZiAoZ2V0Q29udGV4dCkge1xuICAgICAgZGF0YS5icm93c2VyID0gQnJvd3NlckluZm8uZ2V0QnJvd3Nlck5hbWUoKTtcbiAgICAgIGRhdGEuZGV2aWNlID0gRGV2aWNlSW5mby5nZXREZXZpY2VUeXBlKCk7XG4gICAgICBkYXRhLm9yaWdpbnVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgICAgZGF0YS5vcyA9IE9TSW5mby5nZXRPc1R5cGUoKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgZGVmYXVsdCBsb2NhbGUgaWYgbG9jYWxlIGlzIGVtcHR5XG4gICAgaWYgKCFkYXRhLmxvY2FsZSkge1xuICAgICAgZGF0YS5sb2NhbGUgPSBDb25zdGFudHMuZGVmYXVsdExvY2FsZTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBsb2NhbGVcbiAgICBpZiAoZGF0YS5sb2NhbGUgJiYgIUxvY2FsZXMuc3VwcG9ydGVkTG9jYWxlcy5pbmNsdWRlcyhkYXRhLmxvY2FsZSkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGxvY2FsZTogJyR7ZGF0YS5sb2NhbGV9J2ApKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGRhdGEsXG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLnNlc3Npb25Jbml0XG4gICAgfTtcblxuICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgIGNvbnN0IHsgZGF0YSwgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgIGlmIChoZWFkZXJzKSB7XG4gICAgICAgIGlmIChoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMub2NTZXNzaW9uSWQudG9Mb3dlckNhc2UoKV0pIHtcbiAgICAgICAgICB0aGlzLnNlc3Npb25JZCA9IGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5vY1Nlc3Npb25JZC50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBjaGVjayBpZiBkYXRhIGlzIGVtcHR5LCBpZiBzbywgdGhlbiB0aHJvdyBhbiBlcnJvclxuICAgICAgaWYgKE9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFbXB0eSBkYXRhIHJlY2VpdmVkIGZyb20gZ2V0Q2hhdFRva2VuXCIpO1xuICAgICAgfVxuXG4gICAgICBkYXRhLnJlcXVlc3RJZCA9IHJlcXVlc3RJZDtcbiAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkNSRUFURVNFU1NJT05TVUNDRUVERUQsIFwiQ3JlYXRlIGNvdmVyc2F0aW9uIGNhbGwgU3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5DUkVBVEVTRVNTSU9ORkFJTEVELCBcIkNyZWF0ZSBjb252ZXJzYXRpb24gY2FsbCBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCBkYXRhLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgXG4gICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIG9tbmljaGFubmVsIHNlc3Npb24uXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQ6IFJlcXVlc3RJZCB0byB1c2UgZm9yIHNlc3Npb24gY2xvc2UgKHNhbWUgcmVxdWVzdCBpZCBmb3Igc2Vzc2lvbiBpbml0KS5cbiAgICogQHBhcmFtIHNlc3Npb25DbG9zZU9wdGlvbmFsUGFyYW1zOiBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBzZXNzaW9uIGNsb3NlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNlc3Npb25DbG9zZShyZXF1ZXN0SWQ6IHN0cmluZywgc2Vzc2lvbkNsb3NlT3B0aW9uYWxQYXJhbXM6IElTZXNzaW9uQ2xvc2VPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFU1NJT05DTE9TRVNUQVJURUQsIFwiU2Vzc2lvbiBDbG9zZSBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG5cbiAgICBsZXQgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRTZXNzaW9uQ2xvc2VQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLFxuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLnNlc3Npb25DbG9zZVxuICAgIH0pO1xuXG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuLCBpc1JlY29ubmVjdENoYXQsIGlzUGVyc2lzdGVudENoYXQsIGNoYXRJZCB9ID0gc2Vzc2lvbkNsb3NlT3B0aW9uYWxQYXJhbXM7XG5cbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0gQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzO1xuICAgIGNvbnN0IGRhdGE6IGFueSA9IHt9OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBkYXRhLmNoYXRJZCA9IGNoYXRJZDtcblxuICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEF1dGhTZXNzaW9uQ2xvc2VQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgaWYgKGlzUmVjb25uZWN0Q2hhdCkge1xuICAgICAgcmVxdWVzdFBhdGggKz0gYCZpc1JlY29ubmVjdENoYXQ9dHJ1ZWA7XG4gICAgfVxuXG4gICAgaWYgKGlzUGVyc2lzdGVudENoYXQpIHtcbiAgICAgIHJlcXVlc3RQYXRoICs9IGAmaXNQZXJzaXN0ZW50Q2hhdD10cnVlYDtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGRhdGEsXG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLnNlc3Npb25DbG9zZVxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuXG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5TRVNTSU9OQ0xPU0VTVUNDRUVERUQsIFwiU2Vzc2lvbiBDbG9zZSBzdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG5cbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFU1NJT05DTE9TRUZBSUxFRCwgXCJTZXNzaW9uIGNsb3NlIGZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgaWYgKGVycm9yLmNvZGUgPT09IENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGUgYXV0aCBjaGF0IHJlY29yZCBleGlzdHMgaW4gZGF0YWJhc2UuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQ6IFJlcXVlc3RJZCBmb3IgdmFsaWRhdGVBdXRoQ2hhdFJlY29yZCAoc2FtZSByZXF1ZXN0IGlkIGZvciBzZXNzaW9uIGluaXQpLlxuICAgKiBAcGFyYW0gdmFsaWRhdGVBdXRoQ2hhdFJlY29yZE9wdGlvbmFsUGFyYW1zOiBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciB2YWxpZGF0ZUF1dGhDaGF0UmVjb3JkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHZhbGlkYXRlQXV0aENoYXRSZWNvcmQocmVxdWVzdElkOiBzdHJpbmcsIHZhbGlkYXRlQXV0aENoYXRSZWNvcmRPcHRpb25hbFBhcmFtczogSVZhbGlkYXRlQXV0aENoYXRSZWNvcmRPcHRpb25hbFBhcmFtcyk6IFByb21pc2U8b2JqZWN0PiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlZBTElEQVRFQVVUSENIQVRSRUNPUkRTVEFSVEVELCBcIlZhbGlkYXRlIEF1dGggQ2hhdCBSZWNvcmQgU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuXG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuLCBjaGF0SWQgfSA9IHZhbGlkYXRlQXV0aENoYXRSZWNvcmRPcHRpb25hbFBhcmFtcztcbiAgICBjb25zdCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdFZhbGlkYXRlQXV0aENoYXRNYXBSZWNvcmRQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke2NoYXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcihheGlvc0luc3RhbmNlLCB7XG4gICAgICBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSxcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy52YWxpZGF0ZUF1dGhDaGF0UmVjb3JkXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0gQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzO1xuICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIkdFVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcudmFsaWRhdGVBdXRoQ2hhdFJlY29yZFRpbWVvdXRcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcblxuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGE/LmF1dGhDaGF0RXhpc3QgPT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5WQUxJREFURUFVVEhDSEFUUkVDT1JEU1VDQ0VFREVELCBcIlZhbGlkYXRlIEF1dGggQ2hhdCBSZWNvcmQgc3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuXG4gICAgICAgICAgcmVzb2x2ZShyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5WQUxJREFURUFVVEhDSEFUUkVDT1JERkFJTEVELCBcIlZhbGlkYXRlIEF1dGggQ2hhdCBSZWNvcmQgRmFpbGVkLiBSZWNvcmQgaXMgbm90IGZvdW5kIG9yIHJlcXVlc3QgaXMgbm90IGF1dGhvcml6ZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG5cbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKFwiVmFsaWRhdGUgQXV0aCBDaGF0IFJlY29yZCBGYWlsZWQuIFJlY29yZCBpcyBub3QgZm91bmQgb3IgcmVxdWVzdCBpcyBub3QgYXV0aG9yaXplZFwiKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcblxuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuVkFMSURBVEVBVVRIQ0hBVFJFQ09SREZBSUxFRCwgXCJWYWxpZGF0ZSBBdXRoIENoYXQgUmVjb3JkIGZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcblxuICAgICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgICAgcmVqZWN0KCBuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yLnRvU3RyaW5nKCkgPT09IFwiRXJyb3I6IFJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgNDA0XCIpIHsgLy8gYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgICAgICAgIHJlc29sdmUoe30pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJtaXRzIHBvc3QgY2hhdCByZXNwb25zZS5cbiAgICogQHBhcmFtIHJlcXVlc3RJZCBSZXF1ZXN0SWQgb2YgdGhlIG9tbmljaGFubmVsIHNlc3Npb24uXG4gICAqIEBwYXJhbSBwb3N0Q2hhdFJlc3BvbnNlIFBvc3QgY2hhdCByZXNwb25zZSB0byBzdWJtaXQuXG4gICAqIEBwYXJhbSBzdWJtaXRQb3N0Q2hhdFJlc3BvbnNlT3B0aW9uYWxQYXJhbXM6IE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHN1Ym1pdCBwb3N0IGNoYXQgcmVzcG9uc2UuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc3VibWl0UG9zdENoYXRSZXNwb25zZShyZXF1ZXN0SWQ6IHN0cmluZywgcG9zdENoYXRSZXNwb25zZTogb2JqZWN0LCBzdWJtaXRQb3N0Q2hhdFJlc3BvbnNlT3B0aW9uYWxQYXJhbXM6IElTdWJtaXRQb3N0Q2hhdFJlc3BvbnNlT3B0aW9uYWxQYXJhbXMgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5TVUJNSVRQT1NUQ0hBVFNUQVJURUQsIFwiU3VibWl0IFBvc3QgQ2hhdCBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG5cbiAgICBsZXQgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRTdWJtaXRQb3N0Q2hhdFBhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVxdWVzdElkfT9jaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgaGVhZGVyT3ZlcndyaXRlczogW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0sXG4gICAgICByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUsXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcuc3VibWl0UG9zdENoYXRSZXNwb25zZVxuICAgIH0pO1xuXG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuIH0gPSBzdWJtaXRQb3N0Q2hhdFJlc3BvbnNlT3B0aW9uYWxQYXJhbXM7XG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IENvbnN0YW50cy5kZWZhdWx0SGVhZGVycztcbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0QXV0aFN1Ym1pdFBvc3RDaGF0UGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIlBPU1RcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeShwb3N0Q2hhdFJlc3BvbnNlKSxcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuc3VibWl0UG9zdENoYXRSZXNwb25zZVxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuXG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5TVUJNSVRQT1NUQ0hBVFNVQ0NFRURFRCwgXCJTdWJtaXQgUG9zdCBDaGF0IHN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcblxuICAgICAgICByZXNvbHZlKCk7XG5cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU1VCTUlUUE9TVENIQVRGQUlMRUQsIFwiU3VibWl0IFBvc3QgQ2hhdCBGYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJtaXRzIHBvc3QgY2hhdCByZXNwb25zZS5cbiAgICogQHBhcmFtIHJlcXVlc3RJZCBSZXF1ZXN0SWQgb2YgdGhlIG9tbmljaGFubmVsIHNlc3Npb24uXG4gICAqIEBwYXJhbSBwb3N0Q2hhdFJlc3BvbnNlIFBvc3QgY2hhdCByZXNwb25zZSB0byBzdWJtaXQuXG4gICAqIEBwYXJhbSBzdWJtaXRQb3N0Q2hhdFJlc3BvbnNlT3B0aW9uYWxQYXJhbXM6IE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHN1Ym1pdCBwb3N0IGNoYXQgcmVzcG9uc2UuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0U3VydmV5SW52aXRlTGluayhzdXJ2ZXlPd25lcklkOiBzdHJpbmcsIHN1cnZleUludml0ZUFQSVJlcXVlc3RCb2R5OiBvYmplY3QsIGdldHN1cnZleUludml0ZUxpbmtPcHRpb25hbFBhcmFtczogSUdldFN1cnZleUludml0ZUxpbmtPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTxvYmplY3Q+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgaWYgKHRoaXMubG9nZ2VyKSB7XG4gICAgICB0aGlzLmxvZ2dlci5sb2coTG9nTGV2ZWwuSU5GTyxcbiAgICAgICAgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRTVVJWRVlJTlZJVEVMSU5LU1RBUlRFRCxcbiAgICAgICAgeyBTdXJ2ZXlPd25lcklkOiBzdXJ2ZXlPd25lcklkIH0sXG4gICAgICAgIFwiR2V0IFN1cnZleSBJbnZpdGUgTGluayBTdGFydGVkXCIpO1xuICAgIH1cbiAgICBsZXQgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRHZXRTdXJ2ZXlJbnZpdGVMaW5rUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHtzdXJ2ZXlPd25lcklkfWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLFxuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLmdldFN1cnZleUludml0ZUxpbmtcbiAgICB9KTtcblxuICAgIGNvbnN0IHsgYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgcmVxdWVzdElkIH0gPSBnZXRzdXJ2ZXlJbnZpdGVMaW5rT3B0aW9uYWxQYXJhbXM7XG5cbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0gQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0QXV0aEdldFN1cnZleUludml0ZUxpbmtQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3N1cnZleU93bmVySWR9YDtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy53aWRnZXRBcHBJZF0gPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZDtcbiAgICB9XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgaWYgKHJlcXVlc3RJZCkge1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5yZXF1ZXN0SWRdID0gcmVxdWVzdElkO1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJQT1NUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoc3VydmV5SW52aXRlQVBJUmVxdWVzdEJvZHkpLFxuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5nZXRTdXJ2ZXlJbnZpdGVMaW5rXG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBiYWNrZW5kVGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGRhdGEsIGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFNVUlZFWUlOVklURUxJTktTVUNDRUVERUQsIFwiR2V0IFN1cnZleSBJbnZpdGUgTGluayBTdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFNVUlZFWUlOVklURUxJTktGQUlMRUQsIFwiR2V0IFN1cnZleSBJbnZpdGUgTGluayBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY2hhdCB0cmFuc2NyaXB0cyBmb3IgY3VzdG9tZXIuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQgUmVxdWVzdElkIG9mIHRoZSBvbW5pY2hhbm5lbCBzZXNzaW9uLlxuICAgKiBAcGFyYW0gY2hhdElkIENoYXQgdGhyZWFkIElkLlxuICAgKiBAcGFyYW0gdG9rZW4gU2t5cGUgdG9rZW4uXG4gICAqIEBwYXJhbSBnZXRDaGF0VHJhbnNjcmlwdHNPcHRpb25hbFBhcmFtcyBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBnZXQgY2hhdCB0cmFuc2NyaXB0cy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRDaGF0VHJhbnNjcmlwdHMocmVxdWVzdElkOiBzdHJpbmcsIGNoYXRJZDogc3RyaW5nLCB0b2tlbjogc3RyaW5nLCBnZXRDaGF0VHJhbnNjcmlwdHNPcHRpb25hbFBhcmFtczogSUdldENoYXRUcmFuc2NyaXB0c09wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRDSEFUVFJBTlNDUklQVFNUQVJURUQsIFwiR2V0IENoYXQgVHJhbnNjcmlwdCBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG5cbiAgICBsZXQgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRHZXRDaGF0VHJhbnNjcmlwdFBhdGh9LyR7Y2hhdElkfS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLFxuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLmdldENoYXRUcmFuc2NyaXB0c1xuICAgIH0pO1xuXG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuLCBjdXJyZW50TGl2ZUNoYXRWZXJzaW9uIH0gPSBnZXRDaGF0VHJhbnNjcmlwdHNPcHRpb25hbFBhcmFtcztcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0gQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzO1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMub3JnYW5pemF0aW9uSWRdID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWQ7XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy53aWRnZXRBcHBJZF0gPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZDtcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhvcml6YXRpb25dID0gdG9rZW47XG5cbiAgICBpZiAodGhpcy5saXZlQ2hhdFZlcnNpb24gPT09IExpdmVDaGF0VmVyc2lvbi5WMiB8fCAoY3VycmVudExpdmVDaGF0VmVyc2lvbiAmJiBjdXJyZW50TGl2ZUNoYXRWZXJzaW9uID09PSBMaXZlQ2hhdFZlcnNpb24uVjIpKSB7XG4gICAgICByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdHYyR2V0Q2hhdFRyYW5zY3JpcHRQYXRofS8ke2NoYXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZTtcbiAgICAgICAgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXR2MkF1dGhHZXRDaGF0VHJhbnNjcmlwdFBhdGh9LyR7Y2hhdElkfS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgICAgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRBdXRoR2V0Q2hhdFRyYW5zY3JpcHRQYXRofS8ke2NoYXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgIH1cblxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiR0VUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5nZXRDaGF0VHJhbnNjcmlwdHNcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGRhdGEsIGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVENIQVRUUkFOU0NSSVBUU1VDQ0VFREVELCBcIkdldCBDaGF0IFRyYW5zY3JpcHQgc3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQ0hBVFRSQU5TQ1JJUFRGQUlMRUQsIFwiR2V0IENoYXQgVHJhbnNjcmlwdCBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcblxuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHBlcnNpc3RlbnQgY2hhdCBoaXN0b3J5IGZvciBhdXRoZW50aWNhdGVkIHVzZXJzLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3RJZCBvZiB0aGUgb21uaWNoYW5uZWwgc2Vzc2lvbiAoT3B0aW9uYWwpLlxuICAgKiBAcGFyYW0gZ2V0UGVyc2lzdGVudENoYXRIaXN0b3J5T3B0aW9uYWxQYXJhbXMgT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgZ2V0IHBlcnNpc3RlbnQgY2hhdCBoaXN0b3J5LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFBlcnNpc3RlbnRDaGF0SGlzdG9yeShyZXF1ZXN0SWQ6IHN0cmluZywgZ2V0UGVyc2lzdGVudENoYXRIaXN0b3J5T3B0aW9uYWxQYXJhbXM6IElHZXRQZXJzaXN0ZW50Q2hhdEhpc3RvcnlPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTxvYmplY3Q+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUUEVSU0lTVEVOVENIQVRISVNUT1JZU1RBUlRFRCwgXCJHZXQgUGVyc2lzdGVudCBDaGF0IEhpc3RvcnkgU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuXG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuLCBwYWdlU2l6ZSwgcGFnZVRva2VuIH0gPSBnZXRQZXJzaXN0ZW50Q2hhdEhpc3RvcnlPcHRpb25hbFBhcmFtcztcblxuICAgIGlmICghYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gXCJBdXRoZW50aWNhdGVkIHVzZXIgdG9rZW4gaXMgcmVxdWlyZWQgZm9yIHBlcnNpc3RlbnQgY2hhdCBoaXN0b3J5XCI7XG4gICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUUEVSU0lTVEVOVENIQVRISVNUT1JZRkFJTEVELCBcIkdldCBQZXJzaXN0ZW50IENoYXQgSGlzdG9yeSBmYWlsZWQgLSBNaXNzaW5nIGF1dGhlbnRpY2F0ZWQgdXNlciB0b2tlblwiLCByZXF1ZXN0SWQpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEF1dGhHZXRQZXJzaXN0ZW50Q2hhdEhpc3RvcnlQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS93aWRnZXRhcHAvJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vY29udmVyc2F0aW9uL2hpc3RvcnlgO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcihheGlvc0luc3RhbmNlLCB7XG4gICAgICBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSxcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5nZXRQZXJzaXN0ZW50Q2hhdEhpc3RvcnlcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSB7IC4uLkNvbnN0YW50cy5kZWZhdWx0SGVhZGVycyB9O1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZTtcblxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBjb25zdCBwYXJhbXM6IE9tbmljaGFubmVsUXVlcnlQYXJhbWV0ZXIgPSB7fTtcbiAgICBcbiAgICBpZiAocGFnZVNpemUpIHtcbiAgICAgIHBhcmFtcy5wYWdlU2l6ZSA9IHBhZ2VTaXplLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgLy8gaW4gY2FzZSBwYWdlIHRva2VuIGlzIGFzc2lnbmVkIGZyb20gbXV0YXRlZCBoZWFkZXJzLCB3ZSBvdmVycmlkZSB3aXRoIHRoZSBhY3R1YWwgdmFsdWUgb3IgZW1wdHlcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLnBhZ2VUb2tlbl0gPSBwYWdlVG9rZW4gfHwgXCJcIjtcbiAgIFxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJHRVRcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHBhcmFtcyxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLmdldFBlcnNpc3RlbnRDaGF0SGlzdG9yeVxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgZGF0YSwgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcblxuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRQRVJTSVNURU5UQ0hBVEhJU1RPUllTVUNDRUVERUQsIFwiR2V0IFBlcnNpc3RlbnQgQ2hhdCBIaXN0b3J5IHN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUUEVSU0lTVEVOVENIQVRISVNUT1JZRkFJTEVELCBcIkdldCBQZXJzaXN0ZW50IENoYXQgSGlzdG9yeSBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIFxuICAgICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRW1haWwgdHJhbnNjcmlwdCB0byBjdXN0b21lci5cbiAgICogQHBhcmFtIHJlcXVlc3RJZCBSZXF1ZXN0SWQgb2YgdGhlIG9tbmljaGFubmVsIHNlc3Npb24uXG4gICAqIEBwYXJhbSB0b2tlbiBTa3lwZSB0b2tlbi5cbiAgICogQHBhcmFtIGVtYWlsUmVxdWVzdEJvZHkgRW1haWwgcmVxdWVzdCBib2R5LlxuICAgKiBAcGFyYW0gZW1haWxUcmFuc2NyaXB0T3B0aW9uYWxQYXJhbXMgT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgZW1haWwgdHJhbnNjcmlwdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBlbWFpbFRyYW5zY3JpcHQocmVxdWVzdElkOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcsIGVtYWlsUmVxdWVzdEJvZHk6IG9iamVjdCwgZW1haWxUcmFuc2NyaXB0T3B0aW9uYWxQYXJhbXM6IElFbWFpbFRyYW5zY3JpcHRPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkVNQUlMVFJBTlNDUklQVFNUQVJURUQsIFwiRW1haWwgVHJhbnNjcmlwdCBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG5cbiAgICBsZXQgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRUcmFuc2NyaXB0RW1haWxSZXF1ZXN0UGF0aH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcihheGlvc0luc3RhbmNlLCB7XG4gICAgICBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSxcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5lbWFpbFRyYW5zY3JpcHRcbiAgICB9KTtcblxuICAgIGNvbnN0IHsgYXV0aGVudGljYXRlZFVzZXJUb2tlbiB9ID0gZW1haWxUcmFuc2NyaXB0T3B0aW9uYWxQYXJhbXM7XG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IENvbnN0YW50cy5kZWZhdWx0SGVhZGVycztcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLm9yZ2FuaXphdGlvbklkXSA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkO1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMud2lkZ2V0QXBwSWRdID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWQ7XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRob3JpemF0aW9uXSA9IHRva2VuO1xuXG4gICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgICAgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRBdXRoVHJhbnNjcmlwdEVtYWlsUmVxdWVzdFBhdGh9LyR7cmVxdWVzdElkfT9jaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICB9XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIlBPU1RcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeShlbWFpbFJlcXVlc3RCb2R5KSxcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZW1haWxUcmFuc2NyaXB0XG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBiYWNrZW5kVGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkVNQUlMVFJBTlNDUklQVFNVQ0NFRURFRCwgXCJFbWFpbCBUcmFuc2NyaXB0IHN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5FTUFJTFRSQU5TQ1JJUFRGQUlMRUQsIFwiRW1haWwgVHJhbnNjcmlwdCBGYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBkYXRhIG1hc2tpbmcgaW5mbyBvZiB0aGUgb3JnLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3RJZCBvZiB0aGUgb21uaWNoYW5uZWwgc2Vzc2lvbiAoT3B0aW9uYWwpLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGZldGNoRGF0YU1hc2tpbmdJbmZvKHJlcXVlc3RJZDogc3RyaW5nKTogUHJvbWlzZTxJRGF0YU1hc2tpbmdJbmZvPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkZFVENIREFUQU1BU0tJTkdTVEFSVEVELCBcIkZldGNoIERhdGEgTWFza2luZyBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG4gICAgaWYgKCFyZXF1ZXN0SWQpIHtcbiAgICAgIHJlcXVlc3RJZCA9IHV1aWR2NCgpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0RmV0Y2hEYXRhTWFza2luZ0luZm9QYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5mZXRjaERhdGFNYXNraW5nSW5mb1xuICAgIH0pO1xuXG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IENvbnN0YW50cy5kZWZhdWx0SGVhZGVycztcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLm9yZ2FuaXphdGlvbklkXSA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkO1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMucmVxdWVzdElkXSA9IHJlcXVlc3RJZDtcblxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiR0VUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5mZXRjaERhdGFNYXNraW5nSW5mb1xuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkZFVENIREFUQU1BU0tJTkdTVUNDRUVERUQsIFwiRmV0Y2ggRGF0YSBNYXNraW5nIHN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuRkVUQ0hEQVRBTUFTS0lOR0ZBSUxFRCwgXCJGZXRjaCBEYXRhIE1hc2tpbmcgRmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgICAgcmVqZWN0KCBuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTWFrZXMgYSBzZWNvbmRhcnkgY2hhbm5lbCBldmVudCBuZXR3b3JrIGNhbGwgdG8gT21uaWNoYW5uZWwuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQgUmVxdWVzdElkIHRvIHVzZSBmb3Igc2Vjb25kYXJ5IGNoYW5uZWwgZXZlbnRcbiAgICogQHBhcmFtIHNlY29uZGFyeUNoYW5uZWxFdmVudFJlcXVlc3RCb2R5IHNlY29uZGFyeUNoYW5uZWwgZXZlbnQgcmVxdWVzdCBib2R5XG4gICAqIEBwYXJhbSBzZWNvbmRhcnlDaGFubmVsRXZlbnRPcHRpb25hbFBhcmFtcyBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBzZWNvbmRhcnkgY2hhbm5lbCBldmVudHMuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbWFrZVNlY29uZGFyeUNoYW5uZWxFdmVudFJlcXVlc3QocmVxdWVzdElkOiBzdHJpbmcsIHNlY29uZGFyeUNoYW5uZWxFdmVudFJlcXVlc3RCb2R5OiBvYmplY3QsIHNlY29uZGFyeUNoYW5uZWxFdmVudE9wdGlvbmFsUGFyYW1zOiBJU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50T3B0aW9uYWxQYXJhbXMgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5TRUNPTkRBUllDSEFOTkVMRVZFTlRSRVFVRVNUU1RBUlRFRCwgXCJTZWNvbmRhcnkgQ2hhbm5lbCBFdmVudCBSZXF1ZXN0IFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcblxuICAgIGxldCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdFNlY29uZGFyeUNoYW5uZWxFdmVudFBhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVxdWVzdElkfWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLFxuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLm1ha2VTZWNvbmRhcnlDaGFubmVsRXZlbnRSZXF1ZXN0XG4gICAgfSk7XG5cbiAgICBjb25zdCB7IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gfSA9IHNlY29uZGFyeUNoYW5uZWxFdmVudE9wdGlvbmFsUGFyYW1zO1xuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSBDb25zdGFudHMuZGVmYXVsdEhlYWRlcnM7XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5vcmdhbml6YXRpb25JZF0gPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZDtcblxuICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZTtcbiAgICAgIHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0QXV0aFNlY29uZGFyeUNoYW5uZWxFdmVudFBhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVxdWVzdElkfWA7XG4gICAgfVxuXG4gICAgdGhpcy5hZGREZWZhdWx0SGVhZGVycyhyZXF1ZXN0SWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIHJlcXVlc3RQYXRoICs9IFwiP2NoYW5uZWxJZD1cIiArIENvbnN0YW50cy5kZWZhdWx0Q2hhbm5lbElkO1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIlBPU1RcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeShzZWNvbmRhcnlDaGFubmVsRXZlbnRSZXF1ZXN0Qm9keSksXG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLm1ha2VTZWNvbmRhcnlDaGFubmVsRXZlbnRSZXF1ZXN0XG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBiYWNrZW5kVGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5TRUNPTkRBUllDSEFOTkVMRVZFTlRSRVFVRVNUU1VDQ0VFREVELCBcIlNlY29uZGFyeSBDaGFubmVsIEV2ZW50IFJlcXVlc3QgU3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFQ09OREFSWUNIQU5ORUxFVkVOVFJFUVVFU1RGQUlMRUQsIFwiU2Vjb25kYXJ5IENoYW5uZWwgRXZlbnQgUmVxdWVzdCBGYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBTZW5kIHR5cGluZyBpbmRpY2F0b3JcbiAgICogQHBhcmFtIHJlcXVlc3RJZCBSZXF1ZXN0SWQgb2YgdGhlIG9tbmljaGFubmVsIHNlc3Npb24uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2VuZFR5cGluZ0luZGljYXRvcihyZXF1ZXN0SWQ6IHN0cmluZywgY3VycmVudExpdmVDaGF0VmVyc2lvbjogbnVtYmVyLCBzZW5kVHlwaW5nSW5kaWNhdG9yT3B0aW9uYWxQYXJhbXM6IElTZW5kVHlwaW5nSW5kaWNhdG9yT3B0aW9uYWxQYXJhbXMgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIGF2b2lkaW5nIGxvZ2dpbmcgSW5mbyBmb3IgdHlwaW5naW5kaWNhdG9yIHRvIHJlZHVjZSBsb2cgdHJhZmZpY1xuICAgIGlmICghY3VycmVudExpdmVDaGF0VmVyc2lvbiB8fCBjdXJyZW50TGl2ZUNoYXRWZXJzaW9uICE9PSBMaXZlQ2hhdFZlcnNpb24uVjIpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIGNvbnN0IHsgY3VzdG9tZXJEaXNwbGF5TmFtZSB9ID0gc2VuZFR5cGluZ0luZGljYXRvck9wdGlvbmFsUGFyYW1zO1xuICAgIGlmICghY3VycmVudExpdmVDaGF0VmVyc2lvbiB8fCBjdXJyZW50TGl2ZUNoYXRWZXJzaW9uICE9PSBMaXZlQ2hhdFZlcnNpb24uVjIpIHsgdGhyb3cgbmV3IEVycm9yKCdUeXBpbmcgaW5kaWNhdG9yIGlzIG9ubHkgc3VwcG9ydGVkIG9uIHYyJykgfVxuICAgIGNvbnN0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLlNlbmRUeXBpbmdJbmRpY2F0b3JQYXRofS8ke3JlcXVlc3RJZH1gO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcblxuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSBDb25zdGFudHMuZGVmYXVsdEhlYWRlcnM7XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5vcmdhbml6YXRpb25JZF0gPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZDtcbiAgICBpZiAoY3VzdG9tZXJEaXNwbGF5TmFtZSkge1xuICAgICAgcmVxdWVzdEhlYWRlcnNbQ29uc3RhbnRzLmN1c3RvbWVyRGlzcGxheU5hbWVdID0gY3VzdG9tZXJEaXNwbGF5TmFtZTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIlBPU1RcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLnNlbmRUeXBpbmdJbmRpY2F0b3JcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5TRU5EVFlQSU5HSU5ESUNBVE9SU1VDQ0VFREVELCBcIlNlbmQgVHlwaW5nIEluZGljYXRvciBTdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VORFRZUElOR0lORElDQVRPUkZBSUxFRCwgXCJTZW5kIFR5cGluZyBJbmRpY2F0b3IgRmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuXG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdXRoZW50aWNhdGVzIGFuIG9uZ29pbmcgKHByZXZpb3VzbHkgdW5hdXRoZW50aWNhdGVkKSBjaGF0IHNlc3Npb24uXG4gICAqIFVwZ3JhZGVzIGVuZ2FnZW1lbnQgY29udGV4dCBzbyBzdWJzZXF1ZW50IGNhbGxzIHVzZSBhdXRoZW50aWNhdGVkIGVuZHBvaW50cy5cbiAgICogQHBhcmFtIHJlcXVlc3RJZCBDdXJyZW50IHJlcXVlc3QvY29ycmVsYXRpb24gaWRcbiAgICogQHBhcmFtIGF1dGhlbnRpY2F0ZUNoYXRQYXJhbXMgeyBjaGF0SWQsIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gfVxuICAgKi9cbiAgcHVibGljIGFzeW5jIG1pZENvbnZlcnNhdGlvbkF1dGhlbnRpY2F0ZUNoYXQocmVxdWVzdElkOiBzdHJpbmcsIGF1dGhlbnRpY2F0ZUNoYXRQYXJhbXM6IHsgY2hhdElkOiBzdHJpbmc7IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW46IHN0cmluZyB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50Lk1JREFVVEhFTlRJQ0FURUNIQVRTVEFSVEVELCBcIk1pZC1BdXRoZW50aWNhdGUgQ2hhdCBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG5cbiAgICBjb25zdCB7IGNoYXRJZCwgYXV0aGVudGljYXRlZFVzZXJUb2tlbiB9ID0gYXV0aGVudGljYXRlQ2hhdFBhcmFtcztcblxuICAgIGlmICghY2hhdElkIHx8ICFhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuTUlEQVVUSEVOVElDQVRFQ0hBVEZBSUxFRCxcbiAgICAgICAgXCJNaWQtQXV0aGVudGljYXRlIENoYXQgRmFpbGVkIC0gY2hhdElkIGFuZCBhdXRoZW50aWNhdGVkVXNlclRva2VuIGFyZSByZXF1aXJlZFwiLCByZXF1ZXN0SWQpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY2hhdElkIGFuZCBhdXRoZW50aWNhdGVkVXNlclRva2VuIGFyZSByZXF1aXJlZFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEF1dGhNaWRDb252ZXJzYXRpb25QYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke2NoYXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcihheGlvc0luc3RhbmNlLCB7XG4gICAgICBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSxcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5taWRDb252ZXJzYXRpb25BdXRoZW50aWNhdGVDaGF0XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0geyAuLi5Db25zdGFudHMuZGVmYXVsdEhlYWRlcnMgfTtcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgIHRoaXMuc2V0UmVxdWVzdElkSGVhZGVyKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIlBPU1RcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLm1pZENvbnZlcnNhdGlvbkF1dGhlbnRpY2F0ZUNoYXRcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgaWYgKGhlYWRlcnMgJiYgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLm9jU2Vzc2lvbklkLnRvTG93ZXJDYXNlKCldKSB7XG4gICAgICAgICAgdGhpcy5zZXNzaW9uSWQgPSBoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMub2NTZXNzaW9uSWQudG9Mb3dlckNhc2UoKV07XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5NSURBVVRIRU5USUNBVEVDSEFUU1VDQ0VFREVELCBcIk1pZC1BdXRoZW50aWNhdGUgQ2hhdCBTdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuTUlEQVVUSEVOVElDQVRFQ0hBVEZBSUxFRCwgXCJNaWQtQXV0aGVudGljYXRlIENoYXQgRmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuXG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIHVucmVhZCBtZXNzYWdlIGNvdW50IGZvciB0aGUgYXV0aGVudGljYXRlZCB1c2VyLlxuICAgKiBBdXRoLW9ubHkgZW5kcG9pbnQg4oCUIGRvZXMgbm90IHJlcXVpcmUgYW4gYWN0aXZlIGNoYXQgc2Vzc2lvbi5cbiAgICogQHBhcmFtIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gQXV0aCB0b2tlbiBmb3IgdGhlIHVzZXIuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0VW5yZWFkTWVzc2FnZUNvdW50KGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW46IHN0cmluZyk6IFByb21pc2U8b2JqZWN0PiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIGNvbnN0IHJlcXVlc3RJZCA9IHV1aWR2NCgpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFVOUkVBRE1FU1NBR0VDT1VOVFNUQVJURUQsIFwiR2V0IFVucmVhZCBNZXNzYWdlIENvdW50IFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcblxuICAgIGNvbnN0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0Q29ubmVjdG9yQXV0aFBhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9L3dpZGdldGFwcC8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS91bnJlYWRtZXNzYWdlc2A7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5nZXRVbnJlYWRNZXNzYWdlQ291bnRcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSB7IC4uLkNvbnN0YW50cy5kZWZhdWx0SGVhZGVycyB9O1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZTtcblxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiR0VUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5nZXRVbnJlYWRNZXNzYWdlQ291bnRcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgZGF0YSwgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFVOUkVBRE1FU1NBR0VDT1VOVFNVQ0NFRURFRCwgXCJHZXQgVW5yZWFkIE1lc3NhZ2UgQ291bnQgU3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRVTlJFQURNRVNTQUdFQ09VTlRGQUlMRUQsIFwiR2V0IFVucmVhZCBNZXNzYWdlIENvdW50IEZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIGEgcmVhZCByZWNlaXB0IGZvciBhIHNwZWNpZmljIG1lc3NhZ2UgaW4gYW4gYXV0aGVudGljYXRlZCBjb252ZXJzYXRpb24uXG4gICAqIFVwZGF0ZXMgdGhlIHVucmVhZCBtZXNzYWdlIGNvdW50ZXIgb24gdGhlIHNlcnZlciBhbmQgZm9yd2FyZHMgdGhlIHJlY2VpcHQgdG8gQUNTLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3RJZCAoY29udmVyc2F0aW9uVGhyZWFkSWQpIG9mIHRoZSBjb252ZXJzYXRpb24uXG4gICAqIEBwYXJhbSBtZXNzYWdlSWQgVGhlIEFDUyBtZXNzYWdlIElEIHRvIG1hcmsgYXMgcmVhZC5cbiAgICogQHBhcmFtIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gQXV0aCB0b2tlbiBmb3IgdGhlIHVzZXIuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2VuZFJlYWRSZWNlaXB0KHJlcXVlc3RJZDogc3RyaW5nLCBtZXNzYWdlSWQ6IHN0cmluZywgYXV0aGVudGljYXRlZFVzZXJUb2tlbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFTkRSRUFEUkVDRUlQVFNUQVJURUQsIFwiU2VuZCBSZWFkIFJlY2VpcHQgU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuXG4gICAgY29uc3QgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRDb25uZWN0b3JBdXRoUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vd2lkZ2V0YXBwLyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9L2NvbnZlcnNhdGlvbnMvJHtyZXF1ZXN0SWR9L3JlYWRyZWNlaXB0YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLnNlbmRSZWFkUmVjZWlwdFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IHsgLi4uQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzIH07XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuXG4gICAgdGhpcy5hZGREZWZhdWx0SGVhZGVycyhyZXF1ZXN0SWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJQT1NUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoeyBtZXNzYWdlSWQgfSksXG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLnNlbmRSZWFkUmVjZWlwdFxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VORFJFQURSRUNFSVBUU1VDQ0VFREVELCBcIlNlbmQgUmVhZCBSZWNlaXB0IFN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5TRU5EUkVBRFJFQ0VJUFRGQUlMRUQsIFwiU2VuZCBSZWFkIFJlY2VpcHQgRmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIGZ1bmN0aW9uIGZvciBsb2dnaW5nLlxuICAgKlxuICAgKiBAcGFyYW0gbG9nTGV2ZWwgTG9nIGxldmVsIGZvciBsb2dnaW5nLlxuICAgKiBAcGFyYW0gdGVsZW1ldHJ5RXZlbnRUeXBlIFRlbGVtZXRyeSBldmVudCB0eXBlIGluIHdoaWNoIGV2ZW50IHdpbGwgYmUgbG9nZ2VkLlxuICAgKiBAcGFyYW0gZGVzY3JpcHRpb24gRGVzY3JpcHRpb24gb2YgdGhlIGV2ZW50LlxuICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3QgSURcbiAgICogQHBhcmFtIHJlc3BvbnNlIFJlc3BvbnNlXG4gICAqIEBwYXJhbSBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzIEVsYXBzZWQgdGltZSBpbiBtc1xuICAgKiBAcGFyYW0gcmVxdWVzdFBhdGggUmVxdWVzdCBwYXRoXG4gICAqIEBwYXJhbSBtZXRob2QgTWV0aG9kXG4gICAqIEBwYXJhbSBlcnJvciBFcnJvclxuICAgKiBAcGFyYW0gZGF0YSBEYXRhXG4gICAqL1xuICBwcml2YXRlIGxvZ1dpdGhMb2dnZXIobG9nTGV2ZWw6IExvZ0xldmVsLCB0ZWxlbWV0cnlFdmVudFR5cGU6IE9DU0RLVGVsZW1ldHJ5RXZlbnQsIGRlc2NyaXB0aW9uOiBzdHJpbmcsIHJlcXVlc3RJZD86IHN0cmluZywgcmVzcG9uc2U/OiBBeGlvc1Jlc3BvbnNlPGFueT4sIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHM/OiBudW1iZXIsIHJlcXVlc3RQYXRoPzogc3RyaW5nLCBtZXRob2Q/OiBzdHJpbmcsIGVycm9yPzogdW5rbm93biwgcmVxdWVzdFBheWxvYWQ/OiBhbnksIHJlcXVlc3RIZWFkZXJzPzogYW55LCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZT86IG51bWJlciwgcmV0cnlDb3VudD86IG51bWJlcik6IHZvaWQgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBpZiAoIXRoaXMubG9nZ2VyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChlcnJvcikge1xuICAgICAgTG9nZ2luZ1Nhbml0aXplci5zdHJpcEVycm9yU2Vuc2l0aXZlUHJvcGVydGllcyhlcnJvcik7XG4gICAgfVxuXG4gICAgbGV0IHNhbml0aXplZFJlcXVlc3RQYXlsb2FkID0gdW5kZWZpbmVkO1xuICAgIGlmIChyZXF1ZXN0UGF5bG9hZCkge1xuICAgICAgc2FuaXRpemVkUmVxdWVzdFBheWxvYWQgPSB7IC4uLnJlcXVlc3RQYXlsb2FkIH07XG4gICAgICBpZiAoc2FuaXRpemVkUmVxdWVzdFBheWxvYWQuY3VzdG9tQ29udGV4dERhdGEpIHtcbiAgICAgICAgTG9nZ2luZ1Nhbml0aXplci5zdHJpcEN1c3RvbUNvbnRleHREYXRhVmFsdWVzKHNhbml0aXplZFJlcXVlc3RQYXlsb2FkLmN1c3RvbUNvbnRleHREYXRhKTtcbiAgICAgIH1cbiAgICAgIGlmIChzYW5pdGl6ZWRSZXF1ZXN0UGF5bG9hZC5wcmVDaGF0UmVzcG9uc2UpIHtcbiAgICAgICAgTG9nZ2luZ1Nhbml0aXplci5zdHJpcFByZUNoYXRSZXNwb25zZShzYW5pdGl6ZWRSZXF1ZXN0UGF5bG9hZC5wcmVDaGF0UmVzcG9uc2UpO1xuICAgICAgfVxuICAgICAgTG9nZ2luZ1Nhbml0aXplci5zdHJpcEdlb2xvY2F0aW9uKHNhbml0aXplZFJlcXVlc3RQYXlsb2FkKTtcbiAgICB9XG5cbiAgICBsZXQgc2FuaXRpemVkUmVxdWVzdEhlYWRlcnMgPSB1bmRlZmluZWQ7XG4gICAgbGV0IGF1dGhUb2tlbkRldGFpbHM6IGFueSA9IHVuZGVmaW5lZDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgaWYgKHJlcXVlc3RIZWFkZXJzKSB7XG4gICAgICBzYW5pdGl6ZWRSZXF1ZXN0SGVhZGVycyA9IHsgLi4ucmVxdWVzdEhlYWRlcnMgfTtcbiAgICAgIExvZ2dpbmdTYW5pdGl6ZXIuc3RyaXBSZXF1ZXN0SGVhZGVyc1NlbnNpdGl2ZVByb3BlcnRpZXMoc2FuaXRpemVkUmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgICBpZiAocmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSkge1xuICAgICAgICBpZiAod2luZG93LmRvY3VtZW50ICYmIHdpbmRvdy5hdG9iKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHRva2VuID0gcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXTtcbiAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSB0b2tlbi5zcGxpdChcIi5cIilbMV07XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gd2luZG93LmF0b2IocGF5bG9hZCk7XG4gICAgICAgICAgICBjb25zdCBqc29uRGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgICAgICBjb25zdCBsd2lDb250ZXh0cyA9IGpzb25EYXRhW1wibHdpY29udGV4dHNcIl07XG4gICAgICAgICAgICBhdXRoVG9rZW5EZXRhaWxzID0ge1xuICAgICAgICAgICAgICBzdWI6IGpzb25EYXRhW1wic3ViXCJdLFxuICAgICAgICAgICAgICBleHA6IGpzb25EYXRhW1wiZXhwXCJdXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAobHdpQ29udGV4dHMpIHtcbiAgICAgICAgICAgICAgY29uc3QgbHdpQ29udGV4dHNEYXRhID0gSlNPTi5wYXJzZShsd2lDb250ZXh0cyk7XG4gICAgICAgICAgICAgIExvZ2dpbmdTYW5pdGl6ZXIuc3RyaXBDdXN0b21Db250ZXh0RGF0YVZhbHVlcyhsd2lDb250ZXh0c0RhdGEpO1xuICAgICAgICAgICAgICBhdXRoVG9rZW5EZXRhaWxzLmx3aUNvbnRleHRzID0gbHdpQ29udGV4dHNEYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGN1c3RvbURhdGEgPSB7XG4gICAgICBSZXF1ZXN0SWQ6IHJlcXVlc3RJZCxcbiAgICAgIFJlZ2lvbjogcmVzcG9uc2U/LmRhdGEuUmVnaW9uLFxuICAgICAgRWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczogZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyxcbiAgICAgIEh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lOiBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSxcbiAgICAgIFRyYW5zYWN0aW9uSWQ6IHJlc3BvbnNlPy5oZWFkZXJzW0NvbnN0YW50cy50cmFuc2FjdGlvbmlkXSxcbiAgICAgIFJlcXVlc3RQYXRoOiByZXF1ZXN0UGF0aCxcbiAgICAgIFJlcXVlc3RNZXRob2Q6IG1ldGhvZCxcbiAgICAgIFJlc3BvbnNlU3RhdHVzQ29kZTogcmVzcG9uc2UgPyByZXNwb25zZS5zdGF0dXMgOiBlcnJvciA/IChlcnJvciBhcyBhbnkpLnJlc3BvbnNlPy5zdGF0dXMgOiB1bmRlZmluZWQsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgXG4gICAgICBFeGNlcHRpb25EZXRhaWxzOiBlcnJvciA/IChlcnJvciBhcyBhbnkpLnJlc3BvbnNlPy5kYXRhIHx8IGVycm9yIDogdW5kZWZpbmVkLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgIFJlcXVlc3RQYXlsb2FkOiBzYW5pdGl6ZWRSZXF1ZXN0UGF5bG9hZCxcbiAgICAgIFJlcXVlc3RIZWFkZXJzOiBzYW5pdGl6ZWRSZXF1ZXN0SGVhZGVycyxcbiAgICAgIFJlc3BvbnNlRXJyb3Jjb2RlOiBlcnJvciA/IChlcnJvciBhcyBhbnkpLnJlc3BvbnNlPy5oZWFkZXJzPy5lcnJvcmNvZGUgOiB1bmRlZmluZWQsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgQXV0aFRva2VuRGV0YWlsczogYXV0aFRva2VuRGV0YWlscyxcbiAgICAgIFJldHJ5Q291bnQ6IHJldHJ5Q291bnRcbiAgICB9O1xuICAgIHRoaXMubG9nZ2VyLmxvZyhsb2dMZXZlbCwgdGVsZW1ldHJ5RXZlbnRUeXBlLCBjdXN0b21EYXRhLCBkZXNjcmlwdGlvbik7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBwcml2YXRlIHNldEF1dGhDb2RlTm9uY2UgPSAoaGVhZGVyczogYW55KSA9PiB7XG4gICAgaWYgKGhlYWRlcnM/LmF1dGhjb2Rlbm9uY2UpIHtcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlID0gaGVhZGVycz8uYXV0aGNvZGVub25jZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZDogc3RyaW5nIHwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwKTogdm9pZCB7XG4gICAgdGhpcy5zZXRTZXNzaW9uSWRIZWFkZXIodGhpcy5zZXNzaW9uSWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICBhZGRPY1VzZXJBZ2VudEhlYWRlcih0aGlzLm9jVXNlckFnZW50LCByZXF1ZXN0SGVhZGVycyk7XG4gICAgdGhpcy5zZXRDb3JyZWxhdGlvbklkSW5IZWFkZXIocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBwcml2YXRlIHNldFNlc3Npb25JZEhlYWRlciA9IChzZXNzaW9uSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCwgaGVhZGVyczogYW55KSA9PiB7XG4gICAgaWYgKHNlc3Npb25JZCkge1xuICAgICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLm9jU2Vzc2lvbklkXSA9IHNlc3Npb25JZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFJlcXVlc3RJZEhlYWRlciA9IChyZXF1ZXN0SWQ6IHN0cmluZyB8IHVuZGVmaW5lZCwgaGVhZGVyczogU3RyaW5nTWFwKSA9PiB7XG4gICAgaWYgKHJlcXVlc3RJZCkge1xuICAgICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLnJlcXVlc3RJZF0gPSByZXF1ZXN0SWQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRDb3JyZWxhdGlvbklkSW5IZWFkZXIgPSAoY29ycmVsYXRpb25JZDogc3RyaW5nIHwgdW5kZWZpbmVkLCBoZWFkZXJzOiBTdHJpbmdNYXApID0+IHtcbiAgICBpZiAoY29ycmVsYXRpb25JZCkge1xuICAgICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmNvcnJlbGF0aW9uSWRd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
|