@sapui5/sap.fe.templates 1.106.0 → 1.107.1
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/package.json +1 -1
- package/src/sap/fe/templates/.library +1 -1
- package/src/sap/fe/templates/ListReport/ListReport.view.xml +1 -1
- package/src/sap/fe/templates/ListReport/ListReportController.controller.js +5 -2
- package/src/sap/fe/templates/ListReport/ListReportController.controller.ts +5 -1
- package/src/sap/fe/templates/ListReport/overrides/IntentBasedNavigation.js +2 -2
- package/src/sap/fe/templates/ListReport/overrides/IntentBasedNavigation.ts +1 -1
- package/src/sap/fe/templates/ListReport/overrides/Share.js +1 -12
- package/src/sap/fe/templates/ListReport/overrides/Share.ts +1 -14
- package/src/sap/fe/templates/ObjectPage/ExtensionAPI.js +132 -3
- package/src/sap/fe/templates/ObjectPage/ExtensionAPI.ts +88 -1
- package/src/sap/fe/templates/ObjectPage/ObjectPage.view.xml +3 -26
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +40 -14
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.ts +38 -13
- package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.js +2 -2
- package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.ts +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/MessageHandler.js +2 -2
- package/src/sap/fe/templates/ObjectPage/overrides/MessageHandler.ts +2 -1
- package/src/sap/fe/templates/ObjectPage/overrides/Share.js +2 -2
- package/src/sap/fe/templates/ObjectPage/overrides/Share.ts +1 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/HeadingContent.fragment.xml +30 -0
- package/src/sap/fe/templates/library.js +1 -1
|
@@ -184,8 +184,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
|
|
|
184
184
|
} // fire ModelContextChange on the message button whenever the table context changes
|
|
185
185
|
|
|
186
186
|
|
|
187
|
-
|
|
188
|
-
oMessageButton.fireModelContextChange();
|
|
187
|
+
this.messageButton.fireModelContextChange();
|
|
189
188
|
},
|
|
190
189
|
|
|
191
190
|
/**
|
|
@@ -194,7 +193,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
|
|
|
194
193
|
* @param oView
|
|
195
194
|
* @param sActionName The name of the action to be called
|
|
196
195
|
* @param [mParameters] Contains the following attributes:
|
|
197
|
-
* @param [mParameters.contexts] Mandatory for a bound action, either one context or an array with contexts for which the action
|
|
196
|
+
* @param [mParameters.contexts] Mandatory for a bound action, either one context or an array with contexts for which the action is called
|
|
198
197
|
* @param [mParameters.model] Mandatory for an unbound action; an instance of an OData V4 model
|
|
199
198
|
* @returns The action promise
|
|
200
199
|
* @ui5-restricted
|
|
@@ -343,20 +342,23 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
|
|
|
343
342
|
|
|
344
343
|
|
|
345
344
|
var oInternalModelContext = this.getView().getBindingContext("internal");
|
|
346
|
-
oInternalModelContext.setProperty("externalNavigationContext", {
|
|
345
|
+
oInternalModelContext === null || oInternalModelContext === void 0 ? void 0 : oInternalModelContext.setProperty("externalNavigationContext", {
|
|
347
346
|
"page": true
|
|
348
347
|
});
|
|
349
|
-
oInternalModelContext.setProperty("relatedApps", {
|
|
348
|
+
oInternalModelContext === null || oInternalModelContext === void 0 ? void 0 : oInternalModelContext.setProperty("relatedApps", {
|
|
350
349
|
visibility: false,
|
|
351
350
|
items: null
|
|
352
351
|
});
|
|
353
|
-
oInternalModelContext.setProperty("batchGroups", this._getBatchGroupsForView());
|
|
354
|
-
oInternalModelContext.setProperty("errorNavigationSectionFlag", false);
|
|
352
|
+
oInternalModelContext === null || oInternalModelContext === void 0 ? void 0 : oInternalModelContext.setProperty("batchGroups", this._getBatchGroupsForView());
|
|
353
|
+
oInternalModelContext === null || oInternalModelContext === void 0 ? void 0 : oInternalModelContext.setProperty("errorNavigationSectionFlag", false);
|
|
355
354
|
|
|
356
355
|
if (!this.getView().getViewData().useNewLazyLoading && oObjectPage.getEnableLazyLoading()) {
|
|
357
356
|
//Attaching the event to make the subsection context binding active when it is visible.
|
|
358
357
|
oObjectPage.attachEvent("subSectionEnteredViewPort", this._handleSubSectionEnteredViewPort.bind(this));
|
|
359
358
|
}
|
|
359
|
+
|
|
360
|
+
this.messageButton = this.getView().byId("fe::FooterBar::MessageButton");
|
|
361
|
+
this.messageButton.oItemBinding.attachChange(this._fnShowOPMessage, this);
|
|
360
362
|
};
|
|
361
363
|
|
|
362
364
|
_proto.onExit = function onExit() {
|
|
@@ -377,8 +379,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
|
|
|
377
379
|
}
|
|
378
380
|
|
|
379
381
|
delete this.extensionAPI;
|
|
380
|
-
var
|
|
381
|
-
oMessagePopover = oMessageButton ? oMessageButton.oMessagePopover : null;
|
|
382
|
+
var oMessagePopover = this.messageButton ? this.messageButton.oMessagePopover : null;
|
|
382
383
|
|
|
383
384
|
if (oMessagePopover && oMessagePopover.isOpen()) {
|
|
384
385
|
oMessagePopover.close();
|
|
@@ -390,6 +391,28 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
|
|
|
390
391
|
if (oContext && oContext.isKeepAlive()) {
|
|
391
392
|
oContext.setKeepAlive(false);
|
|
392
393
|
}
|
|
394
|
+
}
|
|
395
|
+
/**
|
|
396
|
+
* Method to show the message strip on the object page.
|
|
397
|
+
*
|
|
398
|
+
* @private
|
|
399
|
+
*/
|
|
400
|
+
;
|
|
401
|
+
|
|
402
|
+
_proto._fnShowOPMessage = function _fnShowOPMessage() {
|
|
403
|
+
var extensionAPI = this.getExtensionAPI();
|
|
404
|
+
var view = this.getView();
|
|
405
|
+
var messages = this.messageButton.oMessagePopover.getItems().map(function (item) {
|
|
406
|
+
return item.getBindingContext("message").getObject();
|
|
407
|
+
}).filter(function (message) {
|
|
408
|
+
var _view$getBindingConte;
|
|
409
|
+
|
|
410
|
+
return message.getTargets()[0] === ((_view$getBindingConte = view.getBindingContext()) === null || _view$getBindingConte === void 0 ? void 0 : _view$getBindingConte.getPath());
|
|
411
|
+
});
|
|
412
|
+
|
|
413
|
+
if (extensionAPI) {
|
|
414
|
+
extensionAPI.showMessages(messages);
|
|
415
|
+
}
|
|
393
416
|
};
|
|
394
417
|
|
|
395
418
|
_proto._getTableBinding = function _getTableBinding(oTable) {
|
|
@@ -857,7 +880,9 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
|
|
|
857
880
|
} else {
|
|
858
881
|
var oSelectedSection = Core.byId(oObjectPage.getSelectedSection());
|
|
859
882
|
|
|
860
|
-
|
|
883
|
+
if (oSelectedSection) {
|
|
884
|
+
_this7._updateFocusInEditMode(oSelectedSection.getSubSections());
|
|
885
|
+
}
|
|
861
886
|
}
|
|
862
887
|
}; // Apply app state only after the page is ready with the first section selected
|
|
863
888
|
|
|
@@ -992,7 +1017,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
|
|
|
992
1017
|
var currentPageView = rootViewController.isFclEnabled() ? rootViewController.getRightmostView() : this.getAppComponent().getRootContainer().getCurrentPage();
|
|
993
1018
|
|
|
994
1019
|
if (!currentPageView.isA("sap.m.MessagePage")) {
|
|
995
|
-
var oMessageButton = this.
|
|
1020
|
+
var oMessageButton = this.messageButton,
|
|
996
1021
|
oMessagePopover = oMessageButton.oMessagePopover,
|
|
997
1022
|
oItemBinding = oMessagePopover.getBinding("items");
|
|
998
1023
|
|
|
@@ -1388,8 +1413,9 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
|
|
|
1388
1413
|
idx = hierarchyPosition - aSkipParameterized[hierarchyPosition];
|
|
1389
1414
|
oLink = oSource.getLinks()[idx] ? oSource.getLinks()[idx] : new Link(); //sCurrentEntity is a fallback value in case of empty title
|
|
1390
1415
|
|
|
1391
|
-
oLink.setText(titleHierarchyInfo.subtitle || titleHierarchyInfo.title);
|
|
1392
|
-
|
|
1416
|
+
oLink.setText(titleHierarchyInfo.subtitle || titleHierarchyInfo.title); //We apply an additional encodeURI in case of special characters (ie "/") used in the url through the semantic keys
|
|
1417
|
+
|
|
1418
|
+
oLink.setHref(encodeURI(titleHierarchyInfo.intent));
|
|
1393
1419
|
|
|
1394
1420
|
if (!oSource.getLinks()[idx]) {
|
|
1395
1421
|
oSource.addLink(oLink);
|
|
@@ -1574,4 +1600,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
|
|
|
1574
1600
|
}), _applyDecoratedDescriptor(_class2.prototype, "getExtensionAPI", [_dec14, _dec15], Object.getOwnPropertyDescriptor(_class2.prototype, "getExtensionAPI"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onPageReady", [_dec16, _dec17], Object.getOwnPropertyDescriptor(_class2.prototype, "onPageReady"), _class2.prototype)), _class2)) || _class);
|
|
1575
1601
|
return ObjectPageController;
|
|
1576
1602
|
}, false);
|
|
1577
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJib2R5IiwicmVjb3ZlciIsInJlc3VsdCIsImUiLCJ0aGVuIiwiZmluYWxpemVyIiwiYmluZCIsIk9iamVjdFBhZ2VDb250cm9sbGVyIiwiZGVmaW5lVUk1Q2xhc3MiLCJ1c2luZ0V4dGVuc2lvbiIsIlBsYWNlaG9sZGVyIiwiRWRpdEZsb3ciLCJTaGFyZSIsIm92ZXJyaWRlIiwiU2hhcmVPdmVycmlkZXMiLCJJbnRlcm5hbEVkaXRGbG93IiwiRWRpdEZsb3dPdmVycmlkZXMiLCJJbnRlcm5hbFJvdXRpbmciLCJJbnRlcm5hbFJvdXRpbmdPdmVycmlkZSIsIlBhZ2luYXRvciIsIlBhZ2luYXRvck92ZXJyaWRlIiwiTWVzc2FnZUhhbmRsZXIiLCJNZXNzYWdlSGFuZGxlck92ZXJyaWRlIiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUiLCJJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldE5hdmlnYXRpb25Nb2RlIiwiYklzU3RpY2t5RWRpdE1vZGUiLCJnZXRWaWV3IiwiZ2V0Q29udHJvbGxlciIsImdldFN0aWNreUVkaXRNb2RlIiwidW5kZWZpbmVkIiwiVmlld1N0YXRlIiwiVmlld1N0YXRlT3ZlcnJpZGVzIiwiUGFnZVJlYWR5IiwiaXNDb250ZXh0RXhwZWN0ZWQiLCJNYXNzRWRpdCIsInB1YmxpY0V4dGVuc2lvbiIsImZpbmFsRXh0ZW5zaW9uIiwiZXh0ZW5zaWJsZSIsIk92ZXJyaWRlRXhlY3V0aW9uIiwiQWZ0ZXIiLCJoYW5kbGVycyIsIm9uVGFibGVDb250ZXh0Q2hhbmdlIiwib0V2ZW50Iiwib1NvdXJjZSIsImdldFNvdXJjZSIsIm9UYWJsZSIsIl9maW5kVGFibGVzIiwic29tZSIsIl9vVGFibGUiLCJnZXRSb3dCaW5kaW5nIiwib0N1cnJlbnRBY3Rpb25Qcm9taXNlIiwiX2VkaXRGbG93IiwiZ2V0Q3VycmVudEFjdGlvblByb21pc2UiLCJhVGFibGVDb250ZXh0cyIsImdldFR5cGUiLCJnZXRNZXRhZGF0YSIsImlzQSIsImdldENvbnRleHRzIiwiZ2V0Q3VycmVudENvbnRleHRzIiwib0FjdGlvblJlc3BvbnNlIiwiY29udHJvbElkIiwic0lkIiwib0FjdGlvbkRhdGEiLCJvRGF0YSIsImFLZXlzIiwia2V5cyIsImlOZXdJdGVtcCIsImZpbmQiLCJvVGFibGVDb250ZXh0IiwiaSIsIm9UYWJsZURhdGEiLCJnZXRPYmplY3QiLCJiQ29tcGFyZSIsImV2ZXJ5Iiwic0tleSIsImFEaWFsb2dzIiwiSW5zdGFuY2VNYW5hZ2VyIiwiZ2V0T3BlbkRpYWxvZ3MiLCJvRGlhbG9nIiwibGVuZ3RoIiwiZGlhbG9nIiwiZGF0YSIsImF0dGFjaEV2ZW50T25jZSIsImZvY3VzUm93IiwiZGVsZXRlQ3VycmVudEFjdGlvblByb21pc2UiLCJjYXRjaCIsImVyciIsIkxvZyIsImVycm9yIiwib01lc3NhZ2VCdXR0b24iLCJieUlkIiwiZmlyZU1vZGVsQ29udGV4dENoYW5nZSIsIm9uQ2FsbEFjdGlvbiIsIm9WaWV3Iiwic0FjdGlvbk5hbWUiLCJtUGFyYW1ldGVycyIsIm9Db250cm9sbGVyIiwiZWRpdEZsb3ciLCJpbnZva2VBY3Rpb24iLCJfc2hvd01lc3NhZ2VQb3BvdmVyIiwib25EYXRhUG9pbnRUaXRsZVByZXNzZWQiLCJvTWFuaWZlc3RPdXRib3VuZCIsInNDb250cm9sQ29uZmlnIiwic0NvbGxlY3Rpb25QYXRoIiwiSlNPTiIsInBhcnNlIiwib1RhcmdldEluZm8iLCJhU2VtYW50aWNPYmplY3RNYXBwaW5nIiwiQ29tbW9uVXRpbHMiLCJnZXRTZW1hbnRpY09iamVjdE1hcHBpbmciLCJvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJzTWV0YVBhdGgiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsImdldE1ldGFQYXRoIiwiZ2V0UGF0aCIsImFOYXZpZ2F0aW9uRGF0YSIsIl9nZXRDaGFydENvbnRleHREYXRhIiwiYWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzIiwibWFwIiwib05hdmlnYXRpb25EYXRhIiwibWV0YVBhdGgiLCJwYXJhbWV0ZXJzIiwib1BhcmFtcyIsIl9pbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJnZXRPdXRib3VuZFBhcmFtcyIsIk9iamVjdCIsInNlbWFudGljT2JqZWN0IiwiYWN0aW9uIiwibmF2aWdhdGUiLCJuYXZpZ2F0aW9uQ29udGV4dHMiLCJzZW1hbnRpY09iamVjdE1hcHBpbmciLCJvbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQiLCJzT3V0Ym91bmRUYXJnZXQiLCJvQ29udGV4dCIsInNDcmVhdGVQYXRoIiwib25OYXZpZ2F0ZUNoYW5nZSIsImdldEV4dGVuc2lvbkFQSSIsInVwZGF0ZUFwcFN0YXRlIiwiYlNlY3Rpb25OYXZpZ2F0ZWQiLCJvSW50ZXJuYWxNb2RlbENvbnRleHQiLCJvT2JqZWN0UGFnZSIsIl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCIsImdldFByb3BlcnR5IiwiZ2V0Vmlld0RhdGEiLCJzZWN0aW9uTGF5b3V0Iiwib1N1YlNlY3Rpb24iLCJnZXRQYXJhbWV0ZXIiLCJfdXBkYXRlRm9jdXNJbkVkaXRNb2RlIiwib25WYXJpYW50U2VsZWN0ZWQiLCJvblZhcmlhbnRTYXZlZCIsInNldFRpbWVvdXQiLCJuYXZpZ2F0ZVRvU3ViU2VjdGlvbiIsInZEZXRhaWxDb25maWciLCJvRGV0YWlsQ29uZmlnIiwib1NlY3Rpb24iLCJzZWN0aW9uSWQiLCJzdWJTZWN0aW9uSWQiLCJnZXRTdWJTZWN0aW9ucyIsImdldFBhcmVudCIsImdldFZpc2libGUiLCJnZXRSZXNvdXJjZUJ1bmRsZSIsIm9SZXNvdXJjZUJ1bmRsZSIsInNUaXRsZSIsImdldFRyYW5zbGF0ZWRUZXh0IiwiZW50aXR5U2V0IiwiTWVzc2FnZUJveCIsInNjcm9sbFRvU2VjdGlvbiIsImdldElkIiwiZmlyZU5hdmlnYXRlIiwic2VjdGlvbiIsInN1YlNlY3Rpb24iLCJvbkNoYXJ0U2VsZWN0aW9uQ2hhbmdlZCIsIkNoYXJ0UnVudGltZSIsImZuVXBkYXRlQ2hhcnQiLCJtQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXMiLCJFeHRlbnNpb25BUEkiLCJleHRlbnNpb25BUEkiLCJvbkluaXQiLCJzZXRQcm9wZXJ0eSIsInZpc2liaWxpdHkiLCJpdGVtcyIsIl9nZXRCYXRjaEdyb3Vwc0ZvclZpZXciLCJ1c2VOZXdMYXp5TG9hZGluZyIsImdldEVuYWJsZUxhenlMb2FkaW5nIiwiYXR0YWNoRXZlbnQiLCJfaGFuZGxlU3ViU2VjdGlvbkVudGVyZWRWaWV3UG9ydCIsIm9uRXhpdCIsImRlc3Ryb3kiLCJvTWVzc2FnZVBvcG92ZXIiLCJpc09wZW4iLCJjbG9zZSIsImlzS2VlcEFsaXZlIiwic2V0S2VlcEFsaXZlIiwiX2dldFRhYmxlQmluZGluZyIsIm9uQmVmb3JlUmVuZGVyaW5nIiwiUGFnZUNvbnRyb2xsZXIiLCJwcm90b3R5cGUiLCJhcHBseSIsIm9WaWV3RGF0YSIsInJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3QiLCJDb21tb25IZWxwZXIiLCJzZXRNZXRhTW9kZWwiLCJnZXRBcHBDb21wb25lbnQiLCJvbkFmdGVyUmVuZGVyaW5nIiwicmVzcG9uc2UiLCJvRXJyb3IiLCJfb25CZWZvcmVCaW5kaW5nIiwiYVRhYmxlcyIsIm9JbnRlcm5hbE1vZGVsIiwiYUJhdGNoR3JvdXBzIiwiaVZpZXdMZXZlbCIsInZpZXdMZXZlbCIsIm9GYXN0Q3JlYXRpb25Sb3ciLCJwdXNoIiwiYkRyYWZ0TmF2aWdhdGlvbiIsIl9jbG9zZVNpZGVDb250ZW50Iiwib3BDb250ZXh0IiwiaGFzUGVuZGluZ0NoYW5nZXMiLCJnZXRCaW5kaW5nIiwicmVzZXRDaGFuZ2VzIiwiZ2V0Q3JlYXRpb25Sb3ciLCJzZXRCaW5kaW5nQ29udGV4dCIsImZuU2Nyb2xsVG9QcmVzZW50U2VjdGlvbiIsImlzRmlyc3RSZW5kZXJpbmciLCJiUGVyc2lzdE9QU2Nyb2xsIiwic2V0U2VsZWN0ZWRTZWN0aW9uIiwib0RlbGVnYXRlT25CZWZvcmUiLCJhZGRFdmVudERlbGVnYXRlIiwicGFnZVJlYWR5IiwicmVtb3ZlRXZlbnREZWxlZ2F0ZSIsIm9CaW5kaW5nIiwibGlzdEJpbmRpbmciLCJvUGFnaW5hdG9yQ3VycmVudENvbnRleHQiLCJvQmluZGluZ1RvVXNlIiwicGFnaW5hdG9yIiwiaW5pdGlhbGl6ZSIsInNCaW5kaW5nUGF0aCIsInRlc3QiLCJzTGlzdEJpbmRpbmdQYXRoIiwicmVwbGFjZSIsIk9EYXRhTGlzdEJpbmRpbmciLCJvTW9kZWwiLCJfc2V0TGlzdEJpbmRpbmdBc3luYyIsImRldGFjaEV2ZW50IiwiYVNlY3Rpb25zIiwiZ2V0U2VjdGlvbnMiLCJiVXNlSWNvblRhYkJhciIsImdldFVzZUljb25UYWJCYXIiLCJpU2tpcCIsImJJc0luRWRpdE1vZGUiLCJiRWRpdGFibGVIZWFkZXIiLCJlZGl0YWJsZUhlYWRlckNvbnRlbnQiLCJpU2VjdGlvbiIsImFTdWJTZWN0aW9ucyIsImlTdWJTZWN0aW9uIiwiaXNWaXNpYmlsaXR5RHluYW1pYyIsInBsYWNlaG9sZGVyIiwiaXNQbGFjZWhvbGRlckVuYWJsZWQiLCJzaG93UGxhY2Vob2xkZXIiLCJvTmF2Q29udGFpbmVyIiwib0NvbnRhaW5lciIsIl9nZXRGaXJzdENsaWNrYWJsZUVsZW1lbnQiLCJvRmlyc3RDbGlja2FibGVFbGVtZW50IiwiYUFjdGlvbnMiLCJnZXRIZWFkZXJUaXRsZSIsImdldEFjdGlvbnMiLCJvQWN0aW9uIiwiZ2V0RW5hYmxlZCIsIl9nZXRGaXJzdEVtcHR5TWFuZGF0b3J5RmllbGRGcm9tU3ViU2VjdGlvbiIsImFCbG9ja3MiLCJnZXRCbG9ja3MiLCJibG9jayIsImFGb3JtQ29udGFpbmVycyIsImdldEZvcm1Db250YWluZXJzIiwiZ2V0Q29udGVudCIsImZvcm1Db250YWluZXIiLCJhRm9ybUVsZW1lbnRzIiwiZ2V0Rm9ybUVsZW1lbnRzIiwiZm9ybUVsZW1lbnQiLCJhRmllbGRzIiwiZ2V0RmllbGRzIiwiZ2V0UmVxdWlyZWQiLCJnZXRWYWx1ZSIsImRlYnVnIiwib01hbmRhdG9yeUZpZWxkIiwib0ZpZWxkVG9Gb2N1cyIsImNvbnRlbnQiLCJnZXRDb250ZW50RWRpdCIsIl9nZXRGaXJzdEVkaXRhYmxlSW5wdXQiLCJmb2N1cyIsIl9vbkJhY2tOYXZpZ2F0aW9uSW5EcmFmdCIsIm1lc3NhZ2VIYW5kbGVyIiwicmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzIiwiZ2V0Um91dGVyUHJveHkiLCJjaGVja0lmQmFja0hhc1NhbWVDb250ZXh0IiwiaGlzdG9yeSIsImJhY2siLCJkcmFmdCIsInByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uIiwiRnVuY3Rpb24iLCJOYXZpZ2F0aW9uVHlwZSIsIkJhY2tOYXZpZ2F0aW9uIiwiX29uQWZ0ZXJCaW5kaW5nIiwib0JpbmRpbmdDb250ZXh0IiwiZW5hYmxlRmFzdENyZWF0aW9uUm93Iiwib0xpc3RCaW5kaW5nIiwib0Zhc3RDcmVhdGlvbkxpc3RCaW5kaW5nIiwib0Zhc3RDcmVhdGlvbkNvbnRleHQiLCJvRmluYWxVSVN0YXRlIiwiYmluZExpc3QiLCJnZXRDb250ZXh0IiwiJCR1cGRhdGVHcm91cElkIiwiJCRncm91cElkIiwicmVmcmVzaEludGVybmFsIiwiY3JlYXRlIiwiY3JlYXRlZCIsInRyYWNlIiwiX3NpZGVFZmZlY3RzIiwiY2xlYXJQcm9wZXJ0aWVzU3RhdHVzIiwiYUlCTkFjdGlvbnMiLCJmb3JFYWNoIiwiZ2V0SUJOQWN0aW9ucyIsIm9UYWJsZVJvd0JpbmRpbmciLCJNb2RlbEhlbHBlciIsImlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsInJlbW92ZUNhY2hlc0FuZE1lc3NhZ2VzIiwib0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsInBhcnNlQ3VzdG9tRGF0YSIsIkRlbGVnYXRlVXRpbCIsImdldEN1c3RvbURhdGEiLCJhU2VsZWN0ZWRDb250ZXh0cyIsImdldFNlbGVjdGVkQ29udGV4dHMiLCJBY3Rpb25SdW50aW1lIiwic2V0QWN0aW9uRW5hYmxlbWVudCIsImNsZWFyU2VsZWN0aW9uIiwiZ2V0U2VtYW50aWNUYXJnZXRzRnJvbVBhZ2VNb2RlbCIsIm9PYmplY3RQYWdlVGl0bGUiLCJhSUJOSGVhZGVyQWN0aW9ucyIsImNvbmNhdCIsInVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5IiwiaGFuZGxlVGFibGVNb2RpZmljYXRpb25zIiwiZm5IYW5kbGVUYWJsZVBhdGNoRXZlbnRzIiwiZm5IYW5kbGVDaGFuZ2UiLCJkZXRhY2hDaGFuZ2UiLCJhdHRhY2hDaGFuZ2UiLCJjb21wdXRlRWRpdE1vZGUiLCJpc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZCIsImNvbm5lY3QiLCJvQ2FjaGUiLCJfdXBkYXRlUmVsYXRlZEFwcHMiLCJmblVwZGF0ZVJlbGF0ZWRBcHBzIiwiZGV0YWNoRGF0YVJlY2VpdmVkIiwiYXR0YWNoRGF0YVJlY2VpdmVkIiwiY3VycmVudEJpbmRpbmciLCJoYW5kbGVQYXRjaFNlbnQiLCJUYWJsZVV0aWxzIiwid2hlbkJvdW5kIiwiX3RyaWdnZXJWaXNpYmxlU3ViU2VjdGlvbnNFdmVudHMiLCJvblBhZ2VSZWFkeSIsInNldEZvY3VzIiwiaXNJbkRpc3BsYXlNb2RlIiwib1NlbGVjdGVkU2VjdGlvbiIsIkNvcmUiLCJnZXRTZWxlY3RlZFNlY3Rpb24iLCJiSXNTdGlja3lNb2RlIiwib0FwcENvbXBvbmVudCIsImdldFNoZWxsU2VydmljZXMiLCJzZXRCYWNrTmF2aWdhdGlvbiIsImdldEFwcFN0YXRlSGFuZGxlciIsImFwcGx5QXBwU3RhdGUiLCJmb3JjZUZvY3VzIiwiRXJyb3IiLCJfY2hlY2tEYXRhUG9pbnRUaXRsZUZvckV4dGVybmFsTmF2aWdhdGlvbiIsIl9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbiIsIm9PYmplY3RQYWdlU3VidGl0bGUiLCJvQ3VzdG9tRGF0YSIsImdldEtleSIsInRpdGxlIiwic3VidGl0bGUiLCJpbnRlbnQiLCJpY29uIiwiX2V4ZWN1dGVIZWFkZXJTaG9ydGN1dCIsInNCdXR0b25JZCIsIm9CdXR0b24iLCJvRWxlbWVudCIsImZpcmVCdXR0b25QcmVzcyIsIl9leGVjdXRlRm9vdGVyU2hvcnRjdXQiLCJnZXRGb290ZXIiLCJnZXROYW1lIiwiX2V4ZWN1dGVUYWJTaG9ydEN1dCIsIm9FeGVjdXRpb24iLCJpU2VjdGlvbkluZGV4TWF4Iiwic0NvbW1hbmQiLCJnZXRDb21tYW5kIiwibmV3U2VjdGlvbiIsImlTZWxlY3RlZFNlY3Rpb25JbmRleCIsImluZGV4T2ZTZWN0aW9uIiwiX2dldEZvb3RlclZpc2liaWxpdHkiLCJzVmlld0lkIiwic2FwIiwidWkiLCJnZXRDb3JlIiwiZ2V0TWVzc2FnZU1hbmFnZXIiLCJnZXRNZXNzYWdlTW9kZWwiLCJnZXREYXRhIiwib01lc3NhZ2UiLCJ2YWxpZGF0aW9uIiwidHlwZSIsInRhcmdldCIsImluZGV4T2YiLCJvUmV0Iiwicm9vdFZpZXdDb250cm9sbGVyIiwiZ2V0Um9vdFZpZXdDb250cm9sbGVyIiwiY3VycmVudFBhZ2VWaWV3IiwiaXNGY2xFbmFibGVkIiwiZ2V0UmlnaHRtb3N0VmlldyIsImdldFJvb3RDb250YWluZXIiLCJnZXRDdXJyZW50UGFnZSIsIm9JdGVtQmluZGluZyIsImdldExlbmd0aCIsInNldFZpc2libGUiLCJvcGVuQnkiLCJfZWRpdERvY3VtZW50IiwiQnVzeUxvY2tlciIsImxvY2siLCJlZGl0RG9jdW1lbnQiLCJmaW5hbGx5IiwidW5sb2NrIiwiX3NhdmVEb2N1bWVudCIsImFXYWl0Q3JlYXRlRG9jdW1lbnRzIiwiYkV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IiLCJjcmVhdGlvbk1vZGUiLCJjcmVhdGlvblJvdyIsImNyZWF0ZUF0RW5kIiwiYkNyZWF0ZURvY3VtZW50IiwiYlNraXBTaWRlRWZmZWN0cyIsImNyZWF0ZURvY3VtZW50IiwiUHJvbWlzZSIsImFsbCIsImFCaW5kaW5ncyIsImJpbmRpbmdzIiwic2F2ZURvY3VtZW50IiwiaXNMb2NrZWQiLCJfbWFuYWdlQ29sbGFib3JhdGlvbiIsIm9wZW5NYW5hZ2VEaWFsb2ciLCJfc2hvd0NvbGxhYm9yYXRpb25Vc2VyRGV0YWlscyIsImV2ZW50Iiwic2hvd1VzZXJEZXRhaWxzIiwiX2NhbmNlbERvY3VtZW50IiwiY2FuY2VsQnV0dG9uIiwiY2FuY2VsRG9jdW1lbnQiLCJfYXBwbHlEb2N1bWVudCIsImFwcGx5RG9jdW1lbnQiLCJyZXNvbHZlU3RyaW5ndG9Cb29sZWFuIiwidXBkYXRlUmVsYXRlZEFwcHNEZXRhaWxzIiwiX2ZpbmRUYWJsZUluU3ViU2VjdGlvbiIsImFQYXJlbnRFbGVtZW50IiwiYVN1YnNlY3Rpb24iLCJhU3ViU2VjdGlvblRhYmxlcyIsImVsZW1lbnQiLCJnZXRNYWluQ29udGVudCIsImdyaWRUYWJsZSIsImhhc1N0eWxlQ2xhc3MiLCJhZGRTdHlsZUNsYXNzIiwidGFibGUiLCJzZXRSb3dDb3VudCIsIl9nZXRBbGxTdWJTZWN0aW9ucyIsIl9nZXRBbGxCbG9ja3MiLCJnZXRNb3JlQmxvY2tzIiwib0Jsb2NrIiwib0NvbnRlbnQiLCJzZXRTaG93U2lkZUNvbnRlbnQiLCJvQ2hhcnRDb250ZXh0Iiwic0NoYXJ0UGF0aCIsIm9Db250ZXh0RGF0YSIsIm9DaGFydENvbnRleHREYXRhIiwiX3Njcm9sbFRhYmxlc1RvUm93Iiwic1Jvd1BhdGgiLCJUYWJsZVNjcm9sbGVyIiwic2Nyb2xsVGFibGVUb1JvdyIsIl9tZXJnZU11bHRpcGxlQ29udGV4dHMiLCJvUGFnZUNvbnRleHQiLCJhTGluZUNvbnRleHQiLCJhQXR0cmlidXRlcyIsImFQYWdlQXR0cmlidXRlcyIsInNNZXRhUGF0aExpbmUiLCJzUGF0aExpbmUiLCJzUGFnZVBhdGgiLCJvTWV0YU1vZGVsIiwic01ldGFQYXRoUGFnZSIsIm9TaW5nbGVDb250ZXh0Iiwib1N1YkNoYXJ0Q29udGV4dERhdGEiLCJjb250ZXh0RGF0YSIsInJlbW92ZVNlbnNpdGl2ZURhdGEiLCJvUGFnZUxldmVsU1YiLCJhZGRQYWdlQ29udGV4dFRvU2VsZWN0aW9uVmFyaWFudCIsIlNlbGVjdGlvblZhcmlhbnQiLCJzZWxlY3Rpb25WYXJpYW50IiwiYXR0cmlidXRlcyIsIm9Db25maWd1cmF0aW9ucyIsImNvbnRyb2xDb25maWd1cmF0aW9uIiwiYUNvbmZpZ3VyYXRpb25zIiwib0NvbmZpZ3VyYXRpb24iLCJyZXF1ZXN0R3JvdXBJZCIsIl9zZXRCcmVhZGNydW1iTGlua3MiLCJhUHJvbWlzZXMiLCJhU2tpcFBhcmFtZXRlcml6ZWQiLCJzTmV3UGF0aCIsImFQYXRoUGFydHMiLCJzcGxpdCIsInNQYXRoIiwic2hpZnQiLCJzcGxpY2UiLCJzUGF0aFBhcnQiLCJvUm9vdFZpZXdDb250cm9sbGVyIiwic1BhcmFtZXRlclBhdGgiLCJiUmVzdWx0Q29udGV4dCIsImdldFRpdGxlSW5mb0Zyb21QYXRoIiwidGl0bGVIaWVyYXJjaHlJbmZvcyIsImlkeCIsImhpZXJhcmNoeVBvc2l0aW9uIiwib0xpbmsiLCJ0aXRsZUhpZXJhcmNoeUluZm8iLCJnZXRMaW5rcyIsIkxpbmsiLCJzZXRUZXh0Iiwic2V0SHJlZiIsImFkZExpbmsiLCJvRGF0YVBvaW50cyIsImdldEhlYWRlckZhY2V0SXRlbUNvbmZpZ0ZvckV4dGVybmFsTmF2aWdhdGlvbiIsImdldFJvdXRpbmdTZXJ2aWNlIiwiZ2V0T3V0Ym91bmRzIiwib1NoZWxsU2VydmljZXMiLCJyZXF1ZXN0T2JqZWN0IiwiZm5HZXRMaW5rcyIsImZuT25FcnJvciIsImZuU2V0TGlua0VuYWJsZW1lbnQiLCJpZCIsImFTdXBwb3J0ZWRMaW5rcyIsInNMaW5rSWQiLCJzdXBwb3J0ZWQiLCJvU3ViRGF0YVBvaW50cyIsIm9QYWdlRGF0YSIsIm9EYXRhUG9pbnQiLCJvTGlua0NvbnRleHQiLCJvTGlua0RhdGEiLCJvTWl4ZWRDb250ZXh0IiwibWVyZ2UiLCJpdGVtIiwib01hcHBpbmciLCJzTWFpblByb3BlcnR5Iiwic01hcHBlZFByb3BlcnR5IiwiaGFzT3duUHJvcGVydHkiLCJvTmV3TWFwcGluZyIsImlzTmF2aWdhdGlvblN1cHBvcnRlZCIsInBhcmFtcyIsImFMaW5rcyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiT2JqZWN0UGFnZUNvbnRyb2xsZXIuY29udHJvbGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgbWVyZ2UgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCBBY3Rpb25SdW50aW1lIGZyb20gXCJzYXAvZmUvY29yZS9BY3Rpb25SdW50aW1lXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgQnVzeUxvY2tlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvQnVzeUxvY2tlclwiO1xuaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9jb2xsYWJvcmF0aW9uL0FjdGl2aXR5U3luY1wiO1xuaW1wb3J0IHsgb3Blbk1hbmFnZURpYWxvZywgc2hvd1VzZXJEZXRhaWxzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NvbGxhYm9yYXRpb24vTWFuYWdlXCI7XG5pbXBvcnQgRWRpdEZsb3cgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0VkaXRGbG93XCI7XG5pbXBvcnQgZHJhZnQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2VkaXRGbG93L2RyYWZ0XCI7XG5pbXBvcnQgSW50ZW50QmFzZWROYXZpZ2F0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBJbnRlcm5hbEVkaXRGbG93IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbEVkaXRGbG93XCI7XG5pbXBvcnQgSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxSb3V0aW5nIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbFJvdXRpbmdcIjtcbmltcG9ydCBNYXNzRWRpdCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvTWFzc0VkaXRcIjtcbmltcG9ydCBNZXNzYWdlSGFuZGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCBQYWdlUmVhZHkgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BhZ2VSZWFkeVwiO1xuaW1wb3J0IFBhZ2luYXRvciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvUGFnaW5hdG9yXCI7XG5pbXBvcnQgUGxhY2Vob2xkZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BsYWNlaG9sZGVyXCI7XG5pbXBvcnQgU2hhcmUgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1NoYXJlXCI7XG5pbXBvcnQgVmlld1N0YXRlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9WaWV3U3RhdGVcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCBleHRlbnNpYmxlLCBmaW5hbEV4dGVuc2lvbiwgcHVibGljRXh0ZW5zaW9uLCB1c2luZ0V4dGVuc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBDaGFydFJ1bnRpbWUgZnJvbSBcInNhcC9mZS9tYWNyb3MvY2hhcnQvQ2hhcnRSdW50aW1lXCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IERlbGVnYXRlVXRpbCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9EZWxlZ2F0ZVV0aWxcIjtcbmltcG9ydCBUYWJsZVV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1V0aWxzXCI7XG5pbXBvcnQgU2VsZWN0aW9uVmFyaWFudCBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vU2VsZWN0aW9uVmFyaWFudFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE9iamVjdFBhZ2VFeHRlbnNpb25BUEkgfSBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL0V4dGVuc2lvbkFQSVwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBFeHRlbnNpb25BUEkgfSBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL0V4dGVuc2lvbkFQSVwiO1xuaW1wb3J0IHR5cGUgUm9vdENvbnRhaW5lckJhc2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL1Jvb3RDb250YWluZXIvY29udHJvbGxlci9Sb290Q29udGFpbmVyQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBFZGl0Rmxvd092ZXJyaWRlcyBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9Sb290Q29udGFpbmVyL292ZXJyaWRlcy9FZGl0Rmxvd1wiO1xuaW1wb3J0IFRhYmxlU2Nyb2xsZXIgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvVGFibGVTY3JvbGxlclwiO1xuaW1wb3J0IEluc3RhbmNlTWFuYWdlciBmcm9tIFwic2FwL20vSW5zdGFuY2VNYW5hZ2VyXCI7XG5pbXBvcnQgTGluayBmcm9tIFwic2FwL20vTGlua1wiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCB0eXBlIFBvcG92ZXIgZnJvbSBcInNhcC9tL1BvcG92ZXJcIjtcbmltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgT3ZlcnJpZGVFeGVjdXRpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9PdmVycmlkZUV4ZWN1dGlvblwiO1xuaW1wb3J0IHR5cGUgQmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL0JpbmRpbmdcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL3Jlc291cmNlL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCB0eXBlIEJyZWFkQ3J1bWJzIGZyb20gXCJzYXAvdXhhcC9CcmVhZENydW1ic1wiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZSBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZVwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUxheW91dCBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUxheW91dFwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZVNlY3Rpb24gZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VTZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlU3ViU2VjdGlvbiBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZVN1YlNlY3Rpb25cIjtcbmltcG9ydCBJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxSb3V0aW5nT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL0ludGVybmFsUm91dGluZ1wiO1xuaW1wb3J0IE1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgUGFnaW5hdG9yT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL1BhZ2luYXRvclwiO1xuaW1wb3J0IFNoYXJlT3ZlcnJpZGVzIGZyb20gXCIuL292ZXJyaWRlcy9TaGFyZVwiO1xuaW1wb3J0IFZpZXdTdGF0ZU92ZXJyaWRlcyBmcm9tIFwiLi9vdmVycmlkZXMvVmlld1N0YXRlXCI7XG5cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5PYmplY3RQYWdlQ29udHJvbGxlclwiKVxuY2xhc3MgT2JqZWN0UGFnZUNvbnRyb2xsZXIgZXh0ZW5kcyBQYWdlQ29udHJvbGxlciB7XG5cdG9WaWV3ITogYW55O1xuXHRAdXNpbmdFeHRlbnNpb24oUGxhY2Vob2xkZXIpXG5cdHBsYWNlaG9sZGVyITogUGxhY2Vob2xkZXI7XG5cdEB1c2luZ0V4dGVuc2lvbihFZGl0Rmxvdylcblx0ZWRpdEZsb3chOiBFZGl0Rmxvdztcblx0QHVzaW5nRXh0ZW5zaW9uKFNoYXJlLm92ZXJyaWRlKFNoYXJlT3ZlcnJpZGVzKSlcblx0c2hhcmUhOiBTaGFyZTtcblx0QHVzaW5nRXh0ZW5zaW9uKEludGVybmFsRWRpdEZsb3cub3ZlcnJpZGUoRWRpdEZsb3dPdmVycmlkZXMpKVxuXHRfZWRpdEZsb3chOiBJbnRlcm5hbEVkaXRGbG93O1xuXHRAdXNpbmdFeHRlbnNpb24oSW50ZXJuYWxSb3V0aW5nLm92ZXJyaWRlKEludGVybmFsUm91dGluZ092ZXJyaWRlKSlcblx0X3JvdXRpbmchOiBJbnRlcm5hbFJvdXRpbmc7XG5cdEB1c2luZ0V4dGVuc2lvbihQYWdpbmF0b3Iub3ZlcnJpZGUoUGFnaW5hdG9yT3ZlcnJpZGUpKVxuXHRwYWdpbmF0b3IhOiBQYWdpbmF0b3I7XG5cdEB1c2luZ0V4dGVuc2lvbihNZXNzYWdlSGFuZGxlci5vdmVycmlkZShNZXNzYWdlSGFuZGxlck92ZXJyaWRlKSlcblx0bWVzc2FnZUhhbmRsZXIhOiBNZXNzYWdlSGFuZGxlcjtcblx0QHVzaW5nRXh0ZW5zaW9uKEludGVudEJhc2VkTmF2aWdhdGlvbi5vdmVycmlkZShJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSkpXG5cdGludGVudEJhc2VkTmF2aWdhdGlvbiE6IEludGVudEJhc2VkTmF2aWdhdGlvbjtcblx0QHVzaW5nRXh0ZW5zaW9uKFxuXHRcdEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uLm92ZXJyaWRlKHtcblx0XHRcdGdldE5hdmlnYXRpb25Nb2RlOiBmdW5jdGlvbiAodGhpczogSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdFx0Y29uc3QgYklzU3RpY2t5RWRpdE1vZGUgPVxuXHRcdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgT2JqZWN0UGFnZUNvbnRyb2xsZXIpLmdldFN0aWNreUVkaXRNb2RlICYmXG5cdFx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBPYmplY3RQYWdlQ29udHJvbGxlcikuZ2V0U3RpY2t5RWRpdE1vZGUoKTtcblx0XHRcdFx0cmV0dXJuIGJJc1N0aWNreUVkaXRNb2RlID8gXCJleHBsYWNlXCIgOiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fSlcblx0KVxuXHRfaW50ZW50QmFzZWROYXZpZ2F0aW9uITogSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cdEB1c2luZ0V4dGVuc2lvbihWaWV3U3RhdGUub3ZlcnJpZGUoVmlld1N0YXRlT3ZlcnJpZGVzKSlcblx0dmlld1N0YXRlITogVmlld1N0YXRlO1xuXHRAdXNpbmdFeHRlbnNpb24oXG5cdFx0UGFnZVJlYWR5Lm92ZXJyaWRlKHtcblx0XHRcdGlzQ29udGV4dEV4cGVjdGVkOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pXG5cdClcblx0cGFnZVJlYWR5ITogUGFnZVJlYWR5O1xuXHRAdXNpbmdFeHRlbnNpb24oTWFzc0VkaXQpXG5cdG1hc3NFZGl0ITogTWFzc0VkaXQ7XG5cdHByaXZhdGUgbUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzPzogUmVjb3JkPHN0cmluZywgT2JqZWN0UGFnZUV4dGVuc2lvbkFQST47XG5cdHByaXZhdGUgZXh0ZW5zaW9uQVBJPzogT2JqZWN0UGFnZUV4dGVuc2lvbkFQSTtcblx0cHJpdmF0ZSBvUmVzb3VyY2VCdW5kbGU/OiBSZXNvdXJjZUJ1bmRsZTtcblx0cHJpdmF0ZSBiU2VjdGlvbk5hdmlnYXRlZD86IGJvb2xlYW47XG5cdHByaXZhdGUgc3dpdGNoRHJhZnRBbmRBY3RpdmVQb3BPdmVyPzogUG9wb3Zlcjtcblx0cHJpdmF0ZSBjdXJyZW50QmluZGluZz86IEJpbmRpbmc7XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGdldEV4dGVuc2lvbkFQSShzSWQ/OiBzdHJpbmcpOiBFeHRlbnNpb25BUEkge1xuXHRcdGlmIChzSWQpIHtcblx0XHRcdC8vIHRvIGFsbG93IGxvY2FsIElEIHVzYWdlIGZvciBjdXN0b20gcGFnZXMgd2UnbGwgY3JlYXRlL3JldHVybiBvd24gaW5zdGFuY2VzIGZvciBjdXN0b20gc2VjdGlvbnNcblx0XHRcdHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzID0gdGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXMgfHwge307XG5cblx0XHRcdGlmICghdGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXSkge1xuXHRcdFx0XHR0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdID0gbmV3IEV4dGVuc2lvbkFQSSh0aGlzLCBzSWQpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICghdGhpcy5leHRlbnNpb25BUEkpIHtcblx0XHRcdFx0dGhpcy5leHRlbnNpb25BUEkgPSBuZXcgRXh0ZW5zaW9uQVBJKHRoaXMpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMuZXh0ZW5zaW9uQVBJO1xuXHRcdH1cblx0fVxuXG5cdG9uSW5pdCgpIHtcblx0XHRzdXBlci5vbkluaXQoKTtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cblx0XHQvLyBTZXR0aW5nIGRlZmF1bHRzIG9mIGludGVybmFsIG1vZGVsIGNvbnRleHRcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImV4dGVybmFsTmF2aWdhdGlvbkNvbnRleHRcIiwgeyBcInBhZ2VcIjogdHJ1ZSB9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJyZWxhdGVkQXBwc1wiLCB7XG5cdFx0XHR2aXNpYmlsaXR5OiBmYWxzZSxcblx0XHRcdGl0ZW1zOiBudWxsXG5cdFx0fSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiYmF0Y2hHcm91cHNcIiwgdGhpcy5fZ2V0QmF0Y2hHcm91cHNGb3JWaWV3KCkpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImVycm9yTmF2aWdhdGlvblNlY3Rpb25GbGFnXCIsIGZhbHNlKTtcblx0XHRpZiAoISh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkudXNlTmV3TGF6eUxvYWRpbmcgJiYgKG9PYmplY3RQYWdlIGFzIGFueSkuZ2V0RW5hYmxlTGF6eUxvYWRpbmcoKSkge1xuXHRcdFx0Ly9BdHRhY2hpbmcgdGhlIGV2ZW50IHRvIG1ha2UgdGhlIHN1YnNlY3Rpb24gY29udGV4dCBiaW5kaW5nIGFjdGl2ZSB3aGVuIGl0IGlzIHZpc2libGUuXG5cdFx0XHRvT2JqZWN0UGFnZS5hdHRhY2hFdmVudChcInN1YlNlY3Rpb25FbnRlcmVkVmlld1BvcnRcIiwgdGhpcy5faGFuZGxlU3ViU2VjdGlvbkVudGVyZWRWaWV3UG9ydC5iaW5kKHRoaXMpKTtcblx0XHR9XG5cdH1cblxuXHRvbkV4aXQoKSB7XG5cdFx0aWYgKHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHNJZCBvZiBPYmplY3Qua2V5cyh0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcykpIHtcblx0XHRcdFx0aWYgKHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF0pIHtcblx0XHRcdFx0XHR0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdLmRlc3Ryb3koKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZGVsZXRlIHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzO1xuXHRcdH1cblx0XHRpZiAodGhpcy5leHRlbnNpb25BUEkpIHtcblx0XHRcdHRoaXMuZXh0ZW5zaW9uQVBJLmRlc3Ryb3koKTtcblx0XHR9XG5cdFx0ZGVsZXRlIHRoaXMuZXh0ZW5zaW9uQVBJO1xuXG5cdFx0Y29uc3Qgb01lc3NhZ2VCdXR0b24gPSB0aGlzLmdldFZpZXcoKS5ieUlkKFwiZmU6OkZvb3RlckJhcjo6TWVzc2FnZUJ1dHRvblwiKSxcblx0XHRcdG9NZXNzYWdlUG9wb3ZlciA9IG9NZXNzYWdlQnV0dG9uID8gKG9NZXNzYWdlQnV0dG9uIGFzIGFueSkub01lc3NhZ2VQb3BvdmVyIDogbnVsbDtcblx0XHRpZiAob01lc3NhZ2VQb3BvdmVyICYmIG9NZXNzYWdlUG9wb3Zlci5pc09wZW4oKSkge1xuXHRcdFx0b01lc3NhZ2VQb3BvdmVyLmNsb3NlKCk7XG5cdFx0fVxuXHRcdC8vd2hlbiBleGl0aW5nIHdlIHNldCBrZWVwQWxpdmUgY29udGV4dCB0byBmYWxzZVxuXHRcdGNvbnN0IG9Db250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0O1xuXHRcdGlmIChvQ29udGV4dCAmJiBvQ29udGV4dC5pc0tlZXBBbGl2ZSgpKSB7XG5cdFx0XHRvQ29udGV4dC5zZXRLZWVwQWxpdmUoZmFsc2UpO1xuXHRcdH1cblx0fVxuXG5cdF9nZXRUYWJsZUJpbmRpbmcob1RhYmxlOiBhbnkpIHtcblx0XHRyZXR1cm4gb1RhYmxlICYmIG9UYWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdH1cblxuXHRvbkJlZm9yZVJlbmRlcmluZygpIHtcblx0XHRQYWdlQ29udHJvbGxlci5wcm90b3R5cGUub25CZWZvcmVSZW5kZXJpbmcuYXBwbHkodGhpcyk7XG5cdFx0Ly8gSW4gdGhlIHJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3Qgc2NlbmFyaW8gd2UgbmVlZCB0byBlbnN1cmUgaW4gY2FzZSBvZiByZWxvYWQvcmVmcmVzaCB0aGF0IHRoZSBtZXRhIG1vZGVsIGluIHRoZSBtZXRob2RlIHJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3Qgb2YgdGhlIEZpZWxkUnVudGltZSBpcyBhdmFpbGFibGVcblx0XHRpZiAodGhpcy5vVmlldy5vVmlld0RhdGE/LnJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3QgJiYgQ29tbW9uSGVscGVyLmdldE1ldGFNb2RlbCgpID09PSB1bmRlZmluZWQpIHtcblx0XHRcdENvbW1vbkhlbHBlci5zZXRNZXRhTW9kZWwodGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0fVxuXHR9XG5cblx0b25BZnRlclJlbmRlcmluZygpIHtcblx0XHQoKHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwic2FwLmZlLmkxOG5cIikgYXMgUmVzb3VyY2VNb2RlbCkuZ2V0UmVzb3VyY2VCdW5kbGUoKSBhcyBQcm9taXNlPFJlc291cmNlQnVuZGxlPilcblx0XHRcdC50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XG5cdFx0XHRcdHRoaXMub1Jlc291cmNlQnVuZGxlID0gcmVzcG9uc2U7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZXRyaWV2aW5nIHRoZSByZXNvdXJjZSBidW5kbGVcIiwgb0Vycm9yKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0X29uQmVmb3JlQmluZGluZyhvQ29udGV4dDogYW55LCBtUGFyYW1ldGVyczogYW55KSB7XG5cdFx0Ly8gVE9ETzogd2Ugc2hvdWxkIGNoZWNrIGhvdyB0aGlzIGNvbWVzIHRvZ2V0aGVyIHdpdGggdGhlIHRyYW5zYWN0aW9uIGhlbHBlciwgc2FtZSB0byB0aGUgY2hhbmdlIGluIHRoZSBhZnRlckJpbmRpbmdcblx0XHRjb25zdCBhVGFibGVzID0gdGhpcy5fZmluZFRhYmxlcygpLFxuXHRcdFx0b09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLFxuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdG9JbnRlcm5hbE1vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWwsXG5cdFx0XHRhQmF0Y2hHcm91cHMgPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJiYXRjaEdyb3Vwc1wiKSxcblx0XHRcdGlWaWV3TGV2ZWwgPSAodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLnZpZXdMZXZlbDtcblx0XHRsZXQgb0Zhc3RDcmVhdGlvblJvdztcblx0XHRhQmF0Y2hHcm91cHMucHVzaChcIiRhdXRvXCIpO1xuXHRcdGlmIChtUGFyYW1ldGVycy5iRHJhZnROYXZpZ2F0aW9uICE9PSB0cnVlKSB7XG5cdFx0XHR0aGlzLl9jbG9zZVNpZGVDb250ZW50KCk7XG5cdFx0fVxuXHRcdGNvbnN0IG9wQ29udGV4dCA9IG9PYmplY3RQYWdlLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dDtcblx0XHRpZiAoXG5cdFx0XHRvcENvbnRleHQgJiZcblx0XHRcdG9wQ29udGV4dC5oYXNQZW5kaW5nQ2hhbmdlcygpICYmXG5cdFx0XHQhYUJhdGNoR3JvdXBzLnNvbWUoKG9wQ29udGV4dC5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmhhc1BlbmRpbmdDaGFuZ2VzLmJpbmQob3BDb250ZXh0LmdldE1vZGVsKCkpKVxuXHRcdCkge1xuXHRcdFx0LyogXHRJbiBjYXNlIHRoZXJlIGFyZSBwZW5kaW5nIGNoYW5nZXMgZm9yIHRoZSBjcmVhdGlvbiByb3cgYW5kIG5vIG90aGVycyB3ZSBuZWVkIHRvIHJlc2V0IHRoZSBjaGFuZ2VzXG4gICAgXHRcdFx0XHRcdFx0VE9ETzogdGhpcyBpcyBqdXN0IGEgcXVpY2sgc29sdXRpb24sIHRoaXMgbmVlZHMgdG8gYmUgcmV3b3JrZWRcbiAgICBcdFx0XHRcdCBcdCovXG5cblx0XHRcdG9wQ29udGV4dC5nZXRCaW5kaW5nKCkucmVzZXRDaGFuZ2VzKCk7XG5cdFx0fVxuXG5cdFx0Ly8gRm9yIG5vdyB3ZSBoYXZlIHRvIHNldCB0aGUgYmluZGluZyBjb250ZXh0IHRvIG51bGwgZm9yIGV2ZXJ5IGZhc3QgY3JlYXRpb24gcm93XG5cdFx0Ly8gVE9ETzogR2V0IHJpZCBvZiB0aGlzIGNvZGluZyBvciBtb3ZlIGl0IHRvIGFub3RoZXIgbGF5ZXIgLSB0byBiZSBkaXNjdXNzZWQgd2l0aCBNREMgYW5kIG1vZGVsXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhVGFibGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRvRmFzdENyZWF0aW9uUm93ID0gYVRhYmxlc1tpXS5nZXRDcmVhdGlvblJvdygpO1xuXHRcdFx0aWYgKG9GYXN0Q3JlYXRpb25Sb3cpIHtcblx0XHRcdFx0b0Zhc3RDcmVhdGlvblJvdy5zZXRCaW5kaW5nQ29udGV4dChudWxsKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBTY3JvbGwgdG8gcHJlc2VudCBTZWN0aW9uIHNvIHRoYXQgYmluZGluZ3MgYXJlIGVuYWJsZWQgZHVyaW5nIG5hdmlnYXRpb24gdGhyb3VnaCBwYWdpbmF0b3IgYnV0dG9ucywgYXMgdGhlcmUgaXMgbm8gdmlldyByZXJlbmRlcmluZy9yZWJpbmRcblx0XHRjb25zdCBmblNjcm9sbFRvUHJlc2VudFNlY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRpZiAoIShvT2JqZWN0UGFnZSBhcyBhbnkpLmlzRmlyc3RSZW5kZXJpbmcoKSAmJiAhbVBhcmFtZXRlcnMuYlBlcnNpc3RPUFNjcm9sbCkge1xuXHRcdFx0XHRvT2JqZWN0UGFnZS5zZXRTZWxlY3RlZFNlY3Rpb24obnVsbCBhcyBhbnkpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0b09iamVjdFBhZ2UuYXR0YWNoRXZlbnRPbmNlKFwibW9kZWxDb250ZXh0Q2hhbmdlXCIsIGZuU2Nyb2xsVG9QcmVzZW50U2VjdGlvbik7XG5cblx0XHQvLyBpZiB0aGUgc3RydWN0dXJlIG9mIHRoZSBPYmplY3RQYWdlTGF5b3V0IGlzIGNoYW5nZWQgdGhlbiBzY3JvbGwgdG8gcHJlc2VudCBTZWN0aW9uXG5cdFx0Ly8gRklYTUUgSXMgdGhpcyByZWFsbHkgd29ya2luZyBhcyBpbnRlbmRlZCA/IEluaXRpYWxseSB0aGlzIHdhcyBvbkJlZm9yZVJlbmRlcmluZywgYnV0IG5ldmVyIHRyaWdnZXJlZCBvbkJlZm9yZVJlbmRlcmluZyBiZWNhdXNlIGl0IHdhcyByZWdpc3RlcmVkIGFmdGVyIGl0XG5cdFx0Y29uc3Qgb0RlbGVnYXRlT25CZWZvcmUgPSB7XG5cdFx0XHRvbkFmdGVyUmVuZGVyaW5nOiBmblNjcm9sbFRvUHJlc2VudFNlY3Rpb25cblx0XHR9O1xuXHRcdG9PYmplY3RQYWdlLmFkZEV2ZW50RGVsZWdhdGUob0RlbGVnYXRlT25CZWZvcmUsIHRoaXMpO1xuXHRcdHRoaXMucGFnZVJlYWR5LmF0dGFjaEV2ZW50T25jZShcInBhZ2VSZWFkeVwiLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRvT2JqZWN0UGFnZS5yZW1vdmVFdmVudERlbGVnYXRlKG9EZWxlZ2F0ZU9uQmVmb3JlKTtcblx0XHR9KTtcblxuXHRcdC8vU2V0IHRoZSBCaW5kaW5nIGZvciBQYWdpbmF0b3JzIHVzaW5nIExpc3RCaW5kaW5nIElEXG5cdFx0aWYgKGlWaWV3TGV2ZWwgPiAxKSB7XG5cdFx0XHRsZXQgb0JpbmRpbmcgPSBtUGFyYW1ldGVycyAmJiBtUGFyYW1ldGVycy5saXN0QmluZGluZztcblx0XHRcdGNvbnN0IG9QYWdpbmF0b3JDdXJyZW50Q29udGV4dCA9IG9JbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KFwiL3BhZ2luYXRvckN1cnJlbnRDb250ZXh0XCIpO1xuXHRcdFx0aWYgKG9QYWdpbmF0b3JDdXJyZW50Q29udGV4dCkge1xuXHRcdFx0XHRjb25zdCBvQmluZGluZ1RvVXNlID0gb1BhZ2luYXRvckN1cnJlbnRDb250ZXh0LmdldEJpbmRpbmcoKTtcblx0XHRcdFx0dGhpcy5wYWdpbmF0b3IuaW5pdGlhbGl6ZShvQmluZGluZ1RvVXNlLCBvUGFnaW5hdG9yQ3VycmVudENvbnRleHQpO1xuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9wYWdpbmF0b3JDdXJyZW50Q29udGV4dFwiLCBudWxsKTtcblx0XHRcdH0gZWxzZSBpZiAob0JpbmRpbmcpIHtcblx0XHRcdFx0aWYgKG9CaW5kaW5nLmlzQShcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCIpKSB7XG5cdFx0XHRcdFx0dGhpcy5wYWdpbmF0b3IuaW5pdGlhbGl6ZShvQmluZGluZywgb0NvbnRleHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIGlmIHRoZSBiaW5kaW5nIHR5cGUgaXMgbm90IE9EYXRhTGlzdEJpbmRpbmcgYmVjYXVzZSBvZiBhIGRlZXBsaW5rIG5hdmlnYXRpb24gb3IgYSByZWZyZXNoIG9mIHRoZSBwYWdlXG5cdFx0XHRcdFx0Ly8gd2UgbmVlZCB0byBjcmVhdGUgaXRcblx0XHRcdFx0XHRjb25zdCBzQmluZGluZ1BhdGggPSBvQmluZGluZy5nZXRQYXRoKCk7XG5cdFx0XHRcdFx0aWYgKC9cXChbXlxcKV0qXFwpJC8udGVzdChzQmluZGluZ1BhdGgpKSB7XG5cdFx0XHRcdFx0XHQvLyBUaGUgY3VycmVudCBiaW5kaW5nIHBhdGggZW5kcyB3aXRoICh4eHgpLCBzbyB3ZSBjcmVhdGUgdGhlIGxpc3RCaW5kaW5nIGJ5IHJlbW92aW5nICh4eHgpXG5cdFx0XHRcdFx0XHRjb25zdCBzTGlzdEJpbmRpbmdQYXRoID0gc0JpbmRpbmdQYXRoLnJlcGxhY2UoL1xcKFteXFwpXSpcXCkkLywgXCJcIik7XG5cdFx0XHRcdFx0XHRvQmluZGluZyA9IG5ldyAoT0RhdGFMaXN0QmluZGluZyBhcyBhbnkpKG9CaW5kaW5nLm9Nb2RlbCwgc0xpc3RCaW5kaW5nUGF0aCk7XG5cdFx0XHRcdFx0XHRjb25zdCBfc2V0TGlzdEJpbmRpbmdBc3luYyA9ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0aWYgKG9CaW5kaW5nLmdldENvbnRleHRzKCkubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMucGFnaW5hdG9yLmluaXRpYWxpemUob0JpbmRpbmcsIG9Db250ZXh0KTtcblx0XHRcdFx0XHRcdFx0XHRvQmluZGluZy5kZXRhY2hFdmVudChcImNoYW5nZVwiLCBfc2V0TGlzdEJpbmRpbmdBc3luYyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdG9CaW5kaW5nLmdldENvbnRleHRzKDApO1xuXHRcdFx0XHRcdFx0b0JpbmRpbmcuYXR0YWNoRXZlbnQoXCJjaGFuZ2VcIiwgX3NldExpc3RCaW5kaW5nQXN5bmMpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyBUaGUgY3VycmVudCBiaW5kaW5nIGRvZXNuJ3QgZW5kIHdpdGggKHh4eCkgLS0+IHRoZSBsYXN0IHNlZ21lbnQgaXMgYSAxLTEgbmF2aWdhdGlvbiwgc28gd2UgZG9uJ3QgZGlzcGxheSB0aGUgcGFnaW5hdG9yXG5cdFx0XHRcdFx0XHR0aGlzLnBhZ2luYXRvci5pbml0aWFsaXplKHVuZGVmaW5lZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICghKHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55KS51c2VOZXdMYXp5TG9hZGluZyAmJiBvT2JqZWN0UGFnZS5nZXRFbmFibGVMYXp5TG9hZGluZygpKSB7XG5cdFx0XHRjb25zdCBhU2VjdGlvbnMgPSBvT2JqZWN0UGFnZS5nZXRTZWN0aW9ucygpO1xuXHRcdFx0Y29uc3QgYlVzZUljb25UYWJCYXIgPSBvT2JqZWN0UGFnZS5nZXRVc2VJY29uVGFiQmFyKCk7XG5cdFx0XHRsZXQgaVNraXAgPSAyO1xuXHRcdFx0Y29uc3QgYklzSW5FZGl0TW9kZSA9IG9PYmplY3RQYWdlLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKTtcblx0XHRcdGNvbnN0IGJFZGl0YWJsZUhlYWRlciA9ICh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkuZWRpdGFibGVIZWFkZXJDb250ZW50O1xuXHRcdFx0Zm9yIChsZXQgaVNlY3Rpb24gPSAwOyBpU2VjdGlvbiA8IGFTZWN0aW9ucy5sZW5ndGg7IGlTZWN0aW9uKyspIHtcblx0XHRcdFx0Y29uc3Qgb1NlY3Rpb24gPSBhU2VjdGlvbnNbaVNlY3Rpb25dO1xuXHRcdFx0XHRjb25zdCBhU3ViU2VjdGlvbnMgPSBvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpO1xuXHRcdFx0XHRmb3IgKGxldCBpU3ViU2VjdGlvbiA9IDA7IGlTdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgaVN1YlNlY3Rpb24rKywgaVNraXAtLSkge1xuXHRcdFx0XHRcdC8vIEluIEljb25UYWJCYXIgbW9kZSBrZWVwIHRoZSBzZWNvbmQgc2VjdGlvbiBib3VuZCBpZiB0aGVyZSBpcyBhbiBlZGl0YWJsZSBoZWFkZXIgYW5kIHdlIGFyZSBzd2l0Y2hpbmcgdG8gZGlzcGxheSBtb2RlXG5cdFx0XHRcdFx0aWYgKGlTa2lwIDwgMSB8fCAoYlVzZUljb25UYWJCYXIgJiYgKGlTZWN0aW9uID4gMSB8fCAoaVNlY3Rpb24gPT09IDEgJiYgIWJFZGl0YWJsZUhlYWRlciAmJiAhYklzSW5FZGl0TW9kZSkpKSkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb1N1YlNlY3Rpb24gPSBhU3ViU2VjdGlvbnNbaVN1YlNlY3Rpb25dO1xuXHRcdFx0XHRcdFx0aWYgKG9TdWJTZWN0aW9uLmRhdGEoKS5pc1Zpc2liaWxpdHlEeW5hbWljICE9PSBcInRydWVcIikge1xuXHRcdFx0XHRcdFx0XHRvU3ViU2VjdGlvbi5zZXRCaW5kaW5nQ29udGV4dChudWxsIGFzIGFueSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMucGxhY2Vob2xkZXIuaXNQbGFjZWhvbGRlckVuYWJsZWQoKSAmJiBtUGFyYW1ldGVycy5zaG93UGxhY2Vob2xkZXIpIHtcblx0XHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0XHRjb25zdCBvTmF2Q29udGFpbmVyID0gKG9WaWV3LmdldFBhcmVudCgpIGFzIGFueSkub0NvbnRhaW5lci5nZXRQYXJlbnQoKTtcblx0XHRcdGlmIChvTmF2Q29udGFpbmVyKSB7XG5cdFx0XHRcdG9OYXZDb250YWluZXIuc2hvd1BsYWNlaG9sZGVyKHt9KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfZ2V0Rmlyc3RDbGlja2FibGVFbGVtZW50KG9PYmplY3RQYWdlOiBhbnkpIHtcblx0XHRsZXQgb0ZpcnN0Q2xpY2thYmxlRWxlbWVudDtcblx0XHRjb25zdCBhQWN0aW9ucyA9IG9PYmplY3RQYWdlLmdldEhlYWRlclRpdGxlKCkgJiYgb09iamVjdFBhZ2UuZ2V0SGVhZGVyVGl0bGUoKS5nZXRBY3Rpb25zKCk7XG5cdFx0aWYgKGFBY3Rpb25zICYmIGFBY3Rpb25zLmxlbmd0aCkge1xuXHRcdFx0b0ZpcnN0Q2xpY2thYmxlRWxlbWVudCA9IGFBY3Rpb25zLmZpbmQoZnVuY3Rpb24gKG9BY3Rpb246IGFueSkge1xuXHRcdFx0XHQvLyBEdWUgdG8gdGhlIGxlZnQgYWxpZ25tZW50IG9mIHRoZSBEcmFmdCBzd2l0Y2ggYW5kIHRoZSBjb2xsYWJvcmF0aXZlIGRyYWZ0IGF2YXRhciBjb250cm9sc1xuXHRcdFx0XHQvLyB0aGVyZSBpcyBhIFRvb2xiYXJTcGFjZXIgaW4gdGhlIGFjdGlvbnMgYWdncmVnYXRpb24gd2hpY2ggd2UgbmVlZCB0byBleGNsdWRlIGhlcmUhXG5cdFx0XHRcdC8vIER1ZSB0byB0aGUgQUNDIHJlcG9ydCwgd2UgYWxzbyBuZWVkIG5vdCB0byBjaGVjayBmb3IgdGhlIEludmlzaWJsZVRleHQgZWxlbWVudHNcblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQhb0FjdGlvbi5pc0EoXCJzYXAudWkuY29yZS5JbnZpc2libGVUZXh0XCIpICYmXG5cdFx0XHRcdFx0IW9BY3Rpb24uaXNBKFwic2FwLm0uVG9vbGJhclNwYWNlclwiKSAmJlxuXHRcdFx0XHRcdG9BY3Rpb24uZ2V0VmlzaWJsZSgpICYmXG5cdFx0XHRcdFx0b0FjdGlvbi5nZXRFbmFibGVkKClcblx0XHRcdFx0KTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gb0ZpcnN0Q2xpY2thYmxlRWxlbWVudDtcblx0fVxuXG5cdF9nZXRGaXJzdEVtcHR5TWFuZGF0b3J5RmllbGRGcm9tU3ViU2VjdGlvbihhU3ViU2VjdGlvbnM6IGFueSkge1xuXHRcdGlmIChhU3ViU2VjdGlvbnMpIHtcblx0XHRcdGZvciAobGV0IHN1YlNlY3Rpb24gPSAwOyBzdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgc3ViU2VjdGlvbisrKSB7XG5cdFx0XHRcdGNvbnN0IGFCbG9ja3MgPSBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0QmxvY2tzKCk7XG5cblx0XHRcdFx0aWYgKGFCbG9ja3MpIHtcblx0XHRcdFx0XHRmb3IgKGxldCBibG9jayA9IDA7IGJsb2NrIDwgYUJsb2Nrcy5sZW5ndGg7IGJsb2NrKyspIHtcblx0XHRcdFx0XHRcdGxldCBhRm9ybUNvbnRhaW5lcnM7XG5cblx0XHRcdFx0XHRcdGlmIChhQmxvY2tzW2Jsb2NrXS5pc0EoXCJzYXAudWkubGF5b3V0LmZvcm0uRm9ybVwiKSkge1xuXHRcdFx0XHRcdFx0XHRhRm9ybUNvbnRhaW5lcnMgPSBhQmxvY2tzW2Jsb2NrXS5nZXRGb3JtQ29udGFpbmVycygpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0XHRcdFx0YUJsb2Nrc1tibG9ja10uZ2V0Q29udGVudCAmJlxuXHRcdFx0XHRcdFx0XHRhQmxvY2tzW2Jsb2NrXS5nZXRDb250ZW50KCkgJiZcblx0XHRcdFx0XHRcdFx0YUJsb2Nrc1tibG9ja10uZ2V0Q29udGVudCgpLmlzQShcInNhcC51aS5sYXlvdXQuZm9ybS5Gb3JtXCIpXG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0YUZvcm1Db250YWluZXJzID0gYUJsb2Nrc1tibG9ja10uZ2V0Q29udGVudCgpLmdldEZvcm1Db250YWluZXJzKCk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChhRm9ybUNvbnRhaW5lcnMpIHtcblx0XHRcdFx0XHRcdFx0Zm9yIChsZXQgZm9ybUNvbnRhaW5lciA9IDA7IGZvcm1Db250YWluZXIgPCBhRm9ybUNvbnRhaW5lcnMubGVuZ3RoOyBmb3JtQ29udGFpbmVyKyspIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBhRm9ybUVsZW1lbnRzID0gYUZvcm1Db250YWluZXJzW2Zvcm1Db250YWluZXJdLmdldEZvcm1FbGVtZW50cygpO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChhRm9ybUVsZW1lbnRzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IgKGxldCBmb3JtRWxlbWVudCA9IDA7IGZvcm1FbGVtZW50IDwgYUZvcm1FbGVtZW50cy5sZW5ndGg7IGZvcm1FbGVtZW50KyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgYUZpZWxkcyA9IGFGb3JtRWxlbWVudHNbZm9ybUVsZW1lbnRdLmdldEZpZWxkcygpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFRoZSBmaXJzdCBmaWVsZCBpcyBub3QgbmVjZXNzYXJpbHkgYW4gSW5wdXRCYXNlIChlLmcuIGNvdWxkIGJlIGEgVGV4dClcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU28gd2UgbmVlZCB0byBjaGVjayB3aGV0aGVyIGl0IGhhcyBhIGdldFJlcXVpcmVkIG1ldGhvZFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChhRmllbGRzWzBdLmdldFJlcXVpcmVkICYmIGFGaWVsZHNbMF0uZ2V0UmVxdWlyZWQoKSAmJiAhYUZpZWxkc1swXS5nZXRWYWx1ZSgpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gYUZpZWxkc1swXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0TG9nLmRlYnVnKGBFcnJvciB3aGVuIHNlYXJjaGluZyBmb3IgbWFuZGFvdHJ5IGVtcHR5IGZpZWxkOiAke2Vycm9yfWApO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRfdXBkYXRlRm9jdXNJbkVkaXRNb2RlKGFTdWJTZWN0aW9uczogYW55KSB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXG5cdFx0Y29uc3Qgb01hbmRhdG9yeUZpZWxkID0gdGhpcy5fZ2V0Rmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkRnJvbVN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zKTtcblx0XHRsZXQgb0ZpZWxkVG9Gb2N1czogYW55O1xuXHRcdGlmIChvTWFuZGF0b3J5RmllbGQpIHtcblx0XHRcdG9GaWVsZFRvRm9jdXMgPSBvTWFuZGF0b3J5RmllbGQuY29udGVudC5nZXRDb250ZW50RWRpdCgpWzBdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvRmllbGRUb0ZvY3VzID0gKG9PYmplY3RQYWdlIGFzIGFueSkuX2dldEZpcnN0RWRpdGFibGVJbnB1dCgpIHx8IHRoaXMuX2dldEZpcnN0Q2xpY2thYmxlRWxlbWVudChvT2JqZWN0UGFnZSk7XG5cdFx0fVxuXG5cdFx0aWYgKG9GaWVsZFRvRm9jdXMpIHtcblx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHQvLyBXZSBzZXQgdGhlIGZvY3VzIGluIGEgdGltZWVvdXQsIG90aGVyd2lzZSB0aGUgZm9jdXMgc29tZXRpbWVzIGdvZXMgdG8gdGhlIFRhYkJhclxuXHRcdFx0XHRvRmllbGRUb0ZvY3VzLmZvY3VzKCk7XG5cdFx0XHR9LCAwKTtcblx0XHR9XG5cdH1cblxuXHRfaGFuZGxlU3ViU2VjdGlvbkVudGVyZWRWaWV3UG9ydChvRXZlbnQ6IGFueSkge1xuXHRcdGNvbnN0IG9TdWJTZWN0aW9uID0gb0V2ZW50LmdldFBhcmFtZXRlcihcInN1YlNlY3Rpb25cIik7XG5cdFx0b1N1YlNlY3Rpb24uc2V0QmluZGluZ0NvbnRleHQodW5kZWZpbmVkKTtcblx0fVxuXG5cdF9vbkJhY2tOYXZpZ2F0aW9uSW5EcmFmdChvQ29udGV4dDogYW55KSB7XG5cdFx0dGhpcy5tZXNzYWdlSGFuZGxlci5yZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRpZiAodGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb3V0ZXJQcm94eSgpLmNoZWNrSWZCYWNrSGFzU2FtZUNvbnRleHQoKSkge1xuXHRcdFx0Ly8gQmFjayBuYXYgd2lsbCBrZWVwIHRoZSBzYW1lIGNvbnRleHQgLS0+IG5vIG5lZWQgdG8gZGlzcGxheSB0aGUgZGlhbG9nXG5cdFx0XHRoaXN0b3J5LmJhY2soKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZHJhZnQucHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24oXG5cdFx0XHRcdGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRoaXN0b3J5LmJhY2soKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0RnVuY3Rpb24ucHJvdG90eXBlLFxuXHRcdFx0XHRvQ29udGV4dCxcblx0XHRcdFx0dGhpcyxcblx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdGRyYWZ0Lk5hdmlnYXRpb25UeXBlLkJhY2tOYXZpZ2F0aW9uXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0X29uQWZ0ZXJCaW5kaW5nKG9CaW5kaW5nQ29udGV4dDogYW55LCBtUGFyYW1ldGVyczogYW55KSB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGNvbnN0IGFUYWJsZXMgPSB0aGlzLl9maW5kVGFibGVzKCk7XG5cblx0XHR0aGlzLl9zaWRlRWZmZWN0cy5jbGVhclByb3BlcnRpZXNTdGF0dXMoKTtcblxuXHRcdC8vIFRPRE86IHRoaXMgaXMgb25seSBhIHRlbXAgc29sdXRpb24gYXMgbG9uZyBhcyB0aGUgbW9kZWwgZml4IHRoZSBjYWNoZSBpc3N1ZSBhbmQgd2UgdXNlIHRoaXMgYWRkaXRpb25hbFxuXHRcdC8vIGJpbmRpbmcgd2l0aCBvd25SZXF1ZXN0XG5cdFx0b0JpbmRpbmdDb250ZXh0ID0gb09iamVjdFBhZ2UuZ2V0QmluZGluZ0NvbnRleHQoKTtcblxuXHRcdGxldCBhSUJOQWN0aW9uczogYW55W10gPSBbXTtcblx0XHRvT2JqZWN0UGFnZS5nZXRTZWN0aW9ucygpLmZvckVhY2goZnVuY3Rpb24gKG9TZWN0aW9uOiBhbnkpIHtcblx0XHRcdG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1N1YlNlY3Rpb246IGFueSkge1xuXHRcdFx0XHRhSUJOQWN0aW9ucyA9IENvbW1vblV0aWxzLmdldElCTkFjdGlvbnMob1N1YlNlY3Rpb24sIGFJQk5BY3Rpb25zKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0Ly8gQXNzaWduIGludGVybmFsIGJpbmRpbmcgY29udGV4dHMgdG8gb0Zvcm1Db250YWluZXI6XG5cdFx0Ly8gMS4gSXQgaXMgbm90IHBvc3NpYmxlIHRvIGFzc2lnbiB0aGUgaW50ZXJuYWwgYmluZGluZyBjb250ZXh0IHRvIHRoZSBYTUwgZnJhZ21lbnRcblx0XHQvLyAoRm9ybUNvbnRhaW5lci5mcmFnbWVudC54bWwpIHlldCAtIGl0IGlzIHVzZWQgYWxyZWFkeSBmb3IgdGhlIGRhdGEtc3RydWN0dXJlLlxuXHRcdC8vIDIuIEFub3RoZXIgcHJvYmxlbSBpcywgdGhhdCBGb3JtQ29udGFpbmVycyBhc3NpZ25lZCB0byBhICdNb3JlQmxvY2snIGRvZXMgbm90IGhhdmUgYW5cblx0XHQvLyBpbnRlcm5hbCBtb2RlbCBjb250ZXh0IGF0IGFsbC5cblxuXHRcdGFUYWJsZXMuZm9yRWFjaChmdW5jdGlvbiAob1RhYmxlOiBhbnkpIHtcblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3JlYXRpb25Sb3dGaWVsZFZhbGlkaXR5XCIsIHt9KTtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImNyZWF0aW9uUm93Q3VzdG9tVmFsaWRpdHlcIiwge30pO1xuXG5cdFx0XHRhSUJOQWN0aW9ucyA9IENvbW1vblV0aWxzLmdldElCTkFjdGlvbnMob1RhYmxlLCBhSUJOQWN0aW9ucyk7XG5cdFx0XHQvLyB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3IgQkNQOiAyMDgwMjE4MDA0XG5cdFx0XHQvLyBOZWVkIHRvIGZpeCB3aXRoIEJMSTogRklPUklURUNIUDEtMTUyNzRcblx0XHRcdC8vIG9ubHkgZm9yIGVkaXQgbW9kZSwgd2UgY2xlYXIgdGhlIHRhYmxlIGNhY2hlXG5cdFx0XHQvLyBXb3JrYXJvdW5kIHN0YXJ0cyBoZXJlISFcblx0XHRcdGNvbnN0IG9UYWJsZVJvd0JpbmRpbmcgPSBvVGFibGUuZ2V0Um93QmluZGluZygpO1xuXHRcdFx0aWYgKG9UYWJsZVJvd0JpbmRpbmcpIHtcblx0XHRcdFx0aWYgKE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChvVGFibGVSb3dCaW5kaW5nLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkpKSB7XG5cdFx0XHRcdFx0Ly8gYXBwbHkgZm9yIGJvdGggZWRpdCBhbmQgZGlzcGxheSBtb2RlIGluIHN0aWNreVxuXHRcdFx0XHRcdG9UYWJsZVJvd0JpbmRpbmcucmVtb3ZlQ2FjaGVzQW5kTWVzc2FnZXMoXCJcIik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIFdvcmthcm91bmQgZW5kcyBoZXJlISFcblxuXHRcdFx0Ly8gVXBkYXRlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiBEYXRhRmllbGRGb3JBY3Rpb24gYnV0dG9ucyBvbiB0YWJsZSB0b29sYmFyXG5cdFx0XHQvLyBUaGUgc2FtZSBpcyBhbHNvIHBlcmZvcm1lZCBvbiBUYWJsZSBzZWxlY3Rpb25DaGFuZ2UgZXZlbnRcblx0XHRcdGNvbnN0IG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAgPSBKU09OLnBhcnNlKFxuXHRcdFx0XHRcdENvbW1vbkhlbHBlci5wYXJzZUN1c3RvbURhdGEoRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGEob1RhYmxlLCBcIm9wZXJhdGlvbkF2YWlsYWJsZU1hcFwiKSlcblx0XHRcdFx0KSxcblx0XHRcdFx0YVNlbGVjdGVkQ29udGV4dHMgPSBvVGFibGUuZ2V0U2VsZWN0ZWRDb250ZXh0cygpO1xuXG5cdFx0XHRBY3Rpb25SdW50aW1lLnNldEFjdGlvbkVuYWJsZW1lbnQob0ludGVybmFsTW9kZWxDb250ZXh0LCBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwLCBhU2VsZWN0ZWRDb250ZXh0cywgXCJ0YWJsZVwiKTtcblx0XHRcdC8vIENsZWFyIHRoZSBzZWxlY3Rpb24gaW4gdGhlIHRhYmxlLCBuZWVkIHRvIGJlIGZpeGVkIGFuZCByZXZpZXcgd2l0aCBCTEk6IEZJT1JJVEVDSFAxLTI0MzE4XG5cdFx0XHRvVGFibGUuY2xlYXJTZWxlY3Rpb24oKTtcblx0XHR9KTtcblx0XHRDb21tb25VdGlscy5nZXRTZW1hbnRpY1RhcmdldHNGcm9tUGFnZU1vZGVsKHRoaXMsIFwiX3BhZ2VNb2RlbFwiKTtcblx0XHQvL1JldHJpZXZlIE9iamVjdCBQYWdlIGhlYWRlciBhY3Rpb25zIGZyb20gT2JqZWN0IFBhZ2UgdGl0bGUgY29udHJvbFxuXHRcdGNvbnN0IG9PYmplY3RQYWdlVGl0bGUgPSBvT2JqZWN0UGFnZS5nZXRIZWFkZXJUaXRsZSgpO1xuXHRcdGxldCBhSUJOSGVhZGVyQWN0aW9uczogYW55W10gPSBbXTtcblx0XHRhSUJOSGVhZGVyQWN0aW9ucyA9IENvbW1vblV0aWxzLmdldElCTkFjdGlvbnMob09iamVjdFBhZ2VUaXRsZSwgYUlCTkhlYWRlckFjdGlvbnMpO1xuXHRcdGFJQk5BY3Rpb25zID0gYUlCTkFjdGlvbnMuY29uY2F0KGFJQk5IZWFkZXJBY3Rpb25zKTtcblx0XHRDb21tb25VdGlscy51cGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eShhSUJOQWN0aW9ucywgdGhpcy5nZXRWaWV3KCkpO1xuXG5cdFx0bGV0IG9Nb2RlbDogYW55LCBvRmluYWxVSVN0YXRlOiBhbnk7XG5cblx0XHQvLyBUT0RPOiB0aGlzIHNob3VsZCBiZSBtb3ZlZCBpbnRvIGFuIGluaXQgZXZlbnQgb2YgdGhlIE1EQyB0YWJsZXMgKG5vdCB5ZXQgZXhpc3RpbmcpIGFuZCBzaG91bGQgYmUgcGFydFxuXHRcdC8vIG9mIGFueSBjb250cm9sbGVyIGV4dGVuc2lvblxuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSBvVGFibGVcblx0XHQgKiBAcGFyYW0gb0xpc3RCaW5kaW5nXG5cdFx0ICovXG5cdFx0YXN5bmMgZnVuY3Rpb24gZW5hYmxlRmFzdENyZWF0aW9uUm93KG9UYWJsZTogYW55LCBvTGlzdEJpbmRpbmc6IGFueSkge1xuXHRcdFx0Y29uc3Qgb0Zhc3RDcmVhdGlvblJvdyA9IG9UYWJsZS5nZXRDcmVhdGlvblJvdygpO1xuXHRcdFx0bGV0IG9GYXN0Q3JlYXRpb25MaXN0QmluZGluZywgb0Zhc3RDcmVhdGlvbkNvbnRleHQ7XG5cblx0XHRcdGlmIChvRmFzdENyZWF0aW9uUm93KSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0YXdhaXQgb0ZpbmFsVUlTdGF0ZTtcblx0XHRcdFx0XHRpZiAob0Zhc3RDcmVhdGlvblJvdy5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIikpIHtcblx0XHRcdFx0XHRcdG9GYXN0Q3JlYXRpb25MaXN0QmluZGluZyA9IG9Nb2RlbC5iaW5kTGlzdChvTGlzdEJpbmRpbmcuZ2V0UGF0aCgpLCBvTGlzdEJpbmRpbmcuZ2V0Q29udGV4dCgpLCBbXSwgW10sIHtcblx0XHRcdFx0XHRcdFx0JCR1cGRhdGVHcm91cElkOiBcImRvTm90U3VibWl0XCIsXG5cdFx0XHRcdFx0XHRcdCQkZ3JvdXBJZDogXCJkb05vdFN1Ym1pdFwiXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdC8vIFdvcmthcm91bmQgc3VnZ2VzdGVkIGJ5IE9EYXRhIG1vZGVsIHY0IGNvbGxlYWd1ZXNcblx0XHRcdFx0XHRcdG9GYXN0Q3JlYXRpb25MaXN0QmluZGluZy5yZWZyZXNoSW50ZXJuYWwgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdC8qIGRvIG5vdGhpbmcgKi9cblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRvRmFzdENyZWF0aW9uQ29udGV4dCA9IG9GYXN0Q3JlYXRpb25MaXN0QmluZGluZy5jcmVhdGUoKTtcblx0XHRcdFx0XHRcdG9GYXN0Q3JlYXRpb25Sb3cuc2V0QmluZGluZ0NvbnRleHQob0Zhc3RDcmVhdGlvbkNvbnRleHQpO1xuXG5cdFx0XHRcdFx0XHQvLyB0aGlzIGlzIG5lZWRlZCB0byBhdm9pZCBjb25zb2xlIGVycm9yXG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRhd2FpdCBvRmFzdENyZWF0aW9uQ29udGV4dC5jcmVhdGVkKCk7XG5cdFx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRcdExvZy50cmFjZShcInRyYW5zaWVudCBmYXN0IGNyZWF0aW9uIGNvbnRleHQgZGVsZXRlZFwiKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gY2F0Y2ggKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgY29tcHV0aW5nIHRoZSBmaW5hbCBVSSBzdGF0ZVwiLCBvRXJyb3IpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gdGhpcyBzaG91bGQgbm90IGJlIG5lZWRlZCBhdCB0aGUgYWxsXG5cdFx0LyoqXG5cdFx0ICogQHBhcmFtIG9UYWJsZVxuXHRcdCAqL1xuXHRcdGNvbnN0IGhhbmRsZVRhYmxlTW9kaWZpY2F0aW9ucyA9IChvVGFibGU6IGFueSkgPT4ge1xuXHRcdFx0Y29uc3Qgb0JpbmRpbmcgPSB0aGlzLl9nZXRUYWJsZUJpbmRpbmcob1RhYmxlKSxcblx0XHRcdFx0Zm5IYW5kbGVUYWJsZVBhdGNoRXZlbnRzID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdGVuYWJsZUZhc3RDcmVhdGlvblJvdyhvVGFibGUsIG9CaW5kaW5nKTtcblx0XHRcdFx0fTtcblxuXHRcdFx0aWYgKCFvQmluZGluZykge1xuXHRcdFx0XHRMb2cuZXJyb3IoYEV4cGVjdGVkIGJpbmRpbmcgbWlzc2luZyBmb3IgdGFibGU6ICR7b1RhYmxlLmdldElkKCl9YCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG9CaW5kaW5nLm9Db250ZXh0KSB7XG5cdFx0XHRcdGZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgZm5IYW5kbGVDaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0aWYgKG9CaW5kaW5nLm9Db250ZXh0KSB7XG5cdFx0XHRcdFx0XHRmbkhhbmRsZVRhYmxlUGF0Y2hFdmVudHMoKTtcblx0XHRcdFx0XHRcdG9CaW5kaW5nLmRldGFjaENoYW5nZShmbkhhbmRsZUNoYW5nZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRvQmluZGluZy5hdHRhY2hDaGFuZ2UoZm5IYW5kbGVDaGFuZ2UpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRpZiAob0JpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRvTW9kZWwgPSBvQmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKTtcblxuXHRcdFx0Ly8gQ29tcHV0ZSBFZGl0IE1vZGVcblx0XHRcdG9GaW5hbFVJU3RhdGUgPSB0aGlzLl9lZGl0Rmxvdy5jb21wdXRlRWRpdE1vZGUob0JpbmRpbmdDb250ZXh0KTtcblxuXHRcdFx0aWYgKE1vZGVsSGVscGVyLmlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkKG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSkpIHtcblx0XHRcdFx0b0ZpbmFsVUlTdGF0ZVxuXHRcdFx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0XHRcdGlmICh0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIikpIHtcblx0XHRcdFx0XHRcdFx0Y29ubmVjdCh0aGlzLmdldFZpZXcoKSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSB3YWl0aW5nIGZvciB0aGUgZmluYWwgVUkgU3RhdGVcIiwgb0Vycm9yKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gdXBkYXRlIHJlbGF0ZWQgYXBwcyBvbmNlIERhdGEgaXMgcmVjZWl2ZWQgaW4gY2FzZSBvZiBiaW5kaW5nIGNhY2hlIGlzIG5vdCBhdmFpbGFibGVcblx0XHRcdC8vIFRPRE86IHRoaXMgaXMgb25seSBhIHRlbXAgc29sdXRpb24gc2luY2Ugd2UgbmVlZCB0byBjYWxsIF91cGRhdGVSZWxhdGVkQXBwcyBtZXRob2Qgb25seSBhZnRlciBkYXRhIGZvciBPYmplY3QgUGFnZSBpcyByZWNlaXZlZCAoaWYgdGhlcmUgaXMgbm8gYmluZGluZylcblx0XHRcdGlmIChvQmluZGluZ0NvbnRleHQuZ2V0QmluZGluZygpLm9DYWNoZSkge1xuXHRcdFx0XHR0aGlzLl91cGRhdGVSZWxhdGVkQXBwcygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgZm5VcGRhdGVSZWxhdGVkQXBwcyA9ICgpID0+IHtcblx0XHRcdFx0XHR0aGlzLl91cGRhdGVSZWxhdGVkQXBwcygpO1xuXHRcdFx0XHRcdG9CaW5kaW5nQ29udGV4dC5nZXRCaW5kaW5nKCkuZGV0YWNoRGF0YVJlY2VpdmVkKGZuVXBkYXRlUmVsYXRlZEFwcHMpO1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRvQmluZGluZ0NvbnRleHQuZ2V0QmluZGluZygpLmF0dGFjaERhdGFSZWNlaXZlZChmblVwZGF0ZVJlbGF0ZWRBcHBzKTtcblx0XHRcdH1cblxuXHRcdFx0Ly9BdHRhY2ggdGhlIHBhdGNoIHNlbnQgYW5kIHBhdGNoIGNvbXBsZXRlZCBldmVudCB0byB0aGUgb2JqZWN0IHBhZ2UgYmluZGluZyBzbyB0aGF0IHdlIGNhbiByZWFjdFxuXHRcdFx0Y29uc3Qgb0JpbmRpbmcgPSAob0JpbmRpbmdDb250ZXh0LmdldEJpbmRpbmcgJiYgb0JpbmRpbmdDb250ZXh0LmdldEJpbmRpbmcoKSkgfHwgb0JpbmRpbmdDb250ZXh0O1xuXG5cdFx0XHQvLyBBdHRhY2ggdGhlIGV2ZW50IGhhbmRsZXIgb25seSBvbmNlIHRvIHRoZSBzYW1lIGJpbmRpbmdcblx0XHRcdGlmICh0aGlzLmN1cnJlbnRCaW5kaW5nICE9PSBvQmluZGluZykge1xuXHRcdFx0XHRvQmluZGluZy5hdHRhY2hFdmVudChcInBhdGNoU2VudFwiLCB0aGlzLmVkaXRGbG93LmhhbmRsZVBhdGNoU2VudCwgdGhpcyk7XG5cdFx0XHRcdHRoaXMuY3VycmVudEJpbmRpbmcgPSBvQmluZGluZztcblx0XHRcdH1cblxuXHRcdFx0YVRhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uIChvVGFibGU6IGFueSkge1xuXHRcdFx0XHQvLyBhY2Nlc3MgYmluZGluZyBvbmx5IGFmdGVyIHRhYmxlIGlzIGJvdW5kXG5cdFx0XHRcdFRhYmxlVXRpbHMud2hlbkJvdW5kKG9UYWJsZSlcblx0XHRcdFx0XHQudGhlbihoYW5kbGVUYWJsZU1vZGlmaWNhdGlvbnMpXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgd2FpdGluZyBmb3IgdGhlIHRhYmxlIHRvIGJlIGJvdW5kXCIsIG9FcnJvcik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKCEodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLnVzZU5ld0xhenlMb2FkaW5nKSB7XG5cdFx0XHRcdC8vIHNob3VsZCBiZSBjYWxsZWQgb25seSBhZnRlciBiaW5kaW5nIGlzIHJlYWR5IGhlbmNlIGNhbGxpbmcgaXQgaW4gb25BZnRlckJpbmRpbmdcblx0XHRcdFx0KG9PYmplY3RQYWdlIGFzIGFueSkuX3RyaWdnZXJWaXNpYmxlU3ViU2VjdGlvbnNFdmVudHMoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdG9uUGFnZVJlYWR5KG1QYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHRjb25zdCBzZXRGb2N1cyA9ICgpID0+IHtcblx0XHRcdC8vIFNldCB0aGUgZm9jdXMgdG8gdGhlIGZpcnN0IGFjdGlvbiBidXR0b24sIG9yIHRvIHRoZSBmaXJzdCBlZGl0YWJsZSBpbnB1dCBpZiBpbiBlZGl0YWJsZSBtb2RlXG5cdFx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0XHRjb25zdCBpc0luRGlzcGxheU1vZGUgPSAhb09iamVjdFBhZ2UuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpO1xuXG5cdFx0XHRpZiAoaXNJbkRpc3BsYXlNb2RlKSB7XG5cdFx0XHRcdGNvbnN0IG9GaXJzdENsaWNrYWJsZUVsZW1lbnQgPSB0aGlzLl9nZXRGaXJzdENsaWNrYWJsZUVsZW1lbnQob09iamVjdFBhZ2UpO1xuXHRcdFx0XHRpZiAob0ZpcnN0Q2xpY2thYmxlRWxlbWVudCkge1xuXHRcdFx0XHRcdG9GaXJzdENsaWNrYWJsZUVsZW1lbnQuZm9jdXMoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3Qgb1NlbGVjdGVkU2VjdGlvbjogYW55ID0gQ29yZS5ieUlkKG9PYmplY3RQYWdlLmdldFNlbGVjdGVkU2VjdGlvbigpKTtcblx0XHRcdFx0dGhpcy5fdXBkYXRlRm9jdXNJbkVkaXRNb2RlKG9TZWxlY3RlZFNlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHQvLyBBcHBseSBhcHAgc3RhdGUgb25seSBhZnRlciB0aGUgcGFnZSBpcyByZWFkeSB3aXRoIHRoZSBmaXJzdCBzZWN0aW9uIHNlbGVjdGVkXG5cdFx0Y29uc3Qgb1ZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0Ly9TaG93IHBvcHVwIHdoaWxlIG5hdmlnYXRpbmcgYmFjayBmcm9tIG9iamVjdCBwYWdlIGluIGNhc2Ugb2YgZHJhZnRcblx0XHRpZiAob0JpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRjb25zdCBiSXNTdGlja3lNb2RlID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKChvQmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0XHRpZiAoIWJJc1N0aWNreU1vZGUpIHtcblx0XHRcdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChvVmlldyk7XG5cdFx0XHRcdG9BcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpLnNldEJhY2tOYXZpZ2F0aW9uKCgpID0+IHRoaXMuX29uQmFja05hdmlnYXRpb25JbkRyYWZ0KG9CaW5kaW5nQ29udGV4dCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLmdldEFwcENvbXBvbmVudCgpXG5cdFx0XHQuZ2V0QXBwU3RhdGVIYW5kbGVyKClcblx0XHRcdC5hcHBseUFwcFN0YXRlKClcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0aWYgKG1QYXJhbWV0ZXJzLmZvcmNlRm9jdXMpIHtcblx0XHRcdFx0XHRzZXRGb2N1cygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChFcnJvcikge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBzZXR0aW5nIHRoZSBmb2N1c1wiLCBFcnJvcik7XG5cdFx0XHR9KTtcblxuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImVycm9yTmF2aWdhdGlvblNlY3Rpb25GbGFnXCIsIGZhbHNlKTtcblx0XHR0aGlzLl9jaGVja0RhdGFQb2ludFRpdGxlRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uKCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBzdGF0dXMgb2YgZWRpdCBtb2RlIGZvciBzdGlja3kgc2Vzc2lvbi5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIHN0YXR1cyBvZiBlZGl0IG1vZGUgZm9yIHN0aWNreSBzZXNzaW9uXG5cdCAqL1xuXHRnZXRTdGlja3lFZGl0TW9kZSgpIHtcblx0XHRjb25zdCBvQmluZGluZ0NvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCAmJiAodGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0KTtcblx0XHRsZXQgYklzU3RpY2t5RWRpdE1vZGUgPSBmYWxzZTtcblx0XHRpZiAob0JpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRjb25zdCBiSXNTdGlja3lNb2RlID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKG9CaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsKTtcblx0XHRcdGlmIChiSXNTdGlja3lNb2RlKSB7XG5cdFx0XHRcdGJJc1N0aWNreUVkaXRNb2RlID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gYklzU3RpY2t5RWRpdE1vZGU7XG5cdH1cblxuXHRfZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKSB7XG5cdFx0cmV0dXJuIHRoaXMuYnlJZChcImZlOjpPYmplY3RQYWdlXCIpIGFzIE9iamVjdFBhZ2VMYXlvdXQ7XG5cdH1cblxuXHRfZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24oKSB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlU3VidGl0bGUgPSBvT2JqZWN0UGFnZS5nZXRDdXN0b21EYXRhKCkuZmluZChmdW5jdGlvbiAob0N1c3RvbURhdGE6IGFueSkge1xuXHRcdFx0cmV0dXJuIG9DdXN0b21EYXRhLmdldEtleSgpID09PSBcIk9iamVjdFBhZ2VTdWJ0aXRsZVwiO1xuXHRcdH0pO1xuXHRcdHJldHVybiB7XG5cdFx0XHR0aXRsZTogb09iamVjdFBhZ2UuZGF0YShcIk9iamVjdFBhZ2VUaXRsZVwiKSB8fCBcIlwiLFxuXHRcdFx0c3VidGl0bGU6IG9PYmplY3RQYWdlU3VidGl0bGUgJiYgb09iamVjdFBhZ2VTdWJ0aXRsZS5nZXRWYWx1ZSgpLFxuXHRcdFx0aW50ZW50OiBcIlwiLFxuXHRcdFx0aWNvbjogXCJcIlxuXHRcdH07XG5cdH1cblxuXHRfZXhlY3V0ZUhlYWRlclNob3J0Y3V0KHNJZDogYW55KSB7XG5cdFx0Y29uc3Qgc0J1dHRvbklkID0gYCR7dGhpcy5nZXRWaWV3KCkuZ2V0SWQoKX0tLSR7c0lkfWAsXG5cdFx0XHRvQnV0dG9uID0gKHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkuZ2V0SGVhZGVyVGl0bGUoKSBhcyBPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlKVxuXHRcdFx0XHQuZ2V0QWN0aW9ucygpXG5cdFx0XHRcdC5maW5kKGZ1bmN0aW9uIChvRWxlbWVudDogYW55KSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9FbGVtZW50LmdldElkKCkgPT09IHNCdXR0b25JZDtcblx0XHRcdFx0fSk7XG5cdFx0Q29tbW9uVXRpbHMuZmlyZUJ1dHRvblByZXNzKG9CdXR0b24pO1xuXHR9XG5cblx0X2V4ZWN1dGVGb290ZXJTaG9ydGN1dChzSWQ6IGFueSkge1xuXHRcdGNvbnN0IHNCdXR0b25JZCA9IGAke3RoaXMuZ2V0VmlldygpLmdldElkKCl9LS0ke3NJZH1gLFxuXHRcdFx0b0J1dHRvbiA9ICh0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLmdldEZvb3RlcigpIGFzIGFueSkuZ2V0Q29udGVudCgpLmZpbmQoZnVuY3Rpb24gKG9FbGVtZW50OiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIG9FbGVtZW50LmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpID09PSBcInNhcC5tLkJ1dHRvblwiICYmIG9FbGVtZW50LmdldElkKCkgPT09IHNCdXR0b25JZDtcblx0XHRcdH0pO1xuXHRcdENvbW1vblV0aWxzLmZpcmVCdXR0b25QcmVzcyhvQnV0dG9uKTtcblx0fVxuXG5cdF9leGVjdXRlVGFiU2hvcnRDdXQob0V4ZWN1dGlvbjogYW55KSB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLFxuXHRcdFx0YVNlY3Rpb25zID0gb09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKSxcblx0XHRcdGlTZWN0aW9uSW5kZXhNYXggPSBhU2VjdGlvbnMubGVuZ3RoIC0gMSxcblx0XHRcdHNDb21tYW5kID0gb0V4ZWN1dGlvbi5vU291cmNlLmdldENvbW1hbmQoKTtcblx0XHRsZXQgbmV3U2VjdGlvbixcblx0XHRcdGlTZWxlY3RlZFNlY3Rpb25JbmRleCA9IG9PYmplY3RQYWdlLmluZGV4T2ZTZWN0aW9uKHRoaXMuYnlJZChvT2JqZWN0UGFnZS5nZXRTZWxlY3RlZFNlY3Rpb24oKSkgYXMgT2JqZWN0UGFnZVNlY3Rpb24pO1xuXHRcdGlmIChpU2VsZWN0ZWRTZWN0aW9uSW5kZXggIT09IC0xICYmIGlTZWN0aW9uSW5kZXhNYXggPiAwKSB7XG5cdFx0XHRpZiAoc0NvbW1hbmQgPT09IFwiTmV4dFRhYlwiKSB7XG5cdFx0XHRcdGlmIChpU2VsZWN0ZWRTZWN0aW9uSW5kZXggPD0gaVNlY3Rpb25JbmRleE1heCAtIDEpIHtcblx0XHRcdFx0XHRuZXdTZWN0aW9uID0gYVNlY3Rpb25zWysraVNlbGVjdGVkU2VjdGlvbkluZGV4XTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChpU2VsZWN0ZWRTZWN0aW9uSW5kZXggIT09IDApIHtcblx0XHRcdFx0Ly8gUHJldmlvdXNUYWJcblx0XHRcdFx0bmV3U2VjdGlvbiA9IGFTZWN0aW9uc1stLWlTZWxlY3RlZFNlY3Rpb25JbmRleF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChuZXdTZWN0aW9uKSB7XG5cdFx0XHRcdG9PYmplY3RQYWdlLnNldFNlbGVjdGVkU2VjdGlvbihuZXdTZWN0aW9uKTtcblx0XHRcdFx0bmV3U2VjdGlvbi5mb2N1cygpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF9nZXRGb290ZXJWaXNpYmlsaXR5KCkge1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3Qgc1ZpZXdJZCA9IHRoaXMuZ2V0VmlldygpLmdldElkKCk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwibWVzc2FnZUZvb3RlckNvbnRhaW5zRXJyb3JzXCIsIGZhbHNlKTtcblx0XHRzYXAudWlcblx0XHRcdC5nZXRDb3JlKClcblx0XHRcdC5nZXRNZXNzYWdlTWFuYWdlcigpXG5cdFx0XHQuZ2V0TWVzc2FnZU1vZGVsKClcblx0XHRcdC5nZXREYXRhKClcblx0XHRcdC5mb3JFYWNoKGZ1bmN0aW9uIChvTWVzc2FnZTogYW55KSB7XG5cdFx0XHRcdGlmIChvTWVzc2FnZS52YWxpZGF0aW9uICYmIG9NZXNzYWdlLnR5cGUgPT09IFwiRXJyb3JcIiAmJiBvTWVzc2FnZS50YXJnZXQuaW5kZXhPZihzVmlld0lkKSA+IC0xKSB7XG5cdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwibWVzc2FnZUZvb3RlckNvbnRhaW5zRXJyb3JzXCIsIHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0fVxuXG5cdF9zaG93TWVzc2FnZVBvcG92ZXIoZXJyPzogYW55LCBvUmV0PzogYW55KSB7XG5cdFx0aWYgKGVycikge1xuXHRcdFx0TG9nLmVycm9yKGVycik7XG5cdFx0fVxuXHRcdGNvbnN0IHJvb3RWaWV3Q29udHJvbGxlciA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkgYXMgYW55O1xuXHRcdGNvbnN0IGN1cnJlbnRQYWdlVmlldyA9IHJvb3RWaWV3Q29udHJvbGxlci5pc0ZjbEVuYWJsZWQoKVxuXHRcdFx0PyByb290Vmlld0NvbnRyb2xsZXIuZ2V0UmlnaHRtb3N0VmlldygpXG5cdFx0XHQ6ICh0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvb3RDb250YWluZXIoKSBhcyBhbnkpLmdldEN1cnJlbnRQYWdlKCk7XG5cdFx0aWYgKCFjdXJyZW50UGFnZVZpZXcuaXNBKFwic2FwLm0uTWVzc2FnZVBhZ2VcIikpIHtcblx0XHRcdGNvbnN0IG9NZXNzYWdlQnV0dG9uID0gdGhpcy5nZXRWaWV3KCkuYnlJZChcImZlOjpGb290ZXJCYXI6Ok1lc3NhZ2VCdXR0b25cIikgYXMgYW55LFxuXHRcdFx0XHRvTWVzc2FnZVBvcG92ZXIgPSBvTWVzc2FnZUJ1dHRvbi5vTWVzc2FnZVBvcG92ZXIsXG5cdFx0XHRcdG9JdGVtQmluZGluZyA9IG9NZXNzYWdlUG9wb3Zlci5nZXRCaW5kaW5nKFwiaXRlbXNcIik7XG5cblx0XHRcdGlmIChvSXRlbUJpbmRpbmcuZ2V0TGVuZ3RoKCkgPiAwICYmICFvTWVzc2FnZVBvcG92ZXIuaXNPcGVuKCkpIHtcblx0XHRcdFx0b01lc3NhZ2VCdXR0b24uc2V0VmlzaWJsZSh0cnVlKTtcblx0XHRcdFx0Ly8gd29ya2Fyb3VuZCB0byBlbnN1cmUgdGhhdCBvTWVzc2FnZUJ1dHRvbiBpcyByZW5kZXJlZCB3aGVuIG9wZW5CeSBpcyBjYWxsZWRcblx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0b01lc3NhZ2VQb3BvdmVyLm9wZW5CeShvTWVzc2FnZUJ1dHRvbik7XG5cdFx0XHRcdH0sIDApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb1JldDtcblx0fVxuXG5cdF9lZGl0RG9jdW1lbnQob0NvbnRleHQ6IGFueSkge1xuXHRcdGNvbnN0IG9Nb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIik7XG5cdFx0QnVzeUxvY2tlci5sb2NrKG9Nb2RlbCk7XG5cdFx0cmV0dXJuIHRoaXMuZWRpdEZsb3cuZWRpdERvY3VtZW50LmFwcGx5KHRoaXMuZWRpdEZsb3csIFtvQ29udGV4dF0pLmZpbmFsbHkoZnVuY3Rpb24gKCkge1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2sob01vZGVsKTtcblx0XHR9KTtcblx0fVxuXG5cdGFzeW5jIF9zYXZlRG9jdW1lbnQob0NvbnRleHQ6IGFueSkge1xuXHRcdGNvbnN0IG9Nb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIiksXG5cdFx0XHRhV2FpdENyZWF0ZURvY3VtZW50czogYW55W10gPSBbXTtcblx0XHQvLyBpbmRpY2F0ZXMgaWYgd2UgYXJlIGNyZWF0aW5nIGEgbmV3IHJvdyBpbiB0aGUgT1Bcblx0XHRsZXQgYkV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IgPSBmYWxzZTtcblx0XHRCdXN5TG9ja2VyLmxvY2sob01vZGVsKTtcblx0XHR0aGlzLl9maW5kVGFibGVzKCkuZm9yRWFjaCgob1RhYmxlOiBhbnkpID0+IHtcblx0XHRcdGNvbnN0IG9CaW5kaW5nID0gdGhpcy5fZ2V0VGFibGVCaW5kaW5nKG9UYWJsZSk7XG5cdFx0XHRjb25zdCBtUGFyYW1ldGVyczogYW55ID0ge1xuXHRcdFx0XHRjcmVhdGlvbk1vZGU6IG9UYWJsZS5kYXRhKFwiY3JlYXRpb25Nb2RlXCIpLFxuXHRcdFx0XHRjcmVhdGlvblJvdzogb1RhYmxlLmdldENyZWF0aW9uUm93KCksXG5cdFx0XHRcdGNyZWF0ZUF0RW5kOiBvVGFibGUuZGF0YShcImNyZWF0ZUF0RW5kXCIpID09PSBcInRydWVcIlxuXHRcdFx0fTtcblx0XHRcdGNvbnN0IGJDcmVhdGVEb2N1bWVudCA9XG5cdFx0XHRcdG1QYXJhbWV0ZXJzLmNyZWF0aW9uUm93ICYmXG5cdFx0XHRcdG1QYXJhbWV0ZXJzLmNyZWF0aW9uUm93LmdldEJpbmRpbmdDb250ZXh0KCkgJiZcblx0XHRcdFx0T2JqZWN0LmtleXMobVBhcmFtZXRlcnMuY3JlYXRpb25Sb3cuZ2V0QmluZGluZ0NvbnRleHQoKS5nZXRPYmplY3QoKSkubGVuZ3RoID4gMTtcblx0XHRcdGlmIChiQ3JlYXRlRG9jdW1lbnQpIHtcblx0XHRcdFx0Ly8gdGhlIGJTa2lwU2lkZUVmZmVjdHMgaXMgYSBwYXJhbWV0ZXIgY3JlYXRlZCB3aGVuIHdlIGNsaWNrIHRoZSBzYXZlIGtleS4gSWYgd2UgcHJlc3MgdGhpcyBrZXlcblx0XHRcdFx0Ly8gd2UgZG9uJ3QgZXhlY3V0ZSB0aGUgaGFuZGxlU2lkZUVmZmVjdHMgZnVuY2l0b24gdG8gYXZvaWQgYmF0Y2ggcmVkdW5kYW5jeVxuXHRcdFx0XHRtUGFyYW1ldGVycy5iU2tpcFNpZGVFZmZlY3RzID0gdHJ1ZTtcblx0XHRcdFx0YkV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IgPSB0cnVlO1xuXHRcdFx0XHRhV2FpdENyZWF0ZURvY3VtZW50cy5wdXNoKFxuXHRcdFx0XHRcdHRoaXMuZWRpdEZsb3cuY3JlYXRlRG9jdW1lbnQob0JpbmRpbmcsIG1QYXJhbWV0ZXJzKS50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdHJldHVybiBvQmluZGluZztcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGFCaW5kaW5ncyA9IGF3YWl0IFByb21pc2UuYWxsKGFXYWl0Q3JlYXRlRG9jdW1lbnRzKTtcblx0XHRcdGNvbnN0IG1QYXJhbWV0ZXJzID0ge1xuXHRcdFx0XHRiRXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvcjogYkV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IsXG5cdFx0XHRcdGJpbmRpbmdzOiBhQmluZGluZ3Ncblx0XHRcdH07XG5cdFx0XHQvLyBXZSBuZWVkIHRvIGVpdGhlciByZWplY3Qgb3IgcmVzb2x2ZSBhIHByb21pc2UgaGVyZSBhbmQgcmV0dXJuIGl0IHNpbmNlIHRoaXMgc2F2ZVxuXHRcdFx0Ly8gZnVuY3Rpb24gaXMgbm90IG9ubHkgY2FsbGVkIHdoZW4gcHJlc3NpbmcgdGhlIHNhdmUgYnV0dG9uIGluIHRoZSBmb290ZXIsIGJ1dCBhbHNvXG5cdFx0XHQvLyB3aGVuIHRoZSB1c2VyIHNlbGVjdHMgY3JlYXRlIG9yIHNhdmUgaW4gYSBkYXRhbG9zcyBwb3B1cC5cblx0XHRcdC8vIFRoZSBsb2dpYyBvZiB0aGUgZGF0YWxvc3MgcG9wdXAgbmVlZHMgdG8gZGV0ZWN0IGlmIHRoZSBzYXZlIGhhZCBlcnJvcnMgb3Igbm90IGluIG9yZGVyXG5cdFx0XHQvLyB0byBkZWNpZGUgaWYgdGhlIHN1YnNlcXVlbnQgYWN0aW9uIC0gbGlrZSBhIGJhY2sgbmF2aWdhdGlvbiAtIGhhcyB0byBiZSBleGVjdXRlZCBvciBub3QuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRhd2FpdCB0aGlzLmVkaXRGbG93LnNhdmVEb2N1bWVudChvQ29udGV4dCwgbVBhcmFtZXRlcnMpO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3I6IGFueSkge1xuXHRcdFx0XHQvLyBJZiB0aGUgc2F2ZURvY3VtZW50IGluIGVkaXRGbG93IHJldHVybnMgZXJyb3JzIHdlIG5lZWRcblx0XHRcdFx0Ly8gdG8gc2hvdyB0aGUgbWVzc2FnZSBwb3BvdmVyIGhlcmUgYW5kIGVuc3VyZSB0aGF0IHRoZVxuXHRcdFx0XHQvLyBkYXRhbG9zcyBsb2dpYyBkb2VzIG5vdCBwZXJmb3JtIHRoZSBmb2xsb3cgdXAgZnVuY3Rpb25cblx0XHRcdFx0Ly8gbGlrZSBlLmcuIGEgYmFjayBuYXZpZ2F0aW9uIGhlbmNlIHdlIHJldHVybiBhIHByb21pc2UgYW5kIHJlamVjdCBpdFxuXHRcdFx0XHR0aGlzLl9zaG93TWVzc2FnZVBvcG92ZXIoZXJyb3IpO1xuXHRcdFx0XHR0aHJvdyBlcnJvcjtcblx0XHRcdH1cblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0aWYgKEJ1c3lMb2NrZXIuaXNMb2NrZWQob01vZGVsKSkge1xuXHRcdFx0XHRCdXN5TG9ja2VyLnVubG9jayhvTW9kZWwpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF9tYW5hZ2VDb2xsYWJvcmF0aW9uKCkge1xuXHRcdG9wZW5NYW5hZ2VEaWFsb2codGhpcy5nZXRWaWV3KCkpO1xuXHR9XG5cblx0X3Nob3dDb2xsYWJvcmF0aW9uVXNlckRldGFpbHMoZXZlbnQ6IGFueSkge1xuXHRcdHNob3dVc2VyRGV0YWlscyhldmVudCwgdGhpcy5nZXRWaWV3KCkpO1xuXHR9XG5cblx0X2NhbmNlbERvY3VtZW50KG9Db250ZXh0OiBhbnksIG1QYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHRtUGFyYW1ldGVycy5jYW5jZWxCdXR0b24gPSB0aGlzLmdldFZpZXcoKS5ieUlkKG1QYXJhbWV0ZXJzLmNhbmNlbEJ1dHRvbik7IC8vdG8gZ2V0IHRoZSByZWZlcmVuY2Ugb2YgdGhlIGNhbmNlbCBidXR0b24gZnJvbSBjb21tYW5kIGV4ZWN1dGlvblxuXHRcdHJldHVybiB0aGlzLmVkaXRGbG93LmNhbmNlbERvY3VtZW50KG9Db250ZXh0LCBtUGFyYW1ldGVycyk7XG5cdH1cblxuXHRfYXBwbHlEb2N1bWVudChvQ29udGV4dDogYW55KSB7XG5cdFx0cmV0dXJuIHRoaXMuZWRpdEZsb3cuYXBwbHlEb2N1bWVudChvQ29udGV4dCkuY2F0Y2goKCkgPT4gdGhpcy5fc2hvd01lc3NhZ2VQb3BvdmVyKCkpO1xuXHR9XG5cblx0X3VwZGF0ZVJlbGF0ZWRBcHBzKCkge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRpZiAoQ29tbW9uVXRpbHMucmVzb2x2ZVN0cmluZ3RvQm9vbGVhbihvT2JqZWN0UGFnZS5kYXRhKFwic2hvd1JlbGF0ZWRBcHBzXCIpKSkge1xuXHRcdFx0Q29tbW9uVXRpbHMudXBkYXRlUmVsYXRlZEFwcHNEZXRhaWxzKG9PYmplY3RQYWdlKTtcblx0XHR9XG5cdH1cblxuXHRfZmluZFRhYmxlSW5TdWJTZWN0aW9uKGFQYXJlbnRFbGVtZW50OiBhbnksIGFTdWJzZWN0aW9uOiBhbnksIGFUYWJsZXM6IGFueSkge1xuXHRcdGNvbnN0IGFTdWJTZWN0aW9uVGFibGVzID0gW107XG5cdFx0Zm9yIChsZXQgZWxlbWVudCA9IDA7IGVsZW1lbnQgPCBhUGFyZW50RWxlbWVudC5sZW5ndGg7IGVsZW1lbnQrKykge1xuXHRcdFx0bGV0IG9FbGVtZW50ID0gYVBhcmVudEVsZW1lbnRbZWxlbWVudF0uZ2V0Q29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIGFQYXJlbnRFbGVtZW50W2VsZW1lbnRdLmdldENvbnRlbnQoKTtcblx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5pc0EgJiYgb0VsZW1lbnQuaXNBKFwic2FwLnVpLmxheW91dC5EeW5hbWljU2lkZUNvbnRlbnRcIikpIHtcblx0XHRcdFx0b0VsZW1lbnQgPSBvRWxlbWVudC5nZXRNYWluQ29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIG9FbGVtZW50LmdldE1haW5Db250ZW50KCk7XG5cdFx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0b0VsZW1lbnQgPSBvRWxlbWVudFswXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50LmlzQSAmJiBvRWxlbWVudC5pc0EoXCJzYXAuZmUubWFjcm9zLnRhYmxlLlRhYmxlQVBJXCIpKSB7XG5cdFx0XHRcdG9FbGVtZW50ID0gb0VsZW1lbnQuZ2V0Q29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIG9FbGVtZW50LmdldENvbnRlbnQoKTtcblx0XHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRvRWxlbWVudCA9IG9FbGVtZW50WzBdO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQuaXNBICYmIG9FbGVtZW50LmlzQShcInNhcC51aS5tZGMuVGFibGVcIikpIHtcblx0XHRcdFx0YVRhYmxlcy5wdXNoKG9FbGVtZW50KTtcblx0XHRcdFx0YVN1YlNlY3Rpb25UYWJsZXMucHVzaCh7XG5cdFx0XHRcdFx0XCJ0YWJsZVwiOiBvRWxlbWVudCxcblx0XHRcdFx0XHRcImdyaWRUYWJsZVwiOiBvRWxlbWVudC5nZXRUeXBlKCkuaXNBKFwic2FwLnVpLm1kYy50YWJsZS5HcmlkVGFibGVUeXBlXCIpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoXG5cdFx0XHRhU3ViU2VjdGlvblRhYmxlcy5sZW5ndGggPT09IDEgJiZcblx0XHRcdGFQYXJlbnRFbGVtZW50Lmxlbmd0aCA9PT0gMSAmJlxuXHRcdFx0YVN1YlNlY3Rpb25UYWJsZXNbMF0uZ3JpZFRhYmxlICYmXG5cdFx0XHQhYVN1YnNlY3Rpb24uaGFzU3R5bGVDbGFzcyhcInNhcFV4QVBPYmplY3RQYWdlU3ViU2VjdGlvbkZpdENvbnRhaW5lclwiKVxuXHRcdCkge1xuXHRcdFx0Ly9JbiBjYXNlIHRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgdGFibGUgaW4gYSBzZWN0aW9uIHdlIGZpdCB0aGF0IHRvIHRoZSB3aG9sZSBwYWdlIHNvIHRoYXQgdGhlIHNjcm9sbGJhciBjb21lcyBvbmx5IG9uIHRhYmxlIGFuZCBub3Qgb24gcGFnZVxuXHRcdFx0YVN1YnNlY3Rpb24uYWRkU3R5bGVDbGFzcyhcInNhcFV4QVBPYmplY3RQYWdlU3ViU2VjdGlvbkZpdENvbnRhaW5lclwiKTtcblx0XHR9IGVsc2UgaWYgKGFTdWJTZWN0aW9uVGFibGVzICYmICFhU3Vic2VjdGlvbi5oYXNTdHlsZUNsYXNzKFwic2FwVXhBUE9iamVjdFBhZ2VTdWJTZWN0aW9uRml0Q29udGFpbmVyXCIpKSB7XG5cdFx0XHRhU3ViU2VjdGlvblRhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uIChvVGFibGU6IHsgdGFibGU6IGFueTsgZ3JpZFRhYmxlOiBhbnkgfSkge1xuXHRcdFx0XHRpZiAob1RhYmxlLmdyaWRUYWJsZSkge1xuXHRcdFx0XHRcdC8vUmVzZXR0aW5nIHRoZSByb3cgY291bnQgdG8gZGVmYXVsdCB2YWx1ZSBpbiBjYXNlIHdlIGhhdmUgYSBjb21iaW5hdGlvbiBvZiBmb3JtcyBhbmQgdGFibGVzIG9yIG11bHRpcGxlIHRhYmxlcyBpbiBhIHN1YnNlY3Rpb25cblx0XHRcdFx0XHRvVGFibGUudGFibGUuZ2V0VHlwZSgpLnNldFJvd0NvdW50KG51bGwpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRfZ2V0QWxsU3ViU2VjdGlvbnMoKSB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGxldCBhU3ViU2VjdGlvbnM6IGFueVtdID0gW107XG5cdFx0b09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvU2VjdGlvbjogYW55KSB7XG5cdFx0XHRhU3ViU2VjdGlvbnMgPSBhU3ViU2VjdGlvbnMuY29uY2F0KG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBhU3ViU2VjdGlvbnM7XG5cdH1cblxuXHRfZ2V0QWxsQmxvY2tzKCkge1xuXHRcdGxldCBhQmxvY2tzOiBhbnlbXSA9IFtdO1xuXHRcdHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1N1YlNlY3Rpb246IGFueSkge1xuXHRcdFx0YUJsb2NrcyA9IGFCbG9ja3MuY29uY2F0KG9TdWJTZWN0aW9uLmdldEJsb2NrcygpKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gYUJsb2Nrcztcblx0fVxuXG5cdF9maW5kVGFibGVzKCkge1xuXHRcdGNvbnN0IGFTdWJTZWN0aW9ucyA9IHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCk7XG5cdFx0Y29uc3QgYVRhYmxlczogYW55W10gPSBbXTtcblx0XHRmb3IgKGxldCBzdWJTZWN0aW9uID0gMDsgc3ViU2VjdGlvbiA8IGFTdWJTZWN0aW9ucy5sZW5ndGg7IHN1YlNlY3Rpb24rKykge1xuXHRcdFx0dGhpcy5fZmluZFRhYmxlSW5TdWJTZWN0aW9uKGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXS5nZXRCbG9ja3MoKSwgYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLCBhVGFibGVzKTtcblx0XHRcdHRoaXMuX2ZpbmRUYWJsZUluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0TW9yZUJsb2NrcygpLCBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0sIGFUYWJsZXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gYVRhYmxlcztcblx0fVxuXG5cdF9jbG9zZVNpZGVDb250ZW50KCkge1xuXHRcdHRoaXMuX2dldEFsbEJsb2NrcygpLmZvckVhY2goZnVuY3Rpb24gKG9CbG9jazogYW55KSB7XG5cdFx0XHRjb25zdCBvQ29udGVudCA9IG9CbG9jay5nZXRDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgb0Jsb2NrLmdldENvbnRlbnQoKTtcblx0XHRcdGlmIChvQ29udGVudCAmJiBvQ29udGVudC5pc0EgJiYgb0NvbnRlbnQuaXNBKFwic2FwLnVpLmxheW91dC5EeW5hbWljU2lkZUNvbnRlbnRcIikpIHtcblx0XHRcdFx0aWYgKG9Db250ZW50LnNldFNob3dTaWRlQ29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG5cdFx0XHRcdFx0b0NvbnRlbnQuc2V0U2hvd1NpZGVDb250ZW50KGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoYXJ0IENvbnRleHQgaXMgcmVzb2x2ZWQgZm9yIDE6biBtaWNyb2NoYXJ0cy5cblx0ICpcblx0ICogQHBhcmFtIG9DaGFydENvbnRleHQgVGhlIENvbnRleHQgb2YgdGhlIE1pY3JvQ2hhcnRcblx0ICogQHBhcmFtIHNDaGFydFBhdGggVGhlIGNvbGxlY3Rpb25QYXRoIG9mIHRoZSB0aGUgY2hhcnRcblx0ICogQHJldHVybnMgQXJyYXkgb2YgQXR0cmlidXRlcyBvZiB0aGUgY2hhcnQgQ29udGV4dFxuXHQgKi9cblx0X2dldENoYXJ0Q29udGV4dERhdGEob0NoYXJ0Q29udGV4dDogYW55LCBzQ2hhcnRQYXRoOiBzdHJpbmcpIHtcblx0XHRjb25zdCBvQ29udGV4dERhdGEgPSBvQ2hhcnRDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdGxldCBvQ2hhcnRDb250ZXh0RGF0YSA9IFtvQ29udGV4dERhdGFdO1xuXHRcdGlmIChvQ2hhcnRDb250ZXh0ICYmIHNDaGFydFBhdGgpIHtcblx0XHRcdGlmIChvQ29udGV4dERhdGFbc0NoYXJ0UGF0aF0pIHtcblx0XHRcdFx0b0NoYXJ0Q29udGV4dERhdGEgPSBvQ29udGV4dERhdGFbc0NoYXJ0UGF0aF07XG5cdFx0XHRcdGRlbGV0ZSBvQ29udGV4dERhdGFbc0NoYXJ0UGF0aF07XG5cdFx0XHRcdG9DaGFydENvbnRleHREYXRhLnB1c2gob0NvbnRleHREYXRhKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG9DaGFydENvbnRleHREYXRhO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNjcm9sbCB0aGUgdGFibGVzIHRvIHRoZSByb3cgd2l0aCB0aGUgc1BhdGhcblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIHNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5PYmplY3RQYWdlQ29udHJvbGxlci5jb250cm9sbGVyI19zY3JvbGxUYWJsZXNUb1Jvd1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1Jvd1BhdGggJ3NQYXRoIG9mIHRoZSB0YWJsZSByb3cnXG5cdCAqL1xuXG5cdF9zY3JvbGxUYWJsZXNUb1JvdyhzUm93UGF0aDogc3RyaW5nKSB7XG5cdFx0aWYgKHRoaXMuX2ZpbmRUYWJsZXMgJiYgdGhpcy5fZmluZFRhYmxlcygpLmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IGFUYWJsZXMgPSB0aGlzLl9maW5kVGFibGVzKCk7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFUYWJsZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0VGFibGVTY3JvbGxlci5zY3JvbGxUYWJsZVRvUm93KGFUYWJsZXNbaV0sIHNSb3dQYXRoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIG1lcmdlIHNlbGVjdGVkIGNvbnRleHRzIGFuZCBmaWx0ZXJzLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgX21lcmdlTXVsdGlwbGVDb250ZXh0c1xuXHQgKiBAcGFyYW0gb1BhZ2VDb250ZXh0IFBhZ2UgY29udGV4dFxuXHQgKiBAcGFyYW0gYUxpbmVDb250ZXh0IFNlbGVjdGVkIENvbnRleHRzXG5cdCAqIEBwYXJhbSBzQ2hhcnRQYXRoIENvbGxlY3Rpb24gbmFtZSBvZiB0aGUgY2hhcnRcblx0ICogQHJldHVybnMgU2VsZWN0aW9uIFZhcmlhbnQgT2JqZWN0XG5cdCAqL1xuXHRfbWVyZ2VNdWx0aXBsZUNvbnRleHRzKG9QYWdlQ29udGV4dDogQ29udGV4dCwgYUxpbmVDb250ZXh0OiBhbnlbXSwgc0NoYXJ0UGF0aDogc3RyaW5nKSB7XG5cdFx0bGV0IGFBdHRyaWJ1dGVzOiBhbnlbXSA9IFtdLFxuXHRcdFx0YVBhZ2VBdHRyaWJ1dGVzID0gW10sXG5cdFx0XHRvQ29udGV4dCxcblx0XHRcdHNNZXRhUGF0aExpbmU6IHN0cmluZyxcblx0XHRcdHNQYXRoTGluZTtcblxuXHRcdGNvbnN0IHNQYWdlUGF0aCA9IG9QYWdlQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9QYWdlQ29udGV4dCAmJiBvUGFnZUNvbnRleHQuZ2V0TW9kZWwoKSAmJiAob1BhZ2VDb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwpO1xuXHRcdGNvbnN0IHNNZXRhUGF0aFBhZ2UgPSBvTWV0YU1vZGVsICYmIG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoc1BhZ2VQYXRoKS5yZXBsYWNlKC9eXFwvKi8sIFwiXCIpO1xuXG5cdFx0Ly8gR2V0IHNpbmdsZSBsaW5lIGNvbnRleHQgaWYgbmVjZXNzYXJ5XG5cdFx0aWYgKGFMaW5lQ29udGV4dCAmJiBhTGluZUNvbnRleHQubGVuZ3RoKSB7XG5cdFx0XHRvQ29udGV4dCA9IGFMaW5lQ29udGV4dFswXTtcblx0XHRcdHNQYXRoTGluZSA9IG9Db250ZXh0LmdldFBhdGgoKTtcblx0XHRcdHNNZXRhUGF0aExpbmUgPSBvTWV0YU1vZGVsICYmIG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoc1BhdGhMaW5lKS5yZXBsYWNlKC9eXFwvKi8sIFwiXCIpO1xuXG5cdFx0XHRhTGluZUNvbnRleHQuZm9yRWFjaCgob1NpbmdsZUNvbnRleHQ6IGFueSkgPT4ge1xuXHRcdFx0XHRpZiAoc0NoYXJ0UGF0aCkge1xuXHRcdFx0XHRcdGNvbnN0IG9DaGFydENvbnRleHREYXRhID0gdGhpcy5fZ2V0Q2hhcnRDb250ZXh0RGF0YShvU2luZ2xlQ29udGV4dCwgc0NoYXJ0UGF0aCk7XG5cdFx0XHRcdFx0aWYgKG9DaGFydENvbnRleHREYXRhKSB7XG5cdFx0XHRcdFx0XHRhQXR0cmlidXRlcyA9IG9DaGFydENvbnRleHREYXRhLm1hcChmdW5jdGlvbiAob1N1YkNoYXJ0Q29udGV4dERhdGE6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnRleHREYXRhOiBvU3ViQ2hhcnRDb250ZXh0RGF0YSxcblx0XHRcdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IGAke3NNZXRhUGF0aFBhZ2V9LyR7c0NoYXJ0UGF0aH1gXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YUF0dHJpYnV0ZXMucHVzaCh7XG5cdFx0XHRcdFx0XHRjb250ZXh0RGF0YTogb1NpbmdsZUNvbnRleHQuZ2V0T2JqZWN0KCksXG5cdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IHNNZXRhUGF0aExpbmVcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGFQYWdlQXR0cmlidXRlcy5wdXNoKHtcblx0XHRcdGNvbnRleHREYXRhOiBvUGFnZUNvbnRleHQuZ2V0T2JqZWN0KCksXG5cdFx0XHRlbnRpdHlTZXQ6IHNNZXRhUGF0aFBhZ2Vcblx0XHR9KTtcblx0XHQvLyBBZGRpbmcgUGFnZSBDb250ZXh0IHRvIHNlbGVjdGlvbiB2YXJpYW50XG5cdFx0YVBhZ2VBdHRyaWJ1dGVzID0gQ29tbW9uVXRpbHMucmVtb3ZlU2Vuc2l0aXZlRGF0YShhUGFnZUF0dHJpYnV0ZXMsIG9NZXRhTW9kZWwpO1xuXHRcdGNvbnN0IG9QYWdlTGV2ZWxTViA9IENvbW1vblV0aWxzLmFkZFBhZ2VDb250ZXh0VG9TZWxlY3Rpb25WYXJpYW50KG5ldyBTZWxlY3Rpb25WYXJpYW50KCksIGFQYWdlQXR0cmlidXRlcywgdGhpcy5nZXRWaWV3KCkpO1xuXHRcdGFBdHRyaWJ1dGVzID0gQ29tbW9uVXRpbHMucmVtb3ZlU2Vuc2l0aXZlRGF0YShhQXR0cmlidXRlcywgb01ldGFNb2RlbCk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnQ6IG9QYWdlTGV2ZWxTVixcblx0XHRcdGF0dHJpYnV0ZXM6IGFBdHRyaWJ1dGVzXG5cdFx0fTtcblx0fVxuXG5cdF9nZXRCYXRjaEdyb3Vwc0ZvclZpZXcoKSB7XG5cdFx0Y29uc3Qgb1ZpZXdEYXRhID0gdGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnksXG5cdFx0XHRvQ29uZmlndXJhdGlvbnMgPSBvVmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb24sXG5cdFx0XHRhQ29uZmlndXJhdGlvbnMgPSBvQ29uZmlndXJhdGlvbnMgJiYgT2JqZWN0LmtleXMob0NvbmZpZ3VyYXRpb25zKSxcblx0XHRcdGFCYXRjaEdyb3VwcyA9IFtcIiRhdXRvLkhlcm9lc1wiLCBcIiRhdXRvLkRlY29yYXRpb25cIiwgXCIkYXV0by5Xb3JrZXJzXCJdO1xuXG5cdFx0aWYgKGFDb25maWd1cmF0aW9ucyAmJiBhQ29uZmlndXJhdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0YUNvbmZpZ3VyYXRpb25zLmZvckVhY2goZnVuY3Rpb24gKHNLZXk6IGFueSkge1xuXHRcdFx0XHRjb25zdCBvQ29uZmlndXJhdGlvbiA9IG9Db25maWd1cmF0aW9uc1tzS2V5XTtcblx0XHRcdFx0aWYgKG9Db25maWd1cmF0aW9uLnJlcXVlc3RHcm91cElkID09PSBcIkxvbmdSdW5uZXJzXCIpIHtcblx0XHRcdFx0XHRhQmF0Y2hHcm91cHMucHVzaChcIiRhdXRvLkxvbmdSdW5uZXJzXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGFCYXRjaEdyb3Vwcztcblx0fVxuXG5cdC8qXG5cdCAqIFJlc2V0IEJyZWFkY3J1bWIgbGlua3Ncblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7c2FwLm0uQnJlYWRjcnVtYnN9IFtvU291cmNlXSBwYXJlbnQgY29udHJvbFxuXHQgKiBAZGVzY3JpcHRpb24gVXNlZCB3aGVuIGNvbnRleHQgb2YgdGhlIG9iamVjdCBwYWdlIGNoYW5nZXMuXG5cdCAqICAgICAgICAgICAgICBUaGlzIGV2ZW50IGNhbGxiYWNrIGlzIGF0dGFjaGVkIHRvIG1vZGVsQ29udGV4dENoYW5nZVxuXHQgKiAgICAgICAgICAgICAgZXZlbnQgb2YgdGhlIEJyZWFkY3J1bWIgY29udHJvbCB0byBjYXRjaCBjb250ZXh0IGNoYW5nZS5cblx0ICogICAgICAgICAgICAgIFRoZW4gZWxlbWVudCBiaW5kaW5nIGFuZCBocmVmcyBhcmUgdXBkYXRlZCBmb3IgZWFjaCBsaW5rLlxuXHQgKlxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQGV4cGVyaW1lbnRhbFxuXHQgKi9cblx0YXN5bmMgX3NldEJyZWFkY3J1bWJMaW5rcyhvU291cmNlOiBCcmVhZENydW1icykge1xuXHRcdGNvbnN0IG9Db250ZXh0ID0gb1NvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpLFxuXHRcdFx0b0FwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCksXG5cdFx0XHRhUHJvbWlzZXM6IFByb21pc2U8dm9pZD5bXSA9IFtdLFxuXHRcdFx0YVNraXBQYXJhbWV0ZXJpemVkOiBhbnlbXSA9IFtdLFxuXHRcdFx0c05ld1BhdGggPSBvQ29udGV4dD8uZ2V0UGF0aCgpLFxuXHRcdFx0YVBhdGhQYXJ0cyA9IHNOZXdQYXRoPy5zcGxpdChcIi9cIikgPz8gW10sXG5cdFx0XHRvTWV0YU1vZGVsID0gb0FwcENvbXBvbmVudCAmJiBvQXBwQ29tcG9uZW50LmdldE1ldGFNb2RlbCgpO1xuXHRcdGxldCBzUGF0aCA9IFwiXCI7XG5cdFx0dHJ5IHtcblx0XHRcdGFQYXRoUGFydHMuc2hpZnQoKTtcblx0XHRcdGFQYXRoUGFydHMuc3BsaWNlKC0xLCAxKTtcblx0XHRcdGFQYXRoUGFydHMuZm9yRWFjaChmdW5jdGlvbiAoc1BhdGhQYXJ0OiBhbnkpIHtcblx0XHRcdFx0c1BhdGggKz0gYC8ke3NQYXRoUGFydH1gO1xuXHRcdFx0XHRjb25zdCBvUm9vdFZpZXdDb250cm9sbGVyID0gb0FwcENvbXBvbmVudC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKSBhcyBSb290Q29udGFpbmVyQmFzZUNvbnRyb2xsZXI7XG5cdFx0XHRcdGNvbnN0IHNQYXJhbWV0ZXJQYXRoID0gb01ldGFNb2RlbC5nZXRNZXRhUGF0aChzUGF0aCk7XG5cdFx0XHRcdGNvbnN0IGJSZXN1bHRDb250ZXh0ID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c1BhcmFtZXRlclBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUmVzdWx0Q29udGV4dGApO1xuXHRcdFx0XHRpZiAoYlJlc3VsdENvbnRleHQpIHtcblx0XHRcdFx0XHQvLyBXZSBkb250IG5lZWQgdG8gY3JlYXRlIGEgYnJlYWRjcnVtYiBmb3IgUGFyYW1ldGVyIHBhdGhcblx0XHRcdFx0XHRhU2tpcFBhcmFtZXRlcml6ZWQucHVzaCgxKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YVNraXBQYXJhbWV0ZXJpemVkLnB1c2goMCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YVByb21pc2VzLnB1c2gob1Jvb3RWaWV3Q29udHJvbGxlci5nZXRUaXRsZUluZm9Gcm9tUGF0aChzUGF0aCkpO1xuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCB0aXRsZUhpZXJhcmNoeUluZm9zOiBhbnlbXSA9IGF3YWl0IFByb21pc2UuYWxsKGFQcm9taXNlcyk7XG5cdFx0XHRsZXQgaWR4LCBoaWVyYXJjaHlQb3NpdGlvbiwgb0xpbms7XG5cdFx0XHRmb3IgKGNvbnN0IHRpdGxlSGllcmFyY2h5SW5mbyBvZiB0aXRsZUhpZXJhcmNoeUluZm9zKSB7XG5cdFx0XHRcdGhpZXJhcmNoeVBvc2l0aW9uID0gdGl0bGVIaWVyYXJjaHlJbmZvcy5pbmRleE9mKHRpdGxlSGllcmFyY2h5SW5mbyk7XG5cdFx0XHRcdGlkeCA9IGhpZXJhcmNoeVBvc2l0aW9uIC0gYVNraXBQYXJhbWV0ZXJpemVkW2hpZXJhcmNoeVBvc2l0aW9uXTtcblx0XHRcdFx0b0xpbmsgPSBvU291cmNlLmdldExpbmtzKClbaWR4XSA/IG9Tb3VyY2UuZ2V0TGlua3MoKVtpZHhdIDogbmV3IExpbmsoKTtcblx0XHRcdFx0Ly9zQ3VycmVudEVudGl0eSBpcyBhIGZhbGxiYWNrIHZhbHVlIGluIGNhc2Ugb2YgZW1wdHkgdGl0bGVcblx0XHRcdFx0b0xpbmsuc2V0VGV4dCh0aXRsZUhpZXJhcmNoeUluZm8uc3VidGl0bGUgfHwgdGl0bGVIaWVyYXJjaHlJbmZvLnRpdGxlKTtcblx0XHRcdFx0b0xpbmsuc2V0SHJlZih0aXRsZUhpZXJhcmNoeUluZm8uaW50ZW50KTtcblx0XHRcdFx0aWYgKCFvU291cmNlLmdldExpbmtzKClbaWR4XSkge1xuXHRcdFx0XHRcdG9Tb3VyY2UuYWRkTGluayhvTGluayk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnJvcjogYW55KSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBzZXR0aW5nIHRoZSBicmVhZGNydW1iIGxpbmtzOlwiICsgZXJyb3IpO1xuXHRcdH1cblx0fVxuXG5cdF9jaGVja0RhdGFQb2ludFRpdGxlRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uKCkge1xuXHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBvRGF0YVBvaW50cyA9IENvbW1vblV0aWxzLmdldEhlYWRlckZhY2V0SXRlbUNvbmZpZ0ZvckV4dGVybmFsTmF2aWdhdGlvbihcblx0XHRcdG9WaWV3LmdldFZpZXdEYXRhKCksXG5cdFx0XHR0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvdXRpbmdTZXJ2aWNlKCkuZ2V0T3V0Ym91bmRzKClcblx0XHQpO1xuXHRcdGNvbnN0IG9TaGVsbFNlcnZpY2VzID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdFx0Y29uc3Qgb1BhZ2VDb250ZXh0ID0gb1ZpZXcgJiYgKG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dCk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaXNIZWFkZXJEUExpbmtWaXNpYmxlXCIsIHt9KTtcblx0XHRpZiAob1BhZ2VDb250ZXh0KSB7XG5cdFx0XHRvUGFnZUNvbnRleHRcblx0XHRcdFx0LnJlcXVlc3RPYmplY3QoKVxuXHRcdFx0XHQudGhlbihmdW5jdGlvbiAob0RhdGE6IGFueSkge1xuXHRcdFx0XHRcdGZuR2V0TGlua3Mob0RhdGFQb2ludHMsIG9EYXRhKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkNhbm5vdCByZXRyaWV2ZSB0aGUgbGlua3MgZnJvbSB0aGUgc2hlbGwgc2VydmljZVwiLCBvRXJyb3IpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBAcGFyYW0gb0Vycm9yXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gZm5PbkVycm9yKG9FcnJvcjogYW55KSB7XG5cdFx0XHRMb2cuZXJyb3Iob0Vycm9yKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBmblNldExpbmtFbmFibGVtZW50KGlkOiBzdHJpbmcsIGFTdXBwb3J0ZWRMaW5rczogYW55KSB7XG5cdFx0XHRjb25zdCBzTGlua0lkID0gaWQ7XG5cdFx0XHQvLyBwcm9jZXNzIHZpYWJsZSBsaW5rcyBmcm9tIGdldExpbmtzIGZvciBhbGwgZGF0YXBvaW50cyBoYXZpbmcgb3V0Ym91bmRcblx0XHRcdGlmIChhU3VwcG9ydGVkTGlua3MgJiYgYVN1cHBvcnRlZExpbmtzLmxlbmd0aCA9PT0gMSAmJiBhU3VwcG9ydGVkTGlua3NbMF0uc3VwcG9ydGVkKSB7XG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgaXNIZWFkZXJEUExpbmtWaXNpYmxlLyR7c0xpbmtJZH1gLCB0cnVlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBAcGFyYW0gb1N1YkRhdGFQb2ludHNcblx0XHQgKiBAcGFyYW0gb1BhZ2VEYXRhXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gZm5HZXRMaW5rcyhvU3ViRGF0YVBvaW50czogYW55LCBvUGFnZURhdGE6IGFueSkge1xuXHRcdFx0Zm9yIChjb25zdCBzSWQgaW4gb1N1YkRhdGFQb2ludHMpIHtcblx0XHRcdFx0Y29uc3Qgb0RhdGFQb2ludCA9IG9TdWJEYXRhUG9pbnRzW3NJZF07XG5cdFx0XHRcdGNvbnN0IG9QYXJhbXM6IGFueSA9IHt9O1xuXHRcdFx0XHRjb25zdCBvTGluayA9IG9WaWV3LmJ5SWQoc0lkKTtcblx0XHRcdFx0aWYgKCFvTGluaykge1xuXHRcdFx0XHRcdC8vIGZvciBkYXRhIHBvaW50cyBjb25maWd1cmVkIGluIGFwcCBkZXNjcmlwdG9yIGJ1dCBub3QgYW5ub3RhdGVkIGluIHRoZSBoZWFkZXJcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBvTGlua0NvbnRleHQgPSBvTGluay5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdFx0XHRjb25zdCBvTGlua0RhdGE6IGFueSA9IG9MaW5rQ29udGV4dCAmJiBvTGlua0NvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdGxldCBvTWl4ZWRDb250ZXh0OiBhbnkgPSBtZXJnZSh7fSwgb1BhZ2VEYXRhLCBvTGlua0RhdGEpO1xuXHRcdFx0XHQvLyBwcm9jZXNzIHNlbWFudGljIG9iamVjdCBtYXBwaW5nc1xuXHRcdFx0XHRpZiAob0RhdGFQb2ludC5zZW1hbnRpY09iamVjdE1hcHBpbmcpIHtcblx0XHRcdFx0XHRjb25zdCBhU2VtYW50aWNPYmplY3RNYXBwaW5nID0gb0RhdGFQb2ludC5zZW1hbnRpY09iamVjdE1hcHBpbmc7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtIGluIGFTZW1hbnRpY09iamVjdE1hcHBpbmcpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG9NYXBwaW5nID0gYVNlbWFudGljT2JqZWN0TWFwcGluZ1tpdGVtXTtcblx0XHRcdFx0XHRcdGNvbnN0IHNNYWluUHJvcGVydHkgPSBvTWFwcGluZ1tcIkxvY2FsUHJvcGVydHlcIl1bXCIkUHJvcGVydHlQYXRoXCJdO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc01hcHBlZFByb3BlcnR5ID0gb01hcHBpbmdbXCJTZW1hbnRpY09iamVjdFByb3BlcnR5XCJdO1xuXHRcdFx0XHRcdFx0aWYgKHNNYWluUHJvcGVydHkgIT09IHNNYXBwZWRQcm9wZXJ0eSkge1xuXHRcdFx0XHRcdFx0XHRpZiAob01peGVkQ29udGV4dC5oYXNPd25Qcm9wZXJ0eShzTWFpblByb3BlcnR5KSkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9OZXdNYXBwaW5nOiBhbnkgPSB7fTtcblx0XHRcdFx0XHRcdFx0XHRvTmV3TWFwcGluZ1tzTWFwcGVkUHJvcGVydHldID0gb01peGVkQ29udGV4dFtzTWFpblByb3BlcnR5XTtcblx0XHRcdFx0XHRcdFx0XHRvTWl4ZWRDb250ZXh0ID0gbWVyZ2Uoe30sIG9NaXhlZENvbnRleHQsIG9OZXdNYXBwaW5nKTtcblx0XHRcdFx0XHRcdFx0XHRkZWxldGUgb01peGVkQ29udGV4dFtzTWFpblByb3BlcnR5XTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChvTWl4ZWRDb250ZXh0KSB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBzS2V5IGluIG9NaXhlZENvbnRleHQpIHtcblx0XHRcdFx0XHRcdGlmIChzS2V5LmluZGV4T2YoXCJfXCIpICE9PSAwICYmIHNLZXkuaW5kZXhPZihcIm9kYXRhLmNvbnRleHRcIikgPT09IC0xKSB7XG5cdFx0XHRcdFx0XHRcdG9QYXJhbXNbc0tleV0gPSBvTWl4ZWRDb250ZXh0W3NLZXldO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHQvLyB2YWxpZGF0ZSBpZiBhIGxpbmsgbXVzdCBiZSByZW5kZXJlZFxuXHRcdFx0XHRvU2hlbGxTZXJ2aWNlc1xuXHRcdFx0XHRcdC5pc05hdmlnYXRpb25TdXBwb3J0ZWQoW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0YXJnZXQ6IHtcblx0XHRcdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogb0RhdGFQb2ludC5zZW1hbnRpY09iamVjdCxcblx0XHRcdFx0XHRcdFx0XHRhY3Rpb246IG9EYXRhUG9pbnQuYWN0aW9uXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHBhcmFtczogb1BhcmFtc1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdF0pXG5cdFx0XHRcdFx0LnRoZW4oKGFMaW5rcykgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZuU2V0TGlua0VuYWJsZW1lbnQoc0lkLCBhTGlua3MpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZuT25FcnJvcik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aGFuZGxlcnMgPSB7XG5cdFx0b25UYWJsZUNvbnRleHRDaGFuZ2UodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIsIG9FdmVudDogYW55KSB7XG5cdFx0XHRjb25zdCBvU291cmNlID0gb0V2ZW50LmdldFNvdXJjZSgpO1xuXHRcdFx0bGV0IG9UYWJsZTogYW55O1xuXHRcdFx0dGhpcy5fZmluZFRhYmxlcygpLnNvbWUoZnVuY3Rpb24gKF9vVGFibGU6IGFueSkge1xuXHRcdFx0XHRpZiAoX29UYWJsZS5nZXRSb3dCaW5kaW5nKCkgPT09IG9Tb3VyY2UpIHtcblx0XHRcdFx0XHRvVGFibGUgPSBfb1RhYmxlO1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0pO1xuXG5cdFx0XHRjb25zdCBvQ3VycmVudEFjdGlvblByb21pc2UgPSB0aGlzLl9lZGl0Rmxvdy5nZXRDdXJyZW50QWN0aW9uUHJvbWlzZSgpO1xuXHRcdFx0aWYgKG9DdXJyZW50QWN0aW9uUHJvbWlzZSkge1xuXHRcdFx0XHRsZXQgYVRhYmxlQ29udGV4dHM6IGFueTtcblx0XHRcdFx0aWYgKG9UYWJsZS5nZXRUeXBlKCkuZ2V0TWV0YWRhdGEoKS5pc0EoXCJzYXAudWkubWRjLnRhYmxlLkdyaWRUYWJsZVR5cGVcIikpIHtcblx0XHRcdFx0XHRhVGFibGVDb250ZXh0cyA9IG9Tb3VyY2UuZ2V0Q29udGV4dHMoMCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YVRhYmxlQ29udGV4dHMgPSBvU291cmNlLmdldEN1cnJlbnRDb250ZXh0cygpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vaWYgY29udGV4dHMgYXJlIG5vdCBmdWxseSBsb2FkZWQgdGhlIGdldGNvbnRleHRzIGZ1bmN0aW9uIGFib3ZlIHdpbGwgdHJpZ2dlciBhIG5ldyBjaGFuZ2UgZXZlbnQgY2FsbFxuXHRcdFx0XHRpZiAoIWFUYWJsZUNvbnRleHRzWzBdKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG9DdXJyZW50QWN0aW9uUHJvbWlzZVxuXHRcdFx0XHRcdC50aGVuKChvQWN0aW9uUmVzcG9uc2U6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKCFvQWN0aW9uUmVzcG9uc2UgfHwgb0FjdGlvblJlc3BvbnNlLmNvbnRyb2xJZCAhPT0gb1RhYmxlLnNJZCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRjb25zdCBvQWN0aW9uRGF0YSA9IG9BY3Rpb25SZXNwb25zZS5vRGF0YTtcblx0XHRcdFx0XHRcdGNvbnN0IGFLZXlzID0gb0FjdGlvblJlc3BvbnNlLmtleXM7XG5cdFx0XHRcdFx0XHRsZXQgaU5ld0l0ZW1wID0gLTE7XG5cdFx0XHRcdFx0XHRhVGFibGVDb250ZXh0cy5maW5kKGZ1bmN0aW9uIChvVGFibGVDb250ZXh0OiBhbnksIGk6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvVGFibGVEYXRhID0gb1RhYmxlQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYkNvbXBhcmUgPSBhS2V5cy5ldmVyeShmdW5jdGlvbiAoc0tleTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG9UYWJsZURhdGFbc0tleV0gPT09IG9BY3Rpb25EYXRhW3NLZXldO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0aWYgKGJDb21wYXJlKSB7XG5cdFx0XHRcdFx0XHRcdFx0aU5ld0l0ZW1wID0gaTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYkNvbXBhcmU7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGlmIChpTmV3SXRlbXAgIT09IC0xKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGFEaWFsb2dzID0gSW5zdGFuY2VNYW5hZ2VyLmdldE9wZW5EaWFsb2dzKCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9EaWFsb2cgPVxuXHRcdFx0XHRcdFx0XHRcdGFEaWFsb2dzLmxlbmd0aCA+IDAgPyBhRGlhbG9ncy5maW5kKChkaWFsb2cpID0+IGRpYWxvZy5kYXRhKFwiRnVsbFNjcmVlbkRpYWxvZ1wiKSAhPT0gdHJ1ZSkgOiBudWxsO1xuXHRcdFx0XHRcdFx0XHRpZiAob0RpYWxvZykge1xuXHRcdFx0XHRcdFx0XHRcdC8vIGJ5IGRlc2lnbiwgYSBzYXAubS5kaWFsb2cgc2V0IHRoZSBmb2N1cyB0byB0aGUgcHJldmlvdXMgZm9jdXNlZCBlbGVtZW50IHdoZW4gY2xvc2luZy5cblx0XHRcdFx0XHRcdFx0XHQvLyB3ZSBzaG91bGQgd2FpdCBmb3IgdGhlIGRpYWxvZyB0byBiZSBjbG9zZSBiZWZvcmUgdG8gZm9jdXMgYW5vdGhlciBlbGVtZW50XG5cdFx0XHRcdFx0XHRcdFx0b0RpYWxvZy5hdHRhY2hFdmVudE9uY2UoXCJhZnRlckNsb3NlXCIsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdG9UYWJsZS5mb2N1c1JvdyhpTmV3SXRlbXAsIHRydWUpO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdG9UYWJsZS5mb2N1c1JvdyhpTmV3SXRlbXAsIHRydWUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHRoaXMuX2VkaXRGbG93LmRlbGV0ZUN1cnJlbnRBY3Rpb25Qcm9taXNlKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycjogYW55KSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoYEFuIGVycm9yIG9jY3VycyB3aGlsZSBzY3JvbGxpbmcgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgSXRlbTogJHtlcnJ9YCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHQvLyBmaXJlIE1vZGVsQ29udGV4dENoYW5nZSBvbiB0aGUgbWVzc2FnZSBidXR0b24gd2hlbmV2ZXIgdGhlIHRhYmxlIGNvbnRleHQgY2hhbmdlc1xuXHRcdFx0Y29uc3Qgb01lc3NhZ2VCdXR0b24gPSB0aGlzLmdldFZpZXcoKS5ieUlkKFwiZmU6OkZvb3RlckJhcjo6TWVzc2FnZUJ1dHRvblwiKTtcblx0XHRcdG9NZXNzYWdlQnV0dG9uLmZpcmVNb2RlbENvbnRleHRDaGFuZ2UoKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogSW52b2tlcyBhbiBhY3Rpb24gLSBib3VuZC91bmJvdW5kIGFuZCBzZXRzIHRoZSBwYWdlIGRpcnR5LlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIG9WaWV3XG5cdFx0ICogQHBhcmFtIHNBY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb24gdG8gYmUgY2FsbGVkXG5cdFx0ICogQHBhcmFtIFttUGFyYW1ldGVyc10gQ29udGFpbnMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuXHRcdCAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuY29udGV4dHNdIE1hbmRhdG9yeSBmb3IgYSBib3VuZCBhY3Rpb24sIGVpdGhlciBvbmUgY29udGV4dCBvciBhbiBhcnJheSB3aXRoIGNvbnRleHRzIGZvciB3aGljaCB0aGUgYWN0aW9uIHNoYWxsIGJlIGNhbGxlZFxuXHRcdCAqIEBwYXJhbSBbbVBhcmFtZXRlcnMubW9kZWxdIE1hbmRhdG9yeSBmb3IgYW4gdW5ib3VuZCBhY3Rpb247IGFuIGluc3RhbmNlIG9mIGFuIE9EYXRhIFY0IG1vZGVsXG5cdFx0ICogQHJldHVybnMgVGhlIGFjdGlvbiBwcm9taXNlXG5cdFx0ICogQHVpNS1yZXN0cmljdGVkXG5cdFx0ICogQGZpbmFsXG5cdFx0ICovXG5cdFx0b25DYWxsQWN0aW9uKG9WaWV3OiBhbnksIHNBY3Rpb25OYW1lOiBzdHJpbmcsIG1QYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHRcdGNvbnN0IG9Db250cm9sbGVyID0gb1ZpZXcuZ2V0Q29udHJvbGxlcigpO1xuXHRcdFx0cmV0dXJuIG9Db250cm9sbGVyLmVkaXRGbG93XG5cdFx0XHRcdC5pbnZva2VBY3Rpb24oc0FjdGlvbk5hbWUsIG1QYXJhbWV0ZXJzKVxuXHRcdFx0XHQudGhlbihvQ29udHJvbGxlci5fc2hvd01lc3NhZ2VQb3BvdmVyLmJpbmQob0NvbnRyb2xsZXIsIHVuZGVmaW5lZCkpXG5cdFx0XHRcdC5jYXRjaChvQ29udHJvbGxlci5fc2hvd01lc3NhZ2VQb3BvdmVyLmJpbmQob0NvbnRyb2xsZXIpKTtcblx0XHR9LFxuXHRcdG9uRGF0YVBvaW50VGl0bGVQcmVzc2VkKG9Db250cm9sbGVyOiBhbnksIG9Tb3VyY2U6IGFueSwgb01hbmlmZXN0T3V0Ym91bmQ6IGFueSwgc0NvbnRyb2xDb25maWc6IGFueSwgc0NvbGxlY3Rpb25QYXRoOiBhbnkpIHtcblx0XHRcdG9NYW5pZmVzdE91dGJvdW5kID0gdHlwZW9mIG9NYW5pZmVzdE91dGJvdW5kID09PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZShvTWFuaWZlc3RPdXRib3VuZCkgOiBvTWFuaWZlc3RPdXRib3VuZDtcblx0XHRcdGNvbnN0IG9UYXJnZXRJbmZvID0gb01hbmlmZXN0T3V0Ym91bmRbc0NvbnRyb2xDb25maWddLFxuXHRcdFx0XHRhU2VtYW50aWNPYmplY3RNYXBwaW5nID0gQ29tbW9uVXRpbHMuZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nKG9UYXJnZXRJbmZvKSxcblx0XHRcdFx0b0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dCA9IG9Tb3VyY2UuZ2V0QmluZGluZ0NvbnRleHQoKSxcblx0XHRcdFx0c01ldGFQYXRoID0gb0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dFxuXHRcdFx0XHRcdC5nZXRNb2RlbCgpXG5cdFx0XHRcdFx0LmdldE1ldGFNb2RlbCgpXG5cdFx0XHRcdFx0LmdldE1ldGFQYXRoKG9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHRcdGxldCBhTmF2aWdhdGlvbkRhdGEgPSBvQ29udHJvbGxlci5fZ2V0Q2hhcnRDb250ZXh0RGF0YShvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0LCBzQ29sbGVjdGlvblBhdGgpO1xuXHRcdFx0bGV0IGFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVycztcblxuXHRcdFx0YU5hdmlnYXRpb25EYXRhID0gYU5hdmlnYXRpb25EYXRhLm1hcChmdW5jdGlvbiAob05hdmlnYXRpb25EYXRhOiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRkYXRhOiBvTmF2aWdhdGlvbkRhdGEsXG5cdFx0XHRcdFx0bWV0YVBhdGg6IHNNZXRhUGF0aCArIChzQ29sbGVjdGlvblBhdGggPyBgLyR7c0NvbGxlY3Rpb25QYXRofWAgOiBcIlwiKVxuXHRcdFx0XHR9O1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAob1RhcmdldEluZm8gJiYgb1RhcmdldEluZm8ucGFyYW1ldGVycykge1xuXHRcdFx0XHRjb25zdCBvUGFyYW1zID0gb1RhcmdldEluZm8ucGFyYW1ldGVycyAmJiBvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLmdldE91dGJvdW5kUGFyYW1zKG9UYXJnZXRJbmZvLnBhcmFtZXRlcnMpO1xuXHRcdFx0XHRpZiAoT2JqZWN0LmtleXMob1BhcmFtcykubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdGFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVycyA9IG9QYXJhbXM7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChvVGFyZ2V0SW5mbyAmJiBvVGFyZ2V0SW5mby5zZW1hbnRpY09iamVjdCAmJiBvVGFyZ2V0SW5mby5hY3Rpb24pIHtcblx0XHRcdFx0b0NvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5uYXZpZ2F0ZShvVGFyZ2V0SW5mby5zZW1hbnRpY09iamVjdCwgb1RhcmdldEluZm8uYWN0aW9uLCB7XG5cdFx0XHRcdFx0bmF2aWdhdGlvbkNvbnRleHRzOiBhTmF2aWdhdGlvbkRhdGEsXG5cdFx0XHRcdFx0c2VtYW50aWNPYmplY3RNYXBwaW5nOiBhU2VtYW50aWNPYmplY3RNYXBwaW5nLFxuXHRcdFx0XHRcdGFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVyczogYWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogVHJpZ2dlcnMgYW4gb3V0Ym91bmQgbmF2aWdhdGlvbiB3aGVuIGEgdXNlciBjaG9vc2VzIHRoZSBjaGV2cm9uLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIG9Db250cm9sbGVyXG5cdFx0ICogQHBhcmFtIHNPdXRib3VuZFRhcmdldCBOYW1lIG9mIHRoZSBvdXRib3VuZCB0YXJnZXQgKG5lZWRzIHRvIGJlIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0KVxuXHRcdCAqIEBwYXJhbSBvQ29udGV4dCBUaGUgY29udGV4dCB0aGF0IGNvbnRhaW5zIHRoZSBkYXRhIGZvciB0aGUgdGFyZ2V0IGFwcFxuXHRcdCAqIEBwYXJhbSBzQ3JlYXRlUGF0aCBDcmVhdGUgcGF0aCB3aGVuIHRoZSBjaGV2cm9uIGlzIGNyZWF0ZWQuXG5cdFx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCBpcyByZXNvbHZlZCBvbmNlIHRoZSBuYXZpZ2F0aW9uIGlzIHRyaWdnZXJlZCAoPz8/IG1heWJlIG9ubHkgb25jZSBmaW5pc2hlZD8pXG5cdFx0ICogQHVpNS1yZXN0cmljdGVkXG5cdFx0ICogQGZpbmFsXG5cdFx0ICovXG5cdFx0b25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kKG9Db250cm9sbGVyOiBPYmplY3RQYWdlQ29udHJvbGxlciwgc091dGJvdW5kVGFyZ2V0OiBzdHJpbmcsIG9Db250ZXh0OiBhbnksIHNDcmVhdGVQYXRoOiBzdHJpbmcpIHtcblx0XHRcdHJldHVybiBvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZChvQ29udHJvbGxlciwgc091dGJvdW5kVGFyZ2V0LCBvQ29udGV4dCwgc0NyZWF0ZVBhdGgpO1xuXHRcdH0sXG5cblx0XHRvbk5hdmlnYXRlQ2hhbmdlKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyLCBvRXZlbnQ6IGFueSkge1xuXHRcdFx0Ly93aWxsIGJlIGNhbGxlZCBhbHdheXMgd2hlbiB3ZSBjbGljayBvbiBhIHNlY3Rpb24gdGFiXG5cdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0XHR0aGlzLmJTZWN0aW9uTmF2aWdhdGVkID0gdHJ1ZTtcblxuXHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRcdGlmIChcblx0XHRcdFx0b09iamVjdFBhZ2UuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpICYmXG5cdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkuc2VjdGlvbkxheW91dCA9PT0gXCJUYWJzXCIgJiZcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiZXJyb3JOYXZpZ2F0aW9uU2VjdGlvbkZsYWdcIikgPT09IGZhbHNlXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29uc3Qgb1N1YlNlY3Rpb24gPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwic3ViU2VjdGlvblwiKTtcblx0XHRcdFx0dGhpcy5fdXBkYXRlRm9jdXNJbkVkaXRNb2RlKFtvU3ViU2VjdGlvbl0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0b25WYXJpYW50U2VsZWN0ZWQ6IGZ1bmN0aW9uICh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlcikge1xuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdH0sXG5cdFx0b25WYXJpYW50U2F2ZWQ6IGZ1bmN0aW9uICh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlcikge1xuXHRcdFx0Ly9UT0RPOiBTaG91bGQgcmVtb3ZlIHRoaXMgc2V0VGltZU91dCBvbmNlIFZhcmlhbnQgTWFuYWdlbWVudCBwcm92aWRlcyBhbiBhcGkgdG8gZmV0Y2ggdGhlIGN1cnJlbnQgdmFyaWFudCBrZXkgb24gc2F2ZVxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdH0sIDUwMCk7XG5cdFx0fSxcblx0XHRuYXZpZ2F0ZVRvU3ViU2VjdGlvbjogZnVuY3Rpb24gKG9Db250cm9sbGVyOiBPYmplY3RQYWdlQ29udHJvbGxlciwgdkRldGFpbENvbmZpZzogYW55KSB7XG5cdFx0XHRjb25zdCBvRGV0YWlsQ29uZmlnID0gdHlwZW9mIHZEZXRhaWxDb25maWcgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKHZEZXRhaWxDb25maWcpIDogdkRldGFpbENvbmZpZztcblx0XHRcdGNvbnN0IG9PYmplY3RQYWdlID0gb0NvbnRyb2xsZXIuZ2V0VmlldygpLmJ5SWQoXCJmZTo6T2JqZWN0UGFnZVwiKSBhcyBPYmplY3RQYWdlTGF5b3V0O1xuXHRcdFx0bGV0IG9TZWN0aW9uO1xuXHRcdFx0bGV0IG9TdWJTZWN0aW9uO1xuXHRcdFx0aWYgKG9EZXRhaWxDb25maWcuc2VjdGlvbklkKSB7XG5cdFx0XHRcdG9TZWN0aW9uID0gb0NvbnRyb2xsZXIuZ2V0VmlldygpLmJ5SWQob0RldGFpbENvbmZpZy5zZWN0aW9uSWQpIGFzIE9iamVjdFBhZ2VTZWN0aW9uO1xuXHRcdFx0XHRvU3ViU2VjdGlvbiA9IChcblx0XHRcdFx0XHRvRGV0YWlsQ29uZmlnLnN1YlNlY3Rpb25JZFxuXHRcdFx0XHRcdFx0PyBvQ29udHJvbGxlci5nZXRWaWV3KCkuYnlJZChvRGV0YWlsQ29uZmlnLnN1YlNlY3Rpb25JZClcblx0XHRcdFx0XHRcdDogb1NlY3Rpb24gJiYgb1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKSAmJiBvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpWzBdXG5cdFx0XHRcdCkgYXMgT2JqZWN0UGFnZVN1YlNlY3Rpb247XG5cdFx0XHR9IGVsc2UgaWYgKG9EZXRhaWxDb25maWcuc3ViU2VjdGlvbklkKSB7XG5cdFx0XHRcdG9TdWJTZWN0aW9uID0gb0NvbnRyb2xsZXIuZ2V0VmlldygpLmJ5SWQob0RldGFpbENvbmZpZy5zdWJTZWN0aW9uSWQpIGFzIE9iamVjdFBhZ2VTdWJTZWN0aW9uO1xuXHRcdFx0XHRvU2VjdGlvbiA9IG9TdWJTZWN0aW9uICYmIChvU3ViU2VjdGlvbi5nZXRQYXJlbnQoKSBhcyBPYmplY3RQYWdlU2VjdGlvbik7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIW9TZWN0aW9uIHx8ICFvU3ViU2VjdGlvbiB8fCAhb1NlY3Rpb24uZ2V0VmlzaWJsZSgpIHx8ICFvU3ViU2VjdGlvbi5nZXRWaXNpYmxlKCkpIHtcblx0XHRcdFx0KChvQ29udHJvbGxlci5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJzYXAuZmUuaTE4blwiKSBhcyBSZXNvdXJjZU1vZGVsKS5nZXRSZXNvdXJjZUJ1bmRsZSgpIGFzIFByb21pc2U8UmVzb3VyY2VCdW5kbGU+KVxuXHRcdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChvUmVzb3VyY2VCdW5kbGUpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHNUaXRsZSA9IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFxuXHRcdFx0XHRcdFx0XHRcIkNfUk9VVElOR19OQVZJR0FUSU9OX0RJU0FCTEVEX1RJVExFXCIsXG5cdFx0XHRcdFx0XHRcdG9SZXNvdXJjZUJ1bmRsZSxcblx0XHRcdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHRcdFx0KG9Db250cm9sbGVyLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkuZW50aXR5U2V0XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKHNUaXRsZSk7XG5cdFx0XHRcdFx0XHRNZXNzYWdlQm94LmVycm9yKHNUaXRsZSk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoZXJyb3IpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b09iamVjdFBhZ2Uuc2Nyb2xsVG9TZWN0aW9uKG9TdWJTZWN0aW9uLmdldElkKCkpO1xuXHRcdFx0XHQvLyB0cmlnZ2VyIGlhcHAgc3RhdGUgY2hhbmdlXG5cdFx0XHRcdG9PYmplY3RQYWdlLmZpcmVOYXZpZ2F0ZSh7XG5cdFx0XHRcdFx0c2VjdGlvbjogb1NlY3Rpb24sXG5cdFx0XHRcdFx0c3ViU2VjdGlvbjogb1N1YlNlY3Rpb25cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRvbkNoYXJ0U2VsZWN0aW9uQ2hhbmdlZDogZnVuY3Rpb24gKG9FdmVudDogYW55KSB7XG5cdFx0XHRDaGFydFJ1bnRpbWUuZm5VcGRhdGVDaGFydChvRXZlbnQpO1xuXHRcdH1cblx0fTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgT2JqZWN0UGFnZUNvbnRyb2xsZXI7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQWtqQk8sZ0JBQWdCQSxJQUFoQixFQUFzQkMsT0FBdEIsRUFBK0I7SUFDckMsSUFBSTtNQUNILElBQUlDLE1BQU0sR0FBR0YsSUFBSSxFQUFqQjtJQUNBLENBRkQsQ0FFRSxPQUFNRyxDQUFOLEVBQVM7TUFDVixPQUFPRixPQUFPLENBQUNFLENBQUQsQ0FBZDtJQUNBOztJQUNELElBQUlELE1BQU0sSUFBSUEsTUFBTSxDQUFDRSxJQUFyQixFQUEyQjtNQUMxQixPQUFPRixNQUFNLENBQUNFLElBQVAsQ0FBWSxLQUFLLENBQWpCLEVBQW9CSCxPQUFwQixDQUFQO0lBQ0E7O0lBQ0QsT0FBT0MsTUFBUDtFQUNBOztFQUdNLDBCQUEwQkYsSUFBMUIsRUFBZ0NLLFNBQWhDLEVBQTJDO0lBQ2pELElBQUk7TUFDSCxJQUFJSCxNQUFNLEdBQUdGLElBQUksRUFBakI7SUFDQSxDQUZELENBRUUsT0FBT0csQ0FBUCxF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
|
|
1603
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJib2R5IiwicmVjb3ZlciIsInJlc3VsdCIsImUiLCJ0aGVuIiwiZmluYWxpemVyIiwiYmluZCIsIk9iamVjdFBhZ2VDb250cm9sbGVyIiwiZGVmaW5lVUk1Q2xhc3MiLCJ1c2luZ0V4dGVuc2lvbiIsIlBsYWNlaG9sZGVyIiwiRWRpdEZsb3ciLCJTaGFyZSIsIm92ZXJyaWRlIiwiU2hhcmVPdmVycmlkZXMiLCJJbnRlcm5hbEVkaXRGbG93IiwiRWRpdEZsb3dPdmVycmlkZXMiLCJJbnRlcm5hbFJvdXRpbmciLCJJbnRlcm5hbFJvdXRpbmdPdmVycmlkZSIsIlBhZ2luYXRvciIsIlBhZ2luYXRvck92ZXJyaWRlIiwiTWVzc2FnZUhhbmRsZXIiLCJNZXNzYWdlSGFuZGxlck92ZXJyaWRlIiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUiLCJJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldE5hdmlnYXRpb25Nb2RlIiwiYklzU3RpY2t5RWRpdE1vZGUiLCJnZXRWaWV3IiwiZ2V0Q29udHJvbGxlciIsImdldFN0aWNreUVkaXRNb2RlIiwidW5kZWZpbmVkIiwiVmlld1N0YXRlIiwiVmlld1N0YXRlT3ZlcnJpZGVzIiwiUGFnZVJlYWR5IiwiaXNDb250ZXh0RXhwZWN0ZWQiLCJNYXNzRWRpdCIsInB1YmxpY0V4dGVuc2lvbiIsImZpbmFsRXh0ZW5zaW9uIiwiZXh0ZW5zaWJsZSIsIk92ZXJyaWRlRXhlY3V0aW9uIiwiQWZ0ZXIiLCJoYW5kbGVycyIsIm9uVGFibGVDb250ZXh0Q2hhbmdlIiwib0V2ZW50Iiwib1NvdXJjZSIsImdldFNvdXJjZSIsIm9UYWJsZSIsIl9maW5kVGFibGVzIiwic29tZSIsIl9vVGFibGUiLCJnZXRSb3dCaW5kaW5nIiwib0N1cnJlbnRBY3Rpb25Qcm9taXNlIiwiX2VkaXRGbG93IiwiZ2V0Q3VycmVudEFjdGlvblByb21pc2UiLCJhVGFibGVDb250ZXh0cyIsImdldFR5cGUiLCJnZXRNZXRhZGF0YSIsImlzQSIsImdldENvbnRleHRzIiwiZ2V0Q3VycmVudENvbnRleHRzIiwib0FjdGlvblJlc3BvbnNlIiwiY29udHJvbElkIiwic0lkIiwib0FjdGlvbkRhdGEiLCJvRGF0YSIsImFLZXlzIiwia2V5cyIsImlOZXdJdGVtcCIsImZpbmQiLCJvVGFibGVDb250ZXh0IiwiaSIsIm9UYWJsZURhdGEiLCJnZXRPYmplY3QiLCJiQ29tcGFyZSIsImV2ZXJ5Iiwic0tleSIsImFEaWFsb2dzIiwiSW5zdGFuY2VNYW5hZ2VyIiwiZ2V0T3BlbkRpYWxvZ3MiLCJvRGlhbG9nIiwibGVuZ3RoIiwiZGlhbG9nIiwiZGF0YSIsImF0dGFjaEV2ZW50T25jZSIsImZvY3VzUm93IiwiZGVsZXRlQ3VycmVudEFjdGlvblByb21pc2UiLCJjYXRjaCIsImVyciIsIkxvZyIsImVycm9yIiwibWVzc2FnZUJ1dHRvbiIsImZpcmVNb2RlbENvbnRleHRDaGFuZ2UiLCJvbkNhbGxBY3Rpb24iLCJvVmlldyIsInNBY3Rpb25OYW1lIiwibVBhcmFtZXRlcnMiLCJvQ29udHJvbGxlciIsImVkaXRGbG93IiwiaW52b2tlQWN0aW9uIiwiX3Nob3dNZXNzYWdlUG9wb3ZlciIsIm9uRGF0YVBvaW50VGl0bGVQcmVzc2VkIiwib01hbmlmZXN0T3V0Ym91bmQiLCJzQ29udHJvbENvbmZpZyIsInNDb2xsZWN0aW9uUGF0aCIsIkpTT04iLCJwYXJzZSIsIm9UYXJnZXRJbmZvIiwiYVNlbWFudGljT2JqZWN0TWFwcGluZyIsIkNvbW1vblV0aWxzIiwiZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nIiwib0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0Iiwic01ldGFQYXRoIiwiZ2V0TW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJnZXRNZXRhUGF0aCIsImdldFBhdGgiLCJhTmF2aWdhdGlvbkRhdGEiLCJfZ2V0Q2hhcnRDb250ZXh0RGF0YSIsImFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVycyIsIm1hcCIsIm9OYXZpZ2F0aW9uRGF0YSIsIm1ldGFQYXRoIiwicGFyYW1ldGVycyIsIm9QYXJhbXMiLCJfaW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0T3V0Ym91bmRQYXJhbXMiLCJPYmplY3QiLCJzZW1hbnRpY09iamVjdCIsImFjdGlvbiIsIm5hdmlnYXRlIiwibmF2aWdhdGlvbkNvbnRleHRzIiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwib25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kIiwic091dGJvdW5kVGFyZ2V0Iiwib0NvbnRleHQiLCJzQ3JlYXRlUGF0aCIsIm9uTmF2aWdhdGVDaGFuZ2UiLCJnZXRFeHRlbnNpb25BUEkiLCJ1cGRhdGVBcHBTdGF0ZSIsImJTZWN0aW9uTmF2aWdhdGVkIiwib0ludGVybmFsTW9kZWxDb250ZXh0Iiwib09iamVjdFBhZ2UiLCJfZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2wiLCJnZXRQcm9wZXJ0eSIsImdldFZpZXdEYXRhIiwic2VjdGlvbkxheW91dCIsIm9TdWJTZWN0aW9uIiwiZ2V0UGFyYW1ldGVyIiwiX3VwZGF0ZUZvY3VzSW5FZGl0TW9kZSIsIm9uVmFyaWFudFNlbGVjdGVkIiwib25WYXJpYW50U2F2ZWQiLCJzZXRUaW1lb3V0IiwibmF2aWdhdGVUb1N1YlNlY3Rpb24iLCJ2RGV0YWlsQ29uZmlnIiwib0RldGFpbENvbmZpZyIsImJ5SWQiLCJvU2VjdGlvbiIsInNlY3Rpb25JZCIsInN1YlNlY3Rpb25JZCIsImdldFN1YlNlY3Rpb25zIiwiZ2V0UGFyZW50IiwiZ2V0VmlzaWJsZSIsImdldFJlc291cmNlQnVuZGxlIiwib1Jlc291cmNlQnVuZGxlIiwic1RpdGxlIiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJlbnRpdHlTZXQiLCJNZXNzYWdlQm94Iiwic2Nyb2xsVG9TZWN0aW9uIiwiZ2V0SWQiLCJmaXJlTmF2aWdhdGUiLCJzZWN0aW9uIiwic3ViU2VjdGlvbiIsIm9uQ2hhcnRTZWxlY3Rpb25DaGFuZ2VkIiwiQ2hhcnRSdW50aW1lIiwiZm5VcGRhdGVDaGFydCIsIm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcyIsIkV4dGVuc2lvbkFQSSIsImV4dGVuc2lvbkFQSSIsIm9uSW5pdCIsInNldFByb3BlcnR5IiwidmlzaWJpbGl0eSIsIml0ZW1zIiwiX2dldEJhdGNoR3JvdXBzRm9yVmlldyIsInVzZU5ld0xhenlMb2FkaW5nIiwiZ2V0RW5hYmxlTGF6eUxvYWRpbmciLCJhdHRhY2hFdmVudCIsIl9oYW5kbGVTdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0Iiwib0l0ZW1CaW5kaW5nIiwiYXR0YWNoQ2hhbmdlIiwiX2ZuU2hvd09QTWVzc2FnZSIsIm9uRXhpdCIsImRlc3Ryb3kiLCJvTWVzc2FnZVBvcG92ZXIiLCJpc09wZW4iLCJjbG9zZSIsImlzS2VlcEFsaXZlIiwic2V0S2VlcEFsaXZlIiwidmlldyIsIm1lc3NhZ2VzIiwiZ2V0SXRlbXMiLCJpdGVtIiwiZmlsdGVyIiwibWVzc2FnZSIsImdldFRhcmdldHMiLCJzaG93TWVzc2FnZXMiLCJfZ2V0VGFibGVCaW5kaW5nIiwib25CZWZvcmVSZW5kZXJpbmciLCJQYWdlQ29udHJvbGxlciIsInByb3RvdHlwZSIsImFwcGx5Iiwib1ZpZXdEYXRhIiwicmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCIsIkNvbW1vbkhlbHBlciIsInNldE1ldGFNb2RlbCIsImdldEFwcENvbXBvbmVudCIsIm9uQWZ0ZXJSZW5kZXJpbmciLCJyZXNwb25zZSIsIm9FcnJvciIsIl9vbkJlZm9yZUJpbmRpbmciLCJhVGFibGVzIiwib0ludGVybmFsTW9kZWwiLCJhQmF0Y2hHcm91cHMiLCJpVmlld0xldmVsIiwidmlld0xldmVsIiwib0Zhc3RDcmVhdGlvblJvdyIsInB1c2giLCJiRHJhZnROYXZpZ2F0aW9uIiwiX2Nsb3NlU2lkZUNvbnRlbnQiLCJvcENvbnRleHQiLCJoYXNQZW5kaW5nQ2hhbmdlcyIsImdldEJpbmRpbmciLCJyZXNldENoYW5nZXMiLCJnZXRDcmVhdGlvblJvdyIsInNldEJpbmRpbmdDb250ZXh0IiwiZm5TY3JvbGxUb1ByZXNlbnRTZWN0aW9uIiwiaXNGaXJzdFJlbmRlcmluZyIsImJQZXJzaXN0T1BTY3JvbGwiLCJzZXRTZWxlY3RlZFNlY3Rpb24iLCJvRGVsZWdhdGVPbkJlZm9yZSIsImFkZEV2ZW50RGVsZWdhdGUiLCJwYWdlUmVhZHkiLCJyZW1vdmVFdmVudERlbGVnYXRlIiwib0JpbmRpbmciLCJsaXN0QmluZGluZyIsIm9QYWdpbmF0b3JDdXJyZW50Q29udGV4dCIsIm9CaW5kaW5nVG9Vc2UiLCJwYWdpbmF0b3IiLCJpbml0aWFsaXplIiwic0JpbmRpbmdQYXRoIiwidGVzdCIsInNMaXN0QmluZGluZ1BhdGgiLCJyZXBsYWNlIiwiT0RhdGFMaXN0QmluZGluZyIsIm9Nb2RlbCIsIl9zZXRMaXN0QmluZGluZ0FzeW5jIiwiZGV0YWNoRXZlbnQiLCJhU2VjdGlvbnMiLCJnZXRTZWN0aW9ucyIsImJVc2VJY29uVGFiQmFyIiwiZ2V0VXNlSWNvblRhYkJhciIsImlTa2lwIiwiYklzSW5FZGl0TW9kZSIsImJFZGl0YWJsZUhlYWRlciIsImVkaXRhYmxlSGVhZGVyQ29udGVudCIsImlTZWN0aW9uIiwiYVN1YlNlY3Rpb25zIiwiaVN1YlNlY3Rpb24iLCJpc1Zpc2liaWxpdHlEeW5hbWljIiwicGxhY2Vob2xkZXIiLCJpc1BsYWNlaG9sZGVyRW5hYmxlZCIsInNob3dQbGFjZWhvbGRlciIsIm9OYXZDb250YWluZXIiLCJvQ29udGFpbmVyIiwiX2dldEZpcnN0Q2xpY2thYmxlRWxlbWVudCIsIm9GaXJzdENsaWNrYWJsZUVsZW1lbnQiLCJhQWN0aW9ucyIsImdldEhlYWRlclRpdGxlIiwiZ2V0QWN0aW9ucyIsIm9BY3Rpb24iLCJnZXRFbmFibGVkIiwiX2dldEZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZEZyb21TdWJTZWN0aW9uIiwiYUJsb2NrcyIsImdldEJsb2NrcyIsImJsb2NrIiwiYUZvcm1Db250YWluZXJzIiwiZ2V0Rm9ybUNvbnRhaW5lcnMiLCJnZXRDb250ZW50IiwiZm9ybUNvbnRhaW5lciIsImFGb3JtRWxlbWVudHMiLCJnZXRGb3JtRWxlbWVudHMiLCJmb3JtRWxlbWVudCIsImFGaWVsZHMiLCJnZXRGaWVsZHMiLCJnZXRSZXF1aXJlZCIsImdldFZhbHVlIiwiZGVidWciLCJvTWFuZGF0b3J5RmllbGQiLCJvRmllbGRUb0ZvY3VzIiwiY29udGVudCIsImdldENvbnRlbnRFZGl0IiwiX2dldEZpcnN0RWRpdGFibGVJbnB1dCIsImZvY3VzIiwiX29uQmFja05hdmlnYXRpb25JbkRyYWZ0IiwibWVzc2FnZUhhbmRsZXIiLCJyZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMiLCJnZXRSb3V0ZXJQcm94eSIsImNoZWNrSWZCYWNrSGFzU2FtZUNvbnRleHQiLCJoaXN0b3J5IiwiYmFjayIsImRyYWZ0IiwicHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24iLCJGdW5jdGlvbiIsIk5hdmlnYXRpb25UeXBlIiwiQmFja05hdmlnYXRpb24iLCJfb25BZnRlckJpbmRpbmciLCJvQmluZGluZ0NvbnRleHQiLCJlbmFibGVGYXN0Q3JlYXRpb25Sb3ciLCJvTGlzdEJpbmRpbmciLCJvRmFzdENyZWF0aW9uTGlzdEJpbmRpbmciLCJvRmFzdENyZWF0aW9uQ29udGV4dCIsIm9GaW5hbFVJU3RhdGUiLCJiaW5kTGlzdCIsImdldENvbnRleHQiLCIkJHVwZGF0ZUdyb3VwSWQiLCIkJGdyb3VwSWQiLCJyZWZyZXNoSW50ZXJuYWwiLCJjcmVhdGUiLCJjcmVhdGVkIiwidHJhY2UiLCJfc2lkZUVmZmVjdHMiLCJjbGVhclByb3BlcnRpZXNTdGF0dXMiLCJhSUJOQWN0aW9ucyIsImZvckVhY2giLCJnZXRJQk5BY3Rpb25zIiwib1RhYmxlUm93QmluZGluZyIsIk1vZGVsSGVscGVyIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwicmVtb3ZlQ2FjaGVzQW5kTWVzc2FnZXMiLCJvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwicGFyc2VDdXN0b21EYXRhIiwiRGVsZWdhdGVVdGlsIiwiZ2V0Q3VzdG9tRGF0YSIsImFTZWxlY3RlZENvbnRleHRzIiwiZ2V0U2VsZWN0ZWRDb250ZXh0cyIsIkFjdGlvblJ1bnRpbWUiLCJzZXRBY3Rpb25FbmFibGVtZW50IiwiY2xlYXJTZWxlY3Rpb24iLCJnZXRTZW1hbnRpY1RhcmdldHNGcm9tUGFnZU1vZGVsIiwib09iamVjdFBhZ2VUaXRsZSIsImFJQk5IZWFkZXJBY3Rpb25zIiwiY29uY2F0IiwidXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkiLCJoYW5kbGVUYWJsZU1vZGlmaWNhdGlvbnMiLCJmbkhhbmRsZVRhYmxlUGF0Y2hFdmVudHMiLCJmbkhhbmRsZUNoYW5nZSIsImRldGFjaENoYW5nZSIsImNvbXB1dGVFZGl0TW9kZSIsImlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkIiwiY29ubmVjdCIsIm9DYWNoZSIsIl91cGRhdGVSZWxhdGVkQXBwcyIsImZuVXBkYXRlUmVsYXRlZEFwcHMiLCJkZXRhY2hEYXRhUmVjZWl2ZWQiLCJhdHRhY2hEYXRhUmVjZWl2ZWQiLCJjdXJyZW50QmluZGluZyIsImhhbmRsZVBhdGNoU2VudCIsIlRhYmxlVXRpbHMiLCJ3aGVuQm91bmQiLCJfdHJpZ2dlclZpc2libGVTdWJTZWN0aW9uc0V2ZW50cyIsIm9uUGFnZVJlYWR5Iiwic2V0Rm9jdXMiLCJpc0luRGlzcGxheU1vZGUiLCJvU2VsZWN0ZWRTZWN0aW9uIiwiQ29yZSIsImdldFNlbGVjdGVkU2VjdGlvbiIsImJJc1N0aWNreU1vZGUiLCJvQXBwQ29tcG9uZW50IiwiZ2V0U2hlbGxTZXJ2aWNlcyIsInNldEJhY2tOYXZpZ2F0aW9uIiwiZ2V0QXBwU3RhdGVIYW5kbGVyIiwiYXBwbHlBcHBTdGF0ZSIsImZvcmNlRm9jdXMiLCJFcnJvciIsIl9jaGVja0RhdGFQb2ludFRpdGxlRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uIiwiX2dldFBhZ2VUaXRsZUluZm9ybWF0aW9uIiwib09iamVjdFBhZ2VTdWJ0aXRsZSIsIm9DdXN0b21EYXRhIiwiZ2V0S2V5IiwidGl0bGUiLCJzdWJ0aXRsZSIsImludGVudCIsImljb24iLCJfZXhlY3V0ZUhlYWRlclNob3J0Y3V0Iiwic0J1dHRvbklkIiwib0J1dHRvbiIsIm9FbGVtZW50IiwiZmlyZUJ1dHRvblByZXNzIiwiX2V4ZWN1dGVGb290ZXJTaG9ydGN1dCIsImdldEZvb3RlciIsImdldE5hbWUiLCJfZXhlY3V0ZVRhYlNob3J0Q3V0Iiwib0V4ZWN1dGlvbiIsImlTZWN0aW9uSW5kZXhNYXgiLCJzQ29tbWFuZCIsImdldENvbW1hbmQiLCJuZXdTZWN0aW9uIiwiaVNlbGVjdGVkU2VjdGlvbkluZGV4IiwiaW5kZXhPZlNlY3Rpb24iLCJfZ2V0Rm9vdGVyVmlzaWJpbGl0eSIsInNWaWV3SWQiLCJzYXAiLCJ1aSIsImdldENvcmUiLCJnZXRNZXNzYWdlTWFuYWdlciIsImdldE1lc3NhZ2VNb2RlbCIsImdldERhdGEiLCJvTWVzc2FnZSIsInZhbGlkYXRpb24iLCJ0eXBlIiwidGFyZ2V0IiwiaW5kZXhPZiIsIm9SZXQiLCJyb290Vmlld0NvbnRyb2xsZXIiLCJnZXRSb290Vmlld0NvbnRyb2xsZXIiLCJjdXJyZW50UGFnZVZpZXciLCJpc0ZjbEVuYWJsZWQiLCJnZXRSaWdodG1vc3RWaWV3IiwiZ2V0Um9vdENvbnRhaW5lciIsImdldEN1cnJlbnRQYWdlIiwib01lc3NhZ2VCdXR0b24iLCJnZXRMZW5ndGgiLCJzZXRWaXNpYmxlIiwib3BlbkJ5IiwiX2VkaXREb2N1bWVudCIsIkJ1c3lMb2NrZXIiLCJsb2NrIiwiZWRpdERvY3VtZW50IiwiZmluYWxseSIsInVubG9jayIsIl9zYXZlRG9jdW1lbnQiLCJhV2FpdENyZWF0ZURvY3VtZW50cyIsImJFeGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yIiwiY3JlYXRpb25Nb2RlIiwiY3JlYXRpb25Sb3ciLCJjcmVhdGVBdEVuZCIsImJDcmVhdGVEb2N1bWVudCIsImJTa2lwU2lkZUVmZmVjdHMiLCJjcmVhdGVEb2N1bWVudCIsIlByb21pc2UiLCJhbGwiLCJhQmluZGluZ3MiLCJiaW5kaW5ncyIsInNhdmVEb2N1bWVudCIsImlzTG9ja2VkIiwiX21hbmFnZUNvbGxhYm9yYXRpb24iLCJvcGVuTWFuYWdlRGlhbG9nIiwiX3Nob3dDb2xsYWJvcmF0aW9uVXNlckRldGFpbHMiLCJldmVudCIsInNob3dVc2VyRGV0YWlscyIsIl9jYW5jZWxEb2N1bWVudCIsImNhbmNlbEJ1dHRvbiIsImNhbmNlbERvY3VtZW50IiwiX2FwcGx5RG9jdW1lbnQiLCJhcHBseURvY3VtZW50IiwicmVzb2x2ZVN0cmluZ3RvQm9vbGVhbiIsInVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyIsIl9maW5kVGFibGVJblN1YlNlY3Rpb24iLCJhUGFyZW50RWxlbWVudCIsImFTdWJzZWN0aW9uIiwiYVN1YlNlY3Rpb25UYWJsZXMiLCJlbGVtZW50IiwiZ2V0TWFpbkNvbnRlbnQiLCJncmlkVGFibGUiLCJoYXNTdHlsZUNsYXNzIiwiYWRkU3R5bGVDbGFzcyIsInRhYmxlIiwic2V0Um93Q291bnQiLCJfZ2V0QWxsU3ViU2VjdGlvbnMiLCJfZ2V0QWxsQmxvY2tzIiwiZ2V0TW9yZUJsb2NrcyIsIm9CbG9jayIsIm9Db250ZW50Iiwic2V0U2hvd1NpZGVDb250ZW50Iiwib0NoYXJ0Q29udGV4dCIsInNDaGFydFBhdGgiLCJvQ29udGV4dERhdGEiLCJvQ2hhcnRDb250ZXh0RGF0YSIsIl9zY3JvbGxUYWJsZXNUb1JvdyIsInNSb3dQYXRoIiwiVGFibGVTY3JvbGxlciIsInNjcm9sbFRhYmxlVG9Sb3ciLCJfbWVyZ2VNdWx0aXBsZUNvbnRleHRzIiwib1BhZ2VDb250ZXh0IiwiYUxpbmVDb250ZXh0IiwiYUF0dHJpYnV0ZXMiLCJhUGFnZUF0dHJpYnV0ZXMiLCJzTWV0YVBhdGhMaW5lIiwic1BhdGhMaW5lIiwic1BhZ2VQYXRoIiwib01ldGFNb2RlbCIsInNNZXRhUGF0aFBhZ2UiLCJvU2luZ2xlQ29udGV4dCIsIm9TdWJDaGFydENvbnRleHREYXRhIiwiY29udGV4dERhdGEiLCJyZW1vdmVTZW5zaXRpdmVEYXRhIiwib1BhZ2VMZXZlbFNWIiwiYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQiLCJTZWxlY3Rpb25WYXJpYW50Iiwic2VsZWN0aW9uVmFyaWFudCIsImF0dHJpYnV0ZXMiLCJvQ29uZmlndXJhdGlvbnMiLCJjb250cm9sQ29uZmlndXJhdGlvbiIsImFDb25maWd1cmF0aW9ucyIsIm9Db25maWd1cmF0aW9uIiwicmVxdWVzdEdyb3VwSWQiLCJfc2V0QnJlYWRjcnVtYkxpbmtzIiwiYVByb21pc2VzIiwiYVNraXBQYXJhbWV0ZXJpemVkIiwic05ld1BhdGgiLCJhUGF0aFBhcnRzIiwic3BsaXQiLCJzUGF0aCIsInNoaWZ0Iiwic3BsaWNlIiwic1BhdGhQYXJ0Iiwib1Jvb3RWaWV3Q29udHJvbGxlciIsInNQYXJhbWV0ZXJQYXRoIiwiYlJlc3VsdENvbnRleHQiLCJnZXRUaXRsZUluZm9Gcm9tUGF0aCIsInRpdGxlSGllcmFyY2h5SW5mb3MiLCJpZHgiLCJoaWVyYXJjaHlQb3NpdGlvbiIsIm9MaW5rIiwidGl0bGVIaWVyYXJjaHlJbmZvIiwiZ2V0TGlua3MiLCJMaW5rIiwic2V0VGV4dCIsInNldEhyZWYiLCJlbmNvZGVVUkkiLCJhZGRMaW5rIiwib0RhdGFQb2ludHMiLCJnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJnZXRSb3V0aW5nU2VydmljZSIsImdldE91dGJvdW5kcyIsIm9TaGVsbFNlcnZpY2VzIiwicmVxdWVzdE9iamVjdCIsImZuR2V0TGlua3MiLCJmbk9uRXJyb3IiLCJmblNldExpbmtFbmFibGVtZW50IiwiaWQiLCJhU3VwcG9ydGVkTGlua3MiLCJzTGlua0lkIiwic3VwcG9ydGVkIiwib1N1YkRhdGFQb2ludHMiLCJvUGFnZURhdGEiLCJvRGF0YVBvaW50Iiwib0xpbmtDb250ZXh0Iiwib0xpbmtEYXRhIiwib01peGVkQ29udGV4dCIsIm1lcmdlIiwib01hcHBpbmciLCJzTWFpblByb3BlcnR5Iiwic01hcHBlZFByb3BlcnR5IiwiaGFzT3duUHJvcGVydHkiLCJvTmV3TWFwcGluZyIsImlzTmF2aWdhdGlvblN1cHBvcnRlZCIsInBhcmFtcyIsImFMaW5rcyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiT2JqZWN0UGFnZUNvbnRyb2xsZXIuY29udHJvbGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgbWVyZ2UgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCBBY3Rpb25SdW50aW1lIGZyb20gXCJzYXAvZmUvY29yZS9BY3Rpb25SdW50aW1lXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgQnVzeUxvY2tlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvQnVzeUxvY2tlclwiO1xuaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9jb2xsYWJvcmF0aW9uL0FjdGl2aXR5U3luY1wiO1xuaW1wb3J0IHsgb3Blbk1hbmFnZURpYWxvZywgc2hvd1VzZXJEZXRhaWxzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NvbGxhYm9yYXRpb24vTWFuYWdlXCI7XG5pbXBvcnQgRWRpdEZsb3cgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0VkaXRGbG93XCI7XG5pbXBvcnQgZHJhZnQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2VkaXRGbG93L2RyYWZ0XCI7XG5pbXBvcnQgSW50ZW50QmFzZWROYXZpZ2F0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBJbnRlcm5hbEVkaXRGbG93IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbEVkaXRGbG93XCI7XG5pbXBvcnQgSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxSb3V0aW5nIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbFJvdXRpbmdcIjtcbmltcG9ydCBNYXNzRWRpdCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvTWFzc0VkaXRcIjtcbmltcG9ydCBNZXNzYWdlSGFuZGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCBQYWdlUmVhZHkgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BhZ2VSZWFkeVwiO1xuaW1wb3J0IFBhZ2luYXRvciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvUGFnaW5hdG9yXCI7XG5pbXBvcnQgUGxhY2Vob2xkZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BsYWNlaG9sZGVyXCI7XG5pbXBvcnQgU2hhcmUgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1NoYXJlXCI7XG5pbXBvcnQgVmlld1N0YXRlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9WaWV3U3RhdGVcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCBleHRlbnNpYmxlLCBmaW5hbEV4dGVuc2lvbiwgcHVibGljRXh0ZW5zaW9uLCB1c2luZ0V4dGVuc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBDaGFydFJ1bnRpbWUgZnJvbSBcInNhcC9mZS9tYWNyb3MvY2hhcnQvQ2hhcnRSdW50aW1lXCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IERlbGVnYXRlVXRpbCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9EZWxlZ2F0ZVV0aWxcIjtcbmltcG9ydCBUYWJsZVV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1V0aWxzXCI7XG5pbXBvcnQgU2VsZWN0aW9uVmFyaWFudCBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vU2VsZWN0aW9uVmFyaWFudFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE9iamVjdFBhZ2VFeHRlbnNpb25BUEkgfSBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL0V4dGVuc2lvbkFQSVwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBFeHRlbnNpb25BUEkgfSBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL0V4dGVuc2lvbkFQSVwiO1xuaW1wb3J0IHR5cGUgUm9vdENvbnRhaW5lckJhc2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL1Jvb3RDb250YWluZXIvY29udHJvbGxlci9Sb290Q29udGFpbmVyQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBFZGl0Rmxvd092ZXJyaWRlcyBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9Sb290Q29udGFpbmVyL292ZXJyaWRlcy9FZGl0Rmxvd1wiO1xuaW1wb3J0IFRhYmxlU2Nyb2xsZXIgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvVGFibGVTY3JvbGxlclwiO1xuaW1wb3J0IEluc3RhbmNlTWFuYWdlciBmcm9tIFwic2FwL20vSW5zdGFuY2VNYW5hZ2VyXCI7XG5pbXBvcnQgTGluayBmcm9tIFwic2FwL20vTGlua1wiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCB0eXBlIFBvcG92ZXIgZnJvbSBcInNhcC9tL1BvcG92ZXJcIjtcbmltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgT3ZlcnJpZGVFeGVjdXRpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9PdmVycmlkZUV4ZWN1dGlvblwiO1xuaW1wb3J0IHR5cGUgQmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL0JpbmRpbmdcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL3Jlc291cmNlL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCB0eXBlIEJyZWFkQ3J1bWJzIGZyb20gXCJzYXAvdXhhcC9CcmVhZENydW1ic1wiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZSBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZVwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUxheW91dCBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUxheW91dFwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZVNlY3Rpb24gZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VTZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlU3ViU2VjdGlvbiBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZVN1YlNlY3Rpb25cIjtcbmltcG9ydCBJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxSb3V0aW5nT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL0ludGVybmFsUm91dGluZ1wiO1xuaW1wb3J0IE1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgUGFnaW5hdG9yT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL1BhZ2luYXRvclwiO1xuaW1wb3J0IFNoYXJlT3ZlcnJpZGVzIGZyb20gXCIuL292ZXJyaWRlcy9TaGFyZVwiO1xuaW1wb3J0IFZpZXdTdGF0ZU92ZXJyaWRlcyBmcm9tIFwiLi9vdmVycmlkZXMvVmlld1N0YXRlXCI7XG5cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5PYmplY3RQYWdlQ29udHJvbGxlclwiKVxuY2xhc3MgT2JqZWN0UGFnZUNvbnRyb2xsZXIgZXh0ZW5kcyBQYWdlQ29udHJvbGxlciB7XG5cdG9WaWV3ITogYW55O1xuXHRAdXNpbmdFeHRlbnNpb24oUGxhY2Vob2xkZXIpXG5cdHBsYWNlaG9sZGVyITogUGxhY2Vob2xkZXI7XG5cdEB1c2luZ0V4dGVuc2lvbihFZGl0Rmxvdylcblx0ZWRpdEZsb3chOiBFZGl0Rmxvdztcblx0QHVzaW5nRXh0ZW5zaW9uKFNoYXJlLm92ZXJyaWRlKFNoYXJlT3ZlcnJpZGVzKSlcblx0c2hhcmUhOiBTaGFyZTtcblx0QHVzaW5nRXh0ZW5zaW9uKEludGVybmFsRWRpdEZsb3cub3ZlcnJpZGUoRWRpdEZsb3dPdmVycmlkZXMpKVxuXHRfZWRpdEZsb3chOiBJbnRlcm5hbEVkaXRGbG93O1xuXHRAdXNpbmdFeHRlbnNpb24oSW50ZXJuYWxSb3V0aW5nLm92ZXJyaWRlKEludGVybmFsUm91dGluZ092ZXJyaWRlKSlcblx0X3JvdXRpbmchOiBJbnRlcm5hbFJvdXRpbmc7XG5cdEB1c2luZ0V4dGVuc2lvbihQYWdpbmF0b3Iub3ZlcnJpZGUoUGFnaW5hdG9yT3ZlcnJpZGUpKVxuXHRwYWdpbmF0b3IhOiBQYWdpbmF0b3I7XG5cdEB1c2luZ0V4dGVuc2lvbihNZXNzYWdlSGFuZGxlci5vdmVycmlkZShNZXNzYWdlSGFuZGxlck92ZXJyaWRlKSlcblx0bWVzc2FnZUhhbmRsZXIhOiBNZXNzYWdlSGFuZGxlcjtcblx0QHVzaW5nRXh0ZW5zaW9uKEludGVudEJhc2VkTmF2aWdhdGlvbi5vdmVycmlkZShJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSkpXG5cdGludGVudEJhc2VkTmF2aWdhdGlvbiE6IEludGVudEJhc2VkTmF2aWdhdGlvbjtcblx0QHVzaW5nRXh0ZW5zaW9uKFxuXHRcdEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uLm92ZXJyaWRlKHtcblx0XHRcdGdldE5hdmlnYXRpb25Nb2RlOiBmdW5jdGlvbiAodGhpczogSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdFx0Y29uc3QgYklzU3RpY2t5RWRpdE1vZGUgPVxuXHRcdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgT2JqZWN0UGFnZUNvbnRyb2xsZXIpLmdldFN0aWNreUVkaXRNb2RlICYmXG5cdFx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBPYmplY3RQYWdlQ29udHJvbGxlcikuZ2V0U3RpY2t5RWRpdE1vZGUoKTtcblx0XHRcdFx0cmV0dXJuIGJJc1N0aWNreUVkaXRNb2RlID8gXCJleHBsYWNlXCIgOiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fSlcblx0KVxuXHRfaW50ZW50QmFzZWROYXZpZ2F0aW9uITogSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cdEB1c2luZ0V4dGVuc2lvbihWaWV3U3RhdGUub3ZlcnJpZGUoVmlld1N0YXRlT3ZlcnJpZGVzKSlcblx0dmlld1N0YXRlITogVmlld1N0YXRlO1xuXHRAdXNpbmdFeHRlbnNpb24oXG5cdFx0UGFnZVJlYWR5Lm92ZXJyaWRlKHtcblx0XHRcdGlzQ29udGV4dEV4cGVjdGVkOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pXG5cdClcblx0cGFnZVJlYWR5ITogUGFnZVJlYWR5O1xuXHRAdXNpbmdFeHRlbnNpb24oTWFzc0VkaXQpXG5cdG1hc3NFZGl0ITogTWFzc0VkaXQ7XG5cdHByaXZhdGUgbUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzPzogUmVjb3JkPHN0cmluZywgT2JqZWN0UGFnZUV4dGVuc2lvbkFQST47XG5cdHByb3RlY3RlZCBleHRlbnNpb25BUEk/OiBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJO1xuXHRwcml2YXRlIG9SZXNvdXJjZUJ1bmRsZT86IFJlc291cmNlQnVuZGxlO1xuXHRwcml2YXRlIGJTZWN0aW9uTmF2aWdhdGVkPzogYm9vbGVhbjtcblx0cHJpdmF0ZSBzd2l0Y2hEcmFmdEFuZEFjdGl2ZVBvcE92ZXI/OiBQb3BvdmVyO1xuXHRwcml2YXRlIGN1cnJlbnRCaW5kaW5nPzogQmluZGluZztcblx0cHJpdmF0ZSBtZXNzYWdlQnV0dG9uOiBhbnk7XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGdldEV4dGVuc2lvbkFQSShzSWQ/OiBzdHJpbmcpOiBFeHRlbnNpb25BUEkge1xuXHRcdGlmIChzSWQpIHtcblx0XHRcdC8vIHRvIGFsbG93IGxvY2FsIElEIHVzYWdlIGZvciBjdXN0b20gcGFnZXMgd2UnbGwgY3JlYXRlL3JldHVybiBvd24gaW5zdGFuY2VzIGZvciBjdXN0b20gc2VjdGlvbnNcblx0XHRcdHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzID0gdGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXMgfHwge307XG5cblx0XHRcdGlmICghdGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXSkge1xuXHRcdFx0XHR0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdID0gbmV3IEV4dGVuc2lvbkFQSSh0aGlzLCBzSWQpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICghdGhpcy5leHRlbnNpb25BUEkpIHtcblx0XHRcdFx0dGhpcy5leHRlbnNpb25BUEkgPSBuZXcgRXh0ZW5zaW9uQVBJKHRoaXMpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMuZXh0ZW5zaW9uQVBJO1xuXHRcdH1cblx0fVxuXG5cdG9uSW5pdCgpIHtcblx0XHRzdXBlci5vbkluaXQoKTtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cblx0XHQvLyBTZXR0aW5nIGRlZmF1bHRzIG9mIGludGVybmFsIG1vZGVsIGNvbnRleHRcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJleHRlcm5hbE5hdmlnYXRpb25Db250ZXh0XCIsIHsgXCJwYWdlXCI6IHRydWUgfSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcInJlbGF0ZWRBcHBzXCIsIHtcblx0XHRcdHZpc2liaWxpdHk6IGZhbHNlLFxuXHRcdFx0aXRlbXM6IG51bGxcblx0XHR9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiYmF0Y2hHcm91cHNcIiwgdGhpcy5fZ2V0QmF0Y2hHcm91cHNGb3JWaWV3KCkpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJlcnJvck5hdmlnYXRpb25TZWN0aW9uRmxhZ1wiLCBmYWxzZSk7XG5cdFx0aWYgKCEodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLnVzZU5ld0xhenlMb2FkaW5nICYmIChvT2JqZWN0UGFnZSBhcyBhbnkpLmdldEVuYWJsZUxhenlMb2FkaW5nKCkpIHtcblx0XHRcdC8vQXR0YWNoaW5nIHRoZSBldmVudCB0byBtYWtlIHRoZSBzdWJzZWN0aW9uIGNvbnRleHQgYmluZGluZyBhY3RpdmUgd2hlbiBpdCBpcyB2aXNpYmxlLlxuXHRcdFx0b09iamVjdFBhZ2UuYXR0YWNoRXZlbnQoXCJzdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0XCIsIHRoaXMuX2hhbmRsZVN1YlNlY3Rpb25FbnRlcmVkVmlld1BvcnQuYmluZCh0aGlzKSk7XG5cdFx0fVxuXHRcdHRoaXMubWVzc2FnZUJ1dHRvbiA9IHRoaXMuZ2V0VmlldygpLmJ5SWQoXCJmZTo6Rm9vdGVyQmFyOjpNZXNzYWdlQnV0dG9uXCIpO1xuXHRcdHRoaXMubWVzc2FnZUJ1dHRvbi5vSXRlbUJpbmRpbmcuYXR0YWNoQ2hhbmdlKHRoaXMuX2ZuU2hvd09QTWVzc2FnZSwgdGhpcyk7XG5cdH1cblxuXHRvbkV4aXQoKSB7XG5cdFx0aWYgKHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHNJZCBvZiBPYmplY3Qua2V5cyh0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcykpIHtcblx0XHRcdFx0aWYgKHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF0pIHtcblx0XHRcdFx0XHR0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdLmRlc3Ryb3koKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZGVsZXRlIHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzO1xuXHRcdH1cblx0XHRpZiAodGhpcy5leHRlbnNpb25BUEkpIHtcblx0XHRcdHRoaXMuZXh0ZW5zaW9uQVBJLmRlc3Ryb3koKTtcblx0XHR9XG5cdFx0ZGVsZXRlIHRoaXMuZXh0ZW5zaW9uQVBJO1xuXG5cdFx0Y29uc3Qgb01lc3NhZ2VQb3BvdmVyID0gdGhpcy5tZXNzYWdlQnV0dG9uID8gdGhpcy5tZXNzYWdlQnV0dG9uLm9NZXNzYWdlUG9wb3ZlciA6IG51bGw7XG5cdFx0aWYgKG9NZXNzYWdlUG9wb3ZlciAmJiBvTWVzc2FnZVBvcG92ZXIuaXNPcGVuKCkpIHtcblx0XHRcdG9NZXNzYWdlUG9wb3Zlci5jbG9zZSgpO1xuXHRcdH1cblx0XHQvL3doZW4gZXhpdGluZyB3ZSBzZXQga2VlcEFsaXZlIGNvbnRleHQgdG8gZmFsc2Vcblx0XHRjb25zdCBvQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dDtcblx0XHRpZiAob0NvbnRleHQgJiYgb0NvbnRleHQuaXNLZWVwQWxpdmUoKSkge1xuXHRcdFx0b0NvbnRleHQuc2V0S2VlcEFsaXZlKGZhbHNlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHNob3cgdGhlIG1lc3NhZ2Ugc3RyaXAgb24gdGhlIG9iamVjdCBwYWdlLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2ZuU2hvd09QTWVzc2FnZSgpIHtcblx0XHRjb25zdCBleHRlbnNpb25BUEkgPSB0aGlzLmdldEV4dGVuc2lvbkFQSSgpO1xuXHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRjb25zdCBtZXNzYWdlcyA9IHRoaXMubWVzc2FnZUJ1dHRvbi5vTWVzc2FnZVBvcG92ZXJcblx0XHRcdC5nZXRJdGVtcygpXG5cdFx0XHQubWFwKChpdGVtOiBhbnkpID0+IGl0ZW0uZ2V0QmluZGluZ0NvbnRleHQoXCJtZXNzYWdlXCIpLmdldE9iamVjdCgpKVxuXHRcdFx0LmZpbHRlcigobWVzc2FnZTogTWVzc2FnZSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbWVzc2FnZS5nZXRUYXJnZXRzKClbMF0gPT09IHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpO1xuXHRcdFx0fSk7XG5cblx0XHRpZiAoZXh0ZW5zaW9uQVBJKSB7XG5cdFx0XHRleHRlbnNpb25BUEkuc2hvd01lc3NhZ2VzKG1lc3NhZ2VzKTtcblx0XHR9XG5cdH1cblxuXHRfZ2V0VGFibGVCaW5kaW5nKG9UYWJsZTogYW55KSB7XG5cdFx0cmV0dXJuIG9UYWJsZSAmJiBvVGFibGUuZ2V0Um93QmluZGluZygpO1xuXHR9XG5cblx0b25CZWZvcmVSZW5kZXJpbmcoKSB7XG5cdFx0UGFnZUNvbnRyb2xsZXIucHJvdG90eXBlLm9uQmVmb3JlUmVuZGVyaW5nLmFwcGx5KHRoaXMpO1xuXHRcdC8vIEluIHRoZSByZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IHNjZW5hcmlvIHdlIG5lZWQgdG8gZW5zdXJlIGluIGNhc2Ugb2YgcmVsb2FkL3JlZnJlc2ggdGhhdCB0aGUgbWV0YSBtb2RlbCBpbiB0aGUgbWV0aG9kZSByZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IG9mIHRoZSBGaWVsZFJ1bnRpbWUgaXMgYXZhaWxhYmxlXG5cdFx0aWYgKHRoaXMub1ZpZXcub1ZpZXdEYXRhPy5yZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0ICYmIENvbW1vbkhlbHBlci5nZXRNZXRhTW9kZWwoKSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRDb21tb25IZWxwZXIuc2V0TWV0YU1vZGVsKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdH1cblx0fVxuXG5cdG9uQWZ0ZXJSZW5kZXJpbmcoKSB7XG5cdFx0KCh0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInNhcC5mZS5pMThuXCIpIGFzIFJlc291cmNlTW9kZWwpLmdldFJlc291cmNlQnVuZGxlKCkgYXMgUHJvbWlzZTxSZXNvdXJjZUJ1bmRsZT4pXG5cdFx0XHQudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xuXHRcdFx0XHR0aGlzLm9SZXNvdXJjZUJ1bmRsZSA9IHJlc3BvbnNlO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmV0cmlldmluZyB0aGUgcmVzb3VyY2UgYnVuZGxlXCIsIG9FcnJvcik7XG5cdFx0XHR9KTtcblx0fVxuXG5cdF9vbkJlZm9yZUJpbmRpbmcob0NvbnRleHQ6IGFueSwgbVBhcmFtZXRlcnM6IGFueSkge1xuXHRcdC8vIFRPRE86IHdlIHNob3VsZCBjaGVjayBob3cgdGhpcyBjb21lcyB0b2dldGhlciB3aXRoIHRoZSB0cmFuc2FjdGlvbiBoZWxwZXIsIHNhbWUgdG8gdGhlIGNoYW5nZSBpbiB0aGUgYWZ0ZXJCaW5kaW5nXG5cdFx0Y29uc3QgYVRhYmxlcyA9IHRoaXMuX2ZpbmRUYWJsZXMoKSxcblx0XHRcdG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKSxcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRvSW50ZXJuYWxNb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsLFxuXHRcdFx0YUJhdGNoR3JvdXBzID0gb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiYmF0Y2hHcm91cHNcIiksXG5cdFx0XHRpVmlld0xldmVsID0gKHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55KS52aWV3TGV2ZWw7XG5cdFx0bGV0IG9GYXN0Q3JlYXRpb25Sb3c7XG5cdFx0YUJhdGNoR3JvdXBzLnB1c2goXCIkYXV0b1wiKTtcblx0XHRpZiAobVBhcmFtZXRlcnMuYkRyYWZ0TmF2aWdhdGlvbiAhPT0gdHJ1ZSkge1xuXHRcdFx0dGhpcy5fY2xvc2VTaWRlQ29udGVudCgpO1xuXHRcdH1cblx0XHRjb25zdCBvcENvbnRleHQgPSBvT2JqZWN0UGFnZS5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQ7XG5cdFx0aWYgKFxuXHRcdFx0b3BDb250ZXh0ICYmXG5cdFx0XHRvcENvbnRleHQuaGFzUGVuZGluZ0NoYW5nZXMoKSAmJlxuXHRcdFx0IWFCYXRjaEdyb3Vwcy5zb21lKChvcENvbnRleHQuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5oYXNQZW5kaW5nQ2hhbmdlcy5iaW5kKG9wQ29udGV4dC5nZXRNb2RlbCgpKSlcblx0XHQpIHtcblx0XHRcdC8qIFx0SW4gY2FzZSB0aGVyZSBhcmUgcGVuZGluZyBjaGFuZ2VzIGZvciB0aGUgY3JlYXRpb24gcm93IGFuZCBubyBvdGhlcnMgd2UgbmVlZCB0byByZXNldCB0aGUgY2hhbmdlc1xuICAgIFx0XHRcdFx0XHRcdFRPRE86IHRoaXMgaXMganVzdCBhIHF1aWNrIHNvbHV0aW9uLCB0aGlzIG5lZWRzIHRvIGJlIHJld29ya2VkXG4gICAgXHRcdFx0XHQgXHQqL1xuXG5cdFx0XHRvcENvbnRleHQuZ2V0QmluZGluZygpLnJlc2V0Q2hhbmdlcygpO1xuXHRcdH1cblxuXHRcdC8vIEZvciBub3cgd2UgaGF2ZSB0byBzZXQgdGhlIGJpbmRpbmcgY29udGV4dCB0byBudWxsIGZvciBldmVyeSBmYXN0IGNyZWF0aW9uIHJvd1xuXHRcdC8vIFRPRE86IEdldCByaWQgb2YgdGhpcyBjb2Rpbmcgb3IgbW92ZSBpdCB0byBhbm90aGVyIGxheWVyIC0gdG8gYmUgZGlzY3Vzc2VkIHdpdGggTURDIGFuZCBtb2RlbFxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYVRhYmxlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0b0Zhc3RDcmVhdGlvblJvdyA9IGFUYWJsZXNbaV0uZ2V0Q3JlYXRpb25Sb3coKTtcblx0XHRcdGlmIChvRmFzdENyZWF0aW9uUm93KSB7XG5cdFx0XHRcdG9GYXN0Q3JlYXRpb25Sb3cuc2V0QmluZGluZ0NvbnRleHQobnVsbCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU2Nyb2xsIHRvIHByZXNlbnQgU2VjdGlvbiBzbyB0aGF0IGJpbmRpbmdzIGFyZSBlbmFibGVkIGR1cmluZyBuYXZpZ2F0aW9uIHRocm91Z2ggcGFnaW5hdG9yIGJ1dHRvbnMsIGFzIHRoZXJlIGlzIG5vIHZpZXcgcmVyZW5kZXJpbmcvcmViaW5kXG5cdFx0Y29uc3QgZm5TY3JvbGxUb1ByZXNlbnRTZWN0aW9uID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0aWYgKCEob09iamVjdFBhZ2UgYXMgYW55KS5pc0ZpcnN0UmVuZGVyaW5nKCkgJiYgIW1QYXJhbWV0ZXJzLmJQZXJzaXN0T1BTY3JvbGwpIHtcblx0XHRcdFx0b09iamVjdFBhZ2Uuc2V0U2VsZWN0ZWRTZWN0aW9uKG51bGwgYXMgYW55KTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdG9PYmplY3RQYWdlLmF0dGFjaEV2ZW50T25jZShcIm1vZGVsQ29udGV4dENoYW5nZVwiLCBmblNjcm9sbFRvUHJlc2VudFNlY3Rpb24pO1xuXG5cdFx0Ly8gaWYgdGhlIHN0cnVjdHVyZSBvZiB0aGUgT2JqZWN0UGFnZUxheW91dCBpcyBjaGFuZ2VkIHRoZW4gc2Nyb2xsIHRvIHByZXNlbnQgU2VjdGlvblxuXHRcdC8vIEZJWE1FIElzIHRoaXMgcmVhbGx5IHdvcmtpbmcgYXMgaW50ZW5kZWQgPyBJbml0aWFsbHkgdGhpcyB3YXMgb25CZWZvcmVSZW5kZXJpbmcsIGJ1dCBuZXZlciB0cmlnZ2VyZWQgb25CZWZvcmVSZW5kZXJpbmcgYmVjYXVzZSBpdCB3YXMgcmVnaXN0ZXJlZCBhZnRlciBpdFxuXHRcdGNvbnN0IG9EZWxlZ2F0ZU9uQmVmb3JlID0ge1xuXHRcdFx0b25BZnRlclJlbmRlcmluZzogZm5TY3JvbGxUb1ByZXNlbnRTZWN0aW9uXG5cdFx0fTtcblx0XHRvT2JqZWN0UGFnZS5hZGRFdmVudERlbGVnYXRlKG9EZWxlZ2F0ZU9uQmVmb3JlLCB0aGlzKTtcblx0XHR0aGlzLnBhZ2VSZWFkeS5hdHRhY2hFdmVudE9uY2UoXCJwYWdlUmVhZHlcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0b09iamVjdFBhZ2UucmVtb3ZlRXZlbnREZWxlZ2F0ZShvRGVsZWdhdGVPbkJlZm9yZSk7XG5cdFx0fSk7XG5cblx0XHQvL1NldCB0aGUgQmluZGluZyBmb3IgUGFnaW5hdG9ycyB1c2luZyBMaXN0QmluZGluZyBJRFxuXHRcdGlmIChpVmlld0xldmVsID4gMSkge1xuXHRcdFx0bGV0IG9CaW5kaW5nID0gbVBhcmFtZXRlcnMgJiYgbVBhcmFtZXRlcnMubGlzdEJpbmRpbmc7XG5cdFx0XHRjb25zdCBvUGFnaW5hdG9yQ3VycmVudENvbnRleHQgPSBvSW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShcIi9wYWdpbmF0b3JDdXJyZW50Q29udGV4dFwiKTtcblx0XHRcdGlmIChvUGFnaW5hdG9yQ3VycmVudENvbnRleHQpIHtcblx0XHRcdFx0Y29uc3Qgb0JpbmRpbmdUb1VzZSA9IG9QYWdpbmF0b3JDdXJyZW50Q29udGV4dC5nZXRCaW5kaW5nKCk7XG5cdFx0XHRcdHRoaXMucGFnaW5hdG9yLmluaXRpYWxpemUob0JpbmRpbmdUb1VzZSwgb1BhZ2luYXRvckN1cnJlbnRDb250ZXh0KTtcblx0XHRcdFx0b0ludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvcGFnaW5hdG9yQ3VycmVudENvbnRleHRcIiwgbnVsbCk7XG5cdFx0XHR9IGVsc2UgaWYgKG9CaW5kaW5nKSB7XG5cdFx0XHRcdGlmIChvQmluZGluZy5pc0EoXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFMaXN0QmluZGluZ1wiKSkge1xuXHRcdFx0XHRcdHRoaXMucGFnaW5hdG9yLmluaXRpYWxpemUob0JpbmRpbmcsIG9Db250ZXh0KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBpZiB0aGUgYmluZGluZyB0eXBlIGlzIG5vdCBPRGF0YUxpc3RCaW5kaW5nIGJlY2F1c2Ugb2YgYSBkZWVwbGluayBuYXZpZ2F0aW9uIG9yIGEgcmVmcmVzaCBvZiB0aGUgcGFnZVxuXHRcdFx0XHRcdC8vIHdlIG5lZWQgdG8gY3JlYXRlIGl0XG5cdFx0XHRcdFx0Y29uc3Qgc0JpbmRpbmdQYXRoID0gb0JpbmRpbmcuZ2V0UGF0aCgpO1xuXHRcdFx0XHRcdGlmICgvXFwoW15cXCldKlxcKSQvLnRlc3Qoc0JpbmRpbmdQYXRoKSkge1xuXHRcdFx0XHRcdFx0Ly8gVGhlIGN1cnJlbnQgYmluZGluZyBwYXRoIGVuZHMgd2l0aCAoeHh4KSwgc28gd2UgY3JlYXRlIHRoZSBsaXN0QmluZGluZyBieSByZW1vdmluZyAoeHh4KVxuXHRcdFx0XHRcdFx0Y29uc3Qgc0xpc3RCaW5kaW5nUGF0aCA9IHNCaW5kaW5nUGF0aC5yZXBsYWNlKC9cXChbXlxcKV0qXFwpJC8sIFwiXCIpO1xuXHRcdFx0XHRcdFx0b0JpbmRpbmcgPSBuZXcgKE9EYXRhTGlzdEJpbmRpbmcgYXMgYW55KShvQmluZGluZy5vTW9kZWwsIHNMaXN0QmluZGluZ1BhdGgpO1xuXHRcdFx0XHRcdFx0Y29uc3QgX3NldExpc3RCaW5kaW5nQXN5bmMgPSAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmIChvQmluZGluZy5nZXRDb250ZXh0cygpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnBhZ2luYXRvci5pbml0aWFsaXplKG9CaW5kaW5nLCBvQ29udGV4dCk7XG5cdFx0XHRcdFx0XHRcdFx0b0JpbmRpbmcuZGV0YWNoRXZlbnQoXCJjaGFuZ2VcIiwgX3NldExpc3RCaW5kaW5nQXN5bmMpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRvQmluZGluZy5nZXRDb250ZXh0cygwKTtcblx0XHRcdFx0XHRcdG9CaW5kaW5nLmF0dGFjaEV2ZW50KFwiY2hhbmdlXCIsIF9zZXRMaXN0QmluZGluZ0FzeW5jKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gVGhlIGN1cnJlbnQgYmluZGluZyBkb2Vzbid0IGVuZCB3aXRoICh4eHgpIC0tPiB0aGUgbGFzdCBzZWdtZW50IGlzIGEgMS0xIG5hdmlnYXRpb24sIHNvIHdlIGRvbid0IGRpc3BsYXkgdGhlIHBhZ2luYXRvclxuXHRcdFx0XHRcdFx0dGhpcy5wYWdpbmF0b3IuaW5pdGlhbGl6ZSh1bmRlZmluZWQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoISh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkudXNlTmV3TGF6eUxvYWRpbmcgJiYgb09iamVjdFBhZ2UuZ2V0RW5hYmxlTGF6eUxvYWRpbmcoKSkge1xuXHRcdFx0Y29uc3QgYVNlY3Rpb25zID0gb09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKTtcblx0XHRcdGNvbnN0IGJVc2VJY29uVGFiQmFyID0gb09iamVjdFBhZ2UuZ2V0VXNlSWNvblRhYkJhcigpO1xuXHRcdFx0bGV0IGlTa2lwID0gMjtcblx0XHRcdGNvbnN0IGJJc0luRWRpdE1vZGUgPSBvT2JqZWN0UGFnZS5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIik7XG5cdFx0XHRjb25zdCBiRWRpdGFibGVIZWFkZXIgPSAodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLmVkaXRhYmxlSGVhZGVyQ29udGVudDtcblx0XHRcdGZvciAobGV0IGlTZWN0aW9uID0gMDsgaVNlY3Rpb24gPCBhU2VjdGlvbnMubGVuZ3RoOyBpU2VjdGlvbisrKSB7XG5cdFx0XHRcdGNvbnN0IG9TZWN0aW9uID0gYVNlY3Rpb25zW2lTZWN0aW9uXTtcblx0XHRcdFx0Y29uc3QgYVN1YlNlY3Rpb25zID0gb1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKTtcblx0XHRcdFx0Zm9yIChsZXQgaVN1YlNlY3Rpb24gPSAwOyBpU3ViU2VjdGlvbiA8IGFTdWJTZWN0aW9ucy5sZW5ndGg7IGlTdWJTZWN0aW9uKyssIGlTa2lwLS0pIHtcblx0XHRcdFx0XHQvLyBJbiBJY29uVGFiQmFyIG1vZGUga2VlcCB0aGUgc2Vjb25kIHNlY3Rpb24gYm91bmQgaWYgdGhlcmUgaXMgYW4gZWRpdGFibGUgaGVhZGVyIGFuZCB3ZSBhcmUgc3dpdGNoaW5nIHRvIGRpc3BsYXkgbW9kZVxuXHRcdFx0XHRcdGlmIChpU2tpcCA8IDEgfHwgKGJVc2VJY29uVGFiQmFyICYmIChpU2VjdGlvbiA+IDEgfHwgKGlTZWN0aW9uID09PSAxICYmICFiRWRpdGFibGVIZWFkZXIgJiYgIWJJc0luRWRpdE1vZGUpKSkpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG9TdWJTZWN0aW9uID0gYVN1YlNlY3Rpb25zW2lTdWJTZWN0aW9uXTtcblx0XHRcdFx0XHRcdGlmIChvU3ViU2VjdGlvbi5kYXRhKCkuaXNWaXNpYmlsaXR5RHluYW1pYyAhPT0gXCJ0cnVlXCIpIHtcblx0XHRcdFx0XHRcdFx0b1N1YlNlY3Rpb24uc2V0QmluZGluZ0NvbnRleHQobnVsbCBhcyBhbnkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICh0aGlzLnBsYWNlaG9sZGVyLmlzUGxhY2Vob2xkZXJFbmFibGVkKCkgJiYgbVBhcmFtZXRlcnMuc2hvd1BsYWNlaG9sZGVyKSB7XG5cdFx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdFx0Y29uc3Qgb05hdkNvbnRhaW5lciA9IChvVmlldy5nZXRQYXJlbnQoKSBhcyBhbnkpLm9Db250YWluZXIuZ2V0UGFyZW50KCk7XG5cdFx0XHRpZiAob05hdkNvbnRhaW5lcikge1xuXHRcdFx0XHRvTmF2Q29udGFpbmVyLnNob3dQbGFjZWhvbGRlcih7fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X2dldEZpcnN0Q2xpY2thYmxlRWxlbWVudChvT2JqZWN0UGFnZTogYW55KSB7XG5cdFx0bGV0IG9GaXJzdENsaWNrYWJsZUVsZW1lbnQ7XG5cdFx0Y29uc3QgYUFjdGlvbnMgPSBvT2JqZWN0UGFnZS5nZXRIZWFkZXJUaXRsZSgpICYmIG9PYmplY3RQYWdlLmdldEhlYWRlclRpdGxlKCkuZ2V0QWN0aW9ucygpO1xuXHRcdGlmIChhQWN0aW9ucyAmJiBhQWN0aW9ucy5sZW5ndGgpIHtcblx0XHRcdG9GaXJzdENsaWNrYWJsZUVsZW1lbnQgPSBhQWN0aW9ucy5maW5kKGZ1bmN0aW9uIChvQWN0aW9uOiBhbnkpIHtcblx0XHRcdFx0Ly8gRHVlIHRvIHRoZSBsZWZ0IGFsaWdubWVudCBvZiB0aGUgRHJhZnQgc3dpdGNoIGFuZCB0aGUgY29sbGFib3JhdGl2ZSBkcmFmdCBhdmF0YXIgY29udHJvbHNcblx0XHRcdFx0Ly8gdGhlcmUgaXMgYSBUb29sYmFyU3BhY2VyIGluIHRoZSBhY3Rpb25zIGFnZ3JlZ2F0aW9uIHdoaWNoIHdlIG5lZWQgdG8gZXhjbHVkZSBoZXJlIVxuXHRcdFx0XHQvLyBEdWUgdG8gdGhlIEFDQyByZXBvcnQsIHdlIGFsc28gbmVlZCBub3QgdG8gY2hlY2sgZm9yIHRoZSBJbnZpc2libGVUZXh0IGVsZW1lbnRzXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0IW9BY3Rpb24uaXNBKFwic2FwLnVpLmNvcmUuSW52aXNpYmxlVGV4dFwiKSAmJlxuXHRcdFx0XHRcdCFvQWN0aW9uLmlzQShcInNhcC5tLlRvb2xiYXJTcGFjZXJcIikgJiZcblx0XHRcdFx0XHRvQWN0aW9uLmdldFZpc2libGUoKSAmJlxuXHRcdFx0XHRcdG9BY3Rpb24uZ2V0RW5hYmxlZCgpXG5cdFx0XHRcdCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIG9GaXJzdENsaWNrYWJsZUVsZW1lbnQ7XG5cdH1cblxuXHRfZ2V0Rmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkRnJvbVN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zOiBhbnkpIHtcblx0XHRpZiAoYVN1YlNlY3Rpb25zKSB7XG5cdFx0XHRmb3IgKGxldCBzdWJTZWN0aW9uID0gMDsgc3ViU2VjdGlvbiA8IGFTdWJTZWN0aW9ucy5sZW5ndGg7IHN1YlNlY3Rpb24rKykge1xuXHRcdFx0XHRjb25zdCBhQmxvY2tzID0gYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLmdldEJsb2NrcygpO1xuXG5cdFx0XHRcdGlmIChhQmxvY2tzKSB7XG5cdFx0XHRcdFx0Zm9yIChsZXQgYmxvY2sgPSAwOyBibG9jayA8IGFCbG9ja3MubGVuZ3RoOyBibG9jaysrKSB7XG5cdFx0XHRcdFx0XHRsZXQgYUZvcm1Db250YWluZXJzO1xuXG5cdFx0XHRcdFx0XHRpZiAoYUJsb2Nrc1tibG9ja10uaXNBKFwic2FwLnVpLmxheW91dC5mb3JtLkZvcm1cIikpIHtcblx0XHRcdFx0XHRcdFx0YUZvcm1Db250YWluZXJzID0gYUJsb2Nrc1tibG9ja10uZ2V0Rm9ybUNvbnRhaW5lcnMoKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdFx0XHRcdGFCbG9ja3NbYmxvY2tdLmdldENvbnRlbnQgJiZcblx0XHRcdFx0XHRcdFx0YUJsb2Nrc1tibG9ja10uZ2V0Q29udGVudCgpICYmXG5cdFx0XHRcdFx0XHRcdGFCbG9ja3NbYmxvY2tdLmdldENvbnRlbnQoKS5pc0EoXCJzYXAudWkubGF5b3V0LmZvcm0uRm9ybVwiKVxuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdGFGb3JtQ29udGFpbmVycyA9IGFCbG9ja3NbYmxvY2tdLmdldENvbnRlbnQoKS5nZXRGb3JtQ29udGFpbmVycygpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAoYUZvcm1Db250YWluZXJzKSB7XG5cdFx0XHRcdFx0XHRcdGZvciAobGV0IGZvcm1Db250YWluZXIgPSAwOyBmb3JtQ29udGFpbmVyIDwgYUZvcm1Db250YWluZXJzLmxlbmd0aDsgZm9ybUNvbnRhaW5lcisrKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgYUZvcm1FbGVtZW50cyA9IGFGb3JtQ29udGFpbmVyc1tmb3JtQ29udGFpbmVyXS5nZXRGb3JtRWxlbWVudHMoKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoYUZvcm1FbGVtZW50cykge1xuXHRcdFx0XHRcdFx0XHRcdFx0Zm9yIChsZXQgZm9ybUVsZW1lbnQgPSAwOyBmb3JtRWxlbWVudCA8IGFGb3JtRWxlbWVudHMubGVuZ3RoOyBmb3JtRWxlbWVudCsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGFGaWVsZHMgPSBhRm9ybUVsZW1lbnRzW2Zvcm1FbGVtZW50XS5nZXRGaWVsZHMoKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBUaGUgZmlyc3QgZmllbGQgaXMgbm90IG5lY2Vzc2FyaWx5IGFuIElucHV0QmFzZSAoZS5nLiBjb3VsZCBiZSBhIFRleHQpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFNvIHdlIG5lZWQgdG8gY2hlY2sgd2hldGhlciBpdCBoYXMgYSBnZXRSZXF1aXJlZCBtZXRob2Rcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoYUZpZWxkc1swXS5nZXRSZXF1aXJlZCAmJiBhRmllbGRzWzBdLmdldFJlcXVpcmVkKCkgJiYgIWFGaWVsZHNbMF0uZ2V0VmFsdWUoKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGFGaWVsZHNbMF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdExvZy5kZWJ1ZyhgRXJyb3Igd2hlbiBzZWFyY2hpbmcgZm9yIG1hbmRhb3RyeSBlbXB0eSBmaWVsZDogJHtlcnJvcn1gKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0X3VwZGF0ZUZvY3VzSW5FZGl0TW9kZShhU3ViU2VjdGlvbnM6IGFueSkge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblxuXHRcdGNvbnN0IG9NYW5kYXRvcnlGaWVsZCA9IHRoaXMuX2dldEZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZEZyb21TdWJTZWN0aW9uKGFTdWJTZWN0aW9ucyk7XG5cdFx0bGV0IG9GaWVsZFRvRm9jdXM6IGFueTtcblx0XHRpZiAob01hbmRhdG9yeUZpZWxkKSB7XG5cdFx0XHRvRmllbGRUb0ZvY3VzID0gb01hbmRhdG9yeUZpZWxkLmNvbnRlbnQuZ2V0Q29udGVudEVkaXQoKVswXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b0ZpZWxkVG9Gb2N1cyA9IChvT2JqZWN0UGFnZSBhcyBhbnkpLl9nZXRGaXJzdEVkaXRhYmxlSW5wdXQoKSB8fCB0aGlzLl9nZXRGaXJzdENsaWNrYWJsZUVsZW1lbnQob09iamVjdFBhZ2UpO1xuXHRcdH1cblxuXHRcdGlmIChvRmllbGRUb0ZvY3VzKSB7XG5cdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0Ly8gV2Ugc2V0IHRoZSBmb2N1cyBpbiBhIHRpbWVlb3V0LCBvdGhlcndpc2UgdGhlIGZvY3VzIHNvbWV0aW1lcyBnb2VzIHRvIHRoZSBUYWJCYXJcblx0XHRcdFx0b0ZpZWxkVG9Gb2N1cy5mb2N1cygpO1xuXHRcdFx0fSwgMCk7XG5cdFx0fVxuXHR9XG5cblx0X2hhbmRsZVN1YlNlY3Rpb25FbnRlcmVkVmlld1BvcnQob0V2ZW50OiBhbnkpIHtcblx0XHRjb25zdCBvU3ViU2VjdGlvbiA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJzdWJTZWN0aW9uXCIpO1xuXHRcdG9TdWJTZWN0aW9uLnNldEJpbmRpbmdDb250ZXh0KHVuZGVmaW5lZCk7XG5cdH1cblxuXHRfb25CYWNrTmF2aWdhdGlvbkluRHJhZnQob0NvbnRleHQ6IGFueSkge1xuXHRcdHRoaXMubWVzc2FnZUhhbmRsZXIucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0aWYgKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um91dGVyUHJveHkoKS5jaGVja0lmQmFja0hhc1NhbWVDb250ZXh0KCkpIHtcblx0XHRcdC8vIEJhY2sgbmF2IHdpbGwga2VlcCB0aGUgc2FtZSBjb250ZXh0IC0tPiBubyBuZWVkIHRvIGRpc3BsYXkgdGhlIGRpYWxvZ1xuXHRcdFx0aGlzdG9yeS5iYWNrKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRyYWZ0LnByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uKFxuXHRcdFx0XHRmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0aGlzdG9yeS5iYWNrKCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdEZ1bmN0aW9uLnByb3RvdHlwZSxcblx0XHRcdFx0b0NvbnRleHQsXG5cdFx0XHRcdHRoaXMsXG5cdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRkcmFmdC5OYXZpZ2F0aW9uVHlwZS5CYWNrTmF2aWdhdGlvblxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdF9vbkFmdGVyQmluZGluZyhvQmluZGluZ0NvbnRleHQ6IGFueSwgbVBhcmFtZXRlcnM6IGFueSkge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRjb25zdCBhVGFibGVzID0gdGhpcy5fZmluZFRhYmxlcygpO1xuXG5cdFx0dGhpcy5fc2lkZUVmZmVjdHMuY2xlYXJQcm9wZXJ0aWVzU3RhdHVzKCk7XG5cblx0XHQvLyBUT0RPOiB0aGlzIGlzIG9ubHkgYSB0ZW1wIHNvbHV0aW9uIGFzIGxvbmcgYXMgdGhlIG1vZGVsIGZpeCB0aGUgY2FjaGUgaXNzdWUgYW5kIHdlIHVzZSB0aGlzIGFkZGl0aW9uYWxcblx0XHQvLyBiaW5kaW5nIHdpdGggb3duUmVxdWVzdFxuXHRcdG9CaW5kaW5nQ29udGV4dCA9IG9PYmplY3RQYWdlLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cblx0XHRsZXQgYUlCTkFjdGlvbnM6IGFueVtdID0gW107XG5cdFx0b09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvU2VjdGlvbjogYW55KSB7XG5cdFx0XHRvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpLmZvckVhY2goZnVuY3Rpb24gKG9TdWJTZWN0aW9uOiBhbnkpIHtcblx0XHRcdFx0YUlCTkFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9TdWJTZWN0aW9uLCBhSUJOQWN0aW9ucyk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdC8vIEFzc2lnbiBpbnRlcm5hbCBiaW5kaW5nIGNvbnRleHRzIHRvIG9Gb3JtQ29udGFpbmVyOlxuXHRcdC8vIDEuIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBhc3NpZ24gdGhlIGludGVybmFsIGJpbmRpbmcgY29udGV4dCB0byB0aGUgWE1MIGZyYWdtZW50XG5cdFx0Ly8gKEZvcm1Db250YWluZXIuZnJhZ21lbnQueG1sKSB5ZXQgLSBpdCBpcyB1c2VkIGFscmVhZHkgZm9yIHRoZSBkYXRhLXN0cnVjdHVyZS5cblx0XHQvLyAyLiBBbm90aGVyIHByb2JsZW0gaXMsIHRoYXQgRm9ybUNvbnRhaW5lcnMgYXNzaWduZWQgdG8gYSAnTW9yZUJsb2NrJyBkb2VzIG5vdCBoYXZlIGFuXG5cdFx0Ly8gaW50ZXJuYWwgbW9kZWwgY29udGV4dCBhdCBhbGwuXG5cblx0XHRhVGFibGVzLmZvckVhY2goZnVuY3Rpb24gKG9UYWJsZTogYW55KSB7XG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImNyZWF0aW9uUm93RmllbGRWYWxpZGl0eVwiLCB7fSk7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJjcmVhdGlvblJvd0N1c3RvbVZhbGlkaXR5XCIsIHt9KTtcblxuXHRcdFx0YUlCTkFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9UYWJsZSwgYUlCTkFjdGlvbnMpO1xuXHRcdFx0Ly8gdGVtcG9yYXJ5IHdvcmthcm91bmQgZm9yIEJDUDogMjA4MDIxODAwNFxuXHRcdFx0Ly8gTmVlZCB0byBmaXggd2l0aCBCTEk6IEZJT1JJVEVDSFAxLTE1Mjc0XG5cdFx0XHQvLyBvbmx5IGZvciBlZGl0IG1vZGUsIHdlIGNsZWFyIHRoZSB0YWJsZSBjYWNoZVxuXHRcdFx0Ly8gV29ya2Fyb3VuZCBzdGFydHMgaGVyZSEhXG5cdFx0XHRjb25zdCBvVGFibGVSb3dCaW5kaW5nID0gb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRcdGlmIChvVGFibGVSb3dCaW5kaW5nKSB7XG5cdFx0XHRcdGlmIChNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQob1RhYmxlUm93QmluZGluZy5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpKSkge1xuXHRcdFx0XHRcdC8vIGFwcGx5IGZvciBib3RoIGVkaXQgYW5kIGRpc3BsYXkgbW9kZSBpbiBzdGlja3lcblx0XHRcdFx0XHRvVGFibGVSb3dCaW5kaW5nLnJlbW92ZUNhY2hlc0FuZE1lc3NhZ2VzKFwiXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvLyBXb3JrYXJvdW5kIGVuZHMgaGVyZSEhXG5cblx0XHRcdC8vIFVwZGF0ZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgRGF0YUZpZWxkRm9yQWN0aW9uIGJ1dHRvbnMgb24gdGFibGUgdG9vbGJhclxuXHRcdFx0Ly8gVGhlIHNhbWUgaXMgYWxzbyBwZXJmb3JtZWQgb24gVGFibGUgc2VsZWN0aW9uQ2hhbmdlIGV2ZW50XG5cdFx0XHRjb25zdCBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gSlNPTi5wYXJzZShcblx0XHRcdFx0XHRDb21tb25IZWxwZXIucGFyc2VDdXN0b21EYXRhKERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhKG9UYWJsZSwgXCJvcGVyYXRpb25BdmFpbGFibGVNYXBcIikpXG5cdFx0XHRcdCksXG5cdFx0XHRcdGFTZWxlY3RlZENvbnRleHRzID0gb1RhYmxlLmdldFNlbGVjdGVkQ29udGV4dHMoKTtcblxuXHRcdFx0QWN0aW9uUnVudGltZS5zZXRBY3Rpb25FbmFibGVtZW50KG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCwgYVNlbGVjdGVkQ29udGV4dHMsIFwidGFibGVcIik7XG5cdFx0XHQvLyBDbGVhciB0aGUgc2VsZWN0aW9uIGluIHRoZSB0YWJsZSwgbmVlZCB0byBiZSBmaXhlZCBhbmQgcmV2aWV3IHdpdGggQkxJOiBGSU9SSVRFQ0hQMS0yNDMxOFxuXHRcdFx0b1RhYmxlLmNsZWFyU2VsZWN0aW9uKCk7XG5cdFx0fSk7XG5cdFx0Q29tbW9uVXRpbHMuZ2V0U2VtYW50aWNUYXJnZXRzRnJvbVBhZ2VNb2RlbCh0aGlzLCBcIl9wYWdlTW9kZWxcIik7XG5cdFx0Ly9SZXRyaWV2ZSBPYmplY3QgUGFnZSBoZWFkZXIgYWN0aW9ucyBmcm9tIE9iamVjdCBQYWdlIHRpdGxlIGNvbnRyb2xcblx0XHRjb25zdCBvT2JqZWN0UGFnZVRpdGxlID0gb09iamVjdFBhZ2UuZ2V0SGVhZGVyVGl0bGUoKTtcblx0XHRsZXQgYUlCTkhlYWRlckFjdGlvbnM6IGFueVtdID0gW107XG5cdFx0YUlCTkhlYWRlckFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9PYmplY3RQYWdlVGl0bGUsIGFJQk5IZWFkZXJBY3Rpb25zKTtcblx0XHRhSUJOQWN0aW9ucyA9IGFJQk5BY3Rpb25zLmNvbmNhdChhSUJOSGVhZGVyQWN0aW9ucyk7XG5cdFx0Q29tbW9uVXRpbHMudXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkoYUlCTkFjdGlvbnMsIHRoaXMuZ2V0VmlldygpKTtcblxuXHRcdGxldCBvTW9kZWw6IGFueSwgb0ZpbmFsVUlTdGF0ZTogYW55O1xuXG5cdFx0Ly8gVE9ETzogdGhpcyBzaG91bGQgYmUgbW92ZWQgaW50byBhbiBpbml0IGV2ZW50IG9mIHRoZSBNREMgdGFibGVzIChub3QgeWV0IGV4aXN0aW5nKSBhbmQgc2hvdWxkIGJlIHBhcnRcblx0XHQvLyBvZiBhbnkgY29udHJvbGxlciBleHRlbnNpb25cblx0XHQvKipcblx0XHQgKiBAcGFyYW0gb1RhYmxlXG5cdFx0ICogQHBhcmFtIG9MaXN0QmluZGluZ1xuXHRcdCAqL1xuXHRcdGFzeW5jIGZ1bmN0aW9uIGVuYWJsZUZhc3RDcmVhdGlvblJvdyhvVGFibGU6IGFueSwgb0xpc3RCaW5kaW5nOiBhbnkpIHtcblx0XHRcdGNvbnN0IG9GYXN0Q3JlYXRpb25Sb3cgPSBvVGFibGUuZ2V0Q3JlYXRpb25Sb3coKTtcblx0XHRcdGxldCBvRmFzdENyZWF0aW9uTGlzdEJpbmRpbmcsIG9GYXN0Q3JlYXRpb25Db250ZXh0O1xuXG5cdFx0XHRpZiAob0Zhc3RDcmVhdGlvblJvdykge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGF3YWl0IG9GaW5hbFVJU3RhdGU7XG5cdFx0XHRcdFx0aWYgKG9GYXN0Q3JlYXRpb25Sb3cuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpKSB7XG5cdFx0XHRcdFx0XHRvRmFzdENyZWF0aW9uTGlzdEJpbmRpbmcgPSBvTW9kZWwuYmluZExpc3Qob0xpc3RCaW5kaW5nLmdldFBhdGgoKSwgb0xpc3RCaW5kaW5nLmdldENvbnRleHQoKSwgW10sIFtdLCB7XG5cdFx0XHRcdFx0XHRcdCQkdXBkYXRlR3JvdXBJZDogXCJkb05vdFN1Ym1pdFwiLFxuXHRcdFx0XHRcdFx0XHQkJGdyb3VwSWQ6IFwiZG9Ob3RTdWJtaXRcIlxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHQvLyBXb3JrYXJvdW5kIHN1Z2dlc3RlZCBieSBPRGF0YSBtb2RlbCB2NCBjb2xsZWFndWVzXG5cdFx0XHRcdFx0XHRvRmFzdENyZWF0aW9uTGlzdEJpbmRpbmcucmVmcmVzaEludGVybmFsID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHQvKiBkbyBub3RoaW5nICovXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0b0Zhc3RDcmVhdGlvbkNvbnRleHQgPSBvRmFzdENyZWF0aW9uTGlzdEJpbmRpbmcuY3JlYXRlKCk7XG5cdFx0XHRcdFx0XHRvRmFzdENyZWF0aW9uUm93LnNldEJpbmRpbmdDb250ZXh0KG9GYXN0Q3JlYXRpb25Db250ZXh0KTtcblxuXHRcdFx0XHRcdFx0Ly8gdGhpcyBpcyBuZWVkZWQgdG8gYXZvaWQgY29uc29sZSBlcnJvclxuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0YXdhaXQgb0Zhc3RDcmVhdGlvbkNvbnRleHQuY3JlYXRlZCgpO1xuXHRcdFx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdFx0XHRMb2cudHJhY2UoXCJ0cmFuc2llbnQgZmFzdCBjcmVhdGlvbiBjb250ZXh0IGRlbGV0ZWRcIik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGNhdGNoIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGNvbXB1dGluZyB0aGUgZmluYWwgVUkgc3RhdGVcIiwgb0Vycm9yKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIHRoaXMgc2hvdWxkIG5vdCBiZSBuZWVkZWQgYXQgdGhlIGFsbFxuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSBvVGFibGVcblx0XHQgKi9cblx0XHRjb25zdCBoYW5kbGVUYWJsZU1vZGlmaWNhdGlvbnMgPSAob1RhYmxlOiBhbnkpID0+IHtcblx0XHRcdGNvbnN0IG9CaW5kaW5nID0gdGhpcy5fZ2V0VGFibGVCaW5kaW5nKG9UYWJsZSksXG5cdFx0XHRcdGZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cyA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRlbmFibGVGYXN0Q3JlYXRpb25Sb3cob1RhYmxlLCBvQmluZGluZyk7XG5cdFx0XHRcdH07XG5cblx0XHRcdGlmICghb0JpbmRpbmcpIHtcblx0XHRcdFx0TG9nLmVycm9yKGBFeHBlY3RlZCBiaW5kaW5nIG1pc3NpbmcgZm9yIHRhYmxlOiAke29UYWJsZS5nZXRJZCgpfWApO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmIChvQmluZGluZy5vQ29udGV4dCkge1xuXHRcdFx0XHRmbkhhbmRsZVRhYmxlUGF0Y2hFdmVudHMoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGZuSGFuZGxlQ2hhbmdlID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdGlmIChvQmluZGluZy5vQ29udGV4dCkge1xuXHRcdFx0XHRcdFx0Zm5IYW5kbGVUYWJsZVBhdGNoRXZlbnRzKCk7XG5cdFx0XHRcdFx0XHRvQmluZGluZy5kZXRhY2hDaGFuZ2UoZm5IYW5kbGVDaGFuZ2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdFx0b0JpbmRpbmcuYXR0YWNoQ2hhbmdlKGZuSGFuZGxlQ2hhbmdlKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0aWYgKG9CaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0b01vZGVsID0gb0JpbmRpbmdDb250ZXh0LmdldE1vZGVsKCk7XG5cblx0XHRcdC8vIENvbXB1dGUgRWRpdCBNb2RlXG5cdFx0XHRvRmluYWxVSVN0YXRlID0gdGhpcy5fZWRpdEZsb3cuY29tcHV0ZUVkaXRNb2RlKG9CaW5kaW5nQ29udGV4dCk7XG5cblx0XHRcdGlmIChNb2RlbEhlbHBlci5pc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZChvTW9kZWwuZ2V0TWV0YU1vZGVsKCkpKSB7XG5cdFx0XHRcdG9GaW5hbFVJU3RhdGVcblx0XHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAodGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpKSB7XG5cdFx0XHRcdFx0XHRcdGNvbm5lY3QodGhpcy5nZXRWaWV3KCkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgd2FpdGluZyBmb3IgdGhlIGZpbmFsIFVJIFN0YXRlXCIsIG9FcnJvcik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIHVwZGF0ZSByZWxhdGVkIGFwcHMgb25jZSBEYXRhIGlzIHJlY2VpdmVkIGluIGNhc2Ugb2YgYmluZGluZyBjYWNoZSBpcyBub3QgYXZhaWxhYmxlXG5cdFx0XHQvLyBUT0RPOiB0aGlzIGlzIG9ubHkgYSB0ZW1wIHNvbHV0aW9uIHNpbmNlIHdlIG5lZWQgdG8gY2FsbCBfdXBkYXRlUmVsYXRlZEFwcHMgbWV0aG9kIG9ubHkgYWZ0ZXIgZGF0YSBmb3IgT2JqZWN0IFBhZ2UgaXMgcmVjZWl2ZWQgKGlmIHRoZXJlIGlzIG5vIGJpbmRpbmcpXG5cdFx0XHRpZiAob0JpbmRpbmdDb250ZXh0LmdldEJpbmRpbmcoKS5vQ2FjaGUpIHtcblx0XHRcdFx0dGhpcy5fdXBkYXRlUmVsYXRlZEFwcHMoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGZuVXBkYXRlUmVsYXRlZEFwcHMgPSAoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5fdXBkYXRlUmVsYXRlZEFwcHMoKTtcblx0XHRcdFx0XHRvQmluZGluZ0NvbnRleHQuZ2V0QmluZGluZygpLmRldGFjaERhdGFSZWNlaXZlZChmblVwZGF0ZVJlbGF0ZWRBcHBzKTtcblx0XHRcdFx0fTtcblx0XHRcdFx0b0JpbmRpbmdDb250ZXh0LmdldEJpbmRpbmcoKS5hdHRhY2hEYXRhUmVjZWl2ZWQoZm5VcGRhdGVSZWxhdGVkQXBwcyk7XG5cdFx0XHR9XG5cblx0XHRcdC8vQXR0YWNoIHRoZSBwYXRjaCBzZW50IGFuZCBwYXRjaCBjb21wbGV0ZWQgZXZlbnQgdG8gdGhlIG9iamVjdCBwYWdlIGJpbmRpbmcgc28gdGhhdCB3ZSBjYW4gcmVhY3Rcblx0XHRcdGNvbnN0IG9CaW5kaW5nID0gKG9CaW5kaW5nQ29udGV4dC5nZXRCaW5kaW5nICYmIG9CaW5kaW5nQ29udGV4dC5nZXRCaW5kaW5nKCkpIHx8IG9CaW5kaW5nQ29udGV4dDtcblxuXHRcdFx0Ly8gQXR0YWNoIHRoZSBldmVudCBoYW5kbGVyIG9ubHkgb25jZSB0byB0aGUgc2FtZSBiaW5kaW5nXG5cdFx0XHRpZiAodGhpcy5jdXJyZW50QmluZGluZyAhPT0gb0JpbmRpbmcpIHtcblx0XHRcdFx0b0JpbmRpbmcuYXR0YWNoRXZlbnQoXCJwYXRjaFNlbnRcIiwgdGhpcy5lZGl0Rmxvdy5oYW5kbGVQYXRjaFNlbnQsIHRoaXMpO1xuXHRcdFx0XHR0aGlzLmN1cnJlbnRCaW5kaW5nID0gb0JpbmRpbmc7XG5cdFx0XHR9XG5cblx0XHRcdGFUYWJsZXMuZm9yRWFjaChmdW5jdGlvbiAob1RhYmxlOiBhbnkpIHtcblx0XHRcdFx0Ly8gYWNjZXNzIGJpbmRpbmcgb25seSBhZnRlciB0YWJsZSBpcyBib3VuZFxuXHRcdFx0XHRUYWJsZVV0aWxzLndoZW5Cb3VuZChvVGFibGUpXG5cdFx0XHRcdFx0LnRoZW4oaGFuZGxlVGFibGVNb2RpZmljYXRpb25zKVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSB0YWJsZSB0byBiZSBib3VuZFwiLCBvRXJyb3IpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdGlmICghKHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55KS51c2VOZXdMYXp5TG9hZGluZykge1xuXHRcdFx0XHQvLyBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYWZ0ZXIgYmluZGluZyBpcyByZWFkeSBoZW5jZSBjYWxsaW5nIGl0IGluIG9uQWZ0ZXJCaW5kaW5nXG5cdFx0XHRcdChvT2JqZWN0UGFnZSBhcyBhbnkpLl90cmlnZ2VyVmlzaWJsZVN1YlNlY3Rpb25zRXZlbnRzKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRvblBhZ2VSZWFkeShtUGFyYW1ldGVyczogYW55KSB7XG5cdFx0Y29uc3Qgc2V0Rm9jdXMgPSAoKSA9PiB7XG5cdFx0XHQvLyBTZXQgdGhlIGZvY3VzIHRvIHRoZSBmaXJzdCBhY3Rpb24gYnV0dG9uLCBvciB0byB0aGUgZmlyc3QgZWRpdGFibGUgaW5wdXQgaWYgaW4gZWRpdGFibGUgbW9kZVxuXHRcdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdFx0Y29uc3QgaXNJbkRpc3BsYXlNb2RlID0gIW9PYmplY3RQYWdlLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKTtcblxuXHRcdFx0aWYgKGlzSW5EaXNwbGF5TW9kZSkge1xuXHRcdFx0XHRjb25zdCBvRmlyc3RDbGlja2FibGVFbGVtZW50ID0gdGhpcy5fZ2V0Rmlyc3RDbGlja2FibGVFbGVtZW50KG9PYmplY3RQYWdlKTtcblx0XHRcdFx0aWYgKG9GaXJzdENsaWNrYWJsZUVsZW1lbnQpIHtcblx0XHRcdFx0XHRvRmlyc3RDbGlja2FibGVFbGVtZW50LmZvY3VzKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IG9TZWxlY3RlZFNlY3Rpb246IGFueSA9IENvcmUuYnlJZChvT2JqZWN0UGFnZS5nZXRTZWxlY3RlZFNlY3Rpb24oKSk7XG5cdFx0XHRcdGlmIChvU2VsZWN0ZWRTZWN0aW9uKSB7XG5cdFx0XHRcdFx0dGhpcy5fdXBkYXRlRm9jdXNJbkVkaXRNb2RlKG9TZWxlY3RlZFNlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHRcdC8vIEFwcGx5IGFwcCBzdGF0ZSBvbmx5IGFmdGVyIHRoZSBwYWdlIGlzIHJlYWR5IHdpdGggdGhlIGZpcnN0IHNlY3Rpb24gc2VsZWN0ZWRcblx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHQvL1Nob3cgcG9wdXAgd2hpbGUgbmF2aWdhdGluZyBiYWNrIGZyb20gb2JqZWN0IHBhZ2UgaW4gY2FzZSBvZiBkcmFmdFxuXHRcdGlmIChvQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdGNvbnN0IGJJc1N0aWNreU1vZGUgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQoKG9CaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldE1ldGFNb2RlbCgpKTtcblx0XHRcdGlmICghYklzU3RpY2t5TW9kZSkge1xuXHRcdFx0XHRjb25zdCBvQXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KG9WaWV3KTtcblx0XHRcdFx0b0FwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCkuc2V0QmFja05hdmlnYXRpb24oKCkgPT4gdGhpcy5fb25CYWNrTmF2aWdhdGlvbkluRHJhZnQob0JpbmRpbmdDb250ZXh0KSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMuZ2V0QXBwQ29tcG9uZW50KClcblx0XHRcdC5nZXRBcHBTdGF0ZUhhbmRsZXIoKVxuXHRcdFx0LmFwcGx5QXBwU3RhdGUoKVxuXHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRpZiAobVBhcmFtZXRlcnMuZm9yY2VGb2N1cykge1xuXHRcdFx0XHRcdHNldEZvY3VzKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKEVycm9yKSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHNldHRpbmcgdGhlIGZvY3VzXCIsIEVycm9yKTtcblx0XHRcdH0pO1xuXG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZXJyb3JOYXZpZ2F0aW9uU2VjdGlvbkZsYWdcIiwgZmFsc2UpO1xuXHRcdHRoaXMuX2NoZWNrRGF0YVBvaW50VGl0bGVGb3JFeHRlcm5hbE5hdmlnYXRpb24oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHN0YXR1cyBvZiBlZGl0IG1vZGUgZm9yIHN0aWNreSBzZXNzaW9uLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBUaGUgc3RhdHVzIG9mIGVkaXQgbW9kZSBmb3Igc3RpY2t5IHNlc3Npb25cblx0ICovXG5cdGdldFN0aWNreUVkaXRNb2RlKCkge1xuXHRcdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0ICYmICh0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQpO1xuXHRcdGxldCBiSXNTdGlja3lFZGl0TW9kZSA9IGZhbHNlO1xuXHRcdGlmIChvQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdGNvbnN0IGJJc1N0aWNreU1vZGUgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQob0JpbmRpbmdDb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwpO1xuXHRcdFx0aWYgKGJJc1N0aWNreU1vZGUpIHtcblx0XHRcdFx0YklzU3RpY2t5RWRpdE1vZGUgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBiSXNTdGlja3lFZGl0TW9kZTtcblx0fVxuXG5cdF9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpIHtcblx0XHRyZXR1cm4gdGhpcy5ieUlkKFwiZmU6Ok9iamVjdFBhZ2VcIikgYXMgT2JqZWN0UGFnZUxheW91dDtcblx0fVxuXG5cdF9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbigpIHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2VTdWJ0aXRsZSA9IG9PYmplY3RQYWdlLmdldEN1c3RvbURhdGEoKS5maW5kKGZ1bmN0aW9uIChvQ3VzdG9tRGF0YTogYW55KSB7XG5cdFx0XHRyZXR1cm4gb0N1c3RvbURhdGEuZ2V0S2V5KCkgPT09IFwiT2JqZWN0UGFnZVN1YnRpdGxlXCI7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRpdGxlOiBvT2JqZWN0UGFnZS5kYXRhKFwiT2JqZWN0UGFnZVRpdGxlXCIpIHx8IFwiXCIsXG5cdFx0XHRzdWJ0aXRsZTogb09iamVjdFBhZ2VTdWJ0aXRsZSAmJiBvT2JqZWN0UGFnZVN1YnRpdGxlLmdldFZhbHVlKCksXG5cdFx0XHRpbnRlbnQ6IFwiXCIsXG5cdFx0XHRpY29uOiBcIlwiXG5cdFx0fTtcblx0fVxuXG5cdF9leGVjdXRlSGVhZGVyU2hvcnRjdXQoc0lkOiBhbnkpIHtcblx0XHRjb25zdCBzQnV0dG9uSWQgPSBgJHt0aGlzLmdldFZpZXcoKS5nZXRJZCgpfS0tJHtzSWR9YCxcblx0XHRcdG9CdXR0b24gPSAodGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKS5nZXRIZWFkZXJUaXRsZSgpIGFzIE9iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGUpXG5cdFx0XHRcdC5nZXRBY3Rpb25zKClcblx0XHRcdFx0LmZpbmQoZnVuY3Rpb24gKG9FbGVtZW50OiBhbnkpIHtcblx0XHRcdFx0XHRyZXR1cm4gb0VsZW1lbnQuZ2V0SWQoKSA9PT0gc0J1dHRvbklkO1xuXHRcdFx0XHR9KTtcblx0XHRDb21tb25VdGlscy5maXJlQnV0dG9uUHJlc3Mob0J1dHRvbik7XG5cdH1cblxuXHRfZXhlY3V0ZUZvb3RlclNob3J0Y3V0KHNJZDogYW55KSB7XG5cdFx0Y29uc3Qgc0J1dHRvbklkID0gYCR7dGhpcy5nZXRWaWV3KCkuZ2V0SWQoKX0tLSR7c0lkfWAsXG5cdFx0XHRvQnV0dG9uID0gKHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkuZ2V0Rm9vdGVyKCkgYXMgYW55KS5nZXRDb250ZW50KCkuZmluZChmdW5jdGlvbiAob0VsZW1lbnQ6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4gb0VsZW1lbnQuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkgPT09IFwic2FwLm0uQnV0dG9uXCIgJiYgb0VsZW1lbnQuZ2V0SWQoKSA9PT0gc0J1dHRvbklkO1xuXHRcdFx0fSk7XG5cdFx0Q29tbW9uVXRpbHMuZmlyZUJ1dHRvblByZXNzKG9CdXR0b24pO1xuXHR9XG5cblx0X2V4ZWN1dGVUYWJTaG9ydEN1dChvRXhlY3V0aW9uOiBhbnkpIHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCksXG5cdFx0XHRhU2VjdGlvbnMgPSBvT2JqZWN0UGFnZS5nZXRTZWN0aW9ucygpLFxuXHRcdFx0aVNlY3Rpb25JbmRleE1heCA9IGFTZWN0aW9ucy5sZW5ndGggLSAxLFxuXHRcdFx0c0NvbW1hbmQgPSBvRXhlY3V0aW9uLm9Tb3VyY2UuZ2V0Q29tbWFuZCgpO1xuXHRcdGxldCBuZXdTZWN0aW9uLFxuXHRcdFx0aVNlbGVjdGVkU2VjdGlvbkluZGV4ID0gb09iamVjdFBhZ2UuaW5kZXhPZlNlY3Rpb24odGhpcy5ieUlkKG9PYmplY3RQYWdlLmdldFNlbGVjdGVkU2VjdGlvbigpKSBhcyBPYmplY3RQYWdlU2VjdGlvbik7XG5cdFx0aWYgKGlTZWxlY3RlZFNlY3Rpb25JbmRleCAhPT0gLTEgJiYgaVNlY3Rpb25JbmRleE1heCA+IDApIHtcblx0XHRcdGlmIChzQ29tbWFuZCA9PT0gXCJOZXh0VGFiXCIpIHtcblx0XHRcdFx0aWYgKGlTZWxlY3RlZFNlY3Rpb25JbmRleCA8PSBpU2VjdGlvbkluZGV4TWF4IC0gMSkge1xuXHRcdFx0XHRcdG5ld1NlY3Rpb24gPSBhU2VjdGlvbnNbKytpU2VsZWN0ZWRTZWN0aW9uSW5kZXhdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGlTZWxlY3RlZFNlY3Rpb25JbmRleCAhPT0gMCkge1xuXHRcdFx0XHQvLyBQcmV2aW91c1RhYlxuXHRcdFx0XHRuZXdTZWN0aW9uID0gYVNlY3Rpb25zWy0taVNlbGVjdGVkU2VjdGlvbkluZGV4XTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG5ld1NlY3Rpb24pIHtcblx0XHRcdFx0b09iamVjdFBhZ2Uuc2V0U2VsZWN0ZWRTZWN0aW9uKG5ld1NlY3Rpb24pO1xuXHRcdFx0XHRuZXdTZWN0aW9uLmZvY3VzKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X2dldEZvb3RlclZpc2liaWxpdHkoKSB7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBzVmlld0lkID0gdGhpcy5nZXRWaWV3KCkuZ2V0SWQoKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJtZXNzYWdlRm9vdGVyQ29udGFpbnNFcnJvcnNcIiwgZmFsc2UpO1xuXHRcdHNhcC51aVxuXHRcdFx0LmdldENvcmUoKVxuXHRcdFx0LmdldE1lc3NhZ2VNYW5hZ2VyKClcblx0XHRcdC5nZXRNZXNzYWdlTW9kZWwoKVxuXHRcdFx0LmdldERhdGEoKVxuXHRcdFx0LmZvckVhY2goZnVuY3Rpb24gKG9NZXNzYWdlOiBhbnkpIHtcblx0XHRcdFx0aWYgKG9NZXNzYWdlLnZhbGlkYXRpb24gJiYgb01lc3NhZ2UudHlwZSA9PT0gXCJFcnJvclwiICYmIG9NZXNzYWdlLnRhcmdldC5pbmRleE9mKHNWaWV3SWQpID4gLTEpIHtcblx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJtZXNzYWdlRm9vdGVyQ29udGFpbnNFcnJvcnNcIiwgdHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHR9XG5cblx0X3Nob3dNZXNzYWdlUG9wb3ZlcihlcnI/OiBhbnksIG9SZXQ/OiBhbnkpIHtcblx0XHRpZiAoZXJyKSB7XG5cdFx0XHRMb2cuZXJyb3IoZXJyKTtcblx0XHR9XG5cdFx0Y29uc3Qgcm9vdFZpZXdDb250cm9sbGVyID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb290Vmlld0NvbnRyb2xsZXIoKSBhcyBhbnk7XG5cdFx0Y29uc3QgY3VycmVudFBhZ2VWaWV3ID0gcm9vdFZpZXdDb250cm9sbGVyLmlzRmNsRW5hYmxlZCgpXG5cdFx0XHQ/IHJvb3RWaWV3Q29udHJvbGxlci5nZXRSaWdodG1vc3RWaWV3KClcblx0XHRcdDogKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um9vdENvbnRhaW5lcigpIGFzIGFueSkuZ2V0Q3VycmVudFBhZ2UoKTtcblx0XHRpZiAoIWN1cnJlbnRQYWdlVmlldy5pc0EoXCJzYXAubS5NZXNzYWdlUGFnZVwiKSkge1xuXHRcdFx0Y29uc3Qgb01lc3NhZ2VCdXR0b24gPSB0aGlzLm1lc3NhZ2VCdXR0b24sXG5cdFx0XHRcdG9NZXNzYWdlUG9wb3ZlciA9IG9NZXNzYWdlQnV0dG9uLm9NZXNzYWdlUG9wb3Zlcixcblx0XHRcdFx0b0l0ZW1CaW5kaW5nID0gb01lc3NhZ2VQb3BvdmVyLmdldEJpbmRpbmcoXCJpdGVtc1wiKTtcblxuXHRcdFx0aWYgKG9JdGVtQmluZGluZy5nZXRMZW5ndGgoKSA+IDAgJiYgIW9NZXNzYWdlUG9wb3Zlci5pc09wZW4oKSkge1xuXHRcdFx0XHRvTWVzc2FnZUJ1dHRvbi5zZXRWaXNpYmxlKHRydWUpO1xuXHRcdFx0XHQvLyB3b3JrYXJvdW5kIHRvIGVuc3VyZSB0aGF0IG9NZXNzYWdlQnV0dG9uIGlzIHJlbmRlcmVkIHdoZW4gb3BlbkJ5IGlzIGNhbGxlZFxuXHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRvTWVzc2FnZVBvcG92ZXIub3BlbkJ5KG9NZXNzYWdlQnV0dG9uKTtcblx0XHRcdFx0fSwgMCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvUmV0O1xuXHR9XG5cblx0X2VkaXREb2N1bWVudChvQ29udGV4dDogYW55KSB7XG5cdFx0Y29uc3Qgb01vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKTtcblx0XHRCdXN5TG9ja2VyLmxvY2sob01vZGVsKTtcblx0XHRyZXR1cm4gdGhpcy5lZGl0Rmxvdy5lZGl0RG9jdW1lbnQuYXBwbHkodGhpcy5lZGl0RmxvdywgW29Db250ZXh0XSkuZmluYWxseShmdW5jdGlvbiAoKSB7XG5cdFx0XHRCdXN5TG9ja2VyLnVubG9jayhvTW9kZWwpO1xuXHRcdH0pO1xuXHR9XG5cblx0YXN5bmMgX3NhdmVEb2N1bWVudChvQ29udGV4dDogYW55KSB7XG5cdFx0Y29uc3Qgb01vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKSxcblx0XHRcdGFXYWl0Q3JlYXRlRG9jdW1lbnRzOiBhbnlbXSA9IFtdO1xuXHRcdC8vIGluZGljYXRlcyBpZiB3ZSBhcmUgY3JlYXRpbmcgYSBuZXcgcm93IGluIHRoZSBPUFxuXHRcdGxldCBiRXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvciA9IGZhbHNlO1xuXHRcdEJ1c3lMb2NrZXIubG9jayhvTW9kZWwpO1xuXHRcdHRoaXMuX2ZpbmRUYWJsZXMoKS5mb3JFYWNoKChvVGFibGU6IGFueSkgPT4ge1xuXHRcdFx0Y29uc3Qgb0JpbmRpbmcgPSB0aGlzLl9nZXRUYWJsZUJpbmRpbmcob1RhYmxlKTtcblx0XHRcdGNvbnN0IG1QYXJhbWV0ZXJzOiBhbnkgPSB7XG5cdFx0XHRcdGNyZWF0aW9uTW9kZTogb1RhYmxlLmRhdGEoXCJjcmVhdGlvbk1vZGVcIiksXG5cdFx0XHRcdGNyZWF0aW9uUm93OiBvVGFibGUuZ2V0Q3JlYXRpb25Sb3coKSxcblx0XHRcdFx0Y3JlYXRlQXRFbmQ6IG9UYWJsZS5kYXRhKFwiY3JlYXRlQXRFbmRcIikgPT09IFwidHJ1ZVwiXG5cdFx0XHR9O1xuXHRcdFx0Y29uc3QgYkNyZWF0ZURvY3VtZW50ID1cblx0XHRcdFx0bVBhcmFtZXRlcnMuY3JlYXRpb25Sb3cgJiZcblx0XHRcdFx0bVBhcmFtZXRlcnMuY3JlYXRpb25Sb3cuZ2V0QmluZGluZ0NvbnRleHQoKSAmJlxuXHRcdFx0XHRPYmplY3Qua2V5cyhtUGFyYW1ldGVycy5jcmVhdGlvblJvdy5nZXRCaW5kaW5nQ29udGV4dCgpLmdldE9iamVjdCgpKS5sZW5ndGggPiAxO1xuXHRcdFx0aWYgKGJDcmVhdGVEb2N1bWVudCkge1xuXHRcdFx0XHQvLyB0aGUgYlNraXBTaWRlRWZmZWN0cyBpcyBhIHBhcmFtZXRlciBjcmVhdGVkIHdoZW4gd2UgY2xpY2sgdGhlIHNhdmUga2V5LiBJZiB3ZSBwcmVzcyB0aGlzIGtleVxuXHRcdFx0XHQvLyB3ZSBkb24ndCBleGVjdXRlIHRoZSBoYW5kbGVTaWRlRWZmZWN0cyBmdW5jaXRvbiB0byBhdm9pZCBiYXRjaCByZWR1bmRhbmN5XG5cdFx0XHRcdG1QYXJhbWV0ZXJzLmJTa2lwU2lkZUVmZmVjdHMgPSB0cnVlO1xuXHRcdFx0XHRiRXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvciA9IHRydWU7XG5cdFx0XHRcdGFXYWl0Q3JlYXRlRG9jdW1lbnRzLnB1c2goXG5cdFx0XHRcdFx0dGhpcy5lZGl0Rmxvdy5jcmVhdGVEb2N1bWVudChvQmluZGluZywgbVBhcmFtZXRlcnMpLnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG9CaW5kaW5nO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgYUJpbmRpbmdzID0gYXdhaXQgUHJvbWlzZS5hbGwoYVdhaXRDcmVhdGVEb2N1bWVudHMpO1xuXHRcdFx0Y29uc3QgbVBhcmFtZXRlcnMgPSB7XG5cdFx0XHRcdGJFeGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yOiBiRXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvcixcblx0XHRcdFx0YmluZGluZ3M6IGFCaW5kaW5nc1xuXHRcdFx0fTtcblx0XHRcdC8vIFdlIG5lZWQgdG8gZWl0aGVyIHJlamVjdCBvciByZXNvbHZlIGEgcHJvbWlzZSBoZXJlIGFuZCByZXR1cm4gaXQgc2luY2UgdGhpcyBzYXZlXG5cdFx0XHQvLyBmdW5jdGlvbiBpcyBub3Qgb25seSBjYWxsZWQgd2hlbiBwcmVzc2luZyB0aGUgc2F2ZSBidXR0b24gaW4gdGhlIGZvb3RlciwgYnV0IGFsc29cblx0XHRcdC8vIHdoZW4gdGhlIHVzZXIgc2VsZWN0cyBjcmVhdGUgb3Igc2F2ZSBpbiBhIGRhdGFsb3NzIHBvcHVwLlxuXHRcdFx0Ly8gVGhlIGxvZ2ljIG9mIHRoZSBkYXRhbG9zcyBwb3B1cCBuZWVkcyB0byBkZXRlY3QgaWYgdGhlIHNhdmUgaGFkIGVycm9ycyBvciBub3QgaW4gb3JkZXJcblx0XHRcdC8vIHRvIGRlY2lkZSBpZiB0aGUgc3Vic2VxdWVudCBhY3Rpb24gLSBsaWtlIGEgYmFjayBuYXZpZ2F0aW9uIC0gaGFzIHRvIGJlIGV4ZWN1dGVkIG9yIG5vdC5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGF3YWl0IHRoaXMuZWRpdEZsb3cuc2F2ZURvY3VtZW50KG9Db250ZXh0LCBtUGFyYW1ldGVycyk7XG5cdFx0XHR9IGNhdGNoIChlcnJvcjogYW55KSB7XG5cdFx0XHRcdC8vIElmIHRoZSBzYXZlRG9jdW1lbnQgaW4gZWRpdEZsb3cgcmV0dXJucyBlcnJvcnMgd2UgbmVlZFxuXHRcdFx0XHQvLyB0byBzaG93IHRoZSBtZXNzYWdlIHBvcG92ZXIgaGVyZSBhbmQgZW5zdXJlIHRoYXQgdGhlXG5cdFx0XHRcdC8vIGRhdGFsb3NzIGxvZ2ljIGRvZXMgbm90IHBlcmZvcm0gdGhlIGZvbGxvdyB1cCBmdW5jdGlvblxuXHRcdFx0XHQvLyBsaWtlIGUuZy4gYSBiYWNrIG5hdmlnYXRpb24gaGVuY2Ugd2UgcmV0dXJuIGEgcHJvbWlzZSBhbmQgcmVqZWN0IGl0XG5cdFx0XHRcdHRoaXMuX3Nob3dNZXNzYWdlUG9wb3ZlcihlcnJvcik7XG5cdFx0XHRcdHRocm93IGVycm9yO1xuXHRcdFx0fVxuXHRcdH0gZmluYWxseSB7XG5cdFx0XHRpZiAoQnVzeUxvY2tlci5pc0xvY2tlZChvTW9kZWwpKSB7XG5cdFx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKG9Nb2RlbCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X21hbmFnZUNvbGxhYm9yYXRpb24oKSB7XG5cdFx0b3Blbk1hbmFnZURpYWxvZyh0aGlzLmdldFZpZXcoKSk7XG5cdH1cblxuXHRfc2hvd0NvbGxhYm9yYXRpb25Vc2VyRGV0YWlscyhldmVudDogYW55KSB7XG5cdFx0c2hvd1VzZXJEZXRhaWxzKGV2ZW50LCB0aGlzLmdldFZpZXcoKSk7XG5cdH1cblxuXHRfY2FuY2VsRG9jdW1lbnQob0NvbnRleHQ6IGFueSwgbVBhcmFtZXRlcnM6IGFueSkge1xuXHRcdG1QYXJhbWV0ZXJzLmNhbmNlbEJ1dHRvbiA9IHRoaXMuZ2V0VmlldygpLmJ5SWQobVBhcmFtZXRlcnMuY2FuY2VsQnV0dG9uKTsgLy90byBnZXQgdGhlIHJlZmVyZW5jZSBvZiB0aGUgY2FuY2VsIGJ1dHRvbiBmcm9tIGNvbW1hbmQgZXhlY3V0aW9uXG5cdFx0cmV0dXJuIHRoaXMuZWRpdEZsb3cuY2FuY2VsRG9jdW1lbnQob0NvbnRleHQsIG1QYXJhbWV0ZXJzKTtcblx0fVxuXG5cdF9hcHBseURvY3VtZW50KG9Db250ZXh0OiBhbnkpIHtcblx0XHRyZXR1cm4gdGhpcy5lZGl0Rmxvdy5hcHBseURvY3VtZW50KG9Db250ZXh0KS5jYXRjaCgoKSA9PiB0aGlzLl9zaG93TWVzc2FnZVBvcG92ZXIoKSk7XG5cdH1cblxuXHRfdXBkYXRlUmVsYXRlZEFwcHMoKSB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGlmIChDb21tb25VdGlscy5yZXNvbHZlU3RyaW5ndG9Cb29sZWFuKG9PYmplY3RQYWdlLmRhdGEoXCJzaG93UmVsYXRlZEFwcHNcIikpKSB7XG5cdFx0XHRDb21tb25VdGlscy51cGRhdGVSZWxhdGVkQXBwc0RldGFpbHMob09iamVjdFBhZ2UpO1xuXHRcdH1cblx0fVxuXG5cdF9maW5kVGFibGVJblN1YlNlY3Rpb24oYVBhcmVudEVsZW1lbnQ6IGFueSwgYVN1YnNlY3Rpb246IGFueSwgYVRhYmxlczogYW55KSB7XG5cdFx0Y29uc3QgYVN1YlNlY3Rpb25UYWJsZXMgPSBbXTtcblx0XHRmb3IgKGxldCBlbGVtZW50ID0gMDsgZWxlbWVudCA8IGFQYXJlbnRFbGVtZW50Lmxlbmd0aDsgZWxlbWVudCsrKSB7XG5cdFx0XHRsZXQgb0VsZW1lbnQgPSBhUGFyZW50RWxlbWVudFtlbGVtZW50XS5nZXRDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgYVBhcmVudEVsZW1lbnRbZWxlbWVudF0uZ2V0Q29udGVudCgpO1xuXHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50LmlzQSAmJiBvRWxlbWVudC5pc0EoXCJzYXAudWkubGF5b3V0LkR5bmFtaWNTaWRlQ29udGVudFwiKSkge1xuXHRcdFx0XHRvRWxlbWVudCA9IG9FbGVtZW50LmdldE1haW5Db250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgb0VsZW1lbnQuZ2V0TWFpbkNvbnRlbnQoKTtcblx0XHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRvRWxlbWVudCA9IG9FbGVtZW50WzBdO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQuaXNBICYmIG9FbGVtZW50LmlzQShcInNhcC5mZS5tYWNyb3MudGFibGUuVGFibGVBUElcIikpIHtcblx0XHRcdFx0b0VsZW1lbnQgPSBvRWxlbWVudC5nZXRDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgb0VsZW1lbnQuZ2V0Q29udGVudCgpO1xuXHRcdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdG9FbGVtZW50ID0gb0VsZW1lbnRbMF07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5pc0EgJiYgb0VsZW1lbnQuaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRhVGFibGVzLnB1c2gob0VsZW1lbnQpO1xuXHRcdFx0XHRhU3ViU2VjdGlvblRhYmxlcy5wdXNoKHtcblx0XHRcdFx0XHRcInRhYmxlXCI6IG9FbGVtZW50LFxuXHRcdFx0XHRcdFwiZ3JpZFRhYmxlXCI6IG9FbGVtZW50LmdldFR5cGUoKS5pc0EoXCJzYXAudWkubWRjLnRhYmxlLkdyaWRUYWJsZVR5cGVcIilcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmIChcblx0XHRcdGFTdWJTZWN0aW9uVGFibGVzLmxlbmd0aCA9PT0gMSAmJlxuXHRcdFx0YVBhcmVudEVsZW1lbnQubGVuZ3RoID09PSAxICYmXG5cdFx0XHRhU3ViU2VjdGlvblRhYmxlc1swXS5ncmlkVGFibGUgJiZcblx0XHRcdCFhU3Vic2VjdGlvbi5oYXNTdHlsZUNsYXNzKFwic2FwVXhBUE9iamVjdFBhZ2VTdWJTZWN0aW9uRml0Q29udGFpbmVyXCIpXG5cdFx0KSB7XG5cdFx0XHQvL0luIGNhc2UgdGhlcmUgaXMgb25seSBhIHNpbmdsZSB0YWJsZSBpbiBhIHNlY3Rpb24gd2UgZml0IHRoYXQgdG8gdGhlIHdob2xlIHBhZ2Ugc28gdGhhdCB0aGUgc2Nyb2xsYmFyIGNvbWVzIG9ubHkgb24gdGFibGUgYW5kIG5vdCBvbiBwYWdlXG5cdFx0XHRhU3Vic2VjdGlvbi5hZGRTdHlsZUNsYXNzKFwic2FwVXhBUE9iamVjdFBhZ2VTdWJTZWN0aW9uRml0Q29udGFpbmVyXCIpO1xuXHRcdH0gZWxzZSBpZiAoYVN1YlNlY3Rpb25UYWJsZXMgJiYgIWFTdWJzZWN0aW9uLmhhc1N0eWxlQ2xhc3MoXCJzYXBVeEFQT2JqZWN0UGFnZVN1YlNlY3Rpb25GaXRDb250YWluZXJcIikpIHtcblx0XHRcdGFTdWJTZWN0aW9uVGFibGVzLmZvckVhY2goZnVuY3Rpb24gKG9UYWJsZTogeyB0YWJsZTogYW55OyBncmlkVGFibGU6IGFueSB9KSB7XG5cdFx0XHRcdGlmIChvVGFibGUuZ3JpZFRhYmxlKSB7XG5cdFx0XHRcdFx0Ly9SZXNldHRpbmcgdGhlIHJvdyBjb3VudCB0byBkZWZhdWx0IHZhbHVlIGluIGNhc2Ugd2UgaGF2ZSBhIGNvbWJpbmF0aW9uIG9mIGZvcm1zIGFuZCB0YWJsZXMgb3IgbXVsdGlwbGUgdGFibGVzIGluIGEgc3Vic2VjdGlvblxuXHRcdFx0XHRcdG9UYWJsZS50YWJsZS5nZXRUeXBlKCkuc2V0Um93Q291bnQobnVsbCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdF9nZXRBbGxTdWJTZWN0aW9ucygpIHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0bGV0IGFTdWJTZWN0aW9uczogYW55W10gPSBbXTtcblx0XHRvT2JqZWN0UGFnZS5nZXRTZWN0aW9ucygpLmZvckVhY2goZnVuY3Rpb24gKG9TZWN0aW9uOiBhbnkpIHtcblx0XHRcdGFTdWJTZWN0aW9ucyA9IGFTdWJTZWN0aW9ucy5jb25jYXQob1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGFTdWJTZWN0aW9ucztcblx0fVxuXG5cdF9nZXRBbGxCbG9ja3MoKSB7XG5cdFx0bGV0IGFCbG9ja3M6IGFueVtdID0gW107XG5cdFx0dGhpcy5fZ2V0QWxsU3ViU2VjdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvU3ViU2VjdGlvbjogYW55KSB7XG5cdFx0XHRhQmxvY2tzID0gYUJsb2Nrcy5jb25jYXQob1N1YlNlY3Rpb24uZ2V0QmxvY2tzKCkpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBhQmxvY2tzO1xuXHR9XG5cblx0X2ZpbmRUYWJsZXMoKSB7XG5cdFx0Y29uc3QgYVN1YlNlY3Rpb25zID0gdGhpcy5fZ2V0QWxsU3ViU2VjdGlvbnMoKTtcblx0XHRjb25zdCBhVGFibGVzOiBhbnlbXSA9IFtdO1xuXHRcdGZvciAobGV0IHN1YlNlY3Rpb24gPSAwOyBzdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgc3ViU2VjdGlvbisrKSB7XG5cdFx0XHR0aGlzLl9maW5kVGFibGVJblN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLmdldEJsb2NrcygpLCBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0sIGFUYWJsZXMpO1xuXHRcdFx0dGhpcy5fZmluZFRhYmxlSW5TdWJTZWN0aW9uKGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXS5nZXRNb3JlQmxvY2tzKCksIGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXSwgYVRhYmxlcyk7XG5cdFx0fVxuXHRcdHJldHVybiBhVGFibGVzO1xuXHR9XG5cblx0X2Nsb3NlU2lkZUNvbnRlbnQoKSB7XG5cdFx0dGhpcy5fZ2V0QWxsQmxvY2tzKCkuZm9yRWFjaChmdW5jdGlvbiAob0Jsb2NrOiBhbnkpIHtcblx0XHRcdGNvbnN0IG9Db250ZW50ID0gb0Jsb2NrLmdldENvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBvQmxvY2suZ2V0Q29udGVudCgpO1xuXHRcdFx0aWYgKG9Db250ZW50ICYmIG9Db250ZW50LmlzQSAmJiBvQ29udGVudC5pc0EoXCJzYXAudWkubGF5b3V0LkR5bmFtaWNTaWRlQ29udGVudFwiKSkge1xuXHRcdFx0XHRpZiAob0NvbnRlbnQuc2V0U2hvd1NpZGVDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcblx0XHRcdFx0XHRvQ29udGVudC5zZXRTaG93U2lkZUNvbnRlbnQoZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hhcnQgQ29udGV4dCBpcyByZXNvbHZlZCBmb3IgMTpuIG1pY3JvY2hhcnRzLlxuXHQgKlxuXHQgKiBAcGFyYW0gb0NoYXJ0Q29udGV4dCBUaGUgQ29udGV4dCBvZiB0aGUgTWljcm9DaGFydFxuXHQgKiBAcGFyYW0gc0NoYXJ0UGF0aCBUaGUgY29sbGVjdGlvblBhdGggb2YgdGhlIHRoZSBjaGFydFxuXHQgKiBAcmV0dXJucyBBcnJheSBvZiBBdHRyaWJ1dGVzIG9mIHRoZSBjaGFydCBDb250ZXh0XG5cdCAqL1xuXHRfZ2V0Q2hhcnRDb250ZXh0RGF0YShvQ2hhcnRDb250ZXh0OiBhbnksIHNDaGFydFBhdGg6IHN0cmluZykge1xuXHRcdGNvbnN0IG9Db250ZXh0RGF0YSA9IG9DaGFydENvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0bGV0IG9DaGFydENvbnRleHREYXRhID0gW29Db250ZXh0RGF0YV07XG5cdFx0aWYgKG9DaGFydENvbnRleHQgJiYgc0NoYXJ0UGF0aCkge1xuXHRcdFx0aWYgKG9Db250ZXh0RGF0YVtzQ2hhcnRQYXRoXSkge1xuXHRcdFx0XHRvQ2hhcnRDb250ZXh0RGF0YSA9IG9Db250ZXh0RGF0YVtzQ2hhcnRQYXRoXTtcblx0XHRcdFx0ZGVsZXRlIG9Db250ZXh0RGF0YVtzQ2hhcnRQYXRoXTtcblx0XHRcdFx0b0NoYXJ0Q29udGV4dERhdGEucHVzaChvQ29udGV4dERhdGEpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb0NoYXJ0Q29udGV4dERhdGE7XG5cdH1cblxuXHQvKipcblx0ICogU2Nyb2xsIHRoZSB0YWJsZXMgdG8gdGhlIHJvdyB3aXRoIHRoZSBzUGF0aFxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgc2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLk9iamVjdFBhZ2VDb250cm9sbGVyLmNvbnRyb2xsZXIjX3Njcm9sbFRhYmxlc1RvUm93XG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzUm93UGF0aCAnc1BhdGggb2YgdGhlIHRhYmxlIHJvdydcblx0ICovXG5cblx0X3Njcm9sbFRhYmxlc1RvUm93KHNSb3dQYXRoOiBzdHJpbmcpIHtcblx0XHRpZiAodGhpcy5fZmluZFRhYmxlcyAmJiB0aGlzLl9maW5kVGFibGVzKCkubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgYVRhYmxlcyA9IHRoaXMuX2ZpbmRUYWJsZXMoKTtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYVRhYmxlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRUYWJsZVNjcm9sbGVyLnNjcm9sbFRhYmxlVG9Sb3coYVRhYmxlc1tpXSwgc1Jvd1BhdGgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gbWVyZ2Ugc2VsZWN0ZWQgY29udGV4dHMgYW5kIGZpbHRlcnMuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBfbWVyZ2VNdWx0aXBsZUNvbnRleHRzXG5cdCAqIEBwYXJhbSBvUGFnZUNvbnRleHQgUGFnZSBjb250ZXh0XG5cdCAqIEBwYXJhbSBhTGluZUNvbnRleHQgU2VsZWN0ZWQgQ29udGV4dHNcblx0ICogQHBhcmFtIHNDaGFydFBhdGggQ29sbGVjdGlvbiBuYW1lIG9mIHRoZSBjaGFydFxuXHQgKiBAcmV0dXJucyBTZWxlY3Rpb24gVmFyaWFudCBPYmplY3Rcblx0ICovXG5cdF9tZXJnZU11bHRpcGxlQ29udGV4dHMob1BhZ2VDb250ZXh0OiBDb250ZXh0LCBhTGluZUNvbnRleHQ6IGFueVtdLCBzQ2hhcnRQYXRoOiBzdHJpbmcpIHtcblx0XHRsZXQgYUF0dHJpYnV0ZXM6IGFueVtdID0gW10sXG5cdFx0XHRhUGFnZUF0dHJpYnV0ZXMgPSBbXSxcblx0XHRcdG9Db250ZXh0LFxuXHRcdFx0c01ldGFQYXRoTGluZTogc3RyaW5nLFxuXHRcdFx0c1BhdGhMaW5lO1xuXG5cdFx0Y29uc3Qgc1BhZ2VQYXRoID0gb1BhZ2VDb250ZXh0LmdldFBhdGgoKTtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb1BhZ2VDb250ZXh0ICYmIG9QYWdlQ29udGV4dC5nZXRNb2RlbCgpICYmIChvUGFnZUNvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCk7XG5cdFx0Y29uc3Qgc01ldGFQYXRoUGFnZSA9IG9NZXRhTW9kZWwgJiYgb01ldGFNb2RlbC5nZXRNZXRhUGF0aChzUGFnZVBhdGgpLnJlcGxhY2UoL15cXC8qLywgXCJcIik7XG5cblx0XHQvLyBHZXQgc2luZ2xlIGxpbmUgY29udGV4dCBpZiBuZWNlc3Nhcnlcblx0XHRpZiAoYUxpbmVDb250ZXh0ICYmIGFMaW5lQ29udGV4dC5sZW5ndGgpIHtcblx0XHRcdG9Db250ZXh0ID0gYUxpbmVDb250ZXh0WzBdO1xuXHRcdFx0c1BhdGhMaW5lID0gb0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdFx0c01ldGFQYXRoTGluZSA9IG9NZXRhTW9kZWwgJiYgb01ldGFNb2RlbC5nZXRNZXRhUGF0aChzUGF0aExpbmUpLnJlcGxhY2UoL15cXC8qLywgXCJcIik7XG5cblx0XHRcdGFMaW5lQ29udGV4dC5mb3JFYWNoKChvU2luZ2xlQ29udGV4dDogYW55KSA9PiB7XG5cdFx0XHRcdGlmIChzQ2hhcnRQYXRoKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb0NoYXJ0Q29udGV4dERhdGEgPSB0aGlzLl9nZXRDaGFydENvbnRleHREYXRhKG9TaW5nbGVDb250ZXh0LCBzQ2hhcnRQYXRoKTtcblx0XHRcdFx0XHRpZiAob0NoYXJ0Q29udGV4dERhdGEpIHtcblx0XHRcdFx0XHRcdGFBdHRyaWJ1dGVzID0gb0NoYXJ0Q29udGV4dERhdGEubWFwKGZ1bmN0aW9uIChvU3ViQ2hhcnRDb250ZXh0RGF0YTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0Y29udGV4dERhdGE6IG9TdWJDaGFydENvbnRleHREYXRhLFxuXHRcdFx0XHRcdFx0XHRcdGVudGl0eVNldDogYCR7c01ldGFQYXRoUGFnZX0vJHtzQ2hhcnRQYXRofWBcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhQXR0cmlidXRlcy5wdXNoKHtcblx0XHRcdFx0XHRcdGNvbnRleHREYXRhOiBvU2luZ2xlQ29udGV4dC5nZXRPYmplY3QoKSxcblx0XHRcdFx0XHRcdGVudGl0eVNldDogc01ldGFQYXRoTGluZVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0YVBhZ2VBdHRyaWJ1dGVzLnB1c2goe1xuXHRcdFx0Y29udGV4dERhdGE6IG9QYWdlQ29udGV4dC5nZXRPYmplY3QoKSxcblx0XHRcdGVudGl0eVNldDogc01ldGFQYXRoUGFnZVxuXHRcdH0pO1xuXHRcdC8vIEFkZGluZyBQYWdlIENvbnRleHQgdG8gc2VsZWN0aW9uIHZhcmlhbnRcblx0XHRhUGFnZUF0dHJpYnV0ZXMgPSBDb21tb25VdGlscy5yZW1vdmVTZW5zaXRpdmVEYXRhKGFQYWdlQXR0cmlidXRlcywgb01ldGFNb2RlbCk7XG5cdFx0Y29uc3Qgb1BhZ2VMZXZlbFNWID0gQ29tbW9uVXRpbHMuYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQobmV3IFNlbGVjdGlvblZhcmlhbnQoKSwgYVBhZ2VBdHRyaWJ1dGVzLCB0aGlzLmdldFZpZXcoKSk7XG5cdFx0YUF0dHJpYnV0ZXMgPSBDb21tb25VdGlscy5yZW1vdmVTZW5zaXRpdmVEYXRhKGFBdHRyaWJ1dGVzLCBvTWV0YU1vZGVsKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VsZWN0aW9uVmFyaWFudDogb1BhZ2VMZXZlbFNWLFxuXHRcdFx0YXR0cmlidXRlczogYUF0dHJpYnV0ZXNcblx0XHR9O1xuXHR9XG5cblx0X2dldEJhdGNoR3JvdXBzRm9yVmlldygpIHtcblx0XHRjb25zdCBvVmlld0RhdGEgPSB0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSxcblx0XHRcdG9Db25maWd1cmF0aW9ucyA9IG9WaWV3RGF0YS5jb250cm9sQ29uZmlndXJhdGlvbixcblx0XHRcdGFDb25maWd1cmF0aW9ucyA9IG9Db25maWd1cmF0aW9ucyAmJiBPYmplY3Qua2V5cyhvQ29uZmlndXJhdGlvbnMpLFxuXHRcdFx0YUJhdGNoR3JvdXBzID0gW1wiJGF1dG8uSGVyb2VzXCIsIFwiJGF1dG8uRGVjb3JhdGlvblwiLCBcIiRhdXRvLldvcmtlcnNcIl07XG5cblx0XHRpZiAoYUNvbmZpZ3VyYXRpb25zICYmIGFDb25maWd1cmF0aW9ucy5sZW5ndGggPiAwKSB7XG5cdFx0XHRhQ29uZmlndXJhdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoc0tleTogYW55KSB7XG5cdFx0XHRcdGNvbnN0IG9Db25maWd1cmF0aW9uID0gb0NvbmZpZ3VyYXRpb25zW3NLZXldO1xuXHRcdFx0XHRpZiAob0NvbmZpZ3VyYXRpb24ucmVxdWVzdEdyb3VwSWQgPT09IFwiTG9uZ1J1bm5lcnNcIikge1xuXHRcdFx0XHRcdGFCYXRjaEdyb3Vwcy5wdXNoKFwiJGF1dG8uTG9uZ1J1bm5lcnNcIik7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gYUJhdGNoR3JvdXBzO1xuXHR9XG5cblx0Lypcblx0ICogUmVzZXQgQnJlYWRjcnVtYiBsaW5rc1xuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHtzYXAubS5CcmVhZGNydW1ic30gW29Tb3VyY2VdIHBhcmVudCBjb250cm9sXG5cdCAqIEBkZXNjcmlwdGlvbiBVc2VkIHdoZW4gY29udGV4dCBvZiB0aGUgb2JqZWN0IHBhZ2UgY2hhbmdlcy5cblx0ICogICAgICAgICAgICAgIFRoaXMgZXZlbnQgY2FsbGJhY2sgaXMgYXR0YWNoZWQgdG8gbW9kZWxDb250ZXh0Q2hhbmdlXG5cdCAqICAgICAgICAgICAgICBldmVudCBvZiB0aGUgQnJlYWRjcnVtYiBjb250cm9sIHRvIGNhdGNoIGNvbnRleHQgY2hhbmdlLlxuXHQgKiAgICAgICAgICAgICAgVGhlbiBlbGVtZW50IGJpbmRpbmcgYW5kIGhyZWZzIGFyZSB1cGRhdGVkIGZvciBlYWNoIGxpbmsuXG5cdCAqXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAZXhwZXJpbWVudGFsXG5cdCAqL1xuXHRhc3luYyBfc2V0QnJlYWRjcnVtYkxpbmtzKG9Tb3VyY2U6IEJyZWFkQ3J1bWJzKSB7XG5cdFx0Y29uc3Qgb0NvbnRleHQgPSBvU291cmNlLmdldEJpbmRpbmdDb250ZXh0KCksXG5cdFx0XHRvQXBwQ29tcG9uZW50ID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKSxcblx0XHRcdGFQcm9taXNlczogUHJvbWlzZTx2b2lkPltdID0gW10sXG5cdFx0XHRhU2tpcFBhcmFtZXRlcml6ZWQ6IGFueVtdID0gW10sXG5cdFx0XHRzTmV3UGF0aCA9IG9Db250ZXh0Py5nZXRQYXRoKCksXG5cdFx0XHRhUGF0aFBhcnRzID0gc05ld1BhdGg/LnNwbGl0KFwiL1wiKSA/PyBbXSxcblx0XHRcdG9NZXRhTW9kZWwgPSBvQXBwQ29tcG9uZW50ICYmIG9BcHBDb21wb25lbnQuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0bGV0IHNQYXRoID0gXCJcIjtcblx0XHR0cnkge1xuXHRcdFx0YVBhdGhQYXJ0cy5zaGlmdCgpO1xuXHRcdFx0YVBhdGhQYXJ0cy5zcGxpY2UoLTEsIDEpO1xuXHRcdFx0YVBhdGhQYXJ0cy5mb3JFYWNoKGZ1bmN0aW9uIChzUGF0aFBhcnQ6IGFueSkge1xuXHRcdFx0XHRzUGF0aCArPSBgLyR7c1BhdGhQYXJ0fWA7XG5cdFx0XHRcdGNvbnN0IG9Sb290Vmlld0NvbnRyb2xsZXIgPSBvQXBwQ29tcG9uZW50LmdldFJvb3RWaWV3Q29udHJvbGxlcigpIGFzIFJvb3RDb250YWluZXJCYXNlQ29udHJvbGxlcjtcblx0XHRcdFx0Y29uc3Qgc1BhcmFtZXRlclBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNQYXRoKTtcblx0XHRcdFx0Y29uc3QgYlJlc3VsdENvbnRleHQgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzUGFyYW1ldGVyUGF0aH0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZXN1bHRDb250ZXh0YCk7XG5cdFx0XHRcdGlmIChiUmVzdWx0Q29udGV4dCkge1xuXHRcdFx0XHRcdC8vIFdlIGRvbnQgbmVlZCB0byBjcmVhdGUgYSBicmVhZGNydW1iIGZvciBQYXJhbWV0ZXIgcGF0aFxuXHRcdFx0XHRcdGFTa2lwUGFyYW1ldGVyaXplZC5wdXNoKDEpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhU2tpcFBhcmFtZXRlcml6ZWQucHVzaCgwKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRhUHJvbWlzZXMucHVzaChvUm9vdFZpZXdDb250cm9sbGVyLmdldFRpdGxlSW5mb0Zyb21QYXRoKHNQYXRoKSk7XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IHRpdGxlSGllcmFyY2h5SW5mb3M6IGFueVtdID0gYXdhaXQgUHJvbWlzZS5hbGwoYVByb21pc2VzKTtcblx0XHRcdGxldCBpZHgsIGhpZXJhcmNoeVBvc2l0aW9uLCBvTGluaztcblx0XHRcdGZvciAoY29uc3QgdGl0bGVIaWVyYXJjaHlJbmZvIG9mIHRpdGxlSGllcmFyY2h5SW5mb3MpIHtcblx0XHRcdFx0aGllcmFyY2h5UG9zaXRpb24gPSB0aXRsZUhpZXJhcmNoeUluZm9zLmluZGV4T2YodGl0bGVIaWVyYXJjaHlJbmZvKTtcblx0XHRcdFx0aWR4ID0gaGllcmFyY2h5UG9zaXRpb24gLSBhU2tpcFBhcmFtZXRlcml6ZWRbaGllcmFyY2h5UG9zaXRpb25dO1xuXHRcdFx0XHRvTGluayA9IG9Tb3VyY2UuZ2V0TGlua3MoKVtpZHhdID8gb1NvdXJjZS5nZXRMaW5rcygpW2lkeF0gOiBuZXcgTGluaygpO1xuXHRcdFx0XHQvL3NDdXJyZW50RW50aXR5IGlzIGEgZmFsbGJhY2sgdmFsdWUgaW4gY2FzZSBvZiBlbXB0eSB0aXRsZVxuXHRcdFx0XHRvTGluay5zZXRUZXh0KHRpdGxlSGllcmFyY2h5SW5mby5zdWJ0aXRsZSB8fCB0aXRsZUhpZXJhcmNoeUluZm8udGl0bGUpO1xuXHRcdFx0XHQvL1dlIGFwcGx5IGFuIGFkZGl0aW9uYWwgZW5jb2RlVVJJIGluIGNhc2Ugb2Ygc3BlY2lhbCBjaGFyYWN0ZXJzIChpZSBcIi9cIikgdXNlZCBpbiB0aGUgdXJsIHRocm91Z2ggdGhlIHNlbWFudGljIGtleXNcblx0XHRcdFx0b0xpbmsuc2V0SHJlZihlbmNvZGVVUkkodGl0bGVIaWVyYXJjaHlJbmZvLmludGVudCkpO1xuXHRcdFx0XHRpZiAoIW9Tb3VyY2UuZ2V0TGlua3MoKVtpZHhdKSB7XG5cdFx0XHRcdFx0b1NvdXJjZS5hZGRMaW5rKG9MaW5rKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcblx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHNldHRpbmcgdGhlIGJyZWFkY3J1bWIgbGlua3M6XCIgKyBlcnJvcik7XG5cdFx0fVxuXHR9XG5cblx0X2NoZWNrRGF0YVBvaW50VGl0bGVGb3JFeHRlcm5hbE5hdmlnYXRpb24oKSB7XG5cdFx0Y29uc3Qgb1ZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IG9EYXRhUG9pbnRzID0gQ29tbW9uVXRpbHMuZ2V0SGVhZGVyRmFjZXRJdGVtQ29uZmlnRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uKFxuXHRcdFx0b1ZpZXcuZ2V0Vmlld0RhdGEoKSxcblx0XHRcdHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um91dGluZ1NlcnZpY2UoKS5nZXRPdXRib3VuZHMoKVxuXHRcdCk7XG5cdFx0Y29uc3Qgb1NoZWxsU2VydmljZXMgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFNoZWxsU2VydmljZXMoKTtcblx0XHRjb25zdCBvUGFnZUNvbnRleHQgPSBvVmlldyAmJiAob1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJpc0hlYWRlckRQTGlua1Zpc2libGVcIiwge30pO1xuXHRcdGlmIChvUGFnZUNvbnRleHQpIHtcblx0XHRcdG9QYWdlQ29udGV4dFxuXHRcdFx0XHQucmVxdWVzdE9iamVjdCgpXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChvRGF0YTogYW55KSB7XG5cdFx0XHRcdFx0Zm5HZXRMaW5rcyhvRGF0YVBvaW50cywgb0RhdGEpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IHJldHJpZXZlIHRoZSBsaW5rcyBmcm9tIHRoZSBzaGVsbCBzZXJ2aWNlXCIsIG9FcnJvcik7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSBvRXJyb3Jcblx0XHQgKi9cblx0XHRmdW5jdGlvbiBmbk9uRXJyb3Iob0Vycm9yOiBhbnkpIHtcblx0XHRcdExvZy5lcnJvcihvRXJyb3IpO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGZuU2V0TGlua0VuYWJsZW1lbnQoaWQ6IHN0cmluZywgYVN1cHBvcnRlZExpbmtzOiBhbnkpIHtcblx0XHRcdGNvbnN0IHNMaW5rSWQgPSBpZDtcblx0XHRcdC8vIHByb2Nlc3MgdmlhYmxlIGxpbmtzIGZyb20gZ2V0TGlua3MgZm9yIGFsbCBkYXRhcG9pbnRzIGhhdmluZyBvdXRib3VuZFxuXHRcdFx0aWYgKGFTdXBwb3J0ZWRMaW5rcyAmJiBhU3VwcG9ydGVkTGlua3MubGVuZ3RoID09PSAxICYmIGFTdXBwb3J0ZWRMaW5rc1swXS5zdXBwb3J0ZWQpIHtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KGBpc0hlYWRlckRQTGlua1Zpc2libGUvJHtzTGlua0lkfWAsIHRydWUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSBvU3ViRGF0YVBvaW50c1xuXHRcdCAqIEBwYXJhbSBvUGFnZURhdGFcblx0XHQgKi9cblx0XHRmdW5jdGlvbiBmbkdldExpbmtzKG9TdWJEYXRhUG9pbnRzOiBhbnksIG9QYWdlRGF0YTogYW55KSB7XG5cdFx0XHRmb3IgKGNvbnN0IHNJZCBpbiBvU3ViRGF0YVBvaW50cykge1xuXHRcdFx0XHRjb25zdCBvRGF0YVBvaW50ID0gb1N1YkRhdGFQb2ludHNbc0lkXTtcblx0XHRcdFx0Y29uc3Qgb1BhcmFtczogYW55ID0ge307XG5cdFx0XHRcdGNvbnN0IG9MaW5rID0gb1ZpZXcuYnlJZChzSWQpO1xuXHRcdFx0XHRpZiAoIW9MaW5rKSB7XG5cdFx0XHRcdFx0Ly8gZm9yIGRhdGEgcG9pbnRzIGNvbmZpZ3VyZWQgaW4gYXBwIGRlc2NyaXB0b3IgYnV0IG5vdCBhbm5vdGF0ZWQgaW4gdGhlIGhlYWRlclxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IG9MaW5rQ29udGV4dCA9IG9MaW5rLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0XHRcdGNvbnN0IG9MaW5rRGF0YTogYW55ID0gb0xpbmtDb250ZXh0ICYmIG9MaW5rQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0bGV0IG9NaXhlZENvbnRleHQ6IGFueSA9IG1lcmdlKHt9LCBvUGFnZURhdGEsIG9MaW5rRGF0YSk7XG5cdFx0XHRcdC8vIHByb2Nlc3Mgc2VtYW50aWMgb2JqZWN0IG1hcHBpbmdzXG5cdFx0XHRcdGlmIChvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0TWFwcGluZykge1xuXHRcdFx0XHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0TWFwcGluZztcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW0gaW4gYVNlbWFudGljT2JqZWN0TWFwcGluZykge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb01hcHBpbmcgPSBhU2VtYW50aWNPYmplY3RNYXBwaW5nW2l0ZW1dO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc01haW5Qcm9wZXJ0eSA9IG9NYXBwaW5nW1wiTG9jYWxQcm9wZXJ0eVwiXVtcIiRQcm9wZXJ0eVBhdGhcIl07XG5cdFx0XHRcdFx0XHRjb25zdCBzTWFwcGVkUHJvcGVydHkgPSBvTWFwcGluZ1tcIlNlbWFudGljT2JqZWN0UHJvcGVydHlcIl07XG5cdFx0XHRcdFx0XHRpZiAoc01haW5Qcm9wZXJ0eSAhPT0gc01hcHBlZFByb3BlcnR5KSB7XG5cdFx0XHRcdFx0XHRcdGlmIChvTWl4ZWRDb250ZXh0Lmhhc093blByb3BlcnR5KHNNYWluUHJvcGVydHkpKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb05ld01hcHBpbmc6IGFueSA9IHt9O1xuXHRcdFx0XHRcdFx0XHRcdG9OZXdNYXBwaW5nW3NNYXBwZWRQcm9wZXJ0eV0gPSBvTWl4ZWRDb250ZXh0W3NNYWluUHJvcGVydHldO1xuXHRcdFx0XHRcdFx0XHRcdG9NaXhlZENvbnRleHQgPSBtZXJnZSh7fSwgb01peGVkQ29udGV4dCwgb05ld01hcHBpbmcpO1xuXHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSBvTWl4ZWRDb250ZXh0W3NNYWluUHJvcGVydHldO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKG9NaXhlZENvbnRleHQpIHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHNLZXkgaW4gb01peGVkQ29udGV4dCkge1xuXHRcdFx0XHRcdFx0aWYgKHNLZXkuaW5kZXhPZihcIl9cIikgIT09IDAgJiYgc0tleS5pbmRleE9mKFwib2RhdGEuY29udGV4dFwiKSA9PT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0b1BhcmFtc1tzS2V5XSA9IG9NaXhlZENvbnRleHRbc0tleV07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIHZhbGlkYXRlIGlmIGEgbGluayBtdXN0IGJlIHJlbmRlcmVkXG5cdFx0XHRcdG9TaGVsbFNlcnZpY2VzXG5cdFx0XHRcdFx0LmlzTmF2aWdhdGlvblN1cHBvcnRlZChbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhcmdldDoge1xuXHRcdFx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRcdGFjdGlvbjogb0RhdGFQb2ludC5hY3Rpb25cblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0cGFyYW1zOiBvUGFyYW1zXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XSlcblx0XHRcdFx0XHQudGhlbigoYUxpbmtzKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZm5TZXRMaW5rRW5hYmxlbWVudChzSWQsIGFMaW5rcyk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZm5PbkVycm9yKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRoYW5kbGVycyA9IHtcblx0XHRvblRhYmxlQ29udGV4dENoYW5nZSh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlciwgb0V2ZW50OiBhbnkpIHtcblx0XHRcdGNvbnN0IG9Tb3VyY2UgPSBvRXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0XHRsZXQgb1RhYmxlOiBhbnk7XG5cdFx0XHR0aGlzLl9maW5kVGFibGVzKCkuc29tZShmdW5jdGlvbiAoX29UYWJsZTogYW55KSB7XG5cdFx0XHRcdGlmIChfb1RhYmxlLmdldFJvd0JpbmRpbmcoKSA9PT0gb1NvdXJjZSkge1xuXHRcdFx0XHRcdG9UYWJsZSA9IF9vVGFibGU7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSk7XG5cblx0XHRcdGNvbnN0IG9DdXJyZW50QWN0aW9uUHJvbWlzZSA9IHRoaXMuX2VkaXRGbG93LmdldEN1cnJlbnRBY3Rpb25Qcm9taXNlKCk7XG5cdFx0XHRpZiAob0N1cnJlbnRBY3Rpb25Qcm9taXNlKSB7XG5cdFx0XHRcdGxldCBhVGFibGVDb250ZXh0czogYW55O1xuXHRcdFx0XHRpZiAob1RhYmxlLmdldFR5cGUoKS5nZXRNZXRhZGF0YSgpLmlzQShcInNhcC51aS5tZGMudGFibGUuR3JpZFRhYmxlVHlwZVwiKSkge1xuXHRcdFx0XHRcdGFUYWJsZUNvbnRleHRzID0gb1NvdXJjZS5nZXRDb250ZXh0cygwKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhVGFibGVDb250ZXh0cyA9IG9Tb3VyY2UuZ2V0Q3VycmVudENvbnRleHRzKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly9pZiBjb250ZXh0cyBhcmUgbm90IGZ1bGx5IGxvYWRlZCB0aGUgZ2V0Y29udGV4dHMgZnVuY3Rpb24gYWJvdmUgd2lsbCB0cmlnZ2VyIGEgbmV3IGNoYW5nZSBldmVudCBjYWxsXG5cdFx0XHRcdGlmICghYVRhYmxlQ29udGV4dHNbMF0pIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0b0N1cnJlbnRBY3Rpb25Qcm9taXNlXG5cdFx0XHRcdFx0LnRoZW4oKG9BY3Rpb25SZXNwb25zZTogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoIW9BY3Rpb25SZXNwb25zZSB8fCBvQWN0aW9uUmVzcG9uc2UuY29udHJvbElkICE9PSBvVGFibGUuc0lkKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGNvbnN0IG9BY3Rpb25EYXRhID0gb0FjdGlvblJlc3BvbnNlLm9EYXRhO1xuXHRcdFx0XHRcdFx0Y29uc3QgYUtleXMgPSBvQWN0aW9uUmVzcG9uc2Uua2V5cztcblx0XHRcdFx0XHRcdGxldCBpTmV3SXRlbXAgPSAtMTtcblx0XHRcdFx0XHRcdGFUYWJsZUNvbnRleHRzLmZpbmQoZnVuY3Rpb24gKG9UYWJsZUNvbnRleHQ6IGFueSwgaTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9UYWJsZURhdGEgPSBvVGFibGVDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBiQ29tcGFyZSA9IGFLZXlzLmV2ZXJ5KGZ1bmN0aW9uIChzS2V5OiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gb1RhYmxlRGF0YVtzS2V5XSA9PT0gb0FjdGlvbkRhdGFbc0tleV07XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRpZiAoYkNvbXBhcmUpIHtcblx0XHRcdFx0XHRcdFx0XHRpTmV3SXRlbXAgPSBpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiBiQ29tcGFyZTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0aWYgKGlOZXdJdGVtcCAhPT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYURpYWxvZ3MgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0T3BlbkRpYWxvZ3MoKTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb0RpYWxvZyA9XG5cdFx0XHRcdFx0XHRcdFx0YURpYWxvZ3MubGVuZ3RoID4gMCA/IGFEaWFsb2dzLmZpbmQoKGRpYWxvZykgPT4gZGlhbG9nLmRhdGEoXCJGdWxsU2NyZWVuRGlhbG9nXCIpICE9PSB0cnVlKSA6IG51bGw7XG5cdFx0XHRcdFx0XHRcdGlmIChvRGlhbG9nKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gYnkgZGVzaWduLCBhIHNhcC5tLmRpYWxvZyBzZXQgdGhlIGZvY3VzIHRvIHRoZSBwcmV2aW91cyBmb2N1c2VkIGVsZW1lbnQgd2hlbiBjbG9zaW5nLlxuXHRcdFx0XHRcdFx0XHRcdC8vIHdlIHNob3VsZCB3YWl0IGZvciB0aGUgZGlhbG9nIHRvIGJlIGNsb3NlIGJlZm9yZSB0byBmb2N1cyBhbm90aGVyIGVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRvRGlhbG9nLmF0dGFjaEV2ZW50T25jZShcImFmdGVyQ2xvc2VcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0b1RhYmxlLmZvY3VzUm93KGlOZXdJdGVtcCwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0b1RhYmxlLmZvY3VzUm93KGlOZXdJdGVtcCwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0dGhpcy5fZWRpdEZsb3cuZGVsZXRlQ3VycmVudEFjdGlvblByb21pc2UoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyOiBhbnkpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihgQW4gZXJyb3Igb2NjdXJzIHdoaWxlIHNjcm9sbGluZyB0byB0aGUgbmV3bHkgY3JlYXRlZCBJdGVtOiAke2Vycn1gKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdC8vIGZpcmUgTW9kZWxDb250ZXh0Q2hhbmdlIG9uIHRoZSBtZXNzYWdlIGJ1dHRvbiB3aGVuZXZlciB0aGUgdGFibGUgY29udGV4dCBjaGFuZ2VzXG5cdFx0XHR0aGlzLm1lc3NhZ2VCdXR0b24uZmlyZU1vZGVsQ29udGV4dENoYW5nZSgpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBJbnZva2VzIGFuIGFjdGlvbiAtIGJvdW5kL3VuYm91bmQgYW5kIHNldHMgdGhlIHBhZ2UgZGlydHkuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0gb1ZpZXdcblx0XHQgKiBAcGFyYW0gc0FjdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGFjdGlvbiB0byBiZSBjYWxsZWRcblx0XHQgKiBAcGFyYW0gW21QYXJhbWV0ZXJzXSBDb250YWlucyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG5cdFx0ICogQHBhcmFtIFttUGFyYW1ldGVycy5jb250ZXh0c10gTWFuZGF0b3J5IGZvciBhIGJvdW5kIGFjdGlvbiwgZWl0aGVyIG9uZSBjb250ZXh0IG9yIGFuIGFycmF5IHdpdGggY29udGV4dHMgZm9yIHdoaWNoIHRoZSBhY3Rpb24gaXMgY2FsbGVkXG5cdFx0ICogQHBhcmFtIFttUGFyYW1ldGVycy5tb2RlbF0gTWFuZGF0b3J5IGZvciBhbiB1bmJvdW5kIGFjdGlvbjsgYW4gaW5zdGFuY2Ugb2YgYW4gT0RhdGEgVjQgbW9kZWxcblx0XHQgKiBAcmV0dXJucyBUaGUgYWN0aW9uIHByb21pc2Vcblx0XHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0XHQgKiBAZmluYWxcblx0XHQgKi9cblx0XHRvbkNhbGxBY3Rpb24ob1ZpZXc6IGFueSwgc0FjdGlvbk5hbWU6IHN0cmluZywgbVBhcmFtZXRlcnM6IGFueSkge1xuXHRcdFx0Y29uc3Qgb0NvbnRyb2xsZXIgPSBvVmlldy5nZXRDb250cm9sbGVyKCk7XG5cdFx0XHRyZXR1cm4gb0NvbnRyb2xsZXIuZWRpdEZsb3dcblx0XHRcdFx0Lmludm9rZUFjdGlvbihzQWN0aW9uTmFtZSwgbVBhcmFtZXRlcnMpXG5cdFx0XHRcdC50aGVuKG9Db250cm9sbGVyLl9zaG93TWVzc2FnZVBvcG92ZXIuYmluZChvQ29udHJvbGxlciwgdW5kZWZpbmVkKSlcblx0XHRcdFx0LmNhdGNoKG9Db250cm9sbGVyLl9zaG93TWVzc2FnZVBvcG92ZXIuYmluZChvQ29udHJvbGxlcikpO1xuXHRcdH0sXG5cdFx0b25EYXRhUG9pbnRUaXRsZVByZXNzZWQob0NvbnRyb2xsZXI6IGFueSwgb1NvdXJjZTogYW55LCBvTWFuaWZlc3RPdXRib3VuZDogYW55LCBzQ29udHJvbENvbmZpZzogYW55LCBzQ29sbGVjdGlvblBhdGg6IGFueSkge1xuXHRcdFx0b01hbmlmZXN0T3V0Ym91bmQgPSB0eXBlb2Ygb01hbmlmZXN0T3V0Ym91bmQgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKG9NYW5pZmVzdE91dGJvdW5kKSA6IG9NYW5pZmVzdE91dGJvdW5kO1xuXHRcdFx0Y29uc3Qgb1RhcmdldEluZm8gPSBvTWFuaWZlc3RPdXRib3VuZFtzQ29udHJvbENvbmZpZ10sXG5cdFx0XHRcdGFTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBDb21tb25VdGlscy5nZXRTZW1hbnRpY09iamVjdE1hcHBpbmcob1RhcmdldEluZm8pLFxuXHRcdFx0XHRvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0ID0gb1NvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpLFxuXHRcdFx0XHRzTWV0YVBhdGggPSBvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0XG5cdFx0XHRcdFx0LmdldE1vZGVsKClcblx0XHRcdFx0XHQuZ2V0TWV0YU1vZGVsKClcblx0XHRcdFx0XHQuZ2V0TWV0YVBhdGgob0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdFx0bGV0IGFOYXZpZ2F0aW9uRGF0YSA9IG9Db250cm9sbGVyLl9nZXRDaGFydENvbnRleHREYXRhKG9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHQsIHNDb2xsZWN0aW9uUGF0aCk7XG5cdFx0XHRsZXQgYWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzO1xuXG5cdFx0XHRhTmF2aWdhdGlvbkRhdGEgPSBhTmF2aWdhdGlvbkRhdGEubWFwKGZ1bmN0aW9uIChvTmF2aWdhdGlvbkRhdGE6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdGRhdGE6IG9OYXZpZ2F0aW9uRGF0YSxcblx0XHRcdFx0XHRtZXRhUGF0aDogc01ldGFQYXRoICsgKHNDb2xsZWN0aW9uUGF0aCA/IGAvJHtzQ29sbGVjdGlvblBhdGh9YCA6IFwiXCIpXG5cdFx0XHRcdH07XG5cdFx0XHR9KTtcblx0XHRcdGlmIChvVGFyZ2V0SW5mbyAmJiBvVGFyZ2V0SW5mby5wYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdGNvbnN0IG9QYXJhbXMgPSBvVGFyZ2V0SW5mby5wYXJhbWV0ZXJzICYmIG9Db250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24uZ2V0T3V0Ym91bmRQYXJhbXMob1RhcmdldEluZm8ucGFyYW1ldGVycyk7XG5cdFx0XHRcdGlmIChPYmplY3Qua2V5cyhvUGFyYW1zKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0YWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzID0gb1BhcmFtcztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKG9UYXJnZXRJbmZvICYmIG9UYXJnZXRJbmZvLnNlbWFudGljT2JqZWN0ICYmIG9UYXJnZXRJbmZvLmFjdGlvbikge1xuXHRcdFx0XHRvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlKG9UYXJnZXRJbmZvLnNlbWFudGljT2JqZWN0LCBvVGFyZ2V0SW5mby5hY3Rpb24sIHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHM6IGFOYXZpZ2F0aW9uRGF0YSxcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdE1hcHBpbmc6IGFTZW1hbnRpY09iamVjdE1hcHBpbmcsXG5cdFx0XHRcdFx0YWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzOiBhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnNcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBUcmlnZ2VycyBhbiBvdXRib3VuZCBuYXZpZ2F0aW9uIHdoZW4gYSB1c2VyIGNob29zZXMgdGhlIGNoZXZyb24uXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0gb0NvbnRyb2xsZXJcblx0XHQgKiBAcGFyYW0gc091dGJvdW5kVGFyZ2V0IE5hbWUgb2YgdGhlIG91dGJvdW5kIHRhcmdldCAobmVlZHMgdG8gYmUgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QpXG5cdFx0ICogQHBhcmFtIG9Db250ZXh0IFRoZSBjb250ZXh0IHRoYXQgY29udGFpbnMgdGhlIGRhdGEgZm9yIHRoZSB0YXJnZXQgYXBwXG5cdFx0ICogQHBhcmFtIHNDcmVhdGVQYXRoIENyZWF0ZSBwYXRoIHdoZW4gdGhlIGNoZXZyb24gaXMgY3JlYXRlZC5cblx0XHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIGlzIHJlc29sdmVkIG9uY2UgdGhlIG5hdmlnYXRpb24gaXMgdHJpZ2dlcmVkICg/Pz8gbWF5YmUgb25seSBvbmNlIGZpbmlzaGVkPylcblx0XHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0XHQgKiBAZmluYWxcblx0XHQgKi9cblx0XHRvbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQob0NvbnRyb2xsZXI6IE9iamVjdFBhZ2VDb250cm9sbGVyLCBzT3V0Ym91bmRUYXJnZXQ6IHN0cmluZywgb0NvbnRleHQ6IGFueSwgc0NyZWF0ZVBhdGg6IHN0cmluZykge1xuXHRcdFx0cmV0dXJuIG9Db250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ub25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kKG9Db250cm9sbGVyLCBzT3V0Ym91bmRUYXJnZXQsIG9Db250ZXh0LCBzQ3JlYXRlUGF0aCk7XG5cdFx0fSxcblxuXHRcdG9uTmF2aWdhdGVDaGFuZ2UodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIsIG9FdmVudDogYW55KSB7XG5cdFx0XHQvL3dpbGwgYmUgY2FsbGVkIGFsd2F5cyB3aGVuIHdlIGNsaWNrIG9uIGEgc2VjdGlvbiB0YWJcblx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdHRoaXMuYlNlY3Rpb25OYXZpZ2F0ZWQgPSB0cnVlO1xuXG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRvT2JqZWN0UGFnZS5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIikgJiZcblx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55KS5zZWN0aW9uTGF5b3V0ID09PSBcIlRhYnNcIiAmJlxuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJlcnJvck5hdmlnYXRpb25TZWN0aW9uRmxhZ1wiKSA9PT0gZmFsc2Vcblx0XHRcdCkge1xuXHRcdFx0XHRjb25zdCBvU3ViU2VjdGlvbiA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJzdWJTZWN0aW9uXCIpO1xuXHRcdFx0XHR0aGlzLl91cGRhdGVGb2N1c0luRWRpdE1vZGUoW29TdWJTZWN0aW9uXSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRvblZhcmlhbnRTZWxlY3RlZDogZnVuY3Rpb24gKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyKSB7XG5cdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0fSxcblx0XHRvblZhcmlhbnRTYXZlZDogZnVuY3Rpb24gKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyKSB7XG5cdFx0XHQvL1RPRE86IFNob3VsZCByZW1vdmUgdGhpcyBzZXRUaW1lT3V0IG9uY2UgVmFyaWFudCBNYW5hZ2VtZW50IHByb3ZpZGVzIGFuIGFwaSB0byBmZXRjaCB0aGUgY3VycmVudCB2YXJpYW50IGtleSBvbiBzYXZlXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0fSwgNTAwKTtcblx0XHR9LFxuXHRcdG5hdmlnYXRlVG9TdWJTZWN0aW9uOiBmdW5jdGlvbiAob0NvbnRyb2xsZXI6IE9iamVjdFBhZ2VDb250cm9sbGVyLCB2RGV0YWlsQ29uZmlnOiBhbnkpIHtcblx0XHRcdGNvbnN0IG9EZXRhaWxDb25maWcgPSB0eXBlb2YgdkRldGFpbENvbmZpZyA9PT0gXCJzdHJpbmdcIiA/IEpTT04ucGFyc2UodkRldGFpbENvbmZpZykgOiB2RGV0YWlsQ29uZmlnO1xuXHRcdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSBvQ29udHJvbGxlci5nZXRWaWV3KCkuYnlJZChcImZlOjpPYmplY3RQYWdlXCIpIGFzIE9iamVjdFBhZ2VMYXlvdXQ7XG5cdFx0XHRsZXQgb1NlY3Rpb247XG5cdFx0XHRsZXQgb1N1YlNlY3Rpb247XG5cdFx0XHRpZiAob0RldGFpbENvbmZpZy5zZWN0aW9uSWQpIHtcblx0XHRcdFx0b1NlY3Rpb24gPSBvQ29udHJvbGxlci5nZXRWaWV3KCkuYnlJZChvRGV0YWlsQ29uZmlnLnNlY3Rpb25JZCkgYXMgT2JqZWN0UGFnZVNlY3Rpb247XG5cdFx0XHRcdG9TdWJTZWN0aW9uID0gKFxuXHRcdFx0XHRcdG9EZXRhaWxDb25maWcuc3ViU2VjdGlvbklkXG5cdFx0XHRcdFx0XHQ/IG9Db250cm9sbGVyLmdldFZpZXcoKS5ieUlkKG9EZXRhaWxDb25maWcuc3ViU2VjdGlvbklkKVxuXHRcdFx0XHRcdFx0OiBvU2VjdGlvbiAmJiBvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpICYmIG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKClbMF1cblx0XHRcdFx0KSBhcyBPYmplY3RQYWdlU3ViU2VjdGlvbjtcblx0XHRcdH0gZWxzZSBpZiAob0RldGFpbENvbmZpZy5zdWJTZWN0aW9uSWQpIHtcblx0XHRcdFx0b1N1YlNlY3Rpb24gPSBvQ29udHJvbGxlci5nZXRWaWV3KCkuYnlJZChvRGV0YWlsQ29uZmlnLnN1YlNlY3Rpb25JZCkgYXMgT2JqZWN0UGFnZVN1YlNlY3Rpb247XG5cdFx0XHRcdG9TZWN0aW9uID0gb1N1YlNlY3Rpb24gJiYgKG9TdWJTZWN0aW9uLmdldFBhcmVudCgpIGFzIE9iamVjdFBhZ2VTZWN0aW9uKTtcblx0XHRcdH1cblx0XHRcdGlmICghb1NlY3Rpb24gfHwgIW9TdWJTZWN0aW9uIHx8ICFvU2VjdGlvbi5nZXRWaXNpYmxlKCkgfHwgIW9TdWJTZWN0aW9uLmdldFZpc2libGUoKSkge1xuXHRcdFx0XHQoKG9Db250cm9sbGVyLmdldFZpZXcoKS5nZXRNb2RlbChcInNhcC5mZS5pMThuXCIpIGFzIFJlc291cmNlTW9kZWwpLmdldFJlc291cmNlQnVuZGxlKCkgYXMgUHJvbWlzZTxSZXNvdXJjZUJ1bmRsZT4pXG5cdFx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKG9SZXNvdXJjZUJ1bmRsZSkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgc1RpdGxlID0gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXG5cdFx0XHRcdFx0XHRcdFwiQ19ST1VUSU5HX05BVklHQVRJT05fRElTQUJMRURfVElUTEVcIixcblx0XHRcdFx0XHRcdFx0b1Jlc291cmNlQnVuZGxlLFxuXHRcdFx0XHRcdFx0XHRudWxsLFxuXHRcdFx0XHRcdFx0XHQob0NvbnRyb2xsZXIuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55KS5lbnRpdHlTZXRcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3Ioc1RpdGxlKTtcblx0XHRcdFx0XHRcdE1lc3NhZ2VCb3guZXJyb3Ioc1RpdGxlKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihlcnJvcik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvT2JqZWN0UGFnZS5zY3JvbGxUb1NlY3Rpb24ob1N1YlNlY3Rpb24uZ2V0SWQoKSk7XG5cdFx0XHRcdC8vIHRyaWdnZXIgaWFwcCBzdGF0ZSBjaGFuZ2Vcblx0XHRcdFx0b09iamVjdFBhZ2UuZmlyZU5hdmlnYXRlKHtcblx0XHRcdFx0XHRzZWN0aW9uOiBvU2VjdGlvbixcblx0XHRcdFx0XHRzdWJTZWN0aW9uOiBvU3ViU2VjdGlvblxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdG9uQ2hhcnRTZWxlY3Rpb25DaGFuZ2VkOiBmdW5jdGlvbiAob0V2ZW50OiBhbnkpIHtcblx0XHRcdENoYXJ0UnVudGltZS5mblVwZGF0ZUNoYXJ0KG9FdmVudCk7XG5cdFx0fVxuXHR9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBPYmplY3RQYWdlQ29udHJvbGxlcjtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBa2pCTyxnQkFBZ0JBLElBQWhCLEVBQXNCQyxPQUF0QixFQUErQjtJQUNyQyxJQUFJO01BQ0gsSUFBSUMsTUFBTSxHQUFHRixJQUFJLEVBQWpCO0lBQ0EsQ0FGRCxDQUVFLE9BQU1HLENBQU4sRUFBUztNQUNWLE9BQU9GLE9BQU8sQ0FBQ0UsQ0FBRCxDQUFkO0lBQ0E7O0lBQ0QsSUFBSUQsTUFBTSxJQUFJQSxNQUFNLENBQUNFLElBQXJCLEVBQTJCO01BQzFCLE9BQU9GLE1BQU0sQ0FBQ0UsSUFBUCxDQUFZLEtBQUssQ0FBakIsRUFBb0JILE9BQXBCLENBQVA7SUFDQTs7SUFDRCxPQUFPQyxNQUFQO0VBQ0E7O0VBR00sMEJBQTBCRixJQUExQixFQUFnQ0ssU0FBaEMsRUFBMkM7SUFDakQsSUFBSTtNQUNILElBQUlILE1BQU0sR0FBR0YsSUFBSSxFQUFqQjtJQUNBLENB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
|