@sapui5/sap.fe.templates 1.102.4 → 1.102.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/templates/.library +1 -1
- package/src/sap/fe/templates/ListReport/ListReport.view.xml +1 -0
- package/src/sap/fe/templates/ListReport/ListReportController.controller.js +1 -1
- package/src/sap/fe/templates/ListReport/ListReportController.controller.ts +1 -1
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +1 -1
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.ts +1 -1
- package/src/sap/fe/templates/library.js +1 -1
|
@@ -1539,4 +1539,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
1539
1539
|
}), _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);
|
|
1540
1540
|
return ObjectPageController;
|
|
1541
1541
|
}, false);
|
|
1542
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk9iamVjdFBhZ2VDb250cm9sbGVyLmNvbnRyb2xsZXIudHMiXSwibmFtZXMiOlsiT2JqZWN0UGFnZUNvbnRyb2xsZXIiLCJkZWZpbmVVSTVDbGFzcyIsInVzaW5nRXh0ZW5zaW9uIiwiUGxhY2Vob2xkZXIiLCJFZGl0RmxvdyIsIlNoYXJlIiwib3ZlcnJpZGUiLCJTaGFyZU92ZXJyaWRlcyIsIkludGVybmFsRWRpdEZsb3ciLCJFZGl0Rmxvd092ZXJyaWRlcyIsIkludGVybmFsUm91dGluZyIsIkludGVybmFsUm91dGluZ092ZXJyaWRlIiwiUGFnaW5hdG9yIiwiUGFnaW5hdG9yT3ZlcnJpZGUiLCJNZXNzYWdlSGFuZGxlciIsIk1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGUiLCJJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSIsIkludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0TmF2aWdhdGlvbk1vZGUiLCJiSXNTdGlja3lFZGl0TW9kZSIsImdldFZpZXciLCJnZXRDb250cm9sbGVyIiwiZ2V0U3RpY2t5RWRpdE1vZGUiLCJ1bmRlZmluZWQiLCJWaWV3U3RhdGUiLCJWaWV3U3RhdGVPdmVycmlkZXMiLCJQYWdlUmVhZHkiLCJpc0NvbnRleHRFeHBlY3RlZCIsIk1hc3NFZGl0IiwicHVibGljRXh0ZW5zaW9uIiwiZmluYWxFeHRlbnNpb24iLCJleHRlbnNpYmxlIiwiT3ZlcnJpZGVFeGVjdXRpb24iLCJBZnRlciIsImhhbmRsZXJzIiwib25UYWJsZUNvbnRleHRDaGFuZ2UiLCJvRXZlbnQiLCJvU291cmNlIiwiZ2V0U291cmNlIiwib1RhYmxlIiwiX2ZpbmRUYWJsZXMiLCJzb21lIiwiX29UYWJsZSIsImdldFJvd0JpbmRpbmciLCJvQ3VycmVudEFjdGlvblByb21pc2UiLCJfZWRpdEZsb3ciLCJnZXRDdXJyZW50QWN0aW9uUHJvbWlzZSIsImFUYWJsZUNvbnRleHRzIiwiZ2V0VHlwZSIsImdldE1ldGFkYXRhIiwiaXNBIiwiZ2V0Q29udGV4dHMiLCJnZXRDdXJyZW50Q29udGV4dHMiLCJ0aGVuIiwib0FjdGlvblJlc3BvbnNlIiwiY29udHJvbElkIiwic0lkIiwib0FjdGlvbkRhdGEiLCJvRGF0YSIsImFLZXlzIiwia2V5cyIsImlOZXdJdGVtcCIsImZpbmQiLCJvVGFibGVDb250ZXh0IiwiaSIsIm9UYWJsZURhdGEiLCJnZXRPYmplY3QiLCJiQ29tcGFyZSIsImV2ZXJ5Iiwic0tleSIsImFEaWFsb2dzIiwiSW5zdGFuY2VNYW5hZ2VyIiwiZ2V0T3BlbkRpYWxvZ3MiLCJvRGlhbG9nIiwibGVuZ3RoIiwiZGlhbG9nIiwiZGF0YSIsImF0dGFjaEV2ZW50T25jZSIsImZvY3VzUm93IiwiZGVsZXRlQ3VycmVudEFjdGlvblByb21pc2UiLCJjYXRjaCIsImVyciIsIkxvZyIsImVycm9yIiwib01lc3NhZ2VCdXR0b24iLCJieUlkIiwiZmlyZU1vZGVsQ29udGV4dENoYW5nZSIsIm9uQ2FsbEFjdGlvbiIsIm9WaWV3Iiwic0FjdGlvbk5hbWUiLCJtUGFyYW1ldGVycyIsIm9Db250cm9sbGVyIiwidGhhdCIsImVkaXRGbG93IiwiaW52b2tlQWN0aW9uIiwiX3Nob3dNZXNzYWdlUG9wb3ZlciIsImJpbmQiLCJvbkRhdGFQb2ludFRpdGxlUHJlc3NlZCIsIm9NYW5pZmVzdE91dGJvdW5kIiwic0NvbnRyb2xDb25maWciLCJzQ29sbGVjdGlvblBhdGgiLCJKU09OIiwicGFyc2UiLCJvVGFyZ2V0SW5mbyIsImFTZW1hbnRpY09iamVjdE1hcHBpbmciLCJDb21tb25VdGlscyIsImdldFNlbWFudGljT2JqZWN0TWFwcGluZyIsIm9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsInNNZXRhUGF0aCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiZ2V0TWV0YVBhdGgiLCJnZXRQYXRoIiwiYU5hdmlnYXRpb25EYXRhIiwiX2dldENoYXJ0Q29udGV4dERhdGEiLCJhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnMiLCJtYXAiLCJvTmF2aWdhdGlvbkRhdGEiLCJtZXRhUGF0aCIsInBhcmFtZXRlcnMiLCJvUGFyYW1zIiwiX2ludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldE91dGJvdW5kUGFyYW1zIiwiT2JqZWN0Iiwic2VtYW50aWNPYmplY3QiLCJhY3Rpb24iLCJuYXZpZ2F0ZSIsIm5hdmlnYXRpb25Db250ZXh0cyIsInNlbWFudGljT2JqZWN0TWFwcGluZyIsIm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZCIsInNPdXRib3VuZFRhcmdldCIsIm9Db250ZXh0Iiwic0NyZWF0ZVBhdGgiLCJvbk5hdmlnYXRlQ2hhbmdlIiwiZ2V0RXh0ZW5zaW9uQVBJIiwidXBkYXRlQXBwU3RhdGUiLCJiU2VjdGlvbk5hdmlnYXRlZCIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsIm9PYmplY3RQYWdlIiwiX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sIiwiZ2V0UHJvcGVydHkiLCJnZXRWaWV3RGF0YSIsInNlY3Rpb25MYXlvdXQiLCJvU3ViU2VjdGlvbiIsImdldFBhcmFtZXRlciIsIl91cGRhdGVGb2N1c0luRWRpdE1vZGUiLCJvblZhcmlhbnRTZWxlY3RlZCIsIm9uVmFyaWFudFNhdmVkIiwic2V0VGltZW91dCIsIm5hdmlnYXRlVG9TdWJTZWN0aW9uIiwidkRldGFpbENvbmZpZyIsIm9EZXRhaWxDb25maWciLCJvU2VjdGlvbiIsInNlY3Rpb25JZCIsInN1YlNlY3Rpb25JZCIsImdldFN1YlNlY3Rpb25zIiwiZ2V0UGFyZW50IiwiZ2V0VmlzaWJsZSIsImdldFJlc291cmNlQnVuZGxlIiwib1Jlc291cmNlQnVuZGxlIiwic1RpdGxlIiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJlbnRpdHlTZXQiLCJNZXNzYWdlQm94Iiwic2Nyb2xsVG9TZWN0aW9uIiwiZ2V0SWQiLCJmaXJlTmF2aWdhdGUiLCJzZWN0aW9uIiwic3ViU2VjdGlvbiIsIm9uQ2hhcnRTZWxlY3Rpb25DaGFuZ2VkIiwiQ2hhcnRSdW50aW1lIiwiZm5VcGRhdGVDaGFydCIsIm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcyIsIkV4dGVuc2lvbkFQSSIsImV4dGVuc2lvbkFQSSIsIm9uSW5pdCIsInNldFByb3BlcnR5IiwidmlzaWJpbGl0eSIsIml0ZW1zIiwiX2dldEJhdGNoR3JvdXBzRm9yVmlldyIsInVzZU5ld0xhenlMb2FkaW5nIiwiZ2V0RW5hYmxlTGF6eUxvYWRpbmciLCJhdHRhY2hFdmVudCIsIl9oYW5kbGVTdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0Iiwib25FeGl0IiwiZGVzdHJveSIsIm9NZXNzYWdlUG9wb3ZlciIsImlzT3BlbiIsImNsb3NlIiwiaXNLZWVwQWxpdmUiLCJzZXRLZWVwQWxpdmUiLCJfZ2V0VGFibGVCaW5kaW5nIiwib25CZWZvcmVSZW5kZXJpbmciLCJQYWdlQ29udHJvbGxlciIsInByb3RvdHlwZSIsImFwcGx5Iiwib1ZpZXdEYXRhIiwicmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCIsIkNvbW1vbkhlbHBlciIsInNldE1ldGFNb2RlbCIsImdldEFwcENvbXBvbmVudCIsIm9uQWZ0ZXJSZW5kZXJpbmciLCJyZXNwb25zZSIsIm9FcnJvciIsIl9vbkJlZm9yZUJpbmRpbmciLCJhVGFibGVzIiwib0ludGVybmFsTW9kZWwiLCJhQmF0Y2hHcm91cHMiLCJpVmlld0xldmVsIiwidmlld0xldmVsIiwib0Zhc3RDcmVhdGlvblJvdyIsInB1c2giLCJiRHJhZnROYXZpZ2F0aW9uIiwiX2Nsb3NlU2lkZUNvbnRlbnQiLCJvcENvbnRleHQiLCJoYXNQZW5kaW5nQ2hhbmdlcyIsImdldEJpbmRpbmciLCJyZXNldENoYW5nZXMiLCJnZXRDcmVhdGlvblJvdyIsInNldEJpbmRpbmdDb250ZXh0IiwiZm5TY3JvbGxUb1ByZXNlbnRTZWN0aW9uIiwiaXNGaXJzdFJlbmRlcmluZyIsImJQZXJzaXN0T1BTY3JvbGwiLCJzZXRTZWxlY3RlZFNlY3Rpb24iLCJvRGVsZWdhdGVPbkJlZm9yZSIsImFkZEV2ZW50RGVsZWdhdGUiLCJwYWdlUmVhZHkiLCJyZW1vdmVFdmVudERlbGVnYXRlIiwib0JpbmRpbmciLCJsaXN0QmluZGluZyIsIm9QYWdpbmF0b3JDdXJyZW50Q29udGV4dCIsIm9CaW5kaW5nVG9Vc2UiLCJwYWdpbmF0b3IiLCJpbml0aWFsaXplIiwic0NvbnRleHRQYXRoIiwicmVwbGFjZSIsIk9EYXRhTGlzdEJpbmRpbmciLCJvTW9kZWwiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsIl9zZXRMaXN0QmluZGluZ0FzeW5jIiwiZGV0YWNoRXZlbnQiLCJhU2VjdGlvbnMiLCJnZXRTZWN0aW9ucyIsImJVc2VJY29uVGFiQmFyIiwiZ2V0VXNlSWNvblRhYkJhciIsImlTa2lwIiwiYklzSW5FZGl0TW9kZSIsImJFZGl0YWJsZUhlYWRlciIsImVkaXRhYmxlSGVhZGVyQ29udGVudCIsImlTZWN0aW9uIiwiYVN1YlNlY3Rpb25zIiwiaVN1YlNlY3Rpb24iLCJpc1Zpc2liaWxpdHlEeW5hbWljIiwicGxhY2Vob2xkZXIiLCJpc1BsYWNlaG9sZGVyRW5hYmxlZCIsInNob3dQbGFjZWhvbGRlciIsIm9OYXZDb250YWluZXIiLCJvQ29udGFpbmVyIiwiX2dldEZpcnN0Q2xpY2thYmxlRWxlbWVudCIsIm9GaXJzdENsaWNrYWJsZUVsZW1lbnQiLCJhQWN0aW9ucyIsImdldEhlYWRlclRpdGxlIiwiZ2V0QWN0aW9ucyIsIm9BY3Rpb24iLCJnZXRFbmFibGVkIiwiX2dldEZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZEZyb21TdWJTZWN0aW9uIiwiYUJsb2NrcyIsImdldEJsb2NrcyIsImJsb2NrIiwiYUZvcm1Db250YWluZXJzIiwiZ2V0Rm9ybUNvbnRhaW5lcnMiLCJnZXRDb250ZW50IiwiZm9ybUNvbnRhaW5lciIsImFGb3JtRWxlbWVudHMiLCJnZXRGb3JtRWxlbWVudHMiLCJmb3JtRWxlbWVudCIsImFGaWVsZHMiLCJnZXRGaWVsZHMiLCJnZXRSZXF1aXJlZCIsImdldFZhbHVlIiwiZGVidWciLCJvTWFuZGF0b3J5RmllbGQiLCJvRmllbGRUb0ZvY3VzIiwiY29udGVudCIsImdldENvbnRlbnRFZGl0IiwiX2dldEZpcnN0RWRpdGFibGVJbnB1dCIsImZvY3VzIiwiX29uQmFja05hdmlnYXRpb25JbkRyYWZ0IiwiZ2V0Um91dGVyUHJveHkiLCJjaGVja0lmQmFja0hhc1NhbWVDb250ZXh0IiwiaGlzdG9yeSIsImJhY2siLCJkcmFmdCIsInByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uIiwiRnVuY3Rpb24iLCJOYXZpZ2F0aW9uVHlwZSIsIkJhY2tOYXZpZ2F0aW9uIiwiX29uQWZ0ZXJCaW5kaW5nIiwib0JpbmRpbmdDb250ZXh0IiwiX3NpZGVFZmZlY3RzIiwiY2xlYXJQcm9wZXJ0aWVzU3RhdHVzIiwiYUlCTkFjdGlvbnMiLCJmb3JFYWNoIiwiZ2V0SUJOQWN0aW9ucyIsIm9UYWJsZVJvd0JpbmRpbmciLCJNb2RlbEhlbHBlciIsImlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsInJlbW92ZUNhY2hlc0FuZE1lc3NhZ2VzIiwib0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsInBhcnNlQ3VzdG9tRGF0YSIsIkRlbGVnYXRlVXRpbCIsImdldEN1c3RvbURhdGEiLCJhU2VsZWN0ZWRDb250ZXh0cyIsImdldFNlbGVjdGVkQ29udGV4dHMiLCJzZXRBY3Rpb25FbmFibGVtZW50IiwiZ2V0U2VtYW50aWNUYXJnZXRzRnJvbVBhZ2VNb2RlbCIsIm9PYmplY3RQYWdlVGl0bGUiLCJhSUJOSGVhZGVyQWN0aW9ucyIsImNvbmNhdCIsInVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5Iiwib0ZpbmFsVUlTdGF0ZSIsImVuYWJsZUZhc3RDcmVhdGlvblJvdyIsIm9MaXN0QmluZGluZyIsIm9GYXN0Q3JlYXRpb25MaXN0QmluZGluZyIsIm9GYXN0Q3JlYXRpb25Db250ZXh0IiwiYmluZExpc3QiLCJnZXRDb250ZXh0IiwiJCR1cGRhdGVHcm91cElkIiwiJCRncm91cElkIiwicmVmcmVzaEludGVybmFsIiwiY3JlYXRlIiwiY3JlYXRlZCIsInRyYWNlIiwiaGFuZGxlVGFibGVNb2RpZmljYXRpb25zIiwiZm5IYW5kbGVUYWJsZVBhdGNoRXZlbnRzIiwiZm5IYW5kbGVDaGFuZ2UiLCJkZXRhY2hDaGFuZ2UiLCJhdHRhY2hDaGFuZ2UiLCJjb21wdXRlRWRpdE1vZGUiLCJpc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZCIsImNvbm5lY3QiLCJvQ2FjaGUiLCJfdXBkYXRlUmVsYXRlZEFwcHMiLCJmblVwZGF0ZVJlbGF0ZWRBcHBzIiwiZGV0YWNoRGF0YVJlY2VpdmVkIiwiYXR0YWNoRGF0YVJlY2VpdmVkIiwiY3VycmVudEJpbmRpbmciLCJoYW5kbGVQYXRjaFNlbnQiLCJUYWJsZVV0aWxzIiwid2hlbkJvdW5kIiwiX3RyaWdnZXJWaXNpYmxlU3ViU2VjdGlvbnNFdmVudHMiLCJvblBhZ2VSZWFkeSIsInNldEZvY3VzIiwiaXNJbkRpc3BsYXlNb2RlIiwib1NlbGVjdGVkU2VjdGlvbiIsIkNvcmUiLCJnZXRTZWxlY3RlZFNlY3Rpb24iLCJiSXNTdGlja3lNb2RlIiwib0FwcENvbXBvbmVudCIsImdldFNoZWxsU2VydmljZXMiLCJzZXRCYWNrTmF2aWdhdGlvbiIsImdldEFwcFN0YXRlSGFuZGxlciIsImFwcGx5QXBwU3RhdGUiLCJmb3JjZUZvY3VzIiwiRXJyb3IiLCJfY2hlY2tEYXRhUG9pbnRUaXRsZUZvckV4dGVybmFsTmF2aWdhdGlvbiIsIl9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbiIsIm9PYmplY3RQYWdlU3VidGl0bGUiLCJvQ3VzdG9tRGF0YSIsImdldEtleSIsIm9UaXRsZUluZm8iLCJ0aXRsZSIsInN1YnRpdGxlIiwiaW50ZW50IiwiaWNvbiIsIl9leGVjdXRlSGVhZGVyU2hvcnRjdXQiLCJzQnV0dG9uSWQiLCJvQnV0dG9uIiwib0VsZW1lbnQiLCJmaXJlQnV0dG9uUHJlc3MiLCJfZXhlY3V0ZUZvb3RlclNob3J0Y3V0IiwiZ2V0Rm9vdGVyIiwiZ2V0TmFtZSIsIl9leGVjdXRlVGFiU2hvcnRDdXQiLCJvRXhlY3V0aW9uIiwiaVNlY3Rpb25JbmRleE1heCIsInNDb21tYW5kIiwiZ2V0Q29tbWFuZCIsIm5ld1NlY3Rpb24iLCJpU2VsZWN0ZWRTZWN0aW9uSW5kZXgiLCJpbmRleE9mU2VjdGlvbiIsIl9nZXRGb290ZXJWaXNpYmlsaXR5Iiwic1ZpZXdJZCIsInNhcCIsInVpIiwiZ2V0Q29yZSIsImdldE1lc3NhZ2VNYW5hZ2VyIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsIm9NZXNzYWdlIiwidmFsaWRhdGlvbiIsInR5cGUiLCJ0YXJnZXQiLCJpbmRleE9mIiwib1JldCIsInJvb3RWaWV3Q29udHJvbGxlciIsImdldFJvb3RWaWV3Q29udHJvbGxlciIsImN1cnJlbnRQYWdlVmlldyIsImlzRmNsRW5hYmxlZCIsImdldFJpZ2h0bW9zdFZpZXciLCJnZXRSb290Q29udGFpbmVyIiwiZ2V0Q3VycmVudFBhZ2UiLCJvSXRlbUJpbmRpbmciLCJnZXRMZW5ndGgiLCJzZXRWaXNpYmxlIiwib3BlbkJ5IiwiX2VkaXREb2N1bWVudCIsIkJ1c3lMb2NrZXIiLCJsb2NrIiwiZWRpdERvY3VtZW50IiwiZmluYWxseSIsInVubG9jayIsIl9zYXZlRG9jdW1lbnQiLCJhV2FpdENyZWF0ZURvY3VtZW50cyIsImJFeGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yIiwiY3JlYXRpb25Nb2RlIiwiY3JlYXRpb25Sb3ciLCJjcmVhdGVBdEVuZCIsImJDcmVhdGVEb2N1bWVudCIsImJTa2lwU2lkZUVmZmVjdHMiLCJjcmVhdGVEb2N1bWVudCIsIlByb21pc2UiLCJhbGwiLCJhQmluZGluZ3MiLCJiaW5kaW5ncyIsInNhdmVEb2N1bWVudCIsInJlamVjdCIsImlzTG9ja2VkIiwiX21hbmFnZUNvbGxhYm9yYXRpb24iLCJvcGVuTWFuYWdlRGlhbG9nIiwiX3Nob3dDb2xsYWJvcmF0aW9uVXNlckRldGFpbHMiLCJldmVudCIsInNob3dVc2VyRGV0YWlscyIsIl9jYW5jZWxEb2N1bWVudCIsImNhbmNlbEJ1dHRvbiIsImNhbmNlbERvY3VtZW50IiwiX2FwcGx5RG9jdW1lbnQiLCJhcHBseURvY3VtZW50IiwiX3Nob3dTd2l0Y2hEcmFmdEFuZEFjdGl2ZVBvcG92ZXIiLCJ2aWV3Iiwic291cmNlIiwiZnJhZ21lbnROYW1lIiwic3dpdGNoRHJhZnRBbmRBY3RpdmVQb3BPdmVyIiwibG9jYWxUaGlzTW9kZWwiLCJKU09OTW9kZWwiLCJwcmVwcm9jZXNzb3JTZXR0aW5ncyIsImJpbmRpbmdDb250ZXh0cyIsIm1vZGVscyIsInBvcG92ZXJGcmFnbWVudCIsIlhNTFRlbXBsYXRlUHJvY2Vzc29yIiwibG9hZFRlbXBsYXRlIiwicmVzb2x2ZSIsIlhNTFByZXByb2Nlc3NvciIsInByb2Nlc3MiLCJuYW1lIiwiZnJhZ21lbnQiLCJGcmFnbWVudCIsImxvYWQiLCJkZWZpbml0aW9uIiwiY29udHJvbGxlciIsInBvcG92ZXIiLCJhZGREZXBlbmRlbnQiLCJzZXRNb2RlbCIsInNldFBsYWNlbWVudCIsImF0dGFjaEFmdGVyT3BlbiIsImNvbnRleHQiLCJpc0FjdGl2ZUVudGl0eSIsIklzQWN0aXZlRW50aXR5Iiwic3dpdGNoRHJhZnRBbmRBY3RpdmVPcHRpb25zTGlzdCIsImVsZW1lbnQiLCJsaXN0SXRlbVRvRm9jdXMiLCJnZXRJdGVtcyIsIl9zd2l0Y2hEcmFmdEFuZEFjdGl2ZVBvcG92ZXJMaXN0U2VsZWN0Iiwic2VsZWN0ZWRJdGVtS2V5IiwidG9nZ2xlRHJhZnRBY3RpdmUiLCJyZXNvbHZlU3RyaW5ndG9Cb29sZWFuIiwidXBkYXRlUmVsYXRlZEFwcHNEZXRhaWxzIiwiX2ZpbmRUYWJsZUluU3ViU2VjdGlvbiIsImFQYXJlbnRFbGVtZW50IiwiYVN1YnNlY3Rpb24iLCJhU3ViU2VjdGlvblRhYmxlcyIsImdldE1haW5Db250ZW50IiwiZ3JpZFRhYmxlIiwiaGFzU3R5bGVDbGFzcyIsImFkZFN0eWxlQ2xhc3MiLCJ0YWJsZSIsInNldFJvd0NvdW50IiwiX2dldEFsbFN1YlNlY3Rpb25zIiwiX2dldEFsbEJsb2NrcyIsImdldE1vcmVCbG9ja3MiLCJvQmxvY2siLCJvQ29udGVudCIsInNldFNob3dTaWRlQ29udGVudCIsIm9DaGFydENvbnRleHQiLCJzQ2hhcnRQYXRoIiwib0NvbnRleHREYXRhIiwib0NoYXJ0Q29udGV4dERhdGEiLCJfc2Nyb2xsVGFibGVzVG9Sb3ciLCJzUm93UGF0aCIsIlRhYmxlU2Nyb2xsZXIiLCJzY3JvbGxUYWJsZVRvUm93IiwiX21lcmdlTXVsdGlwbGVDb250ZXh0cyIsIm9QYWdlQ29udGV4dCIsImFMaW5lQ29udGV4dCIsImFBdHRyaWJ1dGVzIiwiYVBhZ2VBdHRyaWJ1dGVzIiwic01ldGFQYXRoTGluZSIsInNQYXRoTGluZSIsInNQYWdlUGF0aCIsIm9NZXRhTW9kZWwiLCJzTWV0YVBhdGhQYWdlIiwib1NpbmdsZUNvbnRleHQiLCJjb250ZXh0RGF0YSIsInJlbW92ZVNlbnNpdGl2ZURhdGEiLCJvUGFnZUxldmVsU1YiLCJhZGRQYWdlQ29udGV4dFRvU2VsZWN0aW9uVmFyaWFudCIsIlNlbGVjdGlvblZhcmlhbnQiLCJzZWxlY3Rpb25WYXJpYW50IiwiYXR0cmlidXRlcyIsIm9Db25maWd1cmF0aW9ucyIsImNvbnRyb2xDb25maWd1cmF0aW9uIiwiYUNvbmZpZ3VyYXRpb25zIiwib0NvbmZpZ3VyYXRpb24iLCJyZXF1ZXN0R3JvdXBJZCIsIl9zZXRCcmVhZGNydW1iTGlua3MiLCJzTmV3UGF0aCIsImFQYXRoUGFydHMiLCJzcGxpdCIsInNQYXRoIiwiaVNraXBQYXJhbWV0ZXJpemVkIiwic2hpZnQiLCJzcGxpY2UiLCJzUGF0aFBhcnQiLCJvUm9vdFZpZXdDb250cm9sbGVyIiwic1BhcmFtZXRlclBhdGgiLCJiUmVzdWx0Q29udGV4dCIsInBXYWl0Rm9yVGl0bGVIaWVhcmNoeUluZm8iLCJnZXRUaXRsZUluZm9Gcm9tUGF0aCIsIm9UaXRsZUhpZWFyY2h5SW5mbyIsImlkeCIsIm9MaW5rIiwiZ2V0TGlua3MiLCJMaW5rIiwic2V0VGV4dCIsInNldEhyZWYiLCJhZGRMaW5rIiwib0RhdGFQb2ludHMiLCJnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJnZXRSb3V0aW5nU2VydmljZSIsImdldE91dGJvdW5kcyIsIm9TaGVsbFNlcnZpY2VzIiwicmVxdWVzdE9iamVjdCIsImZuR2V0TGlua3MiLCJmbk9uRXJyb3IiLCJmblNldExpbmtFbmFibGVtZW50IiwiaWQiLCJhU3VwcG9ydGVkTGlua3MiLCJzTGlua0lkIiwic3VwcG9ydGVkIiwib1BhZ2VEYXRhIiwib0RhdGFQb2ludCIsIm9MaW5rQ29udGV4dCIsIm9MaW5rRGF0YSIsIm9NaXhlZENvbnRleHQiLCJtZXJnZSIsIml0ZW0iLCJvTWFwcGluZyIsInNNYWluUHJvcGVydHkiLCJzTWFwcGVkUHJvcGVydHkiLCJoYXNPd25Qcm9wZXJ0eSIsIm9OZXdNYXBwaW5nIiwiaXNOYXZpZ2F0aW9uU3VwcG9ydGVkIiwicGFyYW1zIiwiYUxpbmtzIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUE4RE1BLG9CLFdBRExDLGNBQWMsQ0FBQyxrREFBRCxDLFVBR2JDLGNBQWMsQ0FBQ0MsV0FBRCxDLFVBRWRELGNBQWMsQ0FBQ0UsUUFBRCxDLFVBRWRGLGNBQWMsQ0FBQ0csS0FBSyxDQUFDQyxRQUFOLENBQWVDLGNBQWYsQ0FBRCxDLFVBRWRMLGNBQWMsQ0FBQ00sZ0JBQWdCLENBQUNGLFFBQWpCLENBQTBCRyxpQkFBMUIsQ0FBRCxDLFVBRWRQLGNBQWMsQ0FBQ1EsZUFBZSxDQUFDSixRQUFoQixDQUF5QkssdUJBQXpCLENBQUQsQyxVQUVkVCxjQUFjLENBQUNVLFNBQVMsQ0FBQ04sUUFBVixDQUFtQk8saUJBQW5CLENBQUQsQyxVQUVkWCxjQUFjLENBQUNZLGNBQWMsQ0FBQ1IsUUFBZixDQUF3QlMsc0JBQXhCLENBQUQsQyxVQUVkYixjQUFjLENBQUNjLHFCQUFxQixDQUFDVixRQUF0QixDQUErQlcsNkJBQS9CLENBQUQsQyxXQUVkZixjQUFj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LFdBWkYsRUFhRXhmLEtBYkYsQ0FhUW9lLFNBYlI7QUF0Q29EOztBQUNyRCxhQUFLLElBQU01ZixHQUFYLElBQWtCcWYsV0FBbEIsRUFBK0I7QUFBQSwyQkFBcEJyZixHQUFvQjs7QUFBQSxtQ0FNN0I7QUE2Q0Q7QUFDRDtBQUNELEs7OztJQXJxQ2lDMEksYzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztTQW8zQ3BCbk0sb0IiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgbWVyZ2UgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBCdXN5TG9ja2VyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgeyBjb25uZWN0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NvbGxhYm9yYXRpb24vQWN0aXZpdHlTeW5jXCI7XG5pbXBvcnQgeyBvcGVuTWFuYWdlRGlhbG9nLCBzaG93VXNlckRldGFpbHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvY29sbGFib3JhdGlvbi9NYW5hZ2VcIjtcbmltcG9ydCBFZGl0RmxvdyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvRWRpdEZsb3dcIjtcbmltcG9ydCBkcmFmdCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvZHJhZnRcIjtcbmltcG9ydCBJbnRlbnRCYXNlZE5hdmlnYXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IEludGVybmFsRWRpdEZsb3cgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsRWRpdEZsb3dcIjtcbmltcG9ydCBJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBJbnRlcm5hbFJvdXRpbmcgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsUm91dGluZ1wiO1xuaW1wb3J0IE1hc3NFZGl0IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9NYXNzRWRpdFwiO1xuaW1wb3J0IE1lc3NhZ2VIYW5kbGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IFBhZ2VSZWFkeSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvUGFnZVJlYWR5XCI7XG5pbXBvcnQgUGFnaW5hdG9yIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QYWdpbmF0b3JcIjtcbmltcG9ydCBQbGFjZWhvbGRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvUGxhY2Vob2xkZXJcIjtcbmltcG9ydCBTaGFyZSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvU2hhcmVcIjtcbmltcG9ydCBWaWV3U3RhdGUgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1ZpZXdTdGF0ZVwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIGV4dGVuc2libGUsIGZpbmFsRXh0ZW5zaW9uLCBwdWJsaWNFeHRlbnNpb24sIHVzaW5nRXh0ZW5zaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIsIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IENoYXJ0UnVudGltZSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jaGFydC9DaGFydFJ1bnRpbWVcIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgRGVsZWdhdGVVdGlsIGZyb20gXCJzYXAvZmUvbWFjcm9zL0RlbGVnYXRlVXRpbFwiO1xuaW1wb3J0IFRhYmxlVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVXRpbHNcIjtcbmltcG9ydCBTZWxlY3Rpb25WYXJpYW50IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9TZWxlY3Rpb25WYXJpYW50XCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIEV4dGVuc2lvbkFQSSwgZGVmYXVsdCBhcyBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJIH0gZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9FeHRlbnNpb25BUElcIjtcbmltcG9ydCBSb290Q29udGFpbmVyQmFzZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvUm9vdENvbnRhaW5lci9jb250cm9sbGVyL1Jvb3RDb250YWluZXJCYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IEVkaXRGbG93T3ZlcnJpZGVzIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL1Jvb3RDb250YWluZXIvb3ZlcnJpZGVzL0VkaXRGbG93XCI7XG5pbXBvcnQgVGFibGVTY3JvbGxlciBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9UYWJsZVNjcm9sbGVyXCI7XG5pbXBvcnQgSW5zdGFuY2VNYW5hZ2VyIGZyb20gXCJzYXAvbS9JbnN0YW5jZU1hbmFnZXJcIjtcbmltcG9ydCBMaW5rIGZyb20gXCJzYXAvbS9MaW5rXCI7XG5pbXBvcnQgTWVzc2FnZUJveCBmcm9tIFwic2FwL20vTWVzc2FnZUJveFwiO1xuaW1wb3J0IFBvcG92ZXIgZnJvbSBcInNhcC9tL1BvcG92ZXJcIjtcbmltcG9ydCBTZWxlY3RMaXN0IGZyb20gXCJzYXAvbS9TZWxlY3RMaXN0XCI7XG5pbXBvcnQgRXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IENvcmUgZnJvbSBcInNhcC91aS9jb3JlL0NvcmVcIjtcbmltcG9ydCBGcmFnbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRnJhZ21lbnRcIjtcbmltcG9ydCBJdGVtIGZyb20gXCJzYXAvdWkvY29yZS9JdGVtXCI7XG5pbXBvcnQgT3ZlcnJpZGVFeGVjdXRpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9PdmVycmlkZUV4ZWN1dGlvblwiO1xuaW1wb3J0IFhNTFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9YTUxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCBYTUxUZW1wbGF0ZVByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvWE1MVGVtcGxhdGVQcm9jZXNzb3JcIjtcbmltcG9ydCBCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvQmluZGluZ1wiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9yZXNvdXJjZS9SZXNvdXJjZU1vZGVsXCI7XG5pbXBvcnQgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZSBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZVwiO1xuaW1wb3J0IE9iamVjdFBhZ2VMYXlvdXQgZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VMYXlvdXRcIjtcbmltcG9ydCBPYmplY3RQYWdlU2VjdGlvbiBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZVNlY3Rpb25cIjtcbmltcG9ydCBPYmplY3RQYWdlU3ViU2VjdGlvbiBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZVN1YlNlY3Rpb25cIjtcbmltcG9ydCBJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxSb3V0aW5nT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL0ludGVybmFsUm91dGluZ1wiO1xuaW1wb3J0IE1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgUGFnaW5hdG9yT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL1BhZ2luYXRvclwiO1xuaW1wb3J0IFNoYXJlT3ZlcnJpZGVzIGZyb20gXCIuL292ZXJyaWRlcy9TaGFyZVwiO1xuaW1wb3J0IFZpZXdTdGF0ZU92ZXJyaWRlcyBmcm9tIFwiLi9vdmVycmlkZXMvVmlld1N0YXRlXCI7XG5cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5PYmplY3RQYWdlQ29udHJvbGxlclwiKVxuY2xhc3MgT2JqZWN0UGFnZUNvbnRyb2xsZXIgZXh0ZW5kcyBQYWdlQ29udHJvbGxlciB7XG5cdG9WaWV3ITogYW55O1xuXHRAdXNpbmdFeHRlbnNpb24oUGxhY2Vob2xkZXIpXG5cdHBsYWNlaG9sZGVyITogUGxhY2Vob2xkZXI7XG5cdEB1c2luZ0V4dGVuc2lvbihFZGl0Rmxvdylcblx0ZWRpdEZsb3chOiBFZGl0Rmxvdztcblx0QHVzaW5nRXh0ZW5zaW9uKFNoYXJlLm92ZXJyaWRlKFNoYXJlT3ZlcnJpZGVzKSlcblx0c2hhcmUhOiBTaGFyZTtcblx0QHVzaW5nRXh0ZW5zaW9uKEludGVybmFsRWRpdEZsb3cub3ZlcnJpZGUoRWRpdEZsb3dPdmVycmlkZXMpKVxuXHRfZWRpdEZsb3chOiBJbnRlcm5hbEVkaXRGbG93O1xuXHRAdXNpbmdFeHRlbnNpb24oSW50ZXJuYWxSb3V0aW5nLm92ZXJyaWRlKEludGVybmFsUm91dGluZ092ZXJyaWRlKSlcblx0X3JvdXRpbmchOiBJbnRlcm5hbFJvdXRpbmc7XG5cdEB1c2luZ0V4dGVuc2lvbihQYWdpbmF0b3Iub3ZlcnJpZGUoUGFnaW5hdG9yT3ZlcnJpZGUpKVxuXHRwYWdpbmF0b3IhOiBQYWdpbmF0b3I7XG5cdEB1c2luZ0V4dGVuc2lvbihNZXNzYWdlSGFuZGxlci5vdmVycmlkZShNZXNzYWdlSGFuZGxlck92ZXJyaWRlKSlcblx0bWVzc2FnZUhhbmRsZXIhOiBNZXNzYWdlSGFuZGxlcjtcblx0QHVzaW5nRXh0ZW5zaW9uKEludGVudEJhc2VkTmF2aWdhdGlvbi5vdmVycmlkZShJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSkpXG5cdGludGVudEJhc2VkTmF2aWdhdGlvbiE6IEludGVudEJhc2VkTmF2aWdhdGlvbjtcblx0QHVzaW5nRXh0ZW5zaW9uKFxuXHRcdEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uLm92ZXJyaWRlKHtcblx0XHRcdGdldE5hdmlnYXRpb25Nb2RlOiBmdW5jdGlvbiAodGhpczogSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdFx0Y29uc3QgYklzU3RpY2t5RWRpdE1vZGUgPVxuXHRcdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgT2JqZWN0UGFnZUNvbnRyb2xsZXIpLmdldFN0aWNreUVkaXRNb2RlICYmXG5cdFx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBPYmplY3RQYWdlQ29udHJvbGxlcikuZ2V0U3RpY2t5RWRpdE1vZGUoKTtcblx0XHRcdFx0cmV0dXJuIGJJc1N0aWNreUVkaXRNb2RlID8gXCJleHBsYWNlXCIgOiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fSlcblx0KVxuXHRfaW50ZW50QmFzZWROYXZpZ2F0aW9uITogSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cdEB1c2luZ0V4dGVuc2lvbihWaWV3U3RhdGUub3ZlcnJpZGUoVmlld1N0YXRlT3ZlcnJpZGVzKSlcblx0dmlld1N0YXRlITogVmlld1N0YXRlO1xuXHRAdXNpbmdFeHRlbnNpb24oXG5cdFx0UGFnZVJlYWR5Lm92ZXJyaWRlKHtcblx0XHRcdGlzQ29udGV4dEV4cGVjdGVkOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pXG5cdClcblx0cGFnZVJlYWR5ITogUGFnZVJlYWR5O1xuXHRAdXNpbmdFeHRlbnNpb24oTWFzc0VkaXQpXG5cdG1hc3NFZGl0ITogTWFzc0VkaXQ7XG5cdHByaXZhdGUgbUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzPzogUmVjb3JkPHN0cmluZywgT2JqZWN0UGFnZUV4dGVuc2lvbkFQST47XG5cdHByaXZhdGUgZXh0ZW5zaW9uQVBJPzogT2JqZWN0UGFnZUV4dGVuc2lvbkFQSTtcblx0cHJpdmF0ZSBvUmVzb3VyY2VCdW5kbGU/OiBSZXNvdXJjZUJ1bmRsZTtcblx0cHJpdmF0ZSBiU2VjdGlvbk5hdmlnYXRlZD86IGJvb2xlYW47XG5cdHByaXZhdGUgc3dpdGNoRHJhZnRBbmRBY3RpdmVQb3BPdmVyPzogUG9wb3Zlcjtcblx0cHJpdmF0ZSBjdXJyZW50QmluZGluZz86IEJpbmRpbmc7XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGdldEV4dGVuc2lvbkFQSShzSWQ/OiBzdHJpbmcpOiBFeHRlbnNpb25BUEkge1xuXHRcdGlmIChzSWQpIHtcblx0XHRcdC8vIHRvIGFsbG93IGxvY2FsIElEIHVzYWdlIGZvciBjdXN0b20gcGFnZXMgd2UnbGwgY3JlYXRlL3JldHVybiBvd24gaW5zdGFuY2VzIGZvciBjdXN0b20gc2VjdGlvbnNcblx0XHRcdHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzID0gdGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXMgfHwge307XG5cblx0XHRcdGlmICghdGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXSkge1xuXHRcdFx0XHR0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdID0gbmV3IEV4dGVuc2lvbkFQSSh0aGlzLCBzSWQpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICghdGhpcy5leHRlbnNpb25BUEkpIHtcblx0XHRcdFx0dGhpcy5leHRlbnNpb25BUEkgPSBuZXcgRXh0ZW5zaW9uQVBJKHRoaXMpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMuZXh0ZW5zaW9uQVBJO1xuXHRcdH1cblx0fVxuXG5cdG9uSW5pdCgpIHtcblx0XHRzdXBlci5vbkluaXQoKTtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cblx0XHQvLyBTZXR0aW5nIGRlZmF1bHRzIG9mIGludGVybmFsIG1vZGVsIGNvbnRleHRcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImV4dGVybmFsTmF2aWdhdGlvbkNvbnRleHRcIiwgeyBcInBhZ2VcIjogdHJ1ZSB9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJyZWxhdGVkQXBwc1wiLCB7XG5cdFx0XHR2aXNpYmlsaXR5OiBmYWxzZSxcblx0XHRcdGl0ZW1zOiBudWxsXG5cdFx0fSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiYmF0Y2hHcm91cHNcIiwgdGhpcy5fZ2V0QmF0Y2hHcm91cHNGb3JWaWV3KCkpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImVycm9yTmF2aWdhdGlvblNlY3Rpb25GbGFnXCIsIGZhbHNlKTtcblx0XHRpZiAoISh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkudXNlTmV3TGF6eUxvYWRpbmcgJiYgKG9PYmplY3RQYWdlIGFzIGFueSkuZ2V0RW5hYmxlTGF6eUxvYWRpbmcoKSkge1xuXHRcdFx0Ly9BdHRhY2hpbmcgdGhlIGV2ZW50IHRvIG1ha2UgdGhlIHN1YnNlY3Rpb24gY29udGV4dCBiaW5kaW5nIGFjdGl2ZSB3aGVuIGl0IGlzIHZpc2libGUuXG5cdFx0XHRvT2JqZWN0UGFnZS5hdHRhY2hFdmVudChcInN1YlNlY3Rpb25FbnRlcmVkVmlld1BvcnRcIiwgdGhpcy5faGFuZGxlU3ViU2VjdGlvbkVudGVyZWRWaWV3UG9ydC5iaW5kKHRoaXMpKTtcblx0XHR9XG5cdH1cblxuXHRvbkV4aXQoKSB7XG5cdFx0aWYgKHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHNJZCBvZiBPYmplY3Qua2V5cyh0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcykpIHtcblx0XHRcdFx0dGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXSAmJiB0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdLmRlc3Ryb3koKTtcblx0XHRcdH1cblx0XHRcdGRlbGV0ZSB0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcztcblx0XHR9XG5cdFx0dGhpcy5leHRlbnNpb25BUEkgJiYgdGhpcy5leHRlbnNpb25BUEkuZGVzdHJveSgpO1xuXHRcdGRlbGV0ZSB0aGlzLmV4dGVuc2lvbkFQSTtcblxuXHRcdGNvbnN0IG9NZXNzYWdlQnV0dG9uID0gdGhpcy5nZXRWaWV3KCkuYnlJZChcImZlOjpGb290ZXJCYXI6Ok1lc3NhZ2VCdXR0b25cIiksXG5cdFx0XHRvTWVzc2FnZVBvcG92ZXIgPSBvTWVzc2FnZUJ1dHRvbiA/IChvTWVzc2FnZUJ1dHRvbiBhcyBhbnkpLm9NZXNzYWdlUG9wb3ZlciA6IG51bGw7XG5cdFx0aWYgKG9NZXNzYWdlUG9wb3ZlciAmJiBvTWVzc2FnZVBvcG92ZXIuaXNPcGVuKCkpIHtcblx0XHRcdG9NZXNzYWdlUG9wb3Zlci5jbG9zZSgpO1xuXHRcdH1cblx0XHQvL3doZW4gZXhpdGluZyB3ZSBzZXQga2VlcEFsaXZlIGNvbnRleHQgdG8gZmFsc2Vcblx0XHRjb25zdCBvQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dDtcblx0XHRpZiAob0NvbnRleHQgJiYgb0NvbnRleHQuaXNLZWVwQWxpdmUoKSkge1xuXHRcdFx0b0NvbnRleHQuc2V0S2VlcEFsaXZlKGZhbHNlKTtcblx0XHR9XG5cdH1cblxuXHRfZ2V0VGFibGVCaW5kaW5nKG9UYWJsZTogYW55KSB7XG5cdFx0cmV0dXJuIG9UYWJsZSAmJiBvVGFibGUuZ2V0Um93QmluZGluZygpO1xuXHR9XG5cblx0b25CZWZvcmVSZW5kZXJpbmcoKSB7XG5cdFx0UGFnZUNvbnRyb2xsZXIucHJvdG90eXBlLm9uQmVmb3JlUmVuZGVyaW5nLmFwcGx5KHRoaXMpO1xuXHRcdC8vIEluIHRoZSByZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IHNjZW5hcmlvIHdlIG5lZWQgdG8gZW5zdXJlIGluIGNhc2Ugb2YgcmVsb2FkL3JlZnJlc2ggdGhhdCB0aGUgbWV0YSBtb2RlbCBpbiB0aGUgbWV0aG9kZSByZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IG9mIHRoZSBGaWVsZFJ1bnRpbWUgaXMgYXZhaWxhYmxlXG5cdFx0aWYgKHRoaXMub1ZpZXcub1ZpZXdEYXRhLnJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3QgJiYgQ29tbW9uSGVscGVyLmdldE1ldGFNb2RlbCgpID09PSB1bmRlZmluZWQpIHtcblx0XHRcdENvbW1vbkhlbHBlci5zZXRNZXRhTW9kZWwodGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0fVxuXHR9XG5cblx0b25BZnRlclJlbmRlcmluZygpIHtcblx0XHQoKHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwic2FwLmZlLmkxOG5cIikgYXMgUmVzb3VyY2VNb2RlbCkuZ2V0UmVzb3VyY2VCdW5kbGUoKSBhcyBQcm9taXNlPFJlc291cmNlQnVuZGxlPilcblx0XHRcdC50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XG5cdFx0XHRcdHRoaXMub1Jlc291cmNlQnVuZGxlID0gcmVzcG9uc2U7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZXRyaWV2aW5nIHRoZSByZXNvdXJjZSBidW5kbGVcIiwgb0Vycm9yKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0X29uQmVmb3JlQmluZGluZyhvQ29udGV4dDogYW55LCBtUGFyYW1ldGVyczogYW55KSB7XG5cdFx0Ly8gVE9ETzogd2Ugc2hvdWxkIGNoZWNrIGhvdyB0aGlzIGNvbWVzIHRvZ2V0aGVyIHdpdGggdGhlIHRyYW5zYWN0aW9uIGhlbHBlciwgc2FtZSB0byB0aGUgY2hhbmdlIGluIHRoZSBhZnRlckJpbmRpbmdcblx0XHRjb25zdCBhVGFibGVzID0gdGhpcy5fZmluZFRhYmxlcygpLFxuXHRcdFx0b09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpIGFzIE9iamVjdFBhZ2VMYXlvdXQsXG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0b0ludGVybmFsTW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbCxcblx0XHRcdGFCYXRjaEdyb3VwcyA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImJhdGNoR3JvdXBzXCIpLFxuXHRcdFx0aVZpZXdMZXZlbCA9ICh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkudmlld0xldmVsO1xuXHRcdGxldCBvRmFzdENyZWF0aW9uUm93O1xuXHRcdGFCYXRjaEdyb3Vwcy5wdXNoKFwiJGF1dG9cIik7XG5cdFx0aWYgKG1QYXJhbWV0ZXJzLmJEcmFmdE5hdmlnYXRpb24gIT09IHRydWUpIHtcblx0XHRcdHRoaXMuX2Nsb3NlU2lkZUNvbnRlbnQoKTtcblx0XHR9XG5cdFx0Y29uc3Qgb3BDb250ZXh0ID0gb09iamVjdFBhZ2UuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0O1xuXHRcdGlmIChcblx0XHRcdG9wQ29udGV4dCAmJlxuXHRcdFx0b3BDb250ZXh0Lmhhc1BlbmRpbmdDaGFuZ2VzKCkgJiZcblx0XHRcdCFhQmF0Y2hHcm91cHMuc29tZSgob3BDb250ZXh0LmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuaGFzUGVuZGluZ0NoYW5nZXMuYmluZChvcENvbnRleHQuZ2V0TW9kZWwoKSkpXG5cdFx0KSB7XG5cdFx0XHQvKiBcdEluIGNhc2UgdGhlcmUgYXJlIHBlbmRpbmcgY2hhbmdlcyBmb3IgdGhlIGNyZWF0aW9uIHJvdyBhbmQgbm8gb3RoZXJzIHdlIG5lZWQgdG8gcmVzZXQgdGhlIGNoYW5nZXNcbiAgICBcdFx0XHRcdFx0XHRUT0RPOiB0aGlzIGlzIGp1c3QgYSBxdWljayBzb2x1dGlvbiwgdGhpcyBuZWVkcyB0byBiZSByZXdvcmtlZFxuICAgIFx0XHRcdFx0IFx0Ki9cblxuXHRcdFx0b3BDb250ZXh0LmdldEJpbmRpbmcoKS5yZXNldENoYW5nZXMoKTtcblx0XHR9XG5cblx0XHQvLyBGb3Igbm93IHdlIGhhdmUgdG8gc2V0IHRoZSBiaW5kaW5nIGNvbnRleHQgdG8gbnVsbCBmb3IgZXZlcnkgZmFzdCBjcmVhdGlvbiByb3dcblx0XHQvLyBUT0RPOiBHZXQgcmlkIG9mIHRoaXMgY29kaW5nIG9yIG1vdmUgaXQgdG8gYW5vdGhlciBsYXllciAtIHRvIGJlIGRpc2N1c3NlZCB3aXRoIE1EQyBhbmQgbW9kZWxcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFUYWJsZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdG9GYXN0Q3JlYXRpb25Sb3cgPSBhVGFibGVzW2ldLmdldENyZWF0aW9uUm93KCk7XG5cdFx0XHRpZiAob0Zhc3RDcmVhdGlvblJvdykge1xuXHRcdFx0XHRvRmFzdENyZWF0aW9uUm93LnNldEJpbmRpbmdDb250ZXh0KG51bGwpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFNjcm9sbCB0byBwcmVzZW50IFNlY3Rpb24gc28gdGhhdCBiaW5kaW5ncyBhcmUgZW5hYmxlZCBkdXJpbmcgbmF2aWdhdGlvbiB0aHJvdWdoIHBhZ2luYXRvciBidXR0b25zLCBhcyB0aGVyZSBpcyBubyB2aWV3IHJlcmVuZGVyaW5nL3JlYmluZFxuXHRcdGNvbnN0IGZuU2Nyb2xsVG9QcmVzZW50U2VjdGlvbiA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdGlmICghKG9PYmplY3RQYWdlIGFzIGFueSkuaXNGaXJzdFJlbmRlcmluZygpICYmICFtUGFyYW1ldGVycy5iUGVyc2lzdE9QU2Nyb2xsKSB7XG5cdFx0XHRcdG9PYmplY3RQYWdlLnNldFNlbGVjdGVkU2VjdGlvbihudWxsIGFzIGFueSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRvT2JqZWN0UGFnZS5hdHRhY2hFdmVudE9uY2UoXCJtb2RlbENvbnRleHRDaGFuZ2VcIiwgZm5TY3JvbGxUb1ByZXNlbnRTZWN0aW9uKTtcblxuXHRcdC8vIGlmIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIE9iamVjdFBhZ2VMYXlvdXQgaXMgY2hhbmdlZCB0aGVuIHNjcm9sbCB0byBwcmVzZW50IFNlY3Rpb25cblx0XHQvLyBGSVhNRSBJcyB0aGlzIHJlYWxseSB3b3JraW5nIGFzIGludGVuZGVkID8gSW5pdGlhbGx5IHRoaXMgd2FzIG9uQmVmb3JlUmVuZGVyaW5nLCBidXQgbmV2ZXIgdHJpZ2dlcmVkIG9uQmVmb3JlUmVuZGVyaW5nIGJlY2F1c2UgaXQgd2FzIHJlZ2lzdGVyZWQgYWZ0ZXIgaXRcblx0XHRjb25zdCBvRGVsZWdhdGVPbkJlZm9yZSA9IHtcblx0XHRcdG9uQWZ0ZXJSZW5kZXJpbmc6IGZuU2Nyb2xsVG9QcmVzZW50U2VjdGlvblxuXHRcdH07XG5cdFx0b09iamVjdFBhZ2UuYWRkRXZlbnREZWxlZ2F0ZShvRGVsZWdhdGVPbkJlZm9yZSwgdGhpcyk7XG5cdFx0dGhpcy5wYWdlUmVhZHkuYXR0YWNoRXZlbnRPbmNlKFwicGFnZVJlYWR5XCIsIGZ1bmN0aW9uICgpIHtcblx0XHRcdG9PYmplY3RQYWdlLnJlbW92ZUV2ZW50RGVsZWdhdGUob0RlbGVnYXRlT25CZWZvcmUpO1xuXHRcdH0pO1xuXG5cdFx0Ly9TZXQgdGhlIEJpbmRpbmcgZm9yIFBhZ2luYXRvcnMgdXNpbmcgTGlzdEJpbmRpbmcgSURcblx0XHRpZiAoaVZpZXdMZXZlbCA+IDEpIHtcblx0XHRcdGxldCBvQmluZGluZyA9IG1QYXJhbWV0ZXJzICYmIG1QYXJhbWV0ZXJzLmxpc3RCaW5kaW5nO1xuXHRcdFx0Y29uc3Qgb1BhZ2luYXRvckN1cnJlbnRDb250ZXh0ID0gb0ludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvcGFnaW5hdG9yQ3VycmVudENvbnRleHRcIik7XG5cdFx0XHRpZiAob1BhZ2luYXRvckN1cnJlbnRDb250ZXh0KSB7XG5cdFx0XHRcdGNvbnN0IG9CaW5kaW5nVG9Vc2UgPSBvUGFnaW5hdG9yQ3VycmVudENvbnRleHQuZ2V0QmluZGluZygpO1xuXHRcdFx0XHR0aGlzLnBhZ2luYXRvci5pbml0aWFsaXplKG9CaW5kaW5nVG9Vc2UsIG9QYWdpbmF0b3JDdXJyZW50Q29udGV4dCk7XG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL3BhZ2luYXRvckN1cnJlbnRDb250ZXh0XCIsIG51bGwpO1xuXHRcdFx0fSBlbHNlIGlmIChvQmluZGluZykge1xuXHRcdFx0XHRpZiAob0JpbmRpbmcuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIikpIHtcblx0XHRcdFx0XHR0aGlzLnBhZ2luYXRvci5pbml0aWFsaXplKG9CaW5kaW5nLCBvQ29udGV4dCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly9pZiB0aGUgYmluZGluZyB0eXBlIGlzIG5vdCBPRGF0YUxpc3RCaW5kaW5nIGJlY2F1c2Ugb2YgYSBkZWVwbGluayBuYXZpZ2F0aW9uIG9yIGEgcmVmcmVzaCBvZiB0aGUgcGFnZVxuXHRcdFx0XHRcdC8vIHdlIG5lZWQgdG8gY3JlYXRlIGl0XG5cdFx0XHRcdFx0Y29uc3Qgc0NvbnRleHRQYXRoID0gb0JpbmRpbmcuZ2V0UGF0aCgpLnJlcGxhY2UoL1xcKFteXFwpXSpcXCkqJC8sIFwiXCIpOyAvL3JlbW92aW5nIHRoZSBsYXN0IHR1cGxlXG5cdFx0XHRcdFx0b0JpbmRpbmcgPSBuZXcgKE9EYXRhTGlzdEJpbmRpbmcgYXMgYW55KShvQmluZGluZy5vTW9kZWwsIFwiXCIsIG9CaW5kaW5nLm9Nb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzQ29udGV4dFBhdGgpKTtcblx0XHRcdFx0XHRjb25zdCBfc2V0TGlzdEJpbmRpbmdBc3luYyA9ICgpID0+IHtcblx0XHRcdFx0XHRcdGlmIChvQmluZGluZy5nZXRDb250ZXh0cygpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5wYWdpbmF0b3IuaW5pdGlhbGl6ZShvQmluZGluZywgb0NvbnRleHQpO1xuXHRcdFx0XHRcdFx0XHRvQmluZGluZy5kZXRhY2hFdmVudChcImNoYW5nZVwiLCBfc2V0TGlzdEJpbmRpbmdBc3luYyk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRvQmluZGluZy5nZXRDb250ZXh0cygwKTtcblx0XHRcdFx0XHRvQmluZGluZy5hdHRhY2hFdmVudChcImNoYW5nZVwiLCBfc2V0TGlzdEJpbmRpbmdBc3luYyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKCEodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLnVzZU5ld0xhenlMb2FkaW5nICYmIG9PYmplY3RQYWdlLmdldEVuYWJsZUxhenlMb2FkaW5nKCkpIHtcblx0XHRcdGNvbnN0IGFTZWN0aW9ucyA9IG9PYmplY3RQYWdlLmdldFNlY3Rpb25zKCk7XG5cdFx0XHRjb25zdCBiVXNlSWNvblRhYkJhciA9IG9PYmplY3RQYWdlLmdldFVzZUljb25UYWJCYXIoKTtcblx0XHRcdGxldCBpU2tpcCA9IDI7XG5cdFx0XHRjb25zdCBiSXNJbkVkaXRNb2RlID0gb09iamVjdFBhZ2UuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpO1xuXHRcdFx0Y29uc3QgYkVkaXRhYmxlSGVhZGVyID0gKHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55KS5lZGl0YWJsZUhlYWRlckNvbnRlbnQ7XG5cdFx0XHRmb3IgKGxldCBpU2VjdGlvbiA9IDA7IGlTZWN0aW9uIDwgYVNlY3Rpb25zLmxlbmd0aDsgaVNlY3Rpb24rKykge1xuXHRcdFx0XHRjb25zdCBvU2VjdGlvbiA9IGFTZWN0aW9uc1tpU2VjdGlvbl07XG5cdFx0XHRcdGNvbnN0IGFTdWJTZWN0aW9ucyA9IG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCk7XG5cdFx0XHRcdGZvciAobGV0IGlTdWJTZWN0aW9uID0gMDsgaVN1YlNlY3Rpb24gPCBhU3ViU2VjdGlvbnMubGVuZ3RoOyBpU3ViU2VjdGlvbisrLCBpU2tpcC0tKSB7XG5cdFx0XHRcdFx0Ly8gSW4gSWNvblRhYkJhciBtb2RlIGtlZXAgdGhlIHNlY29uZCBzZWN0aW9uIGJvdW5kIGlmIHRoZXJlIGlzIGFuIGVkaXRhYmxlIGhlYWRlciBhbmQgd2UgYXJlIHN3aXRjaGluZyB0byBkaXNwbGF5IG1vZGVcblx0XHRcdFx0XHRpZiAoaVNraXAgPCAxIHx8IChiVXNlSWNvblRhYkJhciAmJiAoaVNlY3Rpb24gPiAxIHx8IChpU2VjdGlvbiA9PT0gMSAmJiAhYkVkaXRhYmxlSGVhZGVyICYmICFiSXNJbkVkaXRNb2RlKSkpKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvU3ViU2VjdGlvbiA9IGFTdWJTZWN0aW9uc1tpU3ViU2VjdGlvbl07XG5cdFx0XHRcdFx0XHRpZiAob1N1YlNlY3Rpb24uZGF0YSgpLmlzVmlzaWJpbGl0eUR5bmFtaWMgIT09IFwidHJ1ZVwiKSB7XG5cdFx0XHRcdFx0XHRcdG9TdWJTZWN0aW9uLnNldEJpbmRpbmdDb250ZXh0KG51bGwgYXMgYW55KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodGhpcy5wbGFjZWhvbGRlci5pc1BsYWNlaG9sZGVyRW5hYmxlZCgpICYmIG1QYXJhbWV0ZXJzLnNob3dQbGFjZWhvbGRlcikge1xuXHRcdFx0Y29uc3Qgb1ZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRcdGNvbnN0IG9OYXZDb250YWluZXIgPSAob1ZpZXcuZ2V0UGFyZW50KCkgYXMgYW55KS5vQ29udGFpbmVyLmdldFBhcmVudCgpO1xuXHRcdFx0aWYgKG9OYXZDb250YWluZXIpIHtcblx0XHRcdFx0b05hdkNvbnRhaW5lci5zaG93UGxhY2Vob2xkZXIoe30pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF9nZXRGaXJzdENsaWNrYWJsZUVsZW1lbnQob09iamVjdFBhZ2U6IGFueSkge1xuXHRcdGxldCBvRmlyc3RDbGlja2FibGVFbGVtZW50O1xuXHRcdGNvbnN0IGFBY3Rpb25zID0gb09iamVjdFBhZ2UuZ2V0SGVhZGVyVGl0bGUoKSAmJiBvT2JqZWN0UGFnZS5nZXRIZWFkZXJUaXRsZSgpLmdldEFjdGlvbnMoKTtcblx0XHRpZiAoYUFjdGlvbnMgJiYgYUFjdGlvbnMubGVuZ3RoKSB7XG5cdFx0XHRvRmlyc3RDbGlja2FibGVFbGVtZW50ID0gYUFjdGlvbnMuZmluZChmdW5jdGlvbiAob0FjdGlvbjogYW55KSB7XG5cdFx0XHRcdC8vIER1ZSB0byB0aGUgbGVmdCBhbGlnbm1lbnQgb2YgdGhlIERyYWZ0IHN3aXRjaCBhbmQgdGhlIGNvbGxhYm9yYXRpdmUgZHJhZnQgYXZhdGFyIGNvbnRyb2xzXG5cdFx0XHRcdC8vIHRoZXJlIGlzIGEgVG9vbGJhclNwYWNlciBpbiB0aGUgYWN0aW9ucyBhZ2dyZWdhdGlvbiB3aGljaCB3ZSBuZWVkIHRvIGV4Y2x1ZGUgaGVyZSFcblx0XHRcdFx0cmV0dXJuICFvQWN0aW9uLmlzQShcInNhcC5tLlRvb2xiYXJTcGFjZXJcIikgJiYgb0FjdGlvbi5nZXRWaXNpYmxlKCkgJiYgb0FjdGlvbi5nZXRFbmFibGVkKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIG9GaXJzdENsaWNrYWJsZUVsZW1lbnQ7XG5cdH1cblxuXHRfZ2V0Rmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkRnJvbVN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zOiBhbnkpIHtcblx0XHRpZiAoYVN1YlNlY3Rpb25zKSB7XG5cdFx0XHRmb3IgKGxldCBzdWJTZWN0aW9uID0gMDsgc3ViU2VjdGlvbiA8IGFTdWJTZWN0aW9ucy5sZW5ndGg7IHN1YlNlY3Rpb24rKykge1xuXHRcdFx0XHRjb25zdCBhQmxvY2tzID0gYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLmdldEJsb2NrcygpO1xuXG5cdFx0XHRcdGlmIChhQmxvY2tzKSB7XG5cdFx0XHRcdFx0Zm9yIChsZXQgYmxvY2sgPSAwOyBibG9jayA8IGFCbG9ja3MubGVuZ3RoOyBibG9jaysrKSB7XG5cdFx0XHRcdFx0XHRsZXQgYUZvcm1Db250YWluZXJzO1xuXG5cdFx0XHRcdFx0XHRpZiAoYUJsb2Nrc1tibG9ja10uaXNBKFwic2FwLnVpLmxheW91dC5mb3JtLkZvcm1cIikpIHtcblx0XHRcdFx0XHRcdFx0YUZvcm1Db250YWluZXJzID0gYUJsb2Nrc1tibG9ja10uZ2V0Rm9ybUNvbnRhaW5lcnMoKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdFx0XHRcdGFCbG9ja3NbYmxvY2tdLmdldENvbnRlbnQgJiZcblx0XHRcdFx0XHRcdFx0YUJsb2Nrc1tibG9ja10uZ2V0Q29udGVudCgpICYmXG5cdFx0XHRcdFx0XHRcdGFCbG9ja3NbYmxvY2tdLmdldENvbnRlbnQoKS5pc0EoXCJzYXAudWkubGF5b3V0LmZvcm0uRm9ybVwiKVxuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdGFGb3JtQ29udGFpbmVycyA9IGFCbG9ja3NbYmxvY2tdLmdldENvbnRlbnQoKS5nZXRGb3JtQ29udGFpbmVycygpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAoYUZvcm1Db250YWluZXJzKSB7XG5cdFx0XHRcdFx0XHRcdGZvciAobGV0IGZvcm1Db250YWluZXIgPSAwOyBmb3JtQ29udGFpbmVyIDwgYUZvcm1Db250YWluZXJzLmxlbmd0aDsgZm9ybUNvbnRhaW5lcisrKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgYUZvcm1FbGVtZW50cyA9IGFGb3JtQ29udGFpbmVyc1tmb3JtQ29udGFpbmVyXS5nZXRGb3JtRWxlbWVudHMoKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoYUZvcm1FbGVtZW50cykge1xuXHRcdFx0XHRcdFx0XHRcdFx0Zm9yIChsZXQgZm9ybUVsZW1lbnQgPSAwOyBmb3JtRWxlbWVudCA8IGFGb3JtRWxlbWVudHMubGVuZ3RoOyBmb3JtRWxlbWVudCsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGFGaWVsZHMgPSBhRm9ybUVsZW1lbnRzW2Zvcm1FbGVtZW50XS5nZXRGaWVsZHMoKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBUaGUgZmlyc3QgZmllbGQgaXMgbm90IG5lY2Vzc2FyaWx5IGFuIElucHV0QmFzZSAoZS5nLiBjb3VsZCBiZSBhIFRleHQpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFNvIHdlIG5lZWQgdG8gY2hlY2sgd2hldGhlciBpdCBoYXMgYSBnZXRSZXF1aXJlZCBtZXRob2Rcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoYUZpZWxkc1swXS5nZXRSZXF1aXJlZCAmJiBhRmllbGRzWzBdLmdldFJlcXVpcmVkKCkgJiYgIWFGaWVsZHNbMF0uZ2V0VmFsdWUoKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGFGaWVsZHNbMF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdExvZy5kZWJ1ZyhcIkVycm9yIHdoZW4gc2VhcmNoaW5nIGZvciBtYW5kYW90cnkgZW1wdHkgZmllbGQ6IFwiICsgZXJyb3IpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRfdXBkYXRlRm9jdXNJbkVkaXRNb2RlKGFTdWJTZWN0aW9uczogYW55KSB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpIGFzIE9iamVjdFBhZ2VMYXlvdXQ7XG5cblx0XHRjb25zdCBvTWFuZGF0b3J5RmllbGQgPSB0aGlzLl9nZXRGaXJzdEVtcHR5TWFuZGF0b3J5RmllbGRGcm9tU3ViU2VjdGlvbihhU3ViU2VjdGlvbnMpO1xuXHRcdGxldCBvRmllbGRUb0ZvY3VzOiBhbnk7XG5cdFx0aWYgKG9NYW5kYXRvcnlGaWVsZCkge1xuXHRcdFx0b0ZpZWxkVG9Gb2N1cyA9IG9NYW5kYXRvcnlGaWVsZC5jb250ZW50LmdldENvbnRlbnRFZGl0KClbMF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9GaWVsZFRvRm9jdXMgPSAob09iamVjdFBhZ2UgYXMgYW55KS5fZ2V0Rmlyc3RFZGl0YWJsZUlucHV0KCkgfHwgdGhpcy5fZ2V0Rmlyc3RDbGlja2FibGVFbGVtZW50KG9PYmplY3RQYWdlKTtcblx0XHR9XG5cblx0XHRpZiAob0ZpZWxkVG9Gb2N1cykge1xuXHRcdFx0c2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdC8vIFdlIHNldCB0aGUgZm9jdXMgaW4gYSB0aW1lZW91dCwgb3RoZXJ3aXNlIHRoZSBmb2N1cyBzb21ldGltZXMgZ29lcyB0byB0aGUgVGFiQmFyXG5cdFx0XHRcdG9GaWVsZFRvRm9jdXMuZm9jdXMoKTtcblx0XHRcdH0sIDApO1xuXHRcdH1cblx0fVxuXG5cdF9oYW5kbGVTdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0KG9FdmVudDogYW55KSB7XG5cdFx0Y29uc3Qgb1N1YlNlY3Rpb24gPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwic3ViU2VjdGlvblwiKTtcblx0XHRvU3ViU2VjdGlvbi5zZXRCaW5kaW5nQ29udGV4dCh1bmRlZmluZWQpO1xuXHR9XG5cblx0X29uQmFja05hdmlnYXRpb25JbkRyYWZ0KG9Db250ZXh0OiBhbnkpIHtcblx0XHRpZiAodGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb3V0ZXJQcm94eSgpLmNoZWNrSWZCYWNrSGFzU2FtZUNvbnRleHQoKSkge1xuXHRcdFx0Ly8gQmFjayBuYXYgd2lsbCBrZWVwIHRoZSBzYW1lIGNvbnRleHQgLS0+IG5vIG5lZWQgdG8gZGlzcGxheSB0aGUgZGlhbG9nXG5cdFx0XHRoaXN0b3J5LmJhY2soKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZHJhZnQucHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24oXG5cdFx0XHRcdGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRoaXN0b3J5LmJhY2soKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0RnVuY3Rpb24ucHJvdG90eXBlLFxuXHRcdFx0XHRvQ29udGV4dCxcblx0XHRcdFx0dGhpcyxcblx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdGRyYWZ0Lk5hdmlnYXRpb25UeXBlLkJhY2tOYXZpZ2F0aW9uXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0X29uQWZ0ZXJCaW5kaW5nKG9CaW5kaW5nQ29udGV4dDogYW55LCBtUGFyYW1ldGVyczogYW55KSB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpIGFzIE9iamVjdFBhZ2VMYXlvdXQ7XG5cdFx0Y29uc3QgYVRhYmxlcyA9IHRoaXMuX2ZpbmRUYWJsZXMoKTtcblxuXHRcdHRoaXMuX3NpZGVFZmZlY3RzLmNsZWFyUHJvcGVydGllc1N0YXR1cygpO1xuXG5cdFx0Ly8gVE9ETzogdGhpcyBpcyBvbmx5IGEgdGVtcCBzb2x1dGlvbiBhcyBsb25nIGFzIHRoZSBtb2RlbCBmaXggdGhlIGNhY2hlIGlzc3VlIGFuZCB3ZSB1c2UgdGhpcyBhZGRpdGlvbmFsXG5cdFx0Ly8gYmluZGluZyB3aXRoIG93blJlcXVlc3Rcblx0XHRvQmluZGluZ0NvbnRleHQgPSBvT2JqZWN0UGFnZS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXG5cdFx0bGV0IGFJQk5BY3Rpb25zOiBhbnlbXSA9IFtdO1xuXHRcdG9PYmplY3RQYWdlLmdldFNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1NlY3Rpb246IGFueSkge1xuXHRcdFx0b1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvU3ViU2VjdGlvbjogYW55KSB7XG5cdFx0XHRcdGFJQk5BY3Rpb25zID0gQ29tbW9uVXRpbHMuZ2V0SUJOQWN0aW9ucyhvU3ViU2VjdGlvbiwgYUlCTkFjdGlvbnMpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHQvLyBBc3NpZ24gaW50ZXJuYWwgYmluZGluZyBjb250ZXh0cyB0byBvRm9ybUNvbnRhaW5lcjpcblx0XHQvLyAxLiBJdCBpcyBub3QgcG9zc2libGUgdG8gYXNzaWduIHRoZSBpbnRlcm5hbCBiaW5kaW5nIGNvbnRleHQgdG8gdGhlIFhNTCBmcmFnbWVudFxuXHRcdC8vIChGb3JtQ29udGFpbmVyLmZyYWdtZW50LnhtbCkgeWV0IC0gaXQgaXMgdXNlZCBhbHJlYWR5IGZvciB0aGUgZGF0YS1zdHJ1Y3R1cmUuXG5cdFx0Ly8gMi4gQW5vdGhlciBwcm9ibGVtIGlzLCB0aGF0IEZvcm1Db250YWluZXJzIGFzc2lnbmVkIHRvIGEgJ01vcmVCbG9jaycgZG9lcyBub3QgaGF2ZSBhblxuXHRcdC8vIGludGVybmFsIG1vZGVsIGNvbnRleHQgYXQgYWxsLlxuXG5cdFx0YVRhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uIChvVGFibGU6IGFueSkge1xuXHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gb1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJjcmVhdGlvblJvd0ZpZWxkVmFsaWRpdHlcIiwge30pO1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3JlYXRpb25Sb3dDdXN0b21WYWxpZGl0eVwiLCB7fSk7XG5cblx0XHRcdGFJQk5BY3Rpb25zID0gQ29tbW9uVXRpbHMuZ2V0SUJOQWN0aW9ucyhvVGFibGUsIGFJQk5BY3Rpb25zKTtcblx0XHRcdC8vIHRlbXBvcmFyeSB3b3JrYXJvdW5kIGZvciBCQ1A6IDIwODAyMTgwMDRcblx0XHRcdC8vIE5lZWQgdG8gZml4IHdpdGggQkxJOiBGSU9SSVRFQ0hQMS0xNTI3NFxuXHRcdFx0Ly8gb25seSBmb3IgZWRpdCBtb2RlLCB3ZSBjbGVhciB0aGUgdGFibGUgY2FjaGVcblx0XHRcdC8vIFdvcmthcm91bmQgc3RhcnRzIGhlcmUhIVxuXHRcdFx0Y29uc3Qgb1RhYmxlUm93QmluZGluZyA9IG9UYWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdFx0XHRpZiAob1RhYmxlUm93QmluZGluZykge1xuXHRcdFx0XHRpZiAoTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKG9UYWJsZVJvd0JpbmRpbmcuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSkpIHtcblx0XHRcdFx0XHQvLyBhcHBseSBmb3IgYm90aCBlZGl0IGFuZCBkaXNwbGF5IG1vZGUgaW4gc3RpY2t5XG5cdFx0XHRcdFx0b1RhYmxlUm93QmluZGluZy5yZW1vdmVDYWNoZXNBbmRNZXNzYWdlcyhcIlwiKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly8gV29ya2Fyb3VuZCBlbmRzIGhlcmUhIVxuXG5cdFx0XHQvLyBVcGRhdGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIERhdGFGaWVsZEZvckFjdGlvbiBidXR0b25zIG9uIHRhYmxlIHRvb2xiYXJcblx0XHRcdC8vIFRoZSBzYW1lIGlzIGFsc28gcGVyZm9ybWVkIG9uIFRhYmxlIHNlbGVjdGlvbkNoYW5nZSBldmVudFxuXHRcdFx0Y29uc3Qgb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IEpTT04ucGFyc2UoXG5cdFx0XHRcdFx0Q29tbW9uSGVscGVyLnBhcnNlQ3VzdG9tRGF0YShEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YShvVGFibGUsIFwib3BlcmF0aW9uQXZhaWxhYmxlTWFwXCIpKSBhcyBhbnlcblx0XHRcdFx0KSxcblx0XHRcdFx0YVNlbGVjdGVkQ29udGV4dHMgPSBvVGFibGUuZ2V0U2VsZWN0ZWRDb250ZXh0cygpO1xuXG5cdFx0XHRDb21tb25VdGlscy5zZXRBY3Rpb25FbmFibGVtZW50KG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCwgYVNlbGVjdGVkQ29udGV4dHMpO1xuXHRcdH0pO1xuXHRcdENvbW1vblV0aWxzLmdldFNlbWFudGljVGFyZ2V0c0Zyb21QYWdlTW9kZWwodGhpcywgXCJfcGFnZU1vZGVsXCIpO1xuXHRcdC8vUmV0cmlldmUgT2JqZWN0IFBhZ2UgaGVhZGVyIGFjdGlvbnMgZnJvbSBPYmplY3QgUGFnZSB0aXRsZSBjb250cm9sXG5cdFx0Y29uc3Qgb09iamVjdFBhZ2VUaXRsZSA9IG9PYmplY3RQYWdlLmdldEhlYWRlclRpdGxlKCk7XG5cdFx0bGV0IGFJQk5IZWFkZXJBY3Rpb25zOiBhbnlbXSA9IFtdO1xuXHRcdGFJQk5IZWFkZXJBY3Rpb25zID0gQ29tbW9uVXRpbHMuZ2V0SUJOQWN0aW9ucyhvT2JqZWN0UGFnZVRpdGxlLCBhSUJOSGVhZGVyQWN0aW9ucyk7XG5cdFx0YUlCTkFjdGlvbnMgPSBhSUJOQWN0aW9ucy5jb25jYXQoYUlCTkhlYWRlckFjdGlvbnMpO1xuXHRcdENvbW1vblV0aWxzLnVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5KGFJQk5BY3Rpb25zLCB0aGlzLmdldFZpZXcoKSk7XG5cblx0XHRsZXQgb01vZGVsOiBhbnksIG9GaW5hbFVJU3RhdGU6IGFueTtcblxuXHRcdC8vIFRPRE86IHRoaXMgc2hvdWxkIGJlIG1vdmVkIGludG8gYW4gaW5pdCBldmVudCBvZiB0aGUgTURDIHRhYmxlcyAobm90IHlldCBleGlzdGluZykgYW5kIHNob3VsZCBiZSBwYXJ0XG5cdFx0Ly8gb2YgYW55IGNvbnRyb2xsZXIgZXh0ZW5zaW9uXG5cdFx0LyoqXG5cdFx0ICogQHBhcmFtIG9UYWJsZVxuXHRcdCAqIEBwYXJhbSBvTGlzdEJpbmRpbmdcblx0XHQgKi9cblx0XHRmdW5jdGlvbiBlbmFibGVGYXN0Q3JlYXRpb25Sb3cob1RhYmxlOiBhbnksIG9MaXN0QmluZGluZzogYW55KSB7XG5cdFx0XHRjb25zdCBvRmFzdENyZWF0aW9uUm93ID0gb1RhYmxlLmdldENyZWF0aW9uUm93KCk7XG5cdFx0XHRsZXQgb0Zhc3RDcmVhdGlvbkxpc3RCaW5kaW5nLCBvRmFzdENyZWF0aW9uQ29udGV4dDtcblxuXHRcdFx0aWYgKG9GYXN0Q3JlYXRpb25Sb3cpIHtcblx0XHRcdFx0b0ZpbmFsVUlTdGF0ZVxuXHRcdFx0XHRcdC50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdGlmIChvRmFzdENyZWF0aW9uUm93LmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKSkge1xuXHRcdFx0XHRcdFx0XHRvRmFzdENyZWF0aW9uTGlzdEJpbmRpbmcgPSBvTW9kZWwuYmluZExpc3Qob0xpc3RCaW5kaW5nLmdldFBhdGgoKSwgb0xpc3RCaW5kaW5nLmdldENvbnRleHQoKSwgW10sIFtdLCB7XG5cdFx0XHRcdFx0XHRcdFx0JCR1cGRhdGVHcm91cElkOiBcImRvTm90U3VibWl0XCIsXG5cdFx0XHRcdFx0XHRcdFx0JCRncm91cElkOiBcImRvTm90U3VibWl0XCJcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdC8vIFdvcmthcm91bmQgc3VnZ2VzdGVkIGJ5IE9EYXRhIG1vZGVsIHY0IGNvbGxlYWd1ZXNcblx0XHRcdFx0XHRcdFx0b0Zhc3RDcmVhdGlvbkxpc3RCaW5kaW5nLnJlZnJlc2hJbnRlcm5hbCA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHQvKiBkbyBub3RoaW5nICovXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdC8qXG4gICAgXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b0Zhc3RDcmVhdGlvbkxpc3RCaW5kaW5nLmhhc1BlbmRpbmdDaGFuZ2VzID0gZnVuY3Rpb24oKSB7XG4gICAgXHRcdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcbiAgICBcdFx0XHRcdFx0XHRcdH07XG4gICAgXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ki9cblxuXHRcdFx0XHRcdFx0XHRvRmFzdENyZWF0aW9uQ29udGV4dCA9IG9GYXN0Q3JlYXRpb25MaXN0QmluZGluZy5jcmVhdGUoKTtcblx0XHRcdFx0XHRcdFx0b0Zhc3RDcmVhdGlvblJvdy5zZXRCaW5kaW5nQ29udGV4dChvRmFzdENyZWF0aW9uQ29udGV4dCk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gdGhpcyBpcyBuZWVkZWQgdG8gYXZvaWQgY29uc29sZSBlcnJvclxuXHRcdFx0XHRcdFx0XHRvRmFzdENyZWF0aW9uQ29udGV4dC5jcmVhdGVkKCkuY2F0Y2goZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdExvZy50cmFjZShcInRyYW5zaWVudCBmYXN0IGNyZWF0aW9uIGNvbnRleHQgZGVsZXRlZFwiKTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBjb21wdXRpbmcgdGhlIGZpbmFsIFVJIHN0YXRlXCIsIG9FcnJvcik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gdGhpcyBzaG91bGQgbm90IGJlIG5lZWRlZCBhdCB0aGUgYWxsXG5cdFx0LyoqXG5cdFx0ICogQHBhcmFtIG9UYWJsZVxuXHRcdCAqL1xuXHRcdGNvbnN0IGhhbmRsZVRhYmxlTW9kaWZpY2F0aW9ucyA9IChvVGFibGU6IGFueSkgPT4ge1xuXHRcdFx0Y29uc3Qgb0JpbmRpbmcgPSB0aGlzLl9nZXRUYWJsZUJpbmRpbmcob1RhYmxlKSxcblx0XHRcdFx0Zm5IYW5kbGVUYWJsZVBhdGNoRXZlbnRzID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdGVuYWJsZUZhc3RDcmVhdGlvblJvdyhvVGFibGUsIG9CaW5kaW5nKTtcblx0XHRcdFx0fTtcblxuXHRcdFx0aWYgKCFvQmluZGluZykge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFeHBlY3RlZCBiaW5kaW5nIG1pc3NpbmcgZm9yIHRhYmxlOiBcIiArIG9UYWJsZS5nZXRJZCgpKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAob0JpbmRpbmcub0NvbnRleHQpIHtcblx0XHRcdFx0Zm5IYW5kbGVUYWJsZVBhdGNoRXZlbnRzKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBmbkhhbmRsZUNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRpZiAob0JpbmRpbmcub0NvbnRleHQpIHtcblx0XHRcdFx0XHRcdGZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cygpO1xuXHRcdFx0XHRcdFx0b0JpbmRpbmcuZGV0YWNoQ2hhbmdlKGZuSGFuZGxlQ2hhbmdlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHRcdG9CaW5kaW5nLmF0dGFjaENoYW5nZShmbkhhbmRsZUNoYW5nZSk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGlmIChvQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdG9Nb2RlbCA9IG9CaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpO1xuXG5cdFx0XHQvLyBDb21wdXRlIEVkaXQgTW9kZVxuXHRcdFx0b0ZpbmFsVUlTdGF0ZSA9IHRoaXMuX2VkaXRGbG93LmNvbXB1dGVFZGl0TW9kZShvQmluZGluZ0NvbnRleHQpO1xuXG5cdFx0XHRpZiAoTW9kZWxIZWxwZXIuaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQob01vZGVsLmdldE1ldGFNb2RlbCgpKSkge1xuXHRcdFx0XHRvRmluYWxVSVN0YXRlXG5cdFx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKSkge1xuXHRcdFx0XHRcdFx0XHRjb25uZWN0KHRoaXMuZ2V0VmlldygpKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBmaW5hbCBVSSBTdGF0ZVwiLCBvRXJyb3IpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyB1cGRhdGUgcmVsYXRlZCBhcHBzIG9uY2UgRGF0YSBpcyByZWNlaXZlZCBpbiBjYXNlIG9mIGJpbmRpbmcgY2FjaGUgaXMgbm90IGF2YWlsYWJsZVxuXHRcdFx0Ly8gVE9ETzogdGhpcyBpcyBvbmx5IGEgdGVtcCBzb2x1dGlvbiBzaW5jZSB3ZSBuZWVkIHRvIGNhbGwgX3VwZGF0ZVJlbGF0ZWRBcHBzIG1ldGhvZCBvbmx5IGFmdGVyIGRhdGEgZm9yIE9iamVjdCBQYWdlIGlzIHJlY2VpdmVkIChpZiB0aGVyZSBpcyBubyBiaW5kaW5nKVxuXHRcdFx0aWYgKG9CaW5kaW5nQ29udGV4dC5nZXRCaW5kaW5nKCkub0NhY2hlKSB7XG5cdFx0XHRcdHRoaXMuX3VwZGF0ZVJlbGF0ZWRBcHBzKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBmblVwZGF0ZVJlbGF0ZWRBcHBzID0gKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuX3VwZGF0ZVJlbGF0ZWRBcHBzKCk7XG5cdFx0XHRcdFx0b0JpbmRpbmdDb250ZXh0LmdldEJpbmRpbmcoKS5kZXRhY2hEYXRhUmVjZWl2ZWQoZm5VcGRhdGVSZWxhdGVkQXBwcyk7XG5cdFx0XHRcdH07XG5cdFx0XHRcdG9CaW5kaW5nQ29udGV4dC5nZXRCaW5kaW5nKCkuYXR0YWNoRGF0YVJlY2VpdmVkKGZuVXBkYXRlUmVsYXRlZEFwcHMpO1xuXHRcdFx0fVxuXG5cdFx0XHQvL0F0dGFjaCB0aGUgcGF0Y2ggc2VudCBhbmQgcGF0Y2ggY29tcGxldGVkIGV2ZW50IHRvIHRoZSBvYmplY3QgcGFnZSBiaW5kaW5nIHNvIHRoYXQgd2UgY2FuIHJlYWN0XG5cdFx0XHRjb25zdCBvQmluZGluZyA9IChvQmluZGluZ0NvbnRleHQuZ2V0QmluZGluZyAmJiBvQmluZGluZ0NvbnRleHQuZ2V0QmluZGluZygpKSB8fCBvQmluZGluZ0NvbnRleHQ7XG5cblx0XHRcdC8vIEF0dGFjaCB0aGUgZXZlbnQgaGFuZGxlciBvbmx5IG9uY2UgdG8gdGhlIHNhbWUgYmluZGluZ1xuXHRcdFx0aWYgKHRoaXMuY3VycmVudEJpbmRpbmcgIT09IG9CaW5kaW5nKSB7XG5cdFx0XHRcdG9CaW5kaW5nLmF0dGFjaEV2ZW50KFwicGF0Y2hTZW50XCIsIHRoaXMuZWRpdEZsb3cuaGFuZGxlUGF0Y2hTZW50LCB0aGlzKTtcblx0XHRcdFx0dGhpcy5jdXJyZW50QmluZGluZyA9IG9CaW5kaW5nO1xuXHRcdFx0fVxuXG5cdFx0XHRhVGFibGVzLmZvckVhY2goZnVuY3Rpb24gKG9UYWJsZTogYW55KSB7XG5cdFx0XHRcdC8vIGFjY2VzcyBiaW5kaW5nIG9ubHkgYWZ0ZXIgdGFibGUgaXMgYm91bmRcblx0XHRcdFx0VGFibGVVdGlscy53aGVuQm91bmQob1RhYmxlKVxuXHRcdFx0XHRcdC50aGVuKGhhbmRsZVRhYmxlTW9kaWZpY2F0aW9ucylcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSB3YWl0aW5nIGZvciB0aGUgdGFibGUgdG8gYmUgYm91bmRcIiwgb0Vycm9yKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHRpZiAoISh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkudXNlTmV3TGF6eUxvYWRpbmcpIHtcblx0XHRcdFx0Ly8gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIGJpbmRpbmcgaXMgcmVhZHkgaGVuY2UgY2FsbGluZyBpdCBpbiBvbkFmdGVyQmluZGluZ1xuXHRcdFx0XHQob09iamVjdFBhZ2UgYXMgYW55KS5fdHJpZ2dlclZpc2libGVTdWJTZWN0aW9uc0V2ZW50cygpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0b25QYWdlUmVhZHkobVBhcmFtZXRlcnM6IGFueSkge1xuXHRcdGNvbnN0IHNldEZvY3VzID0gKCkgPT4ge1xuXHRcdFx0Ly8gU2V0IHRoZSBmb2N1cyB0byB0aGUgZmlyc3QgYWN0aW9uIGJ1dHRvbiwgb3IgdG8gdGhlIGZpcnN0IGVkaXRhYmxlIGlucHV0IGlmIGluIGVkaXRhYmxlIG1vZGVcblx0XHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRcdGNvbnN0IGlzSW5EaXNwbGF5TW9kZSA9ICFvT2JqZWN0UGFnZS5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIik7XG5cblx0XHRcdGlmIChpc0luRGlzcGxheU1vZGUpIHtcblx0XHRcdFx0Y29uc3Qgb0ZpcnN0Q2xpY2thYmxlRWxlbWVudCA9IHRoaXMuX2dldEZpcnN0Q2xpY2thYmxlRWxlbWVudChvT2JqZWN0UGFnZSk7XG5cdFx0XHRcdGlmIChvRmlyc3RDbGlja2FibGVFbGVtZW50KSB7XG5cdFx0XHRcdFx0b0ZpcnN0Q2xpY2thYmxlRWxlbWVudC5mb2N1cygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBvU2VsZWN0ZWRTZWN0aW9uOiBhbnkgPSBDb3JlLmJ5SWQob09iamVjdFBhZ2UuZ2V0U2VsZWN0ZWRTZWN0aW9uKCkpO1xuXHRcdFx0XHR0aGlzLl91cGRhdGVGb2N1c0luRWRpdE1vZGUob1NlbGVjdGVkU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpKTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdC8vIEFwcGx5IGFwcCBzdGF0ZSBvbmx5IGFmdGVyIHRoZSBwYWdlIGlzIHJlYWR5IHdpdGggdGhlIGZpcnN0IHNlY3Rpb24gc2VsZWN0ZWRcblx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHQvL1Nob3cgcG9wdXAgd2hpbGUgbmF2aWdhdGluZyBiYWNrIGZyb20gb2JqZWN0IHBhZ2UgaW4gY2FzZSBvZiBkcmFmdFxuXHRcdGlmIChvQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdGNvbnN0IGJJc1N0aWNreU1vZGUgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQoKG9CaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldE1ldGFNb2RlbCgpKTtcblx0XHRcdGlmICghYklzU3RpY2t5TW9kZSkge1xuXHRcdFx0XHRjb25zdCBvQXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KG9WaWV3KTtcblx0XHRcdFx0b0FwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCkuc2V0QmFja05hdmlnYXRpb24oKCkgPT4gdGhpcy5fb25CYWNrTmF2aWdhdGlvbkluRHJhZnQob0JpbmRpbmdDb250ZXh0KSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMuZ2V0QXBwQ29tcG9uZW50KClcblx0XHRcdC5nZXRBcHBTdGF0ZUhhbmRsZXIoKVxuXHRcdFx0LmFwcGx5QXBwU3RhdGUoKVxuXHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRpZiAobVBhcmFtZXRlcnMuZm9yY2VGb2N1cykge1xuXHRcdFx0XHRcdHNldEZvY3VzKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKEVycm9yKSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHNldHRpbmcgdGhlIGZvY3VzXCIsIEVycm9yKTtcblx0XHRcdH0pO1xuXG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZXJyb3JOYXZpZ2F0aW9uU2VjdGlvbkZsYWdcIiwgZmFsc2UpO1xuXHRcdHRoaXMuX2NoZWNrRGF0YVBvaW50VGl0bGVGb3JFeHRlcm5hbE5hdmlnYXRpb24oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHN0YXR1cyBvZiBlZGl0IG1vZGUgZm9yIHN0aWNreSBzZXNzaW9uLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVGhlIHN0YXR1cyBvZiBlZGl0IG1vZGUgZm9yIHN0aWNreSBzZXNzaW9uXG5cdCAqXG5cdCAqXG5cdCAqL1xuXHRnZXRTdGlja3lFZGl0TW9kZSgpIHtcblx0XHRjb25zdCBvQmluZGluZ0NvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCAmJiAodGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0KTtcblx0XHRsZXQgYklzU3RpY2t5RWRpdE1vZGUgPSBmYWxzZTtcblx0XHRpZiAob0JpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRjb25zdCBiSXNTdGlja3lNb2RlID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKG9CaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsKTtcblx0XHRcdGlmIChiSXNTdGlja3lNb2RlKSB7XG5cdFx0XHRcdGJJc1N0aWNreUVkaXRNb2RlID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gYklzU3RpY2t5RWRpdE1vZGU7XG5cdH1cblxuXHRfZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKSB7XG5cdFx0cmV0dXJuIHRoaXMuYnlJZChcImZlOjpPYmplY3RQYWdlXCIpIGFzIE9iamVjdFBhZ2VMYXlvdXQ7XG5cdH1cblxuXHRfZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24oKSB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlU3VidGl0bGUgPSBvT2JqZWN0UGFnZS5nZXRDdXN0b21EYXRhKCkuZmluZChmdW5jdGlvbiAob0N1c3RvbURhdGE6IGFueSkge1xuXHRcdFx0cmV0dXJuIG9DdXN0b21EYXRhLmdldEtleSgpID09PSBcIk9iamVjdFBhZ2VTdWJ0aXRsZVwiO1xuXHRcdH0pO1xuXHRcdGNvbnN0IG9UaXRsZUluZm8gPSB7XG5cdFx0XHR0aXRsZTogb09iamVjdFBhZ2UuZGF0YShcIk9iamVjdFBhZ2VUaXRsZVwiKSB8fCBcIlwiLFxuXHRcdFx0c3VidGl0bGU6IG9PYmplY3RQYWdlU3VidGl0bGUgJiYgb09iamVjdFBhZ2VTdWJ0aXRsZS5nZXRWYWx1ZSgpLFxuXHRcdFx0aW50ZW50OiBcIlwiLFxuXHRcdFx0aWNvbjogXCJcIlxuXHRcdH07XG5cblx0XHRyZXR1cm4gb1RpdGxlSW5mbztcblx0fVxuXG5cdF9leGVjdXRlSGVhZGVyU2hvcnRjdXQoc0lkOiBhbnkpIHtcblx0XHRjb25zdCBzQnV0dG9uSWQgPSB0aGlzLmdldFZpZXcoKS5nZXRJZCgpICsgXCItLVwiICsgc0lkLFxuXHRcdFx0b0J1dHRvbiA9ICh0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLmdldEhlYWRlclRpdGxlKCkgYXMgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZSlcblx0XHRcdFx0LmdldEFjdGlvbnMoKVxuXHRcdFx0XHQuZmluZChmdW5jdGlvbiAob0VsZW1lbnQ6IGFueSkge1xuXHRcdFx0XHRcdHJldHVybiBvRWxlbWVudC5nZXRJZCgpID09PSBzQnV0dG9uSWQ7XG5cdFx0XHRcdH0pO1xuXHRcdENvbW1vblV0aWxzLmZpcmVCdXR0b25QcmVzcyhvQnV0dG9uKTtcblx0fVxuXG5cdF9leGVjdXRlRm9vdGVyU2hvcnRjdXQoc0lkOiBhbnkpIHtcblx0XHRjb25zdCBzQnV0dG9uSWQgPSB0aGlzLmdldFZpZXcoKS5nZXRJZCgpICsgXCItLVwiICsgc0lkLFxuXHRcdFx0b0J1dHRvbiA9ICh0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLmdldEZvb3RlcigpIGFzIGFueSkuZ2V0Q29udGVudCgpLmZpbmQoZnVuY3Rpb24gKG9FbGVtZW50OiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIG9FbGVtZW50LmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpID09PSBcInNhcC5tLkJ1dHRvblwiICYmIG9FbGVtZW50LmdldElkKCkgPT09IHNCdXR0b25JZDtcblx0XHRcdH0pO1xuXHRcdENvbW1vblV0aWxzLmZpcmVCdXR0b25QcmVzcyhvQnV0dG9uKTtcblx0fVxuXG5cdF9leGVjdXRlVGFiU2hvcnRDdXQob0V4ZWN1dGlvbjogYW55KSB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLFxuXHRcdFx0YVNlY3Rpb25zID0gb09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKSxcblx0XHRcdGlTZWN0aW9uSW5kZXhNYXggPSBhU2VjdGlvbnMubGVuZ3RoIC0gMSxcblx0XHRcdHNDb21tYW5kID0gb0V4ZWN1dGlvbi5vU291cmNlLmdldENvbW1hbmQoKTtcblx0XHRsZXQgbmV3U2VjdGlvbixcblx0XHRcdGlTZWxlY3RlZFNlY3Rpb25JbmRleCA9IG9PYmplY3RQYWdlLmluZGV4T2ZTZWN0aW9uKHRoaXMuYnlJZChvT2JqZWN0UGFnZS5nZXRTZWxlY3RlZFNlY3Rpb24oKSkgYXMgT2JqZWN0UGFnZVNlY3Rpb24pO1xuXHRcdGlmIChpU2VsZWN0ZWRTZWN0aW9uSW5kZXggIT09IC0xICYmIGlTZWN0aW9uSW5kZXhNYXggPiAwKSB7XG5cdFx0XHRpZiAoc0NvbW1hbmQgPT09IFwiTmV4dFRhYlwiKSB7XG5cdFx0XHRcdGlmIChpU2VsZWN0ZWRTZWN0aW9uSW5kZXggPD0gaVNlY3Rpb25JbmRleE1heCAtIDEpIHtcblx0XHRcdFx0XHRuZXdTZWN0aW9uID0gYVNlY3Rpb25zWysraVNlbGVjdGVkU2VjdGlvbkluZGV4XTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gUHJldmlvdXNUYWJcblx0XHRcdFx0aWYgKGlTZWxlY3RlZFNlY3Rpb25JbmRleCAhPT0gMCkge1xuXHRcdFx0XHRcdG5ld1NlY3Rpb24gPSBhU2VjdGlvbnNbLS1pU2VsZWN0ZWRTZWN0aW9uSW5kZXhdO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAobmV3U2VjdGlvbikge1xuXHRcdFx0XHRvT2JqZWN0UGFnZS5zZXRTZWxlY3RlZFNlY3Rpb24obmV3U2VjdGlvbik7XG5cdFx0XHRcdG5ld1NlY3Rpb24uZm9jdXMoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfZ2V0Rm9vdGVyVmlzaWJpbGl0eSgpIHtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IHNWaWV3SWQgPSB0aGlzLmdldFZpZXcoKS5nZXRJZCgpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcIm1lc3NhZ2VGb290ZXJDb250YWluc0Vycm9yc1wiLCBmYWxzZSk7XG5cdFx0c2FwLnVpXG5cdFx0XHQuZ2V0Q29yZSgpXG5cdFx0XHQuZ2V0TWVzc2FnZU1hbmFnZXIoKVxuXHRcdFx0LmdldE1lc3NhZ2VNb2RlbCgpXG5cdFx0XHQuZ2V0RGF0YSgpXG5cdFx0XHQuZm9yRWFjaChmdW5jdGlvbiAob01lc3NhZ2U6IGFueSkge1xuXHRcdFx0XHRpZiAob01lc3NhZ2UudmFsaWRhdGlvbiAmJiBvTWVzc2FnZS50eXBlID09PSBcIkVycm9yXCIgJiYgb01lc3NhZ2UudGFyZ2V0LmluZGV4T2Yoc1ZpZXdJZCkgPiAtMSkge1xuXHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcIm1lc3NhZ2VGb290ZXJDb250YWluc0Vycm9yc1wiLCB0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdH1cblxuXHRfc2hvd01lc3NhZ2VQb3BvdmVyKGVycj86IGFueSwgb1JldD86IGFueSkge1xuXHRcdGlmIChlcnIpIHtcblx0XHRcdExvZy5lcnJvcihlcnIpO1xuXHRcdH1cblx0XHRjb25zdCByb290Vmlld0NvbnRyb2xsZXIgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvb3RWaWV3Q29udHJvbGxlcigpIGFzIGFueTtcblx0XHRjb25zdCBjdXJyZW50UGFnZVZpZXcgPSByb290Vmlld0NvbnRyb2xsZXIuaXNGY2xFbmFibGVkKClcblx0XHRcdD8gcm9vdFZpZXdDb250cm9sbGVyLmdldFJpZ2h0bW9zdFZpZXcoKVxuXHRcdFx0OiAodGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb290Q29udGFpbmVyKCkgYXMgYW55KS5nZXRDdXJyZW50UGFnZSgpO1xuXHRcdGlmICghY3VycmVudFBhZ2VWaWV3LmlzQShcInNhcC5tLk1lc3NhZ2VQYWdlXCIpKSB7XG5cdFx0XHRjb25zdCBvTWVzc2FnZUJ1dHRvbiA9IHRoaXMuZ2V0VmlldygpLmJ5SWQoXCJmZTo6Rm9vdGVyQmFyOjpNZXNzYWdlQnV0dG9uXCIpIGFzIGFueSxcblx0XHRcdFx0b01lc3NhZ2VQb3BvdmVyID0gb01lc3NhZ2VCdXR0b24ub01lc3NhZ2VQb3BvdmVyLFxuXHRcdFx0XHRvSXRlbUJpbmRpbmcgPSBvTWVzc2FnZVBvcG92ZXIuZ2V0QmluZGluZyhcIml0ZW1zXCIpO1xuXG5cdFx0XHRpZiAob0l0ZW1CaW5kaW5nLmdldExlbmd0aCgpID4gMCAmJiAhb01lc3NhZ2VQb3BvdmVyLmlzT3BlbigpKSB7XG5cdFx0XHRcdG9NZXNzYWdlQnV0dG9uLnNldFZpc2libGUodHJ1ZSk7XG5cdFx0XHRcdC8vIHdvcmthcm91bmQgdG8gZW5zdXJlIHRoYXQgb01lc3NhZ2VCdXR0b24gaXMgcmVuZGVyZWQgd2hlbiBvcGVuQnkgaXMgY2FsbGVkXG5cdFx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdG9NZXNzYWdlUG9wb3Zlci5vcGVuQnkob01lc3NhZ2VCdXR0b24pO1xuXHRcdFx0XHR9LCAwKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG9SZXQ7XG5cdH1cblxuXHRfZWRpdERvY3VtZW50KG9Db250ZXh0OiBhbnkpIHtcblx0XHRjb25zdCBvTW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpO1xuXHRcdEJ1c3lMb2NrZXIubG9jayhvTW9kZWwpO1xuXHRcdHJldHVybiB0aGlzLmVkaXRGbG93LmVkaXREb2N1bWVudC5hcHBseSh0aGlzLmVkaXRGbG93LCBbb0NvbnRleHRdKS5maW5hbGx5KGZ1bmN0aW9uICgpIHtcblx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKG9Nb2RlbCk7XG5cdFx0fSk7XG5cdH1cblxuXHRfc2F2ZURvY3VtZW50KG9Db250ZXh0OiBhbnkpIHtcblx0XHRjb25zdCBvTW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpLFxuXHRcdFx0YVdhaXRDcmVhdGVEb2N1bWVudHM6IGFueVtdID0gW107XG5cdFx0Ly8gaW5kaWNhdGVzIGlmIHdlIGFyZSBjcmVhdGluZyBhIG5ldyByb3cgaW4gdGhlIE9QXG5cdFx0bGV0IGJFeGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yID0gZmFsc2U7XG5cdFx0QnVzeUxvY2tlci5sb2NrKG9Nb2RlbCk7XG5cdFx0dGhpcy5fZmluZFRhYmxlcygpLmZvckVhY2goKG9UYWJsZTogYW55KSA9PiB7XG5cdFx0XHRjb25zdCBvQmluZGluZyA9IHRoaXMuX2dldFRhYmxlQmluZGluZyhvVGFibGUpO1xuXHRcdFx0Y29uc3QgbVBhcmFtZXRlcnM6IGFueSA9IHtcblx0XHRcdFx0Y3JlYXRpb25Nb2RlOiBvVGFibGUuZGF0YShcImNyZWF0aW9uTW9kZVwiKSxcblx0XHRcdFx0Y3JlYXRpb25Sb3c6IG9UYWJsZS5nZXRDcmVhdGlvblJvdygpLFxuXHRcdFx0XHRjcmVhdGVBdEVuZDogb1RhYmxlLmRhdGEoXCJjcmVhdGVBdEVuZFwiKSA9PT0gXCJ0cnVlXCJcblx0XHRcdH07XG5cdFx0XHRjb25zdCBiQ3JlYXRlRG9jdW1lbnQgPVxuXHRcdFx0XHRtUGFyYW1ldGVycy5jcmVhdGlvblJvdyAmJlxuXHRcdFx0XHRtUGFyYW1ldGVycy5jcmVhdGlvblJvdy5nZXRCaW5kaW5nQ29udGV4dCgpICYmXG5cdFx0XHRcdE9iamVjdC5rZXlzKG1QYXJhbWV0ZXJzLmNyZWF0aW9uUm93LmdldEJpbmRpbmdDb250ZXh0KCkuZ2V0T2JqZWN0KCkpLmxlbmd0aCA+IDE7XG5cdFx0XHRpZiAoYkNyZWF0ZURvY3VtZW50KSB7XG5cdFx0XHRcdC8vIHRoZSBiU2tpcFNpZGVFZmZlY3RzIGlzIGEgcGFyYW1ldGVyIGNyZWF0ZWQgd2hlbiB3ZSBjbGljayB0aGUgc2F2ZSBrZXkuIElmIHdlIHByZXNzIHRoaXMga2V5XG5cdFx0XHRcdC8vIHdlIGRvbid0IGV4ZWN1dGUgdGhlIGhhbmRsZVNpZGVFZmZlY3RzIGZ1bmNpdG9uIHRvIGF2b2lkIGJhdGNoIHJlZHVuZGFuY3lcblx0XHRcdFx0bVBhcmFtZXRlcnMuYlNraXBTaWRlRWZmZWN0cyA9IHRydWU7XG5cdFx0XHRcdGJFeGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yID0gdHJ1ZTtcblx0XHRcdFx0YVdhaXRDcmVhdGVEb2N1bWVudHMucHVzaChcblx0XHRcdFx0XHR0aGlzLmVkaXRGbG93LmNyZWF0ZURvY3VtZW50KG9CaW5kaW5nLCBtUGFyYW1ldGVycykudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb0JpbmRpbmc7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoYVdhaXRDcmVhdGVEb2N1bWVudHMpXG5cdFx0XHQudGhlbigoYUJpbmRpbmdzOiBhbnlbXSkgPT4ge1xuXHRcdFx0XHRjb25zdCBtUGFyYW1ldGVycyA9IHtcblx0XHRcdFx0XHRiRXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvcjogYkV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IsXG5cdFx0XHRcdFx0YmluZGluZ3M6IGFCaW5kaW5nc1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5lZGl0Rmxvdy5zYXZlRG9jdW1lbnQob0NvbnRleHQsIG1QYXJhbWV0ZXJzKS5jYXRjaCgoLi4uYXJncykgPT4ge1xuXHRcdFx0XHRcdHRoaXMuX3Nob3dNZXNzYWdlUG9wb3ZlciguLi5hcmdzKTtcblx0XHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoLi4uYXJncyk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSlcblx0XHRcdC5maW5hbGx5KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0aWYgKEJ1c3lMb2NrZXIuaXNMb2NrZWQob01vZGVsKSkge1xuXHRcdFx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKG9Nb2RlbCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHR9XG5cblx0X21hbmFnZUNvbGxhYm9yYXRpb24oKSB7XG5cdFx0b3Blbk1hbmFnZURpYWxvZyh0aGlzLmdldFZpZXcoKSk7XG5cdH1cblxuXHRfc2hvd0NvbGxhYm9yYXRpb25Vc2VyRGV0YWlscyhldmVudDogYW55KSB7XG5cdFx0c2hvd1VzZXJEZXRhaWxzKGV2ZW50LCB0aGlzLmdldFZpZXcoKSk7XG5cdH1cblxuXHRfY2FuY2VsRG9jdW1lbnQob0NvbnRleHQ6IGFueSwgbVBhcmFtZXRlcnM6IGFueSkge1xuXHRcdG1QYXJhbWV0ZXJzLmNhbmNlbEJ1dHRvbiA9IHRoaXMuZ2V0VmlldygpLmJ5SWQobVBhcmFtZXRlcnMuY2FuY2VsQnV0dG9uKTsgLy90byBnZXQgdGhlIHJlZmVyZW5jZSBvZiB0aGUgY2FuY2VsIGJ1dHRvbiBmcm9tIGNvbW1hbmQgZXhlY3V0aW9uXG5cdFx0cmV0dXJuIHRoaXMuZWRpdEZsb3cuY2FuY2VsRG9jdW1lbnQob0NvbnRleHQsIG1QYXJhbWV0ZXJzKTtcblx0fVxuXG5cdF9hcHBseURvY3VtZW50KG9Db250ZXh0OiBhbnkpIHtcblx0XHRyZXR1cm4gdGhpcy5lZGl0Rmxvdy5hcHBseURvY3VtZW50KG9Db250ZXh0KS5jYXRjaCgoKSA9PiB0aGlzLl9zaG93TWVzc2FnZVBvcG92ZXIoKSk7XG5cdH1cblxuXHRfc2hvd1N3aXRjaERyYWZ0QW5kQWN0aXZlUG9wb3ZlcihldmVudDogRXZlbnQpIHtcblx0XHRjb25zdCB2aWV3ID0gdGhpcy5nZXRWaWV3KCksXG5cdFx0XHRzb3VyY2UgPSBldmVudC5nZXRTb3VyY2UoKSxcblx0XHRcdGZyYWdtZW50TmFtZSA9IFwic2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLnZpZXcuZnJhZ21lbnRzLlN3aXRjaERyYWZ0QW5kQWN0aXZlT2JqZWN0UG9wT3ZlclwiO1xuXG5cdFx0aWYgKHRoaXMuc3dpdGNoRHJhZnRBbmRBY3RpdmVQb3BPdmVyKSB7XG5cdFx0XHR0aGlzLnN3aXRjaERyYWZ0QW5kQWN0aXZlUG9wT3Zlci5vcGVuQnkoc291cmNlLCBmYWxzZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGxvY2FsVGhpc01vZGVsID0gbmV3IEpTT05Nb2RlbCh7fSksXG5cdFx0XHRcdHByZXByb2Nlc3NvclNldHRpbmdzID0ge1xuXHRcdFx0XHRcdGJpbmRpbmdDb250ZXh0czoge1xuXHRcdFx0XHRcdFx0XCJ0aGlzXCI6IGxvY2FsVGhpc01vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFx0XHRcInRoaXNcIjogbG9jYWxUaGlzTW9kZWxcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHRjb25zdCBwb3BvdmVyRnJhZ21lbnQgPSBYTUxUZW1wbGF0ZVByb2Nlc3Nvci5sb2FkVGVtcGxhdGUoZnJhZ21lbnROYW1lLCBcImZyYWdtZW50XCIpO1xuXHRcdFx0UHJvbWlzZS5yZXNvbHZlKFhNTFByZXByb2Nlc3Nvci5wcm9jZXNzKHBvcG92ZXJGcmFnbWVudCwgeyBuYW1lOiBmcmFnbWVudE5hbWUgfSwgcHJlcHJvY2Vzc29yU2V0dGluZ3MpKVxuXHRcdFx0XHQudGhlbigoZnJhZ21lbnQpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gRnJhZ21lbnQubG9hZCh7IGRlZmluaXRpb246IGZyYWdtZW50LCBjb250cm9sbGVyOiB0aGlzIH0pO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQudGhlbigocG9wb3ZlcjogYW55KSA9PiB7XG5cdFx0XHRcdFx0dmlldy5hZGREZXBlbmRlbnQocG9wb3Zlcik7XG5cdFx0XHRcdFx0cG9wb3Zlci5zZXRNb2RlbCh2aWV3LmdldE1vZGVsKFwic2FwLmZlLmkxOG5cIiksIFwiaTE4blwiKTtcblx0XHRcdFx0XHRwb3BvdmVyLnNldFBsYWNlbWVudChcIkJvdHRvbVwiKTtcblx0XHRcdFx0XHR0aGlzLnN3aXRjaERyYWZ0QW5kQWN0aXZlUG9wT3ZlciA9IHBvcG92ZXI7XG5cdFx0XHRcdFx0cG9wb3Zlci5hdHRhY2hBZnRlck9wZW4oKCkgPT4ge1xuXHRcdFx0XHRcdFx0Ly8gV2hpbGUgdGhlIGxpc3QgZW50cnkgY29ycmVzcG9uZGluZyB0byB0aGUgY3VycmVudGx5IGRpc3BsYXllZCBkb2N1bWVudCB2ZXJzaW9uIGlzIGVtcGhhc2l6ZWQgd2l0aCBhIGJsdWVcblx0XHRcdFx0XHRcdC8vIGJhY2tncm91bmQsIHdlIG5lZWQgdG8gcHJlLWZvY3VzIHRoZSBvdGhlciBlbnRyeVxuXHRcdFx0XHRcdFx0Y29uc3QgY29udGV4dDogYW55ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKSxcblx0XHRcdFx0XHRcdFx0aXNBY3RpdmVFbnRpdHkgPSBjb250ZXh0LmdldE9iamVjdCgpLklzQWN0aXZlRW50aXR5O1xuXHRcdFx0XHRcdFx0Y29uc3Qgc3dpdGNoRHJhZnRBbmRBY3RpdmVPcHRpb25zTGlzdDogU2VsZWN0TGlzdCA9IChwb3BvdmVyLmdldENvbnRlbnQoKSBhcyB1bmtub3duIGFzIENvbnRyb2xbXSkuZmluZChcblx0XHRcdFx0XHRcdFx0KGVsZW1lbnQpID0+IGVsZW1lbnQuZGF0YShcImxpc3RJZGVudGlmaWVyXCIpID09PSBcInN3aXRjaERyYWZ0QW5kQWN0aXZlUG9wb3Zlckxpc3RcIlxuXHRcdFx0XHRcdFx0KSBhcyBTZWxlY3RMaXN0O1xuXHRcdFx0XHRcdFx0Y29uc3QgbGlzdEl0ZW1Ub0ZvY3VzOiBJdGVtID0gaXNBY3RpdmVFbnRpdHlcblx0XHRcdFx0XHRcdFx0PyAoc3dpdGNoRHJhZnRBbmRBY3RpdmVPcHRpb25zTGlzdC5nZXRJdGVtcygpLmZpbmQoKGVsZW1lbnQpID0+IGVsZW1lbnQuZ2V0S2V5KCkgPT09IFwic3dpdGNoVG9EcmFmdFwiKSBhcyBJdGVtKVxuXHRcdFx0XHRcdFx0XHQ6IChzd2l0Y2hEcmFmdEFuZEFjdGl2ZU9wdGlvbnNMaXN0LmdldEl0ZW1zKCkuZmluZCgoZWxlbWVudCkgPT4gZWxlbWVudC5nZXRLZXkoKSA9PT0gXCJzd2l0Y2hUb0FjdGl2ZVwiKSBhcyBJdGVtKTtcblx0XHRcdFx0XHRcdGxpc3RJdGVtVG9Gb2N1cy5mb2N1cygpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdHBvcG92ZXIub3BlbkJ5KHNvdXJjZSk7XG5cdFx0XHRcdFx0Ly8gZW5zdXJlIHRvIHJlbW92ZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSBkcmFmdCBwb3BvdmVyIGFzIGl0IHdvdWxkIGJlIGRlc3Ryb3llZCBvbiBleGl0XG5cdFx0XHRcdFx0dmlldy5hdHRhY2hFdmVudE9uY2UoXCJiZWZvcmVFeGl0XCIsICgpID0+IHtcblx0XHRcdFx0XHRcdGRlbGV0ZSB0aGlzLnN3aXRjaERyYWZ0QW5kQWN0aXZlUG9wT3Zlcjtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChFcnJvcikge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIG9wZW5pbmcgdGhlIGRyYWZ0IHN3aXRjaCBwb3B1cFwiLCBFcnJvcik7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdF9zd2l0Y2hEcmFmdEFuZEFjdGl2ZVBvcG92ZXJMaXN0U2VsZWN0KGV2ZW50OiBFdmVudCkge1xuXHRcdGNvbnN0IGNvbnRleHQ6IGFueSA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCksXG5cdFx0XHRzZWxlY3RlZEl0ZW1LZXkgPSBldmVudC5nZXRQYXJhbWV0ZXIoXCJpdGVtXCIpLmdldFByb3BlcnR5KFwia2V5XCIpLFxuXHRcdFx0aXNBY3RpdmVFbnRpdHkgPSBjb250ZXh0LmdldE9iamVjdCgpLklzQWN0aXZlRW50aXR5O1xuXHRcdC8vIEl0IHdhcyBkZWNpZGVkIHRoYXQgd2Ugc2hvdWxkIE5PVCBzZXQgdGhlIGVudHJ5IGluIHRoZSBsaXN0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGN1cnJlbnRseSBkaXNwbGF5ZWQgZG9jdW1lbnQgdmVyc2lvbiB0b1xuXHRcdC8vIGRpc2FibGVkLCBoZW5jZSB0aGUgdXNlciBjYW4gY2xpY2sgZW50cmllcyB3aGljaCB0byBub3QgY2F1c2UgYW4gYWN0aW9uIChjbGlja2luZyBcIkRyYWZ0XCIgd2hlbiB5b3UgYWxyZWFkeSBkaXNwbGF5IHRoZVxuXHRcdC8vIGRyYWZ0IHZlcnNpb24gb2YgdGhlIGRvY3VtZW50KVxuXHRcdC8vIEhlbmNlIHdlIGNoZWNrIGhlcmUgd2hpY2ggZW50cnkgaW4gdGhlIGxpc3Qgd2FzIGNsaWNrZWQgYW5kIHdoaWNoIGRvY3VtZW50IHZlcnNpb24gd2UgY3VycmVudGx5IGRpc3BsYXkgYW5kIG9ubHkgZG9cblx0XHQvLyB0aGUgc3dpdGNoIGJldHdlZW4gZHJhZnQgLyBhY3RpdmUgdmVyc2lvbiBpZiBpdCBtYWtlcyBzZW5zZS5cblx0XHRpZiAoKGlzQWN0aXZlRW50aXR5ICYmIHNlbGVjdGVkSXRlbUtleSA9PT0gXCJzd2l0Y2hUb0RyYWZ0XCIpIHx8ICghaXNBY3RpdmVFbnRpdHkgJiYgc2VsZWN0ZWRJdGVtS2V5ID09PSBcInN3aXRjaFRvQWN0aXZlXCIpKSB7XG5cdFx0XHR0aGlzLmVkaXRGbG93LnRvZ2dsZURyYWZ0QWN0aXZlKGNvbnRleHQpO1xuXHRcdH1cblx0XHQoKGV2ZW50LmdldFNvdXJjZSgpIGFzIENvbnRyb2wpLmdldFBhcmVudCgpIGFzIFBvcG92ZXIpLmNsb3NlKCk7XG5cdH1cblxuXHRfdXBkYXRlUmVsYXRlZEFwcHMoKSB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGlmIChDb21tb25VdGlscy5yZXNvbHZlU3RyaW5ndG9Cb29sZWFuKG9PYmplY3RQYWdlLmRhdGEoXCJzaG93UmVsYXRlZEFwcHNcIikpKSB7XG5cdFx0XHRDb21tb25VdGlscy51cGRhdGVSZWxhdGVkQXBwc0RldGFpbHMob09iamVjdFBhZ2UpO1xuXHRcdH1cblx0fVxuXG5cdF9maW5kVGFibGVJblN1YlNlY3Rpb24oYVBhcmVudEVsZW1lbnQ6IGFueSwgYVN1YnNlY3Rpb246IGFueSwgYVRhYmxlczogYW55KSB7XG5cdFx0Y29uc3QgYVN1YlNlY3Rpb25UYWJsZXMgPSBbXTtcblx0XHRmb3IgKGxldCBlbGVtZW50ID0gMDsgZWxlbWVudCA8IGFQYXJlbnRFbGVtZW50Lmxlbmd0aDsgZWxlbWVudCsrKSB7XG5cdFx0XHRsZXQgb0VsZW1lbnQgPSBhUGFyZW50RWxlbWVudFtlbGVtZW50XS5nZXRDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgYVBhcmVudEVsZW1lbnRbZWxlbWVudF0uZ2V0Q29udGVudCgpO1xuXHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50LmlzQSAmJiBvRWxlbWVudC5pc0EoXCJzYXAudWkubGF5b3V0LkR5bmFtaWNTaWRlQ29udGVudFwiKSkge1xuXHRcdFx0XHRvRWxlbWVudCA9IG9FbGVtZW50LmdldE1haW5Db250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgb0VsZW1lbnQuZ2V0TWFpbkNvbnRlbnQoKTtcblx0XHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRvRWxlbWVudCA9IG9FbGVtZW50WzBdO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQuaXNBICYmIG9FbGVtZW50LmlzQShcInNhcC5mZS5tYWNyb3MuVGFibGVBUElcIikpIHtcblx0XHRcdFx0b0VsZW1lbnQgPSBvRWxlbWVudC5nZXRDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgb0VsZW1lbnQuZ2V0Q29udGVudCgpO1xuXHRcdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdG9FbGVtZW50ID0gb0VsZW1lbnRbMF07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5pc0EgJiYgb0VsZW1lbnQuaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRhVGFibGVzLnB1c2gob0VsZW1lbnQpO1xuXHRcdFx0XHRhU3ViU2VjdGlvblRhYmxlcy5wdXNoKHtcblx0XHRcdFx0XHRcInRhYmxlXCI6IG9FbGVtZW50LFxuXHRcdFx0XHRcdFwiZ3JpZFRhYmxlXCI6IG9FbGVtZW50LmdldFR5cGUoKS5pc0EoXCJzYXAudWkubWRjLnRhYmxlLkdyaWRUYWJsZVR5cGVcIilcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmIChcblx0XHRcdGFTdWJTZWN0aW9uVGFibGVzLmxlbmd0aCA9PT0gMSAmJlxuXHRcdFx0YVBhcmVudEVsZW1lbnQubGVuZ3RoID09PSAxICYmXG5cdFx0XHRhU3ViU2VjdGlvblRhYmxlc1swXS5ncmlkVGFibGUgJiZcblx0XHRcdCFhU3Vic2VjdGlvbi5oYXNTdHlsZUNsYXNzKFwic2FwVXhBUE9iamVjdFBhZ2VTdWJTZWN0aW9uRml0Q29udGFpbmVyXCIpXG5cdFx0KSB7XG5cdFx0XHQvL0luIGNhc2UgdGhlcmUgaXMgb25seSBhIHNpbmdsZSB0YWJsZSBpbiBhIHNlY3Rpb24gd2UgZml0IHRoYXQgdG8gdGhlIHdob2xlIHBhZ2Ugc28gdGhhdCB0aGUgc2Nyb2xsYmFyIGNvbWVzIG9ubHkgb24gdGFibGUgYW5kIG5vdCBvbiBwYWdlXG5cdFx0XHRhU3Vic2VjdGlvbi5hZGRTdHlsZUNsYXNzKFwic2FwVXhBUE9iamVjdFBhZ2VTdWJTZWN0aW9uRml0Q29udGFpbmVyXCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoYVN1YlNlY3Rpb25UYWJsZXMgJiYgIWFTdWJzZWN0aW9uLmhhc1N0eWxlQ2xhc3MoXCJzYXBVeEFQT2JqZWN0UGFnZVN1YlNlY3Rpb25GaXRDb250YWluZXJcIikpIHtcblx0XHRcdFx0YVN1YlNlY3Rpb25UYWJsZXMuZm9yRWFjaChmdW5jdGlvbiAob1RhYmxlOiB7IHRhYmxlOiBhbnk7IGdyaWRUYWJsZTogYW55IH0pIHtcblx0XHRcdFx0XHRpZiAob1RhYmxlLmdyaWRUYWJsZSkge1xuXHRcdFx0XHRcdFx0Ly9SZXNldHRpbmcgdGhlIHJvdyBjb3VudCB0byBkZWZhdWx0IHZhbHVlIGluIGNhc2Ugd2UgaGF2ZSBhIGNvbWJpbmF0aW9uIG9mIGZvcm1zIGFuZCB0YWJsZXMgb3IgbXVsdGlwbGUgdGFibGVzIGluIGEgc3Vic2VjdGlvblxuXHRcdFx0XHRcdFx0b1RhYmxlLnRhYmxlLmdldFR5cGUoKS5zZXRSb3dDb3VudChudWxsKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF9nZXRBbGxTdWJTZWN0aW9ucygpIHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0bGV0IGFTdWJTZWN0aW9uczogYW55W10gPSBbXTtcblx0XHRvT2JqZWN0UGFnZS5nZXRTZWN0aW9ucygpLmZvckVhY2goZnVuY3Rpb24gKG9TZWN0aW9uOiBhbnkpIHtcblx0XHRcdGFTdWJTZWN0aW9ucyA9IGFTdWJTZWN0aW9ucy5jb25jYXQob1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGFTdWJTZWN0aW9ucztcblx0fVxuXG5cdF9nZXRBbGxCbG9ja3MoKSB7XG5cdFx0bGV0IGFCbG9ja3M6IGFueVtdID0gW107XG5cdFx0dGhpcy5fZ2V0QWxsU3ViU2VjdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvU3ViU2VjdGlvbjogYW55KSB7XG5cdFx0XHRhQmxvY2tzID0gYUJsb2Nrcy5jb25jYXQob1N1YlNlY3Rpb24uZ2V0QmxvY2tzKCkpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBhQmxvY2tzO1xuXHR9XG5cblx0X2ZpbmRUYWJsZXMoKSB7XG5cdFx0Y29uc3QgYVN1YlNlY3Rpb25zID0gdGhpcy5fZ2V0QWxsU3ViU2VjdGlvbnMoKTtcblx0XHRjb25zdCBhVGFibGVzOiBhbnlbXSA9IFtdO1xuXHRcdGZvciAobGV0IHN1YlNlY3Rpb24gPSAwOyBzdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgc3ViU2VjdGlvbisrKSB7XG5cdFx0XHR0aGlzLl9maW5kVGFibGVJblN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLmdldEJsb2NrcygpLCBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0sIGFUYWJsZXMpO1xuXHRcdFx0dGhpcy5fZmluZFRhYmxlSW5TdWJTZWN0aW9uKGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXS5nZXRNb3JlQmxvY2tzKCksIGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXSwgYVRhYmxlcyk7XG5cdFx0fVxuXHRcdHJldHVybiBhVGFibGVzO1xuXHR9XG5cblx0X2Nsb3NlU2lkZUNvbnRlbnQoKSB7XG5cdFx0dGhpcy5fZ2V0QWxsQmxvY2tzKCkuZm9yRWFjaChmdW5jdGlvbiAob0Jsb2NrOiBhbnkpIHtcblx0XHRcdGNvbnN0IG9Db250ZW50ID0gb0Jsb2NrLmdldENvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBvQmxvY2suZ2V0Q29udGVudCgpO1xuXHRcdFx0aWYgKG9Db250ZW50ICYmIG9Db250ZW50LmlzQSAmJiBvQ29udGVudC5pc0EoXCJzYXAudWkubGF5b3V0LkR5bmFtaWNTaWRlQ29udGVudFwiKSkge1xuXHRcdFx0XHRpZiAob0NvbnRlbnQuc2V0U2hvd1NpZGVDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcblx0XHRcdFx0XHRvQ29udGVudC5zZXRTaG93U2lkZUNvbnRlbnQoZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hhcnQgQ29udGV4dCBpcyByZXNvbHZlZCBmb3IgMTpuIG1pY3JvY2hhcnRzLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3NhcC51aS5tb2RlbC5Db250ZXh0fSBvQ2hhcnRDb250ZXh0IFRoZSBDb250ZXh0IG9mIHRoZSBNaWNyb0NoYXJ0XG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzQ2hhcnRQYXRoIFRoZSBjb2xsZWN0aW9uUGF0aCBvZiB0aGUgdGhlIGNoYXJ0XG5cdCAqIEByZXR1cm5zIHtBcnJheX0gQXJyYXkgb2YgQXR0cmlidXRlcyBvZiB0aGUgY2hhcnQgQ29udGV4dFxuXHQgKi9cblx0X2dldENoYXJ0Q29udGV4dERhdGEob0NoYXJ0Q29udGV4dDogYW55LCBzQ2hhcnRQYXRoOiBzdHJpbmcpIHtcblx0XHRjb25zdCBvQ29udGV4dERhdGEgPSBvQ2hhcnRDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdGxldCBvQ2hhcnRDb250ZXh0RGF0YSA9IFtvQ29udGV4dERhdGFdO1xuXHRcdGlmIChvQ2hhcnRDb250ZXh0ICYmIHNDaGFydFBhdGgpIHtcblx0XHRcdGlmIChvQ29udGV4dERhdGFbc0NoYXJ0UGF0aF0pIHtcblx0XHRcdFx0b0NoYXJ0Q29udGV4dERhdGEgPSBvQ29udGV4dERhdGFbc0NoYXJ0UGF0aF07XG5cdFx0XHRcdGRlbGV0ZSBvQ29udGV4dERhdGFbc0NoYXJ0UGF0aF07XG5cdFx0XHRcdG9DaGFydENvbnRleHREYXRhLnB1c2gob0NvbnRleHREYXRhKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG9DaGFydENvbnRleHREYXRhO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNjcm9sbCB0aGUgdGFibGVzIHRvIHRoZSByb3cgd2l0aCB0aGUgc1BhdGhcblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIHNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5PYmplY3RQYWdlQ29udHJvbGxlci5jb250cm9sbGVyI19zY3JvbGxUYWJsZXNUb1Jvd1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1Jvd1BhdGggJ3NQYXRoIG9mIHRoZSB0YWJsZSByb3cnXG5cdCAqXG5cdCAqL1xuXG5cdF9zY3JvbGxUYWJsZXNUb1JvdyhzUm93UGF0aDogc3RyaW5nKSB7XG5cdFx0aWYgKHRoaXMuX2ZpbmRUYWJsZXMgJiYgdGhpcy5fZmluZFRhYmxlcygpLmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IGFUYWJsZXMgPSB0aGlzLl9maW5kVGFibGVzKCk7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFUYWJsZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0VGFibGVTY3JvbGxlci5zY3JvbGxUYWJsZVRvUm93KGFUYWJsZXNbaV0sIHNSb3dQYXRoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIG1lcmdlIHNlbGVjdGVkIGNvbnRleHRzIGFuZCBmaWx0ZXJzLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgX21lcmdlTXVsdGlwbGVDb250ZXh0c1xuXHQgKiBAcGFyYW0ge29iamVjdH0gb1BhZ2VDb250ZXh0IFBhZ2UgY29udGV4dFxuXHQgKiBAcGFyYW0ge29iamVjdHxBcnJheX0gYUxpbmVDb250ZXh0IFNlbGVjdGVkIENvbnRleHRzXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzQ2hhcnRQYXRoIENvbGxlY3Rpb24gbmFtZSBvZiB0aGUgY2hhcnRcblx0ICogQHJldHVybnMge29iamVjdH0gU2VsZWN0aW9uIFZhcmlhbnQgT2JqZWN0XG5cdCAqL1xuXHRfbWVyZ2VNdWx0aXBsZUNvbnRleHRzKG9QYWdlQ29udGV4dDogQ29udGV4dCwgYUxpbmVDb250ZXh0OiBhbnlbXSwgc0NoYXJ0UGF0aDogc3RyaW5nKSB7XG5cdFx0bGV0IGFBdHRyaWJ1dGVzOiBhbnlbXSA9IFtdLFxuXHRcdFx0YVBhZ2VBdHRyaWJ1dGVzID0gW10sXG5cdFx0XHRvQ29udGV4dCxcblx0XHRcdHNNZXRhUGF0aExpbmU6IHN0cmluZyxcblx0XHRcdHNQYXRoTGluZTtcblxuXHRcdGNvbnN0IHNQYWdlUGF0aCA9IG9QYWdlQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9QYWdlQ29udGV4dCAmJiBvUGFnZUNvbnRleHQuZ2V0TW9kZWwoKSAmJiAob1BhZ2VDb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwpO1xuXHRcdGNvbnN0IHNNZXRhUGF0aFBhZ2UgPSBvTWV0YU1vZGVsICYmIG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoc1BhZ2VQYXRoKS5yZXBsYWNlKC9eXFwvKi8sIFwiXCIpO1xuXG5cdFx0Ly8gR2V0IHNpbmdsZSBsaW5lIGNvbnRleHQgaWYgbmVjZXNzYXJ5XG5cdFx0aWYgKGFMaW5lQ29udGV4dCAmJiBhTGluZUNvbnRleHQubGVuZ3RoKSB7XG5cdFx0XHRvQ29udGV4dCA9IGFMaW5lQ29udGV4dFswXTtcblx0XHRcdHNQYXRoTGluZSA9IG9Db250ZXh0LmdldFBhdGgoKTtcblx0XHRcdHNNZXRhUGF0aExpbmUgPSBvTWV0YU1vZGVsICYmIG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoc1BhdGhMaW5lKS5yZXBsYWNlKC9eXFwvKi8sIFwiXCIpO1xuXG5cdFx0XHRhTGluZUNvbnRleHQubWFwKChvU2luZ2xlQ29udGV4dDogYW55KSA9PiB7XG5cdFx0XHRcdGlmIChzQ2hhcnRQYXRoKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb0NoYXJ0Q29udGV4dERhdGEgPSB0aGlzLl9nZXRDaGFydENvbnRleHREYXRhKG9TaW5nbGVDb250ZXh0LCBzQ2hhcnRQYXRoKTtcblx0XHRcdFx0XHRpZiAob0NoYXJ0Q29udGV4dERhdGEpIHtcblx0XHRcdFx0XHRcdGFBdHRyaWJ1dGVzID0gb0NoYXJ0Q29udGV4dERhdGEubWFwKGZ1bmN0aW9uIChvQ2hhcnRDb250ZXh0RGF0YTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0Y29udGV4dERhdGE6IG9DaGFydENvbnRleHREYXRhLFxuXHRcdFx0XHRcdFx0XHRcdGVudGl0eVNldDogc01ldGFQYXRoUGFnZSArIFwiL1wiICsgc0NoYXJ0UGF0aFxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGFBdHRyaWJ1dGVzLnB1c2goe1xuXHRcdFx0XHRcdFx0Y29udGV4dERhdGE6IG9TaW5nbGVDb250ZXh0LmdldE9iamVjdCgpLFxuXHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBzTWV0YVBhdGhMaW5lXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRhUGFnZUF0dHJpYnV0ZXMucHVzaCh7XG5cdFx0XHRjb250ZXh0RGF0YTogb1BhZ2VDb250ZXh0LmdldE9iamVjdCgpLFxuXHRcdFx0ZW50aXR5U2V0OiBzTWV0YVBhdGhQYWdlXG5cdFx0fSk7XG5cdFx0Ly8gQWRkaW5nIFBhZ2UgQ29udGV4dCB0byBzZWxlY3Rpb24gdmFyaWFudFxuXHRcdGFQYWdlQXR0cmlidXRlcyA9IENvbW1vblV0aWxzLnJlbW92ZVNlbnNpdGl2ZURhdGEoYVBhZ2VBdHRyaWJ1dGVzLCBvTWV0YU1vZGVsKTtcblx0XHRjb25zdCBvUGFnZUxldmVsU1YgPSBDb21tb25VdGlscy5hZGRQYWdlQ29udGV4dFRvU2VsZWN0aW9uVmFyaWFudChuZXcgU2VsZWN0aW9uVmFyaWFudCgpLCBhUGFnZUF0dHJpYnV0ZXMsIHRoaXMuZ2V0VmlldygpKTtcblx0XHRhQXR0cmlidXRlcyA9IENvbW1vblV0aWxzLnJlbW92ZVNlbnNpdGl2ZURhdGEoYUF0dHJpYnV0ZXMsIG9NZXRhTW9kZWwpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRzZWxlY3Rpb25WYXJpYW50OiBvUGFnZUxldmVsU1YsXG5cdFx0XHRhdHRyaWJ1dGVzOiBhQXR0cmlidXRlc1xuXHRcdH07XG5cdH1cblxuXHRfZ2V0QmF0Y2hHcm91cHNGb3JWaWV3KCkge1xuXHRcdGNvbnN0IG9WaWV3RGF0YSA9IHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55LFxuXHRcdFx0b0NvbmZpZ3VyYXRpb25zID0gb1ZpZXdEYXRhLmNvbnRyb2xDb25maWd1cmF0aW9uLFxuXHRcdFx0YUNvbmZpZ3VyYXRpb25zID0gb0NvbmZpZ3VyYXRpb25zICYmIE9iamVjdC5rZXlzKG9Db25maWd1cmF0aW9ucyksXG5cdFx0XHRhQmF0Y2hHcm91cHMgPSBbXCIkYXV0by5IZXJvZXNcIiwgXCIkYXV0by5EZWNvcmF0aW9uXCIsIFwiJGF1dG8uV29ya2Vyc1wiXTtcblxuXHRcdGlmIChhQ29uZmlndXJhdGlvbnMgJiYgYUNvbmZpZ3VyYXRpb25zLmxlbmd0aCA+IDApIHtcblx0XHRcdGFDb25maWd1cmF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChzS2V5OiBhbnkpIHtcblx0XHRcdFx0Y29uc3Qgb0NvbmZpZ3VyYXRpb24gPSBvQ29uZmlndXJhdGlvbnNbc0tleV07XG5cdFx0XHRcdGlmIChvQ29uZmlndXJhdGlvbi5yZXF1ZXN0R3JvdXBJZCA9PT0gXCJMb25nUnVubmVyc1wiKSB7XG5cdFx0XHRcdFx0YUJhdGNoR3JvdXBzLnB1c2goXCIkYXV0by5Mb25nUnVubmVyc1wiKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBhQmF0Y2hHcm91cHM7XG5cdH1cblxuXHQvKlxuXHQgKiBSZXNldCBCcmVhZGNydW1iIGxpbmtzXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge3NhcC5tLkJyZWFkY3J1bWJzfSBbb1NvdXJjZV0gcGFyZW50IGNvbnRyb2xcblx0ICogQGRlc2NyaXB0aW9uIFVzZWQgd2hlbiBjb250ZXh0IG9mIHRoZSBvYmplY3RwYWdlIGNoYW5nZXMuXG5cdCAqICAgICAgICAgICAgICBUaGlzIGV2ZW50IGNhbGxiYWNrIGlzIGF0dGFjaGVkIHRvIG1vZGVsQ29udGV4dENoYW5nZVxuXHQgKiAgICAgICAgICAgICAgZXZlbnQgb2YgdGhlIEJyZWFkY3J1bWIgY29udHJvbCB0byBjYXRjaCBjb250ZXh0IGNoYW5nZS5cblx0ICogICAgICAgICAgICAgIFRoZW4gZWxlbWVudCBiaW5kaW5nIGFuZCBocmVmcyBhcmUgdXBkYXRlZCBmb3IgZWFjaCBMaW5rLlxuXHQgKlxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQGV4cGVyaW1lbnRhbFxuXHQgKi9cblx0X3NldEJyZWFkY3J1bWJMaW5rcyhvU291cmNlOiBhbnkpIHtcblx0XHRjb25zdCBvQ29udGV4dCA9IG9Tb3VyY2UuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRjb25zdCBvQXBwQ29tcG9uZW50ID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKTtcblx0XHRpZiAob0NvbnRleHQpIHtcblx0XHRcdGNvbnN0IHNOZXdQYXRoID0gb0NvbnRleHQuZ2V0UGF0aCgpLFxuXHRcdFx0XHRhUGF0aFBhcnRzID0gc05ld1BhdGguc3BsaXQoXCIvXCIpLFxuXHRcdFx0XHRvTWV0YU1vZGVsID0gb0FwcENvbXBvbmVudC5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdGxldCBzUGF0aCA9IFwiXCIsXG5cdFx0XHRcdGlTa2lwUGFyYW1ldGVyaXplZCA9IDA7XG5cblx0XHRcdGFQYXRoUGFydHMuc2hpZnQoKTtcblx0XHRcdGFQYXRoUGFydHMuc3BsaWNlKC0xLCAxKTtcblx0XHRcdGFQYXRoUGFydHMuZm9yRWFjaChmdW5jdGlvbiAoc1BhdGhQYXJ0OiBhbnksIGk6IGFueSkge1xuXHRcdFx0XHRzUGF0aCArPSBcIi9cIiArIHNQYXRoUGFydDtcblx0XHRcdFx0Y29uc3Qgb1Jvb3RWaWV3Q29udHJvbGxlciA9IG9BcHBDb21wb25lbnQuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkgYXMgUm9vdENvbnRhaW5lckJhc2VDb250cm9sbGVyO1xuXHRcdFx0XHRjb25zdCBzUGFyYW1ldGVyUGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoc1BhdGgpO1xuXHRcdFx0XHRjb25zdCBiUmVzdWx0Q29udGV4dCA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNQYXJhbWV0ZXJQYXRoICsgXCIvQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZXN1bHRDb250ZXh0XCIpO1xuXHRcdFx0XHRpZiAoYlJlc3VsdENvbnRleHQpIHtcblx0XHRcdFx0XHQvLyBXZSBkb250IG5lZWQgdG8gY3JlYXRlIGEgYnJlYWRjcnVtYiBmb3IgUGFyYW1ldGVyIHBhdGhcblx0XHRcdFx0XHRpU2tpcFBhcmFtZXRlcml6ZWQgPSAxO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IHBXYWl0Rm9yVGl0bGVIaWVhcmNoeUluZm8gPSBvUm9vdFZpZXdDb250cm9sbGVyLmdldFRpdGxlSW5mb0Zyb21QYXRoKHNQYXRoKTtcblxuXHRcdFx0XHRwV2FpdEZvclRpdGxlSGllYXJjaHlJbmZvXG5cdFx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKG9UaXRsZUhpZWFyY2h5SW5mbzogYW55KSB7XG5cdFx0XHRcdFx0XHRjb25zdCBpZHggPSBpIC0gaVNraXBQYXJhbWV0ZXJpemVkLFxuXHRcdFx0XHRcdFx0XHRvTGluayA9IG9Tb3VyY2UuZ2V0TGlua3MoKVtpZHhdID8gb1NvdXJjZS5nZXRMaW5rcygpW2lkeF0gOiBuZXcgTGluaygpO1xuXHRcdFx0XHRcdFx0Ly8gc0N1cnJlbnRFbnRpdHkgaXMgYSBmYWxsYmFjayB2YWx1ZSBpbiBjYXNlIG9mIGVtcHR5IHRpdGxlXG5cdFx0XHRcdFx0XHRvTGluay5zZXRUZXh0KG9UaXRsZUhpZWFyY2h5SW5mby5zdWJ0aXRsZSB8fCBvVGl0bGVIaWVhcmNoeUluZm8udGl0bGUpO1xuXHRcdFx0XHRcdFx0b0xpbmsuc2V0SHJlZihvVGl0bGVIaWVhcmNoeUluZm8uaW50ZW50KTtcblx0XHRcdFx0XHRcdGlmICghb1NvdXJjZS5nZXRMaW5rcygpW2lkeF0pIHtcblx0XHRcdFx0XHRcdFx0b1NvdXJjZS5hZGRMaW5rKG9MaW5rKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGNvbXB1dGluZyB0aGUgdGl0bGUgaGllcmFyY2h5XCIsIG9FcnJvcik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRfY2hlY2tEYXRhUG9pbnRUaXRsZUZvckV4dGVybmFsTmF2aWdhdGlvbigpIHtcblx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3Qgb0RhdGFQb2ludHMgPSBDb21tb25VdGlscy5nZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24oXG5cdFx0XHRvVmlldy5nZXRWaWV3RGF0YSgpLFxuXHRcdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb3V0aW5nU2VydmljZSgpLmdldE91dGJvdW5kcygpXG5cdFx0KTtcblx0XHRjb25zdCBvU2hlbGxTZXJ2aWNlcyA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0U2hlbGxTZXJ2aWNlcygpO1xuXHRcdGNvbnN0IG9QYWdlQ29udGV4dCA9IG9WaWV3ICYmIChvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImlzSGVhZGVyRFBMaW5rVmlzaWJsZVwiLCB7fSk7XG5cdFx0aWYgKG9QYWdlQ29udGV4dCkge1xuXHRcdFx0b1BhZ2VDb250ZXh0XG5cdFx0XHRcdC5yZXF1ZXN0T2JqZWN0KClcblx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKG9EYXRhOiBhbnkpIHtcblx0XHRcdFx0XHRmbkdldExpbmtzKG9EYXRhUG9pbnRzLCBvRGF0YSk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgcmV0cmlldmUgdGhlIGxpbmtzIGZyb20gdGhlIHNoZWxsIHNlcnZpY2VcIiwgb0Vycm9yKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogQHBhcmFtIG9FcnJvclxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIGZuT25FcnJvcihvRXJyb3I6IGFueSkge1xuXHRcdFx0TG9nLmVycm9yKG9FcnJvcik7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gZm5TZXRMaW5rRW5hYmxlbWVudChpZDogc3RyaW5nLCBhU3VwcG9ydGVkTGlua3M6IGFueSkge1xuXHRcdFx0Y29uc3Qgc0xpbmtJZCA9IGlkO1xuXHRcdFx0Ly8gcHJvY2VzcyB2aWFibGUgbGlua3MgZnJvbSBnZXRMaW5rcyBmb3IgYWxsIGRhdGFwb2ludHMgaGF2aW5nIG91dGJvdW5kXG5cdFx0XHRpZiAoYVN1cHBvcnRlZExpbmtzICYmIGFTdXBwb3J0ZWRMaW5rcy5sZW5ndGggPT09IDEgJiYgYVN1cHBvcnRlZExpbmtzWzBdLnN1cHBvcnRlZCkge1xuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJpc0hlYWRlckRQTGlua1Zpc2libGUvXCIgKyBzTGlua0lkLCB0cnVlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBAcGFyYW0gb0RhdGFQb2ludHNcblx0XHQgKiBAcGFyYW0gb1BhZ2VEYXRhXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gZm5HZXRMaW5rcyhvRGF0YVBvaW50czogYW55LCBvUGFnZURhdGE6IGFueSkge1xuXHRcdFx0Zm9yIChjb25zdCBzSWQgaW4gb0RhdGFQb2ludHMpIHtcblx0XHRcdFx0Y29uc3Qgb0RhdGFQb2ludCA9IG9EYXRhUG9pbnRzW3NJZF07XG5cdFx0XHRcdGNvbnN0IG9QYXJhbXM6IGFueSA9IHt9O1xuXHRcdFx0XHRjb25zdCBvTGluayA9IG9WaWV3LmJ5SWQoc0lkKTtcblx0XHRcdFx0aWYgKCFvTGluaykge1xuXHRcdFx0XHRcdC8vIGZvciBkYXRhIHBvaW50cyBjb25maWd1cmVkIGluIGFwcCBkZXNjcmlwdG9yIGJ1dCBub3QgYW5ub3RhdGVkIGluIHRoZSBoZWFkZXJcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBvTGlua0NvbnRleHQgPSBvTGluay5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdFx0XHRjb25zdCBvTGlua0RhdGE6IGFueSA9IG9MaW5rQ29udGV4dCAmJiBvTGlua0NvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdGxldCBvTWl4ZWRDb250ZXh0OiBhbnkgPSBtZXJnZSh7fSwgb1BhZ2VEYXRhLCBvTGlua0RhdGEpO1xuXHRcdFx0XHQvLyBwcm9jZXNzIHNlbWFudGljIG9iamVjdCBtYXBwaW5nc1xuXHRcdFx0XHRpZiAob0RhdGFQb2ludC5zZW1hbnRpY09iamVjdE1hcHBpbmcpIHtcblx0XHRcdFx0XHRjb25zdCBhU2VtYW50aWNPYmplY3RNYXBwaW5nID0gb0RhdGFQb2ludC5zZW1hbnRpY09iamVjdE1hcHBpbmc7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtIGluIGFTZW1hbnRpY09iamVjdE1hcHBpbmcpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG9NYXBwaW5nID0gYVNlbWFudGljT2JqZWN0TWFwcGluZ1tpdGVtXTtcblx0XHRcdFx0XHRcdGNvbnN0IHNNYWluUHJvcGVydHkgPSBvTWFwcGluZ1tcIkxvY2FsUHJvcGVydHlcIl1bXCIkUHJvcGVydHlQYXRoXCJdO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc01hcHBlZFByb3BlcnR5ID0gb01hcHBpbmdbXCJTZW1hbnRpY09iamVjdFByb3BlcnR5XCJdO1xuXHRcdFx0XHRcdFx0aWYgKHNNYWluUHJvcGVydHkgIT09IHNNYXBwZWRQcm9wZXJ0eSkge1xuXHRcdFx0XHRcdFx0XHRpZiAob01peGVkQ29udGV4dC5oYXNPd25Qcm9wZXJ0eShzTWFpblByb3BlcnR5KSkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9OZXdNYXBwaW5nOiBhbnkgPSB7fTtcblx0XHRcdFx0XHRcdFx0XHRvTmV3TWFwcGluZ1tzTWFwcGVkUHJvcGVydHldID0gb01peGVkQ29udGV4dFtzTWFpblByb3BlcnR5XTtcblx0XHRcdFx0XHRcdFx0XHRvTWl4ZWRDb250ZXh0ID0gbWVyZ2Uoe30sIG9NaXhlZENvbnRleHQsIG9OZXdNYXBwaW5nKTtcblx0XHRcdFx0XHRcdFx0XHRkZWxldGUgb01peGVkQ29udGV4dFtzTWFpblByb3BlcnR5XTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChvTWl4ZWRDb250ZXh0KSB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBzS2V5IGluIG9NaXhlZENvbnRleHQpIHtcblx0XHRcdFx0XHRcdGlmIChzS2V5LmluZGV4T2YoXCJfXCIpICE9PSAwICYmIHNLZXkuaW5kZXhPZihcIm9kYXRhLmNvbnRleHRcIikgPT09IC0xKSB7XG5cdFx0XHRcdFx0XHRcdG9QYXJhbXNbc0tleV0gPSBvTWl4ZWRDb250ZXh0W3NLZXldO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHQvLyB2YWxpZGF0ZSBpZiBhIGxpbmsgbXVzdCBiZSByZW5kZXJlZFxuXHRcdFx0XHRvU2hlbGxTZXJ2aWNlc1xuXHRcdFx0XHRcdC5pc05hdmlnYXRpb25TdXBwb3J0ZWQoW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0YXJnZXQ6IHtcblx0XHRcdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogb0RhdGFQb2ludC5zZW1hbnRpY09iamVjdCxcblx0XHRcdFx0XHRcdFx0XHRhY3Rpb246IG9EYXRhUG9pbnQuYWN0aW9uXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHBhcmFtczogb1BhcmFtc1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdF0pXG5cdFx0XHRcdFx0LnRoZW4oKGFMaW5rcykgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZuU2V0TGlua0VuYWJsZW1lbnQoc0lkLCBhTGlua3MpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZuT25FcnJvcik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aGFuZGxlcnMgPSB7XG5cdFx0b25UYWJsZUNvbnRleHRDaGFuZ2UodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIsIG9FdmVudDogYW55KSB7XG5cdFx0XHRjb25zdCBvU291cmNlID0gb0V2ZW50LmdldFNvdXJjZSgpO1xuXHRcdFx0bGV0IG9UYWJsZTogYW55O1xuXHRcdFx0dGhpcy5fZmluZFRhYmxlcygpLnNvbWUoZnVuY3Rpb24gKF9vVGFibGU6IGFueSkge1xuXHRcdFx0XHRpZiAoX29UYWJsZS5nZXRSb3dCaW5kaW5nKCkgPT09IG9Tb3VyY2UpIHtcblx0XHRcdFx0XHRvVGFibGUgPSBfb1RhYmxlO1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0pO1xuXG5cdFx0XHRjb25zdCBvQ3VycmVudEFjdGlvblByb21pc2UgPSB0aGlzLl9lZGl0Rmxvdy5nZXRDdXJyZW50QWN0aW9uUHJvbWlzZSgpO1xuXHRcdFx0aWYgKG9DdXJyZW50QWN0aW9uUHJvbWlzZSkge1xuXHRcdFx0XHRsZXQgYVRhYmxlQ29udGV4dHM6IGFueTtcblx0XHRcdFx0aWYgKG9UYWJsZS5nZXRUeXBlKCkuZ2V0TWV0YWRhdGEoKS5pc0EoXCJzYXAudWkubWRjLnRhYmxlLkdyaWRUYWJsZVR5cGVcIikpIHtcblx0XHRcdFx0XHRhVGFibGVDb250ZXh0cyA9IG9Tb3VyY2UuZ2V0Q29udGV4dHMoMCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YVRhYmxlQ29udGV4dHMgPSBvU291cmNlLmdldEN1cnJlbnRDb250ZXh0cygpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vaWYgY29udGV4dHMgYXJlIG5vdCBmdWxseSBsb2FkZWQgdGhlIGdldGNvbnRleHRzIGZ1bmN0aW9uIGFib3ZlIHdpbGwgdHJpZ2dlciBhIG5ldyBjaGFuZ2UgZXZlbnQgY2FsbFxuXHRcdFx0XHRpZiAoIWFUYWJsZUNvbnRleHRzWzBdKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG9DdXJyZW50QWN0aW9uUHJvbWlzZVxuXHRcdFx0XHRcdC50aGVuKChvQWN0aW9uUmVzcG9uc2U6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKCFvQWN0aW9uUmVzcG9uc2UgfHwgb0FjdGlvblJlc3BvbnNlLmNvbnRyb2xJZCAhPT0gb1RhYmxlLnNJZCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRjb25zdCBvQWN0aW9uRGF0YSA9IG9BY3Rpb25SZXNwb25zZS5vRGF0YTtcblx0XHRcdFx0XHRcdGNvbnN0IGFLZXlzID0gb0FjdGlvblJlc3BvbnNlLmtleXM7XG5cdFx0XHRcdFx0XHRsZXQgaU5ld0l0ZW1wID0gLTE7XG5cdFx0XHRcdFx0XHRhVGFibGVDb250ZXh0cy5maW5kKGZ1bmN0aW9uIChvVGFibGVDb250ZXh0OiBhbnksIGk6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvVGFibGVEYXRhID0gb1RhYmxlQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYkNvbXBhcmUgPSBhS2V5cy5ldmVyeShmdW5jdGlvbiAoc0tleTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG9UYWJsZURhdGFbc0tleV0gPT09IG9BY3Rpb25EYXRhW3NLZXldO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0aWYgKGJDb21wYXJlKSB7XG5cdFx0XHRcdFx0XHRcdFx0aU5ld0l0ZW1wID0gaTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYkNvbXBhcmU7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGlmIChpTmV3SXRlbXAgIT09IC0xKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGFEaWFsb2dzID0gSW5zdGFuY2VNYW5hZ2VyLmdldE9wZW5EaWFsb2dzKCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9EaWFsb2cgPVxuXHRcdFx0XHRcdFx0XHRcdGFEaWFsb2dzLmxlbmd0aCA+IDAgPyBhRGlhbG9ncy5maW5kKChkaWFsb2cpID0+IGRpYWxvZy5kYXRhKFwiRnVsbFNjcmVlbkRpYWxvZ1wiKSAhPT0gdHJ1ZSkgOiBudWxsO1xuXHRcdFx0XHRcdFx0XHRpZiAob0RpYWxvZykge1xuXHRcdFx0XHRcdFx0XHRcdC8vIGJ5IGRlc2lnbiwgYSBzYXAubS5kaWFsb2cgc2V0IHRoZSBmb2N1cyB0byB0aGUgcHJldmlvdXMgZm9jdXNlZCBlbGVtZW50IHdoZW4gY2xvc2luZy5cblx0XHRcdFx0XHRcdFx0XHQvLyB3ZSBzaG91bGQgd2FpdCBmb3IgdGhlIGRpYWxvZyB0byBiZSBjbG9zZSBiZWZvcmUgdG8gZm9jdXMgYW5vdGhlciBlbGVtZW50XG5cdFx0XHRcdFx0XHRcdFx0b0RpYWxvZy5hdHRhY2hFdmVudE9uY2UoXCJhZnRlckNsb3NlXCIsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdG9UYWJsZS5mb2N1c1JvdyhpTmV3SXRlbXAsIHRydWUpO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdG9UYWJsZS5mb2N1c1JvdyhpTmV3SXRlbXAsIHRydWUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHRoaXMuX2VkaXRGbG93LmRlbGV0ZUN1cnJlbnRBY3Rpb25Qcm9taXNlKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycjogYW55KSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJBbiBlcnJvciBvY2N1cnMgd2hpbGUgc2Nyb2xsaW5nIHRvIHRoZSBuZXdseSBjcmVhdGVkIEl0ZW06IFwiICsgZXJyKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdC8vIGZpcmUgTW9kZWxDb250ZXh0Q2hhbmdlIG9uIHRoZSBtZXNzYWdlIGJ1dHRvbiB3aGVuZXZlciB0aGUgdGFibGUgY29udGV4dCBjaGFuZ2VzXG5cdFx0XHRjb25zdCBvTWVzc2FnZUJ1dHRvbiA9IHRoaXMuZ2V0VmlldygpLmJ5SWQoXCJmZTo6Rm9vdGVyQmFyOjpNZXNzYWdlQnV0dG9uXCIpO1xuXHRcdFx0b01lc3NhZ2VCdXR0b24uZmlyZU1vZGVsQ29udGV4dENoYW5nZSgpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBJbnZva2VzIGFuIGFjdGlvbiAtIGJvdW5kL3VuYm91bmQgYW5kIHNldHMgdGhlIHBhZ2UgZGlydHkuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0gb1ZpZXdcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gc0FjdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGFjdGlvbiB0byBiZSBjYWxsZWRcblx0XHQgKiBAcGFyYW0ge21hcH0gW21QYXJhbWV0ZXJzXSBDb250YWlucyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG5cdFx0ICogQHBhcmFtIHtzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dH0gW21QYXJhbWV0ZXJzLmNvbnRleHRzXSBNYW5kYXRvcnkgZm9yIGEgYm91bmQgYWN0aW9uLCBlaXRoZXIgb25lIGNvbnRleHQgb3IgYW4gYXJyYXkgd2l0aCBjb250ZXh0cyBmb3Igd2hpY2ggdGhlIGFjdGlvbiBzaGFsbCBiZSBjYWxsZWRcblx0XHQgKiBAcGFyYW0ge3NhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YU1vZGVsfSBbbVBhcmFtZXRlcnMubW9kZWxdIE1hbmRhdG9yeSBmb3IgYW4gdW5ib3VuZCBhY3Rpb247IGFuIGluc3RhbmNlIG9mIGFuIE9EYXRhIFY0IG1vZGVsXG5cdFx0ICogQHJldHVybnMge1Byb21pc2V9XG5cdFx0ICogQHVpNS1yZXN0cmljdGVkXG5cdFx0ICogQGZpbmFsXG5cdFx0ICovXG5cdFx0b25DYWxsQWN0aW9uKG9WaWV3OiBhbnksIHNBY3Rpb25OYW1lOiBzdHJpbmcsIG1QYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHRcdGNvbnN0IG9Db250cm9sbGVyID0gb1ZpZXcuZ2V0Q29udHJvbGxlcigpO1xuXHRcdFx0Y29uc3QgdGhhdCA9IG9Db250cm9sbGVyO1xuXHRcdFx0cmV0dXJuIG9Db250cm9sbGVyLmVkaXRGbG93XG5cdFx0XHRcdC5pbnZva2VBY3Rpb24oc0FjdGlvbk5hbWUsIG1QYXJhbWV0ZXJzKVxuXHRcdFx0XHQudGhlbih0aGF0Ll9zaG93TWVzc2FnZVBvcG92ZXIuYmluZCh0aGF0LCB1bmRlZmluZWQpKVxuXHRcdFx0XHQuY2F0Y2godGhhdC5fc2hvd01lc3NhZ2VQb3BvdmVyLmJpbmQodGhhdCkpO1xuXHRcdH0sXG5cdFx0b25EYXRhUG9pbnRUaXRsZVByZXNzZWQob0NvbnRyb2xsZXI6IGFueSwgb1NvdXJjZTogYW55LCBvTWFuaWZlc3RPdXRib3VuZDogYW55LCBzQ29udHJvbENvbmZpZzogYW55LCBzQ29sbGVjdGlvblBhdGg6IGFueSkge1xuXHRcdFx0b01hbmlmZXN0T3V0Ym91bmQgPSB0eXBlb2Ygb01hbmlmZXN0T3V0Ym91bmQgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKG9NYW5pZmVzdE91dGJvdW5kKSA6IG9NYW5pZmVzdE91dGJvdW5kO1xuXHRcdFx0Y29uc3Qgb1RhcmdldEluZm8gPSBvTWFuaWZlc3RPdXRib3VuZFtzQ29udHJvbENvbmZpZ10sXG5cdFx0XHRcdGFTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBDb21tb25VdGlscy5nZXRTZW1hbnRpY09iamVjdE1hcHBpbmcob1RhcmdldEluZm8pLFxuXHRcdFx0XHRvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0ID0gb1NvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpLFxuXHRcdFx0XHRzTWV0YVBhdGggPSBvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0XG5cdFx0XHRcdFx0LmdldE1vZGVsKClcblx0XHRcdFx0XHQuZ2V0TWV0YU1vZGVsKClcblx0XHRcdFx0XHQuZ2V0TWV0YVBhdGgob0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdFx0bGV0IGFOYXZpZ2F0aW9uRGF0YSA9IG9Db250cm9sbGVyLl9nZXRDaGFydENvbnRleHREYXRhKG9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHQsIHNDb2xsZWN0aW9uUGF0aCk7XG5cdFx0XHRsZXQgYWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzO1xuXG5cdFx0XHRhTmF2aWdhdGlvbkRhdGEgPSBhTmF2aWdhdGlvbkRhdGEubWFwKGZ1bmN0aW9uIChvTmF2aWdhdGlvbkRhdGE6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdGRhdGE6IG9OYXZpZ2F0aW9uRGF0YSxcblx0XHRcdFx0XHRtZXRhUGF0aDogc01ldGFQYXRoICsgKHNDb2xsZWN0aW9uUGF0aCA/IFwiL1wiICsgc0NvbGxlY3Rpb25QYXRoIDogXCJcIilcblx0XHRcdFx0fTtcblx0XHRcdH0pO1xuXHRcdFx0aWYgKG9UYXJnZXRJbmZvICYmIG9UYXJnZXRJbmZvLnBhcmFtZXRlcnMpIHtcblx0XHRcdFx0Y29uc3Qgb1BhcmFtcyA9IG9UYXJnZXRJbmZvLnBhcmFtZXRlcnMgJiYgb0NvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5nZXRPdXRib3VuZFBhcmFtcyhvVGFyZ2V0SW5mby5wYXJhbWV0ZXJzKTtcblx0XHRcdFx0aWYgKE9iamVjdC5rZXlzKG9QYXJhbXMpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnMgPSBvUGFyYW1zO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAob1RhcmdldEluZm8gJiYgb1RhcmdldEluZm8uc2VtYW50aWNPYmplY3QgJiYgb1RhcmdldEluZm8uYWN0aW9uKSB7XG5cdFx0XHRcdG9Db250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ubmF2aWdhdGUob1RhcmdldEluZm8uc2VtYW50aWNPYmplY3QsIG9UYXJnZXRJbmZvLmFjdGlvbiwge1xuXHRcdFx0XHRcdG5hdmlnYXRpb25Db250ZXh0czogYU5hdmlnYXRpb25EYXRhLFxuXHRcdFx0XHRcdHNlbWFudGljT2JqZWN0TWFwcGluZzogYVNlbWFudGljT2JqZWN0TWFwcGluZyxcblx0XHRcdFx0XHRhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnM6IGFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVyc1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIFRyaWdnZXJzIGFuIG91dGJvdW5kIG5hdmlnYXRpb24gd2hlbiBhIHVzZXIgY2hvb3NlcyB0aGUgY2hldnJvbi5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7b2JqZWN0fSBvQ29udHJvbGxlclxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBzT3V0Ym91bmRUYXJnZXQgTmFtZSBvZiB0aGUgb3V0Ym91bmQgdGFyZ2V0IChuZWVkcyB0byBiZSBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdClcblx0XHQgKiBAcGFyYW0ge3NhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fSBvQ29udGV4dCBUaGUgY29udGV4dCB0aGF0IGNvbnRhaW5zIHRoZSBkYXRhIGZvciB0aGUgdGFyZ2V0IGFwcFxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBzQ3JlYXRlUGF0aCBDcmVhdGUgcGF0aCB3aGVuIHRoZSBjaGV2cm9uIGlzIGNyZWF0ZWQuXG5cdFx0ICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2hpY2ggaXMgcmVzb2x2ZWQgb25jZSB0aGUgbmF2aWdhdGlvbiBpcyB0cmlnZ2VyZWQgKD8/PyBtYXliZSBvbmx5IG9uY2UgZmluaXNoZWQ/KVxuXHRcdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHRcdCAqIEBmaW5hbFxuXHRcdCAqL1xuXHRcdG9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZChvQ29udHJvbGxlcjogT2JqZWN0UGFnZUNvbnRyb2xsZXIsIHNPdXRib3VuZFRhcmdldDogc3RyaW5nLCBvQ29udGV4dDogYW55LCBzQ3JlYXRlUGF0aDogc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gb0NvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5vbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQob0NvbnRyb2xsZXIsIHNPdXRib3VuZFRhcmdldCwgb0NvbnRleHQsIHNDcmVhdGVQYXRoKTtcblx0XHR9LFxuXG5cdFx0b25OYXZpZ2F0ZUNoYW5nZSh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlciwgb0V2ZW50OiBhbnkpIHtcblx0XHRcdC8vd2lsbCBiZSBjYWxsZWQgYWx3YXlzIHdoZW4gd2UgY2xpY2sgb24gYSBzZWN0aW9uIHRhYlxuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0dGhpcy5iU2VjdGlvbk5hdmlnYXRlZCA9IHRydWU7XG5cblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdG9PYmplY3RQYWdlLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKSAmJlxuXHRcdFx0XHQodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLnNlY3Rpb25MYXlvdXQgPT09IFwiVGFic1wiICYmXG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImVycm9yTmF2aWdhdGlvblNlY3Rpb25GbGFnXCIpID09PSBmYWxzZVxuXHRcdFx0KSB7XG5cdFx0XHRcdGNvbnN0IG9TdWJTZWN0aW9uID0gb0V2ZW50LmdldFBhcmFtZXRlcihcInN1YlNlY3Rpb25cIik7XG5cdFx0XHRcdHRoaXMuX3VwZGF0ZUZvY3VzSW5FZGl0TW9kZShbb1N1YlNlY3Rpb25dKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdG9uVmFyaWFudFNlbGVjdGVkOiBmdW5jdGlvbiAodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIpIHtcblx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHR9LFxuXHRcdG9uVmFyaWFudFNhdmVkOiBmdW5jdGlvbiAodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIpIHtcblx0XHRcdC8vVE9ETzogU2hvdWxkIHJlbW92ZSB0aGlzIHNldFRpbWVPdXQgb25jZSBWYXJpYW50IE1hbmFnZW1lbnQgcHJvdmlkZXMgYW4gYXBpIHRvIGZldGNoIHRoZSBjdXJyZW50IHZhcmlhbnQga2V5IG9uIHNhdmVcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0XHR9LCA1MDApO1xuXHRcdH0sXG5cdFx0bmF2aWdhdGVUb1N1YlNlY3Rpb246IGZ1bmN0aW9uIChvQ29udHJvbGxlcjogT2JqZWN0UGFnZUNvbnRyb2xsZXIsIHZEZXRhaWxDb25maWc6IGFueSkge1xuXHRcdFx0Y29uc3Qgb0RldGFpbENvbmZpZyA9IHR5cGVvZiB2RGV0YWlsQ29uZmlnID09PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZSh2RGV0YWlsQ29uZmlnKSA6IHZEZXRhaWxDb25maWc7XG5cdFx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IG9Db250cm9sbGVyLmdldFZpZXcoKS5ieUlkKFwiZmU6Ok9iamVjdFBhZ2VcIikgYXMgT2JqZWN0UGFnZUxheW91dDtcblx0XHRcdGxldCBvU2VjdGlvbjtcblx0XHRcdGxldCBvU3ViU2VjdGlvbjtcblx0XHRcdGlmIChvRGV0YWlsQ29uZmlnLnNlY3Rpb25JZCkge1xuXHRcdFx0XHRvU2VjdGlvbiA9IG9Db250cm9sbGVyLmdldFZpZXcoKS5ieUlkKG9EZXRhaWxDb25maWcuc2VjdGlvbklkKSBhcyBPYmplY3RQYWdlU2VjdGlvbjtcblx0XHRcdFx0b1N1YlNlY3Rpb24gPSAoXG5cdFx0XHRcdFx0b0RldGFpbENvbmZpZy5zdWJTZWN0aW9uSWRcblx0XHRcdFx0XHRcdD8gb0NvbnRyb2xsZXIuZ2V0VmlldygpLmJ5SWQob0RldGFpbENvbmZpZy5zdWJTZWN0aW9uSWQpXG5cdFx0XHRcdFx0XHQ6IG9TZWN0aW9uICYmIG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkgJiYgb1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKVswXVxuXHRcdFx0XHQpIGFzIE9iamVjdFBhZ2VTdWJTZWN0aW9uO1xuXHRcdFx0fSBlbHNlIGlmIChvRGV0YWlsQ29uZmlnLnN1YlNlY3Rpb25JZCkge1xuXHRcdFx0XHRvU3ViU2VjdGlvbiA9IG9Db250cm9sbGVyLmdldFZpZXcoKS5ieUlkKG9EZXRhaWxDb25maWcuc3ViU2VjdGlvbklkKSBhcyBPYmplY3RQYWdlU3ViU2VjdGlvbjtcblx0XHRcdFx0b1NlY3Rpb24gPSBvU3ViU2VjdGlvbiAmJiAob1N1YlNlY3Rpb24uZ2V0UGFyZW50KCkgYXMgT2JqZWN0UGFnZVNlY3Rpb24pO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFvU2VjdGlvbiB8fCAhb1N1YlNlY3Rpb24gfHwgIW9TZWN0aW9uLmdldFZpc2libGUoKSB8fCAhb1N1YlNlY3Rpb24uZ2V0VmlzaWJsZSgpKSB7XG5cdFx0XHRcdCgob0NvbnRyb2xsZXIuZ2V0VmlldygpLmdldE1vZGVsKFwic2FwLmZlLmkxOG5cIikgYXMgUmVzb3VyY2VNb2RlbCkuZ2V0UmVzb3VyY2VCdW5kbGUoKSBhcyBQcm9taXNlPFJlc291cmNlQnVuZGxlPilcblx0XHRcdFx0XHQudGhlbihmdW5jdGlvbiAob1Jlc291cmNlQnVuZGxlKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzVGl0bGUgPSBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChcblx0XHRcdFx0XHRcdFx0XCJDX1JPVVRJTkdfTkFWSUdBVElPTl9ESVNBQkxFRF9USVRMRVwiLFxuXHRcdFx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGUsXG5cdFx0XHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0XHRcdChvQ29udHJvbGxlci5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLmVudGl0eVNldFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihzVGl0bGUpO1xuXHRcdFx0XHRcdFx0TWVzc2FnZUJveC5lcnJvcihzVGl0bGUpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKGVycm9yKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9PYmplY3RQYWdlLnNjcm9sbFRvU2VjdGlvbihvU3ViU2VjdGlvbi5nZXRJZCgpKTtcblx0XHRcdFx0Ly8gdHJpZ2dlciBpYXBwIHN0YXRlIGNoYW5nZVxuXHRcdFx0XHRvT2JqZWN0UGFnZS5maXJlTmF2aWdhdGUoe1xuXHRcdFx0XHRcdHNlY3Rpb246IG9TZWN0aW9uLFxuXHRcdFx0XHRcdHN1YlNlY3Rpb246IG9TdWJTZWN0aW9uXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0b25DaGFydFNlbGVjdGlvbkNoYW5nZWQ6IGZ1bmN0aW9uIChvRXZlbnQ6IGFueSkge1xuXHRcdFx0Q2hhcnRSdW50aW1lLmZuVXBkYXRlQ2hhcnQob0V2ZW50KTtcblx0XHR9XG5cdH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IE9iamVjdFBhZ2VDb250cm9sbGVyO1xuIl19
|
|
1542
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk9iamVjdFBhZ2VDb250cm9sbGVyLmNvbnRyb2xsZXIudHMiXSwibmFtZXMiOlsiT2JqZWN0UGFnZUNvbnRyb2xsZXIiLCJkZWZpbmVVSTVDbGFzcyIsInVzaW5nRXh0ZW5zaW9uIiwiUGxhY2Vob2xkZXIiLCJFZGl0RmxvdyIsIlNoYXJlIiwib3ZlcnJpZGUiLCJTaGFyZU92ZXJyaWRlcyIsIkludGVybmFsRWRpdEZsb3ciLCJFZGl0Rmxvd092ZXJyaWRlcyIsIkludGVybmFsUm91dGluZyIsIkludGVybmFsUm91dGluZ092ZXJyaWRlIiwiUGFnaW5hdG9yIiwiUGFnaW5hdG9yT3ZlcnJpZGUiLCJNZXNzYWdlSGFuZGxlciIsIk1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGUiLCJJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSIsIkludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0TmF2aWdhdGlvbk1vZGUiLCJiSXNTdGlja3lFZGl0TW9kZSIsImdldFZpZXciLCJnZXRDb250cm9sbGVyIiwiZ2V0U3RpY2t5RWRpdE1vZGUiLCJ1bmRlZmluZWQiLCJWaWV3U3RhdGUiLCJWaWV3U3RhdGVPdmVycmlkZXMiLCJQYWdlUmVhZHkiLCJpc0NvbnRleHRFeHBlY3RlZCIsIk1hc3NFZGl0IiwicHVibGljRXh0ZW5zaW9uIiwiZmluYWxFeHRlbnNpb24iLCJleHRlbnNpYmxlIiwiT3ZlcnJpZGVFeGVjdXRpb24iLCJBZnRlciIsImhhbmRsZXJzIiwib25UYWJsZUNvbnRleHRDaGFuZ2UiLCJvRXZlbnQiLCJvU291cmNlIiwiZ2V0U291cmNlIiwib1RhYmxlIiwiX2ZpbmRUYWJsZXMiLCJzb21lIiwiX29UYWJsZSIsImdldFJvd0JpbmRpbmciLCJvQ3VycmVudEFjdGlvblByb21pc2UiLCJfZWRpdEZsb3ciLCJnZXRDdXJyZW50QWN0aW9uUHJvbWlzZSIsImFUYWJsZUNvbnRleHRzIiwiZ2V0VHlwZSIsImdldE1ldGFkYXRhIiwiaXNBIiwiZ2V0Q29udGV4dHMiLCJnZXRDdXJyZW50Q29udGV4dHMiLCJ0aGVuIiwib0FjdGlvblJlc3BvbnNlIiwiY29udHJvbElkIiwic0lkIiwib0FjdGlvbkRhdGEiLCJvRGF0YSIsImFLZXlzIiwia2V5cyIsImlOZXdJdGVtcCIsImZpbmQiLCJvVGFibGVDb250ZXh0IiwiaSIsIm9UYWJsZURhdGEiLCJnZXRPYmplY3QiLCJiQ29tcGFyZSIsImV2ZXJ5Iiwic0tleSIsImFEaWFsb2dzIiwiSW5zdGFuY2VNYW5hZ2VyIiwiZ2V0T3BlbkRpYWxvZ3MiLCJvRGlhbG9nIiwibGVuZ3RoIiwiZGlhbG9nIiwiZGF0YSIsImF0dGFjaEV2ZW50T25jZSIsImZvY3VzUm93IiwiZGVsZXRlQ3VycmVudEFjdGlvblByb21pc2UiLCJjYXRjaCIsImVyciIsIkxvZyIsImVycm9yIiwib01lc3NhZ2VCdXR0b24iLCJieUlkIiwiZmlyZU1vZGVsQ29udGV4dENoYW5nZSIsIm9uQ2FsbEFjdGlvbiIsIm9WaWV3Iiwic0FjdGlvbk5hbWUiLCJtUGFyYW1ldGVycyIsIm9Db250cm9sbGVyIiwidGhhdCIsImVkaXRGbG93IiwiaW52b2tlQWN0aW9uIiwiX3Nob3dNZXNzYWdlUG9wb3ZlciIsImJpbmQiLCJvbkRhdGFQb2ludFRpdGxlUHJlc3NlZCIsIm9NYW5pZmVzdE91dGJvdW5kIiwic0NvbnRyb2xDb25maWciLCJzQ29sbGVjdGlvblBhdGgiLCJKU09OIiwicGFyc2UiLCJvVGFyZ2V0SW5mbyIsImFTZW1hbnRpY09iamVjdE1hcHBpbmciLCJDb21tb25VdGlscyIsImdldFNlbWFudGljT2JqZWN0TWFwcGluZyIsIm9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsInNNZXRhUGF0aCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiZ2V0TWV0YVBhdGgiLCJnZXRQYXRoIiwiYU5hdmlnYXRpb25EYXRhIiwiX2dldENoYXJ0Q29udGV4dERhdGEiLCJhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnMiLCJtYXAiLCJvTmF2aWdhdGlvbkRhdGEiLCJtZXRhUGF0aCIsInBhcmFtZXRlcnMiLCJvUGFyYW1zIiwiX2ludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldE91dGJvdW5kUGFyYW1zIiwiT2JqZWN0Iiwic2VtYW50aWNPYmplY3QiLCJhY3Rpb24iLCJuYXZpZ2F0ZSIsIm5hdmlnYXRpb25Db250ZXh0cyIsInNlbWFudGljT2JqZWN0TWFwcGluZyIsIm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZCIsInNPdXRib3VuZFRhcmdldCIsIm9Db250ZXh0Iiwic0NyZWF0ZVBhdGgiLCJvbk5hdmlnYXRlQ2hhbmdlIiwiZ2V0RXh0ZW5zaW9uQVBJIiwidXBkYXRlQXBwU3RhdGUiLCJiU2VjdGlvbk5hdmlnYXRlZCIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsIm9PYmplY3RQYWdlIiwiX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sIiwiZ2V0UHJvcGVydHkiLCJnZXRWaWV3RGF0YSIsInNlY3Rpb25MYXlvdXQiLCJvU3ViU2VjdGlvbiIsImdldFBhcmFtZXRlciIsIl91cGRhdGVGb2N1c0luRWRpdE1vZGUiLCJvblZhcmlhbnRTZWxlY3RlZCIsIm9uVmFyaWFudFNhdmVkIiwic2V0VGltZW91dCIsIm5hdmlnYXRlVG9TdWJTZWN0aW9uIiwidkRldGFpbENvbmZpZyIsIm9EZXRhaWxDb25maWciLCJvU2VjdGlvbiIsInNlY3Rpb25JZCIsInN1YlNlY3Rpb25JZCIsImdldFN1YlNlY3Rpb25zIiwiZ2V0UGFyZW50IiwiZ2V0VmlzaWJsZSIsImdldFJlc291cmNlQnVuZGxlIiwib1Jlc291cmNlQnVuZGxlIiwic1RpdGxlIiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJlbnRpdHlTZXQiLCJNZXNzYWdlQm94Iiwic2Nyb2xsVG9TZWN0aW9uIiwiZ2V0SWQiLCJmaXJlTmF2aWdhdGUiLCJzZWN0aW9uIiwic3ViU2VjdGlvbiIsIm9uQ2hhcnRTZWxlY3Rpb25DaGFuZ2VkIiwiQ2hhcnRSdW50aW1lIiwiZm5VcGRhdGVDaGFydCIsIm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcyIsIkV4dGVuc2lvbkFQSSIsImV4dGVuc2lvbkFQSSIsIm9uSW5pdCIsInNldFByb3BlcnR5IiwidmlzaWJpbGl0eSIsIml0ZW1zIiwiX2dldEJhdGNoR3JvdXBzRm9yVmlldyIsInVzZU5ld0xhenlMb2FkaW5nIiwiZ2V0RW5hYmxlTGF6eUxvYWRpbmciLCJhdHRhY2hFdmVudCIsIl9oYW5kbGVTdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0Iiwib25FeGl0IiwiZGVzdHJveSIsIm9NZXNzYWdlUG9wb3ZlciIsImlzT3BlbiIsImNsb3NlIiwiaXNLZWVwQWxpdmUiLCJzZXRLZWVwQWxpdmUiLCJfZ2V0VGFibGVCaW5kaW5nIiwib25CZWZvcmVSZW5kZXJpbmciLCJQYWdlQ29udHJvbGxlciIsInByb3RvdHlwZSIsImFwcGx5Iiwib1ZpZXdEYXRhIiwicmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCIsIkNvbW1vbkhlbHBlciIsInNldE1ldGFNb2RlbCIsImdldEFwcENvbXBvbmVudCIsIm9uQWZ0ZXJSZW5kZXJpbmciLCJyZXNwb25zZSIsIm9FcnJvciIsIl9vbkJlZm9yZUJpbmRpbmciLCJhVGFibGVzIiwib0ludGVybmFsTW9kZWwiLCJhQmF0Y2hHcm91cHMiLCJpVmlld0xldmVsIiwidmlld0xldmVsIiwib0Zhc3RDcmVhdGlvblJvdyIsInB1c2giLCJiRHJhZnROYXZpZ2F0aW9uIiwiX2Nsb3NlU2lkZUNvbnRlbnQiLCJvcENvbnRleHQiLCJoYXNQZW5kaW5nQ2hhbmdlcyIsImdldEJpbmRpbmciLCJyZXNldENoYW5nZXMiLCJnZXRDcmVhdGlvblJvdyIsInNldEJpbmRpbmdDb250ZXh0IiwiZm5TY3JvbGxUb1ByZXNlbnRTZWN0aW9uIiwiaXNGaXJzdFJlbmRlcmluZyIsImJQZXJzaXN0T1BTY3JvbGwiLCJzZXRTZWxlY3RlZFNlY3Rpb24iLCJvRGVsZWdhdGVPbkJlZm9yZSIsImFkZEV2ZW50RGVsZWdhdGUiLCJwYWdlUmVhZHkiLCJyZW1vdmVFdmVudERlbGVnYXRlIiwib0JpbmRpbmciLCJsaXN0QmluZGluZyIsIm9QYWdpbmF0b3JDdXJyZW50Q29udGV4dCIsIm9CaW5kaW5nVG9Vc2UiLCJwYWdpbmF0b3IiLCJpbml0aWFsaXplIiwic0NvbnRleHRQYXRoIiwicmVwbGFjZSIsIk9EYXRhTGlzdEJpbmRpbmciLCJvTW9kZWwiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsIl9zZXRMaXN0QmluZGluZ0FzeW5jIiwiZGV0YWNoRXZlbnQiLCJhU2VjdGlvbnMiLCJnZXRTZWN0aW9ucyIsImJVc2VJY29uVGFiQmFyIiwiZ2V0VXNlSWNvblRhYkJhciIsImlTa2lwIiwiYklzSW5FZGl0TW9kZSIsImJFZGl0YWJsZUhlYWRlciIsImVkaXRhYmxlSGVhZGVyQ29udGVudCIsImlTZWN0aW9uIiwiYVN1YlNlY3Rpb25zIiwiaVN1YlNlY3Rpb24iLCJpc1Zpc2liaWxpdHlEeW5hbWljIiwicGxhY2Vob2xkZXIiLCJpc1BsYWNlaG9sZGVyRW5hYmxlZCIsInNob3dQbGFjZWhvbGRlciIsIm9OYXZDb250YWluZXIiLCJvQ29udGFpbmVyIiwiX2dldEZpcnN0Q2xpY2thYmxlRWxlbWVudCIsIm9GaXJzdENsaWNrYWJsZUVsZW1lbnQiLCJhQWN0aW9ucyIsImdldEhlYWRlclRpdGxlIiwiZ2V0QWN0aW9ucyIsIm9BY3Rpb24iLCJnZXRFbmFibGVkIiwiX2dldEZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZEZyb21TdWJTZWN0aW9uIiwiYUJsb2NrcyIsImdldEJsb2NrcyIsImJsb2NrIiwiYUZvcm1Db250YWluZXJzIiwiZ2V0Rm9ybUNvbnRhaW5lcnMiLCJnZXRDb250ZW50IiwiZm9ybUNvbnRhaW5lciIsImFGb3JtRWxlbWVudHMiLCJnZXRGb3JtRWxlbWVudHMiLCJmb3JtRWxlbWVudCIsImFGaWVsZHMiLCJnZXRGaWVsZHMiLCJnZXRSZXF1aXJlZCIsImdldFZhbHVlIiwiZGVidWciLCJvTWFuZGF0b3J5RmllbGQiLCJvRmllbGRUb0ZvY3VzIiwiY29udGVudCIsImdldENvbnRlbnRFZGl0IiwiX2dldEZpcnN0RWRpdGFibGVJbnB1dCIsImZvY3VzIiwiX29uQmFja05hdmlnYXRpb25JbkRyYWZ0IiwiZ2V0Um91dGVyUHJveHkiLCJjaGVja0lmQmFja0hhc1NhbWVDb250ZXh0IiwiaGlzdG9yeSIsImJhY2siLCJkcmFmdCIsInByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uIiwiRnVuY3Rpb24iLCJOYXZpZ2F0aW9uVHlwZSIsIkJhY2tOYXZpZ2F0aW9uIiwiX29uQWZ0ZXJCaW5kaW5nIiwib0JpbmRpbmdDb250ZXh0IiwiX3NpZGVFZmZlY3RzIiwiY2xlYXJQcm9wZXJ0aWVzU3RhdHVzIiwiYUlCTkFjdGlvbnMiLCJmb3JFYWNoIiwiZ2V0SUJOQWN0aW9ucyIsIm9UYWJsZVJvd0JpbmRpbmciLCJNb2RlbEhlbHBlciIsImlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsInJlbW92ZUNhY2hlc0FuZE1lc3NhZ2VzIiwib0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsInBhcnNlQ3VzdG9tRGF0YSIsIkRlbGVnYXRlVXRpbCIsImdldEN1c3RvbURhdGEiLCJhU2VsZWN0ZWRDb250ZXh0cyIsImdldFNlbGVjdGVkQ29udGV4dHMiLCJzZXRBY3Rpb25FbmFibGVtZW50IiwiZ2V0U2VtYW50aWNUYXJnZXRzRnJvbVBhZ2VNb2RlbCIsIm9PYmplY3RQYWdlVGl0bGUiLCJhSUJOSGVhZGVyQWN0aW9ucyIsImNvbmNhdCIsInVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5Iiwib0ZpbmFsVUlTdGF0ZSIsImVuYWJsZUZhc3RDcmVhdGlvblJvdyIsIm9MaXN0QmluZGluZyIsIm9GYXN0Q3JlYXRpb25MaXN0QmluZGluZyIsIm9GYXN0Q3JlYXRpb25Db250ZXh0IiwiYmluZExpc3QiLCJnZXRDb250ZXh0IiwiJCR1cGRhdGVHcm91cElkIiwiJCRncm91cElkIiwicmVmcmVzaEludGVybmFsIiwiY3JlYXRlIiwiY3JlYXRlZCIsInRyYWNlIiwiaGFuZGxlVGFibGVNb2RpZmljYXRpb25zIiwiZm5IYW5kbGVUYWJsZVBhdGNoRXZlbnRzIiwiZm5IYW5kbGVDaGFuZ2UiLCJkZXRhY2hDaGFuZ2UiLCJhdHRhY2hDaGFuZ2UiLCJjb21wdXRlRWRpdE1vZGUiLCJpc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZCIsImNvbm5lY3QiLCJvQ2FjaGUiLCJfdXBkYXRlUmVsYXRlZEFwcHMiLCJmblVwZGF0ZVJlbGF0ZWRBcHBzIiwiZGV0YWNoRGF0YVJlY2VpdmVkIiwiYXR0YWNoRGF0YVJlY2VpdmVkIiwiY3VycmVudEJpbmRpbmciLCJoYW5kbGVQYXRjaFNlbnQiLCJUYWJsZVV0aWxzIiwid2hlbkJvdW5kIiwiX3RyaWdnZXJWaXNpYmxlU3ViU2VjdGlvbnNFdmVudHMiLCJvblBhZ2VSZWFkeSIsInNldEZvY3VzIiwiaXNJbkRpc3BsYXlNb2RlIiwib1NlbGVjdGVkU2VjdGlvbiIsIkNvcmUiLCJnZXRTZWxlY3RlZFNlY3Rpb24iLCJiSXNTdGlja3lNb2RlIiwib0FwcENvbXBvbmVudCIsImdldFNoZWxsU2VydmljZXMiLCJzZXRCYWNrTmF2aWdhdGlvbiIsImdldEFwcFN0YXRlSGFuZGxlciIsImFwcGx5QXBwU3RhdGUiLCJmb3JjZUZvY3VzIiwiRXJyb3IiLCJfY2hlY2tEYXRhUG9pbnRUaXRsZUZvckV4dGVybmFsTmF2aWdhdGlvbiIsIl9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbiIsIm9PYmplY3RQYWdlU3VidGl0bGUiLCJvQ3VzdG9tRGF0YSIsImdldEtleSIsIm9UaXRsZUluZm8iLCJ0aXRsZSIsInN1YnRpdGxlIiwiaW50ZW50IiwiaWNvbiIsIl9leGVjdXRlSGVhZGVyU2hvcnRjdXQiLCJzQnV0dG9uSWQiLCJvQnV0dG9uIiwib0VsZW1lbnQiLCJmaXJlQnV0dG9uUHJlc3MiLCJfZXhlY3V0ZUZvb3RlclNob3J0Y3V0IiwiZ2V0Rm9vdGVyIiwiZ2V0TmFtZSIsIl9leGVjdXRlVGFiU2hvcnRDdXQiLCJvRXhlY3V0aW9uIiwiaVNlY3Rpb25JbmRleE1heCIsInNDb21tYW5kIiwiZ2V0Q29tbWFuZCIsIm5ld1NlY3Rpb24iLCJpU2VsZWN0ZWRTZWN0aW9uSW5kZXgiLCJpbmRleE9mU2VjdGlvbiIsIl9nZXRGb290ZXJWaXNpYmlsaXR5Iiwic1ZpZXdJZCIsInNhcCIsInVpIiwiZ2V0Q29yZSIsImdldE1lc3NhZ2VNYW5hZ2VyIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsIm9NZXNzYWdlIiwidmFsaWRhdGlvbiIsInR5cGUiLCJ0YXJnZXQiLCJpbmRleE9mIiwib1JldCIsInJvb3RWaWV3Q29udHJvbGxlciIsImdldFJvb3RWaWV3Q29udHJvbGxlciIsImN1cnJlbnRQYWdlVmlldyIsImlzRmNsRW5hYmxlZCIsImdldFJpZ2h0bW9zdFZpZXciLCJnZXRSb290Q29udGFpbmVyIiwiZ2V0Q3VycmVudFBhZ2UiLCJvSXRlbUJpbmRpbmciLCJnZXRMZW5ndGgiLCJzZXRWaXNpYmxlIiwib3BlbkJ5IiwiX2VkaXREb2N1bWVudCIsIkJ1c3lMb2NrZXIiLCJsb2NrIiwiZWRpdERvY3VtZW50IiwiZmluYWxseSIsInVubG9jayIsIl9zYXZlRG9jdW1lbnQiLCJhV2FpdENyZWF0ZURvY3VtZW50cyIsImJFeGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yIiwiY3JlYXRpb25Nb2RlIiwiY3JlYXRpb25Sb3ciLCJjcmVhdGVBdEVuZCIsImJDcmVhdGVEb2N1bWVudCIsImJTa2lwU2lkZUVmZmVjdHMiLCJjcmVhdGVEb2N1bWVudCIsIlByb21pc2UiLCJhbGwiLCJhQmluZGluZ3MiLCJiaW5kaW5ncyIsInNhdmVEb2N1bWVudCIsInJlamVjdCIsImlzTG9ja2VkIiwiX21hbmFnZUNvbGxhYm9yYXRpb24iLCJvcGVuTWFuYWdlRGlhbG9nIiwiX3Nob3dDb2xsYWJvcmF0aW9uVXNlckRldGFpbHMiLCJldmVudCIsInNob3dVc2VyRGV0YWlscyIsIl9jYW5jZWxEb2N1bWVudCIsImNhbmNlbEJ1dHRvbiIsImNhbmNlbERvY3VtZW50IiwiX2FwcGx5RG9jdW1lbnQiLCJhcHBseURvY3VtZW50IiwiX3Nob3dTd2l0Y2hEcmFmdEFuZEFjdGl2ZVBvcG92ZXIiLCJ2aWV3Iiwic291cmNlIiwiZnJhZ21lbnROYW1lIiwic3dpdGNoRHJhZnRBbmRBY3RpdmVQb3BPdmVyIiwibG9jYWxUaGlzTW9kZWwiLCJKU09OTW9kZWwiLCJwcmVwcm9jZXNzb3JTZXR0aW5ncyIsImJpbmRpbmdDb250ZXh0cyIsIm1vZGVscyIsInBvcG92ZXJGcmFnbWVudCIsIlhNTFRlbXBsYXRlUHJvY2Vzc29yIiwibG9hZFRlbXBsYXRlIiwicmVzb2x2ZSIsIlhNTFByZXByb2Nlc3NvciIsInByb2Nlc3MiLCJuYW1lIiwiZnJhZ21lbnQiLCJGcmFnbWVudCIsImxvYWQiLCJkZWZpbml0aW9uIiwiY29udHJvbGxlciIsInBvcG92ZXIiLCJhZGREZXBlbmRlbnQiLCJzZXRNb2RlbCIsInNldFBsYWNlbWVudCIsImF0dGFjaEFmdGVyT3BlbiIsImNvbnRleHQiLCJpc0FjdGl2ZUVudGl0eSIsIklzQWN0aXZlRW50aXR5Iiwic3dpdGNoRHJhZnRBbmRBY3RpdmVPcHRpb25zTGlzdCIsImVsZW1lbnQiLCJsaXN0SXRlbVRvRm9jdXMiLCJnZXRJdGVtcyIsIl9zd2l0Y2hEcmFmdEFuZEFjdGl2ZVBvcG92ZXJMaXN0U2VsZWN0Iiwic2VsZWN0ZWRJdGVtS2V5IiwidG9nZ2xlRHJhZnRBY3RpdmUiLCJyZXNvbHZlU3RyaW5ndG9Cb29sZWFuIiwidXBkYXRlUmVsYXRlZEFwcHNEZXRhaWxzIiwiX2ZpbmRUYWJsZUluU3ViU2VjdGlvbiIsImFQYXJlbnRFbGVtZW50IiwiYVN1YnNlY3Rpb24iLCJhU3ViU2VjdGlvblRhYmxlcyIsImdldE1haW5Db250ZW50IiwiZ3JpZFRhYmxlIiwiaGFzU3R5bGVDbGFzcyIsImFkZFN0eWxlQ2xhc3MiLCJ0YWJsZSIsInNldFJvd0NvdW50IiwiX2dldEFsbFN1YlNlY3Rpb25zIiwiX2dldEFsbEJsb2NrcyIsImdldE1vcmVCbG9ja3MiLCJvQmxvY2siLCJvQ29udGVudCIsInNldFNob3dTaWRlQ29udGVudCIsIm9DaGFydENvbnRleHQiLCJzQ2hhcnRQYXRoIiwib0NvbnRleHREYXRhIiwib0NoYXJ0Q29udGV4dERhdGEiLCJfc2Nyb2xsVGFibGVzVG9Sb3ciLCJzUm93UGF0aCIsIlRhYmxlU2Nyb2xsZXIiLCJzY3JvbGxUYWJsZVRvUm93IiwiX21lcmdlTXVsdGlwbGVDb250ZXh0cyIsIm9QYWdlQ29udGV4dCIsImFMaW5lQ29udGV4dCIsImFBdHRyaWJ1dGVzIiwiYVBhZ2VBdHRyaWJ1dGVzIiwic01ldGFQYXRoTGluZSIsInNQYXRoTGluZSIsInNQYWdlUGF0aCIsIm9NZXRhTW9kZWwiLCJzTWV0YVBhdGhQYWdlIiwib1NpbmdsZUNvbnRleHQiLCJjb250ZXh0RGF0YSIsInJlbW92ZVNlbnNpdGl2ZURhdGEiLCJvUGFnZUxldmVsU1YiLCJhZGRQYWdlQ29udGV4dFRvU2VsZWN0aW9uVmFyaWFudCIsIlNlbGVjdGlvblZhcmlhbnQiLCJzZWxlY3Rpb25WYXJpYW50IiwiYXR0cmlidXRlcyIsIm9Db25maWd1cmF0aW9ucyIsImNvbnRyb2xDb25maWd1cmF0aW9uIiwiYUNvbmZpZ3VyYXRpb25zIiwib0NvbmZpZ3VyYXRpb24iLCJyZXF1ZXN0R3JvdXBJZCIsIl9zZXRCcmVhZGNydW1iTGlua3MiLCJzTmV3UGF0aCIsImFQYXRoUGFydHMiLCJzcGxpdCIsInNQYXRoIiwiaVNraXBQYXJhbWV0ZXJpemVkIiwic2hpZnQiLCJzcGxpY2UiLCJzUGF0aFBhcnQiLCJvUm9vdFZpZXdDb250cm9sbGVyIiwic1BhcmFtZXRlclBhdGgiLCJiUmVzdWx0Q29udGV4dCIsInBXYWl0Rm9yVGl0bGVIaWVhcmNoeUluZm8iLCJnZXRUaXRsZUluZm9Gcm9tUGF0aCIsIm9UaXRsZUhpZWFyY2h5SW5mbyIsImlkeCIsIm9MaW5rIiwiZ2V0TGlua3MiLCJMaW5rIiwic2V0VGV4dCIsInNldEhyZWYiLCJhZGRMaW5rIiwib0RhdGFQb2ludHMiLCJnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJnZXRSb3V0aW5nU2VydmljZSIsImdldE91dGJvdW5kcyIsIm9TaGVsbFNlcnZpY2VzIiwicmVxdWVzdE9iamVjdCIsImZuR2V0TGlua3MiLCJmbk9uRXJyb3IiLCJmblNldExpbmtFbmFibGVtZW50IiwiaWQiLCJhU3VwcG9ydGVkTGlua3MiLCJzTGlua0lkIiwic3VwcG9ydGVkIiwib1BhZ2VEYXRhIiwib0RhdGFQb2ludCIsIm9MaW5rQ29udGV4dCIsIm9MaW5rRGF0YSIsIm9NaXhlZENvbnRleHQiLCJtZXJnZSIsIml0ZW0iLCJvTWFwcGluZyIsInNNYWluUHJvcGVydHkiLCJzTWFwcGVkUHJvcGVydHkiLCJoYXNPd25Qcm9wZXJ0eSIsIm9OZXdNYXBwaW5nIiwiaXNOYXZpZ2F0aW9uU3VwcG9ydGVkIiwicGFyYW1zIiwiYUxpbmtzIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUE4RE1BLG9CLFdBRExDLGNBQWMsQ0FBQyxrREFBRCxDLFVBR2JDLGNBQWMsQ0FBQ0MsV0FBRCxDLFVBRWRELGNBQWMsQ0FBQ0UsUUFBRCxDLFVBRWRGLGNBQWMsQ0FBQ0csS0FBSyxDQUFDQyxRQUFOLENBQWVDLGNBQWYsQ0FBRCxDLFVBRWRMLGNBQWMsQ0FBQ00sZ0JBQWdCLENBQUNGLFFBQWpCLENBQTBCRyxpQkFBMUIsQ0FBRCxDLFVBRWRQLGNBQWMsQ0FBQ1EsZUFBZSxDQUFDSixRQUFoQixDQUF5QkssdUJBQXpCLENBQUQsQyxVQUVkVCxjQUFjLENBQUNVLFNBQVMsQ0FBQ04sUUFBVixDQUFtQk8saUJBQW5CLENBQUQsQyxVQUVkWCxjQUFjLENBQUNZLGNBQWMsQ0FBQ1IsUUFBZixDQUF3QlMsc0JBQXhCLENBQUQsQyxVQUVkYixjQUFjLENBQUNjLHFCQUFxQixDQUFDVixRQUF0QixDQUErQlcsNkJBQS9CLENBQUQsQyxXQUVkZixjQUFj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LFdBWkYsRUFhRXhmLEtBYkYsQ0FhUW9lLFNBYlI7QUF0Q29EOztBQUNyRCxhQUFLLElBQU01ZixHQUFYLElBQWtCcWYsV0FBbEIsRUFBK0I7QUFBQSwyQkFBcEJyZixHQUFvQjs7QUFBQSxtQ0FNN0I7QUE2Q0Q7QUFDRDtBQUNELEs7OztJQXJxQ2lDMEksYzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztTQW8zQ3BCbk0sb0IiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgbWVyZ2UgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBCdXN5TG9ja2VyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgeyBjb25uZWN0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NvbGxhYm9yYXRpb24vQWN0aXZpdHlTeW5jXCI7XG5pbXBvcnQgeyBvcGVuTWFuYWdlRGlhbG9nLCBzaG93VXNlckRldGFpbHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvY29sbGFib3JhdGlvbi9NYW5hZ2VcIjtcbmltcG9ydCBFZGl0RmxvdyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvRWRpdEZsb3dcIjtcbmltcG9ydCBkcmFmdCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvZHJhZnRcIjtcbmltcG9ydCBJbnRlbnRCYXNlZE5hdmlnYXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IEludGVybmFsRWRpdEZsb3cgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsRWRpdEZsb3dcIjtcbmltcG9ydCBJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBJbnRlcm5hbFJvdXRpbmcgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsUm91dGluZ1wiO1xuaW1wb3J0IE1hc3NFZGl0IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9NYXNzRWRpdFwiO1xuaW1wb3J0IE1lc3NhZ2VIYW5kbGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IFBhZ2VSZWFkeSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvUGFnZVJlYWR5XCI7XG5pbXBvcnQgUGFnaW5hdG9yIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QYWdpbmF0b3JcIjtcbmltcG9ydCBQbGFjZWhvbGRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvUGxhY2Vob2xkZXJcIjtcbmltcG9ydCBTaGFyZSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvU2hhcmVcIjtcbmltcG9ydCBWaWV3U3RhdGUgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1ZpZXdTdGF0ZVwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIGV4dGVuc2libGUsIGZpbmFsRXh0ZW5zaW9uLCBwdWJsaWNFeHRlbnNpb24sIHVzaW5nRXh0ZW5zaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIsIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IENoYXJ0UnVudGltZSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jaGFydC9DaGFydFJ1bnRpbWVcIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgRGVsZWdhdGVVdGlsIGZyb20gXCJzYXAvZmUvbWFjcm9zL0RlbGVnYXRlVXRpbFwiO1xuaW1wb3J0IFRhYmxlVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVXRpbHNcIjtcbmltcG9ydCBTZWxlY3Rpb25WYXJpYW50IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9TZWxlY3Rpb25WYXJpYW50XCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIEV4dGVuc2lvbkFQSSwgZGVmYXVsdCBhcyBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJIH0gZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9FeHRlbnNpb25BUElcIjtcbmltcG9ydCBSb290Q29udGFpbmVyQmFzZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvUm9vdENvbnRhaW5lci9jb250cm9sbGVyL1Jvb3RDb250YWluZXJCYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IEVkaXRGbG93T3ZlcnJpZGVzIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL1Jvb3RDb250YWluZXIvb3ZlcnJpZGVzL0VkaXRGbG93XCI7XG5pbXBvcnQgVGFibGVTY3JvbGxlciBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9UYWJsZVNjcm9sbGVyXCI7XG5pbXBvcnQgSW5zdGFuY2VNYW5hZ2VyIGZyb20gXCJzYXAvbS9JbnN0YW5jZU1hbmFnZXJcIjtcbmltcG9ydCBMaW5rIGZyb20gXCJzYXAvbS9MaW5rXCI7XG5pbXBvcnQgTWVzc2FnZUJveCBmcm9tIFwic2FwL20vTWVzc2FnZUJveFwiO1xuaW1wb3J0IFBvcG92ZXIgZnJvbSBcInNhcC9tL1BvcG92ZXJcIjtcbmltcG9ydCBTZWxlY3RMaXN0IGZyb20gXCJzYXAvbS9TZWxlY3RMaXN0XCI7XG5pbXBvcnQgRXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IENvcmUgZnJvbSBcInNhcC91aS9jb3JlL0NvcmVcIjtcbmltcG9ydCBGcmFnbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRnJhZ21lbnRcIjtcbmltcG9ydCBJdGVtIGZyb20gXCJzYXAvdWkvY29yZS9JdGVtXCI7XG5pbXBvcnQgT3ZlcnJpZGVFeGVjdXRpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9PdmVycmlkZUV4ZWN1dGlvblwiO1xuaW1wb3J0IFhNTFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9YTUxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCBYTUxUZW1wbGF0ZVByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvWE1MVGVtcGxhdGVQcm9jZXNzb3JcIjtcbmltcG9ydCBCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvQmluZGluZ1wiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9yZXNvdXJjZS9SZXNvdXJjZU1vZGVsXCI7XG5pbXBvcnQgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZSBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZVwiO1xuaW1wb3J0IE9iamVjdFBhZ2VMYXlvdXQgZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VMYXlvdXRcIjtcbmltcG9ydCBPYmplY3RQYWdlU2VjdGlvbiBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZVNlY3Rpb25cIjtcbmltcG9ydCBPYmplY3RQYWdlU3ViU2VjdGlvbiBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZVN1YlNlY3Rpb25cIjtcbmltcG9ydCBJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxSb3V0aW5nT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL0ludGVybmFsUm91dGluZ1wiO1xuaW1wb3J0IE1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgUGFnaW5hdG9yT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL1BhZ2luYXRvclwiO1xuaW1wb3J0IFNoYXJlT3ZlcnJpZGVzIGZyb20gXCIuL292ZXJyaWRlcy9TaGFyZVwiO1xuaW1wb3J0IFZpZXdTdGF0ZU92ZXJyaWRlcyBmcm9tIFwiLi9vdmVycmlkZXMvVmlld1N0YXRlXCI7XG5cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5PYmplY3RQYWdlQ29udHJvbGxlclwiKVxuY2xhc3MgT2JqZWN0UGFnZUNvbnRyb2xsZXIgZXh0ZW5kcyBQYWdlQ29udHJvbGxlciB7XG5cdG9WaWV3ITogYW55O1xuXHRAdXNpbmdFeHRlbnNpb24oUGxhY2Vob2xkZXIpXG5cdHBsYWNlaG9sZGVyITogUGxhY2Vob2xkZXI7XG5cdEB1c2luZ0V4dGVuc2lvbihFZGl0Rmxvdylcblx0ZWRpdEZsb3chOiBFZGl0Rmxvdztcblx0QHVzaW5nRXh0ZW5zaW9uKFNoYXJlLm92ZXJyaWRlKFNoYXJlT3ZlcnJpZGVzKSlcblx0c2hhcmUhOiBTaGFyZTtcblx0QHVzaW5nRXh0ZW5zaW9uKEludGVybmFsRWRpdEZsb3cub3ZlcnJpZGUoRWRpdEZsb3dPdmVycmlkZXMpKVxuXHRfZWRpdEZsb3chOiBJbnRlcm5hbEVkaXRGbG93O1xuXHRAdXNpbmdFeHRlbnNpb24oSW50ZXJuYWxSb3V0aW5nLm92ZXJyaWRlKEludGVybmFsUm91dGluZ092ZXJyaWRlKSlcblx0X3JvdXRpbmchOiBJbnRlcm5hbFJvdXRpbmc7XG5cdEB1c2luZ0V4dGVuc2lvbihQYWdpbmF0b3Iub3ZlcnJpZGUoUGFnaW5hdG9yT3ZlcnJpZGUpKVxuXHRwYWdpbmF0b3IhOiBQYWdpbmF0b3I7XG5cdEB1c2luZ0V4dGVuc2lvbihNZXNzYWdlSGFuZGxlci5vdmVycmlkZShNZXNzYWdlSGFuZGxlck92ZXJyaWRlKSlcblx0bWVzc2FnZUhhbmRsZXIhOiBNZXNzYWdlSGFuZGxlcjtcblx0QHVzaW5nRXh0ZW5zaW9uKEludGVudEJhc2VkTmF2aWdhdGlvbi5vdmVycmlkZShJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSkpXG5cdGludGVudEJhc2VkTmF2aWdhdGlvbiE6IEludGVudEJhc2VkTmF2aWdhdGlvbjtcblx0QHVzaW5nRXh0ZW5zaW9uKFxuXHRcdEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uLm92ZXJyaWRlKHtcblx0XHRcdGdldE5hdmlnYXRpb25Nb2RlOiBmdW5jdGlvbiAodGhpczogSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdFx0Y29uc3QgYklzU3RpY2t5RWRpdE1vZGUgPVxuXHRcdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgT2JqZWN0UGFnZUNvbnRyb2xsZXIpLmdldFN0aWNreUVkaXRNb2RlICYmXG5cdFx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBPYmplY3RQYWdlQ29udHJvbGxlcikuZ2V0U3RpY2t5RWRpdE1vZGUoKTtcblx0XHRcdFx0cmV0dXJuIGJJc1N0aWNreUVkaXRNb2RlID8gXCJleHBsYWNlXCIgOiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fSlcblx0KVxuXHRfaW50ZW50QmFzZWROYXZpZ2F0aW9uITogSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cdEB1c2luZ0V4dGVuc2lvbihWaWV3U3RhdGUub3ZlcnJpZGUoVmlld1N0YXRlT3ZlcnJpZGVzKSlcblx0dmlld1N0YXRlITogVmlld1N0YXRlO1xuXHRAdXNpbmdFeHRlbnNpb24oXG5cdFx0UGFnZVJlYWR5Lm92ZXJyaWRlKHtcblx0XHRcdGlzQ29udGV4dEV4cGVjdGVkOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pXG5cdClcblx0cGFnZVJlYWR5ITogUGFnZVJlYWR5O1xuXHRAdXNpbmdFeHRlbnNpb24oTWFzc0VkaXQpXG5cdG1hc3NFZGl0ITogTWFzc0VkaXQ7XG5cdHByaXZhdGUgbUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzPzogUmVjb3JkPHN0cmluZywgT2JqZWN0UGFnZUV4dGVuc2lvbkFQST47XG5cdHByb3RlY3RlZCBleHRlbnNpb25BUEk/OiBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJO1xuXHRwcml2YXRlIG9SZXNvdXJjZUJ1bmRsZT86IFJlc291cmNlQnVuZGxlO1xuXHRwcml2YXRlIGJTZWN0aW9uTmF2aWdhdGVkPzogYm9vbGVhbjtcblx0cHJpdmF0ZSBzd2l0Y2hEcmFmdEFuZEFjdGl2ZVBvcE92ZXI/OiBQb3BvdmVyO1xuXHRwcml2YXRlIGN1cnJlbnRCaW5kaW5nPzogQmluZGluZztcblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Z2V0RXh0ZW5zaW9uQVBJKHNJZD86IHN0cmluZyk6IEV4dGVuc2lvbkFQSSB7XG5cdFx0aWYgKHNJZCkge1xuXHRcdFx0Ly8gdG8gYWxsb3cgbG9jYWwgSUQgdXNhZ2UgZm9yIGN1c3RvbSBwYWdlcyB3ZSdsbCBjcmVhdGUvcmV0dXJuIG93biBpbnN0YW5jZXMgZm9yIGN1c3RvbSBzZWN0aW9uc1xuXHRcdFx0dGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXMgPSB0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcyB8fCB7fTtcblxuXHRcdFx0aWYgKCF0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdKSB7XG5cdFx0XHRcdHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF0gPSBuZXcgRXh0ZW5zaW9uQVBJKHRoaXMsIHNJZCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKCF0aGlzLmV4dGVuc2lvbkFQSSkge1xuXHRcdFx0XHR0aGlzLmV4dGVuc2lvbkFQSSA9IG5ldyBFeHRlbnNpb25BUEkodGhpcyk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcy5leHRlbnNpb25BUEk7XG5cdFx0fVxuXHR9XG5cblx0b25Jbml0KCkge1xuXHRcdHN1cGVyLm9uSW5pdCgpO1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblxuXHRcdC8vIFNldHRpbmcgZGVmYXVsdHMgb2YgaW50ZXJuYWwgbW9kZWwgY29udGV4dFxuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZXh0ZXJuYWxOYXZpZ2F0aW9uQ29udGV4dFwiLCB7IFwicGFnZVwiOiB0cnVlIH0pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInJlbGF0ZWRBcHBzXCIsIHtcblx0XHRcdHZpc2liaWxpdHk6IGZhbHNlLFxuXHRcdFx0aXRlbXM6IG51bGxcblx0XHR9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJiYXRjaEdyb3Vwc1wiLCB0aGlzLl9nZXRCYXRjaEdyb3Vwc0ZvclZpZXcoKSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZXJyb3JOYXZpZ2F0aW9uU2VjdGlvbkZsYWdcIiwgZmFsc2UpO1xuXHRcdGlmICghKHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55KS51c2VOZXdMYXp5TG9hZGluZyAmJiAob09iamVjdFBhZ2UgYXMgYW55KS5nZXRFbmFibGVMYXp5TG9hZGluZygpKSB7XG5cdFx0XHQvL0F0dGFjaGluZyB0aGUgZXZlbnQgdG8gbWFrZSB0aGUgc3Vic2VjdGlvbiBjb250ZXh0IGJpbmRpbmcgYWN0aXZlIHdoZW4gaXQgaXMgdmlzaWJsZS5cblx0XHRcdG9PYmplY3RQYWdlLmF0dGFjaEV2ZW50KFwic3ViU2VjdGlvbkVudGVyZWRWaWV3UG9ydFwiLCB0aGlzLl9oYW5kbGVTdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0LmJpbmQodGhpcykpO1xuXHRcdH1cblx0fVxuXG5cdG9uRXhpdCgpIHtcblx0XHRpZiAodGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXMpIHtcblx0XHRcdGZvciAoY29uc3Qgc0lkIG9mIE9iamVjdC5rZXlzKHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzKSkge1xuXHRcdFx0XHR0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdICYmIHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF0uZGVzdHJveSgpO1xuXHRcdFx0fVxuXHRcdFx0ZGVsZXRlIHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzO1xuXHRcdH1cblx0XHR0aGlzLmV4dGVuc2lvbkFQSSAmJiB0aGlzLmV4dGVuc2lvbkFQSS5kZXN0cm95KCk7XG5cdFx0ZGVsZXRlIHRoaXMuZXh0ZW5zaW9uQVBJO1xuXG5cdFx0Y29uc3Qgb01lc3NhZ2VCdXR0b24gPSB0aGlzLmdldFZpZXcoKS5ieUlkKFwiZmU6OkZvb3RlckJhcjo6TWVzc2FnZUJ1dHRvblwiKSxcblx0XHRcdG9NZXNzYWdlUG9wb3ZlciA9IG9NZXNzYWdlQnV0dG9uID8gKG9NZXNzYWdlQnV0dG9uIGFzIGFueSkub01lc3NhZ2VQb3BvdmVyIDogbnVsbDtcblx0XHRpZiAob01lc3NhZ2VQb3BvdmVyICYmIG9NZXNzYWdlUG9wb3Zlci5pc09wZW4oKSkge1xuXHRcdFx0b01lc3NhZ2VQb3BvdmVyLmNsb3NlKCk7XG5cdFx0fVxuXHRcdC8vd2hlbiBleGl0aW5nIHdlIHNldCBrZWVwQWxpdmUgY29udGV4dCB0byBmYWxzZVxuXHRcdGNvbnN0IG9Db250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0O1xuXHRcdGlmIChvQ29udGV4dCAmJiBvQ29udGV4dC5pc0tlZXBBbGl2ZSgpKSB7XG5cdFx0XHRvQ29udGV4dC5zZXRLZWVwQWxpdmUoZmFsc2UpO1xuXHRcdH1cblx0fVxuXG5cdF9nZXRUYWJsZUJpbmRpbmcob1RhYmxlOiBhbnkpIHtcblx0XHRyZXR1cm4gb1RhYmxlICYmIG9UYWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdH1cblxuXHRvbkJlZm9yZVJlbmRlcmluZygpIHtcblx0XHRQYWdlQ29udHJvbGxlci5wcm90b3R5cGUub25CZWZvcmVSZW5kZXJpbmcuYXBwbHkodGhpcyk7XG5cdFx0Ly8gSW4gdGhlIHJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3Qgc2NlbmFyaW8gd2UgbmVlZCB0byBlbnN1cmUgaW4gY2FzZSBvZiByZWxvYWQvcmVmcmVzaCB0aGF0IHRoZSBtZXRhIG1vZGVsIGluIHRoZSBtZXRob2RlIHJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3Qgb2YgdGhlIEZpZWxkUnVudGltZSBpcyBhdmFpbGFibGVcblx0XHRpZiAodGhpcy5vVmlldy5vVmlld0RhdGEucmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCAmJiBDb21tb25IZWxwZXIuZ2V0TWV0YU1vZGVsKCkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Q29tbW9uSGVscGVyLnNldE1ldGFNb2RlbCh0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldE1ldGFNb2RlbCgpKTtcblx0XHR9XG5cdH1cblxuXHRvbkFmdGVyUmVuZGVyaW5nKCkge1xuXHRcdCgodGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJzYXAuZmUuaTE4blwiKSBhcyBSZXNvdXJjZU1vZGVsKS5nZXRSZXNvdXJjZUJ1bmRsZSgpIGFzIFByb21pc2U8UmVzb3VyY2VCdW5kbGU+KVxuXHRcdFx0LnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcblx0XHRcdFx0dGhpcy5vUmVzb3VyY2VCdW5kbGUgPSByZXNwb25zZTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJldHJpZXZpbmcgdGhlIHJlc291cmNlIGJ1bmRsZVwiLCBvRXJyb3IpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRfb25CZWZvcmVCaW5kaW5nKG9Db250ZXh0OiBhbnksIG1QYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHQvLyBUT0RPOiB3ZSBzaG91bGQgY2hlY2sgaG93IHRoaXMgY29tZXMgdG9nZXRoZXIgd2l0aCB0aGUgdHJhbnNhY3Rpb24gaGVscGVyLCBzYW1lIHRvIHRoZSBjaGFuZ2UgaW4gdGhlIGFmdGVyQmluZGluZ1xuXHRcdGNvbnN0IGFUYWJsZXMgPSB0aGlzLl9maW5kVGFibGVzKCksXG5cdFx0XHRvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkgYXMgT2JqZWN0UGFnZUxheW91dCxcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRvSW50ZXJuYWxNb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsLFxuXHRcdFx0YUJhdGNoR3JvdXBzID0gb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiYmF0Y2hHcm91cHNcIiksXG5cdFx0XHRpVmlld0xldmVsID0gKHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55KS52aWV3TGV2ZWw7XG5cdFx0bGV0IG9GYXN0Q3JlYXRpb25Sb3c7XG5cdFx0YUJhdGNoR3JvdXBzLnB1c2goXCIkYXV0b1wiKTtcblx0XHRpZiAobVBhcmFtZXRlcnMuYkRyYWZ0TmF2aWdhdGlvbiAhPT0gdHJ1ZSkge1xuXHRcdFx0dGhpcy5fY2xvc2VTaWRlQ29udGVudCgpO1xuXHRcdH1cblx0XHRjb25zdCBvcENvbnRleHQgPSBvT2JqZWN0UGFnZS5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQ7XG5cdFx0aWYgKFxuXHRcdFx0b3BDb250ZXh0ICYmXG5cdFx0XHRvcENvbnRleHQuaGFzUGVuZGluZ0NoYW5nZXMoKSAmJlxuXHRcdFx0IWFCYXRjaEdyb3Vwcy5zb21lKChvcENvbnRleHQuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5oYXNQZW5kaW5nQ2hhbmdlcy5iaW5kKG9wQ29udGV4dC5nZXRNb2RlbCgpKSlcblx0XHQpIHtcblx0XHRcdC8qIFx0SW4gY2FzZSB0aGVyZSBhcmUgcGVuZGluZyBjaGFuZ2VzIGZvciB0aGUgY3JlYXRpb24gcm93IGFuZCBubyBvdGhlcnMgd2UgbmVlZCB0byByZXNldCB0aGUgY2hhbmdlc1xuICAgIFx0XHRcdFx0XHRcdFRPRE86IHRoaXMgaXMganVzdCBhIHF1aWNrIHNvbHV0aW9uLCB0aGlzIG5lZWRzIHRvIGJlIHJld29ya2VkXG4gICAgXHRcdFx0XHQgXHQqL1xuXG5cdFx0XHRvcENvbnRleHQuZ2V0QmluZGluZygpLnJlc2V0Q2hhbmdlcygpO1xuXHRcdH1cblxuXHRcdC8vIEZvciBub3cgd2UgaGF2ZSB0byBzZXQgdGhlIGJpbmRpbmcgY29udGV4dCB0byBudWxsIGZvciBldmVyeSBmYXN0IGNyZWF0aW9uIHJvd1xuXHRcdC8vIFRPRE86IEdldCByaWQgb2YgdGhpcyBjb2Rpbmcgb3IgbW92ZSBpdCB0byBhbm90aGVyIGxheWVyIC0gdG8gYmUgZGlzY3Vzc2VkIHdpdGggTURDIGFuZCBtb2RlbFxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYVRhYmxlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0b0Zhc3RDcmVhdGlvblJvdyA9IGFUYWJsZXNbaV0uZ2V0Q3JlYXRpb25Sb3coKTtcblx0XHRcdGlmIChvRmFzdENyZWF0aW9uUm93KSB7XG5cdFx0XHRcdG9GYXN0Q3JlYXRpb25Sb3cuc2V0QmluZGluZ0NvbnRleHQobnVsbCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU2Nyb2xsIHRvIHByZXNlbnQgU2VjdGlvbiBzbyB0aGF0IGJpbmRpbmdzIGFyZSBlbmFibGVkIGR1cmluZyBuYXZpZ2F0aW9uIHRocm91Z2ggcGFnaW5hdG9yIGJ1dHRvbnMsIGFzIHRoZXJlIGlzIG5vIHZpZXcgcmVyZW5kZXJpbmcvcmViaW5kXG5cdFx0Y29uc3QgZm5TY3JvbGxUb1ByZXNlbnRTZWN0aW9uID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0aWYgKCEob09iamVjdFBhZ2UgYXMgYW55KS5pc0ZpcnN0UmVuZGVyaW5nKCkgJiYgIW1QYXJhbWV0ZXJzLmJQZXJzaXN0T1BTY3JvbGwpIHtcblx0XHRcdFx0b09iamVjdFBhZ2Uuc2V0U2VsZWN0ZWRTZWN0aW9uKG51bGwgYXMgYW55KTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdG9PYmplY3RQYWdlLmF0dGFjaEV2ZW50T25jZShcIm1vZGVsQ29udGV4dENoYW5nZVwiLCBmblNjcm9sbFRvUHJlc2VudFNlY3Rpb24pO1xuXG5cdFx0Ly8gaWYgdGhlIHN0cnVjdHVyZSBvZiB0aGUgT2JqZWN0UGFnZUxheW91dCBpcyBjaGFuZ2VkIHRoZW4gc2Nyb2xsIHRvIHByZXNlbnQgU2VjdGlvblxuXHRcdC8vIEZJWE1FIElzIHRoaXMgcmVhbGx5IHdvcmtpbmcgYXMgaW50ZW5kZWQgPyBJbml0aWFsbHkgdGhpcyB3YXMgb25CZWZvcmVSZW5kZXJpbmcsIGJ1dCBuZXZlciB0cmlnZ2VyZWQgb25CZWZvcmVSZW5kZXJpbmcgYmVjYXVzZSBpdCB3YXMgcmVnaXN0ZXJlZCBhZnRlciBpdFxuXHRcdGNvbnN0IG9EZWxlZ2F0ZU9uQmVmb3JlID0ge1xuXHRcdFx0b25BZnRlclJlbmRlcmluZzogZm5TY3JvbGxUb1ByZXNlbnRTZWN0aW9uXG5cdFx0fTtcblx0XHRvT2JqZWN0UGFnZS5hZGRFdmVudERlbGVnYXRlKG9EZWxlZ2F0ZU9uQmVmb3JlLCB0aGlzKTtcblx0XHR0aGlzLnBhZ2VSZWFkeS5hdHRhY2hFdmVudE9uY2UoXCJwYWdlUmVhZHlcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0b09iamVjdFBhZ2UucmVtb3ZlRXZlbnREZWxlZ2F0ZShvRGVsZWdhdGVPbkJlZm9yZSk7XG5cdFx0fSk7XG5cblx0XHQvL1NldCB0aGUgQmluZGluZyBmb3IgUGFnaW5hdG9ycyB1c2luZyBMaXN0QmluZGluZyBJRFxuXHRcdGlmIChpVmlld0xldmVsID4gMSkge1xuXHRcdFx0bGV0IG9CaW5kaW5nID0gbVBhcmFtZXRlcnMgJiYgbVBhcmFtZXRlcnMubGlzdEJpbmRpbmc7XG5cdFx0XHRjb25zdCBvUGFnaW5hdG9yQ3VycmVudENvbnRleHQgPSBvSW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShcIi9wYWdpbmF0b3JDdXJyZW50Q29udGV4dFwiKTtcblx0XHRcdGlmIChvUGFnaW5hdG9yQ3VycmVudENvbnRleHQpIHtcblx0XHRcdFx0Y29uc3Qgb0JpbmRpbmdUb1VzZSA9IG9QYWdpbmF0b3JDdXJyZW50Q29udGV4dC5nZXRCaW5kaW5nKCk7XG5cdFx0XHRcdHRoaXMucGFnaW5hdG9yLmluaXRpYWxpemUob0JpbmRpbmdUb1VzZSwgb1BhZ2luYXRvckN1cnJlbnRDb250ZXh0KTtcblx0XHRcdFx0b0ludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvcGFnaW5hdG9yQ3VycmVudENvbnRleHRcIiwgbnVsbCk7XG5cdFx0XHR9IGVsc2UgaWYgKG9CaW5kaW5nKSB7XG5cdFx0XHRcdGlmIChvQmluZGluZy5pc0EoXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFMaXN0QmluZGluZ1wiKSkge1xuXHRcdFx0XHRcdHRoaXMucGFnaW5hdG9yLmluaXRpYWxpemUob0JpbmRpbmcsIG9Db250ZXh0KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvL2lmIHRoZSBiaW5kaW5nIHR5cGUgaXMgbm90IE9EYXRhTGlzdEJpbmRpbmcgYmVjYXVzZSBvZiBhIGRlZXBsaW5rIG5hdmlnYXRpb24gb3IgYSByZWZyZXNoIG9mIHRoZSBwYWdlXG5cdFx0XHRcdFx0Ly8gd2UgbmVlZCB0byBjcmVhdGUgaXRcblx0XHRcdFx0XHRjb25zdCBzQ29udGV4dFBhdGggPSBvQmluZGluZy5nZXRQYXRoKCkucmVwbGFjZSgvXFwoW15cXCldKlxcKSokLywgXCJcIik7IC8vcmVtb3ZpbmcgdGhlIGxhc3QgdHVwbGVcblx0XHRcdFx0XHRvQmluZGluZyA9IG5ldyAoT0RhdGFMaXN0QmluZGluZyBhcyBhbnkpKG9CaW5kaW5nLm9Nb2RlbCwgXCJcIiwgb0JpbmRpbmcub01vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNDb250ZXh0UGF0aCkpO1xuXHRcdFx0XHRcdGNvbnN0IF9zZXRMaXN0QmluZGluZ0FzeW5jID0gKCkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKG9CaW5kaW5nLmdldENvbnRleHRzKCkubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnBhZ2luYXRvci5pbml0aWFsaXplKG9CaW5kaW5nLCBvQ29udGV4dCk7XG5cdFx0XHRcdFx0XHRcdG9CaW5kaW5nLmRldGFjaEV2ZW50KFwiY2hhbmdlXCIsIF9zZXRMaXN0QmluZGluZ0FzeW5jKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdG9CaW5kaW5nLmdldENvbnRleHRzKDApO1xuXHRcdFx0XHRcdG9CaW5kaW5nLmF0dGFjaEV2ZW50KFwiY2hhbmdlXCIsIF9zZXRMaXN0QmluZGluZ0FzeW5jKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoISh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkudXNlTmV3TGF6eUxvYWRpbmcgJiYgb09iamVjdFBhZ2UuZ2V0RW5hYmxlTGF6eUxvYWRpbmcoKSkge1xuXHRcdFx0Y29uc3QgYVNlY3Rpb25zID0gb09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKTtcblx0XHRcdGNvbnN0IGJVc2VJY29uVGFiQmFyID0gb09iamVjdFBhZ2UuZ2V0VXNlSWNvblRhYkJhcigpO1xuXHRcdFx0bGV0IGlTa2lwID0gMjtcblx0XHRcdGNvbnN0IGJJc0luRWRpdE1vZGUgPSBvT2JqZWN0UGFnZS5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIik7XG5cdFx0XHRjb25zdCBiRWRpdGFibGVIZWFkZXIgPSAodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLmVkaXRhYmxlSGVhZGVyQ29udGVudDtcblx0XHRcdGZvciAobGV0IGlTZWN0aW9uID0gMDsgaVNlY3Rpb24gPCBhU2VjdGlvbnMubGVuZ3RoOyBpU2VjdGlvbisrKSB7XG5cdFx0XHRcdGNvbnN0IG9TZWN0aW9uID0gYVNlY3Rpb25zW2lTZWN0aW9uXTtcblx0XHRcdFx0Y29uc3QgYVN1YlNlY3Rpb25zID0gb1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKTtcblx0XHRcdFx0Zm9yIChsZXQgaVN1YlNlY3Rpb24gPSAwOyBpU3ViU2VjdGlvbiA8IGFTdWJTZWN0aW9ucy5sZW5ndGg7IGlTdWJTZWN0aW9uKyssIGlTa2lwLS0pIHtcblx0XHRcdFx0XHQvLyBJbiBJY29uVGFiQmFyIG1vZGUga2VlcCB0aGUgc2Vjb25kIHNlY3Rpb24gYm91bmQgaWYgdGhlcmUgaXMgYW4gZWRpdGFibGUgaGVhZGVyIGFuZCB3ZSBhcmUgc3dpdGNoaW5nIHRvIGRpc3BsYXkgbW9kZVxuXHRcdFx0XHRcdGlmIChpU2tpcCA8IDEgfHwgKGJVc2VJY29uVGFiQmFyICYmIChpU2VjdGlvbiA+IDEgfHwgKGlTZWN0aW9uID09PSAxICYmICFiRWRpdGFibGVIZWFkZXIgJiYgIWJJc0luRWRpdE1vZGUpKSkpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG9TdWJTZWN0aW9uID0gYVN1YlNlY3Rpb25zW2lTdWJTZWN0aW9uXTtcblx0XHRcdFx0XHRcdGlmIChvU3ViU2VjdGlvbi5kYXRhKCkuaXNWaXNpYmlsaXR5RHluYW1pYyAhPT0gXCJ0cnVlXCIpIHtcblx0XHRcdFx0XHRcdFx0b1N1YlNlY3Rpb24uc2V0QmluZGluZ0NvbnRleHQobnVsbCBhcyBhbnkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICh0aGlzLnBsYWNlaG9sZGVyLmlzUGxhY2Vob2xkZXJFbmFibGVkKCkgJiYgbVBhcmFtZXRlcnMuc2hvd1BsYWNlaG9sZGVyKSB7XG5cdFx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdFx0Y29uc3Qgb05hdkNvbnRhaW5lciA9IChvVmlldy5nZXRQYXJlbnQoKSBhcyBhbnkpLm9Db250YWluZXIuZ2V0UGFyZW50KCk7XG5cdFx0XHRpZiAob05hdkNvbnRhaW5lcikge1xuXHRcdFx0XHRvTmF2Q29udGFpbmVyLnNob3dQbGFjZWhvbGRlcih7fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X2dldEZpcnN0Q2xpY2thYmxlRWxlbWVudChvT2JqZWN0UGFnZTogYW55KSB7XG5cdFx0bGV0IG9GaXJzdENsaWNrYWJsZUVsZW1lbnQ7XG5cdFx0Y29uc3QgYUFjdGlvbnMgPSBvT2JqZWN0UGFnZS5nZXRIZWFkZXJUaXRsZSgpICYmIG9PYmplY3RQYWdlLmdldEhlYWRlclRpdGxlKCkuZ2V0QWN0aW9ucygpO1xuXHRcdGlmIChhQWN0aW9ucyAmJiBhQWN0aW9ucy5sZW5ndGgpIHtcblx0XHRcdG9GaXJzdENsaWNrYWJsZUVsZW1lbnQgPSBhQWN0aW9ucy5maW5kKGZ1bmN0aW9uIChvQWN0aW9uOiBhbnkpIHtcblx0XHRcdFx0Ly8gRHVlIHRvIHRoZSBsZWZ0IGFsaWdubWVudCBvZiB0aGUgRHJhZnQgc3dpdGNoIGFuZCB0aGUgY29sbGFib3JhdGl2ZSBkcmFmdCBhdmF0YXIgY29udHJvbHNcblx0XHRcdFx0Ly8gdGhlcmUgaXMgYSBUb29sYmFyU3BhY2VyIGluIHRoZSBhY3Rpb25zIGFnZ3JlZ2F0aW9uIHdoaWNoIHdlIG5lZWQgdG8gZXhjbHVkZSBoZXJlIVxuXHRcdFx0XHRyZXR1cm4gIW9BY3Rpb24uaXNBKFwic2FwLm0uVG9vbGJhclNwYWNlclwiKSAmJiBvQWN0aW9uLmdldFZpc2libGUoKSAmJiBvQWN0aW9uLmdldEVuYWJsZWQoKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gb0ZpcnN0Q2xpY2thYmxlRWxlbWVudDtcblx0fVxuXG5cdF9nZXRGaXJzdEVtcHR5TWFuZGF0b3J5RmllbGRGcm9tU3ViU2VjdGlvbihhU3ViU2VjdGlvbnM6IGFueSkge1xuXHRcdGlmIChhU3ViU2VjdGlvbnMpIHtcblx0XHRcdGZvciAobGV0IHN1YlNlY3Rpb24gPSAwOyBzdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgc3ViU2VjdGlvbisrKSB7XG5cdFx0XHRcdGNvbnN0IGFCbG9ja3MgPSBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0QmxvY2tzKCk7XG5cblx0XHRcdFx0aWYgKGFCbG9ja3MpIHtcblx0XHRcdFx0XHRmb3IgKGxldCBibG9jayA9IDA7IGJsb2NrIDwgYUJsb2Nrcy5sZW5ndGg7IGJsb2NrKyspIHtcblx0XHRcdFx0XHRcdGxldCBhRm9ybUNvbnRhaW5lcnM7XG5cblx0XHRcdFx0XHRcdGlmIChhQmxvY2tzW2Jsb2NrXS5pc0EoXCJzYXAudWkubGF5b3V0LmZvcm0uRm9ybVwiKSkge1xuXHRcdFx0XHRcdFx0XHRhRm9ybUNvbnRhaW5lcnMgPSBhQmxvY2tzW2Jsb2NrXS5nZXRGb3JtQ29udGFpbmVycygpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0XHRcdFx0YUJsb2Nrc1tibG9ja10uZ2V0Q29udGVudCAmJlxuXHRcdFx0XHRcdFx0XHRhQmxvY2tzW2Jsb2NrXS5nZXRDb250ZW50KCkgJiZcblx0XHRcdFx0XHRcdFx0YUJsb2Nrc1tibG9ja10uZ2V0Q29udGVudCgpLmlzQShcInNhcC51aS5sYXlvdXQuZm9ybS5Gb3JtXCIpXG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0YUZvcm1Db250YWluZXJzID0gYUJsb2Nrc1tibG9ja10uZ2V0Q29udGVudCgpLmdldEZvcm1Db250YWluZXJzKCk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChhRm9ybUNvbnRhaW5lcnMpIHtcblx0XHRcdFx0XHRcdFx0Zm9yIChsZXQgZm9ybUNvbnRhaW5lciA9IDA7IGZvcm1Db250YWluZXIgPCBhRm9ybUNvbnRhaW5lcnMubGVuZ3RoOyBmb3JtQ29udGFpbmVyKyspIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBhRm9ybUVsZW1lbnRzID0gYUZvcm1Db250YWluZXJzW2Zvcm1Db250YWluZXJdLmdldEZvcm1FbGVtZW50cygpO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChhRm9ybUVsZW1lbnRzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IgKGxldCBmb3JtRWxlbWVudCA9IDA7IGZvcm1FbGVtZW50IDwgYUZvcm1FbGVtZW50cy5sZW5ndGg7IGZvcm1FbGVtZW50KyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgYUZpZWxkcyA9IGFGb3JtRWxlbWVudHNbZm9ybUVsZW1lbnRdLmdldEZpZWxkcygpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFRoZSBmaXJzdCBmaWVsZCBpcyBub3QgbmVjZXNzYXJpbHkgYW4gSW5wdXRCYXNlIChlLmcuIGNvdWxkIGJlIGEgVGV4dClcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU28gd2UgbmVlZCB0byBjaGVjayB3aGV0aGVyIGl0IGhhcyBhIGdldFJlcXVpcmVkIG1ldGhvZFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChhRmllbGRzWzBdLmdldFJlcXVpcmVkICYmIGFGaWVsZHNbMF0uZ2V0UmVxdWlyZWQoKSAmJiAhYUZpZWxkc1swXS5nZXRWYWx1ZSgpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gYUZpZWxkc1swXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0TG9nLmRlYnVnKFwiRXJyb3Igd2hlbiBzZWFyY2hpbmcgZm9yIG1hbmRhb3RyeSBlbXB0eSBmaWVsZDogXCIgKyBlcnJvcik7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdF91cGRhdGVGb2N1c0luRWRpdE1vZGUoYVN1YlNlY3Rpb25zOiBhbnkpIHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkgYXMgT2JqZWN0UGFnZUxheW91dDtcblxuXHRcdGNvbnN0IG9NYW5kYXRvcnlGaWVsZCA9IHRoaXMuX2dldEZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZEZyb21TdWJTZWN0aW9uKGFTdWJTZWN0aW9ucyk7XG5cdFx0bGV0IG9GaWVsZFRvRm9jdXM6IGFueTtcblx0XHRpZiAob01hbmRhdG9yeUZpZWxkKSB7XG5cdFx0XHRvRmllbGRUb0ZvY3VzID0gb01hbmRhdG9yeUZpZWxkLmNvbnRlbnQuZ2V0Q29udGVudEVkaXQoKVswXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b0ZpZWxkVG9Gb2N1cyA9IChvT2JqZWN0UGFnZSBhcyBhbnkpLl9nZXRGaXJzdEVkaXRhYmxlSW5wdXQoKSB8fCB0aGlzLl9nZXRGaXJzdENsaWNrYWJsZUVsZW1lbnQob09iamVjdFBhZ2UpO1xuXHRcdH1cblxuXHRcdGlmIChvRmllbGRUb0ZvY3VzKSB7XG5cdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0Ly8gV2Ugc2V0IHRoZSBmb2N1cyBpbiBhIHRpbWVlb3V0LCBvdGhlcndpc2UgdGhlIGZvY3VzIHNvbWV0aW1lcyBnb2VzIHRvIHRoZSBUYWJCYXJcblx0XHRcdFx0b0ZpZWxkVG9Gb2N1cy5mb2N1cygpO1xuXHRcdFx0fSwgMCk7XG5cdFx0fVxuXHR9XG5cblx0X2hhbmRsZVN1YlNlY3Rpb25FbnRlcmVkVmlld1BvcnQob0V2ZW50OiBhbnkpIHtcblx0XHRjb25zdCBvU3ViU2VjdGlvbiA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJzdWJTZWN0aW9uXCIpO1xuXHRcdG9TdWJTZWN0aW9uLnNldEJpbmRpbmdDb250ZXh0KHVuZGVmaW5lZCk7XG5cdH1cblxuXHRfb25CYWNrTmF2aWdhdGlvbkluRHJhZnQob0NvbnRleHQ6IGFueSkge1xuXHRcdGlmICh0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvdXRlclByb3h5KCkuY2hlY2tJZkJhY2tIYXNTYW1lQ29udGV4dCgpKSB7XG5cdFx0XHQvLyBCYWNrIG5hdiB3aWxsIGtlZXAgdGhlIHNhbWUgY29udGV4dCAtLT4gbm8gbmVlZCB0byBkaXNwbGF5IHRoZSBkaWFsb2dcblx0XHRcdGhpc3RvcnkuYmFjaygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkcmFmdC5wcm9jZXNzRGF0YUxvc3NPckRyYWZ0RGlzY2FyZENvbmZpcm1hdGlvbihcblx0XHRcdFx0ZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdGhpc3RvcnkuYmFjaygpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRGdW5jdGlvbi5wcm90b3R5cGUsXG5cdFx0XHRcdG9Db250ZXh0LFxuXHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0ZHJhZnQuTmF2aWdhdGlvblR5cGUuQmFja05hdmlnYXRpb25cblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRfb25BZnRlckJpbmRpbmcob0JpbmRpbmdDb250ZXh0OiBhbnksIG1QYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkgYXMgT2JqZWN0UGFnZUxheW91dDtcblx0XHRjb25zdCBhVGFibGVzID0gdGhpcy5fZmluZFRhYmxlcygpO1xuXG5cdFx0dGhpcy5fc2lkZUVmZmVjdHMuY2xlYXJQcm9wZXJ0aWVzU3RhdHVzKCk7XG5cblx0XHQvLyBUT0RPOiB0aGlzIGlzIG9ubHkgYSB0ZW1wIHNvbHV0aW9uIGFzIGxvbmcgYXMgdGhlIG1vZGVsIGZpeCB0aGUgY2FjaGUgaXNzdWUgYW5kIHdlIHVzZSB0aGlzIGFkZGl0aW9uYWxcblx0XHQvLyBiaW5kaW5nIHdpdGggb3duUmVxdWVzdFxuXHRcdG9CaW5kaW5nQ29udGV4dCA9IG9PYmplY3RQYWdlLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cblx0XHRsZXQgYUlCTkFjdGlvbnM6IGFueVtdID0gW107XG5cdFx0b09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvU2VjdGlvbjogYW55KSB7XG5cdFx0XHRvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpLmZvckVhY2goZnVuY3Rpb24gKG9TdWJTZWN0aW9uOiBhbnkpIHtcblx0XHRcdFx0YUlCTkFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9TdWJTZWN0aW9uLCBhSUJOQWN0aW9ucyk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdC8vIEFzc2lnbiBpbnRlcm5hbCBiaW5kaW5nIGNvbnRleHRzIHRvIG9Gb3JtQ29udGFpbmVyOlxuXHRcdC8vIDEuIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBhc3NpZ24gdGhlIGludGVybmFsIGJpbmRpbmcgY29udGV4dCB0byB0aGUgWE1MIGZyYWdtZW50XG5cdFx0Ly8gKEZvcm1Db250YWluZXIuZnJhZ21lbnQueG1sKSB5ZXQgLSBpdCBpcyB1c2VkIGFscmVhZHkgZm9yIHRoZSBkYXRhLXN0cnVjdHVyZS5cblx0XHQvLyAyLiBBbm90aGVyIHByb2JsZW0gaXMsIHRoYXQgRm9ybUNvbnRhaW5lcnMgYXNzaWduZWQgdG8gYSAnTW9yZUJsb2NrJyBkb2VzIG5vdCBoYXZlIGFuXG5cdFx0Ly8gaW50ZXJuYWwgbW9kZWwgY29udGV4dCBhdCBhbGwuXG5cblx0XHRhVGFibGVzLmZvckVhY2goZnVuY3Rpb24gKG9UYWJsZTogYW55KSB7XG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImNyZWF0aW9uUm93RmllbGRWYWxpZGl0eVwiLCB7fSk7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJjcmVhdGlvblJvd0N1c3RvbVZhbGlkaXR5XCIsIHt9KTtcblxuXHRcdFx0YUlCTkFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9UYWJsZSwgYUlCTkFjdGlvbnMpO1xuXHRcdFx0Ly8gdGVtcG9yYXJ5IHdvcmthcm91bmQgZm9yIEJDUDogMjA4MDIxODAwNFxuXHRcdFx0Ly8gTmVlZCB0byBmaXggd2l0aCBCTEk6IEZJT1JJVEVDSFAxLTE1Mjc0XG5cdFx0XHQvLyBvbmx5IGZvciBlZGl0IG1vZGUsIHdlIGNsZWFyIHRoZSB0YWJsZSBjYWNoZVxuXHRcdFx0Ly8gV29ya2Fyb3VuZCBzdGFydHMgaGVyZSEhXG5cdFx0XHRjb25zdCBvVGFibGVSb3dCaW5kaW5nID0gb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRcdGlmIChvVGFibGVSb3dCaW5kaW5nKSB7XG5cdFx0XHRcdGlmIChNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQob1RhYmxlUm93QmluZGluZy5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpKSkge1xuXHRcdFx0XHRcdC8vIGFwcGx5IGZvciBib3RoIGVkaXQgYW5kIGRpc3BsYXkgbW9kZSBpbiBzdGlja3lcblx0XHRcdFx0XHRvVGFibGVSb3dCaW5kaW5nLnJlbW92ZUNhY2hlc0FuZE1lc3NhZ2VzKFwiXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvLyBXb3JrYXJvdW5kIGVuZHMgaGVyZSEhXG5cblx0XHRcdC8vIFVwZGF0ZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgRGF0YUZpZWxkRm9yQWN0aW9uIGJ1dHRvbnMgb24gdGFibGUgdG9vbGJhclxuXHRcdFx0Ly8gVGhlIHNhbWUgaXMgYWxzbyBwZXJmb3JtZWQgb24gVGFibGUgc2VsZWN0aW9uQ2hhbmdlIGV2ZW50XG5cdFx0XHRjb25zdCBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gSlNPTi5wYXJzZShcblx0XHRcdFx0XHRDb21tb25IZWxwZXIucGFyc2VDdXN0b21EYXRhKERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhKG9UYWJsZSwgXCJvcGVyYXRpb25BdmFpbGFibGVNYXBcIikpIGFzIGFueVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRhU2VsZWN0ZWRDb250ZXh0cyA9IG9UYWJsZS5nZXRTZWxlY3RlZENvbnRleHRzKCk7XG5cblx0XHRcdENvbW1vblV0aWxzLnNldEFjdGlvbkVuYWJsZW1lbnQob0ludGVybmFsTW9kZWxDb250ZXh0LCBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwLCBhU2VsZWN0ZWRDb250ZXh0cyk7XG5cdFx0fSk7XG5cdFx0Q29tbW9uVXRpbHMuZ2V0U2VtYW50aWNUYXJnZXRzRnJvbVBhZ2VNb2RlbCh0aGlzLCBcIl9wYWdlTW9kZWxcIik7XG5cdFx0Ly9SZXRyaWV2ZSBPYmplY3QgUGFnZSBoZWFkZXIgYWN0aW9ucyBmcm9tIE9iamVjdCBQYWdlIHRpdGxlIGNvbnRyb2xcblx0XHRjb25zdCBvT2JqZWN0UGFnZVRpdGxlID0gb09iamVjdFBhZ2UuZ2V0SGVhZGVyVGl0bGUoKTtcblx0XHRsZXQgYUlCTkhlYWRlckFjdGlvbnM6IGFueVtdID0gW107XG5cdFx0YUlCTkhlYWRlckFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9PYmplY3RQYWdlVGl0bGUsIGFJQk5IZWFkZXJBY3Rpb25zKTtcblx0XHRhSUJOQWN0aW9ucyA9IGFJQk5BY3Rpb25zLmNvbmNhdChhSUJOSGVhZGVyQWN0aW9ucyk7XG5cdFx0Q29tbW9uVXRpbHMudXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkoYUlCTkFjdGlvbnMsIHRoaXMuZ2V0VmlldygpKTtcblxuXHRcdGxldCBvTW9kZWw6IGFueSwgb0ZpbmFsVUlTdGF0ZTogYW55O1xuXG5cdFx0Ly8gVE9ETzogdGhpcyBzaG91bGQgYmUgbW92ZWQgaW50byBhbiBpbml0IGV2ZW50IG9mIHRoZSBNREMgdGFibGVzIChub3QgeWV0IGV4aXN0aW5nKSBhbmQgc2hvdWxkIGJlIHBhcnRcblx0XHQvLyBvZiBhbnkgY29udHJvbGxlciBleHRlbnNpb25cblx0XHQvKipcblx0XHQgKiBAcGFyYW0gb1RhYmxlXG5cdFx0ICogQHBhcmFtIG9MaXN0QmluZGluZ1xuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIGVuYWJsZUZhc3RDcmVhdGlvblJvdyhvVGFibGU6IGFueSwgb0xpc3RCaW5kaW5nOiBhbnkpIHtcblx0XHRcdGNvbnN0IG9GYXN0Q3JlYXRpb25Sb3cgPSBvVGFibGUuZ2V0Q3JlYXRpb25Sb3coKTtcblx0XHRcdGxldCBvRmFzdENyZWF0aW9uTGlzdEJpbmRpbmcsIG9GYXN0Q3JlYXRpb25Db250ZXh0O1xuXG5cdFx0XHRpZiAob0Zhc3RDcmVhdGlvblJvdykge1xuXHRcdFx0XHRvRmluYWxVSVN0YXRlXG5cdFx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0aWYgKG9GYXN0Q3JlYXRpb25Sb3cuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpKSB7XG5cdFx0XHRcdFx0XHRcdG9GYXN0Q3JlYXRpb25MaXN0QmluZGluZyA9IG9Nb2RlbC5iaW5kTGlzdChvTGlzdEJpbmRpbmcuZ2V0UGF0aCgpLCBvTGlzdEJpbmRpbmcuZ2V0Q29udGV4dCgpLCBbXSwgW10sIHtcblx0XHRcdFx0XHRcdFx0XHQkJHVwZGF0ZUdyb3VwSWQ6IFwiZG9Ob3RTdWJtaXRcIixcblx0XHRcdFx0XHRcdFx0XHQkJGdyb3VwSWQ6IFwiZG9Ob3RTdWJtaXRcIlxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0Ly8gV29ya2Fyb3VuZCBzdWdnZXN0ZWQgYnkgT0RhdGEgbW9kZWwgdjQgY29sbGVhZ3Vlc1xuXHRcdFx0XHRcdFx0XHRvRmFzdENyZWF0aW9uTGlzdEJpbmRpbmcucmVmcmVzaEludGVybmFsID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdC8qIGRvIG5vdGhpbmcgKi9cblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0LypcbiAgICBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvRmFzdENyZWF0aW9uTGlzdEJpbmRpbmcuaGFzUGVuZGluZ0NoYW5nZXMgPSBmdW5jdGlvbigpIHtcbiAgICBcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuICAgIFx0XHRcdFx0XHRcdFx0fTtcbiAgICBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQqL1xuXG5cdFx0XHRcdFx0XHRcdG9GYXN0Q3JlYXRpb25Db250ZXh0ID0gb0Zhc3RDcmVhdGlvbkxpc3RCaW5kaW5nLmNyZWF0ZSgpO1xuXHRcdFx0XHRcdFx0XHRvRmFzdENyZWF0aW9uUm93LnNldEJpbmRpbmdDb250ZXh0KG9GYXN0Q3JlYXRpb25Db250ZXh0KTtcblxuXHRcdFx0XHRcdFx0XHQvLyB0aGlzIGlzIG5lZWRlZCB0byBhdm9pZCBjb25zb2xlIGVycm9yXG5cdFx0XHRcdFx0XHRcdG9GYXN0Q3JlYXRpb25Db250ZXh0LmNyZWF0ZWQoKS5jYXRjaChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0TG9nLnRyYWNlKFwidHJhbnNpZW50IGZhc3QgY3JlYXRpb24gY29udGV4dCBkZWxldGVkXCIpO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGNvbXB1dGluZyB0aGUgZmluYWwgVUkgc3RhdGVcIiwgb0Vycm9yKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyB0aGlzIHNob3VsZCBub3QgYmUgbmVlZGVkIGF0IHRoZSBhbGxcblx0XHQvKipcblx0XHQgKiBAcGFyYW0gb1RhYmxlXG5cdFx0ICovXG5cdFx0Y29uc3QgaGFuZGxlVGFibGVNb2RpZmljYXRpb25zID0gKG9UYWJsZTogYW55KSA9PiB7XG5cdFx0XHRjb25zdCBvQmluZGluZyA9IHRoaXMuX2dldFRhYmxlQmluZGluZyhvVGFibGUpLFxuXHRcdFx0XHRmbkhhbmRsZVRhYmxlUGF0Y2hFdmVudHMgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0ZW5hYmxlRmFzdENyZWF0aW9uUm93KG9UYWJsZSwgb0JpbmRpbmcpO1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRpZiAoIW9CaW5kaW5nKSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkV4cGVjdGVkIGJpbmRpbmcgbWlzc2luZyBmb3IgdGFibGU6IFwiICsgb1RhYmxlLmdldElkKCkpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmIChvQmluZGluZy5vQ29udGV4dCkge1xuXHRcdFx0XHRmbkhhbmRsZVRhYmxlUGF0Y2hFdmVudHMoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGZuSGFuZGxlQ2hhbmdlID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdGlmIChvQmluZGluZy5vQ29udGV4dCkge1xuXHRcdFx0XHRcdFx0Zm5IYW5kbGVUYWJsZVBhdGNoRXZlbnRzKCk7XG5cdFx0XHRcdFx0XHRvQmluZGluZy5kZXRhY2hDaGFuZ2UoZm5IYW5kbGVDaGFuZ2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdFx0b0JpbmRpbmcuYXR0YWNoQ2hhbmdlKGZuSGFuZGxlQ2hhbmdlKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0aWYgKG9CaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0b01vZGVsID0gb0JpbmRpbmdDb250ZXh0LmdldE1vZGVsKCk7XG5cblx0XHRcdC8vIENvbXB1dGUgRWRpdCBNb2RlXG5cdFx0XHRvRmluYWxVSVN0YXRlID0gdGhpcy5fZWRpdEZsb3cuY29tcHV0ZUVkaXRNb2RlKG9CaW5kaW5nQ29udGV4dCk7XG5cblx0XHRcdGlmIChNb2RlbEhlbHBlci5pc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZChvTW9kZWwuZ2V0TWV0YU1vZGVsKCkpKSB7XG5cdFx0XHRcdG9GaW5hbFVJU3RhdGVcblx0XHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAodGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpKSB7XG5cdFx0XHRcdFx0XHRcdGNvbm5lY3QodGhpcy5nZXRWaWV3KCkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgd2FpdGluZyBmb3IgdGhlIGZpbmFsIFVJIFN0YXRlXCIsIG9FcnJvcik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIHVwZGF0ZSByZWxhdGVkIGFwcHMgb25jZSBEYXRhIGlzIHJlY2VpdmVkIGluIGNhc2Ugb2YgYmluZGluZyBjYWNoZSBpcyBub3QgYXZhaWxhYmxlXG5cdFx0XHQvLyBUT0RPOiB0aGlzIGlzIG9ubHkgYSB0ZW1wIHNvbHV0aW9uIHNpbmNlIHdlIG5lZWQgdG8gY2FsbCBfdXBkYXRlUmVsYXRlZEFwcHMgbWV0aG9kIG9ubHkgYWZ0ZXIgZGF0YSBmb3IgT2JqZWN0IFBhZ2UgaXMgcmVjZWl2ZWQgKGlmIHRoZXJlIGlzIG5vIGJpbmRpbmcpXG5cdFx0XHRpZiAob0JpbmRpbmdDb250ZXh0LmdldEJpbmRpbmcoKS5vQ2FjaGUpIHtcblx0XHRcdFx0dGhpcy5fdXBkYXRlUmVsYXRlZEFwcHMoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGZuVXBkYXRlUmVsYXRlZEFwcHMgPSAoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5fdXBkYXRlUmVsYXRlZEFwcHMoKTtcblx0XHRcdFx0XHRvQmluZGluZ0NvbnRleHQuZ2V0QmluZGluZygpLmRldGFjaERhdGFSZWNlaXZlZChmblVwZGF0ZVJlbGF0ZWRBcHBzKTtcblx0XHRcdFx0fTtcblx0XHRcdFx0b0JpbmRpbmdDb250ZXh0LmdldEJpbmRpbmcoKS5hdHRhY2hEYXRhUmVjZWl2ZWQoZm5VcGRhdGVSZWxhdGVkQXBwcyk7XG5cdFx0XHR9XG5cblx0XHRcdC8vQXR0YWNoIHRoZSBwYXRjaCBzZW50IGFuZCBwYXRjaCBjb21wbGV0ZWQgZXZlbnQgdG8gdGhlIG9iamVjdCBwYWdlIGJpbmRpbmcgc28gdGhhdCB3ZSBjYW4gcmVhY3Rcblx0XHRcdGNvbnN0IG9CaW5kaW5nID0gKG9CaW5kaW5nQ29udGV4dC5nZXRCaW5kaW5nICYmIG9CaW5kaW5nQ29udGV4dC5nZXRCaW5kaW5nKCkpIHx8IG9CaW5kaW5nQ29udGV4dDtcblxuXHRcdFx0Ly8gQXR0YWNoIHRoZSBldmVudCBoYW5kbGVyIG9ubHkgb25jZSB0byB0aGUgc2FtZSBiaW5kaW5nXG5cdFx0XHRpZiAodGhpcy5jdXJyZW50QmluZGluZyAhPT0gb0JpbmRpbmcpIHtcblx0XHRcdFx0b0JpbmRpbmcuYXR0YWNoRXZlbnQoXCJwYXRjaFNlbnRcIiwgdGhpcy5lZGl0Rmxvdy5oYW5kbGVQYXRjaFNlbnQsIHRoaXMpO1xuXHRcdFx0XHR0aGlzLmN1cnJlbnRCaW5kaW5nID0gb0JpbmRpbmc7XG5cdFx0XHR9XG5cblx0XHRcdGFUYWJsZXMuZm9yRWFjaChmdW5jdGlvbiAob1RhYmxlOiBhbnkpIHtcblx0XHRcdFx0Ly8gYWNjZXNzIGJpbmRpbmcgb25seSBhZnRlciB0YWJsZSBpcyBib3VuZFxuXHRcdFx0XHRUYWJsZVV0aWxzLndoZW5Cb3VuZChvVGFibGUpXG5cdFx0XHRcdFx0LnRoZW4oaGFuZGxlVGFibGVNb2RpZmljYXRpb25zKVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSB0YWJsZSB0byBiZSBib3VuZFwiLCBvRXJyb3IpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdGlmICghKHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55KS51c2VOZXdMYXp5TG9hZGluZykge1xuXHRcdFx0XHQvLyBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYWZ0ZXIgYmluZGluZyBpcyByZWFkeSBoZW5jZSBjYWxsaW5nIGl0IGluIG9uQWZ0ZXJCaW5kaW5nXG5cdFx0XHRcdChvT2JqZWN0UGFnZSBhcyBhbnkpLl90cmlnZ2VyVmlzaWJsZVN1YlNlY3Rpb25zRXZlbnRzKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRvblBhZ2VSZWFkeShtUGFyYW1ldGVyczogYW55KSB7XG5cdFx0Y29uc3Qgc2V0Rm9jdXMgPSAoKSA9PiB7XG5cdFx0XHQvLyBTZXQgdGhlIGZvY3VzIHRvIHRoZSBmaXJzdCBhY3Rpb24gYnV0dG9uLCBvciB0byB0aGUgZmlyc3QgZWRpdGFibGUgaW5wdXQgaWYgaW4gZWRpdGFibGUgbW9kZVxuXHRcdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdFx0Y29uc3QgaXNJbkRpc3BsYXlNb2RlID0gIW9PYmplY3RQYWdlLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKTtcblxuXHRcdFx0aWYgKGlzSW5EaXNwbGF5TW9kZSkge1xuXHRcdFx0XHRjb25zdCBvRmlyc3RDbGlja2FibGVFbGVtZW50ID0gdGhpcy5fZ2V0Rmlyc3RDbGlja2FibGVFbGVtZW50KG9PYmplY3RQYWdlKTtcblx0XHRcdFx0aWYgKG9GaXJzdENsaWNrYWJsZUVsZW1lbnQpIHtcblx0XHRcdFx0XHRvRmlyc3RDbGlja2FibGVFbGVtZW50LmZvY3VzKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IG9TZWxlY3RlZFNlY3Rpb246IGFueSA9IENvcmUuYnlJZChvT2JqZWN0UGFnZS5nZXRTZWxlY3RlZFNlY3Rpb24oKSk7XG5cdFx0XHRcdHRoaXMuX3VwZGF0ZUZvY3VzSW5FZGl0TW9kZShvU2VsZWN0ZWRTZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0Ly8gQXBwbHkgYXBwIHN0YXRlIG9ubHkgYWZ0ZXIgdGhlIHBhZ2UgaXMgcmVhZHkgd2l0aCB0aGUgZmlyc3Qgc2VjdGlvbiBzZWxlY3RlZFxuXHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBvQmluZGluZ0NvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdC8vU2hvdyBwb3B1cCB3aGlsZSBuYXZpZ2F0aW5nIGJhY2sgZnJvbSBvYmplY3QgcGFnZSBpbiBjYXNlIG9mIGRyYWZ0XG5cdFx0aWYgKG9CaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0Y29uc3QgYklzU3RpY2t5TW9kZSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCgob0JpbmRpbmdDb250ZXh0LmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdFx0aWYgKCFiSXNTdGlja3lNb2RlKSB7XG5cdFx0XHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQob1ZpZXcpO1xuXHRcdFx0XHRvQXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKS5zZXRCYWNrTmF2aWdhdGlvbigoKSA9PiB0aGlzLl9vbkJhY2tOYXZpZ2F0aW9uSW5EcmFmdChvQmluZGluZ0NvbnRleHQpKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKVxuXHRcdFx0LmdldEFwcFN0YXRlSGFuZGxlcigpXG5cdFx0XHQuYXBwbHlBcHBTdGF0ZSgpXG5cdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdGlmIChtUGFyYW1ldGVycy5mb3JjZUZvY3VzKSB7XG5cdFx0XHRcdFx0c2V0Rm9jdXMoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAoRXJyb3IpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgc2V0dGluZyB0aGUgZm9jdXNcIiwgRXJyb3IpO1xuXHRcdFx0fSk7XG5cblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJlcnJvck5hdmlnYXRpb25TZWN0aW9uRmxhZ1wiLCBmYWxzZSk7XG5cdFx0dGhpcy5fY2hlY2tEYXRhUG9pbnRUaXRsZUZvckV4dGVybmFsTmF2aWdhdGlvbigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgc3RhdHVzIG9mIGVkaXQgbW9kZSBmb3Igc3RpY2t5IHNlc3Npb24uXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBUaGUgc3RhdHVzIG9mIGVkaXQgbW9kZSBmb3Igc3RpY2t5IHNlc3Npb25cblx0ICpcblx0ICpcblx0ICovXG5cdGdldFN0aWNreUVkaXRNb2RlKCkge1xuXHRcdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0ICYmICh0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQpO1xuXHRcdGxldCBiSXNTdGlja3lFZGl0TW9kZSA9IGZhbHNlO1xuXHRcdGlmIChvQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdGNvbnN0IGJJc1N0aWNreU1vZGUgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQob0JpbmRpbmdDb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwpO1xuXHRcdFx0aWYgKGJJc1N0aWNreU1vZGUpIHtcblx0XHRcdFx0YklzU3RpY2t5RWRpdE1vZGUgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBiSXNTdGlja3lFZGl0TW9kZTtcblx0fVxuXG5cdF9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpIHtcblx0XHRyZXR1cm4gdGhpcy5ieUlkKFwiZmU6Ok9iamVjdFBhZ2VcIikgYXMgT2JqZWN0UGFnZUxheW91dDtcblx0fVxuXG5cdF9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbigpIHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2VTdWJ0aXRsZSA9IG9PYmplY3RQYWdlLmdldEN1c3RvbURhdGEoKS5maW5kKGZ1bmN0aW9uIChvQ3VzdG9tRGF0YTogYW55KSB7XG5cdFx0XHRyZXR1cm4gb0N1c3RvbURhdGEuZ2V0S2V5KCkgPT09IFwiT2JqZWN0UGFnZVN1YnRpdGxlXCI7XG5cdFx0fSk7XG5cdFx0Y29uc3Qgb1RpdGxlSW5mbyA9IHtcblx0XHRcdHRpdGxlOiBvT2JqZWN0UGFnZS5kYXRhKFwiT2JqZWN0UGFnZVRpdGxlXCIpIHx8IFwiXCIsXG5cdFx0XHRzdWJ0aXRsZTogb09iamVjdFBhZ2VTdWJ0aXRsZSAmJiBvT2JqZWN0UGFnZVN1YnRpdGxlLmdldFZhbHVlKCksXG5cdFx0XHRpbnRlbnQ6IFwiXCIsXG5cdFx0XHRpY29uOiBcIlwiXG5cdFx0fTtcblxuXHRcdHJldHVybiBvVGl0bGVJbmZvO1xuXHR9XG5cblx0X2V4ZWN1dGVIZWFkZXJTaG9ydGN1dChzSWQ6IGFueSkge1xuXHRcdGNvbnN0IHNCdXR0b25JZCA9IHRoaXMuZ2V0VmlldygpLmdldElkKCkgKyBcIi0tXCIgKyBzSWQsXG5cdFx0XHRvQnV0dG9uID0gKHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkuZ2V0SGVhZGVyVGl0bGUoKSBhcyBPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlKVxuXHRcdFx0XHQuZ2V0QWN0aW9ucygpXG5cdFx0XHRcdC5maW5kKGZ1bmN0aW9uIChvRWxlbWVudDogYW55KSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9FbGVtZW50LmdldElkKCkgPT09IHNCdXR0b25JZDtcblx0XHRcdFx0fSk7XG5cdFx0Q29tbW9uVXRpbHMuZmlyZUJ1dHRvblByZXNzKG9CdXR0b24pO1xuXHR9XG5cblx0X2V4ZWN1dGVGb290ZXJTaG9ydGN1dChzSWQ6IGFueSkge1xuXHRcdGNvbnN0IHNCdXR0b25JZCA9IHRoaXMuZ2V0VmlldygpLmdldElkKCkgKyBcIi0tXCIgKyBzSWQsXG5cdFx0XHRvQnV0dG9uID0gKHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkuZ2V0Rm9vdGVyKCkgYXMgYW55KS5nZXRDb250ZW50KCkuZmluZChmdW5jdGlvbiAob0VsZW1lbnQ6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4gb0VsZW1lbnQuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkgPT09IFwic2FwLm0uQnV0dG9uXCIgJiYgb0VsZW1lbnQuZ2V0SWQoKSA9PT0gc0J1dHRvbklkO1xuXHRcdFx0fSk7XG5cdFx0Q29tbW9uVXRpbHMuZmlyZUJ1dHRvblByZXNzKG9CdXR0b24pO1xuXHR9XG5cblx0X2V4ZWN1dGVUYWJTaG9ydEN1dChvRXhlY3V0aW9uOiBhbnkpIHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCksXG5cdFx0XHRhU2VjdGlvbnMgPSBvT2JqZWN0UGFnZS5nZXRTZWN0aW9ucygpLFxuXHRcdFx0aVNlY3Rpb25JbmRleE1heCA9IGFTZWN0aW9ucy5sZW5ndGggLSAxLFxuXHRcdFx0c0NvbW1hbmQgPSBvRXhlY3V0aW9uLm9Tb3VyY2UuZ2V0Q29tbWFuZCgpO1xuXHRcdGxldCBuZXdTZWN0aW9uLFxuXHRcdFx0aVNlbGVjdGVkU2VjdGlvbkluZGV4ID0gb09iamVjdFBhZ2UuaW5kZXhPZlNlY3Rpb24odGhpcy5ieUlkKG9PYmplY3RQYWdlLmdldFNlbGVjdGVkU2VjdGlvbigpKSBhcyBPYmplY3RQYWdlU2VjdGlvbik7XG5cdFx0aWYgKGlTZWxlY3RlZFNlY3Rpb25JbmRleCAhPT0gLTEgJiYgaVNlY3Rpb25JbmRleE1heCA+IDApIHtcblx0XHRcdGlmIChzQ29tbWFuZCA9PT0gXCJOZXh0VGFiXCIpIHtcblx0XHRcdFx0aWYgKGlTZWxlY3RlZFNlY3Rpb25JbmRleCA8PSBpU2VjdGlvbkluZGV4TWF4IC0gMSkge1xuXHRcdFx0XHRcdG5ld1NlY3Rpb24gPSBhU2VjdGlvbnNbKytpU2VsZWN0ZWRTZWN0aW9uSW5kZXhdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBQcmV2aW91c1RhYlxuXHRcdFx0XHRpZiAoaVNlbGVjdGVkU2VjdGlvbkluZGV4ICE9PSAwKSB7XG5cdFx0XHRcdFx0bmV3U2VjdGlvbiA9IGFTZWN0aW9uc1stLWlTZWxlY3RlZFNlY3Rpb25JbmRleF07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChuZXdTZWN0aW9uKSB7XG5cdFx0XHRcdG9PYmplY3RQYWdlLnNldFNlbGVjdGVkU2VjdGlvbihuZXdTZWN0aW9uKTtcblx0XHRcdFx0bmV3U2VjdGlvbi5mb2N1cygpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF9nZXRGb290ZXJWaXNpYmlsaXR5KCkge1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3Qgc1ZpZXdJZCA9IHRoaXMuZ2V0VmlldygpLmdldElkKCk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwibWVzc2FnZUZvb3RlckNvbnRhaW5zRXJyb3JzXCIsIGZhbHNlKTtcblx0XHRzYXAudWlcblx0XHRcdC5nZXRDb3JlKClcblx0XHRcdC5nZXRNZXNzYWdlTWFuYWdlcigpXG5cdFx0XHQuZ2V0TWVzc2FnZU1vZGVsKClcblx0XHRcdC5nZXREYXRhKClcblx0XHRcdC5mb3JFYWNoKGZ1bmN0aW9uIChvTWVzc2FnZTogYW55KSB7XG5cdFx0XHRcdGlmIChvTWVzc2FnZS52YWxpZGF0aW9uICYmIG9NZXNzYWdlLnR5cGUgPT09IFwiRXJyb3JcIiAmJiBvTWVzc2FnZS50YXJnZXQuaW5kZXhPZihzVmlld0lkKSA+IC0xKSB7XG5cdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwibWVzc2FnZUZvb3RlckNvbnRhaW5zRXJyb3JzXCIsIHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0fVxuXG5cdF9zaG93TWVzc2FnZVBvcG92ZXIoZXJyPzogYW55LCBvUmV0PzogYW55KSB7XG5cdFx0aWYgKGVycikge1xuXHRcdFx0TG9nLmVycm9yKGVycik7XG5cdFx0fVxuXHRcdGNvbnN0IHJvb3RWaWV3Q29udHJvbGxlciA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkgYXMgYW55O1xuXHRcdGNvbnN0IGN1cnJlbnRQYWdlVmlldyA9IHJvb3RWaWV3Q29udHJvbGxlci5pc0ZjbEVuYWJsZWQoKVxuXHRcdFx0PyByb290Vmlld0NvbnRyb2xsZXIuZ2V0UmlnaHRtb3N0VmlldygpXG5cdFx0XHQ6ICh0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvb3RDb250YWluZXIoKSBhcyBhbnkpLmdldEN1cnJlbnRQYWdlKCk7XG5cdFx0aWYgKCFjdXJyZW50UGFnZVZpZXcuaXNBKFwic2FwLm0uTWVzc2FnZVBhZ2VcIikpIHtcblx0XHRcdGNvbnN0IG9NZXNzYWdlQnV0dG9uID0gdGhpcy5nZXRWaWV3KCkuYnlJZChcImZlOjpGb290ZXJCYXI6Ok1lc3NhZ2VCdXR0b25cIikgYXMgYW55LFxuXHRcdFx0XHRvTWVzc2FnZVBvcG92ZXIgPSBvTWVzc2FnZUJ1dHRvbi5vTWVzc2FnZVBvcG92ZXIsXG5cdFx0XHRcdG9JdGVtQmluZGluZyA9IG9NZXNzYWdlUG9wb3Zlci5nZXRCaW5kaW5nKFwiaXRlbXNcIik7XG5cblx0XHRcdGlmIChvSXRlbUJpbmRpbmcuZ2V0TGVuZ3RoKCkgPiAwICYmICFvTWVzc2FnZVBvcG92ZXIuaXNPcGVuKCkpIHtcblx0XHRcdFx0b01lc3NhZ2VCdXR0b24uc2V0VmlzaWJsZSh0cnVlKTtcblx0XHRcdFx0Ly8gd29ya2Fyb3VuZCB0byBlbnN1cmUgdGhhdCBvTWVzc2FnZUJ1dHRvbiBpcyByZW5kZXJlZCB3aGVuIG9wZW5CeSBpcyBjYWxsZWRcblx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0b01lc3NhZ2VQb3BvdmVyLm9wZW5CeShvTWVzc2FnZUJ1dHRvbik7XG5cdFx0XHRcdH0sIDApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb1JldDtcblx0fVxuXG5cdF9lZGl0RG9jdW1lbnQob0NvbnRleHQ6IGFueSkge1xuXHRcdGNvbnN0IG9Nb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIik7XG5cdFx0QnVzeUxvY2tlci5sb2NrKG9Nb2RlbCk7XG5cdFx0cmV0dXJuIHRoaXMuZWRpdEZsb3cuZWRpdERvY3VtZW50LmFwcGx5KHRoaXMuZWRpdEZsb3csIFtvQ29udGV4dF0pLmZpbmFsbHkoZnVuY3Rpb24gKCkge1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2sob01vZGVsKTtcblx0XHR9KTtcblx0fVxuXG5cdF9zYXZlRG9jdW1lbnQob0NvbnRleHQ6IGFueSkge1xuXHRcdGNvbnN0IG9Nb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIiksXG5cdFx0XHRhV2FpdENyZWF0ZURvY3VtZW50czogYW55W10gPSBbXTtcblx0XHQvLyBpbmRpY2F0ZXMgaWYgd2UgYXJlIGNyZWF0aW5nIGEgbmV3IHJvdyBpbiB0aGUgT1Bcblx0XHRsZXQgYkV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IgPSBmYWxzZTtcblx0XHRCdXN5TG9ja2VyLmxvY2sob01vZGVsKTtcblx0XHR0aGlzLl9maW5kVGFibGVzKCkuZm9yRWFjaCgob1RhYmxlOiBhbnkpID0+IHtcblx0XHRcdGNvbnN0IG9CaW5kaW5nID0gdGhpcy5fZ2V0VGFibGVCaW5kaW5nKG9UYWJsZSk7XG5cdFx0XHRjb25zdCBtUGFyYW1ldGVyczogYW55ID0ge1xuXHRcdFx0XHRjcmVhdGlvbk1vZGU6IG9UYWJsZS5kYXRhKFwiY3JlYXRpb25Nb2RlXCIpLFxuXHRcdFx0XHRjcmVhdGlvblJvdzogb1RhYmxlLmdldENyZWF0aW9uUm93KCksXG5cdFx0XHRcdGNyZWF0ZUF0RW5kOiBvVGFibGUuZGF0YShcImNyZWF0ZUF0RW5kXCIpID09PSBcInRydWVcIlxuXHRcdFx0fTtcblx0XHRcdGNvbnN0IGJDcmVhdGVEb2N1bWVudCA9XG5cdFx0XHRcdG1QYXJhbWV0ZXJzLmNyZWF0aW9uUm93ICYmXG5cdFx0XHRcdG1QYXJhbWV0ZXJzLmNyZWF0aW9uUm93LmdldEJpbmRpbmdDb250ZXh0KCkgJiZcblx0XHRcdFx0T2JqZWN0LmtleXMobVBhcmFtZXRlcnMuY3JlYXRpb25Sb3cuZ2V0QmluZGluZ0NvbnRleHQoKS5nZXRPYmplY3QoKSkubGVuZ3RoID4gMTtcblx0XHRcdGlmIChiQ3JlYXRlRG9jdW1lbnQpIHtcblx0XHRcdFx0Ly8gdGhlIGJTa2lwU2lkZUVmZmVjdHMgaXMgYSBwYXJhbWV0ZXIgY3JlYXRlZCB3aGVuIHdlIGNsaWNrIHRoZSBzYXZlIGtleS4gSWYgd2UgcHJlc3MgdGhpcyBrZXlcblx0XHRcdFx0Ly8gd2UgZG9uJ3QgZXhlY3V0ZSB0aGUgaGFuZGxlU2lkZUVmZmVjdHMgZnVuY2l0b24gdG8gYXZvaWQgYmF0Y2ggcmVkdW5kYW5jeVxuXHRcdFx0XHRtUGFyYW1ldGVycy5iU2tpcFNpZGVFZmZlY3RzID0gdHJ1ZTtcblx0XHRcdFx0YkV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IgPSB0cnVlO1xuXHRcdFx0XHRhV2FpdENyZWF0ZURvY3VtZW50cy5wdXNoKFxuXHRcdFx0XHRcdHRoaXMuZWRpdEZsb3cuY3JlYXRlRG9jdW1lbnQob0JpbmRpbmcsIG1QYXJhbWV0ZXJzKS50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdHJldHVybiBvQmluZGluZztcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBQcm9taXNlLmFsbChhV2FpdENyZWF0ZURvY3VtZW50cylcblx0XHRcdC50aGVuKChhQmluZGluZ3M6IGFueVtdKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG1QYXJhbWV0ZXJzID0ge1xuXHRcdFx0XHRcdGJFeGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yOiBiRXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvcixcblx0XHRcdFx0XHRiaW5kaW5nczogYUJpbmRpbmdzXG5cdFx0XHRcdH07XG5cdFx0XHRcdHJldHVybiB0aGlzLmVkaXRGbG93LnNhdmVEb2N1bWVudChvQ29udGV4dCwgbVBhcmFtZXRlcnMpLmNhdGNoKCguLi5hcmdzKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5fc2hvd01lc3NhZ2VQb3BvdmVyKC4uLmFyZ3MpO1xuXHRcdFx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdCguLi5hcmdzKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KVxuXHRcdFx0LmZpbmFsbHkoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRpZiAoQnVzeUxvY2tlci5pc0xvY2tlZChvTW9kZWwpKSB7XG5cdFx0XHRcdFx0QnVzeUxvY2tlci51bmxvY2sob01vZGVsKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdH1cblxuXHRfbWFuYWdlQ29sbGFib3JhdGlvbigpIHtcblx0XHRvcGVuTWFuYWdlRGlhbG9nKHRoaXMuZ2V0VmlldygpKTtcblx0fVxuXG5cdF9zaG93Q29sbGFib3JhdGlvblVzZXJEZXRhaWxzKGV2ZW50OiBhbnkpIHtcblx0XHRzaG93VXNlckRldGFpbHMoZXZlbnQsIHRoaXMuZ2V0VmlldygpKTtcblx0fVxuXG5cdF9jYW5jZWxEb2N1bWVudChvQ29udGV4dDogYW55LCBtUGFyYW1ldGVyczogYW55KSB7XG5cdFx0bVBhcmFtZXRlcnMuY2FuY2VsQnV0dG9uID0gdGhpcy5nZXRWaWV3KCkuYnlJZChtUGFyYW1ldGVycy5jYW5jZWxCdXR0b24pOyAvL3RvIGdldCB0aGUgcmVmZXJlbmNlIG9mIHRoZSBjYW5jZWwgYnV0dG9uIGZyb20gY29tbWFuZCBleGVjdXRpb25cblx0XHRyZXR1cm4gdGhpcy5lZGl0Rmxvdy5jYW5jZWxEb2N1bWVudChvQ29udGV4dCwgbVBhcmFtZXRlcnMpO1xuXHR9XG5cblx0X2FwcGx5RG9jdW1lbnQob0NvbnRleHQ6IGFueSkge1xuXHRcdHJldHVybiB0aGlzLmVkaXRGbG93LmFwcGx5RG9jdW1lbnQob0NvbnRleHQpLmNhdGNoKCgpID0+IHRoaXMuX3Nob3dNZXNzYWdlUG9wb3ZlcigpKTtcblx0fVxuXG5cdF9zaG93U3dpdGNoRHJhZnRBbmRBY3RpdmVQb3BvdmVyKGV2ZW50OiBFdmVudCkge1xuXHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFZpZXcoKSxcblx0XHRcdHNvdXJjZSA9IGV2ZW50LmdldFNvdXJjZSgpLFxuXHRcdFx0ZnJhZ21lbnROYW1lID0gXCJzYXAuZmUudGVtcGxhdGVzLk9iamVjdFBhZ2Uudmlldy5mcmFnbWVudHMuU3dpdGNoRHJhZnRBbmRBY3RpdmVPYmplY3RQb3BPdmVyXCI7XG5cblx0XHRpZiAodGhpcy5zd2l0Y2hEcmFmdEFuZEFjdGl2ZVBvcE92ZXIpIHtcblx0XHRcdHRoaXMuc3dpdGNoRHJhZnRBbmRBY3RpdmVQb3BPdmVyLm9wZW5CeShzb3VyY2UsIGZhbHNlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgbG9jYWxUaGlzTW9kZWwgPSBuZXcgSlNPTk1vZGVsKHt9KSxcblx0XHRcdFx0cHJlcHJvY2Vzc29yU2V0dGluZ3MgPSB7XG5cdFx0XHRcdFx0YmluZGluZ0NvbnRleHRzOiB7XG5cdFx0XHRcdFx0XHRcInRoaXNcIjogbG9jYWxUaGlzTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRtb2RlbHM6IHtcblx0XHRcdFx0XHRcdFwidGhpc1wiOiBsb2NhbFRoaXNNb2RlbFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdGNvbnN0IHBvcG92ZXJGcmFnbWVudCA9IFhNTFRlbXBsYXRlUHJvY2Vzc29yLmxvYWRUZW1wbGF0ZShmcmFnbWVudE5hbWUsIFwiZnJhZ21lbnRcIik7XG5cdFx0XHRQcm9taXNlLnJlc29sdmUoWE1MUHJlcHJvY2Vzc29yLnByb2Nlc3MocG9wb3ZlckZyYWdtZW50LCB7IG5hbWU6IGZyYWdtZW50TmFtZSB9LCBwcmVwcm9jZXNzb3JTZXR0aW5ncykpXG5cdFx0XHRcdC50aGVuKChmcmFnbWVudCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBGcmFnbWVudC5sb2FkKHsgZGVmaW5pdGlvbjogZnJhZ21lbnQsIGNvbnRyb2xsZXI6IHRoaXMgfSk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC50aGVuKChwb3BvdmVyOiBhbnkpID0+IHtcblx0XHRcdFx0XHR2aWV3LmFkZERlcGVuZGVudChwb3BvdmVyKTtcblx0XHRcdFx0XHRwb3BvdmVyLnNldE1vZGVsKHZpZXcuZ2V0TW9kZWwoXCJzYXAuZmUuaTE4blwiKSwgXCJpMThuXCIpO1xuXHRcdFx0XHRcdHBvcG92ZXIuc2V0UGxhY2VtZW50KFwiQm90dG9tXCIpO1xuXHRcdFx0XHRcdHRoaXMuc3dpdGNoRHJhZnRBbmRBY3RpdmVQb3BPdmVyID0gcG9wb3Zlcjtcblx0XHRcdFx0XHRwb3BvdmVyLmF0dGFjaEFmdGVyT3BlbigoKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBXaGlsZSB0aGUgbGlzdCBlbnRyeSBjb3JyZXNwb25kaW5nIHRvIHRoZSBjdXJyZW50bHkgZGlzcGxheWVkIGRvY3VtZW50IHZlcnNpb24gaXMgZW1waGFzaXplZCB3aXRoIGEgYmx1ZVxuXHRcdFx0XHRcdFx0Ly8gYmFja2dyb3VuZCwgd2UgbmVlZCB0byBwcmUtZm9jdXMgdGhlIG90aGVyIGVudHJ5XG5cdFx0XHRcdFx0XHRjb25zdCBjb250ZXh0OiBhbnkgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpLFxuXHRcdFx0XHRcdFx0XHRpc0FjdGl2ZUVudGl0eSA9IGNvbnRleHQuZ2V0T2JqZWN0KCkuSXNBY3RpdmVFbnRpdHk7XG5cdFx0XHRcdFx0XHRjb25zdCBzd2l0Y2hEcmFmdEFuZEFjdGl2ZU9wdGlvbnNMaXN0OiBTZWxlY3RMaXN0ID0gKHBvcG92ZXIuZ2V0Q29udGVudCgpIGFzIHVua25vd24gYXMgQ29udHJvbFtdKS5maW5kKFxuXHRcdFx0XHRcdFx0XHQoZWxlbWVudCkgPT4gZWxlbWVudC5kYXRhKFwibGlzdElkZW50aWZpZXJcIikgPT09IFwic3dpdGNoRHJhZnRBbmRBY3RpdmVQb3BvdmVyTGlzdFwiXG5cdFx0XHRcdFx0XHQpIGFzIFNlbGVjdExpc3Q7XG5cdFx0XHRcdFx0XHRjb25zdCBsaXN0SXRlbVRvRm9jdXM6IEl0ZW0gPSBpc0FjdGl2ZUVudGl0eVxuXHRcdFx0XHRcdFx0XHQ/IChzd2l0Y2hEcmFmdEFuZEFjdGl2ZU9wdGlvbnNMaXN0LmdldEl0ZW1zKCkuZmluZCgoZWxlbWVudCkgPT4gZWxlbWVudC5nZXRLZXkoKSA9PT0gXCJzd2l0Y2hUb0RyYWZ0XCIpIGFzIEl0ZW0pXG5cdFx0XHRcdFx0XHRcdDogKHN3aXRjaERyYWZ0QW5kQWN0aXZlT3B0aW9uc0xpc3QuZ2V0SXRlbXMoKS5maW5kKChlbGVtZW50KSA9PiBlbGVtZW50LmdldEtleSgpID09PSBcInN3aXRjaFRvQWN0aXZlXCIpIGFzIEl0ZW0pO1xuXHRcdFx0XHRcdFx0bGlzdEl0ZW1Ub0ZvY3VzLmZvY3VzKCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0cG9wb3Zlci5vcGVuQnkoc291cmNlKTtcblx0XHRcdFx0XHQvLyBlbnN1cmUgdG8gcmVtb3ZlIHRoZSByZWZlcmVuY2UgdG8gdGhlIGRyYWZ0IHBvcG92ZXIgYXMgaXQgd291bGQgYmUgZGVzdHJveWVkIG9uIGV4aXRcblx0XHRcdFx0XHR2aWV3LmF0dGFjaEV2ZW50T25jZShcImJlZm9yZUV4aXRcIiwgKCkgPT4ge1xuXHRcdFx0XHRcdFx0ZGVsZXRlIHRoaXMuc3dpdGNoRHJhZnRBbmRBY3RpdmVQb3BPdmVyO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKEVycm9yKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgb3BlbmluZyB0aGUgZHJhZnQgc3dpdGNoIHBvcHVwXCIsIEVycm9yKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0X3N3aXRjaERyYWZ0QW5kQWN0aXZlUG9wb3Zlckxpc3RTZWxlY3QoZXZlbnQ6IEV2ZW50KSB7XG5cdFx0Y29uc3QgY29udGV4dDogYW55ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKSxcblx0XHRcdHNlbGVjdGVkSXRlbUtleSA9IGV2ZW50LmdldFBhcmFtZXRlcihcIml0ZW1cIikuZ2V0UHJvcGVydHkoXCJrZXlcIiksXG5cdFx0XHRpc0FjdGl2ZUVudGl0eSA9IGNvbnRleHQuZ2V0T2JqZWN0KCkuSXNBY3RpdmVFbnRpdHk7XG5cdFx0Ly8gSXQgd2FzIGRlY2lkZWQgdGhhdCB3ZSBzaG91bGQgTk9UIHNldCB0aGUgZW50cnkgaW4gdGhlIGxpc3QgY29ycmVzcG9uZGluZyB0byB0aGUgY3VycmVudGx5IGRpc3BsYXllZCBkb2N1bWVudCB2ZXJzaW9uIHRvXG5cdFx0Ly8gZGlzYWJsZWQsIGhlbmNlIHRoZSB1c2VyIGNhbiBjbGljayBlbnRyaWVzIHdoaWNoIHRvIG5vdCBjYXVzZSBhbiBhY3Rpb24gKGNsaWNraW5nIFwiRHJhZnRcIiB3aGVuIHlvdSBhbHJlYWR5IGRpc3BsYXkgdGhlXG5cdFx0Ly8gZHJhZnQgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQpXG5cdFx0Ly8gSGVuY2Ugd2UgY2hlY2sgaGVyZSB3aGljaCBlbnRyeSBpbiB0aGUgbGlzdCB3YXMgY2xpY2tlZCBhbmQgd2hpY2ggZG9jdW1lbnQgdmVyc2lvbiB3ZSBjdXJyZW50bHkgZGlzcGxheSBhbmQgb25seSBkb1xuXHRcdC8vIHRoZSBzd2l0Y2ggYmV0d2VlbiBkcmFmdCAvIGFjdGl2ZSB2ZXJzaW9uIGlmIGl0IG1ha2VzIHNlbnNlLlxuXHRcdGlmICgoaXNBY3RpdmVFbnRpdHkgJiYgc2VsZWN0ZWRJdGVtS2V5ID09PSBcInN3aXRjaFRvRHJhZnRcIikgfHwgKCFpc0FjdGl2ZUVudGl0eSAmJiBzZWxlY3RlZEl0ZW1LZXkgPT09IFwic3dpdGNoVG9BY3RpdmVcIikpIHtcblx0XHRcdHRoaXMuZWRpdEZsb3cudG9nZ2xlRHJhZnRBY3RpdmUoY29udGV4dCk7XG5cdFx0fVxuXHRcdCgoZXZlbnQuZ2V0U291cmNlKCkgYXMgQ29udHJvbCkuZ2V0UGFyZW50KCkgYXMgUG9wb3ZlcikuY2xvc2UoKTtcblx0fVxuXG5cdF91cGRhdGVSZWxhdGVkQXBwcygpIHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0aWYgKENvbW1vblV0aWxzLnJlc29sdmVTdHJpbmd0b0Jvb2xlYW4ob09iamVjdFBhZ2UuZGF0YShcInNob3dSZWxhdGVkQXBwc1wiKSkpIHtcblx0XHRcdENvbW1vblV0aWxzLnVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyhvT2JqZWN0UGFnZSk7XG5cdFx0fVxuXHR9XG5cblx0X2ZpbmRUYWJsZUluU3ViU2VjdGlvbihhUGFyZW50RWxlbWVudDogYW55LCBhU3Vic2VjdGlvbjogYW55LCBhVGFibGVzOiBhbnkpIHtcblx0XHRjb25zdCBhU3ViU2VjdGlvblRhYmxlcyA9IFtdO1xuXHRcdGZvciAobGV0IGVsZW1lbnQgPSAwOyBlbGVtZW50IDwgYVBhcmVudEVsZW1lbnQubGVuZ3RoOyBlbGVtZW50KyspIHtcblx0XHRcdGxldCBvRWxlbWVudCA9IGFQYXJlbnRFbGVtZW50W2VsZW1lbnRdLmdldENvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBhUGFyZW50RWxlbWVudFtlbGVtZW50XS5nZXRDb250ZW50KCk7XG5cdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQuaXNBICYmIG9FbGVtZW50LmlzQShcInNhcC51aS5sYXlvdXQuRHluYW1pY1NpZGVDb250ZW50XCIpKSB7XG5cdFx0XHRcdG9FbGVtZW50ID0gb0VsZW1lbnQuZ2V0TWFpbkNvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBvRWxlbWVudC5nZXRNYWluQ29udGVudCgpO1xuXHRcdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdG9FbGVtZW50ID0gb0VsZW1lbnRbMF07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5pc0EgJiYgb0VsZW1lbnQuaXNBKFwic2FwLmZlLm1hY3Jvcy5UYWJsZUFQSVwiKSkge1xuXHRcdFx0XHRvRWxlbWVudCA9IG9FbGVtZW50LmdldENvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBvRWxlbWVudC5nZXRDb250ZW50KCk7XG5cdFx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0b0VsZW1lbnQgPSBvRWxlbWVudFswXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50LmlzQSAmJiBvRWxlbWVudC5pc0EoXCJzYXAudWkubWRjLlRhYmxlXCIpKSB7XG5cdFx0XHRcdGFUYWJsZXMucHVzaChvRWxlbWVudCk7XG5cdFx0XHRcdGFTdWJTZWN0aW9uVGFibGVzLnB1c2goe1xuXHRcdFx0XHRcdFwidGFibGVcIjogb0VsZW1lbnQsXG5cdFx0XHRcdFx0XCJncmlkVGFibGVcIjogb0VsZW1lbnQuZ2V0VHlwZSgpLmlzQShcInNhcC51aS5tZGMudGFibGUuR3JpZFRhYmxlVHlwZVwiKVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKFxuXHRcdFx0YVN1YlNlY3Rpb25UYWJsZXMubGVuZ3RoID09PSAxICYmXG5cdFx0XHRhUGFyZW50RWxlbWVudC5sZW5ndGggPT09IDEgJiZcblx0XHRcdGFTdWJTZWN0aW9uVGFibGVzWzBdLmdyaWRUYWJsZSAmJlxuXHRcdFx0IWFTdWJzZWN0aW9uLmhhc1N0eWxlQ2xhc3MoXCJzYXBVeEFQT2JqZWN0UGFnZVN1YlNlY3Rpb25GaXRDb250YWluZXJcIilcblx0XHQpIHtcblx0XHRcdC8vSW4gY2FzZSB0aGVyZSBpcyBvbmx5IGEgc2luZ2xlIHRhYmxlIGluIGEgc2VjdGlvbiB3ZSBmaXQgdGhhdCB0byB0aGUgd2hvbGUgcGFnZSBzbyB0aGF0IHRoZSBzY3JvbGxiYXIgY29tZXMgb25seSBvbiB0YWJsZSBhbmQgbm90IG9uIHBhZ2Vcblx0XHRcdGFTdWJzZWN0aW9uLmFkZFN0eWxlQ2xhc3MoXCJzYXBVeEFQT2JqZWN0UGFnZVN1YlNlY3Rpb25GaXRDb250YWluZXJcIik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmIChhU3ViU2VjdGlvblRhYmxlcyAmJiAhYVN1YnNlY3Rpb24uaGFzU3R5bGVDbGFzcyhcInNhcFV4QVBPYmplY3RQYWdlU3ViU2VjdGlvbkZpdENvbnRhaW5lclwiKSkge1xuXHRcdFx0XHRhU3ViU2VjdGlvblRhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uIChvVGFibGU6IHsgdGFibGU6IGFueTsgZ3JpZFRhYmxlOiBhbnkgfSkge1xuXHRcdFx0XHRcdGlmIChvVGFibGUuZ3JpZFRhYmxlKSB7XG5cdFx0XHRcdFx0XHQvL1Jlc2V0dGluZyB0aGUgcm93IGNvdW50IHRvIGRlZmF1bHQgdmFsdWUgaW4gY2FzZSB3ZSBoYXZlIGEgY29tYmluYXRpb24gb2YgZm9ybXMgYW5kIHRhYmxlcyBvciBtdWx0aXBsZSB0YWJsZXMgaW4gYSBzdWJzZWN0aW9uXG5cdFx0XHRcdFx0XHRvVGFibGUudGFibGUuZ2V0VHlwZSgpLnNldFJvd0NvdW50KG51bGwpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X2dldEFsbFN1YlNlY3Rpb25zKCkge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRsZXQgYVN1YlNlY3Rpb25zOiBhbnlbXSA9IFtdO1xuXHRcdG9PYmplY3RQYWdlLmdldFNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1NlY3Rpb246IGFueSkge1xuXHRcdFx0YVN1YlNlY3Rpb25zID0gYVN1YlNlY3Rpb25zLmNvbmNhdChvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gYVN1YlNlY3Rpb25zO1xuXHR9XG5cblx0X2dldEFsbEJsb2NrcygpIHtcblx0XHRsZXQgYUJsb2NrczogYW55W10gPSBbXTtcblx0XHR0aGlzLl9nZXRBbGxTdWJTZWN0aW9ucygpLmZvckVhY2goZnVuY3Rpb24gKG9TdWJTZWN0aW9uOiBhbnkpIHtcblx0XHRcdGFCbG9ja3MgPSBhQmxvY2tzLmNvbmNhdChvU3ViU2VjdGlvbi5nZXRCbG9ja3MoKSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGFCbG9ja3M7XG5cdH1cblxuXHRfZmluZFRhYmxlcygpIHtcblx0XHRjb25zdCBhU3ViU2VjdGlvbnMgPSB0aGlzLl9nZXRBbGxTdWJTZWN0aW9ucygpO1xuXHRcdGNvbnN0IGFUYWJsZXM6IGFueVtdID0gW107XG5cdFx0Zm9yIChsZXQgc3ViU2VjdGlvbiA9IDA7IHN1YlNlY3Rpb24gPCBhU3ViU2VjdGlvbnMubGVuZ3RoOyBzdWJTZWN0aW9uKyspIHtcblx0XHRcdHRoaXMuX2ZpbmRUYWJsZUluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0QmxvY2tzKCksIGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXSwgYVRhYmxlcyk7XG5cdFx0XHR0aGlzLl9maW5kVGFibGVJblN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLmdldE1vcmVCbG9ja3MoKSwgYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLCBhVGFibGVzKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFUYWJsZXM7XG5cdH1cblxuXHRfY2xvc2VTaWRlQ29udGVudCgpIHtcblx0XHR0aGlzLl9nZXRBbGxCbG9ja3MoKS5mb3JFYWNoKGZ1bmN0aW9uIChvQmxvY2s6IGFueSkge1xuXHRcdFx0Y29uc3Qgb0NvbnRlbnQgPSBvQmxvY2suZ2V0Q29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIG9CbG9jay5nZXRDb250ZW50KCk7XG5cdFx0XHRpZiAob0NvbnRlbnQgJiYgb0NvbnRlbnQuaXNBICYmIG9Db250ZW50LmlzQShcInNhcC51aS5sYXlvdXQuRHluYW1pY1NpZGVDb250ZW50XCIpKSB7XG5cdFx0XHRcdGlmIChvQ29udGVudC5zZXRTaG93U2lkZUNvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuXHRcdFx0XHRcdG9Db250ZW50LnNldFNob3dTaWRlQ29udGVudChmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGFydCBDb250ZXh0IGlzIHJlc29sdmVkIGZvciAxOm4gbWljcm9jaGFydHMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c2FwLnVpLm1vZGVsLkNvbnRleHR9IG9DaGFydENvbnRleHQgVGhlIENvbnRleHQgb2YgdGhlIE1pY3JvQ2hhcnRcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNDaGFydFBhdGggVGhlIGNvbGxlY3Rpb25QYXRoIG9mIHRoZSB0aGUgY2hhcnRcblx0ICogQHJldHVybnMge0FycmF5fSBBcnJheSBvZiBBdHRyaWJ1dGVzIG9mIHRoZSBjaGFydCBDb250ZXh0XG5cdCAqL1xuXHRfZ2V0Q2hhcnRDb250ZXh0RGF0YShvQ2hhcnRDb250ZXh0OiBhbnksIHNDaGFydFBhdGg6IHN0cmluZykge1xuXHRcdGNvbnN0IG9Db250ZXh0RGF0YSA9IG9DaGFydENvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0bGV0IG9DaGFydENvbnRleHREYXRhID0gW29Db250ZXh0RGF0YV07XG5cdFx0aWYgKG9DaGFydENvbnRleHQgJiYgc0NoYXJ0UGF0aCkge1xuXHRcdFx0aWYgKG9Db250ZXh0RGF0YVtzQ2hhcnRQYXRoXSkge1xuXHRcdFx0XHRvQ2hhcnRDb250ZXh0RGF0YSA9IG9Db250ZXh0RGF0YVtzQ2hhcnRQYXRoXTtcblx0XHRcdFx0ZGVsZXRlIG9Db250ZXh0RGF0YVtzQ2hhcnRQYXRoXTtcblx0XHRcdFx0b0NoYXJ0Q29udGV4dERhdGEucHVzaChvQ29udGV4dERhdGEpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb0NoYXJ0Q29udGV4dERhdGE7XG5cdH1cblxuXHQvKipcblx0ICogU2Nyb2xsIHRoZSB0YWJsZXMgdG8gdGhlIHJvdyB3aXRoIHRoZSBzUGF0aFxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgc2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLk9iamVjdFBhZ2VDb250cm9sbGVyLmNvbnRyb2xsZXIjX3Njcm9sbFRhYmxlc1RvUm93XG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzUm93UGF0aCAnc1BhdGggb2YgdGhlIHRhYmxlIHJvdydcblx0ICpcblx0ICovXG5cblx0X3Njcm9sbFRhYmxlc1RvUm93KHNSb3dQYXRoOiBzdHJpbmcpIHtcblx0XHRpZiAodGhpcy5fZmluZFRhYmxlcyAmJiB0aGlzLl9maW5kVGFibGVzKCkubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgYVRhYmxlcyA9IHRoaXMuX2ZpbmRUYWJsZXMoKTtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYVRhYmxlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRUYWJsZVNjcm9sbGVyLnNjcm9sbFRhYmxlVG9Sb3coYVRhYmxlc1tpXSwgc1Jvd1BhdGgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gbWVyZ2Ugc2VsZWN0ZWQgY29udGV4dHMgYW5kIGZpbHRlcnMuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBfbWVyZ2VNdWx0aXBsZUNvbnRleHRzXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvUGFnZUNvbnRleHQgUGFnZSBjb250ZXh0XG5cdCAqIEBwYXJhbSB7b2JqZWN0fEFycmF5fSBhTGluZUNvbnRleHQgU2VsZWN0ZWQgQ29udGV4dHNcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNDaGFydFBhdGggQ29sbGVjdGlvbiBuYW1lIG9mIHRoZSBjaGFydFxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBTZWxlY3Rpb24gVmFyaWFudCBPYmplY3Rcblx0ICovXG5cdF9tZXJnZU11bHRpcGxlQ29udGV4dHMob1BhZ2VDb250ZXh0OiBDb250ZXh0LCBhTGluZUNvbnRleHQ6IGFueVtdLCBzQ2hhcnRQYXRoOiBzdHJpbmcpIHtcblx0XHRsZXQgYUF0dHJpYnV0ZXM6IGFueVtdID0gW10sXG5cdFx0XHRhUGFnZUF0dHJpYnV0ZXMgPSBbXSxcblx0XHRcdG9Db250ZXh0LFxuXHRcdFx0c01ldGFQYXRoTGluZTogc3RyaW5nLFxuXHRcdFx0c1BhdGhMaW5lO1xuXG5cdFx0Y29uc3Qgc1BhZ2VQYXRoID0gb1BhZ2VDb250ZXh0LmdldFBhdGgoKTtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb1BhZ2VDb250ZXh0ICYmIG9QYWdlQ29udGV4dC5nZXRNb2RlbCgpICYmIChvUGFnZUNvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCk7XG5cdFx0Y29uc3Qgc01ldGFQYXRoUGFnZSA9IG9NZXRhTW9kZWwgJiYgb01ldGFNb2RlbC5nZXRNZXRhUGF0aChzUGFnZVBhdGgpLnJlcGxhY2UoL15cXC8qLywgXCJcIik7XG5cblx0XHQvLyBHZXQgc2luZ2xlIGxpbmUgY29udGV4dCBpZiBuZWNlc3Nhcnlcblx0XHRpZiAoYUxpbmVDb250ZXh0ICYmIGFMaW5lQ29udGV4dC5sZW5ndGgpIHtcblx0XHRcdG9Db250ZXh0ID0gYUxpbmVDb250ZXh0WzBdO1xuXHRcdFx0c1BhdGhMaW5lID0gb0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdFx0c01ldGFQYXRoTGluZSA9IG9NZXRhTW9kZWwgJiYgb01ldGFNb2RlbC5nZXRNZXRhUGF0aChzUGF0aExpbmUpLnJlcGxhY2UoL15cXC8qLywgXCJcIik7XG5cblx0XHRcdGFMaW5lQ29udGV4dC5tYXAoKG9TaW5nbGVDb250ZXh0OiBhbnkpID0+IHtcblx0XHRcdFx0aWYgKHNDaGFydFBhdGgpIHtcblx0XHRcdFx0XHRjb25zdCBvQ2hhcnRDb250ZXh0RGF0YSA9IHRoaXMuX2dldENoYXJ0Q29udGV4dERhdGEob1NpbmdsZUNvbnRleHQsIHNDaGFydFBhdGgpO1xuXHRcdFx0XHRcdGlmIChvQ2hhcnRDb250ZXh0RGF0YSkge1xuXHRcdFx0XHRcdFx0YUF0dHJpYnV0ZXMgPSBvQ2hhcnRDb250ZXh0RGF0YS5tYXAoZnVuY3Rpb24gKG9DaGFydENvbnRleHREYXRhOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRjb250ZXh0RGF0YTogb0NoYXJ0Q29udGV4dERhdGEsXG5cdFx0XHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBzTWV0YVBhdGhQYWdlICsgXCIvXCIgKyBzQ2hhcnRQYXRoXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YUF0dHJpYnV0ZXMucHVzaCh7XG5cdFx0XHRcdFx0XHRjb250ZXh0RGF0YTogb1NpbmdsZUNvbnRleHQuZ2V0T2JqZWN0KCksXG5cdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IHNNZXRhUGF0aExpbmVcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGFQYWdlQXR0cmlidXRlcy5wdXNoKHtcblx0XHRcdGNvbnRleHREYXRhOiBvUGFnZUNvbnRleHQuZ2V0T2JqZWN0KCksXG5cdFx0XHRlbnRpdHlTZXQ6IHNNZXRhUGF0aFBhZ2Vcblx0XHR9KTtcblx0XHQvLyBBZGRpbmcgUGFnZSBDb250ZXh0IHRvIHNlbGVjdGlvbiB2YXJpYW50XG5cdFx0YVBhZ2VBdHRyaWJ1dGVzID0gQ29tbW9uVXRpbHMucmVtb3ZlU2Vuc2l0aXZlRGF0YShhUGFnZUF0dHJpYnV0ZXMsIG9NZXRhTW9kZWwpO1xuXHRcdGNvbnN0IG9QYWdlTGV2ZWxTViA9IENvbW1vblV0aWxzLmFkZFBhZ2VDb250ZXh0VG9TZWxlY3Rpb25WYXJpYW50KG5ldyBTZWxlY3Rpb25WYXJpYW50KCksIGFQYWdlQXR0cmlidXRlcywgdGhpcy5nZXRWaWV3KCkpO1xuXHRcdGFBdHRyaWJ1dGVzID0gQ29tbW9uVXRpbHMucmVtb3ZlU2Vuc2l0aXZlRGF0YShhQXR0cmlidXRlcywgb01ldGFNb2RlbCk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnQ6IG9QYWdlTGV2ZWxTVixcblx0XHRcdGF0dHJpYnV0ZXM6IGFBdHRyaWJ1dGVzXG5cdFx0fTtcblx0fVxuXG5cdF9nZXRCYXRjaEdyb3Vwc0ZvclZpZXcoKSB7XG5cdFx0Y29uc3Qgb1ZpZXdEYXRhID0gdGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnksXG5cdFx0XHRvQ29uZmlndXJhdGlvbnMgPSBvVmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb24sXG5cdFx0XHRhQ29uZmlndXJhdGlvbnMgPSBvQ29uZmlndXJhdGlvbnMgJiYgT2JqZWN0LmtleXMob0NvbmZpZ3VyYXRpb25zKSxcblx0XHRcdGFCYXRjaEdyb3VwcyA9IFtcIiRhdXRvLkhlcm9lc1wiLCBcIiRhdXRvLkRlY29yYXRpb25cIiwgXCIkYXV0by5Xb3JrZXJzXCJdO1xuXG5cdFx0aWYgKGFDb25maWd1cmF0aW9ucyAmJiBhQ29uZmlndXJhdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0YUNvbmZpZ3VyYXRpb25zLmZvckVhY2goZnVuY3Rpb24gKHNLZXk6IGFueSkge1xuXHRcdFx0XHRjb25zdCBvQ29uZmlndXJhdGlvbiA9IG9Db25maWd1cmF0aW9uc1tzS2V5XTtcblx0XHRcdFx0aWYgKG9Db25maWd1cmF0aW9uLnJlcXVlc3RHcm91cElkID09PSBcIkxvbmdSdW5uZXJzXCIpIHtcblx0XHRcdFx0XHRhQmF0Y2hHcm91cHMucHVzaChcIiRhdXRvLkxvbmdSdW5uZXJzXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGFCYXRjaEdyb3Vwcztcblx0fVxuXG5cdC8qXG5cdCAqIFJlc2V0IEJyZWFkY3J1bWIgbGlua3Ncblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7c2FwLm0uQnJlYWRjcnVtYnN9IFtvU291cmNlXSBwYXJlbnQgY29udHJvbFxuXHQgKiBAZGVzY3JpcHRpb24gVXNlZCB3aGVuIGNvbnRleHQgb2YgdGhlIG9iamVjdHBhZ2UgY2hhbmdlcy5cblx0ICogICAgICAgICAgICAgIFRoaXMgZXZlbnQgY2FsbGJhY2sgaXMgYXR0YWNoZWQgdG8gbW9kZWxDb250ZXh0Q2hhbmdlXG5cdCAqICAgICAgICAgICAgICBldmVudCBvZiB0aGUgQnJlYWRjcnVtYiBjb250cm9sIHRvIGNhdGNoIGNvbnRleHQgY2hhbmdlLlxuXHQgKiAgICAgICAgICAgICAgVGhlbiBlbGVtZW50IGJpbmRpbmcgYW5kIGhyZWZzIGFyZSB1cGRhdGVkIGZvciBlYWNoIExpbmsuXG5cdCAqXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAZXhwZXJpbWVudGFsXG5cdCAqL1xuXHRfc2V0QnJlYWRjcnVtYkxpbmtzKG9Tb3VyY2U6IGFueSkge1xuXHRcdGNvbnN0IG9Db250ZXh0ID0gb1NvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdGlmIChvQ29udGV4dCkge1xuXHRcdFx0Y29uc3Qgc05ld1BhdGggPSBvQ29udGV4dC5nZXRQYXRoKCksXG5cdFx0XHRcdGFQYXRoUGFydHMgPSBzTmV3UGF0aC5zcGxpdChcIi9cIiksXG5cdFx0XHRcdG9NZXRhTW9kZWwgPSBvQXBwQ29tcG9uZW50LmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0bGV0IHNQYXRoID0gXCJcIixcblx0XHRcdFx0aVNraXBQYXJhbWV0ZXJpemVkID0gMDtcblxuXHRcdFx0YVBhdGhQYXJ0cy5zaGlmdCgpO1xuXHRcdFx0YVBhdGhQYXJ0cy5zcGxpY2UoLTEsIDEpO1xuXHRcdFx0YVBhdGhQYXJ0cy5mb3JFYWNoKGZ1bmN0aW9uIChzUGF0aFBhcnQ6IGFueSwgaTogYW55KSB7XG5cdFx0XHRcdHNQYXRoICs9IFwiL1wiICsgc1BhdGhQYXJ0O1xuXHRcdFx0XHRjb25zdCBvUm9vdFZpZXdDb250cm9sbGVyID0gb0FwcENvbXBvbmVudC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKSBhcyBSb290Q29udGFpbmVyQmFzZUNvbnRyb2xsZXI7XG5cdFx0XHRcdGNvbnN0IHNQYXJhbWV0ZXJQYXRoID0gb01ldGFNb2RlbC5nZXRNZXRhUGF0aChzUGF0aCk7XG5cdFx0XHRcdGNvbnN0IGJSZXN1bHRDb250ZXh0ID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc1BhcmFtZXRlclBhdGggKyBcIi9AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlJlc3VsdENvbnRleHRcIik7XG5cdFx0XHRcdGlmIChiUmVzdWx0Q29udGV4dCkge1xuXHRcdFx0XHRcdC8vIFdlIGRvbnQgbmVlZCB0byBjcmVhdGUgYSBicmVhZGNydW1iIGZvciBQYXJhbWV0ZXIgcGF0aFxuXHRcdFx0XHRcdGlTa2lwUGFyYW1ldGVyaXplZCA9IDE7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgcFdhaXRGb3JUaXRsZUhpZWFyY2h5SW5mbyA9IG9Sb290Vmlld0NvbnRyb2xsZXIuZ2V0VGl0bGVJbmZvRnJvbVBhdGgoc1BhdGgpO1xuXG5cdFx0XHRcdHBXYWl0Rm9yVGl0bGVIaWVhcmNoeUluZm9cblx0XHRcdFx0XHQudGhlbihmdW5jdGlvbiAob1RpdGxlSGllYXJjaHlJbmZvOiBhbnkpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGlkeCA9IGkgLSBpU2tpcFBhcmFtZXRlcml6ZWQsXG5cdFx0XHRcdFx0XHRcdG9MaW5rID0gb1NvdXJjZS5nZXRMaW5rcygpW2lkeF0gPyBvU291cmNlLmdldExpbmtzKClbaWR4XSA6IG5ldyBMaW5rKCk7XG5cdFx0XHRcdFx0XHQvLyBzQ3VycmVudEVudGl0eSBpcyBhIGZhbGxiYWNrIHZhbHVlIGluIGNhc2Ugb2YgZW1wdHkgdGl0bGVcblx0XHRcdFx0XHRcdG9MaW5rLnNldFRleHQob1RpdGxlSGllYXJjaHlJbmZvLnN1YnRpdGxlIHx8IG9UaXRsZUhpZWFyY2h5SW5mby50aXRsZSk7XG5cdFx0XHRcdFx0XHRvTGluay5zZXRIcmVmKG9UaXRsZUhpZWFyY2h5SW5mby5pbnRlbnQpO1xuXHRcdFx0XHRcdFx0aWYgKCFvU291cmNlLmdldExpbmtzKClbaWR4XSkge1xuXHRcdFx0XHRcdFx0XHRvU291cmNlLmFkZExpbmsob0xpbmspO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgY29tcHV0aW5nIHRoZSB0aXRsZSBoaWVyYXJjaHlcIiwgb0Vycm9yKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdF9jaGVja0RhdGFQb2ludFRpdGxlRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uKCkge1xuXHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBvRGF0YVBvaW50cyA9IENvbW1vblV0aWxzLmdldEhlYWRlckZhY2V0SXRlbUNvbmZpZ0ZvckV4dGVybmFsTmF2aWdhdGlvbihcblx0XHRcdG9WaWV3LmdldFZpZXdEYXRhKCksXG5cdFx0XHR0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvdXRpbmdTZXJ2aWNlKCkuZ2V0T3V0Ym91bmRzKClcblx0XHQpO1xuXHRcdGNvbnN0IG9TaGVsbFNlcnZpY2VzID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdFx0Y29uc3Qgb1BhZ2VDb250ZXh0ID0gb1ZpZXcgJiYgKG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dCk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaXNIZWFkZXJEUExpbmtWaXNpYmxlXCIsIHt9KTtcblx0XHRpZiAob1BhZ2VDb250ZXh0KSB7XG5cdFx0XHRvUGFnZUNvbnRleHRcblx0XHRcdFx0LnJlcXVlc3RPYmplY3QoKVxuXHRcdFx0XHQudGhlbihmdW5jdGlvbiAob0RhdGE6IGFueSkge1xuXHRcdFx0XHRcdGZuR2V0TGlua3Mob0RhdGFQb2ludHMsIG9EYXRhKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkNhbm5vdCByZXRyaWV2ZSB0aGUgbGlua3MgZnJvbSB0aGUgc2hlbGwgc2VydmljZVwiLCBvRXJyb3IpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBAcGFyYW0gb0Vycm9yXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gZm5PbkVycm9yKG9FcnJvcjogYW55KSB7XG5cdFx0XHRMb2cuZXJyb3Iob0Vycm9yKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBmblNldExpbmtFbmFibGVtZW50KGlkOiBzdHJpbmcsIGFTdXBwb3J0ZWRMaW5rczogYW55KSB7XG5cdFx0XHRjb25zdCBzTGlua0lkID0gaWQ7XG5cdFx0XHQvLyBwcm9jZXNzIHZpYWJsZSBsaW5rcyBmcm9tIGdldExpbmtzIGZvciBhbGwgZGF0YXBvaW50cyBoYXZpbmcgb3V0Ym91bmRcblx0XHRcdGlmIChhU3VwcG9ydGVkTGlua3MgJiYgYVN1cHBvcnRlZExpbmtzLmxlbmd0aCA9PT0gMSAmJiBhU3VwcG9ydGVkTGlua3NbMF0uc3VwcG9ydGVkKSB7XG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImlzSGVhZGVyRFBMaW5rVmlzaWJsZS9cIiArIHNMaW5rSWQsIHRydWUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSBvRGF0YVBvaW50c1xuXHRcdCAqIEBwYXJhbSBvUGFnZURhdGFcblx0XHQgKi9cblx0XHRmdW5jdGlvbiBmbkdldExpbmtzKG9EYXRhUG9pbnRzOiBhbnksIG9QYWdlRGF0YTogYW55KSB7XG5cdFx0XHRmb3IgKGNvbnN0IHNJZCBpbiBvRGF0YVBvaW50cykge1xuXHRcdFx0XHRjb25zdCBvRGF0YVBvaW50ID0gb0RhdGFQb2ludHNbc0lkXTtcblx0XHRcdFx0Y29uc3Qgb1BhcmFtczogYW55ID0ge307XG5cdFx0XHRcdGNvbnN0IG9MaW5rID0gb1ZpZXcuYnlJZChzSWQpO1xuXHRcdFx0XHRpZiAoIW9MaW5rKSB7XG5cdFx0XHRcdFx0Ly8gZm9yIGRhdGEgcG9pbnRzIGNvbmZpZ3VyZWQgaW4gYXBwIGRlc2NyaXB0b3IgYnV0IG5vdCBhbm5vdGF0ZWQgaW4gdGhlIGhlYWRlclxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IG9MaW5rQ29udGV4dCA9IG9MaW5rLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0XHRcdGNvbnN0IG9MaW5rRGF0YTogYW55ID0gb0xpbmtDb250ZXh0ICYmIG9MaW5rQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0bGV0IG9NaXhlZENvbnRleHQ6IGFueSA9IG1lcmdlKHt9LCBvUGFnZURhdGEsIG9MaW5rRGF0YSk7XG5cdFx0XHRcdC8vIHByb2Nlc3Mgc2VtYW50aWMgb2JqZWN0IG1hcHBpbmdzXG5cdFx0XHRcdGlmIChvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0TWFwcGluZykge1xuXHRcdFx0XHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0TWFwcGluZztcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW0gaW4gYVNlbWFudGljT2JqZWN0TWFwcGluZykge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb01hcHBpbmcgPSBhU2VtYW50aWNPYmplY3RNYXBwaW5nW2l0ZW1dO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc01haW5Qcm9wZXJ0eSA9IG9NYXBwaW5nW1wiTG9jYWxQcm9wZXJ0eVwiXVtcIiRQcm9wZXJ0eVBhdGhcIl07XG5cdFx0XHRcdFx0XHRjb25zdCBzTWFwcGVkUHJvcGVydHkgPSBvTWFwcGluZ1tcIlNlbWFudGljT2JqZWN0UHJvcGVydHlcIl07XG5cdFx0XHRcdFx0XHRpZiAoc01haW5Qcm9wZXJ0eSAhPT0gc01hcHBlZFByb3BlcnR5KSB7XG5cdFx0XHRcdFx0XHRcdGlmIChvTWl4ZWRDb250ZXh0Lmhhc093blByb3BlcnR5KHNNYWluUHJvcGVydHkpKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb05ld01hcHBpbmc6IGFueSA9IHt9O1xuXHRcdFx0XHRcdFx0XHRcdG9OZXdNYXBwaW5nW3NNYXBwZWRQcm9wZXJ0eV0gPSBvTWl4ZWRDb250ZXh0W3NNYWluUHJvcGVydHldO1xuXHRcdFx0XHRcdFx0XHRcdG9NaXhlZENvbnRleHQgPSBtZXJnZSh7fSwgb01peGVkQ29udGV4dCwgb05ld01hcHBpbmcpO1xuXHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSBvTWl4ZWRDb250ZXh0W3NNYWluUHJvcGVydHldO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKG9NaXhlZENvbnRleHQpIHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHNLZXkgaW4gb01peGVkQ29udGV4dCkge1xuXHRcdFx0XHRcdFx0aWYgKHNLZXkuaW5kZXhPZihcIl9cIikgIT09IDAgJiYgc0tleS5pbmRleE9mKFwib2RhdGEuY29udGV4dFwiKSA9PT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0b1BhcmFtc1tzS2V5XSA9IG9NaXhlZENvbnRleHRbc0tleV07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIHZhbGlkYXRlIGlmIGEgbGluayBtdXN0IGJlIHJlbmRlcmVkXG5cdFx0XHRcdG9TaGVsbFNlcnZpY2VzXG5cdFx0XHRcdFx0LmlzTmF2aWdhdGlvblN1cHBvcnRlZChbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhcmdldDoge1xuXHRcdFx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRcdGFjdGlvbjogb0RhdGFQb2ludC5hY3Rpb25cblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0cGFyYW1zOiBvUGFyYW1zXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XSlcblx0XHRcdFx0XHQudGhlbigoYUxpbmtzKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZm5TZXRMaW5rRW5hYmxlbWVudChzSWQsIGFMaW5rcyk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZm5PbkVycm9yKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRoYW5kbGVycyA9IHtcblx0XHRvblRhYmxlQ29udGV4dENoYW5nZSh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlciwgb0V2ZW50OiBhbnkpIHtcblx0XHRcdGNvbnN0IG9Tb3VyY2UgPSBvRXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0XHRsZXQgb1RhYmxlOiBhbnk7XG5cdFx0XHR0aGlzLl9maW5kVGFibGVzKCkuc29tZShmdW5jdGlvbiAoX29UYWJsZTogYW55KSB7XG5cdFx0XHRcdGlmIChfb1RhYmxlLmdldFJvd0JpbmRpbmcoKSA9PT0gb1NvdXJjZSkge1xuXHRcdFx0XHRcdG9UYWJsZSA9IF9vVGFibGU7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSk7XG5cblx0XHRcdGNvbnN0IG9DdXJyZW50QWN0aW9uUHJvbWlzZSA9IHRoaXMuX2VkaXRGbG93LmdldEN1cnJlbnRBY3Rpb25Qcm9taXNlKCk7XG5cdFx0XHRpZiAob0N1cnJlbnRBY3Rpb25Qcm9taXNlKSB7XG5cdFx0XHRcdGxldCBhVGFibGVDb250ZXh0czogYW55O1xuXHRcdFx0XHRpZiAob1RhYmxlLmdldFR5cGUoKS5nZXRNZXRhZGF0YSgpLmlzQShcInNhcC51aS5tZGMudGFibGUuR3JpZFRhYmxlVHlwZVwiKSkge1xuXHRcdFx0XHRcdGFUYWJsZUNvbnRleHRzID0gb1NvdXJjZS5nZXRDb250ZXh0cygwKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhVGFibGVDb250ZXh0cyA9IG9Tb3VyY2UuZ2V0Q3VycmVudENvbnRleHRzKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly9pZiBjb250ZXh0cyBhcmUgbm90IGZ1bGx5IGxvYWRlZCB0aGUgZ2V0Y29udGV4dHMgZnVuY3Rpb24gYWJvdmUgd2lsbCB0cmlnZ2VyIGEgbmV3IGNoYW5nZSBldmVudCBjYWxsXG5cdFx0XHRcdGlmICghYVRhYmxlQ29udGV4dHNbMF0pIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0b0N1cnJlbnRBY3Rpb25Qcm9taXNlXG5cdFx0XHRcdFx0LnRoZW4oKG9BY3Rpb25SZXNwb25zZTogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoIW9BY3Rpb25SZXNwb25zZSB8fCBvQWN0aW9uUmVzcG9uc2UuY29udHJvbElkICE9PSBvVGFibGUuc0lkKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGNvbnN0IG9BY3Rpb25EYXRhID0gb0FjdGlvblJlc3BvbnNlLm9EYXRhO1xuXHRcdFx0XHRcdFx0Y29uc3QgYUtleXMgPSBvQWN0aW9uUmVzcG9uc2Uua2V5cztcblx0XHRcdFx0XHRcdGxldCBpTmV3SXRlbXAgPSAtMTtcblx0XHRcdFx0XHRcdGFUYWJsZUNvbnRleHRzLmZpbmQoZnVuY3Rpb24gKG9UYWJsZUNvbnRleHQ6IGFueSwgaTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9UYWJsZURhdGEgPSBvVGFibGVDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBiQ29tcGFyZSA9IGFLZXlzLmV2ZXJ5KGZ1bmN0aW9uIChzS2V5OiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gb1RhYmxlRGF0YVtzS2V5XSA9PT0gb0FjdGlvbkRhdGFbc0tleV07XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRpZiAoYkNvbXBhcmUpIHtcblx0XHRcdFx0XHRcdFx0XHRpTmV3SXRlbXAgPSBpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiBiQ29tcGFyZTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0aWYgKGlOZXdJdGVtcCAhPT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYURpYWxvZ3MgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0T3BlbkRpYWxvZ3MoKTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb0RpYWxvZyA9XG5cdFx0XHRcdFx0XHRcdFx0YURpYWxvZ3MubGVuZ3RoID4gMCA/IGFEaWFsb2dzLmZpbmQoKGRpYWxvZykgPT4gZGlhbG9nLmRhdGEoXCJGdWxsU2NyZWVuRGlhbG9nXCIpICE9PSB0cnVlKSA6IG51bGw7XG5cdFx0XHRcdFx0XHRcdGlmIChvRGlhbG9nKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gYnkgZGVzaWduLCBhIHNhcC5tLmRpYWxvZyBzZXQgdGhlIGZvY3VzIHRvIHRoZSBwcmV2aW91cyBmb2N1c2VkIGVsZW1lbnQgd2hlbiBjbG9zaW5nLlxuXHRcdFx0XHRcdFx0XHRcdC8vIHdlIHNob3VsZCB3YWl0IGZvciB0aGUgZGlhbG9nIHRvIGJlIGNsb3NlIGJlZm9yZSB0byBmb2N1cyBhbm90aGVyIGVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRvRGlhbG9nLmF0dGFjaEV2ZW50T25jZShcImFmdGVyQ2xvc2VcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0b1RhYmxlLmZvY3VzUm93KGlOZXdJdGVtcCwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0b1RhYmxlLmZvY3VzUm93KGlOZXdJdGVtcCwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0dGhpcy5fZWRpdEZsb3cuZGVsZXRlQ3VycmVudEFjdGlvblByb21pc2UoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyOiBhbnkpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkFuIGVycm9yIG9jY3VycyB3aGlsZSBzY3JvbGxpbmcgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgSXRlbTogXCIgKyBlcnIpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0Ly8gZmlyZSBNb2RlbENvbnRleHRDaGFuZ2Ugb24gdGhlIG1lc3NhZ2UgYnV0dG9uIHdoZW5ldmVyIHRoZSB0YWJsZSBjb250ZXh0IGNoYW5nZXNcblx0XHRcdGNvbnN0IG9NZXNzYWdlQnV0dG9uID0gdGhpcy5nZXRWaWV3KCkuYnlJZChcImZlOjpGb290ZXJCYXI6Ok1lc3NhZ2VCdXR0b25cIik7XG5cdFx0XHRvTWVzc2FnZUJ1dHRvbi5maXJlTW9kZWxDb250ZXh0Q2hhbmdlKCk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEludm9rZXMgYW4gYWN0aW9uIC0gYm91bmQvdW5ib3VuZCBhbmQgc2V0cyB0aGUgcGFnZSBkaXJ0eS5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSBvVmlld1xuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBzQWN0aW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uIHRvIGJlIGNhbGxlZFxuXHRcdCAqIEBwYXJhbSB7bWFwfSBbbVBhcmFtZXRlcnNdIENvbnRhaW5zIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcblx0XHQgKiBAcGFyYW0ge3NhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fSBbbVBhcmFtZXRlcnMuY29udGV4dHNdIE1hbmRhdG9yeSBmb3IgYSBib3VuZCBhY3Rpb24sIGVpdGhlciBvbmUgY29udGV4dCBvciBhbiBhcnJheSB3aXRoIGNvbnRleHRzIGZvciB3aGljaCB0aGUgYWN0aW9uIHNoYWxsIGJlIGNhbGxlZFxuXHRcdCAqIEBwYXJhbSB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTW9kZWx9IFttUGFyYW1ldGVycy5tb2RlbF0gTWFuZGF0b3J5IGZvciBhbiB1bmJvdW5kIGFjdGlvbjsgYW4gaW5zdGFuY2Ugb2YgYW4gT0RhdGEgVjQgbW9kZWxcblx0XHQgKiBAcmV0dXJucyB7UHJvbWlzZX1cblx0XHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0XHQgKiBAZmluYWxcblx0XHQgKi9cblx0XHRvbkNhbGxBY3Rpb24ob1ZpZXc6IGFueSwgc0FjdGlvbk5hbWU6IHN0cmluZywgbVBhcmFtZXRlcnM6IGFueSkge1xuXHRcdFx0Y29uc3Qgb0NvbnRyb2xsZXIgPSBvVmlldy5nZXRDb250cm9sbGVyKCk7XG5cdFx0XHRjb25zdCB0aGF0ID0gb0NvbnRyb2xsZXI7XG5cdFx0XHRyZXR1cm4gb0NvbnRyb2xsZXIuZWRpdEZsb3dcblx0XHRcdFx0Lmludm9rZUFjdGlvbihzQWN0aW9uTmFtZSwgbVBhcmFtZXRlcnMpXG5cdFx0XHRcdC50aGVuKHRoYXQuX3Nob3dNZXNzYWdlUG9wb3Zlci5iaW5kKHRoYXQsIHVuZGVmaW5lZCkpXG5cdFx0XHRcdC5jYXRjaCh0aGF0Ll9zaG93TWVzc2FnZVBvcG92ZXIuYmluZCh0aGF0KSk7XG5cdFx0fSxcblx0XHRvbkRhdGFQb2ludFRpdGxlUHJlc3NlZChvQ29udHJvbGxlcjogYW55LCBvU291cmNlOiBhbnksIG9NYW5pZmVzdE91dGJvdW5kOiBhbnksIHNDb250cm9sQ29uZmlnOiBhbnksIHNDb2xsZWN0aW9uUGF0aDogYW55KSB7XG5cdFx0XHRvTWFuaWZlc3RPdXRib3VuZCA9IHR5cGVvZiBvTWFuaWZlc3RPdXRib3VuZCA9PT0gXCJzdHJpbmdcIiA/IEpTT04ucGFyc2Uob01hbmlmZXN0T3V0Ym91bmQpIDogb01hbmlmZXN0T3V0Ym91bmQ7XG5cdFx0XHRjb25zdCBvVGFyZ2V0SW5mbyA9IG9NYW5pZmVzdE91dGJvdW5kW3NDb250cm9sQ29uZmlnXSxcblx0XHRcdFx0YVNlbWFudGljT2JqZWN0TWFwcGluZyA9IENvbW1vblV0aWxzLmdldFNlbWFudGljT2JqZWN0TWFwcGluZyhvVGFyZ2V0SW5mbyksXG5cdFx0XHRcdG9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHQgPSBvU291cmNlLmdldEJpbmRpbmdDb250ZXh0KCksXG5cdFx0XHRcdHNNZXRhUGF0aCA9IG9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHRcblx0XHRcdFx0XHQuZ2V0TW9kZWwoKVxuXHRcdFx0XHRcdC5nZXRNZXRhTW9kZWwoKVxuXHRcdFx0XHRcdC5nZXRNZXRhUGF0aChvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0LmdldFBhdGgoKSk7XG5cdFx0XHRsZXQgYU5hdmlnYXRpb25EYXRhID0gb0NvbnRyb2xsZXIuX2dldENoYXJ0Q29udGV4dERhdGEob0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dCwgc0NvbGxlY3Rpb25QYXRoKTtcblx0XHRcdGxldCBhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnM7XG5cblx0XHRcdGFOYXZpZ2F0aW9uRGF0YSA9IGFOYXZpZ2F0aW9uRGF0YS5tYXAoZnVuY3Rpb24gKG9OYXZpZ2F0aW9uRGF0YTogYW55KSB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0ZGF0YTogb05hdmlnYXRpb25EYXRhLFxuXHRcdFx0XHRcdG1ldGFQYXRoOiBzTWV0YVBhdGggKyAoc0NvbGxlY3Rpb25QYXRoID8gXCIvXCIgKyBzQ29sbGVjdGlvblBhdGggOiBcIlwiKVxuXHRcdFx0XHR9O1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAob1RhcmdldEluZm8gJiYgb1RhcmdldEluZm8ucGFyYW1ldGVycykge1xuXHRcdFx0XHRjb25zdCBvUGFyYW1zID0gb1RhcmdldEluZm8ucGFyYW1ldGVycyAmJiBvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLmdldE91dGJvdW5kUGFyYW1zKG9UYXJnZXRJbmZvLnBhcmFtZXRlcnMpO1xuXHRcdFx0XHRpZiAoT2JqZWN0LmtleXMob1BhcmFtcykubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdGFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVycyA9IG9QYXJhbXM7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChvVGFyZ2V0SW5mbyAmJiBvVGFyZ2V0SW5mby5zZW1hbnRpY09iamVjdCAmJiBvVGFyZ2V0SW5mby5hY3Rpb24pIHtcblx0XHRcdFx0b0NvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5uYXZpZ2F0ZShvVGFyZ2V0SW5mby5zZW1hbnRpY09iamVjdCwgb1RhcmdldEluZm8uYWN0aW9uLCB7XG5cdFx0XHRcdFx0bmF2aWdhdGlvbkNvbnRleHRzOiBhTmF2aWdhdGlvbkRhdGEsXG5cdFx0XHRcdFx0c2VtYW50aWNPYmplY3RNYXBwaW5nOiBhU2VtYW50aWNPYmplY3RNYXBwaW5nLFxuXHRcdFx0XHRcdGFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVyczogYWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogVHJpZ2dlcnMgYW4gb3V0Ym91bmQgbmF2aWdhdGlvbiB3aGVuIGEgdXNlciBjaG9vc2VzIHRoZSBjaGV2cm9uLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtvYmplY3R9IG9Db250cm9sbGVyXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHNPdXRib3VuZFRhcmdldCBOYW1lIG9mIHRoZSBvdXRib3VuZCB0YXJnZXQgKG5lZWRzIHRvIGJlIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0KVxuXHRcdCAqIEBwYXJhbSB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHR9IG9Db250ZXh0IFRoZSBjb250ZXh0IHRoYXQgY29udGFpbnMgdGhlIGRhdGEgZm9yIHRoZSB0YXJnZXQgYXBwXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHNDcmVhdGVQYXRoIENyZWF0ZSBwYXRoIHdoZW4gdGhlIGNoZXZyb24gaXMgY3JlYXRlZC5cblx0XHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aGljaCBpcyByZXNvbHZlZCBvbmNlIHRoZSBuYXZpZ2F0aW9uIGlzIHRyaWdnZXJlZCAoPz8/IG1heWJlIG9ubHkgb25jZSBmaW5pc2hlZD8pXG5cdFx0ICogQHVpNS1yZXN0cmljdGVkXG5cdFx0ICogQGZpbmFsXG5cdFx0ICovXG5cdFx0b25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kKG9Db250cm9sbGVyOiBPYmplY3RQYWdlQ29udHJvbGxlciwgc091dGJvdW5kVGFyZ2V0OiBzdHJpbmcsIG9Db250ZXh0OiBhbnksIHNDcmVhdGVQYXRoOiBzdHJpbmcpIHtcblx0XHRcdHJldHVybiBvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZChvQ29udHJvbGxlciwgc091dGJvdW5kVGFyZ2V0LCBvQ29udGV4dCwgc0NyZWF0ZVBhdGgpO1xuXHRcdH0sXG5cblx0XHRvbk5hdmlnYXRlQ2hhbmdlKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyLCBvRXZlbnQ6IGFueSkge1xuXHRcdFx0Ly93aWxsIGJlIGNhbGxlZCBhbHdheXMgd2hlbiB3ZSBjbGljayBvbiBhIHNlY3Rpb24gdGFiXG5cdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0XHR0aGlzLmJTZWN0aW9uTmF2aWdhdGVkID0gdHJ1ZTtcblxuXHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRcdGlmIChcblx0XHRcdFx0b09iamVjdFBhZ2UuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpICYmXG5cdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkuc2VjdGlvbkxheW91dCA9PT0gXCJUYWJzXCIgJiZcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiZXJyb3JOYXZpZ2F0aW9uU2VjdGlvbkZsYWdcIikgPT09IGZhbHNlXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29uc3Qgb1N1YlNlY3Rpb24gPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwic3ViU2VjdGlvblwiKTtcblx0XHRcdFx0dGhpcy5fdXBkYXRlRm9jdXNJbkVkaXRNb2RlKFtvU3ViU2VjdGlvbl0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0b25WYXJpYW50U2VsZWN0ZWQ6IGZ1bmN0aW9uICh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlcikge1xuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdH0sXG5cdFx0b25WYXJpYW50U2F2ZWQ6IGZ1bmN0aW9uICh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlcikge1xuXHRcdFx0Ly9UT0RPOiBTaG91bGQgcmVtb3ZlIHRoaXMgc2V0VGltZU91dCBvbmNlIFZhcmlhbnQgTWFuYWdlbWVudCBwcm92aWRlcyBhbiBhcGkgdG8gZmV0Y2ggdGhlIGN1cnJlbnQgdmFyaWFudCBrZXkgb24gc2F2ZVxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdH0sIDUwMCk7XG5cdFx0fSxcblx0XHRuYXZpZ2F0ZVRvU3ViU2VjdGlvbjogZnVuY3Rpb24gKG9Db250cm9sbGVyOiBPYmplY3RQYWdlQ29udHJvbGxlciwgdkRldGFpbENvbmZpZzogYW55KSB7XG5cdFx0XHRjb25zdCBvRGV0YWlsQ29uZmlnID0gdHlwZW9mIHZEZXRhaWxDb25maWcgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKHZEZXRhaWxDb25maWcpIDogdkRldGFpbENvbmZpZztcblx0XHRcdGNvbnN0IG9PYmplY3RQYWdlID0gb0NvbnRyb2xsZXIuZ2V0VmlldygpLmJ5SWQoXCJmZTo6T2JqZWN0UGFnZVwiKSBhcyBPYmplY3RQYWdlTGF5b3V0O1xuXHRcdFx0bGV0IG9TZWN0aW9uO1xuXHRcdFx0bGV0IG9TdWJTZWN0aW9uO1xuXHRcdFx0aWYgKG9EZXRhaWxDb25maWcuc2VjdGlvbklkKSB7XG5cdFx0XHRcdG9TZWN0aW9uID0gb0NvbnRyb2xsZXIuZ2V0VmlldygpLmJ5SWQob0RldGFpbENvbmZpZy5zZWN0aW9uSWQpIGFzIE9iamVjdFBhZ2VTZWN0aW9uO1xuXHRcdFx0XHRvU3ViU2VjdGlvbiA9IChcblx0XHRcdFx0XHRvRGV0YWlsQ29uZmlnLnN1YlNlY3Rpb25JZFxuXHRcdFx0XHRcdFx0PyBvQ29udHJvbGxlci5nZXRWaWV3KCkuYnlJZChvRGV0YWlsQ29uZmlnLnN1YlNlY3Rpb25JZClcblx0XHRcdFx0XHRcdDogb1NlY3Rpb24gJiYgb1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKSAmJiBvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpWzBdXG5cdFx0XHRcdCkgYXMgT2JqZWN0UGFnZVN1YlNlY3Rpb247XG5cdFx0XHR9IGVsc2UgaWYgKG9EZXRhaWxDb25maWcuc3ViU2VjdGlvbklkKSB7XG5cdFx0XHRcdG9TdWJTZWN0aW9uID0gb0NvbnRyb2xsZXIuZ2V0VmlldygpLmJ5SWQob0RldGFpbENvbmZpZy5zdWJTZWN0aW9uSWQpIGFzIE9iamVjdFBhZ2VTdWJTZWN0aW9uO1xuXHRcdFx0XHRvU2VjdGlvbiA9IG9TdWJTZWN0aW9uICYmIChvU3ViU2VjdGlvbi5nZXRQYXJlbnQoKSBhcyBPYmplY3RQYWdlU2VjdGlvbik7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIW9TZWN0aW9uIHx8ICFvU3ViU2VjdGlvbiB8fCAhb1NlY3Rpb24uZ2V0VmlzaWJsZSgpIHx8ICFvU3ViU2VjdGlvbi5nZXRWaXNpYmxlKCkpIHtcblx0XHRcdFx0KChvQ29udHJvbGxlci5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJzYXAuZmUuaTE4blwiKSBhcyBSZXNvdXJjZU1vZGVsKS5nZXRSZXNvdXJjZUJ1bmRsZSgpIGFzIFByb21pc2U8UmVzb3VyY2VCdW5kbGU+KVxuXHRcdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChvUmVzb3VyY2VCdW5kbGUpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHNUaXRsZSA9IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFxuXHRcdFx0XHRcdFx0XHRcIkNfUk9VVElOR19OQVZJR0FUSU9OX0RJU0FCTEVEX1RJVExFXCIsXG5cdFx0XHRcdFx0XHRcdG9SZXNvdXJjZUJ1bmRsZSxcblx0XHRcdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHRcdFx0KG9Db250cm9sbGVyLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkuZW50aXR5U2V0XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKHNUaXRsZSk7XG5cdFx0XHRcdFx0XHRNZXNzYWdlQm94LmVycm9yKHNUaXRsZSk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoZXJyb3IpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b09iamVjdFBhZ2Uuc2Nyb2xsVG9TZWN0aW9uKG9TdWJTZWN0aW9uLmdldElkKCkpO1xuXHRcdFx0XHQvLyB0cmlnZ2VyIGlhcHAgc3RhdGUgY2hhbmdlXG5cdFx0XHRcdG9PYmplY3RQYWdlLmZpcmVOYXZpZ2F0ZSh7XG5cdFx0XHRcdFx0c2VjdGlvbjogb1NlY3Rpb24sXG5cdFx0XHRcdFx0c3ViU2VjdGlvbjogb1N1YlNlY3Rpb25cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRvbkNoYXJ0U2VsZWN0aW9uQ2hhbmdlZDogZnVuY3Rpb24gKG9FdmVudDogYW55KSB7XG5cdFx0XHRDaGFydFJ1bnRpbWUuZm5VcGRhdGVDaGFydChvRXZlbnQpO1xuXHRcdH1cblx0fTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgT2JqZWN0UGFnZUNvbnRyb2xsZXI7XG4iXX0=
|