@sapui5/sap.fe.templates 1.108.0 → 1.109.0
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/ExtensionAPI.js +7 -2
- package/src/sap/fe/templates/ListReport/ExtensionAPI.ts +5 -0
- package/src/sap/fe/templates/ListReport/ListReport.view.xml +0 -6
- package/src/sap/fe/templates/ListReport/ListReportController.controller.js +4 -6
- package/src/sap/fe/templates/ListReport/ListReportController.controller.ts +1 -6
- package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.js +1 -1
- package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.ts +2 -2
- package/src/sap/fe/templates/ListReport/overrides/IntentBasedNavigation.js +1 -1
- package/src/sap/fe/templates/ListReport/overrides/IntentBasedNavigation.ts +3 -2
- package/src/sap/fe/templates/ListReport/overrides/ViewState.js +126 -73
- package/src/sap/fe/templates/ListReport/overrides/ViewState.ts +52 -13
- package/src/sap/fe/templates/ObjectPage/Component.js +2 -2
- package/src/sap/fe/templates/ObjectPage/Component.ts +3 -3
- package/src/sap/fe/templates/ObjectPage/ExtensionAPI.js +4 -2
- package/src/sap/fe/templates/ObjectPage/ExtensionAPI.ts +4 -3
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +11 -6
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.ts +16 -13
- package/src/sap/fe/templates/ObjectPage/components/DraftHandlerButton.js +1 -1
- package/src/sap/fe/templates/ObjectPage/components/DraftHandlerButton.tsx +3 -2
- package/src/sap/fe/templates/ObjectPage/overrides/IntentBasedNavigation.js +3 -2
- package/src/sap/fe/templates/ObjectPage/overrides/IntentBasedNavigation.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 +1 -0
- package/src/sap/fe/templates/library.js +1 -1
- package/src/sap/fe/templates/messagebundle_bg.properties +1 -1
- package/src/sap/fe/templates/messagebundle_fr.properties +1 -1
- package/src/sap/fe/templates/messagebundle_pl.properties +3 -3
- package/ui5.yaml +0 -1
|
@@ -330,7 +330,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
|
|
|
330
330
|
|
|
331
331
|
if (!oSection || !oSubSection || !oSection.getVisible() || !oSubSection.getVisible()) {
|
|
332
332
|
oController.getView().getModel("sap.fe.i18n").getResourceBundle().then(function (oResourceBundle) {
|
|
333
|
-
var sTitle = CommonUtils.getTranslatedText("C_ROUTING_NAVIGATION_DISABLED_TITLE", oResourceBundle,
|
|
333
|
+
var sTitle = CommonUtils.getTranslatedText("C_ROUTING_NAVIGATION_DISABLED_TITLE", oResourceBundle, undefined, oController.getView().getViewData().entitySet);
|
|
334
334
|
Log.error(sTitle);
|
|
335
335
|
MessageBox.error(sTitle);
|
|
336
336
|
}).catch(function (error) {
|
|
@@ -350,6 +350,9 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
|
|
|
350
350
|
},
|
|
351
351
|
onStateChange: function () {
|
|
352
352
|
this.getExtensionAPI().updateAppState();
|
|
353
|
+
},
|
|
354
|
+
closeOPMessageStrip: function () {
|
|
355
|
+
this.getExtensionAPI().hideMessage();
|
|
353
356
|
}
|
|
354
357
|
};
|
|
355
358
|
return _this;
|
|
@@ -1012,7 +1015,9 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
|
|
|
1012
1015
|
return oElement.getId() === sButtonId;
|
|
1013
1016
|
});
|
|
1014
1017
|
|
|
1015
|
-
|
|
1018
|
+
if (oButton) {
|
|
1019
|
+
CommonUtils.fireButtonPress(oButton);
|
|
1020
|
+
}
|
|
1016
1021
|
};
|
|
1017
1022
|
|
|
1018
1023
|
_proto._executeFooterShortcut = function _executeFooterShortcut(sId) {
|
|
@@ -1128,14 +1133,14 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
|
|
|
1128
1133
|
|
|
1129
1134
|
var _temp13 = function () {
|
|
1130
1135
|
if (draftRootContextPath) {
|
|
1131
|
-
var
|
|
1136
|
+
var _this9$getAppComponen, _simpleDraftRootConte, _mDataModel$targetEnt;
|
|
1132
1137
|
|
|
1133
1138
|
// Check if a view matches with the draft root path
|
|
1134
|
-
var existingBindingContextOnPage = (
|
|
1139
|
+
var existingBindingContextOnPage = (_this9$getAppComponen = _this9.getAppComponent().getRootViewController().getInstancedViews().find(function (pageView) {
|
|
1135
1140
|
var _pageView$getBindingC;
|
|
1136
1141
|
|
|
1137
1142
|
return ((_pageView$getBindingC = pageView.getBindingContext()) === null || _pageView$getBindingC === void 0 ? void 0 : _pageView$getBindingC.getPath()) === draftRootContextPath;
|
|
1138
|
-
})) === null ||
|
|
1143
|
+
})) === null || _this9$getAppComponen === void 0 ? void 0 : _this9$getAppComponen.getBindingContext();
|
|
1139
1144
|
|
|
1140
1145
|
if (existingBindingContextOnPage) {
|
|
1141
1146
|
_exit2 = true;
|
|
@@ -1815,4 +1820,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
|
|
|
1815
1820
|
}), _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);
|
|
1816
1821
|
return ObjectPageController;
|
|
1817
1822
|
}, false);
|
|
1818
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJib2R5IiwicmVjb3ZlciIsInJlc3VsdCIsImUiLCJ0aGVuIiwiZmluYWxpemVyIiwiYmluZCIsIk9iamVjdFBhZ2VDb250cm9sbGVyIiwiZGVmaW5lVUk1Q2xhc3MiLCJ1c2luZ0V4dGVuc2lvbiIsIlBsYWNlaG9sZGVyIiwiRWRpdEZsb3ciLCJTaGFyZSIsIm92ZXJyaWRlIiwiU2hhcmVPdmVycmlkZXMiLCJJbnRlcm5hbEVkaXRGbG93IiwiRWRpdEZsb3dPdmVycmlkZXMiLCJJbnRlcm5hbFJvdXRpbmciLCJJbnRlcm5hbFJvdXRpbmdPdmVycmlkZSIsIlBhZ2luYXRvciIsIlBhZ2luYXRvck92ZXJyaWRlIiwiTWVzc2FnZUhhbmRsZXIiLCJNZXNzYWdlSGFuZGxlck92ZXJyaWRlIiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUiLCJJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldE5hdmlnYXRpb25Nb2RlIiwiYklzU3RpY2t5RWRpdE1vZGUiLCJnZXRWaWV3IiwiZ2V0Q29udHJvbGxlciIsImdldFN0aWNreUVkaXRNb2RlIiwidW5kZWZpbmVkIiwiVmlld1N0YXRlIiwiVmlld1N0YXRlT3ZlcnJpZGVzIiwiUGFnZVJlYWR5IiwiaXNDb250ZXh0RXhwZWN0ZWQiLCJNYXNzRWRpdCIsInB1YmxpY0V4dGVuc2lvbiIsImZpbmFsRXh0ZW5zaW9uIiwiZXh0ZW5zaWJsZSIsIk92ZXJyaWRlRXhlY3V0aW9uIiwiQWZ0ZXIiLCJoYW5kbGVycyIsIm9uUHJpbWFyeUFjdGlvbiIsIm9Db250cm9sbGVyIiwib1ZpZXciLCJvQ29udGV4dCIsInNBY3Rpb25OYW1lIiwibVBhcmFtZXRlcnMiLCJtQ29uZGl0aW9ucyIsImlWaWV3TGV2ZWwiLCJnZXRWaWV3RGF0YSIsInZpZXdMZXZlbCIsIm9PYmplY3RQYWdlIiwiX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sIiwicG9zaXRpdmVBY3Rpb25WaXNpYmxlIiwicG9zaXRpdmVBY3Rpb25FbmFibGVkIiwib25DYWxsQWN0aW9uIiwiZWRpdEFjdGlvblZpc2libGUiLCJlZGl0QWN0aW9uRW5hYmxlZCIsIl9lZGl0RG9jdW1lbnQiLCJnZXRNb2RlbCIsImdldFByb3BlcnR5IiwiX3NhdmVEb2N1bWVudCIsIl9hcHBseURvY3VtZW50Iiwib25UYWJsZUNvbnRleHRDaGFuZ2UiLCJvRXZlbnQiLCJvU291cmNlIiwiZ2V0U291cmNlIiwib1RhYmxlIiwiX2ZpbmRUYWJsZXMiLCJzb21lIiwiX29UYWJsZSIsImdldFJvd0JpbmRpbmciLCJvQ3VycmVudEFjdGlvblByb21pc2UiLCJfZWRpdEZsb3ciLCJnZXRDdXJyZW50QWN0aW9uUHJvbWlzZSIsImFUYWJsZUNvbnRleHRzIiwiZ2V0VHlwZSIsImdldE1ldGFkYXRhIiwiaXNBIiwiZ2V0Q29udGV4dHMiLCJnZXRDdXJyZW50Q29udGV4dHMiLCJvQWN0aW9uUmVzcG9uc2UiLCJjb250cm9sSWQiLCJzSWQiLCJvQWN0aW9uRGF0YSIsIm9EYXRhIiwiYUtleXMiLCJrZXlzIiwiaU5ld0l0ZW1wIiwiZmluZCIsIm9UYWJsZUNvbnRleHQiLCJpIiwib1RhYmxlRGF0YSIsImdldE9iamVjdCIsImJDb21wYXJlIiwiZXZlcnkiLCJzS2V5IiwiYURpYWxvZ3MiLCJJbnN0YW5jZU1hbmFnZXIiLCJnZXRPcGVuRGlhbG9ncyIsIm9EaWFsb2ciLCJsZW5ndGgiLCJkaWFsb2ciLCJkYXRhIiwiYXR0YWNoRXZlbnRPbmNlIiwiZm9jdXNSb3ciLCJkZWxldGVDdXJyZW50QWN0aW9uUHJvbWlzZSIsImNhdGNoIiwiZXJyIiwiTG9nIiwiZXJyb3IiLCJtZXNzYWdlQnV0dG9uIiwiZmlyZU1vZGVsQ29udGV4dENoYW5nZSIsImVkaXRGbG93IiwiaW52b2tlQWN0aW9uIiwiX3Nob3dNZXNzYWdlUG9wb3ZlciIsIm9uRGF0YVBvaW50VGl0bGVQcmVzc2VkIiwib01hbmlmZXN0T3V0Ym91bmQiLCJzQ29udHJvbENvbmZpZyIsInNDb2xsZWN0aW9uUGF0aCIsIkpTT04iLCJwYXJzZSIsIm9UYXJnZXRJbmZvIiwiYVNlbWFudGljT2JqZWN0TWFwcGluZyIsIkNvbW1vblV0aWxzIiwiZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nIiwib0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0Iiwic01ldGFQYXRoIiwiZ2V0TWV0YU1vZGVsIiwiZ2V0TWV0YVBhdGgiLCJnZXRQYXRoIiwiYU5hdmlnYXRpb25EYXRhIiwiX2dldENoYXJ0Q29udGV4dERhdGEiLCJhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnMiLCJtYXAiLCJvTmF2aWdhdGlvbkRhdGEiLCJtZXRhUGF0aCIsInBhcmFtZXRlcnMiLCJvUGFyYW1zIiwiX2ludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldE91dGJvdW5kUGFyYW1zIiwiT2JqZWN0Iiwic2VtYW50aWNPYmplY3QiLCJhY3Rpb24iLCJuYXZpZ2F0ZSIsIm5hdmlnYXRpb25Db250ZXh0cyIsInNlbWFudGljT2JqZWN0TWFwcGluZyIsIm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZCIsInNPdXRib3VuZFRhcmdldCIsInNDcmVhdGVQYXRoIiwib25OYXZpZ2F0ZUNoYW5nZSIsImdldEV4dGVuc2lvbkFQSSIsInVwZGF0ZUFwcFN0YXRlIiwiYlNlY3Rpb25OYXZpZ2F0ZWQiLCJvSW50ZXJuYWxNb2RlbENvbnRleHQiLCJzZWN0aW9uTGF5b3V0Iiwib1N1YlNlY3Rpb24iLCJnZXRQYXJhbWV0ZXIiLCJfdXBkYXRlRm9jdXNJbkVkaXRNb2RlIiwib25WYXJpYW50U2VsZWN0ZWQiLCJvblZhcmlhbnRTYXZlZCIsInNldFRpbWVvdXQiLCJuYXZpZ2F0ZVRvU3ViU2VjdGlvbiIsInZEZXRhaWxDb25maWciLCJvRGV0YWlsQ29uZmlnIiwiYnlJZCIsIm9TZWN0aW9uIiwic2VjdGlvbklkIiwic3ViU2VjdGlvbklkIiwiZ2V0U3ViU2VjdGlvbnMiLCJnZXRQYXJlbnQiLCJnZXRWaXNpYmxlIiwiZ2V0UmVzb3VyY2VCdW5kbGUiLCJvUmVzb3VyY2VCdW5kbGUiLCJzVGl0bGUiLCJnZXRUcmFuc2xhdGVkVGV4dCIsImVudGl0eVNldCIsIk1lc3NhZ2VCb3giLCJzY3JvbGxUb1NlY3Rpb24iLCJnZXRJZCIsImZpcmVOYXZpZ2F0ZSIsInNlY3Rpb24iLCJzdWJTZWN0aW9uIiwib25DaGFydFNlbGVjdGlvbkNoYW5nZWQiLCJDaGFydFJ1bnRpbWUiLCJmblVwZGF0ZUNoYXJ0Iiwib25TdGF0ZUNoYW5nZSIsIm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcyIsIkV4dGVuc2lvbkFQSSIsImV4dGVuc2lvbkFQSSIsIm9uSW5pdCIsInNldFByb3BlcnR5IiwidmlzaWJpbGl0eSIsIml0ZW1zIiwiX2dldEJhdGNoR3JvdXBzRm9yVmlldyIsInVzZU5ld0xhenlMb2FkaW5nIiwiZ2V0RW5hYmxlTGF6eUxvYWRpbmciLCJhdHRhY2hFdmVudCIsIl9oYW5kbGVTdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0Iiwib0l0ZW1CaW5kaW5nIiwiYXR0YWNoQ2hhbmdlIiwiX2ZuU2hvd09QTWVzc2FnZSIsIm9uRXhpdCIsImRlc3Ryb3kiLCJvTWVzc2FnZVBvcG92ZXIiLCJpc09wZW4iLCJjbG9zZSIsImlzS2VlcEFsaXZlIiwic2V0S2VlcEFsaXZlIiwiaXNDb25uZWN0ZWQiLCJkaXNjb25uZWN0IiwidmlldyIsIm1lc3NhZ2VzIiwiZ2V0SXRlbXMiLCJpdGVtIiwiZmlsdGVyIiwibWVzc2FnZSIsImdldFRhcmdldHMiLCJzaG93TWVzc2FnZXMiLCJfZ2V0VGFibGVCaW5kaW5nIiwib25CZWZvcmVSZW5kZXJpbmciLCJQYWdlQ29udHJvbGxlciIsInByb3RvdHlwZSIsImFwcGx5Iiwib1ZpZXdEYXRhIiwicmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCIsIkNvbW1vbkhlbHBlciIsInNldE1ldGFNb2RlbCIsImdldEFwcENvbXBvbmVudCIsIm9uQWZ0ZXJSZW5kZXJpbmciLCJyZXNwb25zZSIsIm9FcnJvciIsIl9vbkJlZm9yZUJpbmRpbmciLCJhVGFibGVzIiwib0ludGVybmFsTW9kZWwiLCJhQmF0Y2hHcm91cHMiLCJvRmFzdENyZWF0aW9uUm93IiwicHVzaCIsImJEcmFmdE5hdmlnYXRpb24iLCJfY2xvc2VTaWRlQ29udGVudCIsIm9wQ29udGV4dCIsImhhc1BlbmRpbmdDaGFuZ2VzIiwiZ2V0QmluZGluZyIsInJlc2V0Q2hhbmdlcyIsImdldENyZWF0aW9uUm93Iiwic2V0QmluZGluZ0NvbnRleHQiLCJmblNjcm9sbFRvUHJlc2VudFNlY3Rpb24iLCJpc0ZpcnN0UmVuZGVyaW5nIiwiYlBlcnNpc3RPUFNjcm9sbCIsInNldFNlbGVjdGVkU2VjdGlvbiIsIm9EZWxlZ2F0ZU9uQmVmb3JlIiwiYWRkRXZlbnREZWxlZ2F0ZSIsInBhZ2VSZWFkeSIsInJlbW92ZUV2ZW50RGVsZWdhdGUiLCJvQmluZGluZyIsImxpc3RCaW5kaW5nIiwib1BhZ2luYXRvckN1cnJlbnRDb250ZXh0Iiwib0JpbmRpbmdUb1VzZSIsInBhZ2luYXRvciIsImluaXRpYWxpemUiLCJzQmluZGluZ1BhdGgiLCJ0ZXN0Iiwic0xpc3RCaW5kaW5nUGF0aCIsInJlcGxhY2UiLCJPRGF0YUxpc3RCaW5kaW5nIiwib01vZGVsIiwiX3NldExpc3RCaW5kaW5nQXN5bmMiLCJkZXRhY2hFdmVudCIsImFTZWN0aW9ucyIsImdldFNlY3Rpb25zIiwiYlVzZUljb25UYWJCYXIiLCJnZXRVc2VJY29uVGFiQmFyIiwiaVNraXAiLCJiSXNJbkVkaXRNb2RlIiwiYkVkaXRhYmxlSGVhZGVyIiwiZWRpdGFibGVIZWFkZXJDb250ZW50IiwiaVNlY3Rpb24iLCJhU3ViU2VjdGlvbnMiLCJpU3ViU2VjdGlvbiIsImlzVmlzaWJpbGl0eUR5bmFtaWMiLCJwbGFjZWhvbGRlciIsImlzUGxhY2Vob2xkZXJFbmFibGVkIiwic2hvd1BsYWNlaG9sZGVyIiwib05hdkNvbnRhaW5lciIsIm9Db250YWluZXIiLCJfZ2V0Rmlyc3RDbGlja2FibGVFbGVtZW50Iiwib0ZpcnN0Q2xpY2thYmxlRWxlbWVudCIsImFBY3Rpb25zIiwiZ2V0SGVhZGVyVGl0bGUiLCJnZXRBY3Rpb25zIiwib0FjdGlvbiIsImdldEVuYWJsZWQiLCJfZ2V0Rmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkRnJvbVN1YlNlY3Rpb24iLCJhQmxvY2tzIiwiZ2V0QmxvY2tzIiwiYmxvY2siLCJhRm9ybUNvbnRhaW5lcnMiLCJnZXRGb3JtQ29udGFpbmVycyIsImdldENvbnRlbnQiLCJmb3JtQ29udGFpbmVyIiwiYUZvcm1FbGVtZW50cyIsImdldEZvcm1FbGVtZW50cyIsImZvcm1FbGVtZW50IiwiYUZpZWxkcyIsImdldEZpZWxkcyIsImdldFJlcXVpcmVkIiwiZ2V0VmFsdWUiLCJkZWJ1ZyIsIm9NYW5kYXRvcnlGaWVsZCIsIm9GaWVsZFRvRm9jdXMiLCJjb250ZW50IiwiZ2V0Q29udGVudEVkaXQiLCJfZ2V0Rmlyc3RFZGl0YWJsZUlucHV0IiwiZm9jdXMiLCJfb25CYWNrTmF2aWdhdGlvbkluRHJhZnQiLCJtZXNzYWdlSGFuZGxlciIsInJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyIsImdldFJvdXRlclByb3h5IiwiY2hlY2tJZkJhY2tIYXNTYW1lQ29udGV4dCIsImhpc3RvcnkiLCJiYWNrIiwiZHJhZnQiLCJwcm9jZXNzRGF0YUxvc3NPckRyYWZ0RGlzY2FyZENvbmZpcm1hdGlvbiIsIkZ1bmN0aW9uIiwiTmF2aWdhdGlvblR5cGUiLCJCYWNrTmF2aWdhdGlvbiIsIl9vbkFmdGVyQmluZGluZyIsIm9CaW5kaW5nQ29udGV4dCIsImVuYWJsZUZhc3RDcmVhdGlvblJvdyIsIm9MaXN0QmluZGluZyIsIm9GYXN0Q3JlYXRpb25MaXN0QmluZGluZyIsIm9GYXN0Q3JlYXRpb25Db250ZXh0Iiwib0ZpbmFsVUlTdGF0ZSIsImJpbmRMaXN0IiwiZ2V0Q29udGV4dCIsIiQkdXBkYXRlR3JvdXBJZCIsIiQkZ3JvdXBJZCIsInJlZnJlc2hJbnRlcm5hbCIsImNyZWF0ZSIsImNyZWF0ZWQiLCJ0cmFjZSIsIl9zaWRlRWZmZWN0cyIsImNsZWFyUHJvcGVydGllc1N0YXR1cyIsImFJQk5BY3Rpb25zIiwiZm9yRWFjaCIsImdldElCTkFjdGlvbnMiLCJvVGFibGVSb3dCaW5kaW5nIiwiTW9kZWxIZWxwZXIiLCJpc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJyZW1vdmVDYWNoZXNBbmRNZXNzYWdlcyIsIm9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAiLCJwYXJzZUN1c3RvbURhdGEiLCJEZWxlZ2F0ZVV0aWwiLCJnZXRDdXN0b21EYXRhIiwiYVNlbGVjdGVkQ29udGV4dHMiLCJnZXRTZWxlY3RlZENvbnRleHRzIiwiQWN0aW9uUnVudGltZSIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJjbGVhclNlbGVjdGlvbiIsImdldFNlbWFudGljVGFyZ2V0c0Zyb21QYWdlTW9kZWwiLCJvT2JqZWN0UGFnZVRpdGxlIiwiYUlCTkhlYWRlckFjdGlvbnMiLCJjb25jYXQiLCJ1cGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eSIsImhhbmRsZVRhYmxlTW9kaWZpY2F0aW9ucyIsImZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cyIsImZuSGFuZGxlQ2hhbmdlIiwiZGV0YWNoQ2hhbmdlIiwiY29tcHV0ZUVkaXRNb2RlIiwiaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQiLCJjb25uZWN0Iiwib0NhY2hlIiwiX3VwZGF0ZVJlbGF0ZWRBcHBzIiwiZm5VcGRhdGVSZWxhdGVkQXBwcyIsImRldGFjaERhdGFSZWNlaXZlZCIsImF0dGFjaERhdGFSZWNlaXZlZCIsImN1cnJlbnRCaW5kaW5nIiwiaGFuZGxlUGF0Y2hTZW50IiwiVGFibGVVdGlscyIsIndoZW5Cb3VuZCIsIl90cmlnZ2VyVmlzaWJsZVN1YlNlY3Rpb25zRXZlbnRzIiwib25QYWdlUmVhZHkiLCJzZXRGb2N1cyIsImlzSW5EaXNwbGF5TW9kZSIsIm9TZWxlY3RlZFNlY3Rpb24iLCJDb3JlIiwiZ2V0U2VsZWN0ZWRTZWN0aW9uIiwiYklzU3RpY2t5TW9kZSIsIm9BcHBDb21wb25lbnQiLCJnZXRTaGVsbFNlcnZpY2VzIiwic2V0QmFja05hdmlnYXRpb24iLCJnZXRBcHBTdGF0ZUhhbmRsZXIiLCJhcHBseUFwcFN0YXRlIiwiZm9yY2VGb2N1cyIsIkVycm9yIiwiX2NoZWNrRGF0YVBvaW50VGl0bGVGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJfZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24iLCJvT2JqZWN0UGFnZVN1YnRpdGxlIiwib0N1c3RvbURhdGEiLCJnZXRLZXkiLCJ0aXRsZSIsInN1YnRpdGxlIiwiaW50ZW50IiwiaWNvbiIsIl9leGVjdXRlSGVhZGVyU2hvcnRjdXQiLCJzQnV0dG9uSWQiLCJvQnV0dG9uIiwib0VsZW1lbnQiLCJmaXJlQnV0dG9uUHJlc3MiLCJfZXhlY3V0ZUZvb3RlclNob3J0Y3V0IiwiZ2V0Rm9vdGVyIiwiZ2V0TmFtZSIsIl9leGVjdXRlVGFiU2hvcnRDdXQiLCJvRXhlY3V0aW9uIiwiaVNlY3Rpb25JbmRleE1heCIsInNDb21tYW5kIiwiZ2V0Q29tbWFuZCIsIm5ld1NlY3Rpb24iLCJpU2VsZWN0ZWRTZWN0aW9uSW5kZXgiLCJpbmRleE9mU2VjdGlvbiIsIl9nZXRGb290ZXJWaXNpYmlsaXR5Iiwic1ZpZXdJZCIsInNhcCIsInVpIiwiZ2V0Q29yZSIsImdldE1lc3NhZ2VNYW5hZ2VyIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsIm9NZXNzYWdlIiwidmFsaWRhdGlvbiIsInR5cGUiLCJ0YXJnZXQiLCJpbmRleE9mIiwib1JldCIsInJvb3RWaWV3Q29udHJvbGxlciIsImdldFJvb3RWaWV3Q29udHJvbGxlciIsImN1cnJlbnRQYWdlVmlldyIsImlzRmNsRW5hYmxlZCIsImdldFJpZ2h0bW9zdFZpZXciLCJnZXRSb290Q29udGFpbmVyIiwiZ2V0Q3VycmVudFBhZ2UiLCJvTWVzc2FnZUJ1dHRvbiIsImdldExlbmd0aCIsInNldFZpc2libGUiLCJvcGVuQnkiLCJCdXN5TG9ja2VyIiwibG9jayIsImVkaXREb2N1bWVudCIsImZpbmFsbHkiLCJ1bmxvY2siLCJnZXREcmFmdFJvb3RDb250ZXh0IiwiY29udGV4dCIsImRyYWZ0Um9vdENvbnRleHRQYXRoIiwiZ2V0RHJhZnRSb290UGF0aCIsInNpbXBsZURyYWZ0Um9vdENvbnRleHQiLCJleGlzdGluZ0JpbmRpbmdDb250ZXh0T25QYWdlIiwiZ2V0SW5zdGFuY2VkVmlld3MiLCJwYWdlVmlldyIsImludGVybmFsTW9kZWwiLCJtb2RlbCIsIm1ldGFNb2RlbCIsInNFbnRpdHlQYXRoIiwibURhdGFNb2RlbCIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImJpbmRDb250ZXh0IiwiZ2V0Qm91bmRDb250ZXh0IiwicmVxdWVzdFByb3BlcnR5IiwidGFyZ2V0RW50aXR5VHlwZSIsIm5hbWUiLCJfdmFsaWRhdGVEb2N1bWVudCIsImNvbnRyb2wiLCJnZXRDdXJyZW50Rm9jdXNlZENvbnRyb2xJZCIsImlzVHJhbnNpZW50Iiwic3luY1Rhc2siLCJhcHBDb21wb25lbnQiLCJzaWRlRWZmZWN0c1NlcnZpY2UiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJlbnRpdHlUeXBlIiwiZ2V0RW50aXR5VHlwZUZyb21Db250ZXh0IiwiZ2xvYmFsU2lkZUVmZmVjdHMiLCJnZXRHbG9iYWxPRGF0YUVudGl0eVNpZGVFZmZlY3RzIiwiUHJvbWlzZSIsImFsbCIsInNpZGVFZmZlY3RzIiwicmVxdWVzdFNpZGVFZmZlY3RzIiwiZHJhZnRSb290Q29udGV4dCIsImV4ZWN1dGVEcmFmdFZhbGlkYXRpb24iLCJhV2FpdENyZWF0ZURvY3VtZW50cyIsImJFeGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yIiwiY3JlYXRpb25Nb2RlIiwiY3JlYXRpb25Sb3ciLCJjcmVhdGVBdEVuZCIsImJDcmVhdGVEb2N1bWVudCIsImJTa2lwU2lkZUVmZmVjdHMiLCJjcmVhdGVEb2N1bWVudCIsImFCaW5kaW5ncyIsImJpbmRpbmdzIiwic2F2ZURvY3VtZW50IiwiaXNMb2NrZWQiLCJfbWFuYWdlQ29sbGFib3JhdGlvbiIsIm9wZW5NYW5hZ2VEaWFsb2ciLCJfc2hvd0NvbGxhYm9yYXRpb25Vc2VyRGV0YWlscyIsImV2ZW50Iiwic2hvd1VzZXJEZXRhaWxzIiwiX2NhbmNlbERvY3VtZW50IiwiY2FuY2VsQnV0dG9uIiwiY2FuY2VsRG9jdW1lbnQiLCJhcHBseURvY3VtZW50IiwicmVzb2x2ZVN0cmluZ3RvQm9vbGVhbiIsInVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyIsIl9maW5kQ29udHJvbEluU3ViU2VjdGlvbiIsImFQYXJlbnRFbGVtZW50IiwiYVN1YnNlY3Rpb24iLCJhQ29udHJvbHMiLCJiSXNDaGFydCIsImFTdWJTZWN0aW9uVGFibGVzIiwiZWxlbWVudCIsIm1BZ2dyZWdhdGlvbnMiLCJnZXRBZ2dyZWdhdGlvbiIsImFJdGVtcyIsIm9JdGVtIiwiZ2V0TWFpbkNvbnRlbnQiLCJncmlkVGFibGUiLCJoYXNTdHlsZUNsYXNzIiwiYWRkU3R5bGVDbGFzcyIsIl9nZXRBbGxTdWJTZWN0aW9ucyIsIl9nZXRBbGxCbG9ja3MiLCJnZXRNb3JlQmxvY2tzIiwiX2ZpbmRDaGFydHMiLCJhQ2hhcnRzIiwib0Jsb2NrIiwib0NvbnRlbnQiLCJzZXRTaG93U2lkZUNvbnRlbnQiLCJvQ2hhcnRDb250ZXh0Iiwic0NoYXJ0UGF0aCIsIm9Db250ZXh0RGF0YSIsIm9DaGFydENvbnRleHREYXRhIiwiX3Njcm9sbFRhYmxlc1RvUm93Iiwic1Jvd1BhdGgiLCJUYWJsZVNjcm9sbGVyIiwic2Nyb2xsVGFibGVUb1JvdyIsIl9tZXJnZU11bHRpcGxlQ29udGV4dHMiLCJvUGFnZUNvbnRleHQiLCJhTGluZUNvbnRleHQiLCJhQXR0cmlidXRlcyIsImFQYWdlQXR0cmlidXRlcyIsInNNZXRhUGF0aExpbmUiLCJzUGF0aExpbmUiLCJzUGFnZVBhdGgiLCJvTWV0YU1vZGVsIiwic01ldGFQYXRoUGFnZSIsIm9TaW5nbGVDb250ZXh0Iiwib1N1YkNoYXJ0Q29udGV4dERhdGEiLCJjb250ZXh0RGF0YSIsInJlbW92ZVNlbnNpdGl2ZURhdGEiLCJvUGFnZUxldmVsU1YiLCJhZGRQYWdlQ29udGV4dFRvU2VsZWN0aW9uVmFyaWFudCIsIlNlbGVjdGlvblZhcmlhbnQiLCJzZWxlY3Rpb25WYXJpYW50IiwiYXR0cmlidXRlcyIsIm9Db25maWd1cmF0aW9ucyIsImNvbnRyb2xDb25maWd1cmF0aW9uIiwiYUNvbmZpZ3VyYXRpb25zIiwib0NvbmZpZ3VyYXRpb24iLCJyZXF1ZXN0R3JvdXBJZCIsIl9zZXRCcmVhZGNydW1iTGlua3MiLCJhUHJvbWlzZXMiLCJhU2tpcFBhcmFtZXRlcml6ZWQiLCJzTmV3UGF0aCIsImFQYXRoUGFydHMiLCJzcGxpdCIsInNQYXRoIiwic2hpZnQiLCJzcGxpY2UiLCJzUGF0aFBhcnQiLCJvUm9vdFZpZXdDb250cm9sbGVyIiwic1BhcmFtZXRlclBhdGgiLCJiUmVzdWx0Q29udGV4dCIsImdldFRpdGxlSW5mb0Zyb21QYXRoIiwidGl0bGVIaWVyYXJjaHlJbmZvcyIsImlkeCIsImhpZXJhcmNoeVBvc2l0aW9uIiwib0xpbmsiLCJ0aXRsZUhpZXJhcmNoeUluZm8iLCJnZXRMaW5rcyIsIkxpbmsiLCJzZXRUZXh0Iiwic2V0SHJlZiIsImVuY29kZVVSSSIsImFkZExpbmsiLCJvRGF0YVBvaW50cyIsImdldEhlYWRlckZhY2V0SXRlbUNvbmZpZ0ZvckV4dGVybmFsTmF2aWdhdGlvbiIsImdldFJvdXRpbmdTZXJ2aWNlIiwiZ2V0T3V0Ym91bmRzIiwib1NoZWxsU2VydmljZXMiLCJyZXF1ZXN0T2JqZWN0IiwiZm5HZXRMaW5rcyIsImZuT25FcnJvciIsImZuU2V0TGlua0VuYWJsZW1lbnQiLCJpZCIsImFTdXBwb3J0ZWRMaW5rcyIsInNMaW5rSWQiLCJzdXBwb3J0ZWQiLCJvU3ViRGF0YVBvaW50cyIsIm9QYWdlRGF0YSIsIm9EYXRhUG9pbnQiLCJvTGlua0NvbnRleHQiLCJvTGlua0RhdGEiLCJvTWl4ZWRDb250ZXh0IiwibWVyZ2UiLCJvTWFwcGluZyIsInNNYWluUHJvcGVydHkiLCJzTWFwcGVkUHJvcGVydHkiLCJoYXNPd25Qcm9wZXJ0eSIsIm9OZXdNYXBwaW5nIiwiaXNOYXZpZ2F0aW9uU3VwcG9ydGVkIiwicGFyYW1zIiwiYUxpbmtzIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJPYmplY3RQYWdlQ29udHJvbGxlci5jb250cm9sbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIFJlc291cmNlQnVuZGxlIGZyb20gXCJzYXAvYmFzZS9pMThuL1Jlc291cmNlQnVuZGxlXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IEFjdGlvblJ1bnRpbWUgZnJvbSBcInNhcC9mZS9jb3JlL0FjdGlvblJ1bnRpbWVcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBCdXN5TG9ja2VyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgeyBjb25uZWN0LCBkaXNjb25uZWN0LCBpc0Nvbm5lY3RlZCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9jb2xsYWJvcmF0aW9uL0FjdGl2aXR5U3luY1wiO1xuaW1wb3J0IHsgb3Blbk1hbmFnZURpYWxvZywgc2hvd1VzZXJEZXRhaWxzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NvbGxhYm9yYXRpb24vTWFuYWdlXCI7XG5pbXBvcnQgRWRpdEZsb3cgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0VkaXRGbG93XCI7XG5pbXBvcnQgZHJhZnQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2VkaXRGbG93L2RyYWZ0XCI7XG5pbXBvcnQgSW50ZW50QmFzZWROYXZpZ2F0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBJbnRlcm5hbEVkaXRGbG93IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbEVkaXRGbG93XCI7XG5pbXBvcnQgSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxSb3V0aW5nIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbFJvdXRpbmdcIjtcbmltcG9ydCBNYXNzRWRpdCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvTWFzc0VkaXRcIjtcbmltcG9ydCBNZXNzYWdlSGFuZGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCBQYWdlUmVhZHkgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BhZ2VSZWFkeVwiO1xuaW1wb3J0IFBhZ2luYXRvciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvUGFnaW5hdG9yXCI7XG5pbXBvcnQgUGxhY2Vob2xkZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BsYWNlaG9sZGVyXCI7XG5pbXBvcnQgU2hhcmUgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1NoYXJlXCI7XG5pbXBvcnQgVmlld1N0YXRlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9WaWV3U3RhdGVcIjtcbmltcG9ydCAqIGFzIE1ldGFNb2RlbENvbnZlcnRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCBleHRlbnNpYmxlLCBmaW5hbEV4dGVuc2lvbiwgcHVibGljRXh0ZW5zaW9uLCB1c2luZ0V4dGVuc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIFJvb3RDb250YWluZXJCYXNlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvcm9vdFZpZXcvUm9vdFZpZXdCYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IFJvb3RWaWV3QmFzZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL3Jvb3RWaWV3L1Jvb3RWaWV3QmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBDaGFydFJ1bnRpbWUgZnJvbSBcInNhcC9mZS9tYWNyb3MvY2hhcnQvQ2hhcnRSdW50aW1lXCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IERlbGVnYXRlVXRpbCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9EZWxlZ2F0ZVV0aWxcIjtcbmltcG9ydCBUYWJsZVV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1V0aWxzXCI7XG5pbXBvcnQgU2VsZWN0aW9uVmFyaWFudCBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vU2VsZWN0aW9uVmFyaWFudFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE9iamVjdFBhZ2VFeHRlbnNpb25BUEkgfSBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL0V4dGVuc2lvbkFQSVwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBFeHRlbnNpb25BUEkgfSBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL0V4dGVuc2lvbkFQSVwiO1xuaW1wb3J0IEVkaXRGbG93T3ZlcnJpZGVzIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL1Jvb3RDb250YWluZXIvb3ZlcnJpZGVzL0VkaXRGbG93XCI7XG5pbXBvcnQgVGFibGVTY3JvbGxlciBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9UYWJsZVNjcm9sbGVyXCI7XG5pbXBvcnQgSW5zdGFuY2VNYW5hZ2VyIGZyb20gXCJzYXAvbS9JbnN0YW5jZU1hbmFnZXJcIjtcbmltcG9ydCBMaW5rIGZyb20gXCJzYXAvbS9MaW5rXCI7XG5pbXBvcnQgTWVzc2FnZUJveCBmcm9tIFwic2FwL20vTWVzc2FnZUJveFwiO1xuaW1wb3J0IHR5cGUgUG9wb3ZlciBmcm9tIFwic2FwL20vUG9wb3ZlclwiO1xuaW1wb3J0IENvcmUgZnJvbSBcInNhcC91aS9jb3JlL0NvcmVcIjtcbmltcG9ydCBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IHR5cGUgQmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL0JpbmRpbmdcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL3Jlc291cmNlL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCB0eXBlIEJyZWFkQ3J1bWJzIGZyb20gXCJzYXAvdXhhcC9CcmVhZENydW1ic1wiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZSBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZVwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUxheW91dCBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUxheW91dFwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZVNlY3Rpb24gZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VTZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlU3ViU2VjdGlvbiBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZVN1YlNlY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgT0RhdGFDb250ZXh0QmluZGluZ0V4LCBWNENvbnRleHQgfSBmcm9tIFwidHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5pbXBvcnQgSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL0ludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IEludGVybmFsUm91dGluZ092ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9JbnRlcm5hbFJvdXRpbmdcIjtcbmltcG9ydCBNZXNzYWdlSGFuZGxlck92ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IFBhZ2luYXRvck92ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9QYWdpbmF0b3JcIjtcbmltcG9ydCBTaGFyZU92ZXJyaWRlcyBmcm9tIFwiLi9vdmVycmlkZXMvU2hhcmVcIjtcbmltcG9ydCBWaWV3U3RhdGVPdmVycmlkZXMgZnJvbSBcIi4vb3ZlcnJpZGVzL1ZpZXdTdGF0ZVwiO1xuXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUudGVtcGxhdGVzLk9iamVjdFBhZ2UuT2JqZWN0UGFnZUNvbnRyb2xsZXJcIilcbmNsYXNzIE9iamVjdFBhZ2VDb250cm9sbGVyIGV4dGVuZHMgUGFnZUNvbnRyb2xsZXIge1xuXHRvVmlldyE6IGFueTtcblx0QHVzaW5nRXh0ZW5zaW9uKFBsYWNlaG9sZGVyKVxuXHRwbGFjZWhvbGRlciE6IFBsYWNlaG9sZGVyO1xuXHRAdXNpbmdFeHRlbnNpb24oRWRpdEZsb3cpXG5cdGVkaXRGbG93ITogRWRpdEZsb3c7XG5cdEB1c2luZ0V4dGVuc2lvbihTaGFyZS5vdmVycmlkZShTaGFyZU92ZXJyaWRlcykpXG5cdHNoYXJlITogU2hhcmU7XG5cdEB1c2luZ0V4dGVuc2lvbihJbnRlcm5hbEVkaXRGbG93Lm92ZXJyaWRlKEVkaXRGbG93T3ZlcnJpZGVzKSlcblx0X2VkaXRGbG93ITogSW50ZXJuYWxFZGl0Rmxvdztcblx0QHVzaW5nRXh0ZW5zaW9uKEludGVybmFsUm91dGluZy5vdmVycmlkZShJbnRlcm5hbFJvdXRpbmdPdmVycmlkZSkpXG5cdF9yb3V0aW5nITogSW50ZXJuYWxSb3V0aW5nO1xuXHRAdXNpbmdFeHRlbnNpb24oUGFnaW5hdG9yLm92ZXJyaWRlKFBhZ2luYXRvck92ZXJyaWRlKSlcblx0cGFnaW5hdG9yITogUGFnaW5hdG9yO1xuXHRAdXNpbmdFeHRlbnNpb24oTWVzc2FnZUhhbmRsZXIub3ZlcnJpZGUoTWVzc2FnZUhhbmRsZXJPdmVycmlkZSkpXG5cdG1lc3NhZ2VIYW5kbGVyITogTWVzc2FnZUhhbmRsZXI7XG5cdEB1c2luZ0V4dGVuc2lvbihJbnRlbnRCYXNlZE5hdmlnYXRpb24ub3ZlcnJpZGUoSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUpKVxuXHRpbnRlbnRCYXNlZE5hdmlnYXRpb24hOiBJbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cdEB1c2luZ0V4dGVuc2lvbihcblx0XHRJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbi5vdmVycmlkZSh7XG5cdFx0XHRnZXROYXZpZ2F0aW9uTW9kZTogZnVuY3Rpb24gKHRoaXM6IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IGJJc1N0aWNreUVkaXRNb2RlID1cblx0XHRcdFx0XHQodGhpcy5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIE9iamVjdFBhZ2VDb250cm9sbGVyKS5nZXRTdGlja3lFZGl0TW9kZSAmJlxuXHRcdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgT2JqZWN0UGFnZUNvbnRyb2xsZXIpLmdldFN0aWNreUVkaXRNb2RlKCk7XG5cdFx0XHRcdHJldHVybiBiSXNTdGlja3lFZGl0TW9kZSA/IFwiZXhwbGFjZVwiIDogdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHRcdH0pXG5cdClcblx0X2ludGVudEJhc2VkTmF2aWdhdGlvbiE6IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uO1xuXHRAdXNpbmdFeHRlbnNpb24oVmlld1N0YXRlLm92ZXJyaWRlKFZpZXdTdGF0ZU92ZXJyaWRlcykpXG5cdHZpZXdTdGF0ZSE6IFZpZXdTdGF0ZTtcblx0QHVzaW5nRXh0ZW5zaW9uKFxuXHRcdFBhZ2VSZWFkeS5vdmVycmlkZSh7XG5cdFx0XHRpc0NvbnRleHRFeHBlY3RlZDogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9KVxuXHQpXG5cdHBhZ2VSZWFkeSE6IFBhZ2VSZWFkeTtcblx0QHVzaW5nRXh0ZW5zaW9uKE1hc3NFZGl0KVxuXHRtYXNzRWRpdCE6IE1hc3NFZGl0O1xuXHRwcml2YXRlIG1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcz86IFJlY29yZDxzdHJpbmcsIE9iamVjdFBhZ2VFeHRlbnNpb25BUEk+O1xuXHRwcm90ZWN0ZWQgZXh0ZW5zaW9uQVBJPzogT2JqZWN0UGFnZUV4dGVuc2lvbkFQSTtcblx0cHJpdmF0ZSBvUmVzb3VyY2VCdW5kbGU/OiBSZXNvdXJjZUJ1bmRsZTtcblx0cHJpdmF0ZSBiU2VjdGlvbk5hdmlnYXRlZD86IGJvb2xlYW47XG5cdHByaXZhdGUgc3dpdGNoRHJhZnRBbmRBY3RpdmVQb3BPdmVyPzogUG9wb3Zlcjtcblx0cHJpdmF0ZSBjdXJyZW50QmluZGluZz86IEJpbmRpbmc7XG5cdHByaXZhdGUgbWVzc2FnZUJ1dHRvbjogYW55O1xuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRnZXRFeHRlbnNpb25BUEkoc0lkPzogc3RyaW5nKTogRXh0ZW5zaW9uQVBJIHtcblx0XHRpZiAoc0lkKSB7XG5cdFx0XHQvLyB0byBhbGxvdyBsb2NhbCBJRCB1c2FnZSBmb3IgY3VzdG9tIHBhZ2VzIHdlJ2xsIGNyZWF0ZS9yZXR1cm4gb3duIGluc3RhbmNlcyBmb3IgY3VzdG9tIHNlY3Rpb25zXG5cdFx0XHR0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcyA9IHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzIHx8IHt9O1xuXG5cdFx0XHRpZiAoIXRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF0pIHtcblx0XHRcdFx0dGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXSA9IG5ldyBFeHRlbnNpb25BUEkodGhpcywgc0lkKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoIXRoaXMuZXh0ZW5zaW9uQVBJKSB7XG5cdFx0XHRcdHRoaXMuZXh0ZW5zaW9uQVBJID0gbmV3IEV4dGVuc2lvbkFQSSh0aGlzKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzLmV4dGVuc2lvbkFQSTtcblx0XHR9XG5cdH1cblxuXHRvbkluaXQoKSB7XG5cdFx0c3VwZXIub25Jbml0KCk7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXG5cdFx0Ly8gU2V0dGluZyBkZWZhdWx0cyBvZiBpbnRlcm5hbCBtb2RlbCBjb250ZXh0XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiZXh0ZXJuYWxOYXZpZ2F0aW9uQ29udGV4dFwiLCB7IFwicGFnZVwiOiB0cnVlIH0pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJyZWxhdGVkQXBwc1wiLCB7XG5cdFx0XHR2aXNpYmlsaXR5OiBmYWxzZSxcblx0XHRcdGl0ZW1zOiBudWxsXG5cdFx0fSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcImJhdGNoR3JvdXBzXCIsIHRoaXMuX2dldEJhdGNoR3JvdXBzRm9yVmlldygpKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiZXJyb3JOYXZpZ2F0aW9uU2VjdGlvbkZsYWdcIiwgZmFsc2UpO1xuXHRcdGlmICghKHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55KS51c2VOZXdMYXp5TG9hZGluZyAmJiAob09iamVjdFBhZ2UgYXMgYW55KS5nZXRFbmFibGVMYXp5TG9hZGluZygpKSB7XG5cdFx0XHQvL0F0dGFjaGluZyB0aGUgZXZlbnQgdG8gbWFrZSB0aGUgc3Vic2VjdGlvbiBjb250ZXh0IGJpbmRpbmcgYWN0aXZlIHdoZW4gaXQgaXMgdmlzaWJsZS5cblx0XHRcdG9PYmplY3RQYWdlLmF0dGFjaEV2ZW50KFwic3ViU2VjdGlvbkVudGVyZWRWaWV3UG9ydFwiLCB0aGlzLl9oYW5kbGVTdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0LmJpbmQodGhpcykpO1xuXHRcdH1cblx0XHR0aGlzLm1lc3NhZ2VCdXR0b24gPSB0aGlzLmdldFZpZXcoKS5ieUlkKFwiZmU6OkZvb3RlckJhcjo6TWVzc2FnZUJ1dHRvblwiKTtcblx0XHR0aGlzLm1lc3NhZ2VCdXR0b24ub0l0ZW1CaW5kaW5nLmF0dGFjaENoYW5nZSh0aGlzLl9mblNob3dPUE1lc3NhZ2UsIHRoaXMpO1xuXHR9XG5cblx0b25FeGl0KCkge1xuXHRcdGlmICh0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcykge1xuXHRcdFx0Zm9yIChjb25zdCBzSWQgb2YgT2JqZWN0LmtleXModGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXMpKSB7XG5cdFx0XHRcdGlmICh0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdKSB7XG5cdFx0XHRcdFx0dGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXS5kZXN0cm95KCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGRlbGV0ZSB0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcztcblx0XHR9XG5cdFx0aWYgKHRoaXMuZXh0ZW5zaW9uQVBJKSB7XG5cdFx0XHR0aGlzLmV4dGVuc2lvbkFQSS5kZXN0cm95KCk7XG5cdFx0fVxuXHRcdGRlbGV0ZSB0aGlzLmV4dGVuc2lvbkFQSTtcblxuXHRcdGNvbnN0IG9NZXNzYWdlUG9wb3ZlciA9IHRoaXMubWVzc2FnZUJ1dHRvbiA/IHRoaXMubWVzc2FnZUJ1dHRvbi5vTWVzc2FnZVBvcG92ZXIgOiBudWxsO1xuXHRcdGlmIChvTWVzc2FnZVBvcG92ZXIgJiYgb01lc3NhZ2VQb3BvdmVyLmlzT3BlbigpKSB7XG5cdFx0XHRvTWVzc2FnZVBvcG92ZXIuY2xvc2UoKTtcblx0XHR9XG5cdFx0Ly93aGVuIGV4aXRpbmcgd2Ugc2V0IGtlZXBBbGl2ZSBjb250ZXh0IHRvIGZhbHNlXG5cdFx0Y29uc3Qgb0NvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQ7XG5cdFx0aWYgKG9Db250ZXh0ICYmIG9Db250ZXh0LmlzS2VlcEFsaXZlKCkpIHtcblx0XHRcdG9Db250ZXh0LnNldEtlZXBBbGl2ZShmYWxzZSk7XG5cdFx0fVxuXHRcdGlmIChpc0Nvbm5lY3RlZCh0aGlzLmdldFZpZXcoKSkpIHtcblx0XHRcdGRpc2Nvbm5lY3QodGhpcy5nZXRWaWV3KCkpOyAvLyBDbGVhbnVwIGNvbGxhYm9yYXRpb24gY29ubmVjdGlvbiB3aGVuIGxlYXZpbmcgdGhlIGFwcFxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gc2hvdyB0aGUgbWVzc2FnZSBzdHJpcCBvbiB0aGUgb2JqZWN0IHBhZ2UuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZm5TaG93T1BNZXNzYWdlKCkge1xuXHRcdGNvbnN0IGV4dGVuc2lvbkFQSSA9IHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCk7XG5cdFx0Y29uc3QgdmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IG1lc3NhZ2VzID0gdGhpcy5tZXNzYWdlQnV0dG9uLm9NZXNzYWdlUG9wb3ZlclxuXHRcdFx0LmdldEl0ZW1zKClcblx0XHRcdC5tYXAoKGl0ZW06IGFueSkgPT4gaXRlbS5nZXRCaW5kaW5nQ29udGV4dChcIm1lc3NhZ2VcIikuZ2V0T2JqZWN0KCkpXG5cdFx0XHQuZmlsdGVyKChtZXNzYWdlOiBNZXNzYWdlKSA9PiB7XG5cdFx0XHRcdHJldHVybiBtZXNzYWdlLmdldFRhcmdldHMoKVswXSA9PT0gdmlldy5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCk7XG5cdFx0XHR9KTtcblxuXHRcdGlmIChleHRlbnNpb25BUEkpIHtcblx0XHRcdGV4dGVuc2lvbkFQSS5zaG93TWVzc2FnZXMobWVzc2FnZXMpO1xuXHRcdH1cblx0fVxuXG5cdF9nZXRUYWJsZUJpbmRpbmcob1RhYmxlOiBhbnkpIHtcblx0XHRyZXR1cm4gb1RhYmxlICYmIG9UYWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdH1cblxuXHRvbkJlZm9yZVJlbmRlcmluZygpIHtcblx0XHRQYWdlQ29udHJvbGxlci5wcm90b3R5cGUub25CZWZvcmVSZW5kZXJpbmcuYXBwbHkodGhpcyk7XG5cdFx0Ly8gSW4gdGhlIHJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3Qgc2NlbmFyaW8gd2UgbmVlZCB0byBlbnN1cmUgaW4gY2FzZSBvZiByZWxvYWQvcmVmcmVzaCB0aGF0IHRoZSBtZXRhIG1vZGVsIGluIHRoZSBtZXRob2RlIHJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3Qgb2YgdGhlIEZpZWxkUnVudGltZSBpcyBhdmFpbGFibGVcblx0XHRpZiAodGhpcy5vVmlldy5vVmlld0RhdGE/LnJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3QgJiYgQ29tbW9uSGVscGVyLmdldE1ldGFNb2RlbCgpID09PSB1bmRlZmluZWQpIHtcblx0XHRcdENvbW1vbkhlbHBlci5zZXRNZXRhTW9kZWwodGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0fVxuXHR9XG5cblx0b25BZnRlclJlbmRlcmluZygpIHtcblx0XHQoKHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwic2FwLmZlLmkxOG5cIikgYXMgUmVzb3VyY2VNb2RlbCkuZ2V0UmVzb3VyY2VCdW5kbGUoKSBhcyBQcm9taXNlPFJlc291cmNlQnVuZGxlPilcblx0XHRcdC50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XG5cdFx0XHRcdHRoaXMub1Jlc291cmNlQnVuZGxlID0gcmVzcG9uc2U7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZXRyaWV2aW5nIHRoZSByZXNvdXJjZSBidW5kbGVcIiwgb0Vycm9yKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0X29uQmVmb3JlQmluZGluZyhvQ29udGV4dDogYW55LCBtUGFyYW1ldGVyczogYW55KSB7XG5cdFx0Ly8gVE9ETzogd2Ugc2hvdWxkIGNoZWNrIGhvdyB0aGlzIGNvbWVzIHRvZ2V0aGVyIHdpdGggdGhlIHRyYW5zYWN0aW9uIGhlbHBlciwgc2FtZSB0byB0aGUgY2hhbmdlIGluIHRoZSBhZnRlckJpbmRpbmdcblx0XHRjb25zdCBhVGFibGVzID0gdGhpcy5fZmluZFRhYmxlcygpLFxuXHRcdFx0b09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLFxuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdG9JbnRlcm5hbE1vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWwsXG5cdFx0XHRhQmF0Y2hHcm91cHMgPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJiYXRjaEdyb3Vwc1wiKSxcblx0XHRcdGlWaWV3TGV2ZWwgPSAodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLnZpZXdMZXZlbDtcblx0XHRsZXQgb0Zhc3RDcmVhdGlvblJvdztcblx0XHRhQmF0Y2hHcm91cHMucHVzaChcIiRhdXRvXCIpO1xuXHRcdGlmIChtUGFyYW1ldGVycy5iRHJhZnROYXZpZ2F0aW9uICE9PSB0cnVlKSB7XG5cdFx0XHR0aGlzLl9jbG9zZVNpZGVDb250ZW50KCk7XG5cdFx0fVxuXHRcdGNvbnN0IG9wQ29udGV4dCA9IG9PYmplY3RQYWdlLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dDtcblx0XHRpZiAoXG5cdFx0XHRvcENvbnRleHQgJiZcblx0XHRcdG9wQ29udGV4dC5oYXNQZW5kaW5nQ2hhbmdlcygpICYmXG5cdFx0XHQhYUJhdGNoR3JvdXBzLnNvbWUoKG9wQ29udGV4dC5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmhhc1BlbmRpbmdDaGFuZ2VzLmJpbmQob3BDb250ZXh0LmdldE1vZGVsKCkpKVxuXHRcdCkge1xuXHRcdFx0LyogXHRJbiBjYXNlIHRoZXJlIGFyZSBwZW5kaW5nIGNoYW5nZXMgZm9yIHRoZSBjcmVhdGlvbiByb3cgYW5kIG5vIG90aGVycyB3ZSBuZWVkIHRvIHJlc2V0IHRoZSBjaGFuZ2VzXG4gICAgXHRcdFx0XHRcdFx0VE9ETzogdGhpcyBpcyBqdXN0IGEgcXVpY2sgc29sdXRpb24sIHRoaXMgbmVlZHMgdG8gYmUgcmV3b3JrZWRcbiAgICBcdFx0XHRcdCBcdCovXG5cblx0XHRcdG9wQ29udGV4dC5nZXRCaW5kaW5nKCkucmVzZXRDaGFuZ2VzKCk7XG5cdFx0fVxuXG5cdFx0Ly8gRm9yIG5vdyB3ZSBoYXZlIHRvIHNldCB0aGUgYmluZGluZyBjb250ZXh0IHRvIG51bGwgZm9yIGV2ZXJ5IGZhc3QgY3JlYXRpb24gcm93XG5cdFx0Ly8gVE9ETzogR2V0IHJpZCBvZiB0aGlzIGNvZGluZyBvciBtb3ZlIGl0IHRvIGFub3RoZXIgbGF5ZXIgLSB0byBiZSBkaXNjdXNzZWQgd2l0aCBNREMgYW5kIG1vZGVsXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhVGFibGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRvRmFzdENyZWF0aW9uUm93ID0gYVRhYmxlc1tpXS5nZXRDcmVhdGlvblJvdygpO1xuXHRcdFx0aWYgKG9GYXN0Q3JlYXRpb25Sb3cpIHtcblx0XHRcdFx0b0Zhc3RDcmVhdGlvblJvdy5zZXRCaW5kaW5nQ29udGV4dChudWxsKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBTY3JvbGwgdG8gcHJlc2VudCBTZWN0aW9uIHNvIHRoYXQgYmluZGluZ3MgYXJlIGVuYWJsZWQgZHVyaW5nIG5hdmlnYXRpb24gdGhyb3VnaCBwYWdpbmF0b3IgYnV0dG9ucywgYXMgdGhlcmUgaXMgbm8gdmlldyByZXJlbmRlcmluZy9yZWJpbmRcblx0XHRjb25zdCBmblNjcm9sbFRvUHJlc2VudFNlY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRpZiAoIShvT2JqZWN0UGFnZSBhcyBhbnkpLmlzRmlyc3RSZW5kZXJpbmcoKSAmJiAhbVBhcmFtZXRlcnMuYlBlcnNpc3RPUFNjcm9sbCkge1xuXHRcdFx0XHRvT2JqZWN0UGFnZS5zZXRTZWxlY3RlZFNlY3Rpb24obnVsbCBhcyBhbnkpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0b09iamVjdFBhZ2UuYXR0YWNoRXZlbnRPbmNlKFwibW9kZWxDb250ZXh0Q2hhbmdlXCIsIGZuU2Nyb2xsVG9QcmVzZW50U2VjdGlvbik7XG5cblx0XHQvLyBpZiB0aGUgc3RydWN0dXJlIG9mIHRoZSBPYmplY3RQYWdlTGF5b3V0IGlzIGNoYW5nZWQgdGhlbiBzY3JvbGwgdG8gcHJlc2VudCBTZWN0aW9uXG5cdFx0Ly8gRklYTUUgSXMgdGhpcyByZWFsbHkgd29ya2luZyBhcyBpbnRlbmRlZCA/IEluaXRpYWxseSB0aGlzIHdhcyBvbkJlZm9yZVJlbmRlcmluZywgYnV0IG5ldmVyIHRyaWdnZXJlZCBvbkJlZm9yZVJlbmRlcmluZyBiZWNhdXNlIGl0IHdhcyByZWdpc3RlcmVkIGFmdGVyIGl0XG5cdFx0Y29uc3Qgb0RlbGVnYXRlT25CZWZvcmUgPSB7XG5cdFx0XHRvbkFmdGVyUmVuZGVyaW5nOiBmblNjcm9sbFRvUHJlc2VudFNlY3Rpb25cblx0XHR9O1xuXHRcdG9PYmplY3RQYWdlLmFkZEV2ZW50RGVsZWdhdGUob0RlbGVnYXRlT25CZWZvcmUsIHRoaXMpO1xuXHRcdHRoaXMucGFnZVJlYWR5LmF0dGFjaEV2ZW50T25jZShcInBhZ2VSZWFkeVwiLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRvT2JqZWN0UGFnZS5yZW1vdmVFdmVudERlbGVnYXRlKG9EZWxlZ2F0ZU9uQmVmb3JlKTtcblx0XHR9KTtcblxuXHRcdC8vU2V0IHRoZSBCaW5kaW5nIGZvciBQYWdpbmF0b3JzIHVzaW5nIExpc3RCaW5kaW5nIElEXG5cdFx0aWYgKGlWaWV3TGV2ZWwgPiAxKSB7XG5cdFx0XHRsZXQgb0JpbmRpbmcgPSBtUGFyYW1ldGVycyAmJiBtUGFyYW1ldGVycy5saXN0QmluZGluZztcblx0XHRcdGNvbnN0IG9QYWdpbmF0b3JDdXJyZW50Q29udGV4dCA9IG9JbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KFwiL3BhZ2luYXRvckN1cnJlbnRDb250ZXh0XCIpO1xuXHRcdFx0aWYgKG9QYWdpbmF0b3JDdXJyZW50Q29udGV4dCkge1xuXHRcdFx0XHRjb25zdCBvQmluZGluZ1RvVXNlID0gb1BhZ2luYXRvckN1cnJlbnRDb250ZXh0LmdldEJpbmRpbmcoKTtcblx0XHRcdFx0dGhpcy5wYWdpbmF0b3IuaW5pdGlhbGl6ZShvQmluZGluZ1RvVXNlLCBvUGFnaW5hdG9yQ3VycmVudENvbnRleHQpO1xuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9wYWdpbmF0b3JDdXJyZW50Q29udGV4dFwiLCBudWxsKTtcblx0XHRcdH0gZWxzZSBpZiAob0JpbmRpbmcpIHtcblx0XHRcdFx0aWYgKG9CaW5kaW5nLmlzQShcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCIpKSB7XG5cdFx0XHRcdFx0dGhpcy5wYWdpbmF0b3IuaW5pdGlhbGl6ZShvQmluZGluZywgb0NvbnRleHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIGlmIHRoZSBiaW5kaW5nIHR5cGUgaXMgbm90IE9EYXRhTGlzdEJpbmRpbmcgYmVjYXVzZSBvZiBhIGRlZXBsaW5rIG5hdmlnYXRpb24gb3IgYSByZWZyZXNoIG9mIHRoZSBwYWdlXG5cdFx0XHRcdFx0Ly8gd2UgbmVlZCB0byBjcmVhdGUgaXRcblx0XHRcdFx0XHRjb25zdCBzQmluZGluZ1BhdGggPSBvQmluZGluZy5nZXRQYXRoKCk7XG5cdFx0XHRcdFx0aWYgKC9cXChbXlxcKV0qXFwpJC8udGVzdChzQmluZGluZ1BhdGgpKSB7XG5cdFx0XHRcdFx0XHQvLyBUaGUgY3VycmVudCBiaW5kaW5nIHBhdGggZW5kcyB3aXRoICh4eHgpLCBzbyB3ZSBjcmVhdGUgdGhlIGxpc3RCaW5kaW5nIGJ5IHJlbW92aW5nICh4eHgpXG5cdFx0XHRcdFx0XHRjb25zdCBzTGlzdEJpbmRpbmdQYXRoID0gc0JpbmRpbmdQYXRoLnJlcGxhY2UoL1xcKFteXFwpXSpcXCkkLywgXCJcIik7XG5cdFx0XHRcdFx0XHRvQmluZGluZyA9IG5ldyAoT0RhdGFMaXN0QmluZGluZyBhcyBhbnkpKG9CaW5kaW5nLm9Nb2RlbCwgc0xpc3RCaW5kaW5nUGF0aCk7XG5cdFx0XHRcdFx0XHRjb25zdCBfc2V0TGlzdEJpbmRpbmdBc3luYyA9ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0aWYgKG9CaW5kaW5nLmdldENvbnRleHRzKCkubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMucGFnaW5hdG9yLmluaXRpYWxpemUob0JpbmRpbmcsIG9Db250ZXh0KTtcblx0XHRcdFx0XHRcdFx0XHRvQmluZGluZy5kZXRhY2hFdmVudChcImNoYW5nZVwiLCBfc2V0TGlzdEJpbmRpbmdBc3luYyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdG9CaW5kaW5nLmdldENvbnRleHRzKDApO1xuXHRcdFx0XHRcdFx0b0JpbmRpbmcuYXR0YWNoRXZlbnQoXCJjaGFuZ2VcIiwgX3NldExpc3RCaW5kaW5nQXN5bmMpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyBUaGUgY3VycmVudCBiaW5kaW5nIGRvZXNuJ3QgZW5kIHdpdGggKHh4eCkgLS0+IHRoZSBsYXN0IHNlZ21lbnQgaXMgYSAxLTEgbmF2aWdhdGlvbiwgc28gd2UgZG9uJ3QgZGlzcGxheSB0aGUgcGFnaW5hdG9yXG5cdFx0XHRcdFx0XHR0aGlzLnBhZ2luYXRvci5pbml0aWFsaXplKHVuZGVmaW5lZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICghKHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55KS51c2VOZXdMYXp5TG9hZGluZyAmJiBvT2JqZWN0UGFnZS5nZXRFbmFibGVMYXp5TG9hZGluZygpKSB7XG5cdFx0XHRjb25zdCBhU2VjdGlvbnMgPSBvT2JqZWN0UGFnZS5nZXRTZWN0aW9ucygpO1xuXHRcdFx0Y29uc3QgYlVzZUljb25UYWJCYXIgPSBvT2JqZWN0UGFnZS5nZXRVc2VJY29uVGFiQmFyKCk7XG5cdFx0XHRsZXQgaVNraXAgPSAyO1xuXHRcdFx0Y29uc3QgYklzSW5FZGl0TW9kZSA9IG9PYmplY3RQYWdlLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKTtcblx0XHRcdGNvbnN0IGJFZGl0YWJsZUhlYWRlciA9ICh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkuZWRpdGFibGVIZWFkZXJDb250ZW50O1xuXHRcdFx0Zm9yIChsZXQgaVNlY3Rpb24gPSAwOyBpU2VjdGlvbiA8IGFTZWN0aW9ucy5sZW5ndGg7IGlTZWN0aW9uKyspIHtcblx0XHRcdFx0Y29uc3Qgb1NlY3Rpb24gPSBhU2VjdGlvbnNbaVNlY3Rpb25dO1xuXHRcdFx0XHRjb25zdCBhU3ViU2VjdGlvbnMgPSBvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpO1xuXHRcdFx0XHRmb3IgKGxldCBpU3ViU2VjdGlvbiA9IDA7IGlTdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgaVN1YlNlY3Rpb24rKywgaVNraXAtLSkge1xuXHRcdFx0XHRcdC8vIEluIEljb25UYWJCYXIgbW9kZSBrZWVwIHRoZSBzZWNvbmQgc2VjdGlvbiBib3VuZCBpZiB0aGVyZSBpcyBhbiBlZGl0YWJsZSBoZWFkZXIgYW5kIHdlIGFyZSBzd2l0Y2hpbmcgdG8gZGlzcGxheSBtb2RlXG5cdFx0XHRcdFx0aWYgKGlTa2lwIDwgMSB8fCAoYlVzZUljb25UYWJCYXIgJiYgKGlTZWN0aW9uID4gMSB8fCAoaVNlY3Rpb24gPT09IDEgJiYgIWJFZGl0YWJsZUhlYWRlciAmJiAhYklzSW5FZGl0TW9kZSkpKSkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb1N1YlNlY3Rpb24gPSBhU3ViU2VjdGlvbnNbaVN1YlNlY3Rpb25dO1xuXHRcdFx0XHRcdFx0aWYgKG9TdWJTZWN0aW9uLmRhdGEoKS5pc1Zpc2liaWxpdHlEeW5hbWljICE9PSBcInRydWVcIikge1xuXHRcdFx0XHRcdFx0XHRvU3ViU2VjdGlvbi5zZXRCaW5kaW5nQ29udGV4dChudWxsIGFzIGFueSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMucGxhY2Vob2xkZXIuaXNQbGFjZWhvbGRlckVuYWJsZWQoKSAmJiBtUGFyYW1ldGVycy5zaG93UGxhY2Vob2xkZXIpIHtcblx0XHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0XHRjb25zdCBvTmF2Q29udGFpbmVyID0gKG9WaWV3LmdldFBhcmVudCgpIGFzIGFueSkub0NvbnRhaW5lci5nZXRQYXJlbnQoKTtcblx0XHRcdGlmIChvTmF2Q29udGFpbmVyKSB7XG5cdFx0XHRcdG9OYXZDb250YWluZXIuc2hvd1BsYWNlaG9sZGVyKHt9KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfZ2V0Rmlyc3RDbGlja2FibGVFbGVtZW50KG9PYmplY3RQYWdlOiBhbnkpIHtcblx0XHRsZXQgb0ZpcnN0Q2xpY2thYmxlRWxlbWVudDtcblx0XHRjb25zdCBhQWN0aW9ucyA9IG9PYmplY3RQYWdlLmdldEhlYWRlclRpdGxlKCkgJiYgb09iamVjdFBhZ2UuZ2V0SGVhZGVyVGl0bGUoKS5nZXRBY3Rpb25zKCk7XG5cdFx0aWYgKGFBY3Rpb25zICYmIGFBY3Rpb25zLmxlbmd0aCkge1xuXHRcdFx0b0ZpcnN0Q2xpY2thYmxlRWxlbWVudCA9IGFBY3Rpb25zLmZpbmQoZnVuY3Rpb24gKG9BY3Rpb246IGFueSkge1xuXHRcdFx0XHQvLyBEdWUgdG8gdGhlIGxlZnQgYWxpZ25tZW50IG9mIHRoZSBEcmFmdCBzd2l0Y2ggYW5kIHRoZSBjb2xsYWJvcmF0aXZlIGRyYWZ0IGF2YXRhciBjb250cm9sc1xuXHRcdFx0XHQvLyB0aGVyZSBpcyBhIFRvb2xiYXJTcGFjZXIgaW4gdGhlIGFjdGlvbnMgYWdncmVnYXRpb24gd2hpY2ggd2UgbmVlZCB0byBleGNsdWRlIGhlcmUhXG5cdFx0XHRcdC8vIER1ZSB0byB0aGUgQUNDIHJlcG9ydCwgd2UgYWxzbyBuZWVkIG5vdCB0byBjaGVjayBmb3IgdGhlIEludmlzaWJsZVRleHQgZWxlbWVudHNcblx0XHRcdFx0aWYgKG9BY3Rpb24uaXNBKFwic2FwLmZlLm1hY3Jvcy5TaGFyZUFQSVwiKSkge1xuXHRcdFx0XHRcdC8vIHNpbmNlIFNoYXJlQVBJIGRvZXMgbm90IGhhdmUgYSBkaXNhYmxlIHByb3BlcnR5XG5cdFx0XHRcdFx0Ly8gaGVuY2UgdGhlcmUgaXMgbm8gbmVlZCB0byBjaGVjayBpZiBpdCBpcyBkaXNiYWxlZCBvciBub3Rcblx0XHRcdFx0XHRyZXR1cm4gb0FjdGlvbi5nZXRWaXNpYmxlKCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoIW9BY3Rpb24uaXNBKFwic2FwLnVpLmNvcmUuSW52aXNpYmxlVGV4dFwiKSAmJiAhb0FjdGlvbi5pc0EoXCJzYXAubS5Ub29sYmFyU3BhY2VyXCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9BY3Rpb24uZ2V0VmlzaWJsZSgpICYmIG9BY3Rpb24uZ2V0RW5hYmxlZCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIG9GaXJzdENsaWNrYWJsZUVsZW1lbnQ7XG5cdH1cblxuXHRfZ2V0Rmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkRnJvbVN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zOiBhbnkpIHtcblx0XHRpZiAoYVN1YlNlY3Rpb25zKSB7XG5cdFx0XHRmb3IgKGxldCBzdWJTZWN0aW9uID0gMDsgc3ViU2VjdGlvbiA8IGFTdWJTZWN0aW9ucy5sZW5ndGg7IHN1YlNlY3Rpb24rKykge1xuXHRcdFx0XHRjb25zdCBhQmxvY2tzID0gYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLmdldEJsb2NrcygpO1xuXG5cdFx0XHRcdGlmIChhQmxvY2tzKSB7XG5cdFx0XHRcdFx0Zm9yIChsZXQgYmxvY2sgPSAwOyBibG9jayA8IGFCbG9ja3MubGVuZ3RoOyBibG9jaysrKSB7XG5cdFx0XHRcdFx0XHRsZXQgYUZvcm1Db250YWluZXJzO1xuXG5cdFx0XHRcdFx0XHRpZiAoYUJsb2Nrc1tibG9ja10uaXNBKFwic2FwLnVpLmxheW91dC5mb3JtLkZvcm1cIikpIHtcblx0XHRcdFx0XHRcdFx0YUZvcm1Db250YWluZXJzID0gYUJsb2Nrc1tibG9ja10uZ2V0Rm9ybUNvbnRhaW5lcnMoKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdFx0XHRcdGFCbG9ja3NbYmxvY2tdLmdldENvbnRlbnQgJiZcblx0XHRcdFx0XHRcdFx0YUJsb2Nrc1tibG9ja10uZ2V0Q29udGVudCgpICYmXG5cdFx0XHRcdFx0XHRcdGFCbG9ja3NbYmxvY2tdLmdldENvbnRlbnQoKS5pc0EoXCJzYXAudWkubGF5b3V0LmZvcm0uRm9ybVwiKVxuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdGFGb3JtQ29udGFpbmVycyA9IGFCbG9ja3NbYmxvY2tdLmdldENvbnRlbnQoKS5nZXRGb3JtQ29udGFpbmVycygpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAoYUZvcm1Db250YWluZXJzKSB7XG5cdFx0XHRcdFx0XHRcdGZvciAobGV0IGZvcm1Db250YWluZXIgPSAwOyBmb3JtQ29udGFpbmVyIDwgYUZvcm1Db250YWluZXJzLmxlbmd0aDsgZm9ybUNvbnRhaW5lcisrKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgYUZvcm1FbGVtZW50cyA9IGFGb3JtQ29udGFpbmVyc1tmb3JtQ29udGFpbmVyXS5nZXRGb3JtRWxlbWVudHMoKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoYUZvcm1FbGVtZW50cykge1xuXHRcdFx0XHRcdFx0XHRcdFx0Zm9yIChsZXQgZm9ybUVsZW1lbnQgPSAwOyBmb3JtRWxlbWVudCA8IGFGb3JtRWxlbWVudHMubGVuZ3RoOyBmb3JtRWxlbWVudCsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGFGaWVsZHMgPSBhRm9ybUVsZW1lbnRzW2Zvcm1FbGVtZW50XS5nZXRGaWVsZHMoKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBUaGUgZmlyc3QgZmllbGQgaXMgbm90IG5lY2Vzc2FyaWx5IGFuIElucHV0QmFzZSAoZS5nLiBjb3VsZCBiZSBhIFRleHQpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFNvIHdlIG5lZWQgdG8gY2hlY2sgd2hldGhlciBpdCBoYXMgYSBnZXRSZXF1aXJlZCBtZXRob2Rcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoYUZpZWxkc1swXS5nZXRSZXF1aXJlZCAmJiBhRmllbGRzWzBdLmdldFJlcXVpcmVkKCkgJiYgIWFGaWVsZHNbMF0uZ2V0VmFsdWUoKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGFGaWVsZHNbMF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdExvZy5kZWJ1ZyhgRXJyb3Igd2hlbiBzZWFyY2hpbmcgZm9yIG1hbmRhb3RyeSBlbXB0eSBmaWVsZDogJHtlcnJvcn1gKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0X3VwZGF0ZUZvY3VzSW5FZGl0TW9kZShhU3ViU2VjdGlvbnM6IGFueSkge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblxuXHRcdGNvbnN0IG9NYW5kYXRvcnlGaWVsZCA9IHRoaXMuX2dldEZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZEZyb21TdWJTZWN0aW9uKGFTdWJTZWN0aW9ucyk7XG5cdFx0bGV0IG9GaWVsZFRvRm9jdXM6IGFueTtcblx0XHRpZiAob01hbmRhdG9yeUZpZWxkKSB7XG5cdFx0XHRvRmllbGRUb0ZvY3VzID0gb01hbmRhdG9yeUZpZWxkLmNvbnRlbnQuZ2V0Q29udGVudEVkaXQoKVswXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b0ZpZWxkVG9Gb2N1cyA9IChvT2JqZWN0UGFnZSBhcyBhbnkpLl9nZXRGaXJzdEVkaXRhYmxlSW5wdXQoKSB8fCB0aGlzLl9nZXRGaXJzdENsaWNrYWJsZUVsZW1lbnQob09iamVjdFBhZ2UpO1xuXHRcdH1cblxuXHRcdGlmIChvRmllbGRUb0ZvY3VzKSB7XG5cdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0Ly8gV2Ugc2V0IHRoZSBmb2N1cyBpbiBhIHRpbWVlb3V0LCBvdGhlcndpc2UgdGhlIGZvY3VzIHNvbWV0aW1lcyBnb2VzIHRvIHRoZSBUYWJCYXJcblx0XHRcdFx0b0ZpZWxkVG9Gb2N1cy5mb2N1cygpO1xuXHRcdFx0fSwgMCk7XG5cdFx0fVxuXHR9XG5cblx0X2hhbmRsZVN1YlNlY3Rpb25FbnRlcmVkVmlld1BvcnQob0V2ZW50OiBhbnkpIHtcblx0XHRjb25zdCBvU3ViU2VjdGlvbiA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJzdWJTZWN0aW9uXCIpO1xuXHRcdG9TdWJTZWN0aW9uLnNldEJpbmRpbmdDb250ZXh0KHVuZGVmaW5lZCk7XG5cdH1cblxuXHRfb25CYWNrTmF2aWdhdGlvbkluRHJhZnQob0NvbnRleHQ6IGFueSkge1xuXHRcdHRoaXMubWVzc2FnZUhhbmRsZXIucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0aWYgKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um91dGVyUHJveHkoKS5jaGVja0lmQmFja0hhc1NhbWVDb250ZXh0KCkpIHtcblx0XHRcdC8vIEJhY2sgbmF2IHdpbGwga2VlcCB0aGUgc2FtZSBjb250ZXh0IC0tPiBubyBuZWVkIHRvIGRpc3BsYXkgdGhlIGRpYWxvZ1xuXHRcdFx0aGlzdG9yeS5iYWNrKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRyYWZ0LnByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uKFxuXHRcdFx0XHRmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0aGlzdG9yeS5iYWNrKCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdEZ1bmN0aW9uLnByb3RvdHlwZSxcblx0XHRcdFx0b0NvbnRleHQsXG5cdFx0XHRcdHRoaXMsXG5cdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRkcmFmdC5OYXZpZ2F0aW9uVHlwZS5CYWNrTmF2aWdhdGlvblxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdF9vbkFmdGVyQmluZGluZyhvQmluZGluZ0NvbnRleHQ6IGFueSwgbVBhcmFtZXRlcnM6IGFueSkge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRjb25zdCBhVGFibGVzID0gdGhpcy5fZmluZFRhYmxlcygpO1xuXG5cdFx0dGhpcy5fc2lkZUVmZmVjdHMuY2xlYXJQcm9wZXJ0aWVzU3RhdHVzKCk7XG5cblx0XHQvLyBUT0RPOiB0aGlzIGlzIG9ubHkgYSB0ZW1wIHNvbHV0aW9uIGFzIGxvbmcgYXMgdGhlIG1vZGVsIGZpeCB0aGUgY2FjaGUgaXNzdWUgYW5kIHdlIHVzZSB0aGlzIGFkZGl0aW9uYWxcblx0XHQvLyBiaW5kaW5nIHdpdGggb3duUmVxdWVzdFxuXHRcdG9CaW5kaW5nQ29udGV4dCA9IG9PYmplY3RQYWdlLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cblx0XHRsZXQgYUlCTkFjdGlvbnM6IGFueVtdID0gW107XG5cdFx0b09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvU2VjdGlvbjogYW55KSB7XG5cdFx0XHRvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpLmZvckVhY2goZnVuY3Rpb24gKG9TdWJTZWN0aW9uOiBhbnkpIHtcblx0XHRcdFx0YUlCTkFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9TdWJTZWN0aW9uLCBhSUJOQWN0aW9ucyk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdC8vIEFzc2lnbiBpbnRlcm5hbCBiaW5kaW5nIGNvbnRleHRzIHRvIG9Gb3JtQ29udGFpbmVyOlxuXHRcdC8vIDEuIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBhc3NpZ24gdGhlIGludGVybmFsIGJpbmRpbmcgY29udGV4dCB0byB0aGUgWE1MIGZyYWdtZW50XG5cdFx0Ly8gKEZvcm1Db250YWluZXIuZnJhZ21lbnQueG1sKSB5ZXQgLSBpdCBpcyB1c2VkIGFscmVhZHkgZm9yIHRoZSBkYXRhLXN0cnVjdHVyZS5cblx0XHQvLyAyLiBBbm90aGVyIHByb2JsZW0gaXMsIHRoYXQgRm9ybUNvbnRhaW5lcnMgYXNzaWduZWQgdG8gYSAnTW9yZUJsb2NrJyBkb2VzIG5vdCBoYXZlIGFuXG5cdFx0Ly8gaW50ZXJuYWwgbW9kZWwgY29udGV4dCBhdCBhbGwuXG5cblx0XHRhVGFibGVzLmZvckVhY2goZnVuY3Rpb24gKG9UYWJsZTogYW55KSB7XG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImNyZWF0aW9uUm93RmllbGRWYWxpZGl0eVwiLCB7fSk7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJjcmVhdGlvblJvd0N1c3RvbVZhbGlkaXR5XCIsIHt9KTtcblxuXHRcdFx0YUlCTkFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9UYWJsZSwgYUlCTkFjdGlvbnMpO1xuXHRcdFx0Ly8gdGVtcG9yYXJ5IHdvcmthcm91bmQgZm9yIEJDUDogMjA4MDIxODAwNFxuXHRcdFx0Ly8gTmVlZCB0byBmaXggd2l0aCBCTEk6IEZJT1JJVEVDSFAxLTE1Mjc0XG5cdFx0XHQvLyBvbmx5IGZvciBlZGl0IG1vZGUsIHdlIGNsZWFyIHRoZSB0YWJsZSBjYWNoZVxuXHRcdFx0Ly8gV29ya2Fyb3VuZCBzdGFydHMgaGVyZSEhXG5cdFx0XHRjb25zdCBvVGFibGVSb3dCaW5kaW5nID0gb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRcdGlmIChvVGFibGVSb3dCaW5kaW5nKSB7XG5cdFx0XHRcdGlmIChNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQob1RhYmxlUm93QmluZGluZy5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpKSkge1xuXHRcdFx0XHRcdC8vIGFwcGx5IGZvciBib3RoIGVkaXQgYW5kIGRpc3BsYXkgbW9kZSBpbiBzdGlja3lcblx0XHRcdFx0XHRvVGFibGVSb3dCaW5kaW5nLnJlbW92ZUNhY2hlc0FuZE1lc3NhZ2VzKFwiXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvLyBXb3JrYXJvdW5kIGVuZHMgaGVyZSEhXG5cblx0XHRcdC8vIFVwZGF0ZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgRGF0YUZpZWxkRm9yQWN0aW9uIGJ1dHRvbnMgb24gdGFibGUgdG9vbGJhclxuXHRcdFx0Ly8gVGhlIHNhbWUgaXMgYWxzbyBwZXJmb3JtZWQgb24gVGFibGUgc2VsZWN0aW9uQ2hhbmdlIGV2ZW50XG5cdFx0XHRjb25zdCBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gSlNPTi5wYXJzZShcblx0XHRcdFx0XHRDb21tb25IZWxwZXIucGFyc2VDdXN0b21EYXRhKERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhKG9UYWJsZSwgXCJvcGVyYXRpb25BdmFpbGFibGVNYXBcIikpXG5cdFx0XHRcdCksXG5cdFx0XHRcdGFTZWxlY3RlZENvbnRleHRzID0gb1RhYmxlLmdldFNlbGVjdGVkQ29udGV4dHMoKTtcblxuXHRcdFx0QWN0aW9uUnVudGltZS5zZXRBY3Rpb25FbmFibGVtZW50KG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCwgYVNlbGVjdGVkQ29udGV4dHMsIFwidGFibGVcIik7XG5cdFx0XHQvLyBDbGVhciB0aGUgc2VsZWN0aW9uIGluIHRoZSB0YWJsZSwgbmVlZCB0byBiZSBmaXhlZCBhbmQgcmV2aWV3IHdpdGggQkxJOiBGSU9SSVRFQ0hQMS0yNDMxOFxuXHRcdFx0b1RhYmxlLmNsZWFyU2VsZWN0aW9uKCk7XG5cdFx0fSk7XG5cdFx0Q29tbW9uVXRpbHMuZ2V0U2VtYW50aWNUYXJnZXRzRnJvbVBhZ2VNb2RlbCh0aGlzLCBcIl9wYWdlTW9kZWxcIik7XG5cdFx0Ly9SZXRyaWV2ZSBPYmplY3QgUGFnZSBoZWFkZXIgYWN0aW9ucyBmcm9tIE9iamVjdCBQYWdlIHRpdGxlIGNvbnRyb2xcblx0XHRjb25zdCBvT2JqZWN0UGFnZVRpdGxlID0gb09iamVjdFBhZ2UuZ2V0SGVhZGVyVGl0bGUoKTtcblx0XHRsZXQgYUlCTkhlYWRlckFjdGlvbnM6IGFueVtdID0gW107XG5cdFx0YUlCTkhlYWRlckFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9PYmplY3RQYWdlVGl0bGUsIGFJQk5IZWFkZXJBY3Rpb25zKTtcblx0XHRhSUJOQWN0aW9ucyA9IGFJQk5BY3Rpb25zLmNvbmNhdChhSUJOSGVhZGVyQWN0aW9ucyk7XG5cdFx0Q29tbW9uVXRpbHMudXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkoYUlCTkFjdGlvbnMsIHRoaXMuZ2V0VmlldygpKTtcblxuXHRcdGxldCBvTW9kZWw6IGFueSwgb0ZpbmFsVUlTdGF0ZTogYW55O1xuXG5cdFx0Ly8gVE9ETzogdGhpcyBzaG91bGQgYmUgbW92ZWQgaW50byBhbiBpbml0IGV2ZW50IG9mIHRoZSBNREMgdGFibGVzIChub3QgeWV0IGV4aXN0aW5nKSBhbmQgc2hvdWxkIGJlIHBhcnRcblx0XHQvLyBvZiBhbnkgY29udHJvbGxlciBleHRlbnNpb25cblx0XHQvKipcblx0XHQgKiBAcGFyYW0gb1RhYmxlXG5cdFx0ICogQHBhcmFtIG9MaXN0QmluZGluZ1xuXHRcdCAqL1xuXHRcdGFzeW5jIGZ1bmN0aW9uIGVuYWJsZUZhc3RDcmVhdGlvblJvdyhvVGFibGU6IGFueSwgb0xpc3RCaW5kaW5nOiBhbnkpIHtcblx0XHRcdGNvbnN0IG9GYXN0Q3JlYXRpb25Sb3cgPSBvVGFibGUuZ2V0Q3JlYXRpb25Sb3coKTtcblx0XHRcdGxldCBvRmFzdENyZWF0aW9uTGlzdEJpbmRpbmcsIG9GYXN0Q3JlYXRpb25Db250ZXh0O1xuXG5cdFx0XHRpZiAob0Zhc3RDcmVhdGlvblJvdykge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGF3YWl0IG9GaW5hbFVJU3RhdGU7XG5cdFx0XHRcdFx0aWYgKG9GYXN0Q3JlYXRpb25Sb3cuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpKSB7XG5cdFx0XHRcdFx0XHRvRmFzdENyZWF0aW9uTGlzdEJpbmRpbmcgPSBvTW9kZWwuYmluZExpc3Qob0xpc3RCaW5kaW5nLmdldFBhdGgoKSwgb0xpc3RCaW5kaW5nLmdldENvbnRleHQoKSwgW10sIFtdLCB7XG5cdFx0XHRcdFx0XHRcdCQkdXBkYXRlR3JvdXBJZDogXCJkb05vdFN1Ym1pdFwiLFxuXHRcdFx0XHRcdFx0XHQkJGdyb3VwSWQ6IFwiZG9Ob3RTdWJtaXRcIlxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHQvLyBXb3JrYXJvdW5kIHN1Z2dlc3RlZCBieSBPRGF0YSBtb2RlbCB2NCBjb2xsZWFndWVzXG5cdFx0XHRcdFx0XHRvRmFzdENyZWF0aW9uTGlzdEJpbmRpbmcucmVmcmVzaEludGVybmFsID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHQvKiBkbyBub3RoaW5nICovXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0b0Zhc3RDcmVhdGlvbkNvbnRleHQgPSBvRmFzdENyZWF0aW9uTGlzdEJpbmRpbmcuY3JlYXRlKCk7XG5cdFx0XHRcdFx0XHRvRmFzdENyZWF0aW9uUm93LnNldEJpbmRpbmdDb250ZXh0KG9GYXN0Q3JlYXRpb25Db250ZXh0KTtcblxuXHRcdFx0XHRcdFx0Ly8gdGhpcyBpcyBuZWVkZWQgdG8gYXZvaWQgY29uc29sZSBlcnJvclxuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0YXdhaXQgb0Zhc3RDcmVhdGlvbkNvbnRleHQuY3JlYXRlZCgpO1xuXHRcdFx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdFx0XHRMb2cudHJhY2UoXCJ0cmFuc2llbnQgZmFzdCBjcmVhdGlvbiBjb250ZXh0IGRlbGV0ZWRcIik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGNhdGNoIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGNvbXB1dGluZyB0aGUgZmluYWwgVUkgc3RhdGVcIiwgb0Vycm9yKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIHRoaXMgc2hvdWxkIG5vdCBiZSBuZWVkZWQgYXQgdGhlIGFsbFxuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSBvVGFibGVcblx0XHQgKi9cblx0XHRjb25zdCBoYW5kbGVUYWJsZU1vZGlmaWNhdGlvbnMgPSAob1RhYmxlOiBhbnkpID0+IHtcblx0XHRcdGNvbnN0IG9CaW5kaW5nID0gdGhpcy5fZ2V0VGFibGVCaW5kaW5nKG9UYWJsZSksXG5cdFx0XHRcdGZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cyA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRlbmFibGVGYXN0Q3JlYXRpb25Sb3cob1RhYmxlLCBvQmluZGluZyk7XG5cdFx0XHRcdH07XG5cblx0XHRcdGlmICghb0JpbmRpbmcpIHtcblx0XHRcdFx0TG9nLmVycm9yKGBFeHBlY3RlZCBiaW5kaW5nIG1pc3NpbmcgZm9yIHRhYmxlOiAke29UYWJsZS5nZXRJZCgpfWApO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmIChvQmluZGluZy5vQ29udGV4dCkge1xuXHRcdFx0XHRmbkhhbmRsZVRhYmxlUGF0Y2hFdmVudHMoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGZuSGFuZGxlQ2hhbmdlID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdGlmIChvQmluZGluZy5vQ29udGV4dCkge1xuXHRcdFx0XHRcdFx0Zm5IYW5kbGVUYWJsZVBhdGNoRXZlbnRzKCk7XG5cdFx0XHRcdFx0XHRvQmluZGluZy5kZXRhY2hDaGFuZ2UoZm5IYW5kbGVDaGFuZ2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdFx0b0JpbmRpbmcuYXR0YWNoQ2hhbmdlKGZuSGFuZGxlQ2hhbmdlKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0aWYgKG9CaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0b01vZGVsID0gb0JpbmRpbmdDb250ZXh0LmdldE1vZGVsKCk7XG5cblx0XHRcdC8vIENvbXB1dGUgRWRpdCBNb2RlXG5cdFx0XHRvRmluYWxVSVN0YXRlID0gdGhpcy5fZWRpdEZsb3cuY29tcHV0ZUVkaXRNb2RlKG9CaW5kaW5nQ29udGV4dCk7XG5cblx0XHRcdGlmIChNb2RlbEhlbHBlci5pc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZChvTW9kZWwuZ2V0TWV0YU1vZGVsKCkpKSB7XG5cdFx0XHRcdG9GaW5hbFVJU3RhdGVcblx0XHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAodGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpKSB7XG5cdFx0XHRcdFx0XHRcdGNvbm5lY3QodGhpcy5nZXRWaWV3KCkpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChpc0Nvbm5lY3RlZCh0aGlzLmdldFZpZXcoKSkpIHtcblx0XHRcdFx0XHRcdFx0ZGlzY29ubmVjdCh0aGlzLmdldFZpZXcoKSk7IC8vIENsZWFudXAgY29sbGFib3JhdGlvbiBjb25uZWN0aW9uIGluIGNhc2Ugd2Ugc3dpdGNoIHRvIGFub3RoZXIgZWxlbWVudCAoZS5nLiBpbiBGQ0wpXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSB3YWl0aW5nIGZvciB0aGUgZmluYWwgVUkgU3RhdGVcIiwgb0Vycm9yKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gdXBkYXRlIHJlbGF0ZWQgYXBwcyBvbmNlIERhdGEgaXMgcmVjZWl2ZWQgaW4gY2FzZSBvZiBiaW5kaW5nIGNhY2hlIGlzIG5vdCBhdmFpbGFibGVcblx0XHRcdC8vIFRPRE86IHRoaXMgaXMgb25seSBhIHRlbXAgc29sdXRpb24gc2luY2Ugd2UgbmVlZCB0byBjYWxsIF91cGRhdGVSZWxhdGVkQXBwcyBtZXRob2Qgb25seSBhZnRlciBkYXRhIGZvciBPYmplY3QgUGFnZSBpcyByZWNlaXZlZCAoaWYgdGhlcmUgaXMgbm8gYmluZGluZylcblx0XHRcdGlmIChvQmluZGluZ0NvbnRleHQuZ2V0QmluZGluZygpLm9DYWNoZSkge1xuXHRcdFx0XHR0aGlzLl91cGRhdGVSZWxhdGVkQXBwcygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgZm5VcGRhdGVSZWxhdGVkQXBwcyA9ICgpID0+IHtcblx0XHRcdFx0XHR0aGlzLl91cGRhdGVSZWxhdGVkQXBwcygpO1xuXHRcdFx0XHRcdG9CaW5kaW5nQ29udGV4dC5nZXRCaW5kaW5nKCkuZGV0YWNoRGF0YVJlY2VpdmVkKGZuVXBkYXRlUmVsYXRlZEFwcHMpO1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRvQmluZGluZ0NvbnRleHQuZ2V0QmluZGluZygpLmF0dGFjaERhdGFSZWNlaXZlZChmblVwZGF0ZVJlbGF0ZWRBcHBzKTtcblx0XHRcdH1cblxuXHRcdFx0Ly9BdHRhY2ggdGhlIHBhdGNoIHNlbnQgYW5kIHBhdGNoIGNvbXBsZXRlZCBldmVudCB0byB0aGUgb2JqZWN0IHBhZ2UgYmluZGluZyBzbyB0aGF0IHdlIGNhbiByZWFjdFxuXHRcdFx0Y29uc3Qgb0JpbmRpbmcgPSAob0JpbmRpbmdDb250ZXh0LmdldEJpbmRpbmcgJiYgb0JpbmRpbmdDb250ZXh0LmdldEJpbmRpbmcoKSkgfHwgb0JpbmRpbmdDb250ZXh0O1xuXG5cdFx0XHQvLyBBdHRhY2ggdGhlIGV2ZW50IGhhbmRsZXIgb25seSBvbmNlIHRvIHRoZSBzYW1lIGJpbmRpbmdcblx0XHRcdGlmICh0aGlzLmN1cnJlbnRCaW5kaW5nICE9PSBvQmluZGluZykge1xuXHRcdFx0XHRvQmluZGluZy5hdHRhY2hFdmVudChcInBhdGNoU2VudFwiLCB0aGlzLmVkaXRGbG93LmhhbmRsZVBhdGNoU2VudCwgdGhpcyk7XG5cdFx0XHRcdHRoaXMuY3VycmVudEJpbmRpbmcgPSBvQmluZGluZztcblx0XHRcdH1cblxuXHRcdFx0YVRhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uIChvVGFibGU6IGFueSkge1xuXHRcdFx0XHQvLyBhY2Nlc3MgYmluZGluZyBvbmx5IGFmdGVyIHRhYmxlIGlzIGJvdW5kXG5cdFx0XHRcdFRhYmxlVXRpbHMud2hlbkJvdW5kKG9UYWJsZSlcblx0XHRcdFx0XHQudGhlbihoYW5kbGVUYWJsZU1vZGlmaWNhdGlvbnMpXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgd2FpdGluZyBmb3IgdGhlIHRhYmxlIHRvIGJlIGJvdW5kXCIsIG9FcnJvcik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKCEodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLnVzZU5ld0xhenlMb2FkaW5nKSB7XG5cdFx0XHRcdC8vIHNob3VsZCBiZSBjYWxsZWQgb25seSBhZnRlciBiaW5kaW5nIGlzIHJlYWR5IGhlbmNlIGNhbGxpbmcgaXQgaW4gb25BZnRlckJpbmRpbmdcblx0XHRcdFx0KG9PYmplY3RQYWdlIGFzIGFueSkuX3RyaWdnZXJWaXNpYmxlU3ViU2VjdGlvbnNFdmVudHMoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdG9uUGFnZVJlYWR5KG1QYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHRjb25zdCBzZXRGb2N1cyA9ICgpID0+IHtcblx0XHRcdC8vIFNldCB0aGUgZm9jdXMgdG8gdGhlIGZpcnN0IGFjdGlvbiBidXR0b24sIG9yIHRvIHRoZSBmaXJzdCBlZGl0YWJsZSBpbnB1dCBpZiBpbiBlZGl0YWJsZSBtb2RlXG5cdFx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0XHRjb25zdCBpc0luRGlzcGxheU1vZGUgPSAhb09iamVjdFBhZ2UuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpO1xuXG5cdFx0XHRpZiAoaXNJbkRpc3BsYXlNb2RlKSB7XG5cdFx0XHRcdGNvbnN0IG9GaXJzdENsaWNrYWJsZUVsZW1lbnQgPSB0aGlzLl9nZXRGaXJzdENsaWNrYWJsZUVsZW1lbnQob09iamVjdFBhZ2UpO1xuXHRcdFx0XHRpZiAob0ZpcnN0Q2xpY2thYmxlRWxlbWVudCkge1xuXHRcdFx0XHRcdG9GaXJzdENsaWNrYWJsZUVsZW1lbnQuZm9jdXMoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3Qgb1NlbGVjdGVkU2VjdGlvbjogYW55ID0gQ29yZS5ieUlkKG9PYmplY3RQYWdlLmdldFNlbGVjdGVkU2VjdGlvbigpKTtcblx0XHRcdFx0aWYgKG9TZWxlY3RlZFNlY3Rpb24pIHtcblx0XHRcdFx0XHR0aGlzLl91cGRhdGVGb2N1c0luRWRpdE1vZGUob1NlbGVjdGVkU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdFx0Ly8gQXBwbHkgYXBwIHN0YXRlIG9ubHkgYWZ0ZXIgdGhlIHBhZ2UgaXMgcmVhZHkgd2l0aCB0aGUgZmlyc3Qgc2VjdGlvbiBzZWxlY3RlZFxuXHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBvQmluZGluZ0NvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdC8vU2hvdyBwb3B1cCB3aGlsZSBuYXZpZ2F0aW5nIGJhY2sgZnJvbSBvYmplY3QgcGFnZSBpbiBjYXNlIG9mIGRyYWZ0XG5cdFx0aWYgKG9CaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0Y29uc3QgYklzU3RpY2t5TW9kZSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCgob0JpbmRpbmdDb250ZXh0LmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdFx0aWYgKCFiSXNTdGlja3lNb2RlKSB7XG5cdFx0XHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQob1ZpZXcpO1xuXHRcdFx0XHRvQXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKS5zZXRCYWNrTmF2aWdhdGlvbigoKSA9PiB0aGlzLl9vbkJhY2tOYXZpZ2F0aW9uSW5EcmFmdChvQmluZGluZ0NvbnRleHQpKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKVxuXHRcdFx0LmdldEFwcFN0YXRlSGFuZGxlcigpXG5cdFx0XHQuYXBwbHlBcHBTdGF0ZSgpXG5cdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdGlmIChtUGFyYW1ldGVycy5mb3JjZUZvY3VzKSB7XG5cdFx0XHRcdFx0c2V0Rm9jdXMoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAoRXJyb3IpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgc2V0dGluZyB0aGUgZm9jdXNcIiwgRXJyb3IpO1xuXHRcdFx0fSk7XG5cblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJlcnJvck5hdmlnYXRpb25TZWN0aW9uRmxhZ1wiLCBmYWxzZSk7XG5cdFx0dGhpcy5fY2hlY2tEYXRhUG9pbnRUaXRsZUZvckV4dGVybmFsTmF2aWdhdGlvbigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgc3RhdHVzIG9mIGVkaXQgbW9kZSBmb3Igc3RpY2t5IHNlc3Npb24uXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRoZSBzdGF0dXMgb2YgZWRpdCBtb2RlIGZvciBzdGlja3kgc2Vzc2lvblxuXHQgKi9cblx0Z2V0U3RpY2t5RWRpdE1vZGUoKSB7XG5cdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQgJiYgKHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dCk7XG5cdFx0bGV0IGJJc1N0aWNreUVkaXRNb2RlID0gZmFsc2U7XG5cdFx0aWYgKG9CaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0Y29uc3QgYklzU3RpY2t5TW9kZSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChvQmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCk7XG5cdFx0XHRpZiAoYklzU3RpY2t5TW9kZSkge1xuXHRcdFx0XHRiSXNTdGlja3lFZGl0TW9kZSA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGJJc1N0aWNreUVkaXRNb2RlO1xuXHR9XG5cblx0X2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkge1xuXHRcdHJldHVybiB0aGlzLmJ5SWQoXCJmZTo6T2JqZWN0UGFnZVwiKSBhcyBPYmplY3RQYWdlTGF5b3V0O1xuXHR9XG5cblx0X2dldFBhZ2VUaXRsZUluZm9ybWF0aW9uKCkge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRjb25zdCBvT2JqZWN0UGFnZVN1YnRpdGxlID0gb09iamVjdFBhZ2UuZ2V0Q3VzdG9tRGF0YSgpLmZpbmQoZnVuY3Rpb24gKG9DdXN0b21EYXRhOiBhbnkpIHtcblx0XHRcdHJldHVybiBvQ3VzdG9tRGF0YS5nZXRLZXkoKSA9PT0gXCJPYmplY3RQYWdlU3VidGl0bGVcIjtcblx0XHR9KTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dGl0bGU6IG9PYmplY3RQYWdlLmRhdGEoXCJPYmplY3RQYWdlVGl0bGVcIikgfHwgXCJcIixcblx0XHRcdHN1YnRpdGxlOiBvT2JqZWN0UGFnZVN1YnRpdGxlICYmIG9PYmplY3RQYWdlU3VidGl0bGUuZ2V0VmFsdWUoKSxcblx0XHRcdGludGVudDogXCJcIixcblx0XHRcdGljb246IFwiXCJcblx0XHR9O1xuXHR9XG5cblx0X2V4ZWN1dGVIZWFkZXJTaG9ydGN1dChzSWQ6IGFueSkge1xuXHRcdGNvbnN0IHNCdXR0b25JZCA9IGAke3RoaXMuZ2V0VmlldygpLmdldElkKCl9LS0ke3NJZH1gLFxuXHRcdFx0b0J1dHRvbiA9ICh0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLmdldEhlYWRlclRpdGxlKCkgYXMgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZSlcblx0XHRcdFx0LmdldEFjdGlvbnMoKVxuXHRcdFx0XHQuZmluZChmdW5jdGlvbiAob0VsZW1lbnQ6IGFueSkge1xuXHRcdFx0XHRcdHJldHVybiBvRWxlbWVudC5nZXRJZCgpID09PSBzQnV0dG9uSWQ7XG5cdFx0XHRcdH0pO1xuXHRcdENvbW1vblV0aWxzLmZpcmVCdXR0b25QcmVzcyhvQnV0dG9uKTtcblx0fVxuXG5cdF9leGVjdXRlRm9vdGVyU2hvcnRjdXQoc0lkOiBhbnkpIHtcblx0XHRjb25zdCBzQnV0dG9uSWQgPSBgJHt0aGlzLmdldFZpZXcoKS5nZXRJZCgpfS0tJHtzSWR9YCxcblx0XHRcdG9CdXR0b24gPSAodGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKS5nZXRGb290ZXIoKSBhcyBhbnkpLmdldENvbnRlbnQoKS5maW5kKGZ1bmN0aW9uIChvRWxlbWVudDogYW55KSB7XG5cdFx0XHRcdHJldHVybiBvRWxlbWVudC5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKSA9PT0gXCJzYXAubS5CdXR0b25cIiAmJiBvRWxlbWVudC5nZXRJZCgpID09PSBzQnV0dG9uSWQ7XG5cdFx0XHR9KTtcblx0XHRDb21tb25VdGlscy5maXJlQnV0dG9uUHJlc3Mob0J1dHRvbik7XG5cdH1cblxuXHRfZXhlY3V0ZVRhYlNob3J0Q3V0KG9FeGVjdXRpb246IGFueSkge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKSxcblx0XHRcdGFTZWN0aW9ucyA9IG9PYmplY3RQYWdlLmdldFNlY3Rpb25zKCksXG5cdFx0XHRpU2VjdGlvbkluZGV4TWF4ID0gYVNlY3Rpb25zLmxlbmd0aCAtIDEsXG5cdFx0XHRzQ29tbWFuZCA9IG9FeGVjdXRpb24ub1NvdXJjZS5nZXRDb21tYW5kKCk7XG5cdFx0bGV0IG5ld1NlY3Rpb24sXG5cdFx0XHRpU2VsZWN0ZWRTZWN0aW9uSW5kZXggPSBvT2JqZWN0UGFnZS5pbmRleE9mU2VjdGlvbih0aGlzLmJ5SWQob09iamVjdFBhZ2UuZ2V0U2VsZWN0ZWRTZWN0aW9uKCkpIGFzIE9iamVjdFBhZ2VTZWN0aW9uKTtcblx0XHRpZiAoaVNlbGVjdGVkU2VjdGlvbkluZGV4ICE9PSAtMSAmJiBpU2VjdGlvbkluZGV4TWF4ID4gMCkge1xuXHRcdFx0aWYgKHNDb21tYW5kID09PSBcIk5leHRUYWJcIikge1xuXHRcdFx0XHRpZiAoaVNlbGVjdGVkU2VjdGlvbkluZGV4IDw9IGlTZWN0aW9uSW5kZXhNYXggLSAxKSB7XG5cdFx0XHRcdFx0bmV3U2VjdGlvbiA9IGFTZWN0aW9uc1srK2lTZWxlY3RlZFNlY3Rpb25JbmRleF07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoaVNlbGVjdGVkU2VjdGlvbkluZGV4ICE9PSAwKSB7XG5cdFx0XHRcdC8vIFByZXZpb3VzVGFiXG5cdFx0XHRcdG5ld1NlY3Rpb24gPSBhU2VjdGlvbnNbLS1pU2VsZWN0ZWRTZWN0aW9uSW5kZXhdO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAobmV3U2VjdGlvbikge1xuXHRcdFx0XHRvT2JqZWN0UGFnZS5zZXRTZWxlY3RlZFNlY3Rpb24obmV3U2VjdGlvbik7XG5cdFx0XHRcdG5ld1NlY3Rpb24uZm9jdXMoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfZ2V0Rm9vdGVyVmlzaWJpbGl0eSgpIHtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IHNWaWV3SWQgPSB0aGlzLmdldFZpZXcoKS5nZXRJZCgpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcIm1lc3NhZ2VGb290ZXJDb250YWluc0Vycm9yc1wiLCBmYWxzZSk7XG5cdFx0c2FwLnVpXG5cdFx0XHQuZ2V0Q29yZSgpXG5cdFx0XHQuZ2V0TWVzc2FnZU1hbmFnZXIoKVxuXHRcdFx0LmdldE1lc3NhZ2VNb2RlbCgpXG5cdFx0XHQuZ2V0RGF0YSgpXG5cdFx0XHQuZm9yRWFjaChmdW5jdGlvbiAob01lc3NhZ2U6IGFueSkge1xuXHRcdFx0XHRpZiAob01lc3NhZ2UudmFsaWRhdGlvbiAmJiBvTWVzc2FnZS50eXBlID09PSBcIkVycm9yXCIgJiYgb01lc3NhZ2UudGFyZ2V0LmluZGV4T2Yoc1ZpZXdJZCkgPiAtMSkge1xuXHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcIm1lc3NhZ2VGb290ZXJDb250YWluc0Vycm9yc1wiLCB0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdH1cblxuXHRfc2hvd01lc3NhZ2VQb3BvdmVyKGVycj86IGFueSwgb1JldD86IGFueSkge1xuXHRcdGlmIChlcnIpIHtcblx0XHRcdExvZy5lcnJvcihlcnIpO1xuXHRcdH1cblx0XHRjb25zdCByb290Vmlld0NvbnRyb2xsZXIgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvb3RWaWV3Q29udHJvbGxlcigpIGFzIGFueTtcblx0XHRjb25zdCBjdXJyZW50UGFnZVZpZXcgPSByb290Vmlld0NvbnRyb2xsZXIuaXNGY2xFbmFibGVkKClcblx0XHRcdD8gcm9vdFZpZXdDb250cm9sbGVyLmdldFJpZ2h0bW9zdFZpZXcoKVxuXHRcdFx0OiAodGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb290Q29udGFpbmVyKCkgYXMgYW55KS5nZXRDdXJyZW50UGFnZSgpO1xuXHRcdGlmICghY3VycmVudFBhZ2VWaWV3LmlzQShcInNhcC5tLk1lc3NhZ2VQYWdlXCIpKSB7XG5cdFx0XHRjb25zdCBvTWVzc2FnZUJ1dHRvbiA9IHRoaXMubWVzc2FnZUJ1dHRvbixcblx0XHRcdFx0b01lc3NhZ2VQb3BvdmVyID0gb01lc3NhZ2VCdXR0b24ub01lc3NhZ2VQb3BvdmVyLFxuXHRcdFx0XHRvSXRlbUJpbmRpbmcgPSBvTWVzc2FnZVBvcG92ZXIuZ2V0QmluZGluZyhcIml0ZW1zXCIpO1xuXG5cdFx0XHRpZiAob0l0ZW1CaW5kaW5nLmdldExlbmd0aCgpID4gMCAmJiAhb01lc3NhZ2VQb3BvdmVyLmlzT3BlbigpKSB7XG5cdFx0XHRcdG9NZXNzYWdlQnV0dG9uLnNldFZpc2libGUodHJ1ZSk7XG5cdFx0XHRcdC8vIHdvcmthcm91bmQgdG8gZW5zdXJlIHRoYXQgb01lc3NhZ2VCdXR0b24gaXMgcmVuZGVyZWQgd2hlbiBvcGVuQnkgaXMgY2FsbGVkXG5cdFx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdG9NZXNzYWdlUG9wb3Zlci5vcGVuQnkob01lc3NhZ2VCdXR0b24pO1xuXHRcdFx0XHR9LCAwKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG9SZXQ7XG5cdH1cblxuXHRfZWRpdERvY3VtZW50KG9Db250ZXh0OiBhbnkpIHtcblx0XHRjb25zdCBvTW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpO1xuXHRcdEJ1c3lMb2NrZXIubG9jayhvTW9kZWwpO1xuXHRcdHJldHVybiB0aGlzLmVkaXRGbG93LmVkaXREb2N1bWVudC5hcHBseSh0aGlzLmVkaXRGbG93LCBbb0NvbnRleHRdKS5maW5hbGx5KGZ1bmN0aW9uICgpIHtcblx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKG9Nb2RlbCk7XG5cdFx0fSk7XG5cdH1cblx0LyoqXG5cdCAqIEdldHMgdGhlIGNvbnRleHQgb2YgdGhlIERyYWZ0Um9vdCBwYXRoLlxuXHQgKiBJZiBhIHZpZXcgaGFzIGJlZW4gY3JlYXRlZCB3aXRoIHRoZSBkcmFmdCBSb290IFBhdGgsIHRoaXMgbWV0aG9kIHJldHVybnMgaXRzIGJpbmRpbmdDb250ZXh0LlxuXHQgKiBXaGVyZSBubyB2aWV3IGlzIGZvdW5kIGEgbmV3IGNyZWF0ZWQgY29udGV4dCBpcyByZXR1cm5lZC5cblx0ICogVGhlIG5ldyBjcmVhdGVkIGNvbnRleHQgcmVxdWVzdCB0aGUga2V5IG9mIHRoZSBlbnRpdHkgaW4gb3JkZXIgdG8gZ2V0IHRoZSBFdGFnIG9mIHRoaXMgZW50aXR5LlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgZ2V0RHJhZnRSb290UGF0aFxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIGEgUHJvbWlzZVxuXHQgKi9cblx0YXN5bmMgZ2V0RHJhZnRSb290Q29udGV4dCgpOiBQcm9taXNlPFY0Q29udGV4dCB8IHVuZGVmaW5lZD4ge1xuXHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRjb25zdCBjb250ZXh0ID0gdmlldy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIFY0Q29udGV4dDtcblx0XHRpZiAoY29udGV4dCkge1xuXHRcdFx0Y29uc3QgZHJhZnRSb290Q29udGV4dFBhdGggPSBNb2RlbEhlbHBlci5nZXREcmFmdFJvb3RQYXRoKGNvbnRleHQpO1xuXHRcdFx0bGV0IHNpbXBsZURyYWZ0Um9vdENvbnRleHQ6IFY0Q29udGV4dDtcblx0XHRcdGlmIChkcmFmdFJvb3RDb250ZXh0UGF0aCkge1xuXHRcdFx0XHQvLyBDaGVjayBpZiBhIHZpZXcgbWF0Y2hlcyB3aXRoIHRoZSBkcmFmdCByb290IHBhdGhcblx0XHRcdFx0Y29uc3QgZXhpc3RpbmdCaW5kaW5nQ29udGV4dE9uUGFnZSA9ICh0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvb3RWaWV3Q29udHJvbGxlcigpIGFzIFJvb3RWaWV3QmFzZUNvbnRyb2xsZXIpXG5cdFx0XHRcdFx0LmdldEluc3RhbmNlZFZpZXdzKClcblx0XHRcdFx0XHQuZmluZCgocGFnZVZpZXc6IFZpZXcpID0+IHBhZ2VWaWV3LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKSA9PT0gZHJhZnRSb290Q29udGV4dFBhdGgpXG5cdFx0XHRcdFx0Py5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIFY0Q29udGV4dDtcblx0XHRcdFx0aWYgKGV4aXN0aW5nQmluZGluZ0NvbnRleHRPblBhZ2UpIHtcblx0XHRcdFx0XHRyZXR1cm4gZXhpc3RpbmdCaW5kaW5nQ29udGV4dE9uUGFnZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBpbnRlcm5hbE1vZGVsID0gdmlldy5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbDtcblx0XHRcdFx0c2ltcGxlRHJhZnRSb290Q29udGV4dCA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvc2ltcGxlRHJhZnRSb290Q29udGV4dFwiKTtcblx0XHRcdFx0aWYgKHNpbXBsZURyYWZ0Um9vdENvbnRleHQ/LmdldFBhdGgoKSA9PT0gZHJhZnRSb290Q29udGV4dFBhdGgpIHtcblx0XHRcdFx0XHRyZXR1cm4gc2ltcGxlRHJhZnRSb290Q29udGV4dDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBtb2RlbCA9IGNvbnRleHQuZ2V0TW9kZWwoKTtcblx0XHRcdFx0Y29uc3QgbWV0YU1vZGVsID0gbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRcdGNvbnN0IHNFbnRpdHlQYXRoID0gbWV0YU1vZGVsLmdldE1ldGFQYXRoKGRyYWZ0Um9vdENvbnRleHRQYXRoKTtcblx0XHRcdFx0Y29uc3QgbURhdGFNb2RlbCA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMobWV0YU1vZGVsLmdldENvbnRleHQoc0VudGl0eVBhdGgpKTtcblx0XHRcdFx0c2ltcGxlRHJhZnRSb290Q29udGV4dCA9IG1vZGVsLmJpbmRDb250ZXh0KGRyYWZ0Um9vdENvbnRleHRQYXRoKS5nZXRCb3VuZENvbnRleHQoKTtcblx0XHRcdFx0YXdhaXQgc2ltcGxlRHJhZnRSb290Q29udGV4dC5yZXF1ZXN0UHJvcGVydHkobURhdGFNb2RlbC50YXJnZXRFbnRpdHlUeXBlLmtleXNbMF0/Lm5hbWUpO1xuXHRcdFx0XHQvLyBTdG9yZSB0aGlzIG5ldyBjcmVhdGVkIGNvbnRleHQgdG8gdXNlIGl0IG9uIHRoZSBuZXh0IGl0ZXJhdGlvbnNcblx0XHRcdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9zaW1wbGVEcmFmdFJvb3RDb250ZXh0XCIsIHNpbXBsZURyYWZ0Um9vdENvbnRleHQpO1xuXHRcdFx0XHRyZXR1cm4gc2ltcGxlRHJhZnRSb290Q29udGV4dDtcblx0XHRcdH1cblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRhc3luYyBfdmFsaWRhdGVEb2N1bWVudCgpOiBQcm9taXNlPHZvaWQgfCBhbnlbXSB8IE9EYXRhQ29udGV4dEJpbmRpbmdFeD4ge1xuXHRcdGNvbnN0IGNvbnRyb2wgPSBDb3JlLmJ5SWQoQ29yZS5nZXRDdXJyZW50Rm9jdXNlZENvbnRyb2xJZCgpKTtcblx0XHRjb25zdCBjb250ZXh0ID0gY29udHJvbD8uZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBWNENvbnRleHQ7XG5cdFx0aWYgKGNvbnRleHQgJiYgIWNvbnRleHQuaXNUcmFuc2llbnQoKSkge1xuXHRcdFx0Ly8gV2FpdCBmb3IgdGhlIHBlbmRpbmcgY2hhbmdlcyBiZWZvcmUgc3RhcnRpbmcgdGhpcyB2YWxpZGF0aW9uXG5cdFx0XHRhd2FpdCB0aGlzLl9lZGl0Rmxvdy5zeW5jVGFzaygpO1xuXHRcdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKTtcblx0XHRcdGNvbnN0IHNpZGVFZmZlY3RzU2VydmljZSA9IGFwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKTtcblx0XHRcdGNvbnN0IGVudGl0eVR5cGUgPSBzaWRlRWZmZWN0c1NlcnZpY2UuZ2V0RW50aXR5VHlwZUZyb21Db250ZXh0KGNvbnRleHQpO1xuXHRcdFx0Y29uc3QgZ2xvYmFsU2lkZUVmZmVjdHMgPSBlbnRpdHlUeXBlID8gc2lkZUVmZmVjdHNTZXJ2aWNlLmdldEdsb2JhbE9EYXRhRW50aXR5U2lkZUVmZmVjdHMoZW50aXR5VHlwZSkgOiBbXTtcblx0XHRcdC8vIElmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBnbG9iYWwgU2lkZUVmZmVjdHMgZm9yIHRoZSByZWxhdGVkIGVudGl0eSwgZXhlY3V0ZSBpdC90aGVtXG5cdFx0XHRpZiAoZ2xvYmFsU2lkZUVmZmVjdHMubGVuZ3RoKSB7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLmFsbChnbG9iYWxTaWRlRWZmZWN0cy5tYXAoKHNpZGVFZmZlY3RzKSA9PiB0aGlzLl9zaWRlRWZmZWN0cy5yZXF1ZXN0U2lkZUVmZmVjdHMoc2lkZUVmZmVjdHMsIGNvbnRleHQpKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBkcmFmdFJvb3RDb250ZXh0ID0gYXdhaXQgdGhpcy5nZXREcmFmdFJvb3RDb250ZXh0KCk7XG5cdFx0XHRcdC8vRXhlY3V0ZSB0aGUgZHJhZnRWYWxpZGF0aW9uIGlmIHRoZXJlIGlzIG5vIGdsb2JhbFNpZGVFZmZlY3RzXG5cdFx0XHRcdGlmIChkcmFmdFJvb3RDb250ZXh0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRyYWZ0LmV4ZWN1dGVEcmFmdFZhbGlkYXRpb24oZHJhZnRSb290Q29udGV4dCwgYXBwQ29tcG9uZW50KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0YXN5bmMgX3NhdmVEb2N1bWVudChvQ29udGV4dDogYW55KSB7XG5cdFx0Y29uc3Qgb01vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKSxcblx0XHRcdGFXYWl0Q3JlYXRlRG9jdW1lbnRzOiBhbnlbXSA9IFtdO1xuXHRcdC8vIGluZGljYXRlcyBpZiB3ZSBhcmUgY3JlYXRpbmcgYSBuZXcgcm93IGluIHRoZSBPUFxuXHRcdGxldCBiRXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvciA9IGZhbHNlO1xuXHRcdEJ1c3lMb2NrZXIubG9jayhvTW9kZWwpO1xuXHRcdHRoaXMuX2ZpbmRUYWJsZXMoKS5mb3JFYWNoKChvVGFibGU6IGFueSkgPT4ge1xuXHRcdFx0Y29uc3Qgb0JpbmRpbmcgPSB0aGlzLl9nZXRUYWJsZUJpbmRpbmcob1RhYmxlKTtcblx0XHRcdGNvbnN0IG1QYXJhbWV0ZXJzOiBhbnkgPSB7XG5cdFx0XHRcdGNyZWF0aW9uTW9kZTogb1RhYmxlLmRhdGEoXCJjcmVhdGlvbk1vZGVcIiksXG5cdFx0XHRcdGNyZWF0aW9uUm93OiBvVGFibGUuZ2V0Q3JlYXRpb25Sb3coKSxcblx0XHRcdFx0Y3JlYXRlQXRFbmQ6IG9UYWJsZS5kYXRhKFwiY3JlYXRlQXRFbmRcIikgPT09IFwidHJ1ZVwiXG5cdFx0XHR9O1xuXHRcdFx0Y29uc3QgYkNyZWF0ZURvY3VtZW50ID1cblx0XHRcdFx0bVBhcmFtZXRlcnMuY3JlYXRpb25Sb3cgJiZcblx0XHRcdFx0bVBhcmFtZXRlcnMuY3JlYXRpb25Sb3cuZ2V0QmluZGluZ0NvbnRleHQoKSAmJlxuXHRcdFx0XHRPYmplY3Qua2V5cyhtUGFyYW1ldGVycy5jcmVhdGlvblJvdy5nZXRCaW5kaW5nQ29udGV4dCgpLmdldE9iamVjdCgpKS5sZW5ndGggPiAxO1xuXHRcdFx0aWYgKGJDcmVhdGVEb2N1bWVudCkge1xuXHRcdFx0XHQvLyB0aGUgYlNraXBTaWRlRWZmZWN0cyBpcyBhIHBhcmFtZXRlciBjcmVhdGVkIHdoZW4gd2UgY2xpY2sgdGhlIHNhdmUga2V5LiBJZiB3ZSBwcmVzcyB0aGlzIGtleVxuXHRcdFx0XHQvLyB3ZSBkb24ndCBleGVjdXRlIHRoZSBoYW5kbGVTaWRlRWZmZWN0cyBmdW5jaXRvbiB0byBhdm9pZCBiYXRjaCByZWR1bmRhbmN5XG5cdFx0XHRcdG1QYXJhbWV0ZXJzLmJTa2lwU2lkZUVmZmVjdHMgPSB0cnVlO1xuXHRcdFx0XHRiRXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvciA9IHRydWU7XG5cdFx0XHRcdGFXYWl0Q3JlYXRlRG9jdW1lbnRzLnB1c2goXG5cdFx0XHRcdFx0dGhpcy5lZGl0Rmxvdy5jcmVhdGVEb2N1bWVudChvQmluZGluZywgbVBhcmFtZXRlcnMpLnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG9CaW5kaW5nO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgYUJpbmRpbmdzID0gYXdhaXQgUHJvbWlzZS5hbGwoYVdhaXRDcmVhdGVEb2N1bWVudHMpO1xuXHRcdFx0Y29uc3QgbVBhcmFtZXRlcnMgPSB7XG5cdFx0XHRcdGJFeGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yOiBiRXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvcixcblx0XHRcdFx0YmluZGluZ3M6IGFCaW5kaW5nc1xuXHRcdFx0fTtcblx0XHRcdC8vIFdlIG5lZWQgdG8gZWl0aGVyIHJlamVjdCBvciByZXNvbHZlIGEgcHJvbWlzZSBoZXJlIGFuZCByZXR1cm4gaXQgc2luY2UgdGhpcyBzYXZlXG5cdFx0XHQvLyBmdW5jdGlvbiBpcyBub3Qgb25seSBjYWxsZWQgd2hlbiBwcmVzc2luZyB0aGUgc2F2ZSBidXR0b24gaW4gdGhlIGZvb3RlciwgYnV0IGFsc29cblx0XHRcdC8vIHdoZW4gdGhlIHVzZXIgc2VsZWN0cyBjcmVhdGUgb3Igc2F2ZSBpbiBhIGRhdGFsb3NzIHBvcHVwLlxuXHRcdFx0Ly8gVGhlIGxvZ2ljIG9mIHRoZSBkYXRhbG9zcyBwb3B1cCBuZWVkcyB0byBkZXRlY3QgaWYgdGhlIHNhdmUgaGFkIGVycm9ycyBvciBub3QgaW4gb3JkZXJcblx0XHRcdC8vIHRvIGRlY2lkZSBpZiB0aGUgc3Vic2VxdWVudCBhY3Rpb24gLSBsaWtlIGEgYmFjayBuYXZpZ2F0aW9uIC0gaGFzIHRvIGJlIGV4ZWN1dGVkIG9yIG5vdC5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGF3YWl0IHRoaXMuZWRpdEZsb3cuc2F2ZURvY3VtZW50KG9Db250ZXh0LCBtUGFyYW1ldGVycyk7XG5cdFx0XHR9IGNhdGNoIChlcnJvcjogYW55KSB7XG5cdFx0XHRcdC8vIElmIHRoZSBzYXZlRG9jdW1lbnQgaW4gZWRpdEZsb3cgcmV0dXJucyBlcnJvcnMgd2UgbmVlZFxuXHRcdFx0XHQvLyB0byBzaG93IHRoZSBtZXNzYWdlIHBvcG92ZXIgaGVyZSBhbmQgZW5zdXJlIHRoYXQgdGhlXG5cdFx0XHRcdC8vIGRhdGFsb3NzIGxvZ2ljIGRvZXMgbm90IHBlcmZvcm0gdGhlIGZvbGxvdyB1cCBmdW5jdGlvblxuXHRcdFx0XHQvLyBsaWtlIGUuZy4gYSBiYWNrIG5hdmlnYXRpb24gaGVuY2Ugd2UgcmV0dXJuIGEgcHJvbWlzZSBhbmQgcmVqZWN0IGl0XG5cdFx0XHRcdHRoaXMuX3Nob3dNZXNzYWdlUG9wb3ZlcihlcnJvcik7XG5cdFx0XHRcdHRocm93IGVycm9yO1xuXHRcdFx0fVxuXHRcdH0gZmluYWxseSB7XG5cdFx0XHRpZiAoQnVzeUxvY2tlci5pc0xvY2tlZChvTW9kZWwpKSB7XG5cdFx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKG9Nb2RlbCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X21hbmFnZUNvbGxhYm9yYXRpb24oKSB7XG5cdFx0b3Blbk1hbmFnZURpYWxvZyh0aGlzLmdldFZpZXcoKSk7XG5cdH1cblxuXHRfc2hvd0NvbGxhYm9yYXRpb25Vc2VyRGV0YWlscyhldmVudDogYW55KSB7XG5cdFx0c2hvd1VzZXJEZXRhaWxzKGV2ZW50LCB0aGlzLmdldFZpZXcoKSk7XG5cdH1cblxuXHRfY2FuY2VsRG9jdW1lbnQob0NvbnRleHQ6IGFueSwgbVBhcmFtZXRlcnM6IGFueSkge1xuXHRcdG1QYXJhbWV0ZXJzLmNhbmNlbEJ1dHRvbiA9IHRoaXMuZ2V0VmlldygpLmJ5SWQobVBhcmFtZXRlcnMuY2FuY2VsQnV0dG9uKTsgLy90byBnZXQgdGhlIHJlZmVyZW5jZSBvZiB0aGUgY2FuY2VsIGJ1dHRvbiBmcm9tIGNvbW1hbmQgZXhlY3V0aW9uXG5cdFx0cmV0dXJuIHRoaXMuZWRpdEZsb3cuY2FuY2VsRG9jdW1lbnQob0NvbnRleHQsIG1QYXJhbWV0ZXJzKTtcblx0fVxuXG5cdF9hcHBseURvY3VtZW50KG9Db250ZXh0OiBhbnkpIHtcblx0XHRyZXR1cm4gdGhpcy5lZGl0Rmxvdy5hcHBseURvY3VtZW50KG9Db250ZXh0KS5jYXRjaCgoKSA9PiB0aGlzLl9zaG93TWVzc2FnZVBvcG92ZXIoKSk7XG5cdH1cblxuXHRfdXBkYXRlUmVsYXRlZEFwcHMoKSB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGlmIChDb21tb25VdGlscy5yZXNvbHZlU3RyaW5ndG9Cb29sZWFuKG9PYmplY3RQYWdlLmRhdGEoXCJzaG93UmVsYXRlZEFwcHNcIikpKSB7XG5cdFx0XHRDb21tb25VdGlscy51cGRhdGVSZWxhdGVkQXBwc0RldGFpbHMob09iamVjdFBhZ2UpO1xuXHRcdH1cblx0fVxuXG5cdF9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhUGFyZW50RWxlbWVudDogYW55LCBhU3Vic2VjdGlvbjogYW55LCBhQ29udHJvbHM6IGFueSwgYklzQ2hhcnQ/OiBib29sZWFuKSB7XG5cdFx0Y29uc3QgYVN1YlNlY3Rpb25UYWJsZXMgPSBbXTtcblx0XHRmb3IgKGxldCBlbGVtZW50ID0gMDsgZWxlbWVudCA8IGFQYXJlbnRFbGVtZW50Lmxlbmd0aDsgZWxlbWVudCsrKSB7XG5cdFx0XHRsZXQgb0VsZW1lbnQgPSBhUGFyZW50RWxlbWVudFtlbGVtZW50XS5nZXRDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgYVBhcmVudEVsZW1lbnRbZWxlbWVudF0uZ2V0Q29udGVudCgpO1xuXHRcdFx0aWYgKGJJc0NoYXJ0KSB7XG5cdFx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5tQWdncmVnYXRpb25zICYmIG9FbGVtZW50LmdldEFnZ3JlZ2F0aW9uKFwiaXRlbXNcIikpIHtcblx0XHRcdFx0XHRjb25zdCBhSXRlbXMgPSBvRWxlbWVudC5nZXRBZ2dyZWdhdGlvbihcIml0ZW1zXCIpO1xuXHRcdFx0XHRcdGFJdGVtcy5mb3JFYWNoKGZ1bmN0aW9uIChvSXRlbTogYW55KSB7XG5cdFx0XHRcdFx0XHRpZiAob0l0ZW0uaXNBKFwic2FwLmZlLm1hY3Jvcy5jaGFydC5DaGFydEFQSVwiKSkge1xuXHRcdFx0XHRcdFx0XHRvRWxlbWVudCA9IG9JdGVtO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQuaXNBICYmIG9FbGVtZW50LmlzQShcInNhcC51aS5sYXlvdXQuRHluYW1pY1NpZGVDb250ZW50XCIpKSB7XG5cdFx0XHRcdG9FbGVtZW50ID0gb0VsZW1lbnQuZ2V0TWFpbkNvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBvRWxlbWVudC5nZXRNYWluQ29udGVudCgpO1xuXHRcdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdG9FbGVtZW50ID0gb0VsZW1lbnRbMF07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5pc0EgJiYgb0VsZW1lbnQuaXNBKFwic2FwLmZlLm1hY3Jvcy50YWJsZS5UYWJsZUFQSVwiKSkge1xuXHRcdFx0XHRvRWxlbWVudCA9IG9FbGVtZW50LmdldENvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBvRWxlbWVudC5nZXRDb250ZW50KCk7XG5cdFx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0b0VsZW1lbnQgPSBvRWxlbWVudFswXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50LmlzQSAmJiBvRWxlbWVudC5pc0EoXCJzYXAudWkubWRjLlRhYmxlXCIpKSB7XG5cdFx0XHRcdGFDb250cm9scy5wdXNoKG9FbGVtZW50KTtcblx0XHRcdFx0YVN1YlNlY3Rpb25UYWJsZXMucHVzaCh7XG5cdFx0XHRcdFx0XCJ0YWJsZVwiOiBvRWxlbWVudCxcblx0XHRcdFx0XHRcImdyaWRUYWJsZVwiOiBvRWxlbWVudC5nZXRUeXBlKCkuaXNBKFwic2FwLnVpLm1kYy50YWJsZS5HcmlkVGFibGVUeXBlXCIpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQuaXNBICYmIG9FbGVtZW50LmlzQShcInNhcC5mZS5tYWNyb3MuY2hhcnQuQ2hhcnRBUElcIikpIHtcblx0XHRcdFx0b0VsZW1lbnQgPSBvRWxlbWVudC5nZXRDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgb0VsZW1lbnQuZ2V0Q29udGVudCgpO1xuXHRcdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdG9FbGVtZW50ID0gb0VsZW1lbnRbMF07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5pc0EgJiYgb0VsZW1lbnQuaXNBKFwic2FwLnVpLm1kYy5DaGFydFwiKSkge1xuXHRcdFx0XHRhQ29udHJvbHMucHVzaChvRWxlbWVudCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmIChcblx0XHRcdGFTdWJTZWN0aW9uVGFibGVzLmxlbmd0aCA9PT0gMSAmJlxuXHRcdFx0YVBhcmVudEVsZW1lbnQubGVuZ3RoID09PSAxICYmXG5cdFx0XHRhU3ViU2VjdGlvblRhYmxlc1swXS5ncmlkVGFibGUgJiZcblx0XHRcdCFhU3Vic2VjdGlvbi5oYXNTdHlsZUNsYXNzKFwic2FwVXhBUE9iamVjdFBhZ2VTdWJTZWN0aW9uRml0Q29udGFpbmVyXCIpXG5cdFx0KSB7XG5cdFx0XHQvL0luIGNhc2UgdGhlcmUgaXMgb25seSBhIHNpbmdsZSB0YWJsZSBpbiBhIHNlY3Rpb24gd2UgZml0IHRoYXQgdG8gdGhlIHdob2xlIHBhZ2Ugc28gdGhhdCB0aGUgc2Nyb2xsYmFyIGNvbWVzIG9ubHkgb24gdGFibGUgYW5kIG5vdCBvbiBwYWdlXG5cdFx0XHRhU3Vic2VjdGlvbi5hZGRTdHlsZUNsYXNzKFwic2FwVXhBUE9iamVjdFBhZ2VTdWJTZWN0aW9uRml0Q29udGFpbmVyXCIpO1xuXHRcdH1cblx0fVxuXG5cdF9nZXRBbGxTdWJTZWN0aW9ucygpIHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0bGV0IGFTdWJTZWN0aW9uczogYW55W10gPSBbXTtcblx0XHRvT2JqZWN0UGFnZS5nZXRTZWN0aW9ucygpLmZvckVhY2goZnVuY3Rpb24gKG9TZWN0aW9uOiBhbnkpIHtcblx0XHRcdGFTdWJTZWN0aW9ucyA9IGFTdWJTZWN0aW9ucy5jb25jYXQob1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGFTdWJTZWN0aW9ucztcblx0fVxuXG5cdF9nZXRBbGxCbG9ja3MoKSB7XG5cdFx0bGV0IGFCbG9ja3M6IGFueVtdID0gW107XG5cdFx0dGhpcy5fZ2V0QWxsU3ViU2VjdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvU3ViU2VjdGlvbjogYW55KSB7XG5cdFx0XHRhQmxvY2tzID0gYUJsb2Nrcy5jb25jYXQob1N1YlNlY3Rpb24uZ2V0QmxvY2tzKCkpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBhQmxvY2tzO1xuXHR9XG5cblx0X2ZpbmRUYWJsZXMoKSB7XG5cdFx0Y29uc3QgYVN1YlNlY3Rpb25zID0gdGhpcy5fZ2V0QWxsU3ViU2VjdGlvbnMoKTtcblx0XHRjb25zdCBhVGFibGVzOiBhbnlbXSA9IFtdO1xuXHRcdGZvciAobGV0IHN1YlNlY3Rpb24gPSAwOyBzdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgc3ViU2VjdGlvbisrKSB7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0QmxvY2tzKCksIGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXSwgYVRhYmxlcyk7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0TW9yZUJsb2NrcygpLCBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0sIGFUYWJsZXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gYVRhYmxlcztcblx0fVxuXG5cdF9maW5kQ2hhcnRzKCkge1xuXHRcdGNvbnN0IGFTdWJTZWN0aW9ucyA9IHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCk7XG5cdFx0Y29uc3QgYUNoYXJ0czogYW55W10gPSBbXTtcblx0XHRmb3IgKGxldCBzdWJTZWN0aW9uID0gMDsgc3ViU2VjdGlvbiA8IGFTdWJTZWN0aW9ucy5sZW5ndGg7IHN1YlNlY3Rpb24rKykge1xuXHRcdFx0dGhpcy5fZmluZENvbnRyb2xJblN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLmdldEJsb2NrcygpLCBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0sIGFDaGFydHMsIHRydWUpO1xuXHRcdFx0dGhpcy5fZmluZENvbnRyb2xJblN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLmdldE1vcmVCbG9ja3MoKSwgYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLCBhQ2hhcnRzLCB0cnVlKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFDaGFydHM7XG5cdH1cblxuXHRfY2xvc2VTaWRlQ29udGVudCgpIHtcblx0XHR0aGlzLl9nZXRBbGxCbG9ja3MoKS5mb3JFYWNoKGZ1bmN0aW9uIChvQmxvY2s6IGFueSkge1xuXHRcdFx0Y29uc3Qgb0NvbnRlbnQgPSBvQmxvY2suZ2V0Q29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIG9CbG9jay5nZXRDb250ZW50KCk7XG5cdFx0XHRpZiAob0NvbnRlbnQgJiYgb0NvbnRlbnQuaXNBICYmIG9Db250ZW50LmlzQShcInNhcC51aS5sYXlvdXQuRHluYW1pY1NpZGVDb250ZW50XCIpKSB7XG5cdFx0XHRcdGlmIChvQ29udGVudC5zZXRTaG93U2lkZUNvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuXHRcdFx0XHRcdG9Db250ZW50LnNldFNob3dTaWRlQ29udGVudChmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGFydCBDb250ZXh0IGlzIHJlc29sdmVkIGZvciAxOm4gbWljcm9jaGFydHMuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQ2hhcnRDb250ZXh0IFRoZSBDb250ZXh0IG9mIHRoZSBNaWNyb0NoYXJ0XG5cdCAqIEBwYXJhbSBzQ2hhcnRQYXRoIFRoZSBjb2xsZWN0aW9uUGF0aCBvZiB0aGUgdGhlIGNoYXJ0XG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIEF0dHJpYnV0ZXMgb2YgdGhlIGNoYXJ0IENvbnRleHRcblx0ICovXG5cdF9nZXRDaGFydENvbnRleHREYXRhKG9DaGFydENvbnRleHQ6IGFueSwgc0NoYXJ0UGF0aDogc3RyaW5nKSB7XG5cdFx0Y29uc3Qgb0NvbnRleHREYXRhID0gb0NoYXJ0Q29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRsZXQgb0NoYXJ0Q29udGV4dERhdGEgPSBbb0NvbnRleHREYXRhXTtcblx0XHRpZiAob0NoYXJ0Q29udGV4dCAmJiBzQ2hhcnRQYXRoKSB7XG5cdFx0XHRpZiAob0NvbnRleHREYXRhW3NDaGFydFBhdGhdKSB7XG5cdFx0XHRcdG9DaGFydENvbnRleHREYXRhID0gb0NvbnRleHREYXRhW3NDaGFydFBhdGhdO1xuXHRcdFx0XHRkZWxldGUgb0NvbnRleHREYXRhW3NDaGFydFBhdGhdO1xuXHRcdFx0XHRvQ2hhcnRDb250ZXh0RGF0YS5wdXNoKG9Db250ZXh0RGF0YSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvQ2hhcnRDb250ZXh0RGF0YTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTY3JvbGwgdGhlIHRhYmxlcyB0byB0aGUgcm93IHdpdGggdGhlIHNQYXRoXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBzYXAuZmUudGVtcGxhdGVzLk9iamVjdFBhZ2UuT2JqZWN0UGFnZUNvbnRyb2xsZXIuY29udHJvbGxlciNfc2Nyb2xsVGFibGVzVG9Sb3dcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNSb3dQYXRoICdzUGF0aCBvZiB0aGUgdGFibGUgcm93J1xuXHQgKi9cblxuXHRfc2Nyb2xsVGFibGVzVG9Sb3coc1Jvd1BhdGg6IHN0cmluZykge1xuXHRcdGlmICh0aGlzLl9maW5kVGFibGVzICYmIHRoaXMuX2ZpbmRUYWJsZXMoKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRjb25zdCBhVGFibGVzID0gdGhpcy5fZmluZFRhYmxlcygpO1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhVGFibGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFRhYmxlU2Nyb2xsZXIuc2Nyb2xsVGFibGVUb1JvdyhhVGFibGVzW2ldLCBzUm93UGF0aCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBtZXJnZSBzZWxlY3RlZCBjb250ZXh0cyBhbmQgZmlsdGVycy5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIF9tZXJnZU11bHRpcGxlQ29udGV4dHNcblx0ICogQHBhcmFtIG9QYWdlQ29udGV4dCBQYWdlIGNvbnRleHRcblx0ICogQHBhcmFtIGFMaW5lQ29udGV4dCBTZWxlY3RlZCBDb250ZXh0c1xuXHQgKiBAcGFyYW0gc0NoYXJ0UGF0aCBDb2xsZWN0aW9uIG5hbWUgb2YgdGhlIGNoYXJ0XG5cdCAqIEByZXR1cm5zIFNlbGVjdGlvbiBWYXJpYW50IE9iamVjdFxuXHQgKi9cblx0X21lcmdlTXVsdGlwbGVDb250ZXh0cyhvUGFnZUNvbnRleHQ6IENvbnRleHQsIGFMaW5lQ29udGV4dDogYW55W10sIHNDaGFydFBhdGg6IHN0cmluZykge1xuXHRcdGxldCBhQXR0cmlidXRlczogYW55W10gPSBbXSxcblx0XHRcdGFQYWdlQXR0cmlidXRlcyA9IFtdLFxuXHRcdFx0b0NvbnRleHQsXG5cdFx0XHRzTWV0YVBhdGhMaW5lOiBzdHJpbmcsXG5cdFx0XHRzUGF0aExpbmU7XG5cblx0XHRjb25zdCBzUGFnZVBhdGggPSBvUGFnZUNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvUGFnZUNvbnRleHQgJiYgb1BhZ2VDb250ZXh0LmdldE1vZGVsKCkgJiYgKG9QYWdlQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsKTtcblx0XHRjb25zdCBzTWV0YVBhdGhQYWdlID0gb01ldGFNb2RlbCAmJiBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNQYWdlUGF0aCkucmVwbGFjZSgvXlxcLyovLCBcIlwiKTtcblxuXHRcdC8vIEdldCBzaW5nbGUgbGluZSBjb250ZXh0IGlmIG5lY2Vzc2FyeVxuXHRcdGlmIChhTGluZUNvbnRleHQgJiYgYUxpbmVDb250ZXh0Lmxlbmd0aCkge1xuXHRcdFx0b0NvbnRleHQgPSBhTGluZUNvbnRleHRbMF07XG5cdFx0XHRzUGF0aExpbmUgPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRzTWV0YVBhdGhMaW5lID0gb01ldGFNb2RlbCAmJiBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNQYXRoTGluZSkucmVwbGFjZSgvXlxcLyovLCBcIlwiKTtcblxuXHRcdFx0YUxpbmVDb250ZXh0LmZvckVhY2goKG9TaW5nbGVDb250ZXh0OiBhbnkpID0+IHtcblx0XHRcdFx0aWYgKHNDaGFydFBhdGgpIHtcblx0XHRcdFx0XHRjb25zdCBvQ2hhcnRDb250ZXh0RGF0YSA9IHRoaXMuX2dldENoYXJ0Q29udGV4dERhdGEob1NpbmdsZUNvbnRleHQsIHNDaGFydFBhdGgpO1xuXHRcdFx0XHRcdGlmIChvQ2hhcnRDb250ZXh0RGF0YSkge1xuXHRcdFx0XHRcdFx0YUF0dHJpYnV0ZXMgPSBvQ2hhcnRDb250ZXh0RGF0YS5tYXAoZnVuY3Rpb24gKG9TdWJDaGFydENvbnRleHREYXRhOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRjb250ZXh0RGF0YTogb1N1YkNoYXJ0Q29udGV4dERhdGEsXG5cdFx0XHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBgJHtzTWV0YVBhdGhQYWdlfS8ke3NDaGFydFBhdGh9YFxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGFBdHRyaWJ1dGVzLnB1c2goe1xuXHRcdFx0XHRcdFx0Y29udGV4dERhdGE6IG9TaW5nbGVDb250ZXh0LmdldE9iamVjdCgpLFxuXHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBzTWV0YVBhdGhMaW5lXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRhUGFnZUF0dHJpYnV0ZXMucHVzaCh7XG5cdFx0XHRjb250ZXh0RGF0YTogb1BhZ2VDb250ZXh0LmdldE9iamVjdCgpLFxuXHRcdFx0ZW50aXR5U2V0OiBzTWV0YVBhdGhQYWdlXG5cdFx0fSk7XG5cdFx0Ly8gQWRkaW5nIFBhZ2UgQ29udGV4dCB0byBzZWxlY3Rpb24gdmFyaWFudFxuXHRcdGFQYWdlQXR0cmlidXRlcyA9IENvbW1vblV0aWxzLnJlbW92ZVNlbnNpdGl2ZURhdGEoYVBhZ2VBdHRyaWJ1dGVzLCBvTWV0YU1vZGVsKTtcblx0XHRjb25zdCBvUGFnZUxldmVsU1YgPSBDb21tb25VdGlscy5hZGRQYWdlQ29udGV4dFRvU2VsZWN0aW9uVmFyaWFudChuZXcgU2VsZWN0aW9uVmFyaWFudCgpLCBhUGFnZUF0dHJpYnV0ZXMsIHRoaXMuZ2V0VmlldygpKTtcblx0XHRhQXR0cmlidXRlcyA9IENvbW1vblV0aWxzLnJlbW92ZVNlbnNpdGl2ZURhdGEoYUF0dHJpYnV0ZXMsIG9NZXRhTW9kZWwpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRzZWxlY3Rpb25WYXJpYW50OiBvUGFnZUxldmVsU1YsXG5cdFx0XHRhdHRyaWJ1dGVzOiBhQXR0cmlidXRlc1xuXHRcdH07XG5cdH1cblxuXHRfZ2V0QmF0Y2hHcm91cHNGb3JWaWV3KCkge1xuXHRcdGNvbnN0IG9WaWV3RGF0YSA9IHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55LFxuXHRcdFx0b0NvbmZpZ3VyYXRpb25zID0gb1ZpZXdEYXRhLmNvbnRyb2xDb25maWd1cmF0aW9uLFxuXHRcdFx0YUNvbmZpZ3VyYXRpb25zID0gb0NvbmZpZ3VyYXRpb25zICYmIE9iamVjdC5rZXlzKG9Db25maWd1cmF0aW9ucyksXG5cdFx0XHRhQmF0Y2hHcm91cHMgPSBbXCIkYXV0by5IZXJvZXNcIiwgXCIkYXV0by5EZWNvcmF0aW9uXCIsIFwiJGF1dG8uV29ya2Vyc1wiXTtcblxuXHRcdGlmIChhQ29uZmlndXJhdGlvbnMgJiYgYUNvbmZpZ3VyYXRpb25zLmxlbmd0aCA+IDApIHtcblx0XHRcdGFDb25maWd1cmF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChzS2V5OiBhbnkpIHtcblx0XHRcdFx0Y29uc3Qgb0NvbmZpZ3VyYXRpb24gPSBvQ29uZmlndXJhdGlvbnNbc0tleV07XG5cdFx0XHRcdGlmIChvQ29uZmlndXJhdGlvbi5yZXF1ZXN0R3JvdXBJZCA9PT0gXCJMb25nUnVubmVyc1wiKSB7XG5cdFx0XHRcdFx0YUJhdGNoR3JvdXBzLnB1c2goXCIkYXV0by5Mb25nUnVubmVyc1wiKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBhQmF0Y2hHcm91cHM7XG5cdH1cblxuXHQvKlxuXHQgKiBSZXNldCBCcmVhZGNydW1iIGxpbmtzXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge3NhcC5tLkJyZWFkY3J1bWJzfSBbb1NvdXJjZV0gcGFyZW50IGNvbnRyb2xcblx0ICogQGRlc2NyaXB0aW9uIFVzZWQgd2hlbiBjb250ZXh0IG9mIHRoZSBvYmplY3QgcGFnZSBjaGFuZ2VzLlxuXHQgKiAgICAgICAgICAgICAgVGhpcyBldmVudCBjYWxsYmFjayBpcyBhdHRhY2hlZCB0byBtb2RlbENvbnRleHRDaGFuZ2Vcblx0ICogICAgICAgICAgICAgIGV2ZW50IG9mIHRoZSBCcmVhZGNydW1iIGNvbnRyb2wgdG8gY2F0Y2ggY29udGV4dCBjaGFuZ2UuXG5cdCAqICAgICAgICAgICAgICBUaGVuIGVsZW1lbnQgYmluZGluZyBhbmQgaHJlZnMgYXJlIHVwZGF0ZWQgZm9yIGVhY2ggbGluay5cblx0ICpcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBleHBlcmltZW50YWxcblx0ICovXG5cdGFzeW5jIF9zZXRCcmVhZGNydW1iTGlua3Mob1NvdXJjZTogQnJlYWRDcnVtYnMpIHtcblx0XHRjb25zdCBvQ29udGV4dCA9IG9Tb3VyY2UuZ2V0QmluZGluZ0NvbnRleHQoKSxcblx0XHRcdG9BcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLFxuXHRcdFx0YVByb21pc2VzOiBQcm9taXNlPHZvaWQ+W10gPSBbXSxcblx0XHRcdGFTa2lwUGFyYW1ldGVyaXplZDogYW55W10gPSBbXSxcblx0XHRcdHNOZXdQYXRoID0gb0NvbnRleHQ/LmdldFBhdGgoKSxcblx0XHRcdGFQYXRoUGFydHMgPSBzTmV3UGF0aD8uc3BsaXQoXCIvXCIpID8/IFtdLFxuXHRcdFx0b01ldGFNb2RlbCA9IG9BcHBDb21wb25lbnQgJiYgb0FwcENvbXBvbmVudC5nZXRNZXRhTW9kZWwoKTtcblx0XHRsZXQgc1BhdGggPSBcIlwiO1xuXHRcdHRyeSB7XG5cdFx0XHRhUGF0aFBhcnRzLnNoaWZ0KCk7XG5cdFx0XHRhUGF0aFBhcnRzLnNwbGljZSgtMSwgMSk7XG5cdFx0XHRhUGF0aFBhcnRzLmZvckVhY2goZnVuY3Rpb24gKHNQYXRoUGFydDogYW55KSB7XG5cdFx0XHRcdHNQYXRoICs9IGAvJHtzUGF0aFBhcnR9YDtcblx0XHRcdFx0Y29uc3Qgb1Jvb3RWaWV3Q29udHJvbGxlciA9IG9BcHBDb21wb25lbnQuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkgYXMgUm9vdENvbnRhaW5lckJhc2VDb250cm9sbGVyO1xuXHRcdFx0XHRjb25zdCBzUGFyYW1ldGVyUGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoc1BhdGgpO1xuXHRcdFx0XHRjb25zdCBiUmVzdWx0Q29udGV4dCA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NQYXJhbWV0ZXJQYXRofS9AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlJlc3VsdENvbnRleHRgKTtcblx0XHRcdFx0aWYgKGJSZXN1bHRDb250ZXh0KSB7XG5cdFx0XHRcdFx0Ly8gV2UgZG9udCBuZWVkIHRvIGNyZWF0ZSBhIGJyZWFkY3J1bWIgZm9yIFBhcmFtZXRlciBwYXRoXG5cdFx0XHRcdFx0YVNraXBQYXJhbWV0ZXJpemVkLnB1c2goMSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGFTa2lwUGFyYW1ldGVyaXplZC5wdXNoKDApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGFQcm9taXNlcy5wdXNoKG9Sb290Vmlld0NvbnRyb2xsZXIuZ2V0VGl0bGVJbmZvRnJvbVBhdGgoc1BhdGgpKTtcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgdGl0bGVIaWVyYXJjaHlJbmZvczogYW55W10gPSBhd2FpdCBQcm9taXNlLmFsbChhUHJvbWlzZXMpO1xuXHRcdFx0bGV0IGlkeCwgaGllcmFyY2h5UG9zaXRpb24sIG9MaW5rO1xuXHRcdFx0Zm9yIChjb25zdCB0aXRsZUhpZXJhcmNoeUluZm8gb2YgdGl0bGVIaWVyYXJjaHlJbmZvcykge1xuXHRcdFx0XHRoaWVyYXJjaHlQb3NpdGlvbiA9IHRpdGxlSGllcmFyY2h5SW5mb3MuaW5kZXhPZih0aXRsZUhpZXJhcmNoeUluZm8pO1xuXHRcdFx0XHRpZHggPSBoaWVyYXJjaHlQb3NpdGlvbiAtIGFTa2lwUGFyYW1ldGVyaXplZFtoaWVyYXJjaHlQb3NpdGlvbl07XG5cdFx0XHRcdG9MaW5rID0gb1NvdXJjZS5nZXRMaW5rcygpW2lkeF0gPyBvU291cmNlLmdldExpbmtzKClbaWR4XSA6IG5ldyBMaW5rKCk7XG5cdFx0XHRcdC8vc0N1cnJlbnRFbnRpdHkgaXMgYSBmYWxsYmFjayB2YWx1ZSBpbiBjYXNlIG9mIGVtcHR5IHRpdGxlXG5cdFx0XHRcdG9MaW5rLnNldFRleHQodGl0bGVIaWVyYXJjaHlJbmZvLnN1YnRpdGxlIHx8IHRpdGxlSGllcmFyY2h5SW5mby50aXRsZSk7XG5cdFx0XHRcdC8vV2UgYXBwbHkgYW4gYWRkaXRpb25hbCBlbmNvZGVVUkkgaW4gY2FzZSBvZiBzcGVjaWFsIGNoYXJhY3RlcnMgKGllIFwiL1wiKSB1c2VkIGluIHRoZSB1cmwgdGhyb3VnaCB0aGUgc2VtYW50aWMga2V5c1xuXHRcdFx0XHRvTGluay5zZXRIcmVmKGVuY29kZVVSSSh0aXRsZUhpZXJhcmNoeUluZm8uaW50ZW50KSk7XG5cdFx0XHRcdGlmICghb1NvdXJjZS5nZXRMaW5rcygpW2lkeF0pIHtcblx0XHRcdFx0XHRvU291cmNlLmFkZExpbmsob0xpbmspO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyb3I6IGFueSkge1xuXHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgc2V0dGluZyB0aGUgYnJlYWRjcnVtYiBsaW5rczpcIiArIGVycm9yKTtcblx0XHR9XG5cdH1cblxuXHRfY2hlY2tEYXRhUG9pbnRUaXRsZUZvckV4dGVybmFsTmF2aWdhdGlvbigpIHtcblx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3Qgb0RhdGFQb2ludHMgPSBDb21tb25VdGlscy5nZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24oXG5cdFx0XHRvVmlldy5nZXRWaWV3RGF0YSgpLFxuXHRcdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb3V0aW5nU2VydmljZSgpLmdldE91dGJvdW5kcygpXG5cdFx0KTtcblx0XHRjb25zdCBvU2hlbGxTZXJ2aWNlcyA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0U2hlbGxTZXJ2aWNlcygpO1xuXHRcdGNvbnN0IG9QYWdlQ29udGV4dCA9IG9WaWV3ICYmIChvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImlzSGVhZGVyRFBMaW5rVmlzaWJsZVwiLCB7fSk7XG5cdFx0aWYgKG9QYWdlQ29udGV4dCkge1xuXHRcdFx0b1BhZ2VDb250ZXh0XG5cdFx0XHRcdC5yZXF1ZXN0T2JqZWN0KClcblx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKG9EYXRhOiBhbnkpIHtcblx0XHRcdFx0XHRmbkdldExpbmtzKG9EYXRhUG9pbnRzLCBvRGF0YSk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgcmV0cmlldmUgdGhlIGxpbmtzIGZyb20gdGhlIHNoZWxsIHNlcnZpY2VcIiwgb0Vycm9yKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogQHBhcmFtIG9FcnJvclxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIGZuT25FcnJvcihvRXJyb3I6IGFueSkge1xuXHRcdFx0TG9nLmVycm9yKG9FcnJvcik7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gZm5TZXRMaW5rRW5hYmxlbWVudChpZDogc3RyaW5nLCBhU3VwcG9ydGVkTGlua3M6IGFueSkge1xuXHRcdFx0Y29uc3Qgc0xpbmtJZCA9IGlkO1xuXHRcdFx0Ly8gcHJvY2VzcyB2aWFibGUgbGlua3MgZnJvbSBnZXRMaW5rcyBmb3IgYWxsIGRhdGFwb2ludHMgaGF2aW5nIG91dGJvdW5kXG5cdFx0XHRpZiAoYVN1cHBvcnRlZExpbmtzICYmIGFTdXBwb3J0ZWRMaW5rcy5sZW5ndGggPT09IDEgJiYgYVN1cHBvcnRlZExpbmtzWzBdLnN1cHBvcnRlZCkge1xuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYGlzSGVhZGVyRFBMaW5rVmlzaWJsZS8ke3NMaW5rSWR9YCwgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogQHBhcmFtIG9TdWJEYXRhUG9pbnRzXG5cdFx0ICogQHBhcmFtIG9QYWdlRGF0YVxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIGZuR2V0TGlua3Mob1N1YkRhdGFQb2ludHM6IGFueSwgb1BhZ2VEYXRhOiBhbnkpIHtcblx0XHRcdGZvciAoY29uc3Qgc0lkIGluIG9TdWJEYXRhUG9pbnRzKSB7XG5cdFx0XHRcdGNvbnN0IG9EYXRhUG9pbnQgPSBvU3ViRGF0YVBvaW50c1tzSWRdO1xuXHRcdFx0XHRjb25zdCBvUGFyYW1zOiBhbnkgPSB7fTtcblx0XHRcdFx0Y29uc3Qgb0xpbmsgPSBvVmlldy5ieUlkKHNJZCk7XG5cdFx0XHRcdGlmICghb0xpbmspIHtcblx0XHRcdFx0XHQvLyBmb3IgZGF0YSBwb2ludHMgY29uZmlndXJlZCBpbiBhcHAgZGVzY3JpcHRvciBidXQgbm90IGFubm90YXRlZCBpbiB0aGUgaGVhZGVyXG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3Qgb0xpbmtDb250ZXh0ID0gb0xpbmsuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRcdFx0Y29uc3Qgb0xpbmtEYXRhOiBhbnkgPSBvTGlua0NvbnRleHQgJiYgb0xpbmtDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0XHRsZXQgb01peGVkQ29udGV4dDogYW55ID0gbWVyZ2Uoe30sIG9QYWdlRGF0YSwgb0xpbmtEYXRhKTtcblx0XHRcdFx0Ly8gcHJvY2VzcyBzZW1hbnRpYyBvYmplY3QgbWFwcGluZ3Ncblx0XHRcdFx0aWYgKG9EYXRhUG9pbnQuc2VtYW50aWNPYmplY3RNYXBwaW5nKSB7XG5cdFx0XHRcdFx0Y29uc3QgYVNlbWFudGljT2JqZWN0TWFwcGluZyA9IG9EYXRhUG9pbnQuc2VtYW50aWNPYmplY3RNYXBwaW5nO1xuXHRcdFx0XHRcdGZvciAoY29uc3QgaXRlbSBpbiBhU2VtYW50aWNPYmplY3RNYXBwaW5nKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvTWFwcGluZyA9IGFTZW1hbnRpY09iamVjdE1hcHBpbmdbaXRlbV07XG5cdFx0XHRcdFx0XHRjb25zdCBzTWFpblByb3BlcnR5ID0gb01hcHBpbmdbXCJMb2NhbFByb3BlcnR5XCJdW1wiJFByb3BlcnR5UGF0aFwiXTtcblx0XHRcdFx0XHRcdGNvbnN0IHNNYXBwZWRQcm9wZXJ0eSA9IG9NYXBwaW5nW1wiU2VtYW50aWNPYmplY3RQcm9wZXJ0eVwiXTtcblx0XHRcdFx0XHRcdGlmIChzTWFpblByb3BlcnR5ICE9PSBzTWFwcGVkUHJvcGVydHkpIHtcblx0XHRcdFx0XHRcdFx0aWYgKG9NaXhlZENvbnRleHQuaGFzT3duUHJvcGVydHkoc01haW5Qcm9wZXJ0eSkpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBvTmV3TWFwcGluZzogYW55ID0ge307XG5cdFx0XHRcdFx0XHRcdFx0b05ld01hcHBpbmdbc01hcHBlZFByb3BlcnR5XSA9IG9NaXhlZENvbnRleHRbc01haW5Qcm9wZXJ0eV07XG5cdFx0XHRcdFx0XHRcdFx0b01peGVkQ29udGV4dCA9IG1lcmdlKHt9LCBvTWl4ZWRDb250ZXh0LCBvTmV3TWFwcGluZyk7XG5cdFx0XHRcdFx0XHRcdFx0ZGVsZXRlIG9NaXhlZENvbnRleHRbc01haW5Qcm9wZXJ0eV07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAob01peGVkQ29udGV4dCkge1xuXHRcdFx0XHRcdGZvciAoY29uc3Qgc0tleSBpbiBvTWl4ZWRDb250ZXh0KSB7XG5cdFx0XHRcdFx0XHRpZiAoc0tleS5pbmRleE9mKFwiX1wiKSAhPT0gMCAmJiBzS2V5LmluZGV4T2YoXCJvZGF0YS5jb250ZXh0XCIpID09PSAtMSkge1xuXHRcdFx0XHRcdFx0XHRvUGFyYW1zW3NLZXldID0gb01peGVkQ29udGV4dFtzS2V5XTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gdmFsaWRhdGUgaWYgYSBsaW5rIG11c3QgYmUgcmVuZGVyZWRcblx0XHRcdFx0b1NoZWxsU2VydmljZXNcblx0XHRcdFx0XHQuaXNOYXZpZ2F0aW9uU3VwcG9ydGVkKFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0OiB7XG5cdFx0XHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IG9EYXRhUG9pbnQuc2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0XHRcdFx0YWN0aW9uOiBvRGF0YVBvaW50LmFjdGlvblxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRwYXJhbXM6IG9QYXJhbXNcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRdKVxuXHRcdFx0XHRcdC50aGVuKChhTGlua3MpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiBmblNldExpbmtFbmFibGVtZW50KHNJZCwgYUxpbmtzKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmbk9uRXJyb3IpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGhhbmRsZXJzID0ge1xuXHRcdC8qKlxuXHRcdCAqIEludm9rZXMgdGhlIHBhZ2UgcHJpbWFyeSBhY3Rpb24gb24gcHJlc3Mgb2YgQ3RybCtFbnRlci5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSBvQ29udHJvbGxlciBUaGUgcGFnZSBjb250cm9sbGVyXG5cdFx0ICogQHBhcmFtIG9WaWV3XG5cdFx0ICogQHBhcmFtIG9Db250ZXh0IENvbnRleHQgZm9yIHdoaWNoIHRoZSBhY3Rpb24gaXMgY2FsbGVkXG5cdFx0ICogQHBhcmFtIHNBY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb24gdG8gYmUgY2FsbGVkXG5cdFx0ICogQHBhcmFtIFttUGFyYW1ldGVyc10gQ29udGFpbnMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuXHRcdCAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuY29udGV4dHNdIE1hbmRhdG9yeSBmb3IgYSBib3VuZCBhY3Rpb24sIGVpdGhlciBvbmUgY29udGV4dCBvciBhbiBhcnJheSB3aXRoIGNvbnRleHRzIGZvciB3aGljaCB0aGUgYWN0aW9uIGlzIGNhbGxlZFxuXHRcdCAqIEBwYXJhbSBbbVBhcmFtZXRlcnMubW9kZWxdIE1hbmRhdG9yeSBmb3IgYW4gdW5ib3VuZCBhY3Rpb247IGFuIGluc3RhbmNlIG9mIGFuIE9EYXRhIFY0IG1vZGVsXG5cdFx0ICogQHBhcmFtIFttQ29uZGl0aW9uc10gQ29udGFpbnMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuXHRcdCAqIEBwYXJhbSBbbUNvbmRpdGlvbnMucG9zaXRpdmVBY3Rpb25WaXNpYmxlXSBUaGUgdmlzaWJpbGl0eSBvZiBzZW1hdGljIHBvc2l0aXZlIGFjdGlvblxuXHRcdCAqIEBwYXJhbSBbbUNvbmRpdGlvbnMucG9zaXRpdmVBY3Rpb25FbmFibGVkXSBUaGUgZW5hYmxlbWVudCBvZiBzZW1hbnRpYyBwb3NpdGl2ZSBhY3Rpb25cblx0XHQgKiBAcGFyYW0gW21Db25kaXRpb25zLmVkaXRBY3Rpb25WaXNpYmxlXSBUaGUgRWRpdCBidXR0b24gdmlzaWJpbGl0eVxuXHRcdCAqIEBwYXJhbSBbbUNvbmRpdGlvbnMuZWRpdEFjdGlvbkVuYWJsZWRdIFRoZSBlbmFibGVtZW50IG9mIEVkaXQgYnV0dG9uXG5cdFx0ICogQHVpNS1yZXN0cmljdGVkXG5cdFx0ICogQGZpbmFsXG5cdFx0ICovXG5cdFx0b25QcmltYXJ5QWN0aW9uKFxuXHRcdFx0b0NvbnRyb2xsZXI6IE9iamVjdFBhZ2VDb250cm9sbGVyLFxuXHRcdFx0b1ZpZXc6IFZpZXcsXG5cdFx0XHRvQ29udGV4dDogQ29udGV4dCxcblx0XHRcdHNBY3Rpb25OYW1lOiBzdHJpbmcsXG5cdFx0XHRtUGFyYW1ldGVyczogdW5rbm93bixcblx0XHRcdG1Db25kaXRpb25zOiB7XG5cdFx0XHRcdHBvc2l0aXZlQWN0aW9uVmlzaWJsZTogYm9vbGVhbjtcblx0XHRcdFx0cG9zaXRpdmVBY3Rpb25FbmFibGVkOiBib29sZWFuO1xuXHRcdFx0XHRlZGl0QWN0aW9uVmlzaWJsZTogYm9vbGVhbjtcblx0XHRcdFx0ZWRpdEFjdGlvbkVuYWJsZWQ6IGJvb2xlYW47XG5cdFx0XHR9XG5cdFx0KSB7XG5cdFx0XHRjb25zdCBpVmlld0xldmVsID0gKG9Db250cm9sbGVyLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkudmlld0xldmVsLFxuXHRcdFx0XHRvT2JqZWN0UGFnZSA9IG9Db250cm9sbGVyLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdFx0aWYgKG1Db25kaXRpb25zLnBvc2l0aXZlQWN0aW9uVmlzaWJsZSkge1xuXHRcdFx0XHRpZiAobUNvbmRpdGlvbnMucG9zaXRpdmVBY3Rpb25FbmFibGVkKSB7XG5cdFx0XHRcdFx0b0NvbnRyb2xsZXIuaGFuZGxlcnMub25DYWxsQWN0aW9uKG9WaWV3LCBzQWN0aW9uTmFtZSwgbVBhcmFtZXRlcnMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKG1Db25kaXRpb25zLmVkaXRBY3Rpb25WaXNpYmxlICYmIGlWaWV3TGV2ZWwgPT09IDEpIHtcblx0XHRcdFx0aWYgKG1Db25kaXRpb25zLmVkaXRBY3Rpb25FbmFibGVkKSB7XG5cdFx0XHRcdFx0b0NvbnRyb2xsZXIuX2VkaXREb2N1bWVudChvQ29udGV4dCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoaVZpZXdMZXZlbCA9PT0gMSAmJiBvT2JqZWN0UGFnZS5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIikpIHtcblx0XHRcdFx0b0NvbnRyb2xsZXIuX3NhdmVEb2N1bWVudChvQ29udGV4dCk7XG5cdFx0XHR9IGVsc2UgaWYgKG9PYmplY3RQYWdlLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKSkge1xuXHRcdFx0XHRvQ29udHJvbGxlci5fYXBwbHlEb2N1bWVudChvQ29udGV4dCk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdG9uVGFibGVDb250ZXh0Q2hhbmdlKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyLCBvRXZlbnQ6IGFueSkge1xuXHRcdFx0Y29uc3Qgb1NvdXJjZSA9IG9FdmVudC5nZXRTb3VyY2UoKTtcblx0XHRcdGxldCBvVGFibGU6IGFueTtcblx0XHRcdHRoaXMuX2ZpbmRUYWJsZXMoKS5zb21lKGZ1bmN0aW9uIChfb1RhYmxlOiBhbnkpIHtcblx0XHRcdFx0aWYgKF9vVGFibGUuZ2V0Um93QmluZGluZygpID09PSBvU291cmNlKSB7XG5cdFx0XHRcdFx0b1RhYmxlID0gX29UYWJsZTtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9KTtcblxuXHRcdFx0Y29uc3Qgb0N1cnJlbnRBY3Rpb25Qcm9taXNlID0gdGhpcy5fZWRpdEZsb3cuZ2V0Q3VycmVudEFjdGlvblByb21pc2UoKTtcblx0XHRcdGlmIChvQ3VycmVudEFjdGlvblByb21pc2UpIHtcblx0XHRcdFx0bGV0IGFUYWJsZUNvbnRleHRzOiBhbnk7XG5cdFx0XHRcdGlmIChvVGFibGUuZ2V0VHlwZSgpLmdldE1ldGFkYXRhKCkuaXNBKFwic2FwLnVpLm1kYy50YWJsZS5HcmlkVGFibGVUeXBlXCIpKSB7XG5cdFx0XHRcdFx0YVRhYmxlQ29udGV4dHMgPSBvU291cmNlLmdldENvbnRleHRzKDApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGFUYWJsZUNvbnRleHRzID0gb1NvdXJjZS5nZXRDdXJyZW50Q29udGV4dHMoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvL2lmIGNvbnRleHRzIGFyZSBub3QgZnVsbHkgbG9hZGVkIHRoZSBnZXRjb250ZXh0cyBmdW5jdGlvbiBhYm92ZSB3aWxsIHRyaWdnZXIgYSBuZXcgY2hhbmdlIGV2ZW50IGNhbGxcblx0XHRcdFx0aWYgKCFhVGFibGVDb250ZXh0c1swXSkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRvQ3VycmVudEFjdGlvblByb21pc2Vcblx0XHRcdFx0XHQudGhlbigob0FjdGlvblJlc3BvbnNlOiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdGlmICghb0FjdGlvblJlc3BvbnNlIHx8IG9BY3Rpb25SZXNwb25zZS5jb250cm9sSWQgIT09IG9UYWJsZS5zSWQpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Y29uc3Qgb0FjdGlvbkRhdGEgPSBvQWN0aW9uUmVzcG9uc2Uub0RhdGE7XG5cdFx0XHRcdFx0XHRjb25zdCBhS2V5cyA9IG9BY3Rpb25SZXNwb25zZS5rZXlzO1xuXHRcdFx0XHRcdFx0bGV0IGlOZXdJdGVtcCA9IC0xO1xuXHRcdFx0XHRcdFx0YVRhYmxlQ29udGV4dHMuZmluZChmdW5jdGlvbiAob1RhYmxlQ29udGV4dDogYW55LCBpOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb1RhYmxlRGF0YSA9IG9UYWJsZUNvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGJDb21wYXJlID0gYUtleXMuZXZlcnkoZnVuY3Rpb24gKHNLZXk6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBvVGFibGVEYXRhW3NLZXldID09PSBvQWN0aW9uRGF0YVtzS2V5XTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdGlmIChiQ29tcGFyZSkge1xuXHRcdFx0XHRcdFx0XHRcdGlOZXdJdGVtcCA9IGk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmV0dXJuIGJDb21wYXJlO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRpZiAoaU5ld0l0ZW1wICE9PSAtMSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBhRGlhbG9ncyA9IEluc3RhbmNlTWFuYWdlci5nZXRPcGVuRGlhbG9ncygpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvRGlhbG9nID1cblx0XHRcdFx0XHRcdFx0XHRhRGlhbG9ncy5sZW5ndGggPiAwID8gYURpYWxvZ3MuZmluZCgoZGlhbG9nKSA9PiBkaWFsb2cuZGF0YShcIkZ1bGxTY3JlZW5EaWFsb2dcIikgIT09IHRydWUpIDogbnVsbDtcblx0XHRcdFx0XHRcdFx0aWYgKG9EaWFsb2cpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBieSBkZXNpZ24sIGEgc2FwLm0uZGlhbG9nIHNldCB0aGUgZm9jdXMgdG8gdGhlIHByZXZpb3VzIGZvY3VzZWQgZWxlbWVudCB3aGVuIGNsb3NpbmcuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gd2Ugc2hvdWxkIHdhaXQgZm9yIHRoZSBkaWFsb2cgdG8gYmUgY2xvc2UgYmVmb3JlIHRvIGZvY3VzIGFub3RoZXIgZWxlbWVudFxuXHRcdFx0XHRcdFx0XHRcdG9EaWFsb2cuYXR0YWNoRXZlbnRPbmNlKFwiYWZ0ZXJDbG9zZVwiLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRvVGFibGUuZm9jdXNSb3coaU5ld0l0ZW1wLCB0cnVlKTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRvVGFibGUuZm9jdXNSb3coaU5ld0l0ZW1wLCB0cnVlKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR0aGlzLl9lZGl0Rmxvdy5kZWxldGVDdXJyZW50QWN0aW9uUHJvbWlzZSgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnI6IGFueSkge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKGBBbiBlcnJvciBvY2N1cnMgd2hpbGUgc2Nyb2xsaW5nIHRvIHRoZSBuZXdseSBjcmVhdGVkIEl0ZW06ICR7ZXJyfWApO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0Ly8gZmlyZSBNb2RlbENvbnRleHRDaGFuZ2Ugb24gdGhlIG1lc3NhZ2UgYnV0dG9uIHdoZW5ldmVyIHRoZSB0YWJsZSBjb250ZXh0IGNoYW5nZXNcblx0XHRcdHRoaXMubWVzc2FnZUJ1dHRvbi5maXJlTW9kZWxDb250ZXh0Q2hhbmdlKCk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEludm9rZXMgYW4gYWN0aW9uIC0gYm91bmQvdW5ib3VuZCBhbmQgc2V0cyB0aGUgcGFnZSBkaXJ0eS5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSBvVmlld1xuXHRcdCAqIEBwYXJhbSBzQWN0aW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uIHRvIGJlIGNhbGxlZFxuXHRcdCAqIEBwYXJhbSBbbVBhcmFtZXRlcnNdIENvbnRhaW5zIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcblx0XHQgKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmNvbnRleHRzXSBNYW5kYXRvcnkgZm9yIGEgYm91bmQgYWN0aW9uLCBlaXRoZXIgb25lIGNvbnRleHQgb3IgYW4gYXJyYXkgd2l0aCBjb250ZXh0cyBmb3Igd2hpY2ggdGhlIGFjdGlvbiBpcyBjYWxsZWRcblx0XHQgKiBAcGFyYW0gW21QYXJhbWV0ZXJzLm1vZGVsXSBNYW5kYXRvcnkgZm9yIGFuIHVuYm91bmQgYWN0aW9uOyBhbiBpbnN0YW5jZSBvZiBhbiBPRGF0YSBWNCBtb2RlbFxuXHRcdCAqIEByZXR1cm5zIFRoZSBhY3Rpb24gcHJvbWlzZVxuXHRcdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHRcdCAqIEBmaW5hbFxuXHRcdCAqL1xuXHRcdG9uQ2FsbEFjdGlvbihvVmlldzogYW55LCBzQWN0aW9uTmFtZTogc3RyaW5nLCBtUGFyYW1ldGVyczogYW55KSB7XG5cdFx0XHRjb25zdCBvQ29udHJvbGxlciA9IG9WaWV3LmdldENvbnRyb2xsZXIoKTtcblx0XHRcdHJldHVybiBvQ29udHJvbGxlci5lZGl0Rmxvd1xuXHRcdFx0XHQuaW52b2tlQWN0aW9uKHNBY3Rpb25OYW1lLCBtUGFyYW1ldGVycylcblx0XHRcdFx0LnRoZW4ob0NvbnRyb2xsZXIuX3Nob3dNZXNzYWdlUG9wb3Zlci5iaW5kKG9Db250cm9sbGVyLCB1bmRlZmluZWQpKVxuXHRcdFx0XHQuY2F0Y2gob0NvbnRyb2xsZXIuX3Nob3dNZXNzYWdlUG9wb3Zlci5iaW5kKG9Db250cm9sbGVyKSk7XG5cdFx0fSxcblx0XHRvbkRhdGFQb2ludFRpdGxlUHJlc3NlZChvQ29udHJvbGxlcjogYW55LCBvU291cmNlOiBhbnksIG9NYW5pZmVzdE91dGJvdW5kOiBhbnksIHNDb250cm9sQ29uZmlnOiBhbnksIHNDb2xsZWN0aW9uUGF0aDogYW55KSB7XG5cdFx0XHRvTWFuaWZlc3RPdXRib3VuZCA9IHR5cGVvZiBvTWFuaWZlc3RPdXRib3VuZCA9PT0gXCJzdHJpbmdcIiA/IEpTT04ucGFyc2Uob01hbmlmZXN0T3V0Ym91bmQpIDogb01hbmlmZXN0T3V0Ym91bmQ7XG5cdFx0XHRjb25zdCBvVGFyZ2V0SW5mbyA9IG9NYW5pZmVzdE91dGJvdW5kW3NDb250cm9sQ29uZmlnXSxcblx0XHRcdFx0YVNlbWFudGljT2JqZWN0TWFwcGluZyA9IENvbW1vblV0aWxzLmdldFNlbWFudGljT2JqZWN0TWFwcGluZyhvVGFyZ2V0SW5mbyksXG5cdFx0XHRcdG9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHQgPSBvU291cmNlLmdldEJpbmRpbmdDb250ZXh0KCksXG5cdFx0XHRcdHNNZXRhUGF0aCA9IG9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHRcblx0XHRcdFx0XHQuZ2V0TW9kZWwoKVxuXHRcdFx0XHRcdC5nZXRNZXRhTW9kZWwoKVxuXHRcdFx0XHRcdC5nZXRNZXRhUGF0aChvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0LmdldFBhdGgoKSk7XG5cdFx0XHRsZXQgYU5hdmlnYXRpb25EYXRhID0gb0NvbnRyb2xsZXIuX2dldENoYXJ0Q29udGV4dERhdGEob0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dCwgc0NvbGxlY3Rpb25QYXRoKTtcblx0XHRcdGxldCBhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnM7XG5cblx0XHRcdGFOYXZpZ2F0aW9uRGF0YSA9IGFOYXZpZ2F0aW9uRGF0YS5tYXAoZnVuY3Rpb24gKG9OYXZpZ2F0aW9uRGF0YTogYW55KSB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0ZGF0YTogb05hdmlnYXRpb25EYXRhLFxuXHRcdFx0XHRcdG1ldGFQYXRoOiBzTWV0YVBhdGggKyAoc0NvbGxlY3Rpb25QYXRoID8gYC8ke3NDb2xsZWN0aW9uUGF0aH1gIDogXCJcIilcblx0XHRcdFx0fTtcblx0XHRcdH0pO1xuXHRcdFx0aWYgKG9UYXJnZXRJbmZvICYmIG9UYXJnZXRJbmZvLnBhcmFtZXRlcnMpIHtcblx0XHRcdFx0Y29uc3Qgb1BhcmFtcyA9IG9UYXJnZXRJbmZvLnBhcmFtZXRlcnMgJiYgb0NvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5nZXRPdXRib3VuZFBhcmFtcyhvVGFyZ2V0SW5mby5wYXJhbWV0ZXJzKTtcblx0XHRcdFx0aWYgKE9iamVjdC5rZXlzKG9QYXJhbXMpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnMgPSBvUGFyYW1zO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAob1RhcmdldEluZm8gJiYgb1RhcmdldEluZm8uc2VtYW50aWNPYmplY3QgJiYgb1RhcmdldEluZm8uYWN0aW9uKSB7XG5cdFx0XHRcdG9Db250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ubmF2aWdhdGUob1RhcmdldEluZm8uc2VtYW50aWNPYmplY3QsIG9UYXJnZXRJbmZvLmFjdGlvbiwge1xuXHRcdFx0XHRcdG5hdmlnYXRpb25Db250ZXh0czogYU5hdmlnYXRpb25EYXRhLFxuXHRcdFx0XHRcdHNlbWFudGljT2JqZWN0TWFwcGluZzogYVNlbWFudGljT2JqZWN0TWFwcGluZyxcblx0XHRcdFx0XHRhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnM6IGFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVyc1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIFRyaWdnZXJzIGFuIG91dGJvdW5kIG5hdmlnYXRpb24gd2hlbiBhIHVzZXIgY2hvb3NlcyB0aGUgY2hldnJvbi5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSBvQ29udHJvbGxlclxuXHRcdCAqIEBwYXJhbSBzT3V0Ym91bmRUYXJnZXQgTmFtZSBvZiB0aGUgb3V0Ym91bmQgdGFyZ2V0IChuZWVkcyB0byBiZSBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdClcblx0XHQgKiBAcGFyYW0gb0NvbnRleHQgVGhlIGNvbnRleHQgdGhhdCBjb250YWlucyB0aGUgZGF0YSBmb3IgdGhlIHRhcmdldCBhcHBcblx0XHQgKiBAcGFyYW0gc0NyZWF0ZVBhdGggQ3JlYXRlIHBhdGggd2hlbiB0aGUgY2hldnJvbiBpcyBjcmVhdGVkLlxuXHRcdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggaXMgcmVzb2x2ZWQgb25jZSB0aGUgbmF2aWdhdGlvbiBpcyB0cmlnZ2VyZWQgKD8/PyBtYXliZSBvbmx5IG9uY2UgZmluaXNoZWQ/KVxuXHRcdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHRcdCAqIEBmaW5hbFxuXHRcdCAqL1xuXHRcdG9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZChvQ29udHJvbGxlcjogT2JqZWN0UGFnZUNvbnRyb2xsZXIsIHNPdXRib3VuZFRhcmdldDogc3RyaW5nLCBvQ29udGV4dDogYW55LCBzQ3JlYXRlUGF0aDogc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gb0NvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5vbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQob0NvbnRyb2xsZXIsIHNPdXRib3VuZFRhcmdldCwgb0NvbnRleHQsIHNDcmVhdGVQYXRoKTtcblx0XHR9LFxuXG5cdFx0b25OYXZpZ2F0ZUNoYW5nZSh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlciwgb0V2ZW50OiBhbnkpIHtcblx0XHRcdC8vd2lsbCBiZSBjYWxsZWQgYWx3YXlzIHdoZW4gd2UgY2xpY2sgb24gYSBzZWN0aW9uIHRhYlxuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0dGhpcy5iU2VjdGlvbk5hdmlnYXRlZCA9IHRydWU7XG5cblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdG9PYmplY3RQYWdlLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKSAmJlxuXHRcdFx0XHQodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLnNlY3Rpb25MYXlvdXQgPT09IFwiVGFic1wiICYmXG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImVycm9yTmF2aWdhdGlvblNlY3Rpb25GbGFnXCIpID09PSBmYWxzZVxuXHRcdFx0KSB7XG5cdFx0XHRcdGNvbnN0IG9TdWJTZWN0aW9uID0gb0V2ZW50LmdldFBhcmFtZXRlcihcInN1YlNlY3Rpb25cIik7XG5cdFx0XHRcdHRoaXMuX3VwZGF0ZUZvY3VzSW5FZGl0TW9kZShbb1N1YlNlY3Rpb25dKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdG9uVmFyaWFudFNlbGVjdGVkOiBmdW5jdGlvbiAodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIpIHtcblx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHR9LFxuXHRcdG9uVmFyaWFudFNhdmVkOiBmdW5jdGlvbiAodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIpIHtcblx0XHRcdC8vVE9ETzogU2hvdWxkIHJlbW92ZSB0aGlzIHNldFRpbWVPdXQgb25jZSBWYXJpYW50IE1hbmFnZW1lbnQgcHJvdmlkZXMgYW4gYXBpIHRvIGZldGNoIHRoZSBjdXJyZW50IHZhcmlhbnQga2V5IG9uIHNhdmVcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0XHR9LCA1MDApO1xuXHRcdH0sXG5cdFx0bmF2aWdhdGVUb1N1YlNlY3Rpb246IGZ1bmN0aW9uIChvQ29udHJvbGxlcjogT2JqZWN0UGFnZUNvbnRyb2xsZXIsIHZEZXRhaWxDb25maWc6IGFueSkge1xuXHRcdFx0Y29uc3Qgb0RldGFpbENvbmZpZyA9IHR5cGVvZiB2RGV0YWlsQ29uZmlnID09PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZSh2RGV0YWlsQ29uZmlnKSA6IHZEZXRhaWxDb25maWc7XG5cdFx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IG9Db250cm9sbGVyLmdldFZpZXcoKS5ieUlkKFwiZmU6Ok9iamVjdFBhZ2VcIikgYXMgT2JqZWN0UGFnZUxheW91dDtcblx0XHRcdGxldCBvU2VjdGlvbjtcblx0XHRcdGxldCBvU3ViU2VjdGlvbjtcblx0XHRcdGlmIChvRGV0YWlsQ29uZmlnLnNlY3Rpb25JZCkge1xuXHRcdFx0XHRvU2VjdGlvbiA9IG9Db250cm9sbGVyLmdldFZpZXcoKS5ieUlkKG9EZXRhaWxDb25maWcuc2VjdGlvbklkKSBhcyBPYmplY3RQYWdlU2VjdGlvbjtcblx0XHRcdFx0b1N1YlNlY3Rpb24gPSAoXG5cdFx0XHRcdFx0b0RldGFpbENvbmZpZy5zdWJTZWN0aW9uSWRcblx0XHRcdFx0XHRcdD8gb0NvbnRyb2xsZXIuZ2V0VmlldygpLmJ5SWQob0RldGFpbENvbmZpZy5zdWJTZWN0aW9uSWQpXG5cdFx0XHRcdFx0XHQ6IG9TZWN0aW9uICYmIG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkgJiYgb1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKVswXVxuXHRcdFx0XHQpIGFzIE9iamVjdFBhZ2VTdWJTZWN0aW9uO1xuXHRcdFx0fSBlbHNlIGlmIChvRGV0YWlsQ29uZmlnLnN1YlNlY3Rpb25JZCkge1xuXHRcdFx0XHRvU3ViU2VjdGlvbiA9IG9Db250cm9sbGVyLmdldFZpZXcoKS5ieUlkKG9EZXRhaWxDb25maWcuc3ViU2VjdGlvbklkKSBhcyBPYmplY3RQYWdlU3ViU2VjdGlvbjtcblx0XHRcdFx0b1NlY3Rpb24gPSBvU3ViU2VjdGlvbiAmJiAob1N1YlNlY3Rpb24uZ2V0UGFyZW50KCkgYXMgT2JqZWN0UGFnZVNlY3Rpb24pO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFvU2VjdGlvbiB8fCAhb1N1YlNlY3Rpb24gfHwgIW9TZWN0aW9uLmdldFZpc2libGUoKSB8fCAhb1N1YlNlY3Rpb24uZ2V0VmlzaWJsZSgpKSB7XG5cdFx0XHRcdCgob0NvbnRyb2xsZXIuZ2V0VmlldygpLmdldE1vZGVsKFwic2FwLmZlLmkxOG5cIikgYXMgUmVzb3VyY2VNb2RlbCkuZ2V0UmVzb3VyY2VCdW5kbGUoKSBhcyBQcm9taXNlPFJlc291cmNlQnVuZGxlPilcblx0XHRcdFx0XHQudGhlbihmdW5jdGlvbiAob1Jlc291cmNlQnVuZGxlKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzVGl0bGUgPSBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChcblx0XHRcdFx0XHRcdFx0XCJDX1JPVVRJTkdfTkFWSUdBVElPTl9ESVNBQkxFRF9USVRMRVwiLFxuXHRcdFx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGUsXG5cdFx0XHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0XHRcdChvQ29udHJvbGxlci5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLmVudGl0eVNldFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihzVGl0bGUpO1xuXHRcdFx0XHRcdFx0TWVzc2FnZUJveC5lcnJvcihzVGl0bGUpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKGVycm9yKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9PYmplY3RQYWdlLnNjcm9sbFRvU2VjdGlvbihvU3ViU2VjdGlvbi5nZXRJZCgpKTtcblx0XHRcdFx0Ly8gdHJpZ2dlciBpYXBwIHN0YXRlIGNoYW5nZVxuXHRcdFx0XHRvT2JqZWN0UGFnZS5maXJlTmF2aWdhdGUoe1xuXHRcdFx0XHRcdHNlY3Rpb246IG9TZWN0aW9uLFxuXHRcdFx0XHRcdHN1YlNlY3Rpb246IG9TdWJTZWN0aW9uXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0b25DaGFydFNlbGVjdGlvbkNoYW5nZWQ6IGZ1bmN0aW9uIChvRXZlbnQ6IGFueSkge1xuXHRcdFx0Q2hhcnRSdW50aW1lLmZuVXBkYXRlQ2hhcnQob0V2ZW50KTtcblx0XHR9LFxuXHRcdG9uU3RhdGVDaGFuZ2UodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIpIHtcblx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHR9XG5cdH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IE9iamVjdFBhZ2VDb250cm9sbGVyO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQWtqQk8sZ0JBQWdCQSxJQUFoQixFQUFzQkMsT0FBdEIsRUFBK0I7SUFDckMsSUFBSTtNQUNILElBQUlDLE1BQU0sR0FBR0YsSUFBSSxFQUFqQjtJQUNBLENBRkQsQ0FFRSxPQUFN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
|
|
1823
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJib2R5IiwicmVjb3ZlciIsInJlc3VsdCIsImUiLCJ0aGVuIiwiZmluYWxpemVyIiwiYmluZCIsIk9iamVjdFBhZ2VDb250cm9sbGVyIiwiZGVmaW5lVUk1Q2xhc3MiLCJ1c2luZ0V4dGVuc2lvbiIsIlBsYWNlaG9sZGVyIiwiRWRpdEZsb3ciLCJTaGFyZSIsIm92ZXJyaWRlIiwiU2hhcmVPdmVycmlkZXMiLCJJbnRlcm5hbEVkaXRGbG93IiwiRWRpdEZsb3dPdmVycmlkZXMiLCJJbnRlcm5hbFJvdXRpbmciLCJJbnRlcm5hbFJvdXRpbmdPdmVycmlkZSIsIlBhZ2luYXRvciIsIlBhZ2luYXRvck92ZXJyaWRlIiwiTWVzc2FnZUhhbmRsZXIiLCJNZXNzYWdlSGFuZGxlck92ZXJyaWRlIiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUiLCJJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldE5hdmlnYXRpb25Nb2RlIiwiYklzU3RpY2t5RWRpdE1vZGUiLCJnZXRWaWV3IiwiZ2V0Q29udHJvbGxlciIsImdldFN0aWNreUVkaXRNb2RlIiwidW5kZWZpbmVkIiwiVmlld1N0YXRlIiwiVmlld1N0YXRlT3ZlcnJpZGVzIiwiUGFnZVJlYWR5IiwiaXNDb250ZXh0RXhwZWN0ZWQiLCJNYXNzRWRpdCIsInB1YmxpY0V4dGVuc2lvbiIsImZpbmFsRXh0ZW5zaW9uIiwiZXh0ZW5zaWJsZSIsIk92ZXJyaWRlRXhlY3V0aW9uIiwiQWZ0ZXIiLCJoYW5kbGVycyIsIm9uUHJpbWFyeUFjdGlvbiIsIm9Db250cm9sbGVyIiwib1ZpZXciLCJvQ29udGV4dCIsInNBY3Rpb25OYW1lIiwibVBhcmFtZXRlcnMiLCJtQ29uZGl0aW9ucyIsImlWaWV3TGV2ZWwiLCJnZXRWaWV3RGF0YSIsInZpZXdMZXZlbCIsIm9PYmplY3RQYWdlIiwiX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sIiwicG9zaXRpdmVBY3Rpb25WaXNpYmxlIiwicG9zaXRpdmVBY3Rpb25FbmFibGVkIiwib25DYWxsQWN0aW9uIiwiZWRpdEFjdGlvblZpc2libGUiLCJlZGl0QWN0aW9uRW5hYmxlZCIsIl9lZGl0RG9jdW1lbnQiLCJnZXRNb2RlbCIsImdldFByb3BlcnR5IiwiX3NhdmVEb2N1bWVudCIsIl9hcHBseURvY3VtZW50Iiwib25UYWJsZUNvbnRleHRDaGFuZ2UiLCJvRXZlbnQiLCJvU291cmNlIiwiZ2V0U291cmNlIiwib1RhYmxlIiwiX2ZpbmRUYWJsZXMiLCJzb21lIiwiX29UYWJsZSIsImdldFJvd0JpbmRpbmciLCJvQ3VycmVudEFjdGlvblByb21pc2UiLCJfZWRpdEZsb3ciLCJnZXRDdXJyZW50QWN0aW9uUHJvbWlzZSIsImFUYWJsZUNvbnRleHRzIiwiZ2V0VHlwZSIsImdldE1ldGFkYXRhIiwiaXNBIiwiZ2V0Q29udGV4dHMiLCJnZXRDdXJyZW50Q29udGV4dHMiLCJvQWN0aW9uUmVzcG9uc2UiLCJjb250cm9sSWQiLCJzSWQiLCJvQWN0aW9uRGF0YSIsIm9EYXRhIiwiYUtleXMiLCJrZXlzIiwiaU5ld0l0ZW1wIiwiZmluZCIsIm9UYWJsZUNvbnRleHQiLCJpIiwib1RhYmxlRGF0YSIsImdldE9iamVjdCIsImJDb21wYXJlIiwiZXZlcnkiLCJzS2V5IiwiYURpYWxvZ3MiLCJJbnN0YW5jZU1hbmFnZXIiLCJnZXRPcGVuRGlhbG9ncyIsIm9EaWFsb2ciLCJsZW5ndGgiLCJkaWFsb2ciLCJkYXRhIiwiYXR0YWNoRXZlbnRPbmNlIiwiZm9jdXNSb3ciLCJkZWxldGVDdXJyZW50QWN0aW9uUHJvbWlzZSIsImNhdGNoIiwiZXJyIiwiTG9nIiwiZXJyb3IiLCJtZXNzYWdlQnV0dG9uIiwiZmlyZU1vZGVsQ29udGV4dENoYW5nZSIsImVkaXRGbG93IiwiaW52b2tlQWN0aW9uIiwiX3Nob3dNZXNzYWdlUG9wb3ZlciIsIm9uRGF0YVBvaW50VGl0bGVQcmVzc2VkIiwib01hbmlmZXN0T3V0Ym91bmQiLCJzQ29udHJvbENvbmZpZyIsInNDb2xsZWN0aW9uUGF0aCIsIkpTT04iLCJwYXJzZSIsIm9UYXJnZXRJbmZvIiwiYVNlbWFudGljT2JqZWN0TWFwcGluZyIsIkNvbW1vblV0aWxzIiwiZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nIiwib0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0Iiwic01ldGFQYXRoIiwiZ2V0TWV0YU1vZGVsIiwiZ2V0TWV0YVBhdGgiLCJnZXRQYXRoIiwiYU5hdmlnYXRpb25EYXRhIiwiX2dldENoYXJ0Q29udGV4dERhdGEiLCJhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnMiLCJtYXAiLCJvTmF2aWdhdGlvbkRhdGEiLCJtZXRhUGF0aCIsInBhcmFtZXRlcnMiLCJvUGFyYW1zIiwiX2ludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldE91dGJvdW5kUGFyYW1zIiwiT2JqZWN0Iiwic2VtYW50aWNPYmplY3QiLCJhY3Rpb24iLCJuYXZpZ2F0ZSIsIm5hdmlnYXRpb25Db250ZXh0cyIsInNlbWFudGljT2JqZWN0TWFwcGluZyIsIm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZCIsInNPdXRib3VuZFRhcmdldCIsInNDcmVhdGVQYXRoIiwib25OYXZpZ2F0ZUNoYW5nZSIsImdldEV4dGVuc2lvbkFQSSIsInVwZGF0ZUFwcFN0YXRlIiwiYlNlY3Rpb25OYXZpZ2F0ZWQiLCJvSW50ZXJuYWxNb2RlbENvbnRleHQiLCJzZWN0aW9uTGF5b3V0Iiwib1N1YlNlY3Rpb24iLCJnZXRQYXJhbWV0ZXIiLCJfdXBkYXRlRm9jdXNJbkVkaXRNb2RlIiwib25WYXJpYW50U2VsZWN0ZWQiLCJvblZhcmlhbnRTYXZlZCIsInNldFRpbWVvdXQiLCJuYXZpZ2F0ZVRvU3ViU2VjdGlvbiIsInZEZXRhaWxDb25maWciLCJvRGV0YWlsQ29uZmlnIiwiYnlJZCIsIm9TZWN0aW9uIiwic2VjdGlvbklkIiwic3ViU2VjdGlvbklkIiwiZ2V0U3ViU2VjdGlvbnMiLCJnZXRQYXJlbnQiLCJnZXRWaXNpYmxlIiwiZ2V0UmVzb3VyY2VCdW5kbGUiLCJvUmVzb3VyY2VCdW5kbGUiLCJzVGl0bGUiLCJnZXRUcmFuc2xhdGVkVGV4dCIsImVudGl0eVNldCIsIk1lc3NhZ2VCb3giLCJzY3JvbGxUb1NlY3Rpb24iLCJnZXRJZCIsImZpcmVOYXZpZ2F0ZSIsInNlY3Rpb24iLCJzdWJTZWN0aW9uIiwib25DaGFydFNlbGVjdGlvbkNoYW5nZWQiLCJDaGFydFJ1bnRpbWUiLCJmblVwZGF0ZUNoYXJ0Iiwib25TdGF0ZUNoYW5nZSIsImNsb3NlT1BNZXNzYWdlU3RyaXAiLCJoaWRlTWVzc2FnZSIsIm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcyIsIkV4dGVuc2lvbkFQSSIsImV4dGVuc2lvbkFQSSIsIm9uSW5pdCIsInNldFByb3BlcnR5IiwidmlzaWJpbGl0eSIsIml0ZW1zIiwiX2dldEJhdGNoR3JvdXBzRm9yVmlldyIsInVzZU5ld0xhenlMb2FkaW5nIiwiZ2V0RW5hYmxlTGF6eUxvYWRpbmciLCJhdHRhY2hFdmVudCIsIl9oYW5kbGVTdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0Iiwib0l0ZW1CaW5kaW5nIiwiYXR0YWNoQ2hhbmdlIiwiX2ZuU2hvd09QTWVzc2FnZSIsIm9uRXhpdCIsImRlc3Ryb3kiLCJvTWVzc2FnZVBvcG92ZXIiLCJpc09wZW4iLCJjbG9zZSIsImlzS2VlcEFsaXZlIiwic2V0S2VlcEFsaXZlIiwiaXNDb25uZWN0ZWQiLCJkaXNjb25uZWN0IiwidmlldyIsIm1lc3NhZ2VzIiwiZ2V0SXRlbXMiLCJpdGVtIiwiZmlsdGVyIiwibWVzc2FnZSIsImdldFRhcmdldHMiLCJzaG93TWVzc2FnZXMiLCJfZ2V0VGFibGVCaW5kaW5nIiwib25CZWZvcmVSZW5kZXJpbmciLCJQYWdlQ29udHJvbGxlciIsInByb3RvdHlwZSIsImFwcGx5Iiwib1ZpZXdEYXRhIiwicmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCIsIkNvbW1vbkhlbHBlciIsInNldE1ldGFNb2RlbCIsImdldEFwcENvbXBvbmVudCIsIm9uQWZ0ZXJSZW5kZXJpbmciLCJyZXNwb25zZSIsIm9FcnJvciIsIl9vbkJlZm9yZUJpbmRpbmciLCJhVGFibGVzIiwib0ludGVybmFsTW9kZWwiLCJhQmF0Y2hHcm91cHMiLCJvRmFzdENyZWF0aW9uUm93IiwicHVzaCIsImJEcmFmdE5hdmlnYXRpb24iLCJfY2xvc2VTaWRlQ29udGVudCIsIm9wQ29udGV4dCIsImhhc1BlbmRpbmdDaGFuZ2VzIiwiZ2V0QmluZGluZyIsInJlc2V0Q2hhbmdlcyIsImdldENyZWF0aW9uUm93Iiwic2V0QmluZGluZ0NvbnRleHQiLCJmblNjcm9sbFRvUHJlc2VudFNlY3Rpb24iLCJpc0ZpcnN0UmVuZGVyaW5nIiwiYlBlcnNpc3RPUFNjcm9sbCIsInNldFNlbGVjdGVkU2VjdGlvbiIsIm9EZWxlZ2F0ZU9uQmVmb3JlIiwiYWRkRXZlbnREZWxlZ2F0ZSIsInBhZ2VSZWFkeSIsInJlbW92ZUV2ZW50RGVsZWdhdGUiLCJvQmluZGluZyIsImxpc3RCaW5kaW5nIiwib1BhZ2luYXRvckN1cnJlbnRDb250ZXh0Iiwib0JpbmRpbmdUb1VzZSIsInBhZ2luYXRvciIsImluaXRpYWxpemUiLCJzQmluZGluZ1BhdGgiLCJ0ZXN0Iiwic0xpc3RCaW5kaW5nUGF0aCIsInJlcGxhY2UiLCJPRGF0YUxpc3RCaW5kaW5nIiwib01vZGVsIiwiX3NldExpc3RCaW5kaW5nQXN5bmMiLCJkZXRhY2hFdmVudCIsImFTZWN0aW9ucyIsImdldFNlY3Rpb25zIiwiYlVzZUljb25UYWJCYXIiLCJnZXRVc2VJY29uVGFiQmFyIiwiaVNraXAiLCJiSXNJbkVkaXRNb2RlIiwiYkVkaXRhYmxlSGVhZGVyIiwiZWRpdGFibGVIZWFkZXJDb250ZW50IiwiaVNlY3Rpb24iLCJhU3ViU2VjdGlvbnMiLCJpU3ViU2VjdGlvbiIsImlzVmlzaWJpbGl0eUR5bmFtaWMiLCJwbGFjZWhvbGRlciIsImlzUGxhY2Vob2xkZXJFbmFibGVkIiwic2hvd1BsYWNlaG9sZGVyIiwib05hdkNvbnRhaW5lciIsIm9Db250YWluZXIiLCJfZ2V0Rmlyc3RDbGlja2FibGVFbGVtZW50Iiwib0ZpcnN0Q2xpY2thYmxlRWxlbWVudCIsImFBY3Rpb25zIiwiZ2V0SGVhZGVyVGl0bGUiLCJnZXRBY3Rpb25zIiwib0FjdGlvbiIsImdldEVuYWJsZWQiLCJfZ2V0Rmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkRnJvbVN1YlNlY3Rpb24iLCJhQmxvY2tzIiwiZ2V0QmxvY2tzIiwiYmxvY2siLCJhRm9ybUNvbnRhaW5lcnMiLCJnZXRGb3JtQ29udGFpbmVycyIsImdldENvbnRlbnQiLCJmb3JtQ29udGFpbmVyIiwiYUZvcm1FbGVtZW50cyIsImdldEZvcm1FbGVtZW50cyIsImZvcm1FbGVtZW50IiwiYUZpZWxkcyIsImdldEZpZWxkcyIsImdldFJlcXVpcmVkIiwiZ2V0VmFsdWUiLCJkZWJ1ZyIsIm9NYW5kYXRvcnlGaWVsZCIsIm9GaWVsZFRvRm9jdXMiLCJjb250ZW50IiwiZ2V0Q29udGVudEVkaXQiLCJfZ2V0Rmlyc3RFZGl0YWJsZUlucHV0IiwiZm9jdXMiLCJfb25CYWNrTmF2aWdhdGlvbkluRHJhZnQiLCJtZXNzYWdlSGFuZGxlciIsInJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyIsImdldFJvdXRlclByb3h5IiwiY2hlY2tJZkJhY2tIYXNTYW1lQ29udGV4dCIsImhpc3RvcnkiLCJiYWNrIiwiZHJhZnQiLCJwcm9jZXNzRGF0YUxvc3NPckRyYWZ0RGlzY2FyZENvbmZpcm1hdGlvbiIsIkZ1bmN0aW9uIiwiTmF2aWdhdGlvblR5cGUiLCJCYWNrTmF2aWdhdGlvbiIsIl9vbkFmdGVyQmluZGluZyIsIm9CaW5kaW5nQ29udGV4dCIsImVuYWJsZUZhc3RDcmVhdGlvblJvdyIsIm9MaXN0QmluZGluZyIsIm9GYXN0Q3JlYXRpb25MaXN0QmluZGluZyIsIm9GYXN0Q3JlYXRpb25Db250ZXh0Iiwib0ZpbmFsVUlTdGF0ZSIsImJpbmRMaXN0IiwiZ2V0Q29udGV4dCIsIiQkdXBkYXRlR3JvdXBJZCIsIiQkZ3JvdXBJZCIsInJlZnJlc2hJbnRlcm5hbCIsImNyZWF0ZSIsImNyZWF0ZWQiLCJ0cmFjZSIsIl9zaWRlRWZmZWN0cyIsImNsZWFyUHJvcGVydGllc1N0YXR1cyIsImFJQk5BY3Rpb25zIiwiZm9yRWFjaCIsImdldElCTkFjdGlvbnMiLCJvVGFibGVSb3dCaW5kaW5nIiwiTW9kZWxIZWxwZXIiLCJpc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJyZW1vdmVDYWNoZXNBbmRNZXNzYWdlcyIsIm9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAiLCJwYXJzZUN1c3RvbURhdGEiLCJEZWxlZ2F0ZVV0aWwiLCJnZXRDdXN0b21EYXRhIiwiYVNlbGVjdGVkQ29udGV4dHMiLCJnZXRTZWxlY3RlZENvbnRleHRzIiwiQWN0aW9uUnVudGltZSIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJjbGVhclNlbGVjdGlvbiIsImdldFNlbWFudGljVGFyZ2V0c0Zyb21QYWdlTW9kZWwiLCJvT2JqZWN0UGFnZVRpdGxlIiwiYUlCTkhlYWRlckFjdGlvbnMiLCJjb25jYXQiLCJ1cGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eSIsImhhbmRsZVRhYmxlTW9kaWZpY2F0aW9ucyIsImZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cyIsImZuSGFuZGxlQ2hhbmdlIiwiZGV0YWNoQ2hhbmdlIiwiY29tcHV0ZUVkaXRNb2RlIiwiaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQiLCJjb25uZWN0Iiwib0NhY2hlIiwiX3VwZGF0ZVJlbGF0ZWRBcHBzIiwiZm5VcGRhdGVSZWxhdGVkQXBwcyIsImRldGFjaERhdGFSZWNlaXZlZCIsImF0dGFjaERhdGFSZWNlaXZlZCIsImN1cnJlbnRCaW5kaW5nIiwiaGFuZGxlUGF0Y2hTZW50IiwiVGFibGVVdGlscyIsIndoZW5Cb3VuZCIsIl90cmlnZ2VyVmlzaWJsZVN1YlNlY3Rpb25zRXZlbnRzIiwib25QYWdlUmVhZHkiLCJzZXRGb2N1cyIsImlzSW5EaXNwbGF5TW9kZSIsIm9TZWxlY3RlZFNlY3Rpb24iLCJDb3JlIiwiZ2V0U2VsZWN0ZWRTZWN0aW9uIiwiYklzU3RpY2t5TW9kZSIsIm9BcHBDb21wb25lbnQiLCJnZXRTaGVsbFNlcnZpY2VzIiwic2V0QmFja05hdmlnYXRpb24iLCJnZXRBcHBTdGF0ZUhhbmRsZXIiLCJhcHBseUFwcFN0YXRlIiwiZm9yY2VGb2N1cyIsIkVycm9yIiwiX2NoZWNrRGF0YVBvaW50VGl0bGVGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJfZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24iLCJvT2JqZWN0UGFnZVN1YnRpdGxlIiwib0N1c3RvbURhdGEiLCJnZXRLZXkiLCJ0aXRsZSIsInN1YnRpdGxlIiwiaW50ZW50IiwiaWNvbiIsIl9leGVjdXRlSGVhZGVyU2hvcnRjdXQiLCJzQnV0dG9uSWQiLCJvQnV0dG9uIiwib0VsZW1lbnQiLCJmaXJlQnV0dG9uUHJlc3MiLCJfZXhlY3V0ZUZvb3RlclNob3J0Y3V0IiwiZ2V0Rm9vdGVyIiwiZ2V0TmFtZSIsIl9leGVjdXRlVGFiU2hvcnRDdXQiLCJvRXhlY3V0aW9uIiwiaVNlY3Rpb25JbmRleE1heCIsInNDb21tYW5kIiwiZ2V0Q29tbWFuZCIsIm5ld1NlY3Rpb24iLCJpU2VsZWN0ZWRTZWN0aW9uSW5kZXgiLCJpbmRleE9mU2VjdGlvbiIsIl9nZXRGb290ZXJWaXNpYmlsaXR5Iiwic1ZpZXdJZCIsInNhcCIsInVpIiwiZ2V0Q29yZSIsImdldE1lc3NhZ2VNYW5hZ2VyIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsIm9NZXNzYWdlIiwidmFsaWRhdGlvbiIsInR5cGUiLCJ0YXJnZXQiLCJpbmRleE9mIiwib1JldCIsInJvb3RWaWV3Q29udHJvbGxlciIsImdldFJvb3RWaWV3Q29udHJvbGxlciIsImN1cnJlbnRQYWdlVmlldyIsImlzRmNsRW5hYmxlZCIsImdldFJpZ2h0bW9zdFZpZXciLCJnZXRSb290Q29udGFpbmVyIiwiZ2V0Q3VycmVudFBhZ2UiLCJvTWVzc2FnZUJ1dHRvbiIsImdldExlbmd0aCIsInNldFZpc2libGUiLCJvcGVuQnkiLCJCdXN5TG9ja2VyIiwibG9jayIsImVkaXREb2N1bWVudCIsImZpbmFsbHkiLCJ1bmxvY2siLCJnZXREcmFmdFJvb3RDb250ZXh0IiwiY29udGV4dCIsImRyYWZ0Um9vdENvbnRleHRQYXRoIiwiZ2V0RHJhZnRSb290UGF0aCIsInNpbXBsZURyYWZ0Um9vdENvbnRleHQiLCJleGlzdGluZ0JpbmRpbmdDb250ZXh0T25QYWdlIiwiZ2V0SW5zdGFuY2VkVmlld3MiLCJwYWdlVmlldyIsImludGVybmFsTW9kZWwiLCJtb2RlbCIsIm1ldGFNb2RlbCIsInNFbnRpdHlQYXRoIiwibURhdGFNb2RlbCIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImJpbmRDb250ZXh0IiwiZ2V0Qm91bmRDb250ZXh0IiwicmVxdWVzdFByb3BlcnR5IiwidGFyZ2V0RW50aXR5VHlwZSIsIm5hbWUiLCJfdmFsaWRhdGVEb2N1bWVudCIsImNvbnRyb2wiLCJnZXRDdXJyZW50Rm9jdXNlZENvbnRyb2xJZCIsImlzVHJhbnNpZW50Iiwic3luY1Rhc2siLCJhcHBDb21wb25lbnQiLCJzaWRlRWZmZWN0c1NlcnZpY2UiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJlbnRpdHlUeXBlIiwiZ2V0RW50aXR5VHlwZUZyb21Db250ZXh0IiwiZ2xvYmFsU2lkZUVmZmVjdHMiLCJnZXRHbG9iYWxPRGF0YUVudGl0eVNpZGVFZmZlY3RzIiwiUHJvbWlzZSIsImFsbCIsInNpZGVFZmZlY3RzIiwicmVxdWVzdFNpZGVFZmZlY3RzIiwiZHJhZnRSb290Q29udGV4dCIsImV4ZWN1dGVEcmFmdFZhbGlkYXRpb24iLCJhV2FpdENyZWF0ZURvY3VtZW50cyIsImJFeGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yIiwiY3JlYXRpb25Nb2RlIiwiY3JlYXRpb25Sb3ciLCJjcmVhdGVBdEVuZCIsImJDcmVhdGVEb2N1bWVudCIsImJTa2lwU2lkZUVmZmVjdHMiLCJjcmVhdGVEb2N1bWVudCIsImFCaW5kaW5ncyIsImJpbmRpbmdzIiwic2F2ZURvY3VtZW50IiwiaXNMb2NrZWQiLCJfbWFuYWdlQ29sbGFib3JhdGlvbiIsIm9wZW5NYW5hZ2VEaWFsb2ciLCJfc2hvd0NvbGxhYm9yYXRpb25Vc2VyRGV0YWlscyIsImV2ZW50Iiwic2hvd1VzZXJEZXRhaWxzIiwiX2NhbmNlbERvY3VtZW50IiwiY2FuY2VsQnV0dG9uIiwiY2FuY2VsRG9jdW1lbnQiLCJhcHBseURvY3VtZW50IiwicmVzb2x2ZVN0cmluZ3RvQm9vbGVhbiIsInVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyIsIl9maW5kQ29udHJvbEluU3ViU2VjdGlvbiIsImFQYXJlbnRFbGVtZW50IiwiYVN1YnNlY3Rpb24iLCJhQ29udHJvbHMiLCJiSXNDaGFydCIsImFTdWJTZWN0aW9uVGFibGVzIiwiZWxlbWVudCIsIm1BZ2dyZWdhdGlvbnMiLCJnZXRBZ2dyZWdhdGlvbiIsImFJdGVtcyIsIm9JdGVtIiwiZ2V0TWFpbkNvbnRlbnQiLCJncmlkVGFibGUiLCJoYXNTdHlsZUNsYXNzIiwiYWRkU3R5bGVDbGFzcyIsIl9nZXRBbGxTdWJTZWN0aW9ucyIsIl9nZXRBbGxCbG9ja3MiLCJnZXRNb3JlQmxvY2tzIiwiX2ZpbmRDaGFydHMiLCJhQ2hhcnRzIiwib0Jsb2NrIiwib0NvbnRlbnQiLCJzZXRTaG93U2lkZUNvbnRlbnQiLCJvQ2hhcnRDb250ZXh0Iiwic0NoYXJ0UGF0aCIsIm9Db250ZXh0RGF0YSIsIm9DaGFydENvbnRleHREYXRhIiwiX3Njcm9sbFRhYmxlc1RvUm93Iiwic1Jvd1BhdGgiLCJUYWJsZVNjcm9sbGVyIiwic2Nyb2xsVGFibGVUb1JvdyIsIl9tZXJnZU11bHRpcGxlQ29udGV4dHMiLCJvUGFnZUNvbnRleHQiLCJhTGluZUNvbnRleHQiLCJhQXR0cmlidXRlcyIsImFQYWdlQXR0cmlidXRlcyIsInNNZXRhUGF0aExpbmUiLCJzUGF0aExpbmUiLCJzUGFnZVBhdGgiLCJvTWV0YU1vZGVsIiwic01ldGFQYXRoUGFnZSIsIm9TaW5nbGVDb250ZXh0Iiwib1N1YkNoYXJ0Q29udGV4dERhdGEiLCJjb250ZXh0RGF0YSIsInJlbW92ZVNlbnNpdGl2ZURhdGEiLCJvUGFnZUxldmVsU1YiLCJhZGRQYWdlQ29udGV4dFRvU2VsZWN0aW9uVmFyaWFudCIsIlNlbGVjdGlvblZhcmlhbnQiLCJzZWxlY3Rpb25WYXJpYW50IiwiYXR0cmlidXRlcyIsIm9Db25maWd1cmF0aW9ucyIsImNvbnRyb2xDb25maWd1cmF0aW9uIiwiYUNvbmZpZ3VyYXRpb25zIiwib0NvbmZpZ3VyYXRpb24iLCJyZXF1ZXN0R3JvdXBJZCIsIl9zZXRCcmVhZGNydW1iTGlua3MiLCJhUHJvbWlzZXMiLCJhU2tpcFBhcmFtZXRlcml6ZWQiLCJzTmV3UGF0aCIsImFQYXRoUGFydHMiLCJzcGxpdCIsInNQYXRoIiwic2hpZnQiLCJzcGxpY2UiLCJzUGF0aFBhcnQiLCJvUm9vdFZpZXdDb250cm9sbGVyIiwic1BhcmFtZXRlclBhdGgiLCJiUmVzdWx0Q29udGV4dCIsImdldFRpdGxlSW5mb0Zyb21QYXRoIiwidGl0bGVIaWVyYXJjaHlJbmZvcyIsImlkeCIsImhpZXJhcmNoeVBvc2l0aW9uIiwib0xpbmsiLCJ0aXRsZUhpZXJhcmNoeUluZm8iLCJnZXRMaW5rcyIsIkxpbmsiLCJzZXRUZXh0Iiwic2V0SHJlZiIsImVuY29kZVVSSSIsImFkZExpbmsiLCJvRGF0YVBvaW50cyIsImdldEhlYWRlckZhY2V0SXRlbUNvbmZpZ0ZvckV4dGVybmFsTmF2aWdhdGlvbiIsImdldFJvdXRpbmdTZXJ2aWNlIiwiZ2V0T3V0Ym91bmRzIiwib1NoZWxsU2VydmljZXMiLCJyZXF1ZXN0T2JqZWN0IiwiZm5HZXRMaW5rcyIsImZuT25FcnJvciIsImZuU2V0TGlua0VuYWJsZW1lbnQiLCJpZCIsImFTdXBwb3J0ZWRMaW5rcyIsInNMaW5rSWQiLCJzdXBwb3J0ZWQiLCJvU3ViRGF0YVBvaW50cyIsIm9QYWdlRGF0YSIsIm9EYXRhUG9pbnQiLCJvTGlua0NvbnRleHQiLCJvTGlua0RhdGEiLCJvTWl4ZWRDb250ZXh0IiwibWVyZ2UiLCJvTWFwcGluZyIsInNNYWluUHJvcGVydHkiLCJzTWFwcGVkUHJvcGVydHkiLCJoYXNPd25Qcm9wZXJ0eSIsIm9OZXdNYXBwaW5nIiwiaXNOYXZpZ2F0aW9uU3VwcG9ydGVkIiwicGFyYW1zIiwiYUxpbmtzIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJPYmplY3RQYWdlQ29udHJvbGxlci5jb250cm9sbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIFJlc291cmNlQnVuZGxlIGZyb20gXCJzYXAvYmFzZS9pMThuL1Jlc291cmNlQnVuZGxlXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IEFjdGlvblJ1bnRpbWUgZnJvbSBcInNhcC9mZS9jb3JlL0FjdGlvblJ1bnRpbWVcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBCdXN5TG9ja2VyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgeyBjb25uZWN0LCBkaXNjb25uZWN0LCBpc0Nvbm5lY3RlZCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9jb2xsYWJvcmF0aW9uL0FjdGl2aXR5U3luY1wiO1xuaW1wb3J0IHsgb3Blbk1hbmFnZURpYWxvZywgc2hvd1VzZXJEZXRhaWxzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NvbGxhYm9yYXRpb24vTWFuYWdlXCI7XG5pbXBvcnQgRWRpdEZsb3cgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0VkaXRGbG93XCI7XG5pbXBvcnQgZHJhZnQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2VkaXRGbG93L2RyYWZ0XCI7XG5pbXBvcnQgSW50ZW50QmFzZWROYXZpZ2F0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBJbnRlcm5hbEVkaXRGbG93IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbEVkaXRGbG93XCI7XG5pbXBvcnQgSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxSb3V0aW5nIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbFJvdXRpbmdcIjtcbmltcG9ydCBNYXNzRWRpdCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvTWFzc0VkaXRcIjtcbmltcG9ydCBNZXNzYWdlSGFuZGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCBQYWdlUmVhZHkgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BhZ2VSZWFkeVwiO1xuaW1wb3J0IFBhZ2luYXRvciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvUGFnaW5hdG9yXCI7XG5pbXBvcnQgUGxhY2Vob2xkZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BsYWNlaG9sZGVyXCI7XG5pbXBvcnQgU2hhcmUgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1NoYXJlXCI7XG5pbXBvcnQgVmlld1N0YXRlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9WaWV3U3RhdGVcIjtcbmltcG9ydCAqIGFzIE1ldGFNb2RlbENvbnZlcnRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCBleHRlbnNpYmxlLCBmaW5hbEV4dGVuc2lvbiwgcHVibGljRXh0ZW5zaW9uLCB1c2luZ0V4dGVuc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBDaGFydFJ1bnRpbWUgZnJvbSBcInNhcC9mZS9tYWNyb3MvY2hhcnQvQ2hhcnRSdW50aW1lXCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IERlbGVnYXRlVXRpbCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9EZWxlZ2F0ZVV0aWxcIjtcbmltcG9ydCBUYWJsZVV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1V0aWxzXCI7XG5pbXBvcnQgU2VsZWN0aW9uVmFyaWFudCBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vU2VsZWN0aW9uVmFyaWFudFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE9iamVjdFBhZ2VFeHRlbnNpb25BUEkgfSBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL0V4dGVuc2lvbkFQSVwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBFeHRlbnNpb25BUEkgfSBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL0V4dGVuc2lvbkFQSVwiO1xuaW1wb3J0IEVkaXRGbG93T3ZlcnJpZGVzIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL1Jvb3RDb250YWluZXIvb3ZlcnJpZGVzL0VkaXRGbG93XCI7XG5pbXBvcnQgVGFibGVTY3JvbGxlciBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9UYWJsZVNjcm9sbGVyXCI7XG5pbXBvcnQgSW5zdGFuY2VNYW5hZ2VyIGZyb20gXCJzYXAvbS9JbnN0YW5jZU1hbmFnZXJcIjtcbmltcG9ydCBMaW5rIGZyb20gXCJzYXAvbS9MaW5rXCI7XG5pbXBvcnQgTWVzc2FnZUJveCBmcm9tIFwic2FwL20vTWVzc2FnZUJveFwiO1xuaW1wb3J0IHR5cGUgUG9wb3ZlciBmcm9tIFwic2FwL20vUG9wb3ZlclwiO1xuaW1wb3J0IENvcmUgZnJvbSBcInNhcC91aS9jb3JlL0NvcmVcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IE92ZXJyaWRlRXhlY3V0aW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvT3ZlcnJpZGVFeGVjdXRpb25cIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgdHlwZSBCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvQmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvcmVzb3VyY2UvUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IHR5cGUgQnJlYWRDcnVtYnMgZnJvbSBcInNhcC91eGFwL0JyZWFkQ3J1bWJzXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlTGF5b3V0IGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlTGF5b3V0XCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlU2VjdGlvbiBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZVNlY3Rpb25cIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VTdWJTZWN0aW9uIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlU3ViU2VjdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBPRGF0YUNvbnRleHRCaW5kaW5nRXgsIFY0Q29udGV4dCB9IGZyb20gXCJ0eXBlcy9leHRlbnNpb25fdHlwZXNcIjtcbmltcG9ydCBJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxSb3V0aW5nT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL0ludGVybmFsUm91dGluZ1wiO1xuaW1wb3J0IE1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgUGFnaW5hdG9yT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL1BhZ2luYXRvclwiO1xuaW1wb3J0IFNoYXJlT3ZlcnJpZGVzIGZyb20gXCIuL292ZXJyaWRlcy9TaGFyZVwiO1xuaW1wb3J0IFZpZXdTdGF0ZU92ZXJyaWRlcyBmcm9tIFwiLi9vdmVycmlkZXMvVmlld1N0YXRlXCI7XG5cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5PYmplY3RQYWdlQ29udHJvbGxlclwiKVxuY2xhc3MgT2JqZWN0UGFnZUNvbnRyb2xsZXIgZXh0ZW5kcyBQYWdlQ29udHJvbGxlciB7XG5cdG9WaWV3ITogYW55O1xuXHRAdXNpbmdFeHRlbnNpb24oUGxhY2Vob2xkZXIpXG5cdHBsYWNlaG9sZGVyITogUGxhY2Vob2xkZXI7XG5cdEB1c2luZ0V4dGVuc2lvbihFZGl0Rmxvdylcblx0ZWRpdEZsb3chOiBFZGl0Rmxvdztcblx0QHVzaW5nRXh0ZW5zaW9uKFNoYXJlLm92ZXJyaWRlKFNoYXJlT3ZlcnJpZGVzKSlcblx0c2hhcmUhOiBTaGFyZTtcblx0QHVzaW5nRXh0ZW5zaW9uKEludGVybmFsRWRpdEZsb3cub3ZlcnJpZGUoRWRpdEZsb3dPdmVycmlkZXMpKVxuXHRfZWRpdEZsb3chOiBJbnRlcm5hbEVkaXRGbG93O1xuXHRAdXNpbmdFeHRlbnNpb24oSW50ZXJuYWxSb3V0aW5nLm92ZXJyaWRlKEludGVybmFsUm91dGluZ092ZXJyaWRlKSlcblx0X3JvdXRpbmchOiBJbnRlcm5hbFJvdXRpbmc7XG5cdEB1c2luZ0V4dGVuc2lvbihQYWdpbmF0b3Iub3ZlcnJpZGUoUGFnaW5hdG9yT3ZlcnJpZGUpKVxuXHRwYWdpbmF0b3IhOiBQYWdpbmF0b3I7XG5cdEB1c2luZ0V4dGVuc2lvbihNZXNzYWdlSGFuZGxlci5vdmVycmlkZShNZXNzYWdlSGFuZGxlck92ZXJyaWRlKSlcblx0bWVzc2FnZUhhbmRsZXIhOiBNZXNzYWdlSGFuZGxlcjtcblx0QHVzaW5nRXh0ZW5zaW9uKEludGVudEJhc2VkTmF2aWdhdGlvbi5vdmVycmlkZShJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSkpXG5cdGludGVudEJhc2VkTmF2aWdhdGlvbiE6IEludGVudEJhc2VkTmF2aWdhdGlvbjtcblx0QHVzaW5nRXh0ZW5zaW9uKFxuXHRcdEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uLm92ZXJyaWRlKHtcblx0XHRcdGdldE5hdmlnYXRpb25Nb2RlOiBmdW5jdGlvbiAodGhpczogSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdFx0Y29uc3QgYklzU3RpY2t5RWRpdE1vZGUgPVxuXHRcdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgT2JqZWN0UGFnZUNvbnRyb2xsZXIpLmdldFN0aWNreUVkaXRNb2RlICYmXG5cdFx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBPYmplY3RQYWdlQ29udHJvbGxlcikuZ2V0U3RpY2t5RWRpdE1vZGUoKTtcblx0XHRcdFx0cmV0dXJuIGJJc1N0aWNreUVkaXRNb2RlID8gXCJleHBsYWNlXCIgOiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fSlcblx0KVxuXHRfaW50ZW50QmFzZWROYXZpZ2F0aW9uITogSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cdEB1c2luZ0V4dGVuc2lvbihWaWV3U3RhdGUub3ZlcnJpZGUoVmlld1N0YXRlT3ZlcnJpZGVzKSlcblx0dmlld1N0YXRlITogVmlld1N0YXRlO1xuXHRAdXNpbmdFeHRlbnNpb24oXG5cdFx0UGFnZVJlYWR5Lm92ZXJyaWRlKHtcblx0XHRcdGlzQ29udGV4dEV4cGVjdGVkOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pXG5cdClcblx0cGFnZVJlYWR5ITogUGFnZVJlYWR5O1xuXHRAdXNpbmdFeHRlbnNpb24oTWFzc0VkaXQpXG5cdG1hc3NFZGl0ITogTWFzc0VkaXQ7XG5cdHByaXZhdGUgbUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzPzogUmVjb3JkPHN0cmluZywgT2JqZWN0UGFnZUV4dGVuc2lvbkFQST47XG5cdHByb3RlY3RlZCBleHRlbnNpb25BUEk/OiBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJO1xuXHRwcml2YXRlIG9SZXNvdXJjZUJ1bmRsZT86IFJlc291cmNlQnVuZGxlO1xuXHRwcml2YXRlIGJTZWN0aW9uTmF2aWdhdGVkPzogYm9vbGVhbjtcblx0cHJpdmF0ZSBzd2l0Y2hEcmFmdEFuZEFjdGl2ZVBvcE92ZXI/OiBQb3BvdmVyO1xuXHRwcml2YXRlIGN1cnJlbnRCaW5kaW5nPzogQmluZGluZztcblx0cHJpdmF0ZSBtZXNzYWdlQnV0dG9uOiBhbnk7XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGdldEV4dGVuc2lvbkFQSShzSWQ/OiBzdHJpbmcpOiBFeHRlbnNpb25BUEkge1xuXHRcdGlmIChzSWQpIHtcblx0XHRcdC8vIHRvIGFsbG93IGxvY2FsIElEIHVzYWdlIGZvciBjdXN0b20gcGFnZXMgd2UnbGwgY3JlYXRlL3JldHVybiBvd24gaW5zdGFuY2VzIGZvciBjdXN0b20gc2VjdGlvbnNcblx0XHRcdHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzID0gdGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXMgfHwge307XG5cblx0XHRcdGlmICghdGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXSkge1xuXHRcdFx0XHR0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdID0gbmV3IEV4dGVuc2lvbkFQSSh0aGlzLCBzSWQpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICghdGhpcy5leHRlbnNpb25BUEkpIHtcblx0XHRcdFx0dGhpcy5leHRlbnNpb25BUEkgPSBuZXcgRXh0ZW5zaW9uQVBJKHRoaXMpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMuZXh0ZW5zaW9uQVBJO1xuXHRcdH1cblx0fVxuXG5cdG9uSW5pdCgpIHtcblx0XHRzdXBlci5vbkluaXQoKTtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cblx0XHQvLyBTZXR0aW5nIGRlZmF1bHRzIG9mIGludGVybmFsIG1vZGVsIGNvbnRleHRcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJleHRlcm5hbE5hdmlnYXRpb25Db250ZXh0XCIsIHsgXCJwYWdlXCI6IHRydWUgfSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcInJlbGF0ZWRBcHBzXCIsIHtcblx0XHRcdHZpc2liaWxpdHk6IGZhbHNlLFxuXHRcdFx0aXRlbXM6IG51bGxcblx0XHR9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiYmF0Y2hHcm91cHNcIiwgdGhpcy5fZ2V0QmF0Y2hHcm91cHNGb3JWaWV3KCkpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJlcnJvck5hdmlnYXRpb25TZWN0aW9uRmxhZ1wiLCBmYWxzZSk7XG5cdFx0aWYgKCEodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLnVzZU5ld0xhenlMb2FkaW5nICYmIChvT2JqZWN0UGFnZSBhcyBhbnkpLmdldEVuYWJsZUxhenlMb2FkaW5nKCkpIHtcblx0XHRcdC8vQXR0YWNoaW5nIHRoZSBldmVudCB0byBtYWtlIHRoZSBzdWJzZWN0aW9uIGNvbnRleHQgYmluZGluZyBhY3RpdmUgd2hlbiBpdCBpcyB2aXNpYmxlLlxuXHRcdFx0b09iamVjdFBhZ2UuYXR0YWNoRXZlbnQoXCJzdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0XCIsIHRoaXMuX2hhbmRsZVN1YlNlY3Rpb25FbnRlcmVkVmlld1BvcnQuYmluZCh0aGlzKSk7XG5cdFx0fVxuXHRcdHRoaXMubWVzc2FnZUJ1dHRvbiA9IHRoaXMuZ2V0VmlldygpLmJ5SWQoXCJmZTo6Rm9vdGVyQmFyOjpNZXNzYWdlQnV0dG9uXCIpO1xuXHRcdHRoaXMubWVzc2FnZUJ1dHRvbi5vSXRlbUJpbmRpbmcuYXR0YWNoQ2hhbmdlKHRoaXMuX2ZuU2hvd09QTWVzc2FnZSwgdGhpcyk7XG5cdH1cblxuXHRvbkV4aXQoKSB7XG5cdFx0aWYgKHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHNJZCBvZiBPYmplY3Qua2V5cyh0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcykpIHtcblx0XHRcdFx0aWYgKHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF0pIHtcblx0XHRcdFx0XHR0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdLmRlc3Ryb3koKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZGVsZXRlIHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzO1xuXHRcdH1cblx0XHRpZiAodGhpcy5leHRlbnNpb25BUEkpIHtcblx0XHRcdHRoaXMuZXh0ZW5zaW9uQVBJLmRlc3Ryb3koKTtcblx0XHR9XG5cdFx0ZGVsZXRlIHRoaXMuZXh0ZW5zaW9uQVBJO1xuXG5cdFx0Y29uc3Qgb01lc3NhZ2VQb3BvdmVyID0gdGhpcy5tZXNzYWdlQnV0dG9uID8gdGhpcy5tZXNzYWdlQnV0dG9uLm9NZXNzYWdlUG9wb3ZlciA6IG51bGw7XG5cdFx0aWYgKG9NZXNzYWdlUG9wb3ZlciAmJiBvTWVzc2FnZVBvcG92ZXIuaXNPcGVuKCkpIHtcblx0XHRcdG9NZXNzYWdlUG9wb3Zlci5jbG9zZSgpO1xuXHRcdH1cblx0XHQvL3doZW4gZXhpdGluZyB3ZSBzZXQga2VlcEFsaXZlIGNvbnRleHQgdG8gZmFsc2Vcblx0XHRjb25zdCBvQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dDtcblx0XHRpZiAob0NvbnRleHQgJiYgb0NvbnRleHQuaXNLZWVwQWxpdmUoKSkge1xuXHRcdFx0b0NvbnRleHQuc2V0S2VlcEFsaXZlKGZhbHNlKTtcblx0XHR9XG5cdFx0aWYgKGlzQ29ubmVjdGVkKHRoaXMuZ2V0VmlldygpKSkge1xuXHRcdFx0ZGlzY29ubmVjdCh0aGlzLmdldFZpZXcoKSk7IC8vIENsZWFudXAgY29sbGFib3JhdGlvbiBjb25uZWN0aW9uIHdoZW4gbGVhdmluZyB0aGUgYXBwXG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBzaG93IHRoZSBtZXNzYWdlIHN0cmlwIG9uIHRoZSBvYmplY3QgcGFnZS5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9mblNob3dPUE1lc3NhZ2UoKSB7XG5cdFx0Y29uc3QgZXh0ZW5zaW9uQVBJID0gdGhpcy5nZXRFeHRlbnNpb25BUEkoKTtcblx0XHRjb25zdCB2aWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0Y29uc3QgbWVzc2FnZXMgPSB0aGlzLm1lc3NhZ2VCdXR0b24ub01lc3NhZ2VQb3BvdmVyXG5cdFx0XHQuZ2V0SXRlbXMoKVxuXHRcdFx0Lm1hcCgoaXRlbTogYW55KSA9PiBpdGVtLmdldEJpbmRpbmdDb250ZXh0KFwibWVzc2FnZVwiKS5nZXRPYmplY3QoKSlcblx0XHRcdC5maWx0ZXIoKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IHtcblx0XHRcdFx0cmV0dXJuIG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdID09PSB2aWV3LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKTtcblx0XHRcdH0pO1xuXG5cdFx0aWYgKGV4dGVuc2lvbkFQSSkge1xuXHRcdFx0ZXh0ZW5zaW9uQVBJLnNob3dNZXNzYWdlcyhtZXNzYWdlcyk7XG5cdFx0fVxuXHR9XG5cblx0X2dldFRhYmxlQmluZGluZyhvVGFibGU6IGFueSkge1xuXHRcdHJldHVybiBvVGFibGUgJiYgb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0fVxuXG5cdG9uQmVmb3JlUmVuZGVyaW5nKCkge1xuXHRcdFBhZ2VDb250cm9sbGVyLnByb3RvdHlwZS5vbkJlZm9yZVJlbmRlcmluZy5hcHBseSh0aGlzKTtcblx0XHQvLyBJbiB0aGUgcmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCBzY2VuYXJpbyB3ZSBuZWVkIHRvIGVuc3VyZSBpbiBjYXNlIG9mIHJlbG9hZC9yZWZyZXNoIHRoYXQgdGhlIG1ldGEgbW9kZWwgaW4gdGhlIG1ldGhvZGUgcmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCBvZiB0aGUgRmllbGRSdW50aW1lIGlzIGF2YWlsYWJsZVxuXHRcdGlmICh0aGlzLm9WaWV3Lm9WaWV3RGF0YT8ucmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCAmJiBDb21tb25IZWxwZXIuZ2V0TWV0YU1vZGVsKCkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Q29tbW9uSGVscGVyLnNldE1ldGFNb2RlbCh0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldE1ldGFNb2RlbCgpKTtcblx0XHR9XG5cdH1cblxuXHRvbkFmdGVyUmVuZGVyaW5nKCkge1xuXHRcdCgodGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJzYXAuZmUuaTE4blwiKSBhcyBSZXNvdXJjZU1vZGVsKS5nZXRSZXNvdXJjZUJ1bmRsZSgpIGFzIFByb21pc2U8UmVzb3VyY2VCdW5kbGU+KVxuXHRcdFx0LnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcblx0XHRcdFx0dGhpcy5vUmVzb3VyY2VCdW5kbGUgPSByZXNwb25zZTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJldHJpZXZpbmcgdGhlIHJlc291cmNlIGJ1bmRsZVwiLCBvRXJyb3IpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRfb25CZWZvcmVCaW5kaW5nKG9Db250ZXh0OiBhbnksIG1QYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHQvLyBUT0RPOiB3ZSBzaG91bGQgY2hlY2sgaG93IHRoaXMgY29tZXMgdG9nZXRoZXIgd2l0aCB0aGUgdHJhbnNhY3Rpb24gaGVscGVyLCBzYW1lIHRvIHRoZSBjaGFuZ2UgaW4gdGhlIGFmdGVyQmluZGluZ1xuXHRcdGNvbnN0IGFUYWJsZXMgPSB0aGlzLl9maW5kVGFibGVzKCksXG5cdFx0XHRvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCksXG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0b0ludGVybmFsTW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbCxcblx0XHRcdGFCYXRjaEdyb3VwcyA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImJhdGNoR3JvdXBzXCIpLFxuXHRcdFx0aVZpZXdMZXZlbCA9ICh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkudmlld0xldmVsO1xuXHRcdGxldCBvRmFzdENyZWF0aW9uUm93O1xuXHRcdGFCYXRjaEdyb3Vwcy5wdXNoKFwiJGF1dG9cIik7XG5cdFx0aWYgKG1QYXJhbWV0ZXJzLmJEcmFmdE5hdmlnYXRpb24gIT09IHRydWUpIHtcblx0XHRcdHRoaXMuX2Nsb3NlU2lkZUNvbnRlbnQoKTtcblx0XHR9XG5cdFx0Y29uc3Qgb3BDb250ZXh0ID0gb09iamVjdFBhZ2UuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0O1xuXHRcdGlmIChcblx0XHRcdG9wQ29udGV4dCAmJlxuXHRcdFx0b3BDb250ZXh0Lmhhc1BlbmRpbmdDaGFuZ2VzKCkgJiZcblx0XHRcdCFhQmF0Y2hHcm91cHMuc29tZShvcENvbnRleHQuZ2V0TW9kZWwoKS5oYXNQZW5kaW5nQ2hhbmdlcy5iaW5kKG9wQ29udGV4dC5nZXRNb2RlbCgpKSlcblx0XHQpIHtcblx0XHRcdC8qIFx0SW4gY2FzZSB0aGVyZSBhcmUgcGVuZGluZyBjaGFuZ2VzIGZvciB0aGUgY3JlYXRpb24gcm93IGFuZCBubyBvdGhlcnMgd2UgbmVlZCB0byByZXNldCB0aGUgY2hhbmdlc1xuICAgIFx0XHRcdFx0XHRcdFRPRE86IHRoaXMgaXMganVzdCBhIHF1aWNrIHNvbHV0aW9uLCB0aGlzIG5lZWRzIHRvIGJlIHJld29ya2VkXG4gICAgXHRcdFx0XHQgXHQqL1xuXG5cdFx0XHRvcENvbnRleHQuZ2V0QmluZGluZygpLnJlc2V0Q2hhbmdlcygpO1xuXHRcdH1cblxuXHRcdC8vIEZvciBub3cgd2UgaGF2ZSB0byBzZXQgdGhlIGJpbmRpbmcgY29udGV4dCB0byBudWxsIGZvciBldmVyeSBmYXN0IGNyZWF0aW9uIHJvd1xuXHRcdC8vIFRPRE86IEdldCByaWQgb2YgdGhpcyBjb2Rpbmcgb3IgbW92ZSBpdCB0byBhbm90aGVyIGxheWVyIC0gdG8gYmUgZGlzY3Vzc2VkIHdpdGggTURDIGFuZCBtb2RlbFxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYVRhYmxlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0b0Zhc3RDcmVhdGlvblJvdyA9IGFUYWJsZXNbaV0uZ2V0Q3JlYXRpb25Sb3coKTtcblx0XHRcdGlmIChvRmFzdENyZWF0aW9uUm93KSB7XG5cdFx0XHRcdG9GYXN0Q3JlYXRpb25Sb3cuc2V0QmluZGluZ0NvbnRleHQobnVsbCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU2Nyb2xsIHRvIHByZXNlbnQgU2VjdGlvbiBzbyB0aGF0IGJpbmRpbmdzIGFyZSBlbmFibGVkIGR1cmluZyBuYXZpZ2F0aW9uIHRocm91Z2ggcGFnaW5hdG9yIGJ1dHRvbnMsIGFzIHRoZXJlIGlzIG5vIHZpZXcgcmVyZW5kZXJpbmcvcmViaW5kXG5cdFx0Y29uc3QgZm5TY3JvbGxUb1ByZXNlbnRTZWN0aW9uID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0aWYgKCEob09iamVjdFBhZ2UgYXMgYW55KS5pc0ZpcnN0UmVuZGVyaW5nKCkgJiYgIW1QYXJhbWV0ZXJzLmJQZXJzaXN0T1BTY3JvbGwpIHtcblx0XHRcdFx0b09iamVjdFBhZ2Uuc2V0U2VsZWN0ZWRTZWN0aW9uKG51bGwgYXMgYW55KTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdG9PYmplY3RQYWdlLmF0dGFjaEV2ZW50T25jZShcIm1vZGVsQ29udGV4dENoYW5nZVwiLCBmblNjcm9sbFRvUHJlc2VudFNlY3Rpb24pO1xuXG5cdFx0Ly8gaWYgdGhlIHN0cnVjdHVyZSBvZiB0aGUgT2JqZWN0UGFnZUxheW91dCBpcyBjaGFuZ2VkIHRoZW4gc2Nyb2xsIHRvIHByZXNlbnQgU2VjdGlvblxuXHRcdC8vIEZJWE1FIElzIHRoaXMgcmVhbGx5IHdvcmtpbmcgYXMgaW50ZW5kZWQgPyBJbml0aWFsbHkgdGhpcyB3YXMgb25CZWZvcmVSZW5kZXJpbmcsIGJ1dCBuZXZlciB0cmlnZ2VyZWQgb25CZWZvcmVSZW5kZXJpbmcgYmVjYXVzZSBpdCB3YXMgcmVnaXN0ZXJlZCBhZnRlciBpdFxuXHRcdGNvbnN0IG9EZWxlZ2F0ZU9uQmVmb3JlID0ge1xuXHRcdFx0b25BZnRlclJlbmRlcmluZzogZm5TY3JvbGxUb1ByZXNlbnRTZWN0aW9uXG5cdFx0fTtcblx0XHRvT2JqZWN0UGFnZS5hZGRFdmVudERlbGVnYXRlKG9EZWxlZ2F0ZU9uQmVmb3JlLCB0aGlzKTtcblx0XHR0aGlzLnBhZ2VSZWFkeS5hdHRhY2hFdmVudE9uY2UoXCJwYWdlUmVhZHlcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0b09iamVjdFBhZ2UucmVtb3ZlRXZlbnREZWxlZ2F0ZShvRGVsZWdhdGVPbkJlZm9yZSk7XG5cdFx0fSk7XG5cblx0XHQvL1NldCB0aGUgQmluZGluZyBmb3IgUGFnaW5hdG9ycyB1c2luZyBMaXN0QmluZGluZyBJRFxuXHRcdGlmIChpVmlld0xldmVsID4gMSkge1xuXHRcdFx0bGV0IG9CaW5kaW5nID0gbVBhcmFtZXRlcnMgJiYgbVBhcmFtZXRlcnMubGlzdEJpbmRpbmc7XG5cdFx0XHRjb25zdCBvUGFnaW5hdG9yQ3VycmVudENvbnRleHQgPSBvSW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShcIi9wYWdpbmF0b3JDdXJyZW50Q29udGV4dFwiKTtcblx0XHRcdGlmIChvUGFnaW5hdG9yQ3VycmVudENvbnRleHQpIHtcblx0XHRcdFx0Y29uc3Qgb0JpbmRpbmdUb1VzZSA9IG9QYWdpbmF0b3JDdXJyZW50Q29udGV4dC5nZXRCaW5kaW5nKCk7XG5cdFx0XHRcdHRoaXMucGFnaW5hdG9yLmluaXRpYWxpemUob0JpbmRpbmdUb1VzZSwgb1BhZ2luYXRvckN1cnJlbnRDb250ZXh0KTtcblx0XHRcdFx0b0ludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvcGFnaW5hdG9yQ3VycmVudENvbnRleHRcIiwgbnVsbCk7XG5cdFx0XHR9IGVsc2UgaWYgKG9CaW5kaW5nKSB7XG5cdFx0XHRcdGlmIChvQmluZGluZy5pc0EoXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFMaXN0QmluZGluZ1wiKSkge1xuXHRcdFx0XHRcdHRoaXMucGFnaW5hdG9yLmluaXRpYWxpemUob0JpbmRpbmcsIG9Db250ZXh0KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBpZiB0aGUgYmluZGluZyB0eXBlIGlzIG5vdCBPRGF0YUxpc3RCaW5kaW5nIGJlY2F1c2Ugb2YgYSBkZWVwbGluayBuYXZpZ2F0aW9uIG9yIGEgcmVmcmVzaCBvZiB0aGUgcGFnZVxuXHRcdFx0XHRcdC8vIHdlIG5lZWQgdG8gY3JlYXRlIGl0XG5cdFx0XHRcdFx0Y29uc3Qgc0JpbmRpbmdQYXRoID0gb0JpbmRpbmcuZ2V0UGF0aCgpO1xuXHRcdFx0XHRcdGlmICgvXFwoW15cXCldKlxcKSQvLnRlc3Qoc0JpbmRpbmdQYXRoKSkge1xuXHRcdFx0XHRcdFx0Ly8gVGhlIGN1cnJlbnQgYmluZGluZyBwYXRoIGVuZHMgd2l0aCAoeHh4KSwgc28gd2UgY3JlYXRlIHRoZSBsaXN0QmluZGluZyBieSByZW1vdmluZyAoeHh4KVxuXHRcdFx0XHRcdFx0Y29uc3Qgc0xpc3RCaW5kaW5nUGF0aCA9IHNCaW5kaW5nUGF0aC5yZXBsYWNlKC9cXChbXlxcKV0qXFwpJC8sIFwiXCIpO1xuXHRcdFx0XHRcdFx0b0JpbmRpbmcgPSBuZXcgKE9EYXRhTGlzdEJpbmRpbmcgYXMgYW55KShvQmluZGluZy5vTW9kZWwsIHNMaXN0QmluZGluZ1BhdGgpO1xuXHRcdFx0XHRcdFx0Y29uc3QgX3NldExpc3RCaW5kaW5nQXN5bmMgPSAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmIChvQmluZGluZy5nZXRDb250ZXh0cygpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnBhZ2luYXRvci5pbml0aWFsaXplKG9CaW5kaW5nLCBvQ29udGV4dCk7XG5cdFx0XHRcdFx0XHRcdFx0b0JpbmRpbmcuZGV0YWNoRXZlbnQoXCJjaGFuZ2VcIiwgX3NldExpc3RCaW5kaW5nQXN5bmMpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRvQmluZGluZy5nZXRDb250ZXh0cygwKTtcblx0XHRcdFx0XHRcdG9CaW5kaW5nLmF0dGFjaEV2ZW50KFwiY2hhbmdlXCIsIF9zZXRMaXN0QmluZGluZ0FzeW5jKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gVGhlIGN1cnJlbnQgYmluZGluZyBkb2Vzbid0IGVuZCB3aXRoICh4eHgpIC0tPiB0aGUgbGFzdCBzZWdtZW50IGlzIGEgMS0xIG5hdmlnYXRpb24sIHNvIHdlIGRvbid0IGRpc3BsYXkgdGhlIHBhZ2luYXRvclxuXHRcdFx0XHRcdFx0dGhpcy5wYWdpbmF0b3IuaW5pdGlhbGl6ZSh1bmRlZmluZWQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoISh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkudXNlTmV3TGF6eUxvYWRpbmcgJiYgb09iamVjdFBhZ2UuZ2V0RW5hYmxlTGF6eUxvYWRpbmcoKSkge1xuXHRcdFx0Y29uc3QgYVNlY3Rpb25zID0gb09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKTtcblx0XHRcdGNvbnN0IGJVc2VJY29uVGFiQmFyID0gb09iamVjdFBhZ2UuZ2V0VXNlSWNvblRhYkJhcigpO1xuXHRcdFx0bGV0IGlTa2lwID0gMjtcblx0XHRcdGNvbnN0IGJJc0luRWRpdE1vZGUgPSBvT2JqZWN0UGFnZS5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIik7XG5cdFx0XHRjb25zdCBiRWRpdGFibGVIZWFkZXIgPSAodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLmVkaXRhYmxlSGVhZGVyQ29udGVudDtcblx0XHRcdGZvciAobGV0IGlTZWN0aW9uID0gMDsgaVNlY3Rpb24gPCBhU2VjdGlvbnMubGVuZ3RoOyBpU2VjdGlvbisrKSB7XG5cdFx0XHRcdGNvbnN0IG9TZWN0aW9uID0gYVNlY3Rpb25zW2lTZWN0aW9uXTtcblx0XHRcdFx0Y29uc3QgYVN1YlNlY3Rpb25zID0gb1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKTtcblx0XHRcdFx0Zm9yIChsZXQgaVN1YlNlY3Rpb24gPSAwOyBpU3ViU2VjdGlvbiA8IGFTdWJTZWN0aW9ucy5sZW5ndGg7IGlTdWJTZWN0aW9uKyssIGlTa2lwLS0pIHtcblx0XHRcdFx0XHQvLyBJbiBJY29uVGFiQmFyIG1vZGUga2VlcCB0aGUgc2Vjb25kIHNlY3Rpb24gYm91bmQgaWYgdGhlcmUgaXMgYW4gZWRpdGFibGUgaGVhZGVyIGFuZCB3ZSBhcmUgc3dpdGNoaW5nIHRvIGRpc3BsYXkgbW9kZVxuXHRcdFx0XHRcdGlmIChpU2tpcCA8IDEgfHwgKGJVc2VJY29uVGFiQmFyICYmIChpU2VjdGlvbiA+IDEgfHwgKGlTZWN0aW9uID09PSAxICYmICFiRWRpdGFibGVIZWFkZXIgJiYgIWJJc0luRWRpdE1vZGUpKSkpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG9TdWJTZWN0aW9uID0gYVN1YlNlY3Rpb25zW2lTdWJTZWN0aW9uXTtcblx0XHRcdFx0XHRcdGlmIChvU3ViU2VjdGlvbi5kYXRhKCkuaXNWaXNpYmlsaXR5RHluYW1pYyAhPT0gXCJ0cnVlXCIpIHtcblx0XHRcdFx0XHRcdFx0b1N1YlNlY3Rpb24uc2V0QmluZGluZ0NvbnRleHQobnVsbCBhcyBhbnkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICh0aGlzLnBsYWNlaG9sZGVyLmlzUGxhY2Vob2xkZXJFbmFibGVkKCkgJiYgbVBhcmFtZXRlcnMuc2hvd1BsYWNlaG9sZGVyKSB7XG5cdFx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdFx0Y29uc3Qgb05hdkNvbnRhaW5lciA9IChvVmlldy5nZXRQYXJlbnQoKSBhcyBhbnkpLm9Db250YWluZXIuZ2V0UGFyZW50KCk7XG5cdFx0XHRpZiAob05hdkNvbnRhaW5lcikge1xuXHRcdFx0XHRvTmF2Q29udGFpbmVyLnNob3dQbGFjZWhvbGRlcih7fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X2dldEZpcnN0Q2xpY2thYmxlRWxlbWVudChvT2JqZWN0UGFnZTogYW55KSB7XG5cdFx0bGV0IG9GaXJzdENsaWNrYWJsZUVsZW1lbnQ7XG5cdFx0Y29uc3QgYUFjdGlvbnMgPSBvT2JqZWN0UGFnZS5nZXRIZWFkZXJUaXRsZSgpICYmIG9PYmplY3RQYWdlLmdldEhlYWRlclRpdGxlKCkuZ2V0QWN0aW9ucygpO1xuXHRcdGlmIChhQWN0aW9ucyAmJiBhQWN0aW9ucy5sZW5ndGgpIHtcblx0XHRcdG9GaXJzdENsaWNrYWJsZUVsZW1lbnQgPSBhQWN0aW9ucy5maW5kKGZ1bmN0aW9uIChvQWN0aW9uOiBhbnkpIHtcblx0XHRcdFx0Ly8gRHVlIHRvIHRoZSBsZWZ0IGFsaWdubWVudCBvZiB0aGUgRHJhZnQgc3dpdGNoIGFuZCB0aGUgY29sbGFib3JhdGl2ZSBkcmFmdCBhdmF0YXIgY29udHJvbHNcblx0XHRcdFx0Ly8gdGhlcmUgaXMgYSBUb29sYmFyU3BhY2VyIGluIHRoZSBhY3Rpb25zIGFnZ3JlZ2F0aW9uIHdoaWNoIHdlIG5lZWQgdG8gZXhjbHVkZSBoZXJlIVxuXHRcdFx0XHQvLyBEdWUgdG8gdGhlIEFDQyByZXBvcnQsIHdlIGFsc28gbmVlZCBub3QgdG8gY2hlY2sgZm9yIHRoZSBJbnZpc2libGVUZXh0IGVsZW1lbnRzXG5cdFx0XHRcdGlmIChvQWN0aW9uLmlzQShcInNhcC5mZS5tYWNyb3MuU2hhcmVBUElcIikpIHtcblx0XHRcdFx0XHQvLyBzaW5jZSBTaGFyZUFQSSBkb2VzIG5vdCBoYXZlIGEgZGlzYWJsZSBwcm9wZXJ0eVxuXHRcdFx0XHRcdC8vIGhlbmNlIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2hlY2sgaWYgaXQgaXMgZGlzYmFsZWQgb3Igbm90XG5cdFx0XHRcdFx0cmV0dXJuIG9BY3Rpb24uZ2V0VmlzaWJsZSgpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCFvQWN0aW9uLmlzQShcInNhcC51aS5jb3JlLkludmlzaWJsZVRleHRcIikgJiYgIW9BY3Rpb24uaXNBKFwic2FwLm0uVG9vbGJhclNwYWNlclwiKSkge1xuXHRcdFx0XHRcdHJldHVybiBvQWN0aW9uLmdldFZpc2libGUoKSAmJiBvQWN0aW9uLmdldEVuYWJsZWQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBvRmlyc3RDbGlja2FibGVFbGVtZW50O1xuXHR9XG5cblx0X2dldEZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZEZyb21TdWJTZWN0aW9uKGFTdWJTZWN0aW9uczogYW55KSB7XG5cdFx0aWYgKGFTdWJTZWN0aW9ucykge1xuXHRcdFx0Zm9yIChsZXQgc3ViU2VjdGlvbiA9IDA7IHN1YlNlY3Rpb24gPCBhU3ViU2VjdGlvbnMubGVuZ3RoOyBzdWJTZWN0aW9uKyspIHtcblx0XHRcdFx0Y29uc3QgYUJsb2NrcyA9IGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXS5nZXRCbG9ja3MoKTtcblxuXHRcdFx0XHRpZiAoYUJsb2Nrcykge1xuXHRcdFx0XHRcdGZvciAobGV0IGJsb2NrID0gMDsgYmxvY2sgPCBhQmxvY2tzLmxlbmd0aDsgYmxvY2srKykge1xuXHRcdFx0XHRcdFx0bGV0IGFGb3JtQ29udGFpbmVycztcblxuXHRcdFx0XHRcdFx0aWYgKGFCbG9ja3NbYmxvY2tdLmlzQShcInNhcC51aS5sYXlvdXQuZm9ybS5Gb3JtXCIpKSB7XG5cdFx0XHRcdFx0XHRcdGFGb3JtQ29udGFpbmVycyA9IGFCbG9ja3NbYmxvY2tdLmdldEZvcm1Db250YWluZXJzKCk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRcdFx0XHRhQmxvY2tzW2Jsb2NrXS5nZXRDb250ZW50ICYmXG5cdFx0XHRcdFx0XHRcdGFCbG9ja3NbYmxvY2tdLmdldENvbnRlbnQoKSAmJlxuXHRcdFx0XHRcdFx0XHRhQmxvY2tzW2Jsb2NrXS5nZXRDb250ZW50KCkuaXNBKFwic2FwLnVpLmxheW91dC5mb3JtLkZvcm1cIilcblx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRhRm9ybUNvbnRhaW5lcnMgPSBhQmxvY2tzW2Jsb2NrXS5nZXRDb250ZW50KCkuZ2V0Rm9ybUNvbnRhaW5lcnMoKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKGFGb3JtQ29udGFpbmVycykge1xuXHRcdFx0XHRcdFx0XHRmb3IgKGxldCBmb3JtQ29udGFpbmVyID0gMDsgZm9ybUNvbnRhaW5lciA8IGFGb3JtQ29udGFpbmVycy5sZW5ndGg7IGZvcm1Db250YWluZXIrKykge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGFGb3JtRWxlbWVudHMgPSBhRm9ybUNvbnRhaW5lcnNbZm9ybUNvbnRhaW5lcl0uZ2V0Rm9ybUVsZW1lbnRzKCk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGFGb3JtRWxlbWVudHMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGZvciAobGV0IGZvcm1FbGVtZW50ID0gMDsgZm9ybUVsZW1lbnQgPCBhRm9ybUVsZW1lbnRzLmxlbmd0aDsgZm9ybUVsZW1lbnQrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBhRmllbGRzID0gYUZvcm1FbGVtZW50c1tmb3JtRWxlbWVudF0uZ2V0RmllbGRzKCk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gVGhlIGZpcnN0IGZpZWxkIGlzIG5vdCBuZWNlc3NhcmlseSBhbiBJbnB1dEJhc2UgKGUuZy4gY291bGQgYmUgYSBUZXh0KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTbyB3ZSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgaXQgaGFzIGEgZ2V0UmVxdWlyZWQgbWV0aG9kXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFGaWVsZHNbMF0uZ2V0UmVxdWlyZWQgJiYgYUZpZWxkc1swXS5nZXRSZXF1aXJlZCgpICYmICFhRmllbGRzWzBdLmdldFZhbHVlKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBhRmllbGRzWzBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRMb2cuZGVidWcoYEVycm9yIHdoZW4gc2VhcmNoaW5nIGZvciBtYW5kYW90cnkgZW1wdHkgZmllbGQ6ICR7ZXJyb3J9YCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdF91cGRhdGVGb2N1c0luRWRpdE1vZGUoYVN1YlNlY3Rpb25zOiBhbnkpIHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cblx0XHRjb25zdCBvTWFuZGF0b3J5RmllbGQgPSB0aGlzLl9nZXRGaXJzdEVtcHR5TWFuZGF0b3J5RmllbGRGcm9tU3ViU2VjdGlvbihhU3ViU2VjdGlvbnMpO1xuXHRcdGxldCBvRmllbGRUb0ZvY3VzOiBhbnk7XG5cdFx0aWYgKG9NYW5kYXRvcnlGaWVsZCkge1xuXHRcdFx0b0ZpZWxkVG9Gb2N1cyA9IG9NYW5kYXRvcnlGaWVsZC5jb250ZW50LmdldENvbnRlbnRFZGl0KClbMF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9GaWVsZFRvRm9jdXMgPSAob09iamVjdFBhZ2UgYXMgYW55KS5fZ2V0Rmlyc3RFZGl0YWJsZUlucHV0KCkgfHwgdGhpcy5fZ2V0Rmlyc3RDbGlja2FibGVFbGVtZW50KG9PYmplY3RQYWdlKTtcblx0XHR9XG5cblx0XHRpZiAob0ZpZWxkVG9Gb2N1cykge1xuXHRcdFx0c2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdC8vIFdlIHNldCB0aGUgZm9jdXMgaW4gYSB0aW1lZW91dCwgb3RoZXJ3aXNlIHRoZSBmb2N1cyBzb21ldGltZXMgZ29lcyB0byB0aGUgVGFiQmFyXG5cdFx0XHRcdG9GaWVsZFRvRm9jdXMuZm9jdXMoKTtcblx0XHRcdH0sIDApO1xuXHRcdH1cblx0fVxuXG5cdF9oYW5kbGVTdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0KG9FdmVudDogYW55KSB7XG5cdFx0Y29uc3Qgb1N1YlNlY3Rpb24gPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwic3ViU2VjdGlvblwiKTtcblx0XHRvU3ViU2VjdGlvbi5zZXRCaW5kaW5nQ29udGV4dCh1bmRlZmluZWQpO1xuXHR9XG5cblx0X29uQmFja05hdmlnYXRpb25JbkRyYWZ0KG9Db250ZXh0OiBhbnkpIHtcblx0XHR0aGlzLm1lc3NhZ2VIYW5kbGVyLnJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdGlmICh0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvdXRlclByb3h5KCkuY2hlY2tJZkJhY2tIYXNTYW1lQ29udGV4dCgpKSB7XG5cdFx0XHQvLyBCYWNrIG5hdiB3aWxsIGtlZXAgdGhlIHNhbWUgY29udGV4dCAtLT4gbm8gbmVlZCB0byBkaXNwbGF5IHRoZSBkaWFsb2dcblx0XHRcdGhpc3RvcnkuYmFjaygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkcmFmdC5wcm9jZXNzRGF0YUxvc3NPckRyYWZ0RGlzY2FyZENvbmZpcm1hdGlvbihcblx0XHRcdFx0ZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdGhpc3RvcnkuYmFjaygpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRGdW5jdGlvbi5wcm90b3R5cGUsXG5cdFx0XHRcdG9Db250ZXh0LFxuXHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0ZHJhZnQuTmF2aWdhdGlvblR5cGUuQmFja05hdmlnYXRpb25cblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRfb25BZnRlckJpbmRpbmcob0JpbmRpbmdDb250ZXh0OiBhbnksIG1QYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0Y29uc3QgYVRhYmxlcyA9IHRoaXMuX2ZpbmRUYWJsZXMoKTtcblxuXHRcdHRoaXMuX3NpZGVFZmZlY3RzLmNsZWFyUHJvcGVydGllc1N0YXR1cygpO1xuXG5cdFx0Ly8gVE9ETzogdGhpcyBpcyBvbmx5IGEgdGVtcCBzb2x1dGlvbiBhcyBsb25nIGFzIHRoZSBtb2RlbCBmaXggdGhlIGNhY2hlIGlzc3VlIGFuZCB3ZSB1c2UgdGhpcyBhZGRpdGlvbmFsXG5cdFx0Ly8gYmluZGluZyB3aXRoIG93blJlcXVlc3Rcblx0XHRvQmluZGluZ0NvbnRleHQgPSBvT2JqZWN0UGFnZS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXG5cdFx0bGV0IGFJQk5BY3Rpb25zOiBhbnlbXSA9IFtdO1xuXHRcdG9PYmplY3RQYWdlLmdldFNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1NlY3Rpb246IGFueSkge1xuXHRcdFx0b1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvU3ViU2VjdGlvbjogYW55KSB7XG5cdFx0XHRcdGFJQk5BY3Rpb25zID0gQ29tbW9uVXRpbHMuZ2V0SUJOQWN0aW9ucyhvU3ViU2VjdGlvbiwgYUlCTkFjdGlvbnMpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHQvLyBBc3NpZ24gaW50ZXJuYWwgYmluZGluZyBjb250ZXh0cyB0byBvRm9ybUNvbnRhaW5lcjpcblx0XHQvLyAxLiBJdCBpcyBub3QgcG9zc2libGUgdG8gYXNzaWduIHRoZSBpbnRlcm5hbCBiaW5kaW5nIGNvbnRleHQgdG8gdGhlIFhNTCBmcmFnbWVudFxuXHRcdC8vIChGb3JtQ29udGFpbmVyLmZyYWdtZW50LnhtbCkgeWV0IC0gaXQgaXMgdXNlZCBhbHJlYWR5IGZvciB0aGUgZGF0YS1zdHJ1Y3R1cmUuXG5cdFx0Ly8gMi4gQW5vdGhlciBwcm9ibGVtIGlzLCB0aGF0IEZvcm1Db250YWluZXJzIGFzc2lnbmVkIHRvIGEgJ01vcmVCbG9jaycgZG9lcyBub3QgaGF2ZSBhblxuXHRcdC8vIGludGVybmFsIG1vZGVsIGNvbnRleHQgYXQgYWxsLlxuXG5cdFx0YVRhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uIChvVGFibGU6IGFueSkge1xuXHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gb1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJjcmVhdGlvblJvd0ZpZWxkVmFsaWRpdHlcIiwge30pO1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3JlYXRpb25Sb3dDdXN0b21WYWxpZGl0eVwiLCB7fSk7XG5cblx0XHRcdGFJQk5BY3Rpb25zID0gQ29tbW9uVXRpbHMuZ2V0SUJOQWN0aW9ucyhvVGFibGUsIGFJQk5BY3Rpb25zKTtcblx0XHRcdC8vIHRlbXBvcmFyeSB3b3JrYXJvdW5kIGZvciBCQ1A6IDIwODAyMTgwMDRcblx0XHRcdC8vIE5lZWQgdG8gZml4IHdpdGggQkxJOiBGSU9SSVRFQ0hQMS0xNTI3NFxuXHRcdFx0Ly8gb25seSBmb3IgZWRpdCBtb2RlLCB3ZSBjbGVhciB0aGUgdGFibGUgY2FjaGVcblx0XHRcdC8vIFdvcmthcm91bmQgc3RhcnRzIGhlcmUhIVxuXHRcdFx0Y29uc3Qgb1RhYmxlUm93QmluZGluZyA9IG9UYWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdFx0XHRpZiAob1RhYmxlUm93QmluZGluZykge1xuXHRcdFx0XHRpZiAoTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKG9UYWJsZVJvd0JpbmRpbmcuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSkpIHtcblx0XHRcdFx0XHQvLyBhcHBseSBmb3IgYm90aCBlZGl0IGFuZCBkaXNwbGF5IG1vZGUgaW4gc3RpY2t5XG5cdFx0XHRcdFx0b1RhYmxlUm93QmluZGluZy5yZW1vdmVDYWNoZXNBbmRNZXNzYWdlcyhcIlwiKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly8gV29ya2Fyb3VuZCBlbmRzIGhlcmUhIVxuXG5cdFx0XHQvLyBVcGRhdGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIERhdGFGaWVsZEZvckFjdGlvbiBidXR0b25zIG9uIHRhYmxlIHRvb2xiYXJcblx0XHRcdC8vIFRoZSBzYW1lIGlzIGFsc28gcGVyZm9ybWVkIG9uIFRhYmxlIHNlbGVjdGlvbkNoYW5nZSBldmVudFxuXHRcdFx0Y29uc3Qgb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IEpTT04ucGFyc2UoXG5cdFx0XHRcdFx0Q29tbW9uSGVscGVyLnBhcnNlQ3VzdG9tRGF0YShEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YShvVGFibGUsIFwib3BlcmF0aW9uQXZhaWxhYmxlTWFwXCIpKVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRhU2VsZWN0ZWRDb250ZXh0cyA9IG9UYWJsZS5nZXRTZWxlY3RlZENvbnRleHRzKCk7XG5cblx0XHRcdEFjdGlvblJ1bnRpbWUuc2V0QWN0aW9uRW5hYmxlbWVudChvSW50ZXJuYWxNb2RlbENvbnRleHQsIG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAsIGFTZWxlY3RlZENvbnRleHRzLCBcInRhYmxlXCIpO1xuXHRcdFx0Ly8gQ2xlYXIgdGhlIHNlbGVjdGlvbiBpbiB0aGUgdGFibGUsIG5lZWQgdG8gYmUgZml4ZWQgYW5kIHJldmlldyB3aXRoIEJMSTogRklPUklURUNIUDEtMjQzMThcblx0XHRcdG9UYWJsZS5jbGVhclNlbGVjdGlvbigpO1xuXHRcdH0pO1xuXHRcdENvbW1vblV0aWxzLmdldFNlbWFudGljVGFyZ2V0c0Zyb21QYWdlTW9kZWwodGhpcywgXCJfcGFnZU1vZGVsXCIpO1xuXHRcdC8vUmV0cmlldmUgT2JqZWN0IFBhZ2UgaGVhZGVyIGFjdGlvbnMgZnJvbSBPYmplY3QgUGFnZSB0aXRsZSBjb250cm9sXG5cdFx0Y29uc3Qgb09iamVjdFBhZ2VUaXRsZSA9IG9PYmplY3RQYWdlLmdldEhlYWRlclRpdGxlKCkgYXMgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZTtcblx0XHRsZXQgYUlCTkhlYWRlckFjdGlvbnM6IGFueVtdID0gW107XG5cdFx0YUlCTkhlYWRlckFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9PYmplY3RQYWdlVGl0bGUsIGFJQk5IZWFkZXJBY3Rpb25zKTtcblx0XHRhSUJOQWN0aW9ucyA9IGFJQk5BY3Rpb25zLmNvbmNhdChhSUJOSGVhZGVyQWN0aW9ucyk7XG5cdFx0Q29tbW9uVXRpbHMudXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkoYUlCTkFjdGlvbnMsIHRoaXMuZ2V0VmlldygpKTtcblxuXHRcdGxldCBvTW9kZWw6IGFueSwgb0ZpbmFsVUlTdGF0ZTogYW55O1xuXG5cdFx0Ly8gVE9ETzogdGhpcyBzaG91bGQgYmUgbW92ZWQgaW50byBhbiBpbml0IGV2ZW50IG9mIHRoZSBNREMgdGFibGVzIChub3QgeWV0IGV4aXN0aW5nKSBhbmQgc2hvdWxkIGJlIHBhcnRcblx0XHQvLyBvZiBhbnkgY29udHJvbGxlciBleHRlbnNpb25cblx0XHQvKipcblx0XHQgKiBAcGFyYW0gb1RhYmxlXG5cdFx0ICogQHBhcmFtIG9MaXN0QmluZGluZ1xuXHRcdCAqL1xuXHRcdGFzeW5jIGZ1bmN0aW9uIGVuYWJsZUZhc3RDcmVhdGlvblJvdyhvVGFibGU6IGFueSwgb0xpc3RCaW5kaW5nOiBhbnkpIHtcblx0XHRcdGNvbnN0IG9GYXN0Q3JlYXRpb25Sb3cgPSBvVGFibGUuZ2V0Q3JlYXRpb25Sb3coKTtcblx0XHRcdGxldCBvRmFzdENyZWF0aW9uTGlzdEJpbmRpbmcsIG9GYXN0Q3JlYXRpb25Db250ZXh0O1xuXG5cdFx0XHRpZiAob0Zhc3RDcmVhdGlvblJvdykge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGF3YWl0IG9GaW5hbFVJU3RhdGU7XG5cdFx0XHRcdFx0aWYgKG9GYXN0Q3JlYXRpb25Sb3cuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpKSB7XG5cdFx0XHRcdFx0XHRvRmFzdENyZWF0aW9uTGlzdEJpbmRpbmcgPSBvTW9kZWwuYmluZExpc3Qob0xpc3RCaW5kaW5nLmdldFBhdGgoKSwgb0xpc3RCaW5kaW5nLmdldENvbnRleHQoKSwgW10sIFtdLCB7XG5cdFx0XHRcdFx0XHRcdCQkdXBkYXRlR3JvdXBJZDogXCJkb05vdFN1Ym1pdFwiLFxuXHRcdFx0XHRcdFx0XHQkJGdyb3VwSWQ6IFwiZG9Ob3RTdWJtaXRcIlxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHQvLyBXb3JrYXJvdW5kIHN1Z2dlc3RlZCBieSBPRGF0YSBtb2RlbCB2NCBjb2xsZWFndWVzXG5cdFx0XHRcdFx0XHRvRmFzdENyZWF0aW9uTGlzdEJpbmRpbmcucmVmcmVzaEludGVybmFsID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHQvKiBkbyBub3RoaW5nICovXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0b0Zhc3RDcmVhdGlvbkNvbnRleHQgPSBvRmFzdENyZWF0aW9uTGlzdEJpbmRpbmcuY3JlYXRlKCk7XG5cdFx0XHRcdFx0XHRvRmFzdENyZWF0aW9uUm93LnNldEJpbmRpbmdDb250ZXh0KG9GYXN0Q3JlYXRpb25Db250ZXh0KTtcblxuXHRcdFx0XHRcdFx0Ly8gdGhpcyBpcyBuZWVkZWQgdG8gYXZvaWQgY29uc29sZSBlcnJvclxuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0YXdhaXQgb0Zhc3RDcmVhdGlvbkNvbnRleHQuY3JlYXRlZCgpO1xuXHRcdFx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdFx0XHRMb2cudHJhY2UoXCJ0cmFuc2llbnQgZmFzdCBjcmVhdGlvbiBjb250ZXh0IGRlbGV0ZWRcIik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGNhdGNoIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGNvbXB1dGluZyB0aGUgZmluYWwgVUkgc3RhdGVcIiwgb0Vycm9yKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIHRoaXMgc2hvdWxkIG5vdCBiZSBuZWVkZWQgYXQgdGhlIGFsbFxuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSBvVGFibGVcblx0XHQgKi9cblx0XHRjb25zdCBoYW5kbGVUYWJsZU1vZGlmaWNhdGlvbnMgPSAob1RhYmxlOiBhbnkpID0+IHtcblx0XHRcdGNvbnN0IG9CaW5kaW5nID0gdGhpcy5fZ2V0VGFibGVCaW5kaW5nKG9UYWJsZSksXG5cdFx0XHRcdGZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cyA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRlbmFibGVGYXN0Q3JlYXRpb25Sb3cob1RhYmxlLCBvQmluZGluZyk7XG5cdFx0XHRcdH07XG5cblx0XHRcdGlmICghb0JpbmRpbmcpIHtcblx0XHRcdFx0TG9nLmVycm9yKGBFeHBlY3RlZCBiaW5kaW5nIG1pc3NpbmcgZm9yIHRhYmxlOiAke29UYWJsZS5nZXRJZCgpfWApO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmIChvQmluZGluZy5vQ29udGV4dCkge1xuXHRcdFx0XHRmbkhhbmRsZVRhYmxlUGF0Y2hFdmVudHMoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGZuSGFuZGxlQ2hhbmdlID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdGlmIChvQmluZGluZy5vQ29udGV4dCkge1xuXHRcdFx0XHRcdFx0Zm5IYW5kbGVUYWJsZVBhdGNoRXZlbnRzKCk7XG5cdFx0XHRcdFx0XHRvQmluZGluZy5kZXRhY2hDaGFuZ2UoZm5IYW5kbGVDaGFuZ2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdFx0b0JpbmRpbmcuYXR0YWNoQ2hhbmdlKGZuSGFuZGxlQ2hhbmdlKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0aWYgKG9CaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0b01vZGVsID0gb0JpbmRpbmdDb250ZXh0LmdldE1vZGVsKCk7XG5cblx0XHRcdC8vIENvbXB1dGUgRWRpdCBNb2RlXG5cdFx0XHRvRmluYWxVSVN0YXRlID0gdGhpcy5fZWRpdEZsb3cuY29tcHV0ZUVkaXRNb2RlKG9CaW5kaW5nQ29udGV4dCk7XG5cblx0XHRcdGlmIChNb2RlbEhlbHBlci5pc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZChvTW9kZWwuZ2V0TWV0YU1vZGVsKCkpKSB7XG5cdFx0XHRcdG9GaW5hbFVJU3RhdGVcblx0XHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAodGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpKSB7XG5cdFx0XHRcdFx0XHRcdGNvbm5lY3QodGhpcy5nZXRWaWV3KCkpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChpc0Nvbm5lY3RlZCh0aGlzLmdldFZpZXcoKSkpIHtcblx0XHRcdFx0XHRcdFx0ZGlzY29ubmVjdCh0aGlzLmdldFZpZXcoKSk7IC8vIENsZWFudXAgY29sbGFib3JhdGlvbiBjb25uZWN0aW9uIGluIGNhc2Ugd2Ugc3dpdGNoIHRvIGFub3RoZXIgZWxlbWVudCAoZS5nLiBpbiBGQ0wpXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSB3YWl0aW5nIGZvciB0aGUgZmluYWwgVUkgU3RhdGVcIiwgb0Vycm9yKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gdXBkYXRlIHJlbGF0ZWQgYXBwcyBvbmNlIERhdGEgaXMgcmVjZWl2ZWQgaW4gY2FzZSBvZiBiaW5kaW5nIGNhY2hlIGlzIG5vdCBhdmFpbGFibGVcblx0XHRcdC8vIFRPRE86IHRoaXMgaXMgb25seSBhIHRlbXAgc29sdXRpb24gc2luY2Ugd2UgbmVlZCB0byBjYWxsIF91cGRhdGVSZWxhdGVkQXBwcyBtZXRob2Qgb25seSBhZnRlciBkYXRhIGZvciBPYmplY3QgUGFnZSBpcyByZWNlaXZlZCAoaWYgdGhlcmUgaXMgbm8gYmluZGluZylcblx0XHRcdGlmIChvQmluZGluZ0NvbnRleHQuZ2V0QmluZGluZygpLm9DYWNoZSkge1xuXHRcdFx0XHR0aGlzLl91cGRhdGVSZWxhdGVkQXBwcygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgZm5VcGRhdGVSZWxhdGVkQXBwcyA9ICgpID0+IHtcblx0XHRcdFx0XHR0aGlzLl91cGRhdGVSZWxhdGVkQXBwcygpO1xuXHRcdFx0XHRcdG9CaW5kaW5nQ29udGV4dC5nZXRCaW5kaW5nKCkuZGV0YWNoRGF0YVJlY2VpdmVkKGZuVXBkYXRlUmVsYXRlZEFwcHMpO1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRvQmluZGluZ0NvbnRleHQuZ2V0QmluZGluZygpLmF0dGFjaERhdGFSZWNlaXZlZChmblVwZGF0ZVJlbGF0ZWRBcHBzKTtcblx0XHRcdH1cblxuXHRcdFx0Ly9BdHRhY2ggdGhlIHBhdGNoIHNlbnQgYW5kIHBhdGNoIGNvbXBsZXRlZCBldmVudCB0byB0aGUgb2JqZWN0IHBhZ2UgYmluZGluZyBzbyB0aGF0IHdlIGNhbiByZWFjdFxuXHRcdFx0Y29uc3Qgb0JpbmRpbmcgPSAob0JpbmRpbmdDb250ZXh0LmdldEJpbmRpbmcgJiYgb0JpbmRpbmdDb250ZXh0LmdldEJpbmRpbmcoKSkgfHwgb0JpbmRpbmdDb250ZXh0O1xuXG5cdFx0XHQvLyBBdHRhY2ggdGhlIGV2ZW50IGhhbmRsZXIgb25seSBvbmNlIHRvIHRoZSBzYW1lIGJpbmRpbmdcblx0XHRcdGlmICh0aGlzLmN1cnJlbnRCaW5kaW5nICE9PSBvQmluZGluZykge1xuXHRcdFx0XHRvQmluZGluZy5hdHRhY2hFdmVudChcInBhdGNoU2VudFwiLCB0aGlzLmVkaXRGbG93LmhhbmRsZVBhdGNoU2VudCwgdGhpcyk7XG5cdFx0XHRcdHRoaXMuY3VycmVudEJpbmRpbmcgPSBvQmluZGluZztcblx0XHRcdH1cblxuXHRcdFx0YVRhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uIChvVGFibGU6IGFueSkge1xuXHRcdFx0XHQvLyBhY2Nlc3MgYmluZGluZyBvbmx5IGFmdGVyIHRhYmxlIGlzIGJvdW5kXG5cdFx0XHRcdFRhYmxlVXRpbHMud2hlbkJvdW5kKG9UYWJsZSlcblx0XHRcdFx0XHQudGhlbihoYW5kbGVUYWJsZU1vZGlmaWNhdGlvbnMpXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgd2FpdGluZyBmb3IgdGhlIHRhYmxlIHRvIGJlIGJvdW5kXCIsIG9FcnJvcik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKCEodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLnVzZU5ld0xhenlMb2FkaW5nKSB7XG5cdFx0XHRcdC8vIHNob3VsZCBiZSBjYWxsZWQgb25seSBhZnRlciBiaW5kaW5nIGlzIHJlYWR5IGhlbmNlIGNhbGxpbmcgaXQgaW4gb25BZnRlckJpbmRpbmdcblx0XHRcdFx0KG9PYmplY3RQYWdlIGFzIGFueSkuX3RyaWdnZXJWaXNpYmxlU3ViU2VjdGlvbnNFdmVudHMoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdG9uUGFnZVJlYWR5KG1QYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHRjb25zdCBzZXRGb2N1cyA9ICgpID0+IHtcblx0XHRcdC8vIFNldCB0aGUgZm9jdXMgdG8gdGhlIGZpcnN0IGFjdGlvbiBidXR0b24sIG9yIHRvIHRoZSBmaXJzdCBlZGl0YWJsZSBpbnB1dCBpZiBpbiBlZGl0YWJsZSBtb2RlXG5cdFx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0XHRjb25zdCBpc0luRGlzcGxheU1vZGUgPSAhb09iamVjdFBhZ2UuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpO1xuXG5cdFx0XHRpZiAoaXNJbkRpc3BsYXlNb2RlKSB7XG5cdFx0XHRcdGNvbnN0IG9GaXJzdENsaWNrYWJsZUVsZW1lbnQgPSB0aGlzLl9nZXRGaXJzdENsaWNrYWJsZUVsZW1lbnQob09iamVjdFBhZ2UpO1xuXHRcdFx0XHRpZiAob0ZpcnN0Q2xpY2thYmxlRWxlbWVudCkge1xuXHRcdFx0XHRcdG9GaXJzdENsaWNrYWJsZUVsZW1lbnQuZm9jdXMoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3Qgb1NlbGVjdGVkU2VjdGlvbjogYW55ID0gQ29yZS5ieUlkKG9PYmplY3RQYWdlLmdldFNlbGVjdGVkU2VjdGlvbigpKTtcblx0XHRcdFx0aWYgKG9TZWxlY3RlZFNlY3Rpb24pIHtcblx0XHRcdFx0XHR0aGlzLl91cGRhdGVGb2N1c0luRWRpdE1vZGUob1NlbGVjdGVkU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdFx0Ly8gQXBwbHkgYXBwIHN0YXRlIG9ubHkgYWZ0ZXIgdGhlIHBhZ2UgaXMgcmVhZHkgd2l0aCB0aGUgZmlyc3Qgc2VjdGlvbiBzZWxlY3RlZFxuXHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBvQmluZGluZ0NvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdC8vU2hvdyBwb3B1cCB3aGlsZSBuYXZpZ2F0aW5nIGJhY2sgZnJvbSBvYmplY3QgcGFnZSBpbiBjYXNlIG9mIGRyYWZ0XG5cdFx0aWYgKG9CaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0Y29uc3QgYklzU3RpY2t5TW9kZSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCgob0JpbmRpbmdDb250ZXh0LmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdFx0aWYgKCFiSXNTdGlja3lNb2RlKSB7XG5cdFx0XHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQob1ZpZXcpO1xuXHRcdFx0XHRvQXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKS5zZXRCYWNrTmF2aWdhdGlvbigoKSA9PiB0aGlzLl9vbkJhY2tOYXZpZ2F0aW9uSW5EcmFmdChvQmluZGluZ0NvbnRleHQpKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKVxuXHRcdFx0LmdldEFwcFN0YXRlSGFuZGxlcigpXG5cdFx0XHQuYXBwbHlBcHBTdGF0ZSgpXG5cdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdGlmIChtUGFyYW1ldGVycy5mb3JjZUZvY3VzKSB7XG5cdFx0XHRcdFx0c2V0Rm9jdXMoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAoRXJyb3IpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgc2V0dGluZyB0aGUgZm9jdXNcIiwgRXJyb3IpO1xuXHRcdFx0fSk7XG5cblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJlcnJvck5hdmlnYXRpb25TZWN0aW9uRmxhZ1wiLCBmYWxzZSk7XG5cdFx0dGhpcy5fY2hlY2tEYXRhUG9pbnRUaXRsZUZvckV4dGVybmFsTmF2aWdhdGlvbigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgc3RhdHVzIG9mIGVkaXQgbW9kZSBmb3Igc3RpY2t5IHNlc3Npb24uXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRoZSBzdGF0dXMgb2YgZWRpdCBtb2RlIGZvciBzdGlja3kgc2Vzc2lvblxuXHQgKi9cblx0Z2V0U3RpY2t5RWRpdE1vZGUoKSB7XG5cdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQgJiYgKHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dCk7XG5cdFx0bGV0IGJJc1N0aWNreUVkaXRNb2RlID0gZmFsc2U7XG5cdFx0aWYgKG9CaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0Y29uc3QgYklzU3RpY2t5TW9kZSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChvQmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0XHRpZiAoYklzU3RpY2t5TW9kZSkge1xuXHRcdFx0XHRiSXNTdGlja3lFZGl0TW9kZSA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGJJc1N0aWNreUVkaXRNb2RlO1xuXHR9XG5cblx0X2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkge1xuXHRcdHJldHVybiB0aGlzLmJ5SWQoXCJmZTo6T2JqZWN0UGFnZVwiKSBhcyBPYmplY3RQYWdlTGF5b3V0O1xuXHR9XG5cblx0X2dldFBhZ2VUaXRsZUluZm9ybWF0aW9uKCkge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRjb25zdCBvT2JqZWN0UGFnZVN1YnRpdGxlID0gb09iamVjdFBhZ2UuZ2V0Q3VzdG9tRGF0YSgpLmZpbmQoZnVuY3Rpb24gKG9DdXN0b21EYXRhOiBhbnkpIHtcblx0XHRcdHJldHVybiBvQ3VzdG9tRGF0YS5nZXRLZXkoKSA9PT0gXCJPYmplY3RQYWdlU3VidGl0bGVcIjtcblx0XHR9KTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dGl0bGU6IG9PYmplY3RQYWdlLmRhdGEoXCJPYmplY3RQYWdlVGl0bGVcIikgfHwgXCJcIixcblx0XHRcdHN1YnRpdGxlOiBvT2JqZWN0UGFnZVN1YnRpdGxlICYmIG9PYmplY3RQYWdlU3VidGl0bGUuZ2V0VmFsdWUoKSxcblx0XHRcdGludGVudDogXCJcIixcblx0XHRcdGljb246IFwiXCJcblx0XHR9O1xuXHR9XG5cblx0X2V4ZWN1dGVIZWFkZXJTaG9ydGN1dChzSWQ6IGFueSkge1xuXHRcdGNvbnN0IHNCdXR0b25JZCA9IGAke3RoaXMuZ2V0VmlldygpLmdldElkKCl9LS0ke3NJZH1gLFxuXHRcdFx0b0J1dHRvbiA9ICh0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLmdldEhlYWRlclRpdGxlKCkgYXMgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZSlcblx0XHRcdFx0LmdldEFjdGlvbnMoKVxuXHRcdFx0XHQuZmluZChmdW5jdGlvbiAob0VsZW1lbnQ6IGFueSkge1xuXHRcdFx0XHRcdHJldHVybiBvRWxlbWVudC5nZXRJZCgpID09PSBzQnV0dG9uSWQ7XG5cdFx0XHRcdH0pO1xuXHRcdGlmIChvQnV0dG9uKSB7XG5cdFx0XHRDb21tb25VdGlscy5maXJlQnV0dG9uUHJlc3Mob0J1dHRvbik7XG5cdFx0fVxuXHR9XG5cblx0X2V4ZWN1dGVGb290ZXJTaG9ydGN1dChzSWQ6IGFueSkge1xuXHRcdGNvbnN0IHNCdXR0b25JZCA9IGAke3RoaXMuZ2V0VmlldygpLmdldElkKCl9LS0ke3NJZH1gLFxuXHRcdFx0b0J1dHRvbiA9ICh0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLmdldEZvb3RlcigpIGFzIGFueSkuZ2V0Q29udGVudCgpLmZpbmQoZnVuY3Rpb24gKG9FbGVtZW50OiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIG9FbGVtZW50LmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpID09PSBcInNhcC5tLkJ1dHRvblwiICYmIG9FbGVtZW50LmdldElkKCkgPT09IHNCdXR0b25JZDtcblx0XHRcdH0pO1xuXHRcdENvbW1vblV0aWxzLmZpcmVCdXR0b25QcmVzcyhvQnV0dG9uKTtcblx0fVxuXG5cdF9leGVjdXRlVGFiU2hvcnRDdXQob0V4ZWN1dGlvbjogYW55KSB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLFxuXHRcdFx0YVNlY3Rpb25zID0gb09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKSxcblx0XHRcdGlTZWN0aW9uSW5kZXhNYXggPSBhU2VjdGlvbnMubGVuZ3RoIC0gMSxcblx0XHRcdHNDb21tYW5kID0gb0V4ZWN1dGlvbi5vU291cmNlLmdldENvbW1hbmQoKTtcblx0XHRsZXQgbmV3U2VjdGlvbixcblx0XHRcdGlTZWxlY3RlZFNlY3Rpb25JbmRleCA9IG9PYmplY3RQYWdlLmluZGV4T2ZTZWN0aW9uKHRoaXMuYnlJZChvT2JqZWN0UGFnZS5nZXRTZWxlY3RlZFNlY3Rpb24oKSkgYXMgT2JqZWN0UGFnZVNlY3Rpb24pO1xuXHRcdGlmIChpU2VsZWN0ZWRTZWN0aW9uSW5kZXggIT09IC0xICYmIGlTZWN0aW9uSW5kZXhNYXggPiAwKSB7XG5cdFx0XHRpZiAoc0NvbW1hbmQgPT09IFwiTmV4dFRhYlwiKSB7XG5cdFx0XHRcdGlmIChpU2VsZWN0ZWRTZWN0aW9uSW5kZXggPD0gaVNlY3Rpb25JbmRleE1heCAtIDEpIHtcblx0XHRcdFx0XHRuZXdTZWN0aW9uID0gYVNlY3Rpb25zWysraVNlbGVjdGVkU2VjdGlvbkluZGV4XTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChpU2VsZWN0ZWRTZWN0aW9uSW5kZXggIT09IDApIHtcblx0XHRcdFx0Ly8gUHJldmlvdXNUYWJcblx0XHRcdFx0bmV3U2VjdGlvbiA9IGFTZWN0aW9uc1stLWlTZWxlY3RlZFNlY3Rpb25JbmRleF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChuZXdTZWN0aW9uKSB7XG5cdFx0XHRcdG9PYmplY3RQYWdlLnNldFNlbGVjdGVkU2VjdGlvbihuZXdTZWN0aW9uKTtcblx0XHRcdFx0bmV3U2VjdGlvbi5mb2N1cygpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF9nZXRGb290ZXJWaXNpYmlsaXR5KCkge1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3Qgc1ZpZXdJZCA9IHRoaXMuZ2V0VmlldygpLmdldElkKCk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwibWVzc2FnZUZvb3RlckNvbnRhaW5zRXJyb3JzXCIsIGZhbHNlKTtcblx0XHRzYXAudWlcblx0XHRcdC5nZXRDb3JlKClcblx0XHRcdC5nZXRNZXNzYWdlTWFuYWdlcigpXG5cdFx0XHQuZ2V0TWVzc2FnZU1vZGVsKClcblx0XHRcdC5nZXREYXRhKClcblx0XHRcdC5mb3JFYWNoKGZ1bmN0aW9uIChvTWVzc2FnZTogYW55KSB7XG5cdFx0XHRcdGlmIChvTWVzc2FnZS52YWxpZGF0aW9uICYmIG9NZXNzYWdlLnR5cGUgPT09IFwiRXJyb3JcIiAmJiBvTWVzc2FnZS50YXJnZXQuaW5kZXhPZihzVmlld0lkKSA+IC0xKSB7XG5cdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwibWVzc2FnZUZvb3RlckNvbnRhaW5zRXJyb3JzXCIsIHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0fVxuXG5cdF9zaG93TWVzc2FnZVBvcG92ZXIoZXJyPzogYW55LCBvUmV0PzogYW55KSB7XG5cdFx0aWYgKGVycikge1xuXHRcdFx0TG9nLmVycm9yKGVycik7XG5cdFx0fVxuXHRcdGNvbnN0IHJvb3RWaWV3Q29udHJvbGxlciA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkgYXMgYW55O1xuXHRcdGNvbnN0IGN1cnJlbnRQYWdlVmlldyA9IHJvb3RWaWV3Q29udHJvbGxlci5pc0ZjbEVuYWJsZWQoKVxuXHRcdFx0PyByb290Vmlld0NvbnRyb2xsZXIuZ2V0UmlnaHRtb3N0VmlldygpXG5cdFx0XHQ6ICh0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvb3RDb250YWluZXIoKSBhcyBhbnkpLmdldEN1cnJlbnRQYWdlKCk7XG5cdFx0aWYgKCFjdXJyZW50UGFnZVZpZXcuaXNBKFwic2FwLm0uTWVzc2FnZVBhZ2VcIikpIHtcblx0XHRcdGNvbnN0IG9NZXNzYWdlQnV0dG9uID0gdGhpcy5tZXNzYWdlQnV0dG9uLFxuXHRcdFx0XHRvTWVzc2FnZVBvcG92ZXIgPSBvTWVzc2FnZUJ1dHRvbi5vTWVzc2FnZVBvcG92ZXIsXG5cdFx0XHRcdG9JdGVtQmluZGluZyA9IG9NZXNzYWdlUG9wb3Zlci5nZXRCaW5kaW5nKFwiaXRlbXNcIik7XG5cblx0XHRcdGlmIChvSXRlbUJpbmRpbmcuZ2V0TGVuZ3RoKCkgPiAwICYmICFvTWVzc2FnZVBvcG92ZXIuaXNPcGVuKCkpIHtcblx0XHRcdFx0b01lc3NhZ2VCdXR0b24uc2V0VmlzaWJsZSh0cnVlKTtcblx0XHRcdFx0Ly8gd29ya2Fyb3VuZCB0byBlbnN1cmUgdGhhdCBvTWVzc2FnZUJ1dHRvbiBpcyByZW5kZXJlZCB3aGVuIG9wZW5CeSBpcyBjYWxsZWRcblx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0b01lc3NhZ2VQb3BvdmVyLm9wZW5CeShvTWVzc2FnZUJ1dHRvbik7XG5cdFx0XHRcdH0sIDApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb1JldDtcblx0fVxuXG5cdF9lZGl0RG9jdW1lbnQob0NvbnRleHQ6IGFueSkge1xuXHRcdGNvbnN0IG9Nb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIik7XG5cdFx0QnVzeUxvY2tlci5sb2NrKG9Nb2RlbCk7XG5cdFx0cmV0dXJuIHRoaXMuZWRpdEZsb3cuZWRpdERvY3VtZW50LmFwcGx5KHRoaXMuZWRpdEZsb3csIFtvQ29udGV4dF0pLmZpbmFsbHkoZnVuY3Rpb24gKCkge1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2sob01vZGVsKTtcblx0XHR9KTtcblx0fVxuXHQvKipcblx0ICogR2V0cyB0aGUgY29udGV4dCBvZiB0aGUgRHJhZnRSb290IHBhdGguXG5cdCAqIElmIGEgdmlldyBoYXMgYmVlbiBjcmVhdGVkIHdpdGggdGhlIGRyYWZ0IFJvb3QgUGF0aCwgdGhpcyBtZXRob2QgcmV0dXJucyBpdHMgYmluZGluZ0NvbnRleHQuXG5cdCAqIFdoZXJlIG5vIHZpZXcgaXMgZm91bmQgYSBuZXcgY3JlYXRlZCBjb250ZXh0IGlzIHJldHVybmVkLlxuXHQgKiBUaGUgbmV3IGNyZWF0ZWQgY29udGV4dCByZXF1ZXN0IHRoZSBrZXkgb2YgdGhlIGVudGl0eSBpbiBvcmRlciB0byBnZXQgdGhlIEV0YWcgb2YgdGhpcyBlbnRpdHkuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBnZXREcmFmdFJvb3RQYXRoXG5cdCAqIEByZXR1cm5zIFJldHVybnMgYSBQcm9taXNlXG5cdCAqL1xuXHRhc3luYyBnZXREcmFmdFJvb3RDb250ZXh0KCk6IFByb21pc2U8VjRDb250ZXh0IHwgdW5kZWZpbmVkPiB7XG5cdFx0Y29uc3QgdmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IGNvbnRleHQgPSB2aWV3LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgVjRDb250ZXh0O1xuXHRcdGlmIChjb250ZXh0KSB7XG5cdFx0XHRjb25zdCBkcmFmdFJvb3RDb250ZXh0UGF0aCA9IE1vZGVsSGVscGVyLmdldERyYWZ0Um9vdFBhdGgoY29udGV4dCk7XG5cdFx0XHRsZXQgc2ltcGxlRHJhZnRSb290Q29udGV4dDogVjRDb250ZXh0O1xuXHRcdFx0aWYgKGRyYWZ0Um9vdENvbnRleHRQYXRoKSB7XG5cdFx0XHRcdC8vIENoZWNrIGlmIGEgdmlldyBtYXRjaGVzIHdpdGggdGhlIGRyYWZ0IHJvb3QgcGF0aFxuXHRcdFx0XHRjb25zdCBleGlzdGluZ0JpbmRpbmdDb250ZXh0T25QYWdlID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKVxuXHRcdFx0XHRcdC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKVxuXHRcdFx0XHRcdC5nZXRJbnN0YW5jZWRWaWV3cygpXG5cdFx0XHRcdFx0LmZpbmQoKHBhZ2VWaWV3OiBWaWV3KSA9PiBwYWdlVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCkgPT09IGRyYWZ0Um9vdENvbnRleHRQYXRoKVxuXHRcdFx0XHRcdD8uZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBWNENvbnRleHQ7XG5cdFx0XHRcdGlmIChleGlzdGluZ0JpbmRpbmdDb250ZXh0T25QYWdlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGV4aXN0aW5nQmluZGluZ0NvbnRleHRPblBhZ2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IHZpZXcuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cdFx0XHRcdHNpbXBsZURyYWZ0Um9vdENvbnRleHQgPSBpbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KFwiL3NpbXBsZURyYWZ0Um9vdENvbnRleHRcIik7XG5cdFx0XHRcdGlmIChzaW1wbGVEcmFmdFJvb3RDb250ZXh0Py5nZXRQYXRoKCkgPT09IGRyYWZ0Um9vdENvbnRleHRQYXRoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHNpbXBsZURyYWZ0Um9vdENvbnRleHQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgbW9kZWwgPSBjb250ZXh0LmdldE1vZGVsKCk7XG5cdFx0XHRcdGNvbnN0IG1ldGFNb2RlbCA9IG1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0XHRjb25zdCBzRW50aXR5UGF0aCA9IG1ldGFNb2RlbC5nZXRNZXRhUGF0aChkcmFmdFJvb3RDb250ZXh0UGF0aCk7XG5cdFx0XHRcdGNvbnN0IG1EYXRhTW9kZWwgPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFNb2RlbC5nZXRDb250ZXh0KHNFbnRpdHlQYXRoKSk7XG5cdFx0XHRcdHNpbXBsZURyYWZ0Um9vdENvbnRleHQgPSBtb2RlbC5iaW5kQ29udGV4dChkcmFmdFJvb3RDb250ZXh0UGF0aCkuZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0XHRcdGF3YWl0IHNpbXBsZURyYWZ0Um9vdENvbnRleHQucmVxdWVzdFByb3BlcnR5KG1EYXRhTW9kZWwudGFyZ2V0RW50aXR5VHlwZS5rZXlzWzBdPy5uYW1lKTtcblx0XHRcdFx0Ly8gU3RvcmUgdGhpcyBuZXcgY3JlYXRlZCBjb250ZXh0IHRvIHVzZSBpdCBvbiB0aGUgbmV4dCBpdGVyYXRpb25zXG5cdFx0XHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvc2ltcGxlRHJhZnRSb290Q29udGV4dFwiLCBzaW1wbGVEcmFmdFJvb3RDb250ZXh0KTtcblx0XHRcdFx0cmV0dXJuIHNpbXBsZURyYWZ0Um9vdENvbnRleHQ7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0YXN5bmMgX3ZhbGlkYXRlRG9jdW1lbnQoKTogUHJvbWlzZTx2b2lkIHwgYW55W10gfCBPRGF0YUNvbnRleHRCaW5kaW5nRXg+IHtcblx0XHRjb25zdCBjb250cm9sID0gQ29yZS5ieUlkKENvcmUuZ2V0Q3VycmVudEZvY3VzZWRDb250cm9sSWQoKSk7XG5cdFx0Y29uc3QgY29udGV4dCA9IGNvbnRyb2w/LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgVjRDb250ZXh0O1xuXHRcdGlmIChjb250ZXh0ICYmICFjb250ZXh0LmlzVHJhbnNpZW50KCkpIHtcblx0XHRcdC8vIFdhaXQgZm9yIHRoZSBwZW5kaW5nIGNoYW5nZXMgYmVmb3JlIHN0YXJ0aW5nIHRoaXMgdmFsaWRhdGlvblxuXHRcdFx0YXdhaXQgdGhpcy5fZWRpdEZsb3cuc3luY1Rhc2soKTtcblx0XHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0XHRjb25zdCBzaWRlRWZmZWN0c1NlcnZpY2UgPSBhcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCk7XG5cdFx0XHRjb25zdCBlbnRpdHlUeXBlID0gc2lkZUVmZmVjdHNTZXJ2aWNlLmdldEVudGl0eVR5cGVGcm9tQ29udGV4dChjb250ZXh0KTtcblx0XHRcdGNvbnN0IGdsb2JhbFNpZGVFZmZlY3RzID0gZW50aXR5VHlwZSA/IHNpZGVFZmZlY3RzU2VydmljZS5nZXRHbG9iYWxPRGF0YUVudGl0eVNpZGVFZmZlY3RzKGVudGl0eVR5cGUpIDogW107XG5cdFx0XHQvLyBJZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgZ2xvYmFsIFNpZGVFZmZlY3RzIGZvciB0aGUgcmVsYXRlZCBlbnRpdHksIGV4ZWN1dGUgaXQvdGhlbVxuXHRcdFx0aWYgKGdsb2JhbFNpZGVFZmZlY3RzLmxlbmd0aCkge1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoZ2xvYmFsU2lkZUVmZmVjdHMubWFwKChzaWRlRWZmZWN0cykgPT4gdGhpcy5fc2lkZUVmZmVjdHMucmVxdWVzdFNpZGVFZmZlY3RzKHNpZGVFZmZlY3RzLCBjb250ZXh0KSkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgZHJhZnRSb290Q29udGV4dCA9IGF3YWl0IHRoaXMuZ2V0RHJhZnRSb290Q29udGV4dCgpO1xuXHRcdFx0XHQvL0V4ZWN1dGUgdGhlIGRyYWZ0VmFsaWRhdGlvbiBpZiB0aGVyZSBpcyBubyBnbG9iYWxTaWRlRWZmZWN0c1xuXHRcdFx0XHRpZiAoZHJhZnRSb290Q29udGV4dCkge1xuXHRcdFx0XHRcdHJldHVybiBkcmFmdC5leGVjdXRlRHJhZnRWYWxpZGF0aW9uKGRyYWZ0Um9vdENvbnRleHQsIGFwcENvbXBvbmVudCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdGFzeW5jIF9zYXZlRG9jdW1lbnQob0NvbnRleHQ6IGFueSkge1xuXHRcdGNvbnN0IG9Nb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIiksXG5cdFx0XHRhV2FpdENyZWF0ZURvY3VtZW50czogYW55W10gPSBbXTtcblx0XHQvLyBpbmRpY2F0ZXMgaWYgd2UgYXJlIGNyZWF0aW5nIGEgbmV3IHJvdyBpbiB0aGUgT1Bcblx0XHRsZXQgYkV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IgPSBmYWxzZTtcblx0XHRCdXN5TG9ja2VyLmxvY2sob01vZGVsKTtcblx0XHR0aGlzLl9maW5kVGFibGVzKCkuZm9yRWFjaCgob1RhYmxlOiBhbnkpID0+IHtcblx0XHRcdGNvbnN0IG9CaW5kaW5nID0gdGhpcy5fZ2V0VGFibGVCaW5kaW5nKG9UYWJsZSk7XG5cdFx0XHRjb25zdCBtUGFyYW1ldGVyczogYW55ID0ge1xuXHRcdFx0XHRjcmVhdGlvbk1vZGU6IG9UYWJsZS5kYXRhKFwiY3JlYXRpb25Nb2RlXCIpLFxuXHRcdFx0XHRjcmVhdGlvblJvdzogb1RhYmxlLmdldENyZWF0aW9uUm93KCksXG5cdFx0XHRcdGNyZWF0ZUF0RW5kOiBvVGFibGUuZGF0YShcImNyZWF0ZUF0RW5kXCIpID09PSBcInRydWVcIlxuXHRcdFx0fTtcblx0XHRcdGNvbnN0IGJDcmVhdGVEb2N1bWVudCA9XG5cdFx0XHRcdG1QYXJhbWV0ZXJzLmNyZWF0aW9uUm93ICYmXG5cdFx0XHRcdG1QYXJhbWV0ZXJzLmNyZWF0aW9uUm93LmdldEJpbmRpbmdDb250ZXh0KCkgJiZcblx0XHRcdFx0T2JqZWN0LmtleXMobVBhcmFtZXRlcnMuY3JlYXRpb25Sb3cuZ2V0QmluZGluZ0NvbnRleHQoKS5nZXRPYmplY3QoKSkubGVuZ3RoID4gMTtcblx0XHRcdGlmIChiQ3JlYXRlRG9jdW1lbnQpIHtcblx0XHRcdFx0Ly8gdGhlIGJTa2lwU2lkZUVmZmVjdHMgaXMgYSBwYXJhbWV0ZXIgY3JlYXRlZCB3aGVuIHdlIGNsaWNrIHRoZSBzYXZlIGtleS4gSWYgd2UgcHJlc3MgdGhpcyBrZXlcblx0XHRcdFx0Ly8gd2UgZG9uJ3QgZXhlY3V0ZSB0aGUgaGFuZGxlU2lkZUVmZmVjdHMgZnVuY2l0b24gdG8gYXZvaWQgYmF0Y2ggcmVkdW5kYW5jeVxuXHRcdFx0XHRtUGFyYW1ldGVycy5iU2tpcFNpZGVFZmZlY3RzID0gdHJ1ZTtcblx0XHRcdFx0YkV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IgPSB0cnVlO1xuXHRcdFx0XHRhV2FpdENyZWF0ZURvY3VtZW50cy5wdXNoKFxuXHRcdFx0XHRcdHRoaXMuZWRpdEZsb3cuY3JlYXRlRG9jdW1lbnQob0JpbmRpbmcsIG1QYXJhbWV0ZXJzKS50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdHJldHVybiBvQmluZGluZztcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGFCaW5kaW5ncyA9IGF3YWl0IFByb21pc2UuYWxsKGFXYWl0Q3JlYXRlRG9jdW1lbnRzKTtcblx0XHRcdGNvbnN0IG1QYXJhbWV0ZXJzID0ge1xuXHRcdFx0XHRiRXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvcjogYkV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IsXG5cdFx0XHRcdGJpbmRpbmdzOiBhQmluZGluZ3Ncblx0XHRcdH07XG5cdFx0XHQvLyBXZSBuZWVkIHRvIGVpdGhlciByZWplY3Qgb3IgcmVzb2x2ZSBhIHByb21pc2UgaGVyZSBhbmQgcmV0dXJuIGl0IHNpbmNlIHRoaXMgc2F2ZVxuXHRcdFx0Ly8gZnVuY3Rpb24gaXMgbm90IG9ubHkgY2FsbGVkIHdoZW4gcHJlc3NpbmcgdGhlIHNhdmUgYnV0dG9uIGluIHRoZSBmb290ZXIsIGJ1dCBhbHNvXG5cdFx0XHQvLyB3aGVuIHRoZSB1c2VyIHNlbGVjdHMgY3JlYXRlIG9yIHNhdmUgaW4gYSBkYXRhbG9zcyBwb3B1cC5cblx0XHRcdC8vIFRoZSBsb2dpYyBvZiB0aGUgZGF0YWxvc3MgcG9wdXAgbmVlZHMgdG8gZGV0ZWN0IGlmIHRoZSBzYXZlIGhhZCBlcnJvcnMgb3Igbm90IGluIG9yZGVyXG5cdFx0XHQvLyB0byBkZWNpZGUgaWYgdGhlIHN1YnNlcXVlbnQgYWN0aW9uIC0gbGlrZSBhIGJhY2sgbmF2aWdhdGlvbiAtIGhhcyB0byBiZSBleGVjdXRlZCBvciBub3QuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRhd2FpdCB0aGlzLmVkaXRGbG93LnNhdmVEb2N1bWVudChvQ29udGV4dCwgbVBhcmFtZXRlcnMpO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3I6IGFueSkge1xuXHRcdFx0XHQvLyBJZiB0aGUgc2F2ZURvY3VtZW50IGluIGVkaXRGbG93IHJldHVybnMgZXJyb3JzIHdlIG5lZWRcblx0XHRcdFx0Ly8gdG8gc2hvdyB0aGUgbWVzc2FnZSBwb3BvdmVyIGhlcmUgYW5kIGVuc3VyZSB0aGF0IHRoZVxuXHRcdFx0XHQvLyBkYXRhbG9zcyBsb2dpYyBkb2VzIG5vdCBwZXJmb3JtIHRoZSBmb2xsb3cgdXAgZnVuY3Rpb25cblx0XHRcdFx0Ly8gbGlrZSBlLmcuIGEgYmFjayBuYXZpZ2F0aW9uIGhlbmNlIHdlIHJldHVybiBhIHByb21pc2UgYW5kIHJlamVjdCBpdFxuXHRcdFx0XHR0aGlzLl9zaG93TWVzc2FnZVBvcG92ZXIoZXJyb3IpO1xuXHRcdFx0XHR0aHJvdyBlcnJvcjtcblx0XHRcdH1cblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0aWYgKEJ1c3lMb2NrZXIuaXNMb2NrZWQob01vZGVsKSkge1xuXHRcdFx0XHRCdXN5TG9ja2VyLnVubG9jayhvTW9kZWwpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF9tYW5hZ2VDb2xsYWJvcmF0aW9uKCkge1xuXHRcdG9wZW5NYW5hZ2VEaWFsb2codGhpcy5nZXRWaWV3KCkpO1xuXHR9XG5cblx0X3Nob3dDb2xsYWJvcmF0aW9uVXNlckRldGFpbHMoZXZlbnQ6IGFueSkge1xuXHRcdHNob3dVc2VyRGV0YWlscyhldmVudCwgdGhpcy5nZXRWaWV3KCkpO1xuXHR9XG5cblx0X2NhbmNlbERvY3VtZW50KG9Db250ZXh0OiBhbnksIG1QYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHRtUGFyYW1ldGVycy5jYW5jZWxCdXR0b24gPSB0aGlzLmdldFZpZXcoKS5ieUlkKG1QYXJhbWV0ZXJzLmNhbmNlbEJ1dHRvbik7IC8vdG8gZ2V0IHRoZSByZWZlcmVuY2Ugb2YgdGhlIGNhbmNlbCBidXR0b24gZnJvbSBjb21tYW5kIGV4ZWN1dGlvblxuXHRcdHJldHVybiB0aGlzLmVkaXRGbG93LmNhbmNlbERvY3VtZW50KG9Db250ZXh0LCBtUGFyYW1ldGVycyk7XG5cdH1cblxuXHRfYXBwbHlEb2N1bWVudChvQ29udGV4dDogYW55KSB7XG5cdFx0cmV0dXJuIHRoaXMuZWRpdEZsb3cuYXBwbHlEb2N1bWVudChvQ29udGV4dCkuY2F0Y2goKCkgPT4gdGhpcy5fc2hvd01lc3NhZ2VQb3BvdmVyKCkpO1xuXHR9XG5cblx0X3VwZGF0ZVJlbGF0ZWRBcHBzKCkge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRpZiAoQ29tbW9uVXRpbHMucmVzb2x2ZVN0cmluZ3RvQm9vbGVhbihvT2JqZWN0UGFnZS5kYXRhKFwic2hvd1JlbGF0ZWRBcHBzXCIpKSkge1xuXHRcdFx0Q29tbW9uVXRpbHMudXBkYXRlUmVsYXRlZEFwcHNEZXRhaWxzKG9PYmplY3RQYWdlKTtcblx0XHR9XG5cdH1cblxuXHRfZmluZENvbnRyb2xJblN1YlNlY3Rpb24oYVBhcmVudEVsZW1lbnQ6IGFueSwgYVN1YnNlY3Rpb246IGFueSwgYUNvbnRyb2xzOiBhbnksIGJJc0NoYXJ0PzogYm9vbGVhbikge1xuXHRcdGNvbnN0IGFTdWJTZWN0aW9uVGFibGVzID0gW107XG5cdFx0Zm9yIChsZXQgZWxlbWVudCA9IDA7IGVsZW1lbnQgPCBhUGFyZW50RWxlbWVudC5sZW5ndGg7IGVsZW1lbnQrKykge1xuXHRcdFx0bGV0IG9FbGVtZW50ID0gYVBhcmVudEVsZW1lbnRbZWxlbWVudF0uZ2V0Q29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIGFQYXJlbnRFbGVtZW50W2VsZW1lbnRdLmdldENvbnRlbnQoKTtcblx0XHRcdGlmIChiSXNDaGFydCkge1xuXHRcdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQubUFnZ3JlZ2F0aW9ucyAmJiBvRWxlbWVudC5nZXRBZ2dyZWdhdGlvbihcIml0ZW1zXCIpKSB7XG5cdFx0XHRcdFx0Y29uc3QgYUl0ZW1zID0gb0VsZW1lbnQuZ2V0QWdncmVnYXRpb24oXCJpdGVtc1wiKTtcblx0XHRcdFx0XHRhSXRlbXMuZm9yRWFjaChmdW5jdGlvbiAob0l0ZW06IGFueSkge1xuXHRcdFx0XHRcdFx0aWYgKG9JdGVtLmlzQShcInNhcC5mZS5tYWNyb3MuY2hhcnQuQ2hhcnRBUElcIikpIHtcblx0XHRcdFx0XHRcdFx0b0VsZW1lbnQgPSBvSXRlbTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50LmlzQSAmJiBvRWxlbWVudC5pc0EoXCJzYXAudWkubGF5b3V0LkR5bmFtaWNTaWRlQ29udGVudFwiKSkge1xuXHRcdFx0XHRvRWxlbWVudCA9IG9FbGVtZW50LmdldE1haW5Db250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgb0VsZW1lbnQuZ2V0TWFpbkNvbnRlbnQoKTtcblx0XHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRvRWxlbWVudCA9IG9FbGVtZW50WzBdO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQuaXNBICYmIG9FbGVtZW50LmlzQShcInNhcC5mZS5tYWNyb3MudGFibGUuVGFibGVBUElcIikpIHtcblx0XHRcdFx0b0VsZW1lbnQgPSBvRWxlbWVudC5nZXRDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgb0VsZW1lbnQuZ2V0Q29udGVudCgpO1xuXHRcdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdG9FbGVtZW50ID0gb0VsZW1lbnRbMF07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5pc0EgJiYgb0VsZW1lbnQuaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRhQ29udHJvbHMucHVzaChvRWxlbWVudCk7XG5cdFx0XHRcdGFTdWJTZWN0aW9uVGFibGVzLnB1c2goe1xuXHRcdFx0XHRcdFwidGFibGVcIjogb0VsZW1lbnQsXG5cdFx0XHRcdFx0XCJncmlkVGFibGVcIjogb0VsZW1lbnQuZ2V0VHlwZSgpLmlzQShcInNhcC51aS5tZGMudGFibGUuR3JpZFRhYmxlVHlwZVwiKVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50LmlzQSAmJiBvRWxlbWVudC5pc0EoXCJzYXAuZmUubWFjcm9zLmNoYXJ0LkNoYXJ0QVBJXCIpKSB7XG5cdFx0XHRcdG9FbGVtZW50ID0gb0VsZW1lbnQuZ2V0Q29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIG9FbGVtZW50LmdldENvbnRlbnQoKTtcblx0XHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRvRWxlbWVudCA9IG9FbGVtZW50WzBdO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQuaXNBICYmIG9FbGVtZW50LmlzQShcInNhcC51aS5tZGMuQ2hhcnRcIikpIHtcblx0XHRcdFx0YUNvbnRyb2xzLnB1c2gob0VsZW1lbnQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoXG5cdFx0XHRhU3ViU2VjdGlvblRhYmxlcy5sZW5ndGggPT09IDEgJiZcblx0XHRcdGFQYXJlbnRFbGVtZW50Lmxlbmd0aCA9PT0gMSAmJlxuXHRcdFx0YVN1YlNlY3Rpb25UYWJsZXNbMF0uZ3JpZFRhYmxlICYmXG5cdFx0XHQhYVN1YnNlY3Rpb24uaGFzU3R5bGVDbGFzcyhcInNhcFV4QVBPYmplY3RQYWdlU3ViU2VjdGlvbkZpdENvbnRhaW5lclwiKVxuXHRcdCkge1xuXHRcdFx0Ly9JbiBjYXNlIHRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgdGFibGUgaW4gYSBzZWN0aW9uIHdlIGZpdCB0aGF0IHRvIHRoZSB3aG9sZSBwYWdlIHNvIHRoYXQgdGhlIHNjcm9sbGJhciBjb21lcyBvbmx5IG9uIHRhYmxlIGFuZCBub3Qgb24gcGFnZVxuXHRcdFx0YVN1YnNlY3Rpb24uYWRkU3R5bGVDbGFzcyhcInNhcFV4QVBPYmplY3RQYWdlU3ViU2VjdGlvbkZpdENvbnRhaW5lclwiKTtcblx0XHR9XG5cdH1cblxuXHRfZ2V0QWxsU3ViU2VjdGlvbnMoKSB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGxldCBhU3ViU2VjdGlvbnM6IGFueVtdID0gW107XG5cdFx0b09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvU2VjdGlvbjogYW55KSB7XG5cdFx0XHRhU3ViU2VjdGlvbnMgPSBhU3ViU2VjdGlvbnMuY29uY2F0KG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBhU3ViU2VjdGlvbnM7XG5cdH1cblxuXHRfZ2V0QWxsQmxvY2tzKCkge1xuXHRcdGxldCBhQmxvY2tzOiBhbnlbXSA9IFtdO1xuXHRcdHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1N1YlNlY3Rpb246IGFueSkge1xuXHRcdFx0YUJsb2NrcyA9IGFCbG9ja3MuY29uY2F0KG9TdWJTZWN0aW9uLmdldEJsb2NrcygpKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gYUJsb2Nrcztcblx0fVxuXG5cdF9maW5kVGFibGVzKCkge1xuXHRcdGNvbnN0IGFTdWJTZWN0aW9ucyA9IHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCk7XG5cdFx0Y29uc3QgYVRhYmxlczogYW55W10gPSBbXTtcblx0XHRmb3IgKGxldCBzdWJTZWN0aW9uID0gMDsgc3ViU2VjdGlvbiA8IGFTdWJTZWN0aW9ucy5sZW5ndGg7IHN1YlNlY3Rpb24rKykge1xuXHRcdFx0dGhpcy5fZmluZENvbnRyb2xJblN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLmdldEJsb2NrcygpLCBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0sIGFUYWJsZXMpO1xuXHRcdFx0dGhpcy5fZmluZENvbnRyb2xJblN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLmdldE1vcmVCbG9ja3MoKSwgYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLCBhVGFibGVzKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFUYWJsZXM7XG5cdH1cblxuXHRfZmluZENoYXJ0cygpIHtcblx0XHRjb25zdCBhU3ViU2VjdGlvbnMgPSB0aGlzLl9nZXRBbGxTdWJTZWN0aW9ucygpO1xuXHRcdGNvbnN0IGFDaGFydHM6IGFueVtdID0gW107XG5cdFx0Zm9yIChsZXQgc3ViU2VjdGlvbiA9IDA7IHN1YlNlY3Rpb24gPCBhU3ViU2VjdGlvbnMubGVuZ3RoOyBzdWJTZWN0aW9uKyspIHtcblx0XHRcdHRoaXMuX2ZpbmRDb250cm9sSW5TdWJTZWN0aW9uKGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXS5nZXRCbG9ja3MoKSwgYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLCBhQ2hhcnRzLCB0cnVlKTtcblx0XHRcdHRoaXMuX2ZpbmRDb250cm9sSW5TdWJTZWN0aW9uKGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXS5nZXRNb3JlQmxvY2tzKCksIGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXSwgYUNoYXJ0cywgdHJ1ZSk7XG5cdFx0fVxuXHRcdHJldHVybiBhQ2hhcnRzO1xuXHR9XG5cblx0X2Nsb3NlU2lkZUNvbnRlbnQoKSB7XG5cdFx0dGhpcy5fZ2V0QWxsQmxvY2tzKCkuZm9yRWFjaChmdW5jdGlvbiAob0Jsb2NrOiBhbnkpIHtcblx0XHRcdGNvbnN0IG9Db250ZW50ID0gb0Jsb2NrLmdldENvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBvQmxvY2suZ2V0Q29udGVudCgpO1xuXHRcdFx0aWYgKG9Db250ZW50ICYmIG9Db250ZW50LmlzQSAmJiBvQ29udGVudC5pc0EoXCJzYXAudWkubGF5b3V0LkR5bmFtaWNTaWRlQ29udGVudFwiKSkge1xuXHRcdFx0XHRpZiAob0NvbnRlbnQuc2V0U2hvd1NpZGVDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcblx0XHRcdFx0XHRvQ29udGVudC5zZXRTaG93U2lkZUNvbnRlbnQoZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hhcnQgQ29udGV4dCBpcyByZXNvbHZlZCBmb3IgMTpuIG1pY3JvY2hhcnRzLlxuXHQgKlxuXHQgKiBAcGFyYW0gb0NoYXJ0Q29udGV4dCBUaGUgQ29udGV4dCBvZiB0aGUgTWljcm9DaGFydFxuXHQgKiBAcGFyYW0gc0NoYXJ0UGF0aCBUaGUgY29sbGVjdGlvblBhdGggb2YgdGhlIHRoZSBjaGFydFxuXHQgKiBAcmV0dXJucyBBcnJheSBvZiBBdHRyaWJ1dGVzIG9mIHRoZSBjaGFydCBDb250ZXh0XG5cdCAqL1xuXHRfZ2V0Q2hhcnRDb250ZXh0RGF0YShvQ2hhcnRDb250ZXh0OiBhbnksIHNDaGFydFBhdGg6IHN0cmluZykge1xuXHRcdGNvbnN0IG9Db250ZXh0RGF0YSA9IG9DaGFydENvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0bGV0IG9DaGFydENvbnRleHREYXRhID0gW29Db250ZXh0RGF0YV07XG5cdFx0aWYgKG9DaGFydENvbnRleHQgJiYgc0NoYXJ0UGF0aCkge1xuXHRcdFx0aWYgKG9Db250ZXh0RGF0YVtzQ2hhcnRQYXRoXSkge1xuXHRcdFx0XHRvQ2hhcnRDb250ZXh0RGF0YSA9IG9Db250ZXh0RGF0YVtzQ2hhcnRQYXRoXTtcblx0XHRcdFx0ZGVsZXRlIG9Db250ZXh0RGF0YVtzQ2hhcnRQYXRoXTtcblx0XHRcdFx0b0NoYXJ0Q29udGV4dERhdGEucHVzaChvQ29udGV4dERhdGEpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb0NoYXJ0Q29udGV4dERhdGE7XG5cdH1cblxuXHQvKipcblx0ICogU2Nyb2xsIHRoZSB0YWJsZXMgdG8gdGhlIHJvdyB3aXRoIHRoZSBzUGF0aFxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgc2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLk9iamVjdFBhZ2VDb250cm9sbGVyLmNvbnRyb2xsZXIjX3Njcm9sbFRhYmxlc1RvUm93XG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzUm93UGF0aCAnc1BhdGggb2YgdGhlIHRhYmxlIHJvdydcblx0ICovXG5cblx0X3Njcm9sbFRhYmxlc1RvUm93KHNSb3dQYXRoOiBzdHJpbmcpIHtcblx0XHRpZiAodGhpcy5fZmluZFRhYmxlcyAmJiB0aGlzLl9maW5kVGFibGVzKCkubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgYVRhYmxlcyA9IHRoaXMuX2ZpbmRUYWJsZXMoKTtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYVRhYmxlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRUYWJsZVNjcm9sbGVyLnNjcm9sbFRhYmxlVG9Sb3coYVRhYmxlc1tpXSwgc1Jvd1BhdGgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gbWVyZ2Ugc2VsZWN0ZWQgY29udGV4dHMgYW5kIGZpbHRlcnMuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBfbWVyZ2VNdWx0aXBsZUNvbnRleHRzXG5cdCAqIEBwYXJhbSBvUGFnZUNvbnRleHQgUGFnZSBjb250ZXh0XG5cdCAqIEBwYXJhbSBhTGluZUNvbnRleHQgU2VsZWN0ZWQgQ29udGV4dHNcblx0ICogQHBhcmFtIHNDaGFydFBhdGggQ29sbGVjdGlvbiBuYW1lIG9mIHRoZSBjaGFydFxuXHQgKiBAcmV0dXJucyBTZWxlY3Rpb24gVmFyaWFudCBPYmplY3Rcblx0ICovXG5cdF9tZXJnZU11bHRpcGxlQ29udGV4dHMob1BhZ2VDb250ZXh0OiBDb250ZXh0LCBhTGluZUNvbnRleHQ6IGFueVtdLCBzQ2hhcnRQYXRoOiBzdHJpbmcpIHtcblx0XHRsZXQgYUF0dHJpYnV0ZXM6IGFueVtdID0gW10sXG5cdFx0XHRhUGFnZUF0dHJpYnV0ZXMgPSBbXSxcblx0XHRcdG9Db250ZXh0LFxuXHRcdFx0c01ldGFQYXRoTGluZTogc3RyaW5nLFxuXHRcdFx0c1BhdGhMaW5lO1xuXG5cdFx0Y29uc3Qgc1BhZ2VQYXRoID0gb1BhZ2VDb250ZXh0LmdldFBhdGgoKTtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb1BhZ2VDb250ZXh0ICYmIG9QYWdlQ29udGV4dC5nZXRNb2RlbCgpICYmIG9QYWdlQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IHNNZXRhUGF0aFBhZ2UgPSBvTWV0YU1vZGVsICYmIG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoc1BhZ2VQYXRoKS5yZXBsYWNlKC9eXFwvKi8sIFwiXCIpO1xuXG5cdFx0Ly8gR2V0IHNpbmdsZSBsaW5lIGNvbnRleHQgaWYgbmVjZXNzYXJ5XG5cdFx0aWYgKGFMaW5lQ29udGV4dCAmJiBhTGluZUNvbnRleHQubGVuZ3RoKSB7XG5cdFx0XHRvQ29udGV4dCA9IGFMaW5lQ29udGV4dFswXTtcblx0XHRcdHNQYXRoTGluZSA9IG9Db250ZXh0LmdldFBhdGgoKTtcblx0XHRcdHNNZXRhUGF0aExpbmUgPSBvTWV0YU1vZGVsICYmIG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoc1BhdGhMaW5lKS5yZXBsYWNlKC9eXFwvKi8sIFwiXCIpO1xuXG5cdFx0XHRhTGluZUNvbnRleHQuZm9yRWFjaCgob1NpbmdsZUNvbnRleHQ6IGFueSkgPT4ge1xuXHRcdFx0XHRpZiAoc0NoYXJ0UGF0aCkge1xuXHRcdFx0XHRcdGNvbnN0IG9DaGFydENvbnRleHREYXRhID0gdGhpcy5fZ2V0Q2hhcnRDb250ZXh0RGF0YShvU2luZ2xlQ29udGV4dCwgc0NoYXJ0UGF0aCk7XG5cdFx0XHRcdFx0aWYgKG9DaGFydENvbnRleHREYXRhKSB7XG5cdFx0XHRcdFx0XHRhQXR0cmlidXRlcyA9IG9DaGFydENvbnRleHREYXRhLm1hcChmdW5jdGlvbiAob1N1YkNoYXJ0Q29udGV4dERhdGE6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnRleHREYXRhOiBvU3ViQ2hhcnRDb250ZXh0RGF0YSxcblx0XHRcdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IGAke3NNZXRhUGF0aFBhZ2V9LyR7c0NoYXJ0UGF0aH1gXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YUF0dHJpYnV0ZXMucHVzaCh7XG5cdFx0XHRcdFx0XHRjb250ZXh0RGF0YTogb1NpbmdsZUNvbnRleHQuZ2V0T2JqZWN0KCksXG5cdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IHNNZXRhUGF0aExpbmVcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGFQYWdlQXR0cmlidXRlcy5wdXNoKHtcblx0XHRcdGNvbnRleHREYXRhOiBvUGFnZUNvbnRleHQuZ2V0T2JqZWN0KCksXG5cdFx0XHRlbnRpdHlTZXQ6IHNNZXRhUGF0aFBhZ2Vcblx0XHR9KTtcblx0XHQvLyBBZGRpbmcgUGFnZSBDb250ZXh0IHRvIHNlbGVjdGlvbiB2YXJpYW50XG5cdFx0YVBhZ2VBdHRyaWJ1dGVzID0gQ29tbW9uVXRpbHMucmVtb3ZlU2Vuc2l0aXZlRGF0YShhUGFnZUF0dHJpYnV0ZXMsIG9NZXRhTW9kZWwpO1xuXHRcdGNvbnN0IG9QYWdlTGV2ZWxTViA9IENvbW1vblV0aWxzLmFkZFBhZ2VDb250ZXh0VG9TZWxlY3Rpb25WYXJpYW50KG5ldyBTZWxlY3Rpb25WYXJpYW50KCksIGFQYWdlQXR0cmlidXRlcywgdGhpcy5nZXRWaWV3KCkpO1xuXHRcdGFBdHRyaWJ1dGVzID0gQ29tbW9uVXRpbHMucmVtb3ZlU2Vuc2l0aXZlRGF0YShhQXR0cmlidXRlcywgb01ldGFNb2RlbCk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnQ6IG9QYWdlTGV2ZWxTVixcblx0XHRcdGF0dHJpYnV0ZXM6IGFBdHRyaWJ1dGVzXG5cdFx0fTtcblx0fVxuXG5cdF9nZXRCYXRjaEdyb3Vwc0ZvclZpZXcoKSB7XG5cdFx0Y29uc3Qgb1ZpZXdEYXRhID0gdGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnksXG5cdFx0XHRvQ29uZmlndXJhdGlvbnMgPSBvVmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb24sXG5cdFx0XHRhQ29uZmlndXJhdGlvbnMgPSBvQ29uZmlndXJhdGlvbnMgJiYgT2JqZWN0LmtleXMob0NvbmZpZ3VyYXRpb25zKSxcblx0XHRcdGFCYXRjaEdyb3VwcyA9IFtcIiRhdXRvLkhlcm9lc1wiLCBcIiRhdXRvLkRlY29yYXRpb25cIiwgXCIkYXV0by5Xb3JrZXJzXCJdO1xuXG5cdFx0aWYgKGFDb25maWd1cmF0aW9ucyAmJiBhQ29uZmlndXJhdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0YUNvbmZpZ3VyYXRpb25zLmZvckVhY2goZnVuY3Rpb24gKHNLZXk6IGFueSkge1xuXHRcdFx0XHRjb25zdCBvQ29uZmlndXJhdGlvbiA9IG9Db25maWd1cmF0aW9uc1tzS2V5XTtcblx0XHRcdFx0aWYgKG9Db25maWd1cmF0aW9uLnJlcXVlc3RHcm91cElkID09PSBcIkxvbmdSdW5uZXJzXCIpIHtcblx0XHRcdFx0XHRhQmF0Y2hHcm91cHMucHVzaChcIiRhdXRvLkxvbmdSdW5uZXJzXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGFCYXRjaEdyb3Vwcztcblx0fVxuXG5cdC8qXG5cdCAqIFJlc2V0IEJyZWFkY3J1bWIgbGlua3Ncblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7c2FwLm0uQnJlYWRjcnVtYnN9IFtvU291cmNlXSBwYXJlbnQgY29udHJvbFxuXHQgKiBAZGVzY3JpcHRpb24gVXNlZCB3aGVuIGNvbnRleHQgb2YgdGhlIG9iamVjdCBwYWdlIGNoYW5nZXMuXG5cdCAqICAgICAgICAgICAgICBUaGlzIGV2ZW50IGNhbGxiYWNrIGlzIGF0dGFjaGVkIHRvIG1vZGVsQ29udGV4dENoYW5nZVxuXHQgKiAgICAgICAgICAgICAgZXZlbnQgb2YgdGhlIEJyZWFkY3J1bWIgY29udHJvbCB0byBjYXRjaCBjb250ZXh0IGNoYW5nZS5cblx0ICogICAgICAgICAgICAgIFRoZW4gZWxlbWVudCBiaW5kaW5nIGFuZCBocmVmcyBhcmUgdXBkYXRlZCBmb3IgZWFjaCBsaW5rLlxuXHQgKlxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQGV4cGVyaW1lbnRhbFxuXHQgKi9cblx0YXN5bmMgX3NldEJyZWFkY3J1bWJMaW5rcyhvU291cmNlOiBCcmVhZENydW1icykge1xuXHRcdGNvbnN0IG9Db250ZXh0ID0gb1NvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpLFxuXHRcdFx0b0FwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCksXG5cdFx0XHRhUHJvbWlzZXM6IFByb21pc2U8dm9pZD5bXSA9IFtdLFxuXHRcdFx0YVNraXBQYXJhbWV0ZXJpemVkOiBhbnlbXSA9IFtdLFxuXHRcdFx0c05ld1BhdGggPSBvQ29udGV4dD8uZ2V0UGF0aCgpLFxuXHRcdFx0YVBhdGhQYXJ0cyA9IHNOZXdQYXRoPy5zcGxpdChcIi9cIikgPz8gW10sXG5cdFx0XHRvTWV0YU1vZGVsID0gb0FwcENvbXBvbmVudCAmJiBvQXBwQ29tcG9uZW50LmdldE1ldGFNb2RlbCgpO1xuXHRcdGxldCBzUGF0aCA9IFwiXCI7XG5cdFx0dHJ5IHtcblx0XHRcdGFQYXRoUGFydHMuc2hpZnQoKTtcblx0XHRcdGFQYXRoUGFydHMuc3BsaWNlKC0xLCAxKTtcblx0XHRcdGFQYXRoUGFydHMuZm9yRWFjaChmdW5jdGlvbiAoc1BhdGhQYXJ0OiBhbnkpIHtcblx0XHRcdFx0c1BhdGggKz0gYC8ke3NQYXRoUGFydH1gO1xuXHRcdFx0XHRjb25zdCBvUm9vdFZpZXdDb250cm9sbGVyID0gb0FwcENvbXBvbmVudC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKTtcblx0XHRcdFx0Y29uc3Qgc1BhcmFtZXRlclBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNQYXRoKTtcblx0XHRcdFx0Y29uc3QgYlJlc3VsdENvbnRleHQgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzUGFyYW1ldGVyUGF0aH0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZXN1bHRDb250ZXh0YCk7XG5cdFx0XHRcdGlmIChiUmVzdWx0Q29udGV4dCkge1xuXHRcdFx0XHRcdC8vIFdlIGRvbnQgbmVlZCB0byBjcmVhdGUgYSBicmVhZGNydW1iIGZvciBQYXJhbWV0ZXIgcGF0aFxuXHRcdFx0XHRcdGFTa2lwUGFyYW1ldGVyaXplZC5wdXNoKDEpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhU2tpcFBhcmFtZXRlcml6ZWQucHVzaCgwKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRhUHJvbWlzZXMucHVzaChvUm9vdFZpZXdDb250cm9sbGVyLmdldFRpdGxlSW5mb0Zyb21QYXRoKHNQYXRoKSk7XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IHRpdGxlSGllcmFyY2h5SW5mb3M6IGFueVtdID0gYXdhaXQgUHJvbWlzZS5hbGwoYVByb21pc2VzKTtcblx0XHRcdGxldCBpZHgsIGhpZXJhcmNoeVBvc2l0aW9uLCBvTGluaztcblx0XHRcdGZvciAoY29uc3QgdGl0bGVIaWVyYXJjaHlJbmZvIG9mIHRpdGxlSGllcmFyY2h5SW5mb3MpIHtcblx0XHRcdFx0aGllcmFyY2h5UG9zaXRpb24gPSB0aXRsZUhpZXJhcmNoeUluZm9zLmluZGV4T2YodGl0bGVIaWVyYXJjaHlJbmZvKTtcblx0XHRcdFx0aWR4ID0gaGllcmFyY2h5UG9zaXRpb24gLSBhU2tpcFBhcmFtZXRlcml6ZWRbaGllcmFyY2h5UG9zaXRpb25dO1xuXHRcdFx0XHRvTGluayA9IG9Tb3VyY2UuZ2V0TGlua3MoKVtpZHhdID8gb1NvdXJjZS5nZXRMaW5rcygpW2lkeF0gOiBuZXcgTGluaygpO1xuXHRcdFx0XHQvL3NDdXJyZW50RW50aXR5IGlzIGEgZmFsbGJhY2sgdmFsdWUgaW4gY2FzZSBvZiBlbXB0eSB0aXRsZVxuXHRcdFx0XHRvTGluay5zZXRUZXh0KHRpdGxlSGllcmFyY2h5SW5mby5zdWJ0aXRsZSB8fCB0aXRsZUhpZXJhcmNoeUluZm8udGl0bGUpO1xuXHRcdFx0XHQvL1dlIGFwcGx5IGFuIGFkZGl0aW9uYWwgZW5jb2RlVVJJIGluIGNhc2Ugb2Ygc3BlY2lhbCBjaGFyYWN0ZXJzIChpZSBcIi9cIikgdXNlZCBpbiB0aGUgdXJsIHRocm91Z2ggdGhlIHNlbWFudGljIGtleXNcblx0XHRcdFx0b0xpbmsuc2V0SHJlZihlbmNvZGVVUkkodGl0bGVIaWVyYXJjaHlJbmZvLmludGVudCkpO1xuXHRcdFx0XHRpZiAoIW9Tb3VyY2UuZ2V0TGlua3MoKVtpZHhdKSB7XG5cdFx0XHRcdFx0b1NvdXJjZS5hZGRMaW5rKG9MaW5rKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcblx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHNldHRpbmcgdGhlIGJyZWFkY3J1bWIgbGlua3M6XCIgKyBlcnJvcik7XG5cdFx0fVxuXHR9XG5cblx0X2NoZWNrRGF0YVBvaW50VGl0bGVGb3JFeHRlcm5hbE5hdmlnYXRpb24oKSB7XG5cdFx0Y29uc3Qgb1ZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IG9EYXRhUG9pbnRzID0gQ29tbW9uVXRpbHMuZ2V0SGVhZGVyRmFjZXRJdGVtQ29uZmlnRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uKFxuXHRcdFx0b1ZpZXcuZ2V0Vmlld0RhdGEoKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0XHRcdHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um91dGluZ1NlcnZpY2UoKS5nZXRPdXRib3VuZHMoKVxuXHRcdCk7XG5cdFx0Y29uc3Qgb1NoZWxsU2VydmljZXMgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFNoZWxsU2VydmljZXMoKTtcblx0XHRjb25zdCBvUGFnZUNvbnRleHQgPSBvVmlldyAmJiAob1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJpc0hlYWRlckRQTGlua1Zpc2libGVcIiwge30pO1xuXHRcdGlmIChvUGFnZUNvbnRleHQpIHtcblx0XHRcdG9QYWdlQ29udGV4dFxuXHRcdFx0XHQucmVxdWVzdE9iamVjdCgpXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChvRGF0YTogYW55KSB7XG5cdFx0XHRcdFx0Zm5HZXRMaW5rcyhvRGF0YVBvaW50cywgb0RhdGEpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IHJldHJpZXZlIHRoZSBsaW5rcyBmcm9tIHRoZSBzaGVsbCBzZXJ2aWNlXCIsIG9FcnJvcik7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSBvRXJyb3Jcblx0XHQgKi9cblx0XHRmdW5jdGlvbiBmbk9uRXJyb3Iob0Vycm9yOiBhbnkpIHtcblx0XHRcdExvZy5lcnJvcihvRXJyb3IpO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGZuU2V0TGlua0VuYWJsZW1lbnQoaWQ6IHN0cmluZywgYVN1cHBvcnRlZExpbmtzOiBhbnkpIHtcblx0XHRcdGNvbnN0IHNMaW5rSWQgPSBpZDtcblx0XHRcdC8vIHByb2Nlc3MgdmlhYmxlIGxpbmtzIGZyb20gZ2V0TGlua3MgZm9yIGFsbCBkYXRhcG9pbnRzIGhhdmluZyBvdXRib3VuZFxuXHRcdFx0aWYgKGFTdXBwb3J0ZWRMaW5rcyAmJiBhU3VwcG9ydGVkTGlua3MubGVuZ3RoID09PSAxICYmIGFTdXBwb3J0ZWRMaW5rc1swXS5zdXBwb3J0ZWQpIHtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KGBpc0hlYWRlckRQTGlua1Zpc2libGUvJHtzTGlua0lkfWAsIHRydWUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSBvU3ViRGF0YVBvaW50c1xuXHRcdCAqIEBwYXJhbSBvUGFnZURhdGFcblx0XHQgKi9cblx0XHRmdW5jdGlvbiBmbkdldExpbmtzKG9TdWJEYXRhUG9pbnRzOiBhbnksIG9QYWdlRGF0YTogYW55KSB7XG5cdFx0XHRmb3IgKGNvbnN0IHNJZCBpbiBvU3ViRGF0YVBvaW50cykge1xuXHRcdFx0XHRjb25zdCBvRGF0YVBvaW50ID0gb1N1YkRhdGFQb2ludHNbc0lkXTtcblx0XHRcdFx0Y29uc3Qgb1BhcmFtczogYW55ID0ge307XG5cdFx0XHRcdGNvbnN0IG9MaW5rID0gb1ZpZXcuYnlJZChzSWQpO1xuXHRcdFx0XHRpZiAoIW9MaW5rKSB7XG5cdFx0XHRcdFx0Ly8gZm9yIGRhdGEgcG9pbnRzIGNvbmZpZ3VyZWQgaW4gYXBwIGRlc2NyaXB0b3IgYnV0IG5vdCBhbm5vdGF0ZWQgaW4gdGhlIGhlYWRlclxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IG9MaW5rQ29udGV4dCA9IG9MaW5rLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0XHRcdGNvbnN0IG9MaW5rRGF0YTogYW55ID0gb0xpbmtDb250ZXh0ICYmIG9MaW5rQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0bGV0IG9NaXhlZENvbnRleHQ6IGFueSA9IG1lcmdlKHt9LCBvUGFnZURhdGEsIG9MaW5rRGF0YSk7XG5cdFx0XHRcdC8vIHByb2Nlc3Mgc2VtYW50aWMgb2JqZWN0IG1hcHBpbmdzXG5cdFx0XHRcdGlmIChvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0TWFwcGluZykge1xuXHRcdFx0XHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0TWFwcGluZztcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW0gaW4gYVNlbWFudGljT2JqZWN0TWFwcGluZykge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb01hcHBpbmcgPSBhU2VtYW50aWNPYmplY3RNYXBwaW5nW2l0ZW1dO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc01haW5Qcm9wZXJ0eSA9IG9NYXBwaW5nW1wiTG9jYWxQcm9wZXJ0eVwiXVtcIiRQcm9wZXJ0eVBhdGhcIl07XG5cdFx0XHRcdFx0XHRjb25zdCBzTWFwcGVkUHJvcGVydHkgPSBvTWFwcGluZ1tcIlNlbWFudGljT2JqZWN0UHJvcGVydHlcIl07XG5cdFx0XHRcdFx0XHRpZiAoc01haW5Qcm9wZXJ0eSAhPT0gc01hcHBlZFByb3BlcnR5KSB7XG5cdFx0XHRcdFx0XHRcdGlmIChvTWl4ZWRDb250ZXh0Lmhhc093blByb3BlcnR5KHNNYWluUHJvcGVydHkpKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb05ld01hcHBpbmc6IGFueSA9IHt9O1xuXHRcdFx0XHRcdFx0XHRcdG9OZXdNYXBwaW5nW3NNYXBwZWRQcm9wZXJ0eV0gPSBvTWl4ZWRDb250ZXh0W3NNYWluUHJvcGVydHldO1xuXHRcdFx0XHRcdFx0XHRcdG9NaXhlZENvbnRleHQgPSBtZXJnZSh7fSwgb01peGVkQ29udGV4dCwgb05ld01hcHBpbmcpO1xuXHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSBvTWl4ZWRDb250ZXh0W3NNYWluUHJvcGVydHldO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKG9NaXhlZENvbnRleHQpIHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHNLZXkgaW4gb01peGVkQ29udGV4dCkge1xuXHRcdFx0XHRcdFx0aWYgKHNLZXkuaW5kZXhPZihcIl9cIikgIT09IDAgJiYgc0tleS5pbmRleE9mKFwib2RhdGEuY29udGV4dFwiKSA9PT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0b1BhcmFtc1tzS2V5XSA9IG9NaXhlZENvbnRleHRbc0tleV07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIHZhbGlkYXRlIGlmIGEgbGluayBtdXN0IGJlIHJlbmRlcmVkXG5cdFx0XHRcdG9TaGVsbFNlcnZpY2VzXG5cdFx0XHRcdFx0LmlzTmF2aWdhdGlvblN1cHBvcnRlZChbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhcmdldDoge1xuXHRcdFx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRcdGFjdGlvbjogb0RhdGFQb2ludC5hY3Rpb25cblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0cGFyYW1zOiBvUGFyYW1zXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XSlcblx0XHRcdFx0XHQudGhlbigoYUxpbmtzKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZm5TZXRMaW5rRW5hYmxlbWVudChzSWQsIGFMaW5rcyk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZm5PbkVycm9yKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRoYW5kbGVycyA9IHtcblx0XHQvKipcblx0XHQgKiBJbnZva2VzIHRoZSBwYWdlIHByaW1hcnkgYWN0aW9uIG9uIHByZXNzIG9mIEN0cmwrRW50ZXIuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0gb0NvbnRyb2xsZXIgVGhlIHBhZ2UgY29udHJvbGxlclxuXHRcdCAqIEBwYXJhbSBvVmlld1xuXHRcdCAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IGZvciB3aGljaCB0aGUgYWN0aW9uIGlzIGNhbGxlZFxuXHRcdCAqIEBwYXJhbSBzQWN0aW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uIHRvIGJlIGNhbGxlZFxuXHRcdCAqIEBwYXJhbSBbbVBhcmFtZXRlcnNdIENvbnRhaW5zIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcblx0XHQgKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmNvbnRleHRzXSBNYW5kYXRvcnkgZm9yIGEgYm91bmQgYWN0aW9uLCBlaXRoZXIgb25lIGNvbnRleHQgb3IgYW4gYXJyYXkgd2l0aCBjb250ZXh0cyBmb3Igd2hpY2ggdGhlIGFjdGlvbiBpcyBjYWxsZWRcblx0XHQgKiBAcGFyYW0gW21QYXJhbWV0ZXJzLm1vZGVsXSBNYW5kYXRvcnkgZm9yIGFuIHVuYm91bmQgYWN0aW9uOyBhbiBpbnN0YW5jZSBvZiBhbiBPRGF0YSBWNCBtb2RlbFxuXHRcdCAqIEBwYXJhbSBbbUNvbmRpdGlvbnNdIENvbnRhaW5zIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcblx0XHQgKiBAcGFyYW0gW21Db25kaXRpb25zLnBvc2l0aXZlQWN0aW9uVmlzaWJsZV0gVGhlIHZpc2liaWxpdHkgb2Ygc2VtYXRpYyBwb3NpdGl2ZSBhY3Rpb25cblx0XHQgKiBAcGFyYW0gW21Db25kaXRpb25zLnBvc2l0aXZlQWN0aW9uRW5hYmxlZF0gVGhlIGVuYWJsZW1lbnQgb2Ygc2VtYW50aWMgcG9zaXRpdmUgYWN0aW9uXG5cdFx0ICogQHBhcmFtIFttQ29uZGl0aW9ucy5lZGl0QWN0aW9uVmlzaWJsZV0gVGhlIEVkaXQgYnV0dG9uIHZpc2liaWxpdHlcblx0XHQgKiBAcGFyYW0gW21Db25kaXRpb25zLmVkaXRBY3Rpb25FbmFibGVkXSBUaGUgZW5hYmxlbWVudCBvZiBFZGl0IGJ1dHRvblxuXHRcdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHRcdCAqIEBmaW5hbFxuXHRcdCAqL1xuXHRcdG9uUHJpbWFyeUFjdGlvbihcblx0XHRcdG9Db250cm9sbGVyOiBPYmplY3RQYWdlQ29udHJvbGxlcixcblx0XHRcdG9WaWV3OiBWaWV3LFxuXHRcdFx0b0NvbnRleHQ6IENvbnRleHQsXG5cdFx0XHRzQWN0aW9uTmFtZTogc3RyaW5nLFxuXHRcdFx0bVBhcmFtZXRlcnM6IHVua25vd24sXG5cdFx0XHRtQ29uZGl0aW9uczoge1xuXHRcdFx0XHRwb3NpdGl2ZUFjdGlvblZpc2libGU6IGJvb2xlYW47XG5cdFx0XHRcdHBvc2l0aXZlQWN0aW9uRW5hYmxlZDogYm9vbGVhbjtcblx0XHRcdFx0ZWRpdEFjdGlvblZpc2libGU6IGJvb2xlYW47XG5cdFx0XHRcdGVkaXRBY3Rpb25FbmFibGVkOiBib29sZWFuO1xuXHRcdFx0fVxuXHRcdCkge1xuXHRcdFx0Y29uc3QgaVZpZXdMZXZlbCA9IChvQ29udHJvbGxlci5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLnZpZXdMZXZlbCxcblx0XHRcdFx0b09iamVjdFBhZ2UgPSBvQ29udHJvbGxlci5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRcdGlmIChtQ29uZGl0aW9ucy5wb3NpdGl2ZUFjdGlvblZpc2libGUpIHtcblx0XHRcdFx0aWYgKG1Db25kaXRpb25zLnBvc2l0aXZlQWN0aW9uRW5hYmxlZCkge1xuXHRcdFx0XHRcdG9Db250cm9sbGVyLmhhbmRsZXJzLm9uQ2FsbEFjdGlvbihvVmlldywgc0FjdGlvbk5hbWUsIG1QYXJhbWV0ZXJzKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChtQ29uZGl0aW9ucy5lZGl0QWN0aW9uVmlzaWJsZSAmJiBpVmlld0xldmVsID09PSAxKSB7XG5cdFx0XHRcdGlmIChtQ29uZGl0aW9ucy5lZGl0QWN0aW9uRW5hYmxlZCkge1xuXHRcdFx0XHRcdG9Db250cm9sbGVyLl9lZGl0RG9jdW1lbnQob0NvbnRleHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGlWaWV3TGV2ZWwgPT09IDEgJiYgb09iamVjdFBhZ2UuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpKSB7XG5cdFx0XHRcdG9Db250cm9sbGVyLl9zYXZlRG9jdW1lbnQob0NvbnRleHQpO1xuXHRcdFx0fSBlbHNlIGlmIChvT2JqZWN0UGFnZS5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIikpIHtcblx0XHRcdFx0b0NvbnRyb2xsZXIuX2FwcGx5RG9jdW1lbnQob0NvbnRleHQpO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRvblRhYmxlQ29udGV4dENoYW5nZSh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlciwgb0V2ZW50OiBhbnkpIHtcblx0XHRcdGNvbnN0IG9Tb3VyY2UgPSBvRXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0XHRsZXQgb1RhYmxlOiBhbnk7XG5cdFx0XHR0aGlzLl9maW5kVGFibGVzKCkuc29tZShmdW5jdGlvbiAoX29UYWJsZTogYW55KSB7XG5cdFx0XHRcdGlmIChfb1RhYmxlLmdldFJvd0JpbmRpbmcoKSA9PT0gb1NvdXJjZSkge1xuXHRcdFx0XHRcdG9UYWJsZSA9IF9vVGFibGU7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSk7XG5cblx0XHRcdGNvbnN0IG9DdXJyZW50QWN0aW9uUHJvbWlzZSA9IHRoaXMuX2VkaXRGbG93LmdldEN1cnJlbnRBY3Rpb25Qcm9taXNlKCk7XG5cdFx0XHRpZiAob0N1cnJlbnRBY3Rpb25Qcm9taXNlKSB7XG5cdFx0XHRcdGxldCBhVGFibGVDb250ZXh0czogYW55O1xuXHRcdFx0XHRpZiAob1RhYmxlLmdldFR5cGUoKS5nZXRNZXRhZGF0YSgpLmlzQShcInNhcC51aS5tZGMudGFibGUuR3JpZFRhYmxlVHlwZVwiKSkge1xuXHRcdFx0XHRcdGFUYWJsZUNvbnRleHRzID0gb1NvdXJjZS5nZXRDb250ZXh0cygwKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhVGFibGVDb250ZXh0cyA9IG9Tb3VyY2UuZ2V0Q3VycmVudENvbnRleHRzKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly9pZiBjb250ZXh0cyBhcmUgbm90IGZ1bGx5IGxvYWRlZCB0aGUgZ2V0Y29udGV4dHMgZnVuY3Rpb24gYWJvdmUgd2lsbCB0cmlnZ2VyIGEgbmV3IGNoYW5nZSBldmVudCBjYWxsXG5cdFx0XHRcdGlmICghYVRhYmxlQ29udGV4dHNbMF0pIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0b0N1cnJlbnRBY3Rpb25Qcm9taXNlXG5cdFx0XHRcdFx0LnRoZW4oKG9BY3Rpb25SZXNwb25zZTogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoIW9BY3Rpb25SZXNwb25zZSB8fCBvQWN0aW9uUmVzcG9uc2UuY29udHJvbElkICE9PSBvVGFibGUuc0lkKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGNvbnN0IG9BY3Rpb25EYXRhID0gb0FjdGlvblJlc3BvbnNlLm9EYXRhO1xuXHRcdFx0XHRcdFx0Y29uc3QgYUtleXMgPSBvQWN0aW9uUmVzcG9uc2Uua2V5cztcblx0XHRcdFx0XHRcdGxldCBpTmV3SXRlbXAgPSAtMTtcblx0XHRcdFx0XHRcdGFUYWJsZUNvbnRleHRzLmZpbmQoZnVuY3Rpb24gKG9UYWJsZUNvbnRleHQ6IGFueSwgaTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9UYWJsZURhdGEgPSBvVGFibGVDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBiQ29tcGFyZSA9IGFLZXlzLmV2ZXJ5KGZ1bmN0aW9uIChzS2V5OiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gb1RhYmxlRGF0YVtzS2V5XSA9PT0gb0FjdGlvbkRhdGFbc0tleV07XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRpZiAoYkNvbXBhcmUpIHtcblx0XHRcdFx0XHRcdFx0XHRpTmV3SXRlbXAgPSBpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiBiQ29tcGFyZTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0aWYgKGlOZXdJdGVtcCAhPT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYURpYWxvZ3MgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0T3BlbkRpYWxvZ3MoKTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb0RpYWxvZyA9XG5cdFx0XHRcdFx0XHRcdFx0YURpYWxvZ3MubGVuZ3RoID4gMCA/IGFEaWFsb2dzLmZpbmQoKGRpYWxvZykgPT4gZGlhbG9nLmRhdGEoXCJGdWxsU2NyZWVuRGlhbG9nXCIpICE9PSB0cnVlKSA6IG51bGw7XG5cdFx0XHRcdFx0XHRcdGlmIChvRGlhbG9nKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gYnkgZGVzaWduLCBhIHNhcC5tLmRpYWxvZyBzZXQgdGhlIGZvY3VzIHRvIHRoZSBwcmV2aW91cyBmb2N1c2VkIGVsZW1lbnQgd2hlbiBjbG9zaW5nLlxuXHRcdFx0XHRcdFx0XHRcdC8vIHdlIHNob3VsZCB3YWl0IGZvciB0aGUgZGlhbG9nIHRvIGJlIGNsb3NlIGJlZm9yZSB0byBmb2N1cyBhbm90aGVyIGVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRvRGlhbG9nLmF0dGFjaEV2ZW50T25jZShcImFmdGVyQ2xvc2VcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0b1RhYmxlLmZvY3VzUm93KGlOZXdJdGVtcCwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0b1RhYmxlLmZvY3VzUm93KGlOZXdJdGVtcCwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0dGhpcy5fZWRpdEZsb3cuZGVsZXRlQ3VycmVudEFjdGlvblByb21pc2UoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyOiBhbnkpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihgQW4gZXJyb3Igb2NjdXJzIHdoaWxlIHNjcm9sbGluZyB0byB0aGUgbmV3bHkgY3JlYXRlZCBJdGVtOiAke2Vycn1gKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdC8vIGZpcmUgTW9kZWxDb250ZXh0Q2hhbmdlIG9uIHRoZSBtZXNzYWdlIGJ1dHRvbiB3aGVuZXZlciB0aGUgdGFibGUgY29udGV4dCBjaGFuZ2VzXG5cdFx0XHR0aGlzLm1lc3NhZ2VCdXR0b24uZmlyZU1vZGVsQ29udGV4dENoYW5nZSgpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBJbnZva2VzIGFuIGFjdGlvbiAtIGJvdW5kL3VuYm91bmQgYW5kIHNldHMgdGhlIHBhZ2UgZGlydHkuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0gb1ZpZXdcblx0XHQgKiBAcGFyYW0gc0FjdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGFjdGlvbiB0byBiZSBjYWxsZWRcblx0XHQgKiBAcGFyYW0gW21QYXJhbWV0ZXJzXSBDb250YWlucyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG5cdFx0ICogQHBhcmFtIFttUGFyYW1ldGVycy5jb250ZXh0c10gTWFuZGF0b3J5IGZvciBhIGJvdW5kIGFjdGlvbiwgZWl0aGVyIG9uZSBjb250ZXh0IG9yIGFuIGFycmF5IHdpdGggY29udGV4dHMgZm9yIHdoaWNoIHRoZSBhY3Rpb24gaXMgY2FsbGVkXG5cdFx0ICogQHBhcmFtIFttUGFyYW1ldGVycy5tb2RlbF0gTWFuZGF0b3J5IGZvciBhbiB1bmJvdW5kIGFjdGlvbjsgYW4gaW5zdGFuY2Ugb2YgYW4gT0RhdGEgVjQgbW9kZWxcblx0XHQgKiBAcmV0dXJucyBUaGUgYWN0aW9uIHByb21pc2Vcblx0XHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0XHQgKiBAZmluYWxcblx0XHQgKi9cblx0XHRvbkNhbGxBY3Rpb24ob1ZpZXc6IGFueSwgc0FjdGlvbk5hbWU6IHN0cmluZywgbVBhcmFtZXRlcnM6IGFueSkge1xuXHRcdFx0Y29uc3Qgb0NvbnRyb2xsZXIgPSBvVmlldy5nZXRDb250cm9sbGVyKCk7XG5cdFx0XHRyZXR1cm4gb0NvbnRyb2xsZXIuZWRpdEZsb3dcblx0XHRcdFx0Lmludm9rZUFjdGlvbihzQWN0aW9uTmFtZSwgbVBhcmFtZXRlcnMpXG5cdFx0XHRcdC50aGVuKG9Db250cm9sbGVyLl9zaG93TWVzc2FnZVBvcG92ZXIuYmluZChvQ29udHJvbGxlciwgdW5kZWZpbmVkKSlcblx0XHRcdFx0LmNhdGNoKG9Db250cm9sbGVyLl9zaG93TWVzc2FnZVBvcG92ZXIuYmluZChvQ29udHJvbGxlcikpO1xuXHRcdH0sXG5cdFx0b25EYXRhUG9pbnRUaXRsZVByZXNzZWQob0NvbnRyb2xsZXI6IGFueSwgb1NvdXJjZTogYW55LCBvTWFuaWZlc3RPdXRib3VuZDogYW55LCBzQ29udHJvbENvbmZpZzogYW55LCBzQ29sbGVjdGlvblBhdGg6IGFueSkge1xuXHRcdFx0b01hbmlmZXN0T3V0Ym91bmQgPSB0eXBlb2Ygb01hbmlmZXN0T3V0Ym91bmQgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKG9NYW5pZmVzdE91dGJvdW5kKSA6IG9NYW5pZmVzdE91dGJvdW5kO1xuXHRcdFx0Y29uc3Qgb1RhcmdldEluZm8gPSBvTWFuaWZlc3RPdXRib3VuZFtzQ29udHJvbENvbmZpZ10sXG5cdFx0XHRcdGFTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBDb21tb25VdGlscy5nZXRTZW1hbnRpY09iamVjdE1hcHBpbmcob1RhcmdldEluZm8pLFxuXHRcdFx0XHRvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0ID0gb1NvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpLFxuXHRcdFx0XHRzTWV0YVBhdGggPSBvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0XG5cdFx0XHRcdFx0LmdldE1vZGVsKClcblx0XHRcdFx0XHQuZ2V0TWV0YU1vZGVsKClcblx0XHRcdFx0XHQuZ2V0TWV0YVBhdGgob0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdFx0bGV0IGFOYXZpZ2F0aW9uRGF0YSA9IG9Db250cm9sbGVyLl9nZXRDaGFydENvbnRleHREYXRhKG9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHQsIHNDb2xsZWN0aW9uUGF0aCk7XG5cdFx0XHRsZXQgYWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzO1xuXG5cdFx0XHRhTmF2aWdhdGlvbkRhdGEgPSBhTmF2aWdhdGlvbkRhdGEubWFwKGZ1bmN0aW9uIChvTmF2aWdhdGlvbkRhdGE6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdGRhdGE6IG9OYXZpZ2F0aW9uRGF0YSxcblx0XHRcdFx0XHRtZXRhUGF0aDogc01ldGFQYXRoICsgKHNDb2xsZWN0aW9uUGF0aCA/IGAvJHtzQ29sbGVjdGlvblBhdGh9YCA6IFwiXCIpXG5cdFx0XHRcdH07XG5cdFx0XHR9KTtcblx0XHRcdGlmIChvVGFyZ2V0SW5mbyAmJiBvVGFyZ2V0SW5mby5wYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdGNvbnN0IG9QYXJhbXMgPSBvVGFyZ2V0SW5mby5wYXJhbWV0ZXJzICYmIG9Db250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24uZ2V0T3V0Ym91bmRQYXJhbXMob1RhcmdldEluZm8ucGFyYW1ldGVycyk7XG5cdFx0XHRcdGlmIChPYmplY3Qua2V5cyhvUGFyYW1zKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0YWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzID0gb1BhcmFtcztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKG9UYXJnZXRJbmZvICYmIG9UYXJnZXRJbmZvLnNlbWFudGljT2JqZWN0ICYmIG9UYXJnZXRJbmZvLmFjdGlvbikge1xuXHRcdFx0XHRvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlKG9UYXJnZXRJbmZvLnNlbWFudGljT2JqZWN0LCBvVGFyZ2V0SW5mby5hY3Rpb24sIHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHM6IGFOYXZpZ2F0aW9uRGF0YSxcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdE1hcHBpbmc6IGFTZW1hbnRpY09iamVjdE1hcHBpbmcsXG5cdFx0XHRcdFx0YWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzOiBhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnNcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBUcmlnZ2VycyBhbiBvdXRib3VuZCBuYXZpZ2F0aW9uIHdoZW4gYSB1c2VyIGNob29zZXMgdGhlIGNoZXZyb24uXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0gb0NvbnRyb2xsZXJcblx0XHQgKiBAcGFyYW0gc091dGJvdW5kVGFyZ2V0IE5hbWUgb2YgdGhlIG91dGJvdW5kIHRhcmdldCAobmVlZHMgdG8gYmUgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QpXG5cdFx0ICogQHBhcmFtIG9Db250ZXh0IFRoZSBjb250ZXh0IHRoYXQgY29udGFpbnMgdGhlIGRhdGEgZm9yIHRoZSB0YXJnZXQgYXBwXG5cdFx0ICogQHBhcmFtIHNDcmVhdGVQYXRoIENyZWF0ZSBwYXRoIHdoZW4gdGhlIGNoZXZyb24gaXMgY3JlYXRlZC5cblx0XHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIGlzIHJlc29sdmVkIG9uY2UgdGhlIG5hdmlnYXRpb24gaXMgdHJpZ2dlcmVkICg/Pz8gbWF5YmUgb25seSBvbmNlIGZpbmlzaGVkPylcblx0XHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0XHQgKiBAZmluYWxcblx0XHQgKi9cblx0XHRvbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQob0NvbnRyb2xsZXI6IE9iamVjdFBhZ2VDb250cm9sbGVyLCBzT3V0Ym91bmRUYXJnZXQ6IHN0cmluZywgb0NvbnRleHQ6IGFueSwgc0NyZWF0ZVBhdGg6IHN0cmluZykge1xuXHRcdFx0cmV0dXJuIG9Db250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ub25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kKG9Db250cm9sbGVyLCBzT3V0Ym91bmRUYXJnZXQsIG9Db250ZXh0LCBzQ3JlYXRlUGF0aCk7XG5cdFx0fSxcblxuXHRcdG9uTmF2aWdhdGVDaGFuZ2UodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIsIG9FdmVudDogYW55KSB7XG5cdFx0XHQvL3dpbGwgYmUgY2FsbGVkIGFsd2F5cyB3aGVuIHdlIGNsaWNrIG9uIGEgc2VjdGlvbiB0YWJcblx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdHRoaXMuYlNlY3Rpb25OYXZpZ2F0ZWQgPSB0cnVlO1xuXG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRvT2JqZWN0UGFnZS5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIikgJiZcblx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55KS5zZWN0aW9uTGF5b3V0ID09PSBcIlRhYnNcIiAmJlxuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJlcnJvck5hdmlnYXRpb25TZWN0aW9uRmxhZ1wiKSA9PT0gZmFsc2Vcblx0XHRcdCkge1xuXHRcdFx0XHRjb25zdCBvU3ViU2VjdGlvbiA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJzdWJTZWN0aW9uXCIpO1xuXHRcdFx0XHR0aGlzLl91cGRhdGVGb2N1c0luRWRpdE1vZGUoW29TdWJTZWN0aW9uXSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRvblZhcmlhbnRTZWxlY3RlZDogZnVuY3Rpb24gKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyKSB7XG5cdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0fSxcblx0XHRvblZhcmlhbnRTYXZlZDogZnVuY3Rpb24gKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyKSB7XG5cdFx0XHQvL1RPRE86IFNob3VsZCByZW1vdmUgdGhpcyBzZXRUaW1lT3V0IG9uY2UgVmFyaWFudCBNYW5hZ2VtZW50IHByb3ZpZGVzIGFuIGFwaSB0byBmZXRjaCB0aGUgY3VycmVudCB2YXJpYW50IGtleSBvbiBzYXZlXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0fSwgNTAwKTtcblx0XHR9LFxuXHRcdG5hdmlnYXRlVG9TdWJTZWN0aW9uOiBmdW5jdGlvbiAob0NvbnRyb2xsZXI6IE9iamVjdFBhZ2VDb250cm9sbGVyLCB2RGV0YWlsQ29uZmlnOiBhbnkpIHtcblx0XHRcdGNvbnN0IG9EZXRhaWxDb25maWcgPSB0eXBlb2YgdkRldGFpbENvbmZpZyA9PT0gXCJzdHJpbmdcIiA/IEpTT04ucGFyc2UodkRldGFpbENvbmZpZykgOiB2RGV0YWlsQ29uZmlnO1xuXHRcdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSBvQ29udHJvbGxlci5nZXRWaWV3KCkuYnlJZChcImZlOjpPYmplY3RQYWdlXCIpIGFzIE9iamVjdFBhZ2VMYXlvdXQ7XG5cdFx0XHRsZXQgb1NlY3Rpb247XG5cdFx0XHRsZXQgb1N1YlNlY3Rpb247XG5cdFx0XHRpZiAob0RldGFpbENvbmZpZy5zZWN0aW9uSWQpIHtcblx0XHRcdFx0b1NlY3Rpb24gPSBvQ29udHJvbGxlci5nZXRWaWV3KCkuYnlJZChvRGV0YWlsQ29uZmlnLnNlY3Rpb25JZCkgYXMgT2JqZWN0UGFnZVNlY3Rpb247XG5cdFx0XHRcdG9TdWJTZWN0aW9uID0gKFxuXHRcdFx0XHRcdG9EZXRhaWxDb25maWcuc3ViU2VjdGlvbklkXG5cdFx0XHRcdFx0XHQ/IG9Db250cm9sbGVyLmdldFZpZXcoKS5ieUlkKG9EZXRhaWxDb25maWcuc3ViU2VjdGlvbklkKVxuXHRcdFx0XHRcdFx0OiBvU2VjdGlvbiAmJiBvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpICYmIG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKClbMF1cblx0XHRcdFx0KSBhcyBPYmplY3RQYWdlU3ViU2VjdGlvbjtcblx0XHRcdH0gZWxzZSBpZiAob0RldGFpbENvbmZpZy5zdWJTZWN0aW9uSWQpIHtcblx0XHRcdFx0b1N1YlNlY3Rpb24gPSBvQ29udHJvbGxlci5nZXRWaWV3KCkuYnlJZChvRGV0YWlsQ29uZmlnLnN1YlNlY3Rpb25JZCkgYXMgT2JqZWN0UGFnZVN1YlNlY3Rpb247XG5cdFx0XHRcdG9TZWN0aW9uID0gb1N1YlNlY3Rpb24gJiYgKG9TdWJTZWN0aW9uLmdldFBhcmVudCgpIGFzIE9iamVjdFBhZ2VTZWN0aW9uKTtcblx0XHRcdH1cblx0XHRcdGlmICghb1NlY3Rpb24gfHwgIW9TdWJTZWN0aW9uIHx8ICFvU2VjdGlvbi5nZXRWaXNpYmxlKCkgfHwgIW9TdWJTZWN0aW9uLmdldFZpc2libGUoKSkge1xuXHRcdFx0XHQoKG9Db250cm9sbGVyLmdldFZpZXcoKS5nZXRNb2RlbChcInNhcC5mZS5pMThuXCIpIGFzIFJlc291cmNlTW9kZWwpLmdldFJlc291cmNlQnVuZGxlKCkgYXMgUHJvbWlzZTxSZXNvdXJjZUJ1bmRsZT4pXG5cdFx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKG9SZXNvdXJjZUJ1bmRsZSkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgc1RpdGxlID0gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXG5cdFx0XHRcdFx0XHRcdFwiQ19ST1VUSU5HX05BVklHQVRJT05fRElTQUJMRURfVElUTEVcIixcblx0XHRcdFx0XHRcdFx0b1Jlc291cmNlQnVuZGxlLFxuXHRcdFx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdChvQ29udHJvbGxlci5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLmVudGl0eVNldFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihzVGl0bGUpO1xuXHRcdFx0XHRcdFx0TWVzc2FnZUJveC5lcnJvcihzVGl0bGUpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKGVycm9yKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9PYmplY3RQYWdlLnNjcm9sbFRvU2VjdGlvbihvU3ViU2VjdGlvbi5nZXRJZCgpKTtcblx0XHRcdFx0Ly8gdHJpZ2dlciBpYXBwIHN0YXRlIGNoYW5nZVxuXHRcdFx0XHRvT2JqZWN0UGFnZS5maXJlTmF2aWdhdGUoe1xuXHRcdFx0XHRcdHNlY3Rpb246IG9TZWN0aW9uLFxuXHRcdFx0XHRcdHN1YlNlY3Rpb246IG9TdWJTZWN0aW9uXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0b25DaGFydFNlbGVjdGlvbkNoYW5nZWQ6IGZ1bmN0aW9uIChvRXZlbnQ6IGFueSkge1xuXHRcdFx0Q2hhcnRSdW50aW1lLmZuVXBkYXRlQ2hhcnQob0V2ZW50KTtcblx0XHR9LFxuXHRcdG9uU3RhdGVDaGFuZ2UodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIpIHtcblx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHR9LFxuXHRcdGNsb3NlT1BNZXNzYWdlU3RyaXA6IGZ1bmN0aW9uICh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlcikge1xuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS5oaWRlTWVzc2FnZSgpO1xuXHRcdH1cblx0fTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgT2JqZWN0UGFnZUNvbnRyb2xsZXI7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBa2pCTyxnQkFBZ0JBLElBQWhCLEVBQXNCQyxPQUF0QixFQUErQjtJQUNyQyxJQUFJO01BQ0gsSUFBSUMsTUFBTSxHQUFHRixJQUFJLEVBQWpCO0lBQ0EsQ0FGRCxDQUVFLE9BQU1HLENBQU4sRUFBUztNQUNWLE9BQU9GLE9BQU8sQ0FBQ0UsQ0FBRCxDQUFkO0lBQ0E7O0lBQ0QsSUFBSUQsTUFBTSxJQUFJQSxNQUFNLENBQUNFLElBQXJCLEVBQTJCO01BQzFCLE9B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
|