@sapui5/sap.fe.templates 1.142.0 → 1.143.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/templates/.library +1 -1
- package/src/sap/fe/templates/AnalyticalListPage/manifest.json +2 -2
- package/src/sap/fe/templates/ListReport/LRMessageStrip.js +4 -1
- package/src/sap/fe/templates/ListReport/LRMessageStrip.ts +3 -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/ListReport/controls/MultipleModeControl.js +3 -2
- package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.ts +2 -1
- package/src/sap/fe/templates/ListReport/manifest.json +2 -2
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +22 -5
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.ts +22 -4
- package/src/sap/fe/templates/ObjectPage/manifest.json +2 -2
- package/src/sap/fe/templates/library.js +1 -1
- package/src/sap/fe/templates/messagebundle_en_US_saprigi.properties +3 -3
- package/src/sap/fe/templates/messagebundle_sl.properties +5 -5
- package/ui5.yaml +5 -0
|
@@ -364,15 +364,32 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
364
364
|
* @returns Table if exists
|
|
365
365
|
*/;
|
|
366
366
|
_proto.searchTableInBlock = function searchTableInBlock(block) {
|
|
367
|
-
const control = block.content;
|
|
368
367
|
let tableAPI;
|
|
369
|
-
|
|
368
|
+
const getTableAPI = control => {
|
|
370
369
|
// The table may currently be shown in a full screen dialog, we can then get the reference to the TableAPI
|
|
371
370
|
// control from the custom data of the place holder panel
|
|
372
371
|
if (control.isA("sap.m.Panel") && control.data("FullScreenTablePlaceHolder")) {
|
|
373
|
-
|
|
372
|
+
return control.data("tableAPIreference");
|
|
374
373
|
} else if (control.isA("sap.fe.macros.table.TableAPI")) {
|
|
375
|
-
|
|
374
|
+
return control;
|
|
375
|
+
}
|
|
376
|
+
};
|
|
377
|
+
if (block.isA("sap.fe.templates.ObjectPage.controls.SubSectionBlock")) {
|
|
378
|
+
const control = block.content;
|
|
379
|
+
if (control.isA("sap.ui.layout.DynamicSideContent")) {
|
|
380
|
+
const mainContent = control.getMainContent()[0];
|
|
381
|
+
const mainContentTableAPI = getTableAPI(mainContent);
|
|
382
|
+
if (mainContentTableAPI) {
|
|
383
|
+
tableAPI = mainContentTableAPI;
|
|
384
|
+
} else {
|
|
385
|
+
const sideContent = control.getSideContent()[0];
|
|
386
|
+
const sideContentTableAPI = getTableAPI(sideContent);
|
|
387
|
+
if (sideContentTableAPI) {
|
|
388
|
+
tableAPI = sideContentTableAPI;
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
} else {
|
|
392
|
+
tableAPI = getTableAPI(control);
|
|
376
393
|
}
|
|
377
394
|
if (tableAPI) {
|
|
378
395
|
return tableAPI.content;
|
|
@@ -1686,4 +1703,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
1686
1703
|
}), _applyDecoratedDescriptor(_class2.prototype, "getExtensionAPI", [_dec12, _dec13], Object.getOwnPropertyDescriptor(_class2.prototype, "getExtensionAPI"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onPageReady", [_dec14, _dec15], Object.getOwnPropertyDescriptor(_class2.prototype, "onPageReady"), _class2.prototype), _class2)) || _class);
|
|
1687
1704
|
return ObjectPageController;
|
|
1688
1705
|
}, false);
|
|
1689
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQcm9ncmFtbWluZ01vZGVsIiwiRkVMaWJyYXJ5IiwiUHJlZmVycmVkQWN0aW9uU3RhdHVzIiwiUHJlZmVycmVkQWN0aW9uU3RhdHVzVHlwZSIsIk9iamVjdFBhZ2VDb250cm9sbGVyIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJ1c2luZ0V4dGVuc2lvbiIsIlBsYWNlaG9sZGVyIiwiX2RlYzMiLCJTaGFyZSIsIm92ZXJyaWRlIiwiU2hhcmVPdmVycmlkZXMiLCJfZGVjNCIsIkludGVybmFsUm91dGluZyIsIkludGVybmFsUm91dGluZ092ZXJyaWRlIiwiX2RlYzUiLCJQYWdpbmF0b3IiLCJQYWdpbmF0b3JPdmVycmlkZSIsIl9kZWM2IiwiTWVzc2FnZUhhbmRsZXIiLCJNZXNzYWdlSGFuZGxlck92ZXJyaWRlIiwiX2RlYzciLCJJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSIsIl9kZWM4IiwiQ29sbGFib3JhdGlvbk1hbmFnZXIiLCJDb2xsYWJvcmF0aW9uTWFuYWdlck92ZXJyaWRlIiwiX2RlYzkiLCJJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldE5hdmlnYXRpb25Nb2RlIiwiYklzU3RpY2t5RWRpdE1vZGUiLCJnZXRWaWV3IiwiZ2V0Q29udHJvbGxlciIsImdldFN0aWNreUVkaXRNb2RlIiwidW5kZWZpbmVkIiwiX2RlYzEwIiwiVmlld1N0YXRlIiwiVmlld1N0YXRlT3ZlcnJpZGVzIiwiX2RlYzExIiwiUGFnZVJlYWR5IiwiaXNDb250ZXh0RXhwZWN0ZWQiLCJfZGVjMTIiLCJwdWJsaWNFeHRlbnNpb24iLCJfZGVjMTMiLCJmaW5hbEV4dGVuc2lvbiIsIl9kZWMxNCIsIl9kZWMxNSIsImV4dGVuc2libGUiLCJPdmVycmlkZUV4ZWN1dGlvbiIsIkFmdGVyIiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9QYWdlQ29udHJvbGxlciIsIl90aGlzIiwiX2xlbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsIl9kZXNjcmlwdG9yMyIsIl9kZXNjcmlwdG9yNCIsIl9kZXNjcmlwdG9yNSIsIl9kZXNjcmlwdG9yNiIsIl9kZXNjcmlwdG9yNyIsIl9kZXNjcmlwdG9yOCIsIl9kZXNjcmlwdG9yOSIsIl9kZXNjcmlwdG9yMTAiLCJpbnZhbGlkYXRlVGl0bGVIaWVyYXJjaHlDYWNoZVNldFVwIiwibWVyZ2VQYXRjaERyYWZ0IiwiaXNGaXJzdEJpbmRpbmciLCJoYW5kbGVycyIsIm9uUHJpbWFyeUFjdGlvbiIsIm9Db250cm9sbGVyIiwib1ZpZXciLCJvQ29udGV4dCIsInNBY3Rpb25OYW1lIiwibVBhcmFtZXRlcnMiLCJtQ29uZGl0aW9ucyIsImlWaWV3TGV2ZWwiLCJnZXRWaWV3RGF0YSIsInZpZXdMZXZlbCIsInBvc2l0aXZlQWN0aW9uVmlzaWJsZSIsInBvc2l0aXZlQWN0aW9uRW5hYmxlZCIsIm9uQ2FsbEFjdGlvbiIsImVkaXRBY3Rpb25WaXNpYmxlIiwiZWRpdEFjdGlvbkVuYWJsZWQiLCJfZWRpdERvY3VtZW50IiwiQ29tbW9uVXRpbHMiLCJnZXRJc0VkaXRhYmxlIiwiX3NhdmVEb2N1bWVudCIsIl9hcHBseURvY3VtZW50Iiwib25UYWJsZUNvbnRleHRDaGFuZ2UiLCJldmVudCIsInRhYmxlQVBJIiwiZ2V0U291cmNlIiwidGFibGUiLCJjb250ZW50IiwiY3VycmVudEFjdGlvblByb21pc2UiLCJlZGl0RmxvdyIsImdldEN1cnJlbnRBY3Rpb25Qcm9taXNlIiwidGFibGVDb250ZXh0cyIsIl9nZXRUYWJsZUJpbmRpbmciLCJnZXRDdXJyZW50Q29udGV4dHMiLCJhY3Rpb25SZXNwb25zZSIsImNvbnRyb2xJZCIsImdldElkIiwiYWN0aW9uRGF0YSIsIm9EYXRhIiwia2V5cyIsIm5ld0l0ZW0iLCJmaW5kSW5kZXgiLCJ0YWJsZUNvbnRleHQiLCJ0YWJsZURhdGEiLCJnZXRPYmplY3QiLCJldmVyeSIsImtleSIsImRpYWxvZyIsIkluc3RhbmNlTWFuYWdlciIsImdldE9wZW5EaWFsb2dzIiwiZmluZCIsImRhdGEiLCJhdHRhY2hFdmVudE9uY2UiLCJmb2N1c1JvdyIsImRlbGV0ZUN1cnJlbnRBY3Rpb25Qcm9taXNlIiwiZSIsIkxvZyIsImVycm9yIiwibWVzc2FnZUJ1dHRvbiIsImZpcmVNb2RlbENvbnRleHRDaGFuZ2UiLCJzeW5jVGFzayIsImludm9rZUFjdGlvbiIsInRoZW4iLCJfc2hvd01lc3NhZ2VQb3BvdmVyIiwiYmluZCIsImNhdGNoIiwib25EYXRhUG9pbnRUaXRsZVByZXNzZWQiLCJvU291cmNlIiwib01hbmlmZXN0T3V0Ym91bmQiLCJzQ29udHJvbENvbmZpZyIsInNDb2xsZWN0aW9uUGF0aCIsIkpTT04iLCJwYXJzZSIsIm9UYXJnZXRJbmZvIiwib0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0Iiwic01ldGFQYXRoIiwiZ2V0TW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJnZXRNZXRhUGF0aCIsImdldFBhdGgiLCJhU2VtYW50aWNPYmplY3RNYXBwaW5nIiwiZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nIiwiYU5hdmlnYXRpb25EYXRhIiwiX2dldENoYXJ0Q29udGV4dERhdGEiLCJhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnMiLCJtYXAiLCJvTmF2aWdhdGlvbkRhdGEiLCJtZXRhUGF0aCIsInBhcmFtZXRlcnMiLCJvUGFyYW1zIiwiX2ludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldE91dGJvdW5kUGFyYW1zIiwiT2JqZWN0IiwiY3VzdG9tRGF0YSIsImdldEN1c3RvbURhdGEiLCJnZXRLZXkiLCJfZ2V0SW1wbGljaXRTZW1hbnRpY09iamVjdE1hcHBpbmdGb3JEYXRhUG9pbnRzIiwiZ2V0VmFsdWUiLCJzZW1hbnRpY09iamVjdCIsImFjdGlvbiIsIm5hdmlnYXRlIiwibmF2aWdhdGlvbkNvbnRleHRzIiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwib25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kIiwic091dGJvdW5kVGFyZ2V0Iiwic0NyZWF0ZVBhdGgiLCJvbk5hdmlnYXRlQ2hhbmdlIiwib0V2ZW50IiwiZ2V0RXh0ZW5zaW9uQVBJIiwidXBkYXRlQXBwU3RhdGUiLCJiU2VjdGlvbk5hdmlnYXRlZCIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsInNlY3Rpb25MYXlvdXQiLCJnZXRQcm9wZXJ0eSIsIm9TdWJTZWN0aW9uIiwiZ2V0UGFyYW1ldGVyIiwiX3VwZGF0ZUZvY3VzSW5FZGl0TW9kZSIsIm9uVmFyaWFudFNlbGVjdGVkIiwib25WYXJpYW50U2F2ZWQiLCJzZXRUaW1lb3V0IiwibmF2aWdhdGVUb1N1YlNlY3Rpb24iLCJ2RGV0YWlsQ29uZmlnIiwib0RldGFpbENvbmZpZyIsIm9PYmplY3RQYWdlIiwiYnlJZCIsIm9TZWN0aW9uIiwic2VjdGlvbklkIiwic3ViU2VjdGlvbklkIiwiZ2V0U3ViU2VjdGlvbnMiLCJnZXRQYXJlbnQiLCJnZXRWaXNpYmxlIiwic1RpdGxlIiwiZ2V0UmVzb3VyY2VNb2RlbCIsImdldFRleHQiLCJlbnRpdHlTZXQiLCJNZXNzYWdlQm94Iiwic2V0U2VsZWN0ZWRTZWN0aW9uIiwiZmlyZU5hdmlnYXRlIiwic2VjdGlvbiIsInN1YlNlY3Rpb24iLCJjbG9zZUNvbGxhYm9yYXRpb25TdHJpcCIsInNldFByb3BlcnR5IiwiY2xvc2VPUE1lc3NhZ2VTdHJpcCIsInZpZXciLCJiSXNJbkVkaXRNb2RlIiwiaW50ZXJuYWxNb2RlbCIsIm1lc3NhZ2VzdHJpcEludGVybmFsTW9kZWxDb250ZXh0IiwiYmluZENvbnRleHQiLCJfZ2V0TWVzc2FnZVN0cmlwQmluZGluZ0NvbnRleHRQYXRoIiwiZ2V0Qm91bmRDb250ZXh0IiwiY29udGV4dEJvdW5kTWVzc2FnZXMiLCJNZXNzYWdpbmciLCJnZXRNZXNzYWdlTW9kZWwiLCJnZXREYXRhIiwiZmlsdGVyIiwibWVzc2FnZSIsImdldFRhcmdldHMiLCJnZXRQZXJzaXN0ZW50IiwicmVtb3ZlTWVzc2FnZXMiLCJoaWRlTWVzc2FnZSIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwic0lkIiwibUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzIiwiRXh0ZW5zaW9uQVBJIiwiZXh0ZW5zaW9uQVBJIiwib25Jbml0IiwiX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sIiwiZ2V0T3duZXJDb21wb25lbnQiLCJwYWdlIiwidmlzaWJpbGl0eSIsIml0ZW1zIiwiX2dldEJhdGNoR3JvdXBzRm9yVmlldyIsImdldEVuYWJsZUxhenlMb2FkaW5nIiwiYXR0YWNoRXZlbnQiLCJfaGFuZGxlU3ViU2VjdGlvbkVudGVyZWRWaWV3UG9ydCIsIm1lc3NhZ2VCaW5kaW5nIiwiYmluZExpc3QiLCJhdHRhY2hDaGFuZ2UiLCJfZm5TaG93T1BNZXNzYWdlIiwiX2hhbmRsZVNtYXJ0U3VtbWFyeVN0YXJ0dXBBY3Rpb24iLCJvbkV4aXQiLCJkZXN0cm95Iiwib01lc3NhZ2VQb3BvdmVyIiwiaXNPcGVuIiwiY2xvc2UiLCJpc0tlZXBBbGl2ZSIsInNldEtlZXBBbGl2ZSIsImNvbGxhYm9yYXRpdmVEcmFmdCIsImRpc2Nvbm5lY3QiLCJkZXRhY2hDaGFuZ2UiLCJnZXRBcHBDb21wb25lbnQiLCJpc1N1c3BlbmRlZCIsIm1lc3NhZ2VzIiwiX3Nob3dNZXNzYWdlcyIsIm9UYWJsZSIsImdldFJvd0JpbmRpbmciLCJjaGVja1NlY3Rpb25zRm9yTm9uUmVzcG9uc2l2ZVRhYmxlIiwic3ViU2VjdGlvbnMiLCJjaGFuZ2VDbGFzc0ZvclRhYmxlcyIsImxhc3RWaXNpYmxlU3ViU2VjdGlvbiIsImJsb2NrcyIsImdldEJsb2NrcyIsImdldE1vcmVCbG9ja3MiLCJzZWFyY2hUYWJsZUluQmxvY2siLCJ0YWJsZVR5cGUiLCJpc0EiLCJnZXRUeXBlIiwiZ2V0VGFibGVEZWZpbml0aW9uIiwiY29udHJvbCIsInJvd0NvdW50TW9kZSIsImFkZFN0eWxlQ2xhc3MiLCJkZXRhY2hFdmVudCIsInN1YlNlY3Rpb25JbmRleCIsImJsb2NrIiwib25CZWZvcmVSZW5kZXJpbmciLCJQYWdlQ29udHJvbGxlciIsImFwcGx5IiwicmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCIsIkNvbW1vbkhlbHBlciIsInNldE1ldGFNb2RlbCIsIm9uQWZ0ZXJSZW5kZXJpbmciLCJnZXRVc2VJY29uVGFiQmFyIiwic2VjdGlvbnMiLCJnZXRTZWN0aW9ucyIsIl9nZXRBbGxTdWJTZWN0aW9ucyIsIl9vbkJlZm9yZUJpbmRpbmciLCJhVGFibGVzIiwiX2ZpbmRUYWJsZXMiLCJvSW50ZXJuYWxNb2RlbCIsImFCYXRjaEdyb3VwcyIsIm9GYXN0Q3JlYXRpb25Sb3ciLCJwdXNoIiwicmVhc29uIiwiTmF2aWdhdGlvblJlYXNvbiIsIkVkaXRGbG93QWN0aW9uIiwiX2Nsb3NlU2lkZUNvbnRlbnQiLCJvcENvbnRleHQiLCJoYXNQZW5kaW5nQ2hhbmdlcyIsInNvbWUiLCJnZXRCaW5kaW5nIiwicmVzZXRDaGFuZ2VzIiwiaXRlbSIsImdldENyZWF0aW9uUm93Iiwic2V0QmluZGluZ0NvbnRleHQiLCJmblNjcm9sbFRvUHJlc2VudFNlY3Rpb24iLCJpc0ZpcnN0UmVuZGVyaW5nIiwiYlBlcnNpc3RPUFNjcm9sbCIsImZuT1BSZW5kZXJpbmdMYXlvdXQiLCJlZGl0YWJsZUhlYWRlckNvbnRlbnQiLCJyZW1vdmVFdmVudERlbGVnYXRlIiwiYWRkRXZlbnREZWxlZ2F0ZSIsIl9pbml0aWFsaXplUGFnaW5hdGlvbiIsImxpc3RCaW5kaW5nIiwiZmlyc3RTdWJTZWN0aW9uVmlzaWJpbGl0eUJpbmRpbmciLCJfZ2V0Zmlyc3RTdWJTZWN0aW9uVmlzaWJpbGl0eUJpbmRpbmciLCJ1c2VMYXp5TG9hZGVyT3B0aW1pemF0aW9ucyIsInNldFZpc2libGUiLCJNRENUYWJsZVByb21pc2VzIiwiX2dldEFsbEJsb2NrcyIsImdldENvbnRlbnQiLCJpbml0aWFsaXplZCIsIlByb21pc2UiLCJhbGwiLCJfZGlzYWJsZUJsb2Nrc0JpbmRpbmdzIiwicGxhY2Vob2xkZXIiLCJpc1BsYWNlaG9sZGVyRW5hYmxlZCIsInNob3dQbGFjZWhvbGRlciIsIm9OYXZDb250YWluZXIiLCJvQ29udGFpbmVyIiwiZW5hYmxlQW5pbWF0aW9uIiwiVVJMU2VhcmNoUGFyYW1zIiwid2luZG93IiwibG9jYXRpb24iLCJzZWFyY2giLCJnZXQiLCJnZXRGaXJzdEVkaXRhYmxlSW5wdXQiLCJkb21FZGl0YWJsZUVsZW1lbnQiLCJfZ2V0Rmlyc3RFZGl0YWJsZUlucHV0IiwiVUk1RWxlbWVudCIsImNsb3Nlc3RUbyIsImdldEZpcnN0Q2xpY2thYmxlRWxlbWVudCIsIm9iamVjdFBhZ2UiLCJmaXJzdENsaWNrYWJsZUVsZW1lbnQiLCJhY3Rpb25zIiwiZ2V0SGVhZGVyVGl0bGUiLCJnZXRBY3Rpb25zIiwiZ2V0RW5hYmxlZCIsImFTZWN0aW9ucyIsImJVc2VJY29uVGFiQmFyIiwiaVNraXAiLCJiRWRpdGFibGVIZWFkZXIiLCJmaXJzdFZpc2liaWxpdHlCaW5kaW5nIiwiaVNlY3Rpb24iLCJhU3ViU2VjdGlvbnMiLCJpU3ViU2VjdGlvbiIsImRpc2FibGVCaW5kaW5nQ29udGV4dENvbmRpdGlvbiIsImZvckVhY2giLCJzdWJCbG9jayIsIl9nZXRGaXJzdEVtcHR5TWFuZGF0b3J5RmllbGRGcm9tU3ViU2VjdGlvbiIsImFCbG9ja3MiLCJibG9ja0NvbnRyb2wiLCJhRm9ybUNvbnRhaW5lcnMiLCJnZXRGb3JtQ29udGFpbmVycyIsImZvcm1Db250YWluZXIiLCJhRm9ybUVsZW1lbnRzIiwiZ2V0Rm9ybUVsZW1lbnRzIiwiZm9ybUVsZW1lbnQiLCJhRmllbGRzIiwiZ2V0RmllbGRzIiwiZW1wdHlGaWVsZCIsImdldEZpcnN0RW1wdHlSZXF1aXJlZEZpZWxkIiwiZmllbGRzIiwiZ2V0UmVxdWlyZWQiLCJpc0VtcHR5IiwiZ2V0TXVsdGlWYWx1ZUZpZWxkIiwiZ2V0SXRlbXMiLCJ2YWx1ZSIsImRlYnVnIiwib01hbmRhdG9yeUZpZWxkIiwib0ZpZWxkVG9Gb2N1cyIsImdldENvbnRlbnRFZGl0IiwiZm9jdXNJbmZvIiwiZ2V0Rm9jdXNJbmZvIiwidGFyZ2V0SW5mbyIsInNpbGVudCIsImZvY3VzIiwiYWxsc3ViU2VjdGlvbnMiLCJjdXJyZW50TW9kZWwiLCJnZXRCaW5kaW5ncyIsImJpbmRpbmciLCJfb25CYWNrTmF2aWdhdGlvbkluRHJhZnQiLCJtZXNzYWdlSGFuZGxlciIsInJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyIsIm5hdkJhY2siLCJjdXJyZW50VVJMIiwiZG9jdW1lbnQiLCJVUkwiLCJoaXN0b3J5IiwiYmFjayIsIl9yb3V0aW5nIiwibmF2aWdhdGVCYWNrRnJvbUNvbnRleHQiLCJnZXRSb3V0ZXJQcm94eSIsImNoZWNrSWZCYWNrSGFzU2FtZUNvbnRleHQiLCJnZXRTaGVsbFNlcnZpY2VzIiwic2V0QmFja05hdmlnYXRpb24iLCJ3YXJuaW5nIiwiaGlkZGVuRHJhZnRFbmFibGVkIiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJnZXRDYXBhYmlsaXRpZXMiLCJIaWRkZW5EcmFmdCIsImVuYWJsZWQiLCJkcmFmdCIsInByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uIiwiRnVuY3Rpb24iLCJOYXZpZ2F0aW9uVHlwZSIsIkJhY2tOYXZpZ2F0aW9uIiwiX29uQWZ0ZXJCaW5kaW5nIiwiaW5wdXRCaW5kaW5nQ29udGV4dCIsIl9zaWRlRWZmZWN0cyIsImNsZWFyRmllbGRHcm91cHNWYWxpZGl0eSIsImJpbmRpbmdDb250ZXh0IiwiYUlCTkFjdGlvbnMiLCJnZXRJQk5BY3Rpb25zIiwib1RhYmxlUm93QmluZGluZyIsIk1vZGVsSGVscGVyIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwicmVtb3ZlQ2FjaGVzQW5kTWVzc2FnZXMiLCJvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwidGFibGVEZWZpbml0aW9uIiwib3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiQWN0aW9uUnVudGltZSIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJjbGVhclNlbGVjdGlvbiIsIm9PYmplY3RQYWdlVGl0bGUiLCJhSUJOSGVhZGVyQWN0aW9ucyIsImNvbmNhdCIsInVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5Iiwib01vZGVsIiwib0ZpbmFsVUlTdGF0ZSIsInJlc29sdmUiLCJoYW5kbGVUYWJsZU1vZGlmaWNhdGlvbnMiLCJvQmluZGluZyIsImZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cyIsIlRhYmxlSGVscGVyIiwiZW5hYmxlRmFzdENyZWF0aW9uUm93IiwiZ2V0Q29udGV4dCIsImZuSGFuZGxlQ2hhbmdlIiwiY29tcHV0ZU1vZGVsc0ZvckVkaXRNb2RlIiwiX3VwZGF0ZVJlbGF0ZWRBcHBzIiwiY3VycmVudEJpbmRpbmciLCJoYW5kbGVQYXRjaFNlbnQiLCJUYWJsZVV0aWxzIiwid2hlbkJvdW5kIiwib0Vycm9yIiwiX3RyaWdnZXJWaXNpYmxlU3ViU2VjdGlvbnNFdmVudHMiLCJ1cGRhdGVFZGl0QnV0dG9uVmlzaWJpbGl0eUFuZEVuYWJsZW1lbnQiLCJfdXBkYXRlQXZhaWxhYmxlQ2FyZHMiLCJyZWNvbW1lbmRhdGlvbnMiLCJjbGVhclJlY29tbWVuZGF0aW9ucyIsImRpc3BsYXlDb2xsYWJvcmF0aW9uTWVzc2FnZSIsInJlZGlyZWN0ZWRUb05vbkRyYWZ0IiwiX3NldE9QTWVzc2FnZVN0cmlwSW50ZXJuYWxDb250ZXh0IiwiYXBwbHlBcHBTdGF0ZSIsImdldEFwcFN0YXRlSGFuZGxlciIsInBhZ2VSZWFkeSIsIndhaXRGb3IiLCJjYXJkcyIsImNvbGxhYm9yYXRpb25NYW5hZ2VyIiwiY29sbGVjdEF2YWlsYWJsZUNhcmRzIiwiY2FyZE9iamVjdCIsInVwZGF0ZUNhcmRzIiwicGFyZW50QXBwSWQiLCJnZXRDb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2UiLCJhZGRDYXJkc1RvQ29sbGFib3JhdGlvbk1hbmFnZXIiLCJzaGFyZUF2YWlsYWJsZUNhcmRzIiwiaW50ZXJuYWxNb2RlbENvbnRleHQiLCJmaW5kRWxlbWVudHMiLCJlbGVtIiwibWVzc2FnZVN0cmlwIiwiZW50aXR5TmFtZSIsInJlc291cmNlQnVuZGxlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiY29sbGFib3JhdGlvbk1lc3NhZ2UiLCJNZXNzYWdlIiwidHlwZSIsIk1lc3NhZ2VUeXBlIiwiSW5mb3JtYXRpb24iLCJ0YXJnZXQiLCJhZGRNZXNzYWdlcyIsIm9uUGFnZVJlYWR5Iiwic2V0Rm9jdXMiLCJpc0luRGlzcGxheU1vZGUiLCJvRmlyc3RDbGlja2FibGVFbGVtZW50Iiwib1NlbGVjdGVkU2VjdGlvbiIsImdldEVsZW1lbnRCeUlkIiwiZ2V0U2VsZWN0ZWRTZWN0aW9uIiwiY3R4dCIsIm9CaW5kaW5nQ29udGV4dCIsImJJc1N0aWNreU1vZGUiLCJvQXBwQ29tcG9uZW50IiwiaXNFZGl0YWJsZSIsImZldGNoQW5kQXBwbHlSZWNvbW1lbmRhdGlvbnMiLCJjb250ZXh0IiwiZm9yY2VGb2N1cyIsIl9jaGVja0RhdGFQb2ludFRpdGxlRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uIiwiRGV2aWNlIiwic3VwcG9ydCIsInRvdWNoIiwic2F2ZUJ1dHRvbiIsImF1dG9RdWV1ZVVubG9jayIsImF1dG9RdWV1ZUxvY2siLCJpc0xvY2tlZCIsInVubG9jayIsImRldGFjaEJyb3dzZXJFdmVudCIsImF0dGFjaEJyb3dzZXJFdmVudCIsImxvY2siLCJfZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24iLCJvT2JqZWN0UGFnZVN1YnRpdGxlIiwib0N1c3RvbURhdGEiLCJvT2JqZWN0UGFnZURlc2NyaXB0aW9uIiwiZXh0cmFjdFBhdGhzIiwiYmluZGluZ0luZm8iLCJmcm9tIiwiU2V0IiwicGFydHMiLCJwYXJ0IiwibW9kZWwiLCJwYXRoIiwiQm9vbGVhbiIsInN1YnRpdGxlUGF0aHMiLCJnZXRCaW5kaW5nSW5mbyIsImRlc2NyaXB0aW9uUGF0aHMiLCJwYXRoc1RvUmVzb2x2ZSIsImFwcENvbXBvbmVudCIsInJvb3RWaWV3Q29udHJvbGxlciIsImdldFJvb3RWaWV3Q29udHJvbGxlciIsImZuQ2xlYXJDYWNoZVRpdGxlIiwiaW52YWxpZGF0ZVRpdGxlSGllcmFyY2h5Q2FjaGUiLCJvT2JqZWN0UGFnZUNvbnRleHQiLCJidWlsZCIsInRpdGxlIiwic3VidGl0bGUiLCJpbnRlbnQiLCJpY29uIiwiZGVzY3JpcHRpb24iLCJwIiwicmVxdWVzdE9iamVjdCIsIl9leGVjdXRlVGFiU2hvcnRDdXQiLCJvRXhlY3V0aW9uIiwiaVNlY3Rpb25JbmRleE1heCIsInNDb21tYW5kIiwiZ2V0Q29tbWFuZCIsIm5ld1NlY3Rpb24iLCJpU2VsZWN0ZWRTZWN0aW9uSW5kZXgiLCJpbmRleE9mU2VjdGlvbiIsIl9nZXRGb290ZXJWaXNpYmlsaXR5Iiwic1ZpZXdJZCIsImlzSGlkZGVuRHJhZnRFbmFibGVkIiwib01lc3NhZ2UiLCJpc0Vycm9yTWVzc2FnZSIsInZhbGlkYXRpb24iLCJtZXNzYWdlVmFsaWRhdGlvbiIsImluY2x1ZGVzIiwiZXJyIiwib1JldCIsImlzRWRpdE1vZGUiLCJjdXJyZW50UGFnZVZpZXciLCJpc0ZjbEVuYWJsZWQiLCJnZXRSaWdodG1vc3RWaWV3IiwiZ2V0Um9vdENvbnRhaW5lciIsImdldEN1cnJlbnRQYWdlIiwib01lc3NhZ2VCdXR0b24iLCJvSXRlbUJpbmRpbmciLCJnZXRMZW5ndGgiLCJvcGVuQnkiLCJCdXN5TG9ja2VyIiwiZWRpdERvY3VtZW50IiwiZmluYWxseSIsInByb3BlcnR5UGF0aCIsIkxvY2FsUHJvcGVydHkiLCIkUHJvcGVydHlQYXRoIiwiU2VtYW50aWNPYmplY3RQcm9wZXJ0eSIsIl92YWxpZGF0ZURvY3VtZW50IiwiZ2V0QWN0aXZlRWxlbWVudCIsImJ5UGFzc1NpZGVFZmZlY3RzIiwiaXNUcmFuc2llbnQiLCJjcmVhdGVkIiwiaG9sZE1lc3NhZ2VzRm9yQ29udHJvbCIsInJldCIsImV4ZWN1dGVHbG9iYWxWYWxpZGF0aW9uIiwic2hvd01lc3NhZ2VzIiwic2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZW50aXR5VHlwZSIsImdldEVudGl0eVR5cGVGcm9tQ29udGV4dCIsImdsb2JhbFNpZGVFZmZlY3RzIiwiZ2V0R2xvYmFsT0RhdGFFbnRpdHlTaWRlRWZmZWN0cyIsInNpZGVFZmZlY3RzIiwicmVxdWVzdFNpZGVFZmZlY3RzIiwiZHJhZnRSb290Q29udGV4dCIsImNyZWF0ZVJvb3RDb250ZXh0IiwiRHJhZnQiLCJleGVjdXRlRHJhZnRWYWxpZGF0aW9uIiwiaXNDb25uZWN0ZWQiLCJza2lwQmluZGluZ1RvVmlldyIsImF3YWl0Q3JlYXRlRG9jdW1lbnRzIiwiZXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvciIsImlzQ29sbGFib3JhdGlvbkVuYWJsZWQiLCJkaWFsb2dBY3Rpb24iLCJDb2xsYWJvcmF0aW9uRGlzY2FyZCIsImdldFVzZXJBY3Rpb24iLCJjcmVhdGlvblJvdyIsInRhYmxlQmluZGluZyIsImNvbnRleHRLZXlzIiwic3RhcnRzV2l0aCIsImNyZWF0ZURvY3VtZW50IiwiY3JlYXRpb25Nb2RlIiwiY3JlYXRlQXRFbmQiLCJza2lwU2lkZUVmZmVjdHMiLCJpc1NraXBCaW5kaW5nVG9WaWV3IiwiaXNTdGFuZGFyZFNhdmUiLCJiaW5kaW5ncyIsInNhdmVEb2N1bWVudCIsImJFeGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yIiwiUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbiIsIkNvbnRpbnVlIiwiX2NhbmNlbERvY3VtZW50IiwiY2FuY2VsQnV0dG9uIiwibGFzdEZvY3VzZWRDb250cm9sSWQiLCJzaG91bGRTa2lwRGlzY2FyZFBvcG92ZXIiLCJpc0RvY3VtZW50TW9kaWZpZWQiLCJVaU1vZGVsQ29uc3RhbnRzIiwiRG9jdW1lbnRNb2RpZmllZCIsImFmdGVyQ2FuY2VsIiwicHJvbWlzZVJlc3VsdCIsImNhbmNlbERvY3VtZW50Iiwic2tpcERpc2NhcmRQb3BvdmVyIiwiYXBwbHlEb2N1bWVudCIsInNob3dSZWxhdGVkQXBwcyIsInVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyIsIl9maW5kQ29udHJvbEluU3ViU2VjdGlvbiIsImFQYXJlbnRFbGVtZW50IiwiYVN1YnNlY3Rpb24iLCJhQ29udHJvbHMiLCJiSXNDaGFydCIsIml0ZW0xIiwib0VsZW1lbnQiLCJnZXRBZ2dyZWdhdGlvbiIsImNoYXJ0Q29udHJvbCIsImdldENoYXJ0Q29udHJvbCIsIm9TdWJFbGVtZW50IiwiZ2V0TWFpbkNvbnRlbnQiLCJfZmluZENoYXJ0cyIsImFDaGFydHMiLCJvQmxvY2siLCJvQ29udGVudCIsInNldFNob3dTaWRlQ29udGVudCIsIm9DaGFydENvbnRleHQiLCJzQ2hhcnRQYXRoIiwib0NvbnRleHREYXRhIiwib0NoYXJ0Q29udGV4dERhdGEiLCJfc2Nyb2xsVGFibGVzVG9Sb3ciLCJzUm93UGF0aCIsIlRhYmxlU2Nyb2xsZXIiLCJzY3JvbGxUYWJsZVRvUm93IiwiX21lcmdlTXVsdGlwbGVDb250ZXh0cyIsIm9QYWdlQ29udGV4dCIsImFMaW5lQ29udGV4dCIsImFBdHRyaWJ1dGVzIiwiYVBhZ2VBdHRyaWJ1dGVzIiwic01ldGFQYXRoTGluZSIsInNQYXRoTGluZSIsInNQYWdlUGF0aCIsIm9NZXRhTW9kZWwiLCJzTWV0YVBhdGhQYWdlIiwicmVwbGFjZSIsIm9TaW5nbGVDb250ZXh0Iiwib1N1YkNoYXJ0Q29udGV4dERhdGEiLCJjb250ZXh0RGF0YSIsInJlbW92ZVNlbnNpdGl2ZURhdGEiLCJvUGFnZUxldmVsU1YiLCJhZGRQYWdlQ29udGV4dFRvU2VsZWN0aW9uVmFyaWFudCIsIlNlbGVjdGlvblZhcmlhbnQiLCJzZWxlY3Rpb25WYXJpYW50IiwiYXR0cmlidXRlcyIsIm9WaWV3RGF0YSIsIm9Db25maWd1cmF0aW9ucyIsImNvbnRyb2xDb25maWd1cmF0aW9uIiwiYUNvbmZpZ3VyYXRpb25zIiwic0tleSIsIm9Db25maWd1cmF0aW9uIiwicmVxdWVzdEdyb3VwSWQiLCJwYWdpbmF0b3JDdXJyZW50Q29udGV4dCIsImJpbmRpbmdUb1VzZSIsInBhZ2luYXRvciIsImluaXRpYWxpemUiLCJvRGF0YVBvaW50cyIsImdldEhlYWRlckZhY2V0SXRlbUNvbmZpZ0ZvckV4dGVybmFsTmF2aWdhdGlvbiIsImdldFJvdXRpbmdTZXJ2aWNlIiwiZ2V0T3V0Ym91bmRzIiwib1NoZWxsU2VydmljZXMiLCJmbkdldExpbmtzIiwiZm5PbkVycm9yIiwiZm5TZXRMaW5rRW5hYmxlbWVudCIsImlkIiwiYVN1cHBvcnRlZExpbmtzIiwic0xpbmtJZCIsInN1cHBvcnRlZCIsIm9TdWJEYXRhUG9pbnRzIiwib1BhZ2VEYXRhIiwib0RhdGFQb2ludCIsIm9MaW5rIiwib0xpbmtDb250ZXh0Iiwib0xpbmtEYXRhIiwib01peGVkQ29udGV4dCIsIm1lcmdlIiwib01hcHBpbmciLCJzTWFpblByb3BlcnR5Iiwic01hcHBlZFByb3BlcnR5IiwiaGFzT3duUHJvcGVydHkiLCJvTmV3TWFwcGluZyIsImlzTmF2aWdhdGlvblN1cHBvcnRlZCIsInBhcmFtcyIsImFMaW5rcyIsIl9maW5kU3VtbWFyaXplQnV0dG9uIiwib2JqZWN0UGFnZVRpdGxlIiwic3VtbWFyaXplQnV0dG9uIiwiYnV0dG9uIiwiZW5kc1dpdGgiLCJnZXRTdGFydHVwUGFyYW1ldGVycyIsInN0YXJ0dXBQYXJhbXMiLCJwcmVmZXJyZWRBY3Rpb24iLCJwcmVmZXJyZWRBY3Rpb25MZXZlbCIsInBhcnNlSW50Iiwic3BsaXQiLCJpc05hTiIsImdldFByZWZlcnJlZEFjdGlvblN0YXR1cyIsIkNhblBlcmZvcm0iLCJzZXRQcmVmZXJyZWRBY3Rpb25TdGF0dXMiLCJBbHJlYWR5UGVyZm9ybWVkIiwiZW52aXJvbm1lbnRTZXJ2aWNlIiwiZW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJTbWFydFN1bW1hcml6ZSIsImZpcmVQcmVzcyIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiT2JqZWN0UGFnZUNvbnRyb2xsZXIuY29udHJvbGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFNlbWFudGljT2JqZWN0TWFwcGluZ1R5cGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgbWVyZ2UgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCB0eXBlIHsgRW5oYW5jZVdpdGhVSTUgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXh0ZW5zaWJsZSwgZmluYWxFeHRlbnNpb24sIHB1YmxpY0V4dGVuc2lvbiwgdXNpbmdFeHRlbnNpb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQWN0aW9uUnVudGltZSBmcm9tIFwic2FwL2ZlL2NvcmUvQWN0aW9uUnVudGltZVwiO1xuaW1wb3J0IHR5cGUgeyBTdGFydHVwUGFyYW1ldGVycyB9IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgRkVWaWV3IH0gZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQnVzeUxvY2tlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvQnVzeUxvY2tlclwiO1xuaW1wb3J0IEludGVudEJhc2VkTmF2aWdhdGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxSb3V0aW5nIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbFJvdXRpbmdcIjtcbmltcG9ydCBNZXNzYWdlSGFuZGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCBQYWdlUmVhZHkgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BhZ2VSZWFkeVwiO1xuaW1wb3J0IFBhZ2luYXRvciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvUGFnaW5hdG9yXCI7XG5pbXBvcnQgUGxhY2Vob2xkZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BsYWNlaG9sZGVyXCI7XG5pbXBvcnQgU2hhcmUgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1NoYXJlXCI7XG5pbXBvcnQgVmlld1N0YXRlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9WaWV3U3RhdGVcIjtcbmltcG9ydCBDb2xsYWJvcmF0aW9uTWFuYWdlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvY2FyZHMvQ29sbGFib3JhdGlvbk1hbmFnZXJcIjtcbmltcG9ydCBkcmFmdCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvZHJhZnRcIjtcbmltcG9ydCBVaU1vZGVsQ29uc3RhbnRzIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9lZGl0Rmxvd0NvbnN0YW50c1wiO1xuaW1wb3J0IE5hdmlnYXRpb25SZWFzb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL3JvdXRpbmcvTmF2aWdhdGlvblJlYXNvblwiO1xuaW1wb3J0IHR5cGUgQ29tbWFuZEV4ZWN1dGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbHMvQ29tbWFuZEV4ZWN1dGlvblwiO1xuaW1wb3J0IHsgUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9scy9SZWNvbW1lbmRhdGlvbnMvQ29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nXCI7XG5pbXBvcnQgdHlwZSB7IEhpZGRlbkRyYWZ0LCBNaWNyb0NoYXJ0TWFuaWZlc3RDb25maWd1cmF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGdldFJlc291cmNlTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgRkVMaWJyYXJ5IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgeyB0eXBlIFdyYXBwZWRDYXJkIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL0NvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIENoYXJ0QmxvY2sgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ2hhcnRcIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBNYWNyb0FQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9NYWNyb0FQSVwiO1xuaW1wb3J0IHR5cGUgTXVsdGlWYWx1ZUZpZWxkQmxvY2sgZnJvbSBcInNhcC9mZS9tYWNyb3MvTXVsdGlWYWx1ZUZpZWxkXCI7XG5pbXBvcnQgdHlwZSBFYXN5RmlsbEJ1dHRvbiBmcm9tIFwic2FwL2ZlL21hY3Jvcy9haS9FYXN5RmlsbEJ1dHRvblwiO1xuaW1wb3J0IHR5cGUgU3VtbWFyaXphdGlvbkJ1dHRvbiBmcm9tIFwic2FwL2ZlL21hY3Jvcy9haS9TdW1tYXJpemF0aW9uQnV0dG9uXCI7XG5pbXBvcnQgdHlwZSBGb3JtQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL2Zvcm0vRm9ybUFQSVwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZUJ1dHRvbiBmcm9tIFwic2FwL2ZlL21hY3Jvcy9tZXNzYWdlcy9NZXNzYWdlQnV0dG9uXCI7XG5pbXBvcnQgdHlwZSBTaGFyZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9zaGFyZS9TaGFyZUFQSVwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCBUYWJsZUhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUhlbHBlclwiO1xuaW1wb3J0IFRhYmxlVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVXRpbHNcIjtcbmltcG9ydCBTZWxlY3Rpb25WYXJpYW50IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9TZWxlY3Rpb25WYXJpYW50XCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgT2JqZWN0UGFnZUV4dGVuc2lvbkFQSSB9IGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvRXh0ZW5zaW9uQVBJXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIEV4dGVuc2lvbkFQSSB9IGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvRXh0ZW5zaW9uQVBJXCI7XG5pbXBvcnQgQ29sbGFib3JhdGlvbkRpc2NhcmQgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9jb21wb25lbnRzL0NvbGxhYm9yYXRpb25EaXNjYXJkRGlhbG9nXCI7XG5pbXBvcnQgdHlwZSBTdWJTZWN0aW9uQmxvY2sgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9jb250cm9scy9TdWJTZWN0aW9uQmxvY2tcIjtcbmltcG9ydCBUYWJsZVNjcm9sbGVyIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL1RhYmxlU2Nyb2xsZXJcIjtcbmltcG9ydCB0eXBlIEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgdHlwZSBJbnB1dEJhc2UgZnJvbSBcInNhcC9tL0lucHV0QmFzZVwiO1xuaW1wb3J0IEluc3RhbmNlTWFuYWdlciBmcm9tIFwic2FwL20vSW5zdGFuY2VNYW5hZ2VyXCI7XG5pbXBvcnQgTWVzc2FnZUJveCBmcm9tIFwic2FwL20vTWVzc2FnZUJveFwiO1xuaW1wb3J0IHR5cGUgTmF2Q29udGFpbmVyIGZyb20gXCJzYXAvbS9OYXZDb250YWluZXJcIjtcbmltcG9ydCB0eXBlIFBvcG92ZXIgZnJvbSBcInNhcC9tL1BvcG92ZXJcIjtcbmltcG9ydCB0eXBlIFRvb2xiYXJTcGFjZXIgZnJvbSBcInNhcC9tL1Rvb2xiYXJTcGFjZXJcIjtcbmltcG9ydCBEZXZpY2UgZnJvbSBcInNhcC91aS9EZXZpY2VcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgeyBDb21tYW5kRXhlY3V0aW9uJEV4ZWN1dGVFdmVudCB9IGZyb20gXCJzYXAvdWkvY29yZS9Db21tYW5kRXhlY3V0aW9uXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgSW52aXNpYmxlVGV4dCBmcm9tIFwic2FwL3VpL2NvcmUvSW52aXNpYmxlVGV4dFwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHR5cGUgeyBNYW5pZmVzdE91dGJvdW5kRW50cnkgfSBmcm9tIFwic2FwL3VpL2NvcmUvTWFuaWZlc3RcIjtcbmltcG9ydCBNZXNzYWdpbmcgZnJvbSBcInNhcC91aS9jb3JlL01lc3NhZ2luZ1wiO1xuaW1wb3J0IE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgT3ZlcnJpZGVFeGVjdXRpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9PdmVycmlkZUV4ZWN1dGlvblwiO1xuaW1wb3J0IHR5cGUgRHluYW1pY1NpZGVDb250ZW50IGZyb20gXCJzYXAvdWkvbGF5b3V0L0R5bmFtaWNTaWRlQ29udGVudFwiO1xuaW1wb3J0IHR5cGUgRm9ybSBmcm9tIFwic2FwL3VpL2xheW91dC9mb3JtL0Zvcm1cIjtcbmltcG9ydCB0eXBlIENoYXJ0IGZyb20gXCJzYXAvdWkvbWRjL0NoYXJ0XCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgVGFibGVUeXBlQmFzZSBmcm9tIFwic2FwL3VpL21kYy90YWJsZS9UYWJsZVR5cGVCYXNlXCI7XG5pbXBvcnQgdHlwZSBCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvQmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgQ29tcG9zaXRlQmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL0NvbXBvc2l0ZUJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL0xpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFWNENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUNvbnRleHRCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFDb250ZXh0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlTGF5b3V0IGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlTGF5b3V0XCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlU2VjdGlvbiBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZVNlY3Rpb25cIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VTdWJTZWN0aW9uIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlU3ViU2VjdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBNZXRhTW9kZWxUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3R5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuaW1wb3J0IHR5cGUgQ29sbGFib3JhdGlvbkRyYWZ0IGZyb20gXCIuL2NvbXBvbmVudHMvQ29sbGFib3JhdGlvbkRyYWZ0XCI7XG5pbXBvcnQgQ29sbGFib3JhdGlvbk1hbmFnZXJPdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvQ29sbGFib3JhdGlvbk1hbmFnZXJcIjtcbmltcG9ydCBJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxSb3V0aW5nT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL0ludGVybmFsUm91dGluZ1wiO1xuaW1wb3J0IE1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgUGFnaW5hdG9yT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL1BhZ2luYXRvclwiO1xuaW1wb3J0IFNoYXJlT3ZlcnJpZGVzIGZyb20gXCIuL292ZXJyaWRlcy9TaGFyZVwiO1xuaW1wb3J0IFZpZXdTdGF0ZU92ZXJyaWRlcyBmcm9tIFwiLi9vdmVycmlkZXMvVmlld1N0YXRlXCI7XG5cbmV4cG9ydCB0eXBlIEJpbmRpbmdQYXJhbXMgPSB7XG5cdHJlZGlyZWN0ZWRUb05vbkRyYWZ0Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRyZWFzb24/OiBOYXZpZ2F0aW9uUmVhc29uO1xuXHRiUGVyc2lzdE9QU2Nyb2xsPzogYm9vbGVhbjtcblx0bGlzdEJpbmRpbmc/OiBPRGF0YUxpc3RCaW5kaW5nO1xuXHRzaG93UGxhY2Vob2xkZXI/OiBib29sZWFuO1xufTtcblxuY29uc3QgUHJvZ3JhbW1pbmdNb2RlbCA9IEZFTGlicmFyeS5Qcm9ncmFtbWluZ01vZGVsO1xuY29uc3QgUHJlZmVycmVkQWN0aW9uU3RhdHVzID0gRkVMaWJyYXJ5LlByZWZlcnJlZEFjdGlvblN0YXR1c1R5cGU7XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUudGVtcGxhdGVzLk9iamVjdFBhZ2UuT2JqZWN0UGFnZUNvbnRyb2xsZXJcIilcbmNsYXNzIE9iamVjdFBhZ2VDb250cm9sbGVyIGV4dGVuZHMgUGFnZUNvbnRyb2xsZXIge1xuXHRvVmlldyE6IEZFVmlldztcblxuXHRAdXNpbmdFeHRlbnNpb24oUGxhY2Vob2xkZXIpXG5cdHBsYWNlaG9sZGVyITogUGxhY2Vob2xkZXI7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFNoYXJlLm92ZXJyaWRlKFNoYXJlT3ZlcnJpZGVzKSlcblx0c2hhcmUhOiBTaGFyZTtcblxuXHRAdXNpbmdFeHRlbnNpb24oSW50ZXJuYWxSb3V0aW5nLm92ZXJyaWRlKEludGVybmFsUm91dGluZ092ZXJyaWRlKSlcblx0X3JvdXRpbmchOiBJbnRlcm5hbFJvdXRpbmc7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFBhZ2luYXRvci5vdmVycmlkZShQYWdpbmF0b3JPdmVycmlkZSkpXG5cdHBhZ2luYXRvciE6IFBhZ2luYXRvcjtcblxuXHRAdXNpbmdFeHRlbnNpb24oTWVzc2FnZUhhbmRsZXIub3ZlcnJpZGUoTWVzc2FnZUhhbmRsZXJPdmVycmlkZSkpXG5cdG1lc3NhZ2VIYW5kbGVyITogTWVzc2FnZUhhbmRsZXI7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKEludGVudEJhc2VkTmF2aWdhdGlvbi5vdmVycmlkZShJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSkpXG5cdGludGVudEJhc2VkTmF2aWdhdGlvbiE6IEludGVudEJhc2VkTmF2aWdhdGlvbjtcblxuXHRAdXNpbmdFeHRlbnNpb24oQ29sbGFib3JhdGlvbk1hbmFnZXIub3ZlcnJpZGUoQ29sbGFib3JhdGlvbk1hbmFnZXJPdmVycmlkZSkpXG5cdGNvbGxhYm9yYXRpb25NYW5hZ2VyITogQ29sbGFib3JhdGlvbk1hbmFnZXI7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFxuXHRcdEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uLm92ZXJyaWRlKHtcblx0XHRcdGdldE5hdmlnYXRpb25Nb2RlOiBmdW5jdGlvbiAodGhpczogSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdFx0Y29uc3QgYklzU3RpY2t5RWRpdE1vZGUgPVxuXHRcdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgT2JqZWN0UGFnZUNvbnRyb2xsZXIpLmdldFN0aWNreUVkaXRNb2RlICYmXG5cdFx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBPYmplY3RQYWdlQ29udHJvbGxlcikuZ2V0U3RpY2t5RWRpdE1vZGUoKTtcblx0XHRcdFx0cmV0dXJuIGJJc1N0aWNreUVkaXRNb2RlID8gXCJleHBsYWNlXCIgOiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fSlcblx0KVxuXHRfaW50ZW50QmFzZWROYXZpZ2F0aW9uITogSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFZpZXdTdGF0ZS5vdmVycmlkZShWaWV3U3RhdGVPdmVycmlkZXMpKVxuXHR2aWV3U3RhdGUhOiBWaWV3U3RhdGU7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFxuXHRcdFBhZ2VSZWFkeS5vdmVycmlkZSh7XG5cdFx0XHRpc0NvbnRleHRFeHBlY3RlZDogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9KVxuXHQpXG5cdHBhZ2VSZWFkeSE6IFBhZ2VSZWFkeTtcblxuXHRwcml2YXRlIG1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcz86IFJlY29yZDxzdHJpbmcsIE9iamVjdFBhZ2VFeHRlbnNpb25BUEk+O1xuXG5cdHByb3RlY3RlZCBleHRlbnNpb25BUEk/OiBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJO1xuXG5cdHByaXZhdGUgYlNlY3Rpb25OYXZpZ2F0ZWQ/OiBib29sZWFuO1xuXG5cdHByaXZhdGUgaW52YWxpZGF0ZVRpdGxlSGllcmFyY2h5Q2FjaGVTZXRVcCA9IGZhbHNlO1xuXG5cdHByaXZhdGUgc3dpdGNoRHJhZnRBbmRBY3RpdmVQb3BPdmVyPzogUG9wb3ZlcjtcblxuXHRwcml2YXRlIGN1cnJlbnRCaW5kaW5nPzogQmluZGluZztcblxuXHRwcml2YXRlIG1lc3NhZ2VCdXR0b24hOiBNZXNzYWdlQnV0dG9uO1xuXG5cdHByaXZhdGUgY29sbGFib3JhdGlvbk1lc3NhZ2U/OiBNZXNzYWdlO1xuXG5cdHByaXZhdGUgbWVyZ2VQYXRjaERyYWZ0ID0gZmFsc2U7XG5cblx0cHJpdmF0ZSBhdXRvUXVldWVMb2NrOiBSZXR1cm5UeXBlPE9EYXRhTW9kZWxbXCJsb2NrXCJdPiB8IHVuZGVmaW5lZDtcblxuXHRwcml2YXRlIG1lc3NhZ2VCaW5kaW5nPzogQmluZGluZztcblxuXHRwcml2YXRlIGlzRmlyc3RCaW5kaW5nID0gdHJ1ZTtcblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Z2V0RXh0ZW5zaW9uQVBJKHNJZD86IHN0cmluZyk6IEV4dGVuc2lvbkFQSSB7XG5cdFx0aWYgKHNJZCkge1xuXHRcdFx0Ly8gdG8gYWxsb3cgbG9jYWwgSUQgdXNhZ2UgZm9yIGN1c3RvbSBwYWdlcyB3ZSdsbCBjcmVhdGUvcmV0dXJuIG93biBpbnN0YW5jZXMgZm9yIGN1c3RvbSBzZWN0aW9uc1xuXHRcdFx0dGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXMgPSB0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcyB8fCB7fTtcblxuXHRcdFx0aWYgKCF0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdKSB7XG5cdFx0XHRcdHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF0gPSBuZXcgRXh0ZW5zaW9uQVBJKHRoaXMsIHNJZCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKCF0aGlzLmV4dGVuc2lvbkFQSSkge1xuXHRcdFx0XHR0aGlzLmV4dGVuc2lvbkFQSSA9IG5ldyBFeHRlbnNpb25BUEkodGhpcyk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcy5leHRlbnNpb25BUEk7XG5cdFx0fVxuXHR9XG5cblx0b25Jbml0KCk6IHZvaWQge1xuXHRcdHN1cGVyLm9uSW5pdCgpO1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblxuXHRcdC8vIFNldHRpbmcgZGVmYXVsdHMgb2YgaW50ZXJuYWwgbW9kZWwgY29udGV4dFxuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0T3duZXJDb21wb25lbnQoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJleHRlcm5hbE5hdmlnYXRpb25Db250ZXh0XCIsIHsgcGFnZTogdHJ1ZSB9LCB1bmRlZmluZWQsIHRydWUpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXG5cdFx0XHRcInJlbGF0ZWRBcHBzXCIsXG5cdFx0XHR7XG5cdFx0XHRcdHZpc2liaWxpdHk6IGZhbHNlLFxuXHRcdFx0XHRpdGVtczogbnVsbFxuXHRcdFx0fSxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdHRydWVcblx0XHQpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJiYXRjaEdyb3Vwc1wiLCB0aGlzLl9nZXRCYXRjaEdyb3Vwc0ZvclZpZXcoKSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcImVycm9yTmF2aWdhdGlvblNlY3Rpb25GbGFnXCIsIGZhbHNlKTtcblx0XHRpZiAob09iamVjdFBhZ2UuZ2V0RW5hYmxlTGF6eUxvYWRpbmcoKSkge1xuXHRcdFx0Ly9BdHRhY2hpbmcgdGhlIGV2ZW50IHRvIG1ha2UgdGhlIHN1YnNlY3Rpb24gY29udGV4dCBiaW5kaW5nIGFjdGl2ZSB3aGVuIGl0IGlzIHZpc2libGUuXG5cdFx0XHRvT2JqZWN0UGFnZS5hdHRhY2hFdmVudChcInN1YlNlY3Rpb25FbnRlcmVkVmlld1BvcnRcIiwgdGhpcy5faGFuZGxlU3ViU2VjdGlvbkVudGVyZWRWaWV3UG9ydC5iaW5kKHRoaXMpKTtcblx0XHR9XG5cdFx0dGhpcy5tZXNzYWdlQnV0dG9uID0gdGhpcy5nZXRWaWV3KCkuYnlJZChcImZlOjpGb290ZXJCYXI6Ok1lc3NhZ2VCdXR0b25cIikgYXMgTWVzc2FnZUJ1dHRvbjtcblx0XHR0aGlzLm1lc3NhZ2VCaW5kaW5nID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpLmJpbmRMaXN0KFwiL1wiKTtcblx0XHR0aGlzLm1lc3NhZ2VCaW5kaW5nPy5hdHRhY2hDaGFuZ2UodGhpcy5fZm5TaG93T1BNZXNzYWdlLCB0aGlzKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwicm9vdEVkaXRFbmFibGVkXCIsIHRydWUsIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcInJvb3RFZGl0VmlzaWJsZVwiLCB0cnVlLCB1bmRlZmluZWQsIHRydWUpO1xuXG5cdFx0dGhpcy5faGFuZGxlU21hcnRTdW1tYXJ5U3RhcnR1cEFjdGlvbigpO1xuXHR9XG5cblx0b25FeGl0KCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcykge1xuXHRcdFx0Zm9yIChjb25zdCBzSWQgb2YgT2JqZWN0LmtleXModGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXMpKSB7XG5cdFx0XHRcdGlmICh0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdKSB7XG5cdFx0XHRcdFx0dGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXS5kZXN0cm95KCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGRlbGV0ZSB0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcztcblx0XHR9XG5cdFx0aWYgKHRoaXMuZXh0ZW5zaW9uQVBJKSB7XG5cdFx0XHR0aGlzLmV4dGVuc2lvbkFQSS5kZXN0cm95KCk7XG5cdFx0fVxuXHRcdGRlbGV0ZSB0aGlzLmV4dGVuc2lvbkFQSTtcblxuXHRcdGNvbnN0IG9NZXNzYWdlUG9wb3ZlciA9IHRoaXMubWVzc2FnZUJ1dHRvbiA/IHRoaXMubWVzc2FnZUJ1dHRvbi5vTWVzc2FnZVBvcG92ZXIgOiBudWxsO1xuXHRcdGlmIChvTWVzc2FnZVBvcG92ZXIgJiYgb01lc3NhZ2VQb3BvdmVyLmlzT3BlbigpKSB7XG5cdFx0XHRvTWVzc2FnZVBvcG92ZXIuY2xvc2UoKTtcblx0XHR9XG5cdFx0Ly93aGVuIGV4aXRpbmcgd2Ugc2V0IGtlZXBBbGl2ZSBjb250ZXh0IHRvIGZhbHNlXG5cdFx0Y29uc3Qgb0NvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGlmIChvQ29udGV4dCAmJiBvQ29udGV4dC5pc0tlZXBBbGl2ZSgpKSB7XG5cdFx0XHRvQ29udGV4dC5zZXRLZWVwQWxpdmUoZmFsc2UpO1xuXHRcdH1cblxuXHRcdHRoaXMuY29sbGFib3JhdGl2ZURyYWZ0LmRpc2Nvbm5lY3QoKTsgLy8gQ2xlYW51cCBjb2xsYWJvcmF0aW9uIGNvbm5lY3Rpb24gd2hlbiBsZWF2aW5nIHRoZSBhcHBcblxuXHRcdHRoaXMubWVzc2FnZUJpbmRpbmc/LmRldGFjaENoYW5nZSh0aGlzLl9mblNob3dPUE1lc3NhZ2UsIHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBzaG93IHRoZSBtZXNzYWdlIHN0cmlwIG9uIHRoZSBvYmplY3QgcGFnZS5cblx0ICpcblx0ICovXG5cdF9mblNob3dPUE1lc3NhZ2UoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuaXNTdXNwZW5kZWQoKSkge1xuXHRcdFx0Ly8gSWYgdGhlIGFwcCBpcyBzdXNwZW5kZWQsIHdlIGRvIG5vdCBzaG93IHRoZSBtZXNzYWdlcyAodGhlIE1lc3NhZ2VNb2RlbCBjb250YWlucyBtZXNzYWdlcyBmcm9tIHRoZSBhY3RpdmUgYXBwKS5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBleHRlbnNpb25BUEkgPSB0aGlzLmdldEV4dGVuc2lvbkFQSSgpO1xuXHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRjb25zdCBtZXNzYWdlcyA9IE1lc3NhZ2luZz8uZ2V0TWVzc2FnZU1vZGVsKClcblx0XHRcdC5nZXREYXRhKClcblx0XHRcdC5maWx0ZXIoKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IHtcblx0XHRcdFx0cmV0dXJuIG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdID09PSB2aWV3LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKTtcblx0XHRcdH0pO1xuXG5cdFx0aWYgKGV4dGVuc2lvbkFQSSkge1xuXHRcdFx0ZXh0ZW5zaW9uQVBJLl9zaG93TWVzc2FnZXMobWVzc2FnZXMsIFwiQmFja2VuZFwiKTtcblx0XHR9XG5cdH1cblxuXHRfZ2V0VGFibGVCaW5kaW5nKG9UYWJsZTogVGFibGUpOiBPRGF0YUxpc3RCaW5kaW5nIHtcblx0XHRyZXR1cm4gb1RhYmxlICYmIG9UYWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdH1cblxuXHQvKipcblx0ICogRmluZCB0aGUgbGFzdCB2aXNpYmxlIHN1YnNlY3Rpb24gYW5kIGFkZCB0aGUgc2FwVXhBUE9iamVjdFBhZ2VTdWJTZWN0aW9uRml0Q29udGFpbmVyIENTUyBjbGFzcyBpZiBpdCBjb250YWlucyBvbmx5IGEgR3JpZFRhYmxlIG9yIGEgVHJlZVRhYmxlLlxuXHQgKiBAcGFyYW0gc3ViU2VjdGlvbnMgVGhlIHN1YiBzZWN0aW9ucyB0byBsb29rIGZvclxuXHQgKi9cblx0cHJpdmF0ZSBjaGVja1NlY3Rpb25zRm9yTm9uUmVzcG9uc2l2ZVRhYmxlKHN1YlNlY3Rpb25zOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdKTogdm9pZCB7XG5cdFx0Y29uc3QgY2hhbmdlQ2xhc3NGb3JUYWJsZXMgPSAoZXZlbnQ6IEV2ZW50LCBsYXN0VmlzaWJsZVN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uKTogdm9pZCA9PiB7XG5cdFx0XHRjb25zdCBibG9ja3MgPSBbLi4ubGFzdFZpc2libGVTdWJTZWN0aW9uLmdldEJsb2NrcygpLCAuLi5sYXN0VmlzaWJsZVN1YlNlY3Rpb24uZ2V0TW9yZUJsb2NrcygpXTtcblx0XHRcdGlmIChibG9ja3MubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdGNvbnN0IHRhYmxlID0gdGhpcy5zZWFyY2hUYWJsZUluQmxvY2soYmxvY2tzWzBdIGFzIFN1YlNlY3Rpb25CbG9jayk7XG5cdFx0XHRcdGlmICghdGFibGUpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgdGFibGVUeXBlID0gdGFibGUuaXNBPFRhYmxlPihcInNhcC51aS5tZGMuVGFibGVcIikgJiYgKHRhYmxlLmdldFR5cGUoKSBhcyBUYWJsZVR5cGVCYXNlKTtcblx0XHRcdFx0Y29uc3QgdGFibGVBUEkgPSB0YWJsZS5nZXRQYXJlbnQoKT8uaXNBPFRhYmxlQVBJPihcInNhcC5mZS5tYWNyb3MudGFibGUuVGFibGVBUElcIilcblx0XHRcdFx0XHQ/ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSlcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHRhYmxlVHlwZSAmJlxuXHRcdFx0XHRcdCh0YWJsZVR5cGU/LmlzQShcInNhcC51aS5tZGMudGFibGUuR3JpZFRhYmxlVHlwZVwiKSB8fCB0YWJsZVR5cGU/LmlzQShcInNhcC51aS5tZGMudGFibGUuVHJlZVRhYmxlVHlwZVwiKSkgJiZcblx0XHRcdFx0XHR0YWJsZUFQST8uZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbC5yb3dDb3VudE1vZGUgPT09IFwiQXV0b1wiXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdC8vSW4gY2FzZSB0aGVyZSBpcyBvbmx5IGEgc2luZ2xlIHRhYmxlIGluIGEgc3ViU2VjdGlvbiB3ZSBmaXQgdGhhdCB0byB0aGUgd2hvbGUgcGFnZSBzbyB0aGF0IHRoZSBzY3JvbGxiYXIgY29tZXMgb25seSBvbiB0YWJsZSBhbmQgbm90IG9uIHBhZ2Vcblx0XHRcdFx0XHRsYXN0VmlzaWJsZVN1YlNlY3Rpb24uYWRkU3R5bGVDbGFzcyhcInNhcFV4QVBPYmplY3RQYWdlU3ViU2VjdGlvbkZpdENvbnRhaW5lclwiKTtcblx0XHRcdFx0XHRsYXN0VmlzaWJsZVN1YlNlY3Rpb24uZGV0YWNoRXZlbnQoXCJtb2RlbENvbnRleHRDaGFuZ2VcIiwgY2hhbmdlQ2xhc3NGb3JUYWJsZXMsIHRoaXMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRmb3IgKGxldCBzdWJTZWN0aW9uSW5kZXggPSBzdWJTZWN0aW9ucy5sZW5ndGggLSAxOyBzdWJTZWN0aW9uSW5kZXggPj0gMDsgc3ViU2VjdGlvbkluZGV4LS0pIHtcblx0XHRcdGlmIChzdWJTZWN0aW9uc1tzdWJTZWN0aW9uSW5kZXhdLmdldFZpc2libGUoKSkge1xuXHRcdFx0XHRjb25zdCBsYXN0VmlzaWJsZVN1YlNlY3Rpb24gPSBzdWJTZWN0aW9uc1tzdWJTZWN0aW9uSW5kZXhdO1xuXHRcdFx0XHQvLyBXZSBuZWVkIHRvIGF0dGFjaCB0aGlzIGV2ZW50IGluIG9yZGVyIHRvIG1hbmFnZSB0aGUgT2JqZWN0IFBhZ2UgTGF6eSBMb2FkaW5nIG1lY2hhbmlzbVxuXHRcdFx0XHRsYXN0VmlzaWJsZVN1YlNlY3Rpb24uYXR0YWNoRXZlbnQoXCJtb2RlbENvbnRleHRDaGFuZ2VcIiwgbGFzdFZpc2libGVTdWJTZWN0aW9uLCBjaGFuZ2VDbGFzc0ZvclRhYmxlcywgdGhpcyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBGaW5kIGEgdGFibGUgaW4gYmxvY2tzIG9mIHNlY3Rpb24uXG5cdCAqIEBwYXJhbSBibG9jayBPbmUgc3ViIHNlY3Rpb24gYmxvY2tcblx0ICogQHJldHVybnMgVGFibGUgaWYgZXhpc3RzXG5cdCAqL1xuXHRwcml2YXRlIHNlYXJjaFRhYmxlSW5CbG9jayhibG9jazogU3ViU2VjdGlvbkJsb2NrKTogVGFibGUgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGNvbnRyb2wgPSBibG9jay5jb250ZW50O1xuXHRcdGxldCB0YWJsZUFQSTogVGFibGVBUEkgfCB1bmRlZmluZWQ7XG5cdFx0aWYgKGJsb2NrLmlzQShcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5jb250cm9scy5TdWJTZWN0aW9uQmxvY2tcIikpIHtcblx0XHRcdC8vIFRoZSB0YWJsZSBtYXkgY3VycmVudGx5IGJlIHNob3duIGluIGEgZnVsbCBzY3JlZW4gZGlhbG9nLCB3ZSBjYW4gdGhlbiBnZXQgdGhlIHJlZmVyZW5jZSB0byB0aGUgVGFibGVBUElcblx0XHRcdC8vIGNvbnRyb2wgZnJvbSB0aGUgY3VzdG9tIGRhdGEgb2YgdGhlIHBsYWNlIGhvbGRlciBwYW5lbFxuXHRcdFx0aWYgKGNvbnRyb2wuaXNBKFwic2FwLm0uUGFuZWxcIikgJiYgY29udHJvbC5kYXRhKFwiRnVsbFNjcmVlblRhYmxlUGxhY2VIb2xkZXJcIikpIHtcblx0XHRcdFx0dGFibGVBUEkgPSBjb250cm9sLmRhdGEoXCJ0YWJsZUFQSXJlZmVyZW5jZVwiKTtcblx0XHRcdH0gZWxzZSBpZiAoY29udHJvbC5pc0EoXCJzYXAuZmUubWFjcm9zLnRhYmxlLlRhYmxlQVBJXCIpKSB7XG5cdFx0XHRcdHRhYmxlQVBJID0gY29udHJvbCBhcyBUYWJsZUFQSTtcblx0XHRcdH1cblx0XHRcdGlmICh0YWJsZUFQSSkge1xuXHRcdFx0XHRyZXR1cm4gdGFibGVBUEkuY29udGVudDtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdG9uQmVmb3JlUmVuZGVyaW5nKCk6IHZvaWQge1xuXHRcdFBhZ2VDb250cm9sbGVyLnByb3RvdHlwZS5vbkJlZm9yZVJlbmRlcmluZy5hcHBseSh0aGlzKTtcblx0XHQvLyBJbiB0aGUgcmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCBzY2VuYXJpbyB3ZSBuZWVkIHRvIGVuc3VyZSBpbiBjYXNlIG9mIHJlbG9hZC9yZWZyZXNoIHRoYXQgdGhlIG1ldGEgbW9kZWwgaW4gdGhlIG1ldGhvZGUgcmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCBvZiB0aGUgRmllbGRSdW50aW1lIGlzIGF2YWlsYWJsZVxuXHRcdGlmICh0aGlzLm9WaWV3LmdldFZpZXdEYXRhKCk/LnJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3QgJiYgQ29tbW9uSGVscGVyLmdldE1ldGFNb2RlbCgpID09PSB1bmRlZmluZWQpIHtcblx0XHRcdENvbW1vbkhlbHBlci5zZXRNZXRhTW9kZWwodGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0fVxuXHR9XG5cblx0b25BZnRlclJlbmRlcmluZygpOiB2b2lkIHtcblx0XHRsZXQgc3ViU2VjdGlvbnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW107XG5cdFx0aWYgKHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkuZ2V0VXNlSWNvblRhYkJhcigpKSB7XG5cdFx0XHRjb25zdCBzZWN0aW9ucyA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkuZ2V0U2VjdGlvbnMoKTtcblx0XHRcdGZvciAoY29uc3Qgc2VjdGlvbiBvZiBzZWN0aW9ucykge1xuXHRcdFx0XHRzdWJTZWN0aW9ucyA9IHNlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKTtcblx0XHRcdFx0dGhpcy5jaGVja1NlY3Rpb25zRm9yTm9uUmVzcG9uc2l2ZVRhYmxlKHN1YlNlY3Rpb25zKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0c3ViU2VjdGlvbnMgPSB0aGlzLl9nZXRBbGxTdWJTZWN0aW9ucygpO1xuXHRcdFx0dGhpcy5jaGVja1NlY3Rpb25zRm9yTm9uUmVzcG9uc2l2ZVRhYmxlKHN1YlNlY3Rpb25zKTtcblx0XHR9XG5cdH1cblxuXHRfb25CZWZvcmVCaW5kaW5nKG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCwgbVBhcmFtZXRlcnM6IEJpbmRpbmdQYXJhbXMgPSB7fSk6IHZvaWQge1xuXHRcdC8vIFRPRE86IHdlIHNob3VsZCBjaGVjayBob3cgdGhpcyBjb21lcyB0b2dldGhlciB3aXRoIHRoZSB0cmFuc2FjdGlvbiBoZWxwZXIsIHNhbWUgdG8gdGhlIGNoYW5nZSBpbiB0aGUgYWZ0ZXJCaW5kaW5nXG5cdFx0Y29uc3QgYVRhYmxlcyA9IHRoaXMuX2ZpbmRUYWJsZXMoKSxcblx0XHRcdG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKSxcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRvSW50ZXJuYWxNb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwiaW50ZXJuYWxcIiksXG5cdFx0XHRhQmF0Y2hHcm91cHMgPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJiYXRjaEdyb3Vwc1wiKTtcblx0XHRsZXQgb0Zhc3RDcmVhdGlvblJvdztcblx0XHRhQmF0Y2hHcm91cHMucHVzaChcIiRhdXRvXCIpO1xuXHRcdGlmIChtUGFyYW1ldGVycy5yZWFzb24gIT09IE5hdmlnYXRpb25SZWFzb24uRWRpdEZsb3dBY3Rpb24pIHtcblx0XHRcdHRoaXMuX2Nsb3NlU2lkZUNvbnRlbnQoKTtcblx0XHR9XG5cdFx0Y29uc3Qgb3BDb250ZXh0ID0gb09iamVjdFBhZ2UuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dDtcblx0XHRpZiAoXG5cdFx0XHRvcENvbnRleHQgJiZcblx0XHRcdG9wQ29udGV4dC5oYXNQZW5kaW5nQ2hhbmdlcygpICYmXG5cdFx0XHQhYUJhdGNoR3JvdXBzLnNvbWUob3BDb250ZXh0LmdldE1vZGVsKCkuaGFzUGVuZGluZ0NoYW5nZXMuYmluZChvcENvbnRleHQuZ2V0TW9kZWwoKSkpXG5cdFx0KSB7XG5cdFx0XHQvKiBcdEluIGNhc2UgdGhlcmUgYXJlIHBlbmRpbmcgY2hhbmdlcyBmb3IgdGhlIGNyZWF0aW9uIHJvdyBhbmQgbm8gb3RoZXJzIHdlIG5lZWQgdG8gcmVzZXQgdGhlIGNoYW5nZXNcblx0XHRcdFx0XHRcdFx0XHRUT0RPOiB0aGlzIGlzIGp1c3QgYSBxdWljayBzb2x1dGlvbiwgdGhpcyBuZWVkcyB0byBiZSByZXdvcmtlZFxuXHRcdFx0XHRcdFx0XHRcdCovXG5cblx0XHRcdG9wQ29udGV4dC5nZXRCaW5kaW5nKCkucmVzZXRDaGFuZ2VzKCk7XG5cdFx0fVxuXG5cdFx0Ly8gRm9yIG5vdyB3ZSBoYXZlIHRvIHNldCB0aGUgYmluZGluZyBjb250ZXh0IHRvIG51bGwgZm9yIGV2ZXJ5IGZhc3QgY3JlYXRpb24gcm93XG5cdFx0Ly8gVE9ETzogR2V0IHJpZCBvZiB0aGlzIGNvZGluZyBvciBtb3ZlIGl0IHRvIGFub3RoZXIgbGF5ZXIgLSB0byBiZSBkaXNjdXNzZWQgd2l0aCBNREMgYW5kIG1vZGVsXG5cdFx0Zm9yIChjb25zdCBpdGVtIG9mIGFUYWJsZXMpIHtcblx0XHRcdG9GYXN0Q3JlYXRpb25Sb3cgPSBpdGVtLmdldENyZWF0aW9uUm93KCk7XG5cdFx0XHRpZiAob0Zhc3RDcmVhdGlvblJvdykge1xuXHRcdFx0XHRvRmFzdENyZWF0aW9uUm93LnNldEJpbmRpbmdDb250ZXh0KG51bGwpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFNjcm9sbCB0byBwcmVzZW50IFNlY3Rpb24gc28gdGhhdCBiaW5kaW5ncyBhcmUgZW5hYmxlZCBkdXJpbmcgbmF2aWdhdGlvbiB0aHJvdWdoIHBhZ2luYXRvciBidXR0b25zLCBhcyB0aGVyZSBpcyBubyB2aWV3IHJlcmVuZGVyaW5nL3JlYmluZFxuXHRcdGNvbnN0IGZuU2Nyb2xsVG9QcmVzZW50U2VjdGlvbiA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdGlmICghKG9PYmplY3RQYWdlIGFzIHsgaXNGaXJzdFJlbmRlcmluZz86ICgpID0+IGJvb2xlYW4gfSkuaXNGaXJzdFJlbmRlcmluZz8uKCkgJiYgIW1QYXJhbWV0ZXJzLmJQZXJzaXN0T1BTY3JvbGwpIHtcblx0XHRcdFx0b09iamVjdFBhZ2Uuc2V0U2VsZWN0ZWRTZWN0aW9uKG51bGwgYXMgdW5rbm93biBhcyBzdHJpbmcpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0b09iamVjdFBhZ2UuYXR0YWNoRXZlbnRPbmNlKFwibW9kZWxDb250ZXh0Q2hhbmdlXCIsIGZuU2Nyb2xsVG9QcmVzZW50U2VjdGlvbik7XG5cblx0XHRjb25zdCBmbk9QUmVuZGVyaW5nTGF5b3V0ID0ge1xuXHRcdFx0b25BZnRlclJlbmRlcmluZzogKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKT8uZWRpdGFibGVIZWFkZXJDb250ZW50KSB7XG5cdFx0XHRcdFx0Zm5TY3JvbGxUb1ByZXNlbnRTZWN0aW9uKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0b09iamVjdFBhZ2UucmVtb3ZlRXZlbnREZWxlZ2F0ZShmbk9QUmVuZGVyaW5nTGF5b3V0KTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdG9PYmplY3RQYWdlLmFkZEV2ZW50RGVsZWdhdGUoZm5PUFJlbmRlcmluZ0xheW91dCk7XG5cblx0XHQvL1NldCB0aGUgQmluZGluZyBmb3IgUGFnaW5hdG9ycyB1c2luZyBMaXN0QmluZGluZyBJRFxuXHRcdHRoaXMuX2luaXRpYWxpemVQYWdpbmF0aW9uKG9Db250ZXh0LCBvSW50ZXJuYWxNb2RlbCwgbVBhcmFtZXRlcnM/Lmxpc3RCaW5kaW5nKTtcblxuXHRcdGNvbnN0IGZpcnN0U3ViU2VjdGlvblZpc2liaWxpdHlCaW5kaW5nID0gdGhpcy5fZ2V0Zmlyc3RTdWJTZWN0aW9uVmlzaWJpbGl0eUJpbmRpbmcoKTtcblxuXHRcdGlmIChcblx0XHRcdHRoaXMudXNlTGF6eUxvYWRlck9wdGltaXphdGlvbnMoKSAmJlxuXHRcdFx0b09iamVjdFBhZ2UuZ2V0RW5hYmxlTGF6eUxvYWRpbmcoKSAmJlxuXHRcdFx0Zmlyc3RTdWJTZWN0aW9uVmlzaWJpbGl0eUJpbmRpbmcgJiZcblx0XHRcdHRoaXMuaXNGaXJzdEJpbmRpbmdcblx0XHQpIHtcblx0XHRcdC8vIGlmIGxhenkgbG9hZGluZyBpcyBlbmFibGVkIGFuZCBhdCBsZWFzdCBvbmUgc3Vic2VjdGlvbiBoYXMgYSB2aXNpYmlsaXR5IGJpbmRpbmdcblx0XHRcdG9PYmplY3RQYWdlLnNldFZpc2libGUoZmFsc2UpOyAvLyBUaGUgb2JqZWN0UGFnZSBWaXNpYmlsaXR5IGlzIHNldCB0byBmYWxzZSB0byBwcmV2ZW50IHRoZSBsYXp5IGxvYWRlciB0byBjb21wdXRlIHRoZSBzZWN0aW9uc1xuXHRcdFx0Zmlyc3RTdWJTZWN0aW9uVmlzaWJpbGl0eUJpbmRpbmcuYXR0YWNoRXZlbnRPbmNlKFwiY2hhbmdlXCIsIGFzeW5jICgpID0+IHtcblx0XHRcdFx0Y29uc3QgTURDVGFibGVQcm9taXNlcyA9IHRoaXMuX2dldEFsbEJsb2NrcygpLm1hcChhc3luYyAoYmxvY2spID0+XG5cdFx0XHRcdFx0YmxvY2suZ2V0VmlzaWJsZSgpICYmIGJsb2NrLmdldENvbnRlbnQ/LigpPy5pc0E8VGFibGVBUEk+KFwic2FwLmZlLm1hY3Jvcy50YWJsZS5UYWJsZUFQSVwiKVxuXHRcdFx0XHRcdFx0PyAoYmxvY2suZ2V0Q29udGVudCgpIGFzIFRhYmxlQVBJKS5nZXRDb250ZW50KCkuaW5pdGlhbGl6ZWQoKVxuXHRcdFx0XHRcdFx0OiBudWxsXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGF3YWl0IFByb21pc2UuYWxsKE1EQ1RhYmxlUHJvbWlzZXMpO1xuXHRcdFx0XHRvT2JqZWN0UGFnZS5zZXRWaXNpYmxlKHRydWUpOyAvLyBWaXNpYmlsaXR5IGlzIHJlc3RvcmVkIG9uY2UgdGhlIHZpc2liaWxpdHkgYmluZGluZ3Mgb2YgdGhlIHNlY3Rpb25zIGFyZSByZXNvbHZlZCwgYWxsb3dpbmcgbGF6eSBsb2FkaW5nIHRvIHByb3Blcmx5IHByb2Nlc3MgdGhlbVxuXHRcdFx0XHR0aGlzLmlzRmlyc3RCaW5kaW5nID0gZmFsc2U7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRpZiAob09iamVjdFBhZ2UuZ2V0RW5hYmxlTGF6eUxvYWRpbmcoKSkge1xuXHRcdFx0dGhpcy5fZGlzYWJsZUJsb2Nrc0JpbmRpbmdzKG9PYmplY3RQYWdlKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5wbGFjZWhvbGRlci5pc1BsYWNlaG9sZGVyRW5hYmxlZCgpICYmIG1QYXJhbWV0ZXJzLnNob3dQbGFjZWhvbGRlcikge1xuXHRcdFx0Y29uc3Qgb1ZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRcdGNvbnN0IG9OYXZDb250YWluZXIgPSAob1ZpZXcuZ2V0UGFyZW50KCkgYXMgdW5rbm93biBhcyB7IG9Db250YWluZXI6IENvbnRyb2wgfSkub0NvbnRhaW5lci5nZXRQYXJlbnQoKTtcblx0XHRcdGlmIChvTmF2Q29udGFpbmVyKSB7XG5cdFx0XHRcdHRoaXMucGxhY2Vob2xkZXIuZW5hYmxlQW5pbWF0aW9uKCk7XG5cdFx0XHRcdChvTmF2Q29udGFpbmVyIGFzIHVua25vd24gYXMgeyBzaG93UGxhY2Vob2xkZXI6IEZ1bmN0aW9uIH0pLnNob3dQbGFjZWhvbGRlcih7fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSB1c2VMYXp5TG9hZGVyT3B0aW1pemF0aW9ucygpOiBib29sZWFuIHtcblx0XHRpZiAobmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5nZXQoXCJzYXAtdWkteHgtbGF6eWxvYWRlci1vcHRpbWl6YXRpb25zXCIpID09PSBcInRydWVcIikge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0Rmlyc3RFZGl0YWJsZUlucHV0KCk6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGRvbUVkaXRhYmxlRWxlbWVudCA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkuX2dldEZpcnN0RWRpdGFibGVJbnB1dCgpO1xuXHRcdHJldHVybiBkb21FZGl0YWJsZUVsZW1lbnQgPyBVSTVFbGVtZW50LmNsb3Nlc3RUbyhkb21FZGl0YWJsZUVsZW1lbnQpIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgZmlyc3QgY2xpY2thYmxlIGVsZW1lbnQgaW4gdGhlIGhlYWRlciBvZiB0aGUgb2JqZWN0IHBhZ2UuXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSBvYmplY3RQYWdlIE9iamVjdCBQYWdlIExheW91dCBjb250cm9sXG5cdCAqIEByZXR1cm5zIFRoZSBmaXJzdCBjbGlja2FibGUgZWxlbWVudCBmb3VuZCBpbiB0aGUgaGVhZGVyXG5cdCAqL1xuXHRwcml2YXRlIGdldEZpcnN0Q2xpY2thYmxlRWxlbWVudChvYmplY3RQYWdlOiBPYmplY3RQYWdlTGF5b3V0KTogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IGZpcnN0Q2xpY2thYmxlRWxlbWVudDtcblx0XHRjb25zdCBhY3Rpb25zID0gb2JqZWN0UGFnZS5nZXRIZWFkZXJUaXRsZSgpICYmIChvYmplY3RQYWdlLmdldEhlYWRlclRpdGxlKCkgYXMgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZSkuZ2V0QWN0aW9ucygpO1xuXHRcdGlmIChhY3Rpb25zPy5sZW5ndGgpIHtcblx0XHRcdGZpcnN0Q2xpY2thYmxlRWxlbWVudCA9IGFjdGlvbnMuZmluZChmdW5jdGlvbiAoYWN0aW9uOiBDb250cm9sKSB7XG5cdFx0XHRcdC8vIER1ZSB0byB0aGUgbGVmdCBhbGlnbm1lbnQgb2YgdGhlIERyYWZ0IHN3aXRjaCBhbmQgdGhlIGNvbGxhYm9yYXRpdmUgZHJhZnQgYXZhdGFyIGNvbnRyb2xzXG5cdFx0XHRcdC8vIHRoZXJlIGlzIGEgVG9vbGJhclNwYWNlciBpbiB0aGUgYWN0aW9ucyBhZ2dyZWdhdGlvbiB3aGljaCB3ZSBuZWVkIHRvIGV4Y2x1ZGUgaGVyZSFcblx0XHRcdFx0Ly8gRHVlIHRvIHRoZSBBQ0MgcmVwb3J0LCB3ZSBhbHNvIG5lZWQgbm90IHRvIGNoZWNrIGZvciB0aGUgSW52aXNpYmxlVGV4dCBlbGVtZW50c1xuXHRcdFx0XHRpZiAoYWN0aW9uLmlzQTxTdW1tYXJpemF0aW9uQnV0dG9uPihcInNhcC5mZS5tYWNyb3MuYWkuU3VtbWFyaXphdGlvbkJ1dHRvblwiKSkge1xuXHRcdFx0XHRcdHJldHVybiBhY3Rpb24uZ2V0Q29udGVudCgpPy5nZXRWaXNpYmxlKCkgPz8gZmFsc2U7XG5cdFx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdFx0YWN0aW9uLmlzQTxTaGFyZUFQST4oXCJzYXAuZmUubWFjcm9zLlNoYXJlXCIpIHx8XG5cdFx0XHRcdFx0YWN0aW9uLmlzQTxFYXN5RmlsbEJ1dHRvbj4oXCJzYXAuZmUubWFjcm9zLmFpLkVhc3lGaWxsQnV0dG9uXCIpIHx8XG5cdFx0XHRcdFx0YWN0aW9uLmlzQTxDb2xsYWJvcmF0aW9uRHJhZnQ+KFwic2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLmNvbXBvbmVudHMuQ29sbGFib3JhdGlvbkRyYWZ0XCIpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdC8vIHNpbmNlIFNoYXJlIGFuZCBDb2xsYWJvcmF0aW9uRHJhZnQgZG9lcyBub3QgaGF2ZSBhIGRpc2FibGUgcHJvcGVydHlcblx0XHRcdFx0XHQvLyBoZW5jZSB0aGVyZSBpcyBubyBuZWVkIHRvIGNoZWNrIGlmIGl0IGlzIGRpc2FibGVkIG9yIG5vdFxuXHRcdFx0XHRcdHJldHVybiBhY3Rpb24uZ2V0VmlzaWJsZSgpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCFhY3Rpb24uaXNBPEludmlzaWJsZVRleHQ+KFwic2FwLnVpLmNvcmUuSW52aXNpYmxlVGV4dFwiKSAmJiAhYWN0aW9uLmlzQTxUb29sYmFyU3BhY2VyPihcInNhcC5tLlRvb2xiYXJTcGFjZXJcIikpIHtcblx0XHRcdFx0XHRyZXR1cm4gYWN0aW9uLmdldFZpc2libGUoKSAmJiAoYWN0aW9uIGFzIEJ1dHRvbikuZ2V0RW5hYmxlZCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGZpcnN0Q2xpY2thYmxlRWxlbWVudDtcblx0fVxuXG5cdC8qKlxuXHQgKiBEaXNhYmxlIHRoZSBiaW5kaW5ncyBvZiBibG9ja3MgaW4gT2JqZWN0IFBhZ2UgTGF5b3V0IGJhc2VkIG9uIHRoZSBpdHMgb3ZlcmFsbCBjb250ZW50LlxuXHQgKiBAcGFyYW0gb2JqZWN0UGFnZSBPYmplY3QgUGFnZSBMYXlvdXQgY29udHJvbFxuXHQgKi9cblx0X2Rpc2FibGVCbG9ja3NCaW5kaW5ncyh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlciwgb2JqZWN0UGFnZTogT2JqZWN0UGFnZUxheW91dCk6IHZvaWQge1xuXHRcdGNvbnN0IGFTZWN0aW9ucyA9IG9iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKTtcblx0XHRjb25zdCBiVXNlSWNvblRhYkJhciA9IG9iamVjdFBhZ2UuZ2V0VXNlSWNvblRhYkJhcigpO1xuXHRcdGxldCBpU2tpcCA9IDM7IC8vIDMgc2VjdGlvbnMvc3Vic2VjdGlvbnMgYXJlIGxvYWRlZCBpbml0aWFsbHksIHRoZSBvdGhlcnMgYXJlIGxvYWRlZCBsYXppbHlcblx0XHRjb25zdCBiSXNJbkVkaXRNb2RlID0gQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZSh0aGlzLmdldFZpZXcoKSk7XG5cdFx0Y29uc3QgYkVkaXRhYmxlSGVhZGVyID0gdGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS5lZGl0YWJsZUhlYWRlckNvbnRlbnQ7XG5cdFx0Y29uc3QgZmlyc3RWaXNpYmlsaXR5QmluZGluZyA9IHRoaXMuX2dldGZpcnN0U3ViU2VjdGlvblZpc2liaWxpdHlCaW5kaW5nKCk7XG5cdFx0Zm9yIChsZXQgaVNlY3Rpb24gPSAwOyBpU2VjdGlvbiA8IGFTZWN0aW9ucy5sZW5ndGg7IGlTZWN0aW9uKyspIHtcblx0XHRcdGNvbnN0IG9TZWN0aW9uID0gYVNlY3Rpb25zW2lTZWN0aW9uXTtcblx0XHRcdGNvbnN0IGFTdWJTZWN0aW9ucyA9IG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCk7XG5cdFx0XHRmb3IgKGxldCBpU3ViU2VjdGlvbiA9IDA7IGlTdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgaVN1YlNlY3Rpb24rKywgaVNraXAtLSkge1xuXHRcdFx0XHQvLyBJbiBJY29uVGFiQmFyIG1vZGUga2VlcCB0aGUgc2Vjb25kIHNlY3Rpb24gYm91bmQgaWYgdGhlcmUgaXMgYW4gZWRpdGFibGUgaGVhZGVyIGFuZCB3ZSBhcmUgc3dpdGNoaW5nIHRvIGRpc3BsYXkgbW9kZVxuXG5cdFx0XHRcdGNvbnN0IGRpc2FibGVCaW5kaW5nQ29udGV4dENvbmRpdGlvbiA9XG5cdFx0XHRcdFx0KCF0aGlzLnVzZUxhenlMb2FkZXJPcHRpbWl6YXRpb25zKCkgJiZcblx0XHRcdFx0XHRcdChpU2tpcCA8IDEgfHwgKGJVc2VJY29uVGFiQmFyICYmIChpU2VjdGlvbiA+IDEgfHwgKGlTZWN0aW9uID09PSAxICYmICFiRWRpdGFibGVIZWFkZXIgJiYgIWJJc0luRWRpdE1vZGUpKSkpKSB8fFxuXHRcdFx0XHRcdCh0aGlzLnVzZUxhenlMb2FkZXJPcHRpbWl6YXRpb25zKCkgJiZcblx0XHRcdFx0XHRcdCgoIWJVc2VJY29uVGFiQmFyICYmIGZpcnN0VmlzaWJpbGl0eUJpbmRpbmcpIHx8IC8vaWYgc29tZSBzdWJzZWN0aW9ucyBoYXZlIHZpc2liaWxpdHkgYmluZGluZyBhbmQgd2UgYXJlIG5vdCBpbiBJY29uVGFiQmFyIG1vZGVcblx0XHRcdFx0XHRcdFx0KCFiVXNlSWNvblRhYkJhciAmJiAhZmlyc3RWaXNpYmlsaXR5QmluZGluZyAmJiBpU2tpcCA8IDEpIHx8IC8vIGlmIG5vIHN1YnNlY3Rpb24gaGFzIHZpc2liaWxpdHkgYmluZGluZyBhbmQgd2UgYXJlIG5vdCBpbiBJY29uVGFiQmFyIG1vZGVcblx0XHRcdFx0XHRcdFx0KGJVc2VJY29uVGFiQmFyICYmIChpU2VjdGlvbiA+IDEgfHwgKGlTZWN0aW9uID09PSAxICYmICFiRWRpdGFibGVIZWFkZXIgJiYgIWJJc0luRWRpdE1vZGUpKSkpKTtcblx0XHRcdFx0aWYgKGRpc2FibGVCaW5kaW5nQ29udGV4dENvbmRpdGlvbikge1xuXHRcdFx0XHRcdGNvbnN0IG9TdWJTZWN0aW9uID0gYVN1YlNlY3Rpb25zW2lTdWJTZWN0aW9uXTtcblx0XHRcdFx0XHQvLyBTdWJTZWN0aW9uJ3MgYmluZGluZyBpcyBlbmFibGVkLlxuXHRcdFx0XHRcdG9TdWJTZWN0aW9uLnNldEJpbmRpbmdDb250ZXh0KHVuZGVmaW5lZCk7XG5cdFx0XHRcdFx0Y29uc3QgYmxvY2tzID0gb1N1YlNlY3Rpb24uZ2V0QmxvY2tzKCkgYXMgU3ViU2VjdGlvbkJsb2NrW107XG5cdFx0XHRcdFx0Ly8gU3ViU2VjdGlvbidzIGNvbnRlbnRzIGJpbmRpbmcgaXMgZGlzYWJsZWQuXG5cdFx0XHRcdFx0YmxvY2tzLmZvckVhY2goKGJsb2NrKSA9PiBibG9jay5zZXRCaW5kaW5nQ29udGV4dChudWxsKSk7XG5cdFx0XHRcdFx0b1N1YlNlY3Rpb24uZ2V0TW9yZUJsb2NrcygpLmZvckVhY2goKHN1YkJsb2NrKSA9PiBzdWJCbG9jay5zZXRCaW5kaW5nQ29udGV4dChudWxsKSk7XG5cdFx0XHRcdFx0b1N1YlNlY3Rpb24uZ2V0QWN0aW9ucygpLmZvckVhY2goKGFjdGlvbnMpID0+IGFjdGlvbnMuc2V0QmluZGluZ0NvbnRleHQobnVsbCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X2dldEZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZEZyb21TdWJTZWN0aW9uKGFTdWJTZWN0aW9uczogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSk6IElucHV0QmFzZSB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKGFTdWJTZWN0aW9ucy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG5cdFx0Zm9yIChjb25zdCBzdWJTZWN0aW9uIG9mIGFTdWJTZWN0aW9ucykge1xuXHRcdFx0Y29uc3QgYUJsb2NrcyA9IHN1YlNlY3Rpb24uZ2V0QmxvY2tzKCkgYXMgKEZvcm0gfCBGb3JtQVBJKVtdO1xuXG5cdFx0XHRpZiAoYUJsb2Nrcykge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGJsb2NrQ29udHJvbCBvZiBhQmxvY2tzKSB7XG5cdFx0XHRcdFx0aWYgKGJsb2NrQ29udHJvbC5nZXRCaW5kaW5nQ29udGV4dD8uKCkpIHtcblx0XHRcdFx0XHRcdGxldCBhRm9ybUNvbnRhaW5lcnM7XG5cblx0XHRcdFx0XHRcdGlmIChibG9ja0NvbnRyb2wuaXNBPEZvcm0+KFwic2FwLnVpLmxheW91dC5mb3JtLkZvcm1cIikpIHtcblx0XHRcdFx0XHRcdFx0YUZvcm1Db250YWluZXJzID0gYmxvY2tDb250cm9sLmdldEZvcm1Db250YWluZXJzKCk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGJsb2NrQ29udHJvbC5nZXRDb250ZW50ICYmIGJsb2NrQ29udHJvbC5nZXRDb250ZW50KCk/LmlzQTxGb3JtPihcInNhcC51aS5sYXlvdXQuZm9ybS5Gb3JtXCIpKSB7XG5cdFx0XHRcdFx0XHRcdGFGb3JtQ29udGFpbmVycyA9IChibG9ja0NvbnRyb2wuZ2V0Q29udGVudCgpIGFzIEZvcm0pLmdldEZvcm1Db250YWluZXJzKCk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGJsb2NrQ29udHJvbD8uZ2V0Q29udGVudD8uKCk/LmlzQTxGb3JtQVBJPihcInNhcC5mZS5tYWNyb3MuZm9ybS5Gb3JtQVBJXCIpKSB7XG5cdFx0XHRcdFx0XHRcdGFGb3JtQ29udGFpbmVycyA9ICgoYmxvY2tDb250cm9sLmdldENvbnRlbnQoKSBhcyBGb3JtQVBJKS5nZXRDb250ZW50KCkgYXMgRm9ybSkuZ2V0Rm9ybUNvbnRhaW5lcnMoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChhRm9ybUNvbnRhaW5lcnMpIHtcblx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBmb3JtQ29udGFpbmVyIG9mIGFGb3JtQ29udGFpbmVycykge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGFGb3JtRWxlbWVudHMgPSBmb3JtQ29udGFpbmVyLmdldEZvcm1FbGVtZW50cygpO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChhRm9ybUVsZW1lbnRzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGZvcm1FbGVtZW50IG9mIGFGb3JtRWxlbWVudHMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgYUZpZWxkcyA9IGZvcm1FbGVtZW50LmdldEZpZWxkcygpIGFzIElucHV0QmFzZVtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBlbXB0eUZpZWxkID0gdGhpcy5nZXRGaXJzdEVtcHR5UmVxdWlyZWRGaWVsZChhRmllbGRzKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGVtcHR5RmllbGQpIHJldHVybiBlbXB0eUZpZWxkO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogVmVyaWZ5IGlmIHRoZSBmaXJzdCBmaWVsZCBpcyBlbXB0eSBhbmQgcmVxdWlyZWQuXG5cdCAqIEBwYXJhbSBmaWVsZHMgVGhlIGZpZWxkcyB0byBjaGVja1xuXHQgKiBAcmV0dXJucyBUaGUgZmlyc3QgZW1wdHkgcmVxdWlyZWQgZmllbGQgb3IgdW5kZWZpbmVkIGlmIG5vIHN1Y2ggZmllbGQgZXhpc3RzXG5cdCAqL1xuXHRnZXRGaXJzdEVtcHR5UmVxdWlyZWRGaWVsZChmaWVsZHM6IElucHV0QmFzZVtdKTogSW5wdXRCYXNlIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoIWZpZWxkcyB8fCBmaWVsZHMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cblx0XHRpZiAoIWZpZWxkc1swXS5nZXRSZXF1aXJlZD8uKCkpIHJldHVybjtcblxuXHRcdGxldCBpc0VtcHR5ID0gZmFsc2U7XG5cblx0XHR0cnkge1xuXHRcdFx0aWYgKGZpZWxkc1swXS5pc0EoXCJzYXAuZmUubWFjcm9zLk11bHRpVmFsdWVGaWVsZFwiKSkge1xuXHRcdFx0XHRjb25zdCBpdGVtcyA9IChmaWVsZHNbMF0gYXMgdW5rbm93biBhcyBNdWx0aVZhbHVlRmllbGRCbG9jaykuZ2V0TXVsdGlWYWx1ZUZpZWxkKCkuZ2V0SXRlbXMoKTtcblx0XHRcdFx0aXNFbXB0eSA9IGl0ZW1zLmxlbmd0aCA9PT0gMDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gKGZpZWxkc1swXSBhcyBJbnB1dEJhc2UpLmdldFZhbHVlKCk7XG5cdFx0XHRcdGlzRW1wdHkgPSAhdmFsdWU7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdExvZy5kZWJ1ZyhgRXJyb3Igd2hlbiBjaGVja2luZyBmaWVsZCBwcm9wZXJ0aWVzOiAke2Vycm9yfWApO1xuXHRcdH1cblxuXHRcdHJldHVybiBpc0VtcHR5ID8gZmllbGRzWzBdIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgaW5pdGlhbCBmb2N1cyBpbiBlZGl0IG1vZGUuXG5cdCAqIEBwYXJhbSBhU3ViU2VjdGlvbnMgT2JqZWN0IHBhZ2Ugc3ViIHNlY3Rpb25zXG5cdCAqL1xuXHRfdXBkYXRlRm9jdXNJbkVkaXRNb2RlKGFTdWJTZWN0aW9uczogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSk6IHZvaWQge1xuXHRcdHNldFRpbWVvdXQoXG5cdFx0XHRmdW5jdGlvbiAodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIpOiB2b2lkIHtcblx0XHRcdFx0Ly8gV2Ugc2V0IHRoZSBmb2N1cyBpbiBhIHRpbWVlb3V0LCBvdGhlcndpc2UgdGhlIGZvY3VzIHNvbWV0aW1lcyBnb2VzIHRvIHRoZSBUYWJCYXJcblx0XHRcdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdFx0XHRjb25zdCBvTWFuZGF0b3J5RmllbGQgPSB0aGlzLl9nZXRGaXJzdEVtcHR5TWFuZGF0b3J5RmllbGRGcm9tU3ViU2VjdGlvbihhU3ViU2VjdGlvbnMpO1xuXHRcdFx0XHRsZXQgb0ZpZWxkVG9Gb2N1cztcblx0XHRcdFx0aWYgKG9NYW5kYXRvcnlGaWVsZCkge1xuXHRcdFx0XHRcdGlmIChvTWFuZGF0b3J5RmllbGQuaXNBKFwic2FwLmZlLm1hY3Jvcy5NdWx0aVZhbHVlRmllbGRcIikpIHtcblx0XHRcdFx0XHRcdG9GaWVsZFRvRm9jdXMgPSAob01hbmRhdG9yeUZpZWxkIGFzIHVua25vd24gYXMgTXVsdGlWYWx1ZUZpZWxkQmxvY2spLmdldE11bHRpVmFsdWVGaWVsZCgpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRvRmllbGRUb0ZvY3VzID0gKFxuXHRcdFx0XHRcdFx0XHRvTWFuZGF0b3J5RmllbGQgYXMgdW5rbm93biBhcyB7IGNvbnRlbnQ6IHsgZ2V0Q29udGVudEVkaXQ6IEZ1bmN0aW9uIH0gfVxuXHRcdFx0XHRcdFx0KS5jb250ZW50LmdldENvbnRlbnRFZGl0KClbMF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG9GaWVsZFRvRm9jdXMgPSB0aGlzLmdldEZpcnN0RWRpdGFibGVJbnB1dCgpID8/IHRoaXMuZ2V0Rmlyc3RDbGlja2FibGVFbGVtZW50KG9PYmplY3RQYWdlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob0ZpZWxkVG9Gb2N1cykge1xuXHRcdFx0XHRcdGNvbnN0IGZvY3VzSW5mbyA9IG9GaWVsZFRvRm9jdXMuZ2V0Rm9jdXNJbmZvKCkgYXMgeyB0YXJnZXRJbmZvOiBvYmplY3QgfTtcblx0XHRcdFx0XHRmb2N1c0luZm8udGFyZ2V0SW5mbyA9IHsgc2lsZW50OiB0cnVlIH07XG5cdFx0XHRcdFx0aWYgKG9GaWVsZFRvRm9jdXMuaXNBKFwic2FwLnVpLm1kYy5maWVsZC5GaWVsZElucHV0XCIpKSB7XG5cdFx0XHRcdFx0XHRvRmllbGRUb0ZvY3VzID0gb0ZpZWxkVG9Gb2N1cy5nZXRQYXJlbnQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0b0ZpZWxkVG9Gb2N1cy5mb2N1cyhmb2N1c0luZm8pO1xuXHRcdFx0XHR9XG5cdFx0XHR9LmJpbmQodGhpcyksXG5cdFx0XHQwIC8vMzAwXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGZpcnN0IHN1Yi1zZWN0aW9uIHdpdGggYSB2aXNpYmlsaXR5IGJvdW5kIHRvIHRoZSBtb2RlbCBvZiB0aGUgdmlldy5cblx0ICogU2VjdGlvbnMgd2l0aCBCaW5kaW5ncyBvbiBpbnRlcm5hbCBtb2RlbHMgb25seSBhcmUgaWdub3JlZC5cblx0ICogQHJldHVybnMgVGhlIHZpc2liaWxpdHkgYmluZGluZyBvZiB0aGUgZmlyc3Qgc3ViLXNlY3Rpb24gb3IgdW5kZWZpbmVkIGlmIG5vdCBmb3VuZC5cblx0ICovXG5cdF9nZXRmaXJzdFN1YlNlY3Rpb25WaXNpYmlsaXR5QmluZGluZygpOiBCaW5kaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBhbGxzdWJTZWN0aW9ucyA9IHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCk7XG5cdFx0Y29uc3QgY3VycmVudE1vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoKTtcblx0XHRyZXR1cm4gYWxsc3ViU2VjdGlvbnNcblx0XHRcdC5maW5kKFxuXHRcdFx0XHQoc3ViU2VjdGlvbikgPT5cblx0XHRcdFx0XHQoc3ViU2VjdGlvbi5nZXRCaW5kaW5nKFwidmlzaWJsZVwiKSBhcyBDb21wb3NpdGVCaW5kaW5nIHwgdW5kZWZpbmVkKVxuXHRcdFx0XHRcdFx0Py5nZXRCaW5kaW5ncz8uKClcblx0XHRcdFx0XHRcdC5zb21lKChiaW5kaW5nKSA9PiBiaW5kaW5nLmdldE1vZGVsKCkgPT09IGN1cnJlbnRNb2RlbClcblx0XHRcdClcblx0XHRcdD8uZ2V0QmluZGluZyhcInZpc2libGVcIik7XG5cdH1cblxuXHRfaGFuZGxlU3ViU2VjdGlvbkVudGVyZWRWaWV3UG9ydChvRXZlbnQ6IFVJNUV2ZW50PHsgc3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24gfT4pOiB2b2lkIHtcblx0XHRjb25zdCBvU3ViU2VjdGlvbiA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJzdWJTZWN0aW9uXCIpO1xuXHRcdGNvbnN0IGJsb2NrcyA9IG9TdWJTZWN0aW9uLmdldEJsb2NrcygpIGFzIFN1YlNlY3Rpb25CbG9ja1tdO1xuXHRcdGJsb2Nrcy5mb3JFYWNoKChibG9jaykgPT4gYmxvY2suc2V0QmluZGluZ0NvbnRleHQodW5kZWZpbmVkKSk7XG5cdFx0b1N1YlNlY3Rpb24uZ2V0TW9yZUJsb2NrcygpLmZvckVhY2goKHN1YkJsb2NrKSA9PiBzdWJCbG9jay5zZXRCaW5kaW5nQ29udGV4dCh1bmRlZmluZWQpKTtcblx0XHRvU3ViU2VjdGlvbi5nZXRBY3Rpb25zKCkuZm9yRWFjaCgoYWN0aW9ucykgPT4gYWN0aW9ucy5zZXRCaW5kaW5nQ29udGV4dCh1bmRlZmluZWQpKTtcblx0fVxuXG5cdF9vbkJhY2tOYXZpZ2F0aW9uSW5EcmFmdChvQ29udGV4dDogT0RhdGFWNENvbnRleHQpOiB2b2lkIHtcblx0XHR0aGlzLm1lc3NhZ2VIYW5kbGVyLnJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcygpO1xuXG5cdFx0Ly8gRnVuY3Rpb24gdG8gbmF2aWdhdGUgYmFjaywgb3IgZGlzcGxheSB0aGUgbGF1bmNocGFkIGlmIHdlJ3JlIG9uIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBoaXN0b3J5XG5cdFx0Y29uc3QgbmF2QmFjayA9ICgpOiB2b2lkID0+IHtcblx0XHRcdGNvbnN0IGN1cnJlbnRVUkwgPSBkb2N1bWVudC5VUkw7XG5cdFx0XHRoaXN0b3J5LmJhY2soKTtcblx0XHRcdC8vIEluIGNhc2UgdGhlcmUgaXMgbm8gcHJldmlvdXMgcGFnZSBpbiB0aGUgaGlzdG9yeSwgaGlzdG9yeS5iYWNrIGRvZXMgbm90aGluZy5cblx0XHRcdC8vIEluIHRoaXMgY2FzZSwgd2UgbmVlZCB0byB1c2UgbmF2aWdhdGVCYWNrRnJvbUNvbnRleHQsIHRoYXQgd2lsbCBkaXNwbGF5IHRoZSBob21lIHBhZ2Vcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRpZiAoZG9jdW1lbnQuVVJMID09PSBjdXJyZW50VVJMKSB7XG5cdFx0XHRcdFx0dGhpcy5fcm91dGluZy5uYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dChvQ29udGV4dCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sIDUwMCk7XG5cdFx0fTtcblxuXHRcdGlmICh0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvdXRlclByb3h5KCkuY2hlY2tJZkJhY2tIYXNTYW1lQ29udGV4dCgpKSB7XG5cdFx0XHQvLyBCYWNrIG5hdiB3aWxsIGtlZXAgdGhlIHNhbWUgY29udGV4dCAtLT4gbm8gbmVlZCB0byBkaXNwbGF5IHRoZSBkaWFsb2dcblx0XHRcdGhpc3RvcnkuYmFjaygpO1xuXHRcdH0gZWxzZSBpZiAoIXRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCkpIHtcblx0XHRcdC8vIFRoaXMgb2JqZWN0IHBhZ2UgZG9lc24ndCBoYXZlIGEgYmluZGluZyBjb250ZXh0LCBidXQgc3RpbGwgaGFuZGxlcyB0aGUgc2hlbGwgYmFjayBuYXZpZ2F0aW9uIC0tPiBwZm9ybSB0aGUgbmF2IGJhY2sgYW5kIHJlbW92ZSB0aGUgbmF2YmFjayBoYW5kbGVyIGFzIGl0IG1ha2VzIG5vIHNlbnNlIGFueSBsb25nZXJcblx0XHRcdHRoaXMuZ2V0QXBwQ29tcG9uZW50KClcblx0XHRcdFx0LmdldFNoZWxsU2VydmljZXMoKVxuXHRcdFx0XHQuc2V0QmFja05hdmlnYXRpb24odW5kZWZpbmVkKVxuXHRcdFx0XHQudGhlbihuYXZCYWNrKVxuXHRcdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRMb2cud2FybmluZyhcIkVycm9yIHdoaWxlIHNldHRpbmcgYmFjayBuYXZpZ2F0aW9uXCIsIGUpO1xuXHRcdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgaGlkZGVuRHJhZnRFbmFibGVkID0gKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk/LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCk/LmdldENhcGFiaWxpdGllcygpPy5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdClcblx0XHRcdFx0Py5lbmFibGVkO1xuXHRcdFx0ZHJhZnQucHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24oXG5cdFx0XHRcdG5hdkJhY2ssXG5cdFx0XHRcdEZ1bmN0aW9uLnByb3RvdHlwZSxcblx0XHRcdFx0b0NvbnRleHQsXG5cdFx0XHRcdHRoaXMsXG5cdFx0XHRcdHRydWUsXG5cdFx0XHRcdGRyYWZ0Lk5hdmlnYXRpb25UeXBlLkJhY2tOYXZpZ2F0aW9uLFxuXHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdGhpZGRlbkRyYWZ0RW5hYmxlZCA/IHRydWUgOiB1bmRlZmluZWRcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRfb25BZnRlckJpbmRpbmcoaW5wdXRCaW5kaW5nQ29udGV4dDogQ29udGV4dCB8IHVuZGVmaW5lZCwgbVBhcmFtZXRlcnM6IEJpbmRpbmdQYXJhbXMgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0XHRjb25zdCB2aWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0Y29uc3Qgdmlld0xldmVsID0gdmlldz8uZ2V0Vmlld0RhdGEoKT8udmlld0xldmVsO1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRjb25zdCBhVGFibGVzID0gdGhpcy5fZmluZFRhYmxlcygpO1xuXG5cdFx0dGhpcy5fc2lkZUVmZmVjdHMuY2xlYXJGaWVsZEdyb3Vwc1ZhbGlkaXR5KCk7XG5cblx0XHQvLyBUT0RPOiB0aGlzIGlzIG9ubHkgYSB0ZW1wIHNvbHV0aW9uIGFzIGxvbmcgYXMgdGhlIG1vZGVsIGZpeCB0aGUgY2FjaGUgaXNzdWUgYW5kIHdlIHVzZSB0aGlzIGFkZGl0aW9uYWxcblx0XHQvLyBiaW5kaW5nIHdpdGggb3duUmVxdWVzdFxuXHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0ID0gb09iamVjdFBhZ2UuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dDtcblxuXHRcdGxldCBhSUJOQWN0aW9uczogVUk1RWxlbWVudFtdID0gW107XG5cdFx0b09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvU2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24pIHtcblx0XHRcdG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1N1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uKSB7XG5cdFx0XHRcdGFJQk5BY3Rpb25zID0gQ29tbW9uVXRpbHMuZ2V0SUJOQWN0aW9ucyhvU3ViU2VjdGlvbiwgYUlCTkFjdGlvbnMpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHQvLyBBc3NpZ24gaW50ZXJuYWwgYmluZGluZyBjb250ZXh0cyB0byBvRm9ybUNvbnRhaW5lcjpcblx0XHQvLyAxLiBJdCBpcyBub3QgcG9zc2libGUgdG8gYXNzaWduIHRoZSBpbnRlcm5hbCBiaW5kaW5nIGNvbnRleHQgdG8gdGhlIFhNTCBmcmFnbWVudFxuXHRcdC8vIChGb3JtQ29udGFpbmVyLmZyYWdtZW50LnhtbCkgeWV0IC0gaXQgaXMgdXNlZCBhbHJlYWR5IGZvciB0aGUgZGF0YS1zdHJ1Y3R1cmUuXG5cdFx0Ly8gMi4gQW5vdGhlciBwcm9ibGVtIGlzLCB0aGF0IEZvcm1Db250YWluZXJzIGFzc2lnbmVkIHRvIGEgJ01vcmVCbG9jaycgZG9lcyBub3QgaGF2ZSBhblxuXHRcdC8vIGludGVybmFsIG1vZGVsIGNvbnRleHQgYXQgYWxsLlxuXG5cdFx0YVRhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uIChvVGFibGU6IFRhYmxlKSB7XG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRcdGlmIChvSW50ZXJuYWxNb2RlbENvbnRleHQpIHtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3JlYXRpb25Sb3dGaWVsZFZhbGlkaXR5XCIsIHt9KTtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3JlYXRpb25Sb3dDdXN0b21WYWxpZGl0eVwiLCB7fSk7XG5cblx0XHRcdFx0YUlCTkFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9UYWJsZSwgYUlCTkFjdGlvbnMpO1xuXG5cdFx0XHRcdC8vIHRlbXBvcmFyeSB3b3JrYXJvdW5kIGZvciBCQ1A6IDIwODAyMTgwMDRcblx0XHRcdFx0Ly8gTmVlZCB0byBmaXggd2l0aCBCTEk6IEZJT1JJVEVDSFAxLTE1Mjc0XG5cdFx0XHRcdC8vIG9ubHkgZm9yIGVkaXQgbW9kZSwgd2UgY2xlYXIgdGhlIHRhYmxlIGNhY2hlXG5cdFx0XHRcdC8vIFdvcmthcm91bmQgc3RhcnRzIGhlcmUhIVxuXHRcdFx0XHRjb25zdCBvVGFibGVSb3dCaW5kaW5nID0gb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRcdFx0aWYgKG9UYWJsZVJvd0JpbmRpbmcpIHtcblx0XHRcdFx0XHRpZiAoTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKG9UYWJsZVJvd0JpbmRpbmcuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSkpIHtcblx0XHRcdFx0XHRcdC8vIGFwcGx5IGZvciBib3RoIGVkaXQgYW5kIGRpc3BsYXkgbW9kZSBpbiBzdGlja3lcblx0XHRcdFx0XHRcdChvVGFibGVSb3dCaW5kaW5nIGFzIHVua25vd24gYXMgeyByZW1vdmVDYWNoZXNBbmRNZXNzYWdlczogRnVuY3Rpb24gfSkucmVtb3ZlQ2FjaGVzQW5kTWVzc2FnZXMoXCJcIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIFdvcmthcm91bmQgZW5kcyBoZXJlISFcblxuXHRcdFx0XHQvLyBDbGVhciB0aGUgc2VsZWN0aW9uIGluIHRoZSB0YWJsZSBhbmQgdXBkYXRlIGFjdGlvbiBlbmFibGVtZW50IGFjY29yZGluZ2x5XG5cdFx0XHRcdC8vIFdpbGwgdG8gYmUgZml4ZWQgd2l0aCBCTEk6IEZJT1JJVEVDSFAxLTI0MzE4XG5cdFx0XHRcdGNvbnN0IHRhYmxlQVBJID0gb1RhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdFx0XHRjb25zdCBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gdGFibGVBUEkgPyBKU09OLnBhcnNlKHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5vcGVyYXRpb25BdmFpbGFibGVNYXApIDoge307XG5cblx0XHRcdFx0QWN0aW9uUnVudGltZS5zZXRBY3Rpb25FbmFibGVtZW50KG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCwgW10sIFwidGFibGVcIik7XG5cblx0XHRcdFx0b1RhYmxlLmNsZWFyU2VsZWN0aW9uKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0Ly9SZXRyaWV2ZSBPYmplY3QgUGFnZSBoZWFkZXIgYWN0aW9ucyBmcm9tIE9iamVjdCBQYWdlIHRpdGxlIGNvbnRyb2xcblx0XHRjb25zdCBvT2JqZWN0UGFnZVRpdGxlID0gb09iamVjdFBhZ2UuZ2V0SGVhZGVyVGl0bGUoKSBhcyBPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlO1xuXHRcdGxldCBhSUJOSGVhZGVyQWN0aW9uczogVUk1RWxlbWVudFtdID0gW107XG5cdFx0YUlCTkhlYWRlckFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9PYmplY3RQYWdlVGl0bGUsIGFJQk5IZWFkZXJBY3Rpb25zKTtcblx0XHRhSUJOQWN0aW9ucyA9IGFJQk5BY3Rpb25zLmNvbmNhdChhSUJOSGVhZGVyQWN0aW9ucyk7XG5cdFx0Q29tbW9uVXRpbHMudXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkoYUlCTkFjdGlvbnMsIHRoaXMuZ2V0VmlldygpKTtcblxuXHRcdGxldCBvTW9kZWw6IE9EYXRhTW9kZWwsXG5cdFx0XHRvRmluYWxVSVN0YXRlOiBQcm9taXNlPHVua25vd24+ID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cblx0XHQvLyB0aGlzIHNob3VsZCBub3QgYmUgbmVlZGVkIGF0IHRoZSBhbGxcblx0XHQvKipcblx0XHQgKiBAcGFyYW0gb1RhYmxlXG5cdFx0ICovXG5cdFx0Y29uc3QgaGFuZGxlVGFibGVNb2RpZmljYXRpb25zID0gKG9UYWJsZTogVGFibGUpOiB2b2lkID0+IHtcblx0XHRcdGNvbnN0IG9CaW5kaW5nID0gdGhpcy5fZ2V0VGFibGVCaW5kaW5nKG9UYWJsZSksXG5cdFx0XHRcdGZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cyA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0XHRUYWJsZUhlbHBlci5lbmFibGVGYXN0Q3JlYXRpb25Sb3coXG5cdFx0XHRcdFx0XHRvVGFibGUuZ2V0Q3JlYXRpb25Sb3coKSxcblx0XHRcdFx0XHRcdG9CaW5kaW5nLmdldFBhdGgoKSxcblx0XHRcdFx0XHRcdG9CaW5kaW5nLmdldENvbnRleHQoKSxcblx0XHRcdFx0XHRcdG9Nb2RlbCxcblx0XHRcdFx0XHRcdG9GaW5hbFVJU3RhdGVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRpZiAoIW9CaW5kaW5nKSB7XG5cdFx0XHRcdExvZy5lcnJvcihgRXhwZWN0ZWQgYmluZGluZyBtaXNzaW5nIGZvciB0YWJsZTogJHtvVGFibGUuZ2V0SWQoKX1gKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAob0JpbmRpbmcuZ2V0Q29udGV4dCgpKSB7XG5cdFx0XHRcdGZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgZm5IYW5kbGVDaGFuZ2UgPSBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRcdFx0aWYgKG9CaW5kaW5nLmdldENvbnRleHQoKSkge1xuXHRcdFx0XHRcdFx0Zm5IYW5kbGVUYWJsZVBhdGNoRXZlbnRzKCk7XG5cdFx0XHRcdFx0XHRvQmluZGluZy5kZXRhY2hDaGFuZ2UoZm5IYW5kbGVDaGFuZ2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdFx0b0JpbmRpbmcuYXR0YWNoQ2hhbmdlKGZuSGFuZGxlQ2hhbmdlKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0aWYgKGJpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRvTW9kZWwgPSBiaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpO1xuXG5cdFx0XHQvLyBDb21wdXRlIEVkaXQgTW9kZVxuXHRcdFx0b0ZpbmFsVUlTdGF0ZSA9IHRoaXMuZWRpdEZsb3cuY29tcHV0ZU1vZGVsc0ZvckVkaXRNb2RlKGJpbmRpbmdDb250ZXh0KTtcblxuXHRcdFx0Ly8gdXBkYXRlIHJlbGF0ZWQgYXBwc1xuXHRcdFx0dGhpcy5fdXBkYXRlUmVsYXRlZEFwcHMoKTtcblxuXHRcdFx0Ly9BdHRhY2ggdGhlIHBhdGNoIHNlbnQgYW5kIHBhdGNoIGNvbXBsZXRlZCBldmVudCB0byB0aGUgb2JqZWN0IHBhZ2UgYmluZGluZyBzbyB0aGF0IHdlIGNhbiByZWFjdFxuXHRcdFx0Y29uc3Qgb0JpbmRpbmcgPSAoYmluZGluZ0NvbnRleHQuZ2V0QmluZGluZyAmJiBiaW5kaW5nQ29udGV4dC5nZXRCaW5kaW5nKCkpIHx8IGJpbmRpbmdDb250ZXh0O1xuXG5cdFx0XHQvLyBBdHRhY2ggdGhlIGV2ZW50IGhhbmRsZXIgb25seSBvbmNlIHRvIHRoZSBzYW1lIGJpbmRpbmdcblx0XHRcdGlmICh0aGlzLmN1cnJlbnRCaW5kaW5nICE9PSBvQmluZGluZykge1xuXHRcdFx0XHRvQmluZGluZy5hdHRhY2hFdmVudChcInBhdGNoU2VudFwiLCB7fSwgdGhpcy5lZGl0Rmxvdy5oYW5kbGVQYXRjaFNlbnQsIHRoaXMpO1xuXHRcdFx0XHR0aGlzLmN1cnJlbnRCaW5kaW5nID0gb0JpbmRpbmc7XG5cdFx0XHR9XG5cblx0XHRcdGFUYWJsZXMuZm9yRWFjaChmdW5jdGlvbiAob1RhYmxlOiBUYWJsZSk6IHZvaWQge1xuXHRcdFx0XHQvLyBhY2Nlc3MgYmluZGluZyBvbmx5IGFmdGVyIHRhYmxlIGlzIGJvdW5kXG5cdFx0XHRcdFRhYmxlVXRpbHMud2hlbkJvdW5kKG9UYWJsZSlcblx0XHRcdFx0XHQudGhlbihoYW5kbGVUYWJsZU1vZGlmaWNhdGlvbnMpXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSB0YWJsZSB0byBiZSBib3VuZFwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYWZ0ZXIgYmluZGluZyBpcyByZWFkeSBoZW5jZSBjYWxsaW5nIGl0IGluIG9uQWZ0ZXJCaW5kaW5nXG5cdFx0XHQob09iamVjdFBhZ2UgYXMgdW5rbm93biBhcyB7IF90cmlnZ2VyVmlzaWJsZVN1YlNlY3Rpb25zRXZlbnRzOiBGdW5jdGlvbiB9KS5fdHJpZ2dlclZpc2libGVTdWJTZWN0aW9uc0V2ZW50cygpO1xuXG5cdFx0XHQvL1RvIENvbXB1dGUgdGhlIEVkaXQgQmluZGluZyBvZiB0aGUgc3ViT2JqZWN0IHBhZ2UgdXNpbmcgcm9vdCBvYmplY3QgcGFnZSwgY3JlYXRlIGEgY29udGV4dCBmb3IgZHJhZnQgcm9vdCBhbmQgdXBkYXRlIHRoZSBlZGl0IGJ1dHRvbiBpbiBzdWIgT1AgdXNpbmcgdGhlIGNvbnRleHRcblx0XHRcdEFjdGlvblJ1bnRpbWUudXBkYXRlRWRpdEJ1dHRvblZpc2liaWxpdHlBbmRFbmFibGVtZW50KHRoaXMuZ2V0VmlldygpKTtcblxuXHRcdFx0dGhpcy5fdXBkYXRlQXZhaWxhYmxlQ2FyZHMoW10pO1xuXHRcdH1cblx0XHQvLyB3ZSBhcmUgY2xlYXJpbmcgYW55IHByZXZpb3VzIGRhdGEgZnJvbSByZWNvbW1lbmRhdGlvbnMgZXZlcnkgdGltZSB3ZSBjb21lIHRvIG5ldyBPUFxuXHRcdC8vIHNvIHRoYXQgY2FjaGVkIHJlY29tbWVuZGF0aW9ucyBhcmUgbm90IHNob3duIHRvIHVzZXJcblx0XHRpZiAodmlld0xldmVsICYmIHZpZXdMZXZlbCA9PT0gMSkge1xuXHRcdFx0b0ZpbmFsVUlTdGF0ZT8udGhlbigoKSA9PiB7XG5cdFx0XHRcdHRoaXMucmVjb21tZW5kYXRpb25zLmNsZWFyUmVjb21tZW5kYXRpb25zKCk7XG5cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHRoaXMuZGlzcGxheUNvbGxhYm9yYXRpb25NZXNzYWdlKG1QYXJhbWV0ZXJzPy5yZWRpcmVjdGVkVG9Ob25EcmFmdCk7XG5cdFx0dGhpcy5fc2V0T1BNZXNzYWdlU3RyaXBJbnRlcm5hbENvbnRleHQoKTtcblxuXHRcdGNvbnN0IGFwcGx5QXBwU3RhdGUgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldEFwcFN0YXRlSGFuZGxlcigpLmFwcGx5QXBwU3RhdGUodmlldyk7XG5cdFx0dGhpcy5wYWdlUmVhZHkud2FpdEZvcihhcHBseUFwcFN0YXRlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGUgdGhlIGNhcmRzIHdoZW4gdGhlIGJpbmRpbmcgaXMgcmVmcmVzaGVkLlxuXHQgKiBAcGFyYW0gY2FyZHMgQXJyYXkgb2YgY2FyZHMgdG8gYmUgdXBkYXRlZFxuXHQgKi9cblx0YXN5bmMgX3VwZGF0ZUF2YWlsYWJsZUNhcmRzKGNhcmRzOiBXcmFwcGVkQ2FyZFtdKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0YXdhaXQgdGhpcy5jb2xsYWJvcmF0aW9uTWFuYWdlci5jb2xsZWN0QXZhaWxhYmxlQ2FyZHMoY2FyZHMpO1xuXHRcdGlmIChjYXJkcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRjb25zdCBjYXJkT2JqZWN0ID0gdGhpcy5jb2xsYWJvcmF0aW9uTWFuYWdlci51cGRhdGVDYXJkcyhjYXJkcyk7XG5cdFx0XHRjb25zdCBwYXJlbnRBcHBJZCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0SWQoKTtcblx0XHRcdHRoaXMuZ2V0QXBwQ29tcG9uZW50KClcblx0XHRcdFx0LmdldENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSgpXG5cdFx0XHRcdC5hZGRDYXJkc1RvQ29sbGFib3JhdGlvbk1hbmFnZXIoY2FyZE9iamVjdCwgcGFyZW50QXBwSWQsIHRoaXMuZ2V0VmlldygpLmdldElkKCkpO1xuXHRcdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRDb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2UoKS5zaGFyZUF2YWlsYWJsZUNhcmRzKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgaW50ZXJuYWwgYmluZGluZyBjb250ZXh0IG9mIHRoZSBNZXNzYWdlc3RyaXAgT1AuXG5cdCAqL1xuXHRfc2V0T1BNZXNzYWdlU3RyaXBJbnRlcm5hbENvbnRleHQoKTogdm9pZCB7XG5cdFx0Y29uc3QgdmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsQ29udGV4dCA9IHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJNZXNzYWdlU3RyaXBcIiwgeyAuLi5pbnRlcm5hbE1vZGVsQ29udGV4dD8uZ2V0UHJvcGVydHkoXCJNZXNzYWdlU3RyaXBcIikgfSk7XG5cdFx0aWYgKGludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0XHQob09iamVjdFBhZ2UuZ2V0SGVhZGVyVGl0bGUoKSBhcyB1bmtub3duIGFzIENvbnRyb2wpXG5cdFx0XHRcdD8uZmluZEVsZW1lbnRzKHRydWUsIChlbGVtOiBDb250cm9sKSA9PiBlbGVtLmlzQShcInNhcC5tLk1lc3NhZ2VTdHJpcFwiKSlcblx0XHRcdFx0LmZvckVhY2goKG1lc3NhZ2VTdHJpcDogVUk1RWxlbWVudCkgPT4ge1xuXHRcdFx0XHRcdG1lc3NhZ2VTdHJpcC5zZXRCaW5kaW5nQ29udGV4dChcblx0XHRcdFx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0XG5cdFx0XHRcdFx0XHRcdC5nZXRNb2RlbCgpXG5cdFx0XHRcdFx0XHRcdC5iaW5kQ29udGV4dCh0aGlzLmdldEV4dGVuc2lvbkFQSSgpLl9nZXRNZXNzYWdlU3RyaXBCaW5kaW5nQ29udGV4dFBhdGgoKSlcblx0XHRcdFx0XHRcdFx0LmdldEJvdW5kQ29udGV4dCgpISxcblx0XHRcdFx0XHRcdFwiaW50ZXJuYWxcIlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0Ly8gSWYgdGhlIHZpZXcncyBiaW5kaW5nIGNvbnRleHQgYWxyZWFkeSBoYWQgbWVzc2FnZXMgdGhhdCB3ZXJlIG5vdCBjbGVhcmVkLCB3ZSB3b3VsZCBuZWVkIHRvIHJlLWV2YWx1YXRlIHRvIHNob3cgdGhlIG1lc3NhZ2Ugc3RyaXAuXG5cdFx0XHR0aGlzLl9mblNob3dPUE1lc3NhZ2UoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2hvdyBhIG1lc3NhZ2Ugc3RyaXAgaWYgYSByZWRpcmVjdGlvbiB0byBhIG5vbi1kcmFmdCBlbGVtZW50IGhhcyBiZWVuIGRvbmUuXG5cdCAqIFJlbW92ZSB0aGUgbWVzc2FnZSBzdHJpcCBpbiBjYXNlIHdlIG5hdmlnYXRlIHRvIGFub3RoZXIgb2JqZWN0IHBhZ2UuXG5cdCAqIEBwYXJhbSBlbnRpdHlOYW1lIE5hbWUgb2YgdGhlIEVudGl0eSB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIG1lc3NhZ2Vcblx0ICovXG5cdGRpc3BsYXlDb2xsYWJvcmF0aW9uTWVzc2FnZShlbnRpdHlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0XHRjb25zdCByZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSE7XG5cblx0XHRpZiAodGhpcy5jb2xsYWJvcmF0aW9uTWVzc2FnZSkge1xuXHRcdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKFt0aGlzLmNvbGxhYm9yYXRpb25NZXNzYWdlXSk7XG5cdFx0XHRkZWxldGUgdGhpcy5jb2xsYWJvcmF0aW9uTWVzc2FnZTtcblx0XHR9XG5cblx0XHRpZiAoZW50aXR5TmFtZSkge1xuXHRcdFx0dGhpcy5jb2xsYWJvcmF0aW9uTWVzc2FnZSA9IG5ldyBNZXNzYWdlKHtcblx0XHRcdFx0bWVzc2FnZTogcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIlJFUk9VVEVEX05BVklHQVRJT05fVE9fU0FWRURfVkVSU0lPTlwiLCBbZW50aXR5TmFtZV0pLFxuXHRcdFx0XHR0eXBlOiBNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbixcblx0XHRcdFx0dGFyZ2V0OiB0aGlzLmdldFZpZXcoKT8uZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpXG5cdFx0XHR9KTtcblx0XHRcdE1lc3NhZ2luZy5hZGRNZXNzYWdlcyhbdGhpcy5jb2xsYWJvcmF0aW9uTWVzc2FnZV0pO1xuXHRcdH1cblx0fVxuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0YXN5bmMgb25QYWdlUmVhZHkobVBhcmFtZXRlcnM6IHsgZm9yY2VGb2N1czogYm9vbGVhbiB9IHwgdW5kZWZpbmVkKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qgc2V0Rm9jdXMgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHQvLyBTZXQgdGhlIGZvY3VzIHRvIHRoZSBmaXJzdCBhY3Rpb24gYnV0dG9uLCBvciB0byB0aGUgZmlyc3QgZWRpdGFibGUgaW5wdXQgaWYgaW4gZWRpdGFibGUgbW9kZVxuXHRcdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdFx0Y29uc3QgaXNJbkRpc3BsYXlNb2RlID0gIUNvbW1vblV0aWxzLmdldElzRWRpdGFibGUodGhpcy5nZXRWaWV3KCkpO1xuXG5cdFx0XHRpZiAoaXNJbkRpc3BsYXlNb2RlKSB7XG5cdFx0XHRcdGNvbnN0IG9GaXJzdENsaWNrYWJsZUVsZW1lbnQgPSB0aGlzLmdldEZpcnN0Q2xpY2thYmxlRWxlbWVudChvT2JqZWN0UGFnZSk7XG5cdFx0XHRcdGlmIChvRmlyc3RDbGlja2FibGVFbGVtZW50KSB7XG5cdFx0XHRcdFx0b0ZpcnN0Q2xpY2thYmxlRWxlbWVudC5mb2N1cygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBvU2VsZWN0ZWRTZWN0aW9uID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChvT2JqZWN0UGFnZS5nZXRTZWxlY3RlZFNlY3Rpb24oKSkgYXMgT2JqZWN0UGFnZVNlY3Rpb24gfCB1bmRlZmluZWQ7XG5cdFx0XHRcdGlmIChvU2VsZWN0ZWRTZWN0aW9uKSB7XG5cdFx0XHRcdFx0dGhpcy5fdXBkYXRlRm9jdXNJbkVkaXRNb2RlKG9TZWxlY3RlZFNlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHRcdGNvbnN0IGN0eHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdC8vIHNldHRpbmcgdGhpcyBtb2RlbCBkYXRhIHRvIGJlIHVzZWQgZm9yIHJlY29tbWVuZGF0aW9ucyBiaW5kaW5nXG5cdFx0dGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKS5zZXRQcm9wZXJ0eShcIi9jdXJyZW50Q3R4dFwiLCBjdHh0KTtcblxuXHRcdC8vIEFwcGx5IGFwcCBzdGF0ZSBvbmx5IGFmdGVyIHRoZSBwYWdlIGlzIHJlYWR5IHdpdGggdGhlIGZpcnN0IHNlY3Rpb24gc2VsZWN0ZWRcblx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHQvL1Nob3cgcG9wdXAgd2hpbGUgbmF2aWdhdGluZyBiYWNrIGZyb20gb2JqZWN0IHBhZ2UgaW4gY2FzZSBvZiBkcmFmdFxuXHRcdGlmIChvQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdGNvbnN0IGJJc1N0aWNreU1vZGUgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQob0JpbmRpbmdDb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdFx0aWYgKCFiSXNTdGlja3lNb2RlKSB7XG5cdFx0XHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQob1ZpZXcpO1xuXHRcdFx0XHRhd2FpdCBvQXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKS5zZXRCYWNrTmF2aWdhdGlvbigoKSA9PiB0aGlzLl9vbkJhY2tOYXZpZ2F0aW9uSW5EcmFmdChvQmluZGluZ0NvbnRleHQpKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gZG8gbm90IHJlcXVlc3QgcmVjb21tZW5kYXRpb25zIGFjdGlvbiBpZiB3ZSBhcmUgaW4gRGlzcGxheSBtb2RlXG5cdFx0Y29uc3QgaXNFZGl0YWJsZSA9IENvbW1vblV0aWxzLmdldElzRWRpdGFibGUodGhpcy5nZXRWaWV3KCkpO1xuXHRcdGlmIChpc0VkaXRhYmxlICYmIG9CaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0YXdhaXQgdGhpcy5yZWNvbW1lbmRhdGlvbnMuZmV0Y2hBbmRBcHBseVJlY29tbWVuZGF0aW9ucyhbeyBjb250ZXh0OiBvQmluZGluZ0NvbnRleHQgfV0pO1xuXHRcdH1cblxuXHRcdGlmIChtUGFyYW1ldGVycz8uZm9yY2VGb2N1cykge1xuXHRcdFx0c2V0Rm9jdXMoKTtcblx0XHR9XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZXJyb3JOYXZpZ2F0aW9uU2VjdGlvbkZsYWdcIiwgZmFsc2UpO1xuXHRcdHRoaXMuX2NoZWNrRGF0YVBvaW50VGl0bGVGb3JFeHRlcm5hbE5hdmlnYXRpb24oKTtcblxuXHRcdC8vVGhlIGZvbGxvd2luZyBjb2RpbmcgaXMgZG9uZSB0byBtZXJnZSBhbiBvcGVuIFBBVENIIGFuZCB0aGUgZHJhZnRwcmVwYXJlL2RyYWZ0YWN0aXZhdGVcblx0XHQvL3JlcXVlc3QgaW50byBvbmUgJGJhdGNoIHJlcXVlc3Rcblx0XHQvL1RvIGFjaGlldmUgdGhpcyB0aGUgJGF1dG8gcXVldWUgaXMgbG9ja2VkIGF0IHRoZSBtb3VzZWRvd24gZXZlbnQgKGJlZm9yZSBmb2N1c291dCkgaW5cblx0XHQvL29yZGVyIHRvIHdhaXQgZm9yIHRoZSBkcmFmdCByZXF1ZXN0IGlzc3VlZCBpbiB0aGUgc2F2ZSBidXR0b25zIHByZXNzIGV2ZW50IGhhbmRsZXIuXG5cdFx0Ly9UaGUgcXVldWUgaXMgcmVsZWFzZWQgYWdhaW4gZHVyaW5nIG1vdXNldXAgKGJlZm9yZSBwcmVzcykuXG5cdFx0Ly9UaGlzIGlzIG9ubHkgcG9zc2libGUgb24gbm9uIHRvdWNoIGRldmljZXMgYmVjYXVzZSBvbiB0b3VjaCBkZXZpY2VzIHRoZSBmb2N1c291dCBhbmQgcHJlc3Ncblx0XHQvL2V2ZW50cyBhcmUgYm90aCBpbml0aWF0ZWQgYXQgdG91Y2hlbmQgYnkgc2FwLm0uQnV0dG9uLlxuXHRcdC8vbW91c2VIYW5kbGVyU2V0IGlzIHVzZWQgdG8gZW5zdXJlcyB0aGF0IHRoZSBldmVudCBoYW5kbGVycyBhcmUgYXR0YWNoZWQgb25seSBvbmUgdGltZS5cblx0XHQvL1RoZXJlIGNhbiBiZSBtdWx0aXBsZSBvblBhZ2VSZWFkeSBlLmcuIHdoZW4gc3dpdGNoaW5nIGJldHdlZW4gZWRpdC9kaXNwbGF5IG1vZGVcblx0XHRpZiAoIXRoaXMubWVyZ2VQYXRjaERyYWZ0ICYmICFEZXZpY2Uuc3VwcG9ydC50b3VjaCkge1xuXHRcdFx0Y29uc3Qgc2F2ZUJ1dHRvbiA9IG9WaWV3LmJ5SWQoXCJmZTo6Rm9vdGVyQmFyOjpTdGFuZGFyZEFjdGlvbjo6U2F2ZVwiKSBhcyBCdXR0b247XG5cdFx0XHRjb25zdCBhdXRvUXVldWVVbmxvY2sgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLmF1dG9RdWV1ZUxvY2s/LmlzTG9ja2VkKCkpIHtcblx0XHRcdFx0XHR0aGlzLmF1dG9RdWV1ZUxvY2sudW5sb2NrKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0c2F2ZUJ1dHRvbi5kZXRhY2hCcm93c2VyRXZlbnQoXCJtb3VzZXVwXCIsIGF1dG9RdWV1ZVVubG9jayk7XG5cdFx0XHRcdHNhdmVCdXR0b24uZGV0YWNoQnJvd3NlckV2ZW50KFwiYmx1clwiLCBhdXRvUXVldWVVbmxvY2spO1xuXHRcdFx0fTtcblxuXHRcdFx0c2F2ZUJ1dHRvbj8uYXR0YWNoQnJvd3NlckV2ZW50KFwibW91c2Vkb3duXCIsICgpOiB2b2lkID0+IHtcblx0XHRcdFx0aWYgKCF0aGlzLmF1dG9RdWV1ZUxvY2s/LmlzTG9ja2VkKCkpIHtcblx0XHRcdFx0XHR0aGlzLmF1dG9RdWV1ZUxvY2sgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbCgpLmxvY2soXCIkYXV0b1wiKTtcblx0XHRcdFx0XHQvL3doZW4gdGhlIG1vdXNlIGlzIGRyYWdnZWQgYXdheSBmcm9tIHRoZSBzYXZlIGJ1dHRvbiB3aGlsZSBwcmVzc2VkIHRoZW4gdGhlcmUgd2lsbCBiZSBub1xuXHRcdFx0XHRcdC8vbW91c2V1cCBldmVudCBvbiB0aGUgc2F2ZSBidXR0b24uIFRoZXJlZm9yZSwgdGhlIHVubG9ja2luZyBpcyBkb25lIG9uIFwibW91c2V1cFwiIGFuZCBcImJsdXJcIlxuXHRcdFx0XHRcdHNhdmVCdXR0b24uYXR0YWNoQnJvd3NlckV2ZW50KFwibW91c2V1cFwiLCBhdXRvUXVldWVVbmxvY2spO1xuXHRcdFx0XHRcdHNhdmVCdXR0b24uYXR0YWNoQnJvd3NlckV2ZW50KFwiYmx1clwiLCBhdXRvUXVldWVVbmxvY2spO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5tZXJnZVBhdGNoRHJhZnQgPSB0cnVlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHN0YXR1cyBvZiBlZGl0IG1vZGUgZm9yIHN0aWNreSBzZXNzaW9uLlxuXHQgKiBAcmV0dXJucyBUaGUgc3RhdHVzIG9mIGVkaXQgbW9kZSBmb3Igc3RpY2t5IHNlc3Npb25cblx0ICovXG5cdGdldFN0aWNreUVkaXRNb2RlKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0ICYmIHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0bGV0IGJJc1N0aWNreUVkaXRNb2RlID0gZmFsc2U7XG5cdFx0aWYgKG9CaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0Y29uc3QgYklzU3RpY2t5TW9kZSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChvQmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0XHRpZiAoYklzU3RpY2t5TW9kZSkge1xuXHRcdFx0XHRiSXNTdGlja3lFZGl0TW9kZSA9IENvbW1vblV0aWxzLmdldElzRWRpdGFibGUodGhpcy5nZXRWaWV3KCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gYklzU3RpY2t5RWRpdE1vZGU7XG5cdH1cblxuXHRfZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTogT2JqZWN0UGFnZUxheW91dCB7XG5cdFx0cmV0dXJuIHRoaXMuYnlJZChcImZlOjpPYmplY3RQYWdlXCIpIGFzIE9iamVjdFBhZ2VMYXlvdXQ7XG5cdH1cblxuXHRhc3luYyBfZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24oKTogUHJvbWlzZTx7IHRpdGxlOiBzdHJpbmc7IHN1YnRpdGxlOiBzdHJpbmc7IGludGVudDogc3RyaW5nOyBpY29uOiBzdHJpbmc7IGRlc2NyaXB0aW9uOiBzdHJpbmcgfT4ge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRjb25zdCBvT2JqZWN0UGFnZVN1YnRpdGxlID0gb09iamVjdFBhZ2UuZ2V0Q3VzdG9tRGF0YSgpLmZpbmQoZnVuY3Rpb24gKG9DdXN0b21EYXRhKSB7XG5cdFx0XHRyZXR1cm4gb0N1c3RvbURhdGEuZ2V0S2V5KCkgPT09IFwiT2JqZWN0UGFnZVN1YnRpdGxlXCI7XG5cdFx0fSk7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2VEZXNjcmlwdGlvbiA9IG9PYmplY3RQYWdlLmdldEN1c3RvbURhdGEoKS5maW5kKGZ1bmN0aW9uIChvQ3VzdG9tRGF0YSkge1xuXHRcdFx0cmV0dXJuIG9DdXN0b21EYXRhLmdldEtleSgpID09PSBcIk9iamVjdFBhZ2VEZXNjcmlwdGlvblwiO1xuXHRcdH0pO1xuXHRcdGNvbnN0IGV4dHJhY3RQYXRocyA9IChiaW5kaW5nSW5mbz86IHsgcGFydHM/OiB7IHBhdGg/OiBzdHJpbmc7IG1vZGVsPzogc3RyaW5nIH1bXSB9KTogc3RyaW5nW10gPT5cblx0XHRcdEFycmF5LmZyb20oXG5cdFx0XHRcdG5ldyBTZXQoXG5cdFx0XHRcdFx0KGJpbmRpbmdJbmZvPy5wYXJ0cyB8fCBbXSlcblx0XHRcdFx0XHRcdC5maWx0ZXIoKHBhcnQpID0+ICFwYXJ0Lm1vZGVsKVxuXHRcdFx0XHRcdFx0Lm1hcCgocGFydCkgPT4gcGFydC5wYXRoIHx8IFwiXCIpXG5cdFx0XHRcdFx0XHQuZmlsdGVyKEJvb2xlYW4pXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0Y29uc3Qgc3VidGl0bGVQYXRocyA9IGV4dHJhY3RQYXRocyhvT2JqZWN0UGFnZVN1YnRpdGxlPy5nZXRCaW5kaW5nSW5mbyhcInZhbHVlXCIpKTtcblx0XHRjb25zdCBkZXNjcmlwdGlvblBhdGhzID0gZXh0cmFjdFBhdGhzKG9PYmplY3RQYWdlRGVzY3JpcHRpb24/LmdldEJpbmRpbmdJbmZvKFwidmFsdWVcIikpO1xuXHRcdGNvbnN0IHBhdGhzVG9SZXNvbHZlID0gWy4uLnN1YnRpdGxlUGF0aHMsIC4uLmRlc2NyaXB0aW9uUGF0aHNdO1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0Y29uc3Qgcm9vdFZpZXdDb250cm9sbGVyID0gYXBwQ29tcG9uZW50LmdldFJvb3RWaWV3Q29udHJvbGxlcigpO1xuXHRcdGNvbnN0IGZuQ2xlYXJDYWNoZVRpdGxlID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0cm9vdFZpZXdDb250cm9sbGVyLmludmFsaWRhdGVUaXRsZUhpZXJhcmNoeUNhY2hlKG9PYmplY3RQYWdlLmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKSBhcyBzdHJpbmcpO1xuXHRcdH07XG5cdFx0aWYgKChvT2JqZWN0UGFnZURlc2NyaXB0aW9uIHx8IG9PYmplY3RQYWdlU3VidGl0bGUpICYmICF0aGlzLmludmFsaWRhdGVUaXRsZUhpZXJhcmNoeUNhY2hlU2V0VXApIHtcblx0XHRcdG9PYmplY3RQYWdlU3VidGl0bGU/LmdldEJpbmRpbmcoXCJ2YWx1ZVwiKT8uYXR0YWNoQ2hhbmdlKGZuQ2xlYXJDYWNoZVRpdGxlLCB0aGlzKTtcblx0XHRcdG9PYmplY3RQYWdlRGVzY3JpcHRpb24/LmdldEJpbmRpbmcoXCJ2YWx1ZVwiKT8uYXR0YWNoQ2hhbmdlKGZuQ2xlYXJDYWNoZVRpdGxlLCB0aGlzKTtcblx0XHRcdHRoaXMuaW52YWxpZGF0ZVRpdGxlSGllcmFyY2h5Q2FjaGVTZXRVcCA9IHRydWU7XG5cdFx0fVxuXHRcdGNvbnN0IG9PYmplY3RQYWdlQ29udGV4dCA9IG9PYmplY3RQYWdlLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0Y29uc3QgYnVpbGQgPSAoKTogeyB0aXRsZTogc3RyaW5nOyBzdWJ0aXRsZTogc3RyaW5nOyBpbnRlbnQ6IHN0cmluZzsgaWNvbjogc3RyaW5nOyBkZXNjcmlwdGlvbjogc3RyaW5nIH0gPT4gKHtcblx0XHRcdHRpdGxlOiBvT2JqZWN0UGFnZS5kYXRhKFwiT2JqZWN0UGFnZVRpdGxlXCIpID8/IFwiXCIsXG5cdFx0XHRzdWJ0aXRsZTogb09iamVjdFBhZ2VTdWJ0aXRsZT8uZ2V0VmFsdWUoKSA/PyBcIlwiLFxuXHRcdFx0aW50ZW50OiBcIlwiLFxuXHRcdFx0aWNvbjogXCJcIixcblx0XHRcdGRlc2NyaXB0aW9uOiBvT2JqZWN0UGFnZURlc2NyaXB0aW9uPy5nZXRWYWx1ZSgpID8/IFwiXCJcblx0XHR9KTtcblx0XHQvL2lmIG5vIGNvbnRleHQgb3Igbm90aGluZyB0byByZXNvbHZlLCBkaXJlY3QgcmV0dXJuXG5cdFx0aWYgKCFvT2JqZWN0UGFnZUNvbnRleHQgfHwgcGF0aHNUb1Jlc29sdmUubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGJ1aWxkKCkpO1xuXHRcdH1cblx0XHRhd2FpdCBQcm9taXNlLmFsbChwYXRoc1RvUmVzb2x2ZS5tYXAoYXN5bmMgKHApID0+IChvT2JqZWN0UGFnZUNvbnRleHQgYXMgT0RhdGFWNENvbnRleHQpLnJlcXVlc3RPYmplY3QocCkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKSkpO1xuXHRcdHJldHVybiBidWlsZCgpO1xuXHR9XG5cblx0X2V4ZWN1dGVUYWJTaG9ydEN1dChvRXhlY3V0aW9uOiBVSTVFdmVudCk6IHZvaWQge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKSxcblx0XHRcdGFTZWN0aW9ucyA9IG9PYmplY3RQYWdlLmdldFNlY3Rpb25zKCksXG5cdFx0XHRpU2VjdGlvbkluZGV4TWF4ID0gYVNlY3Rpb25zLmxlbmd0aCAtIDEsXG5cdFx0XHRzQ29tbWFuZCA9IChvRXhlY3V0aW9uLmdldFNvdXJjZSgpIGFzIHVua25vd24gYXMgQ29tbWFuZEV4ZWN1dGlvbikuZ2V0Q29tbWFuZCgpO1xuXHRcdGxldCBuZXdTZWN0aW9uLFxuXHRcdFx0aVNlbGVjdGVkU2VjdGlvbkluZGV4ID0gb09iamVjdFBhZ2UuaW5kZXhPZlNlY3Rpb24odGhpcy5ieUlkKG9PYmplY3RQYWdlLmdldFNlbGVjdGVkU2VjdGlvbigpISkgYXMgT2JqZWN0UGFnZVNlY3Rpb24pO1xuXHRcdGlmIChpU2VsZWN0ZWRTZWN0aW9uSW5kZXggIT09IC0xICYmIGlTZWN0aW9uSW5kZXhNYXggPiAwKSB7XG5cdFx0XHRpZiAoc0NvbW1hbmQgPT09IFwiTmV4dFRhYlwiKSB7XG5cdFx0XHRcdGlmIChpU2VsZWN0ZWRTZWN0aW9uSW5kZXggPD0gaVNlY3Rpb25JbmRleE1heCAtIDEpIHtcblx0XHRcdFx0XHRuZXdTZWN0aW9uID0gYVNlY3Rpb25zWysraVNlbGVjdGVkU2VjdGlvbkluZGV4XTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChpU2VsZWN0ZWRTZWN0aW9uSW5kZXggIT09IDApIHtcblx0XHRcdFx0Ly8gUHJldmlvdXNUYWJcblx0XHRcdFx0bmV3U2VjdGlvbiA9IGFTZWN0aW9uc1stLWlTZWxlY3RlZFNlY3Rpb25JbmRleF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChuZXdTZWN0aW9uKSB7XG5cdFx0XHRcdG9PYmplY3RQYWdlLnNldFNlbGVjdGVkU2VjdGlvbihuZXdTZWN0aW9uKTtcblx0XHRcdFx0bmV3U2VjdGlvbi5mb2N1cygpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF9nZXRGb290ZXJWaXNpYmlsaXR5KCk6IHZvaWQge1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3Qgc1ZpZXdJZCA9IHRoaXMuZ2V0VmlldygpLmdldElkKCk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwibWVzc2FnZUZvb3RlckNvbnRhaW5zRXJyb3JzXCIsIGZhbHNlKTtcblx0XHRjb25zdCBpc0hpZGRlbkRyYWZ0RW5hYmxlZCA9ICh0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCkuZ2V0Q2FwYWJpbGl0aWVzKCkuSGlkZGVuRHJhZnQgYXMgSGlkZGVuRHJhZnQpXG5cdFx0XHQ/LmVuYWJsZWQ7XG5cdFx0TWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpXG5cdFx0XHQuZ2V0RGF0YSgpXG5cdFx0XHQuZm9yRWFjaChmdW5jdGlvbiAob01lc3NhZ2U6IE1lc3NhZ2UpOiB2b2lkIHtcblx0XHRcdFx0Y29uc3QgaXNFcnJvck1lc3NhZ2UgPSBvTWVzc2FnZS52YWxpZGF0aW9uICYmIG9NZXNzYWdlLmdldFR5cGUoKSA9PT0gXCJFcnJvclwiO1xuXHRcdFx0XHRjb25zdCBtZXNzYWdlVmFsaWRhdGlvbiA9IGlzSGlkZGVuRHJhZnRFbmFibGVkXG5cdFx0XHRcdFx0PyBpc0Vycm9yTWVzc2FnZVxuXHRcdFx0XHRcdDogaXNFcnJvck1lc3NhZ2UgJiYgb01lc3NhZ2UuZ2V0VGFyZ2V0cygpLnNvbWUoKHRhcmdldCkgPT4gdGFyZ2V0LmluY2x1ZGVzKHNWaWV3SWQpKTtcblx0XHRcdFx0aWYgKG1lc3NhZ2VWYWxpZGF0aW9uKSB7XG5cdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwibWVzc2FnZUZvb3RlckNvbnRhaW5zRXJyb3JzXCIsIHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0fVxuXG5cdF9zaG93TWVzc2FnZVBvcG92ZXIoZXJyPzogc3RyaW5nLCBvUmV0PzogdW5rbm93bik6IHVua25vd24ge1xuXHRcdGlmIChlcnIpIHtcblx0XHRcdExvZy5lcnJvcihlcnIpO1xuXHRcdH1cblx0XHRjb25zdCBpc0VkaXRNb2RlID0gQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZSh0aGlzLmdldFZpZXcoKSk7XG5cdFx0Y29uc3Qgcm9vdFZpZXdDb250cm9sbGVyID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb290Vmlld0NvbnRyb2xsZXIoKTtcblx0XHRjb25zdCBjdXJyZW50UGFnZVZpZXcgPSByb290Vmlld0NvbnRyb2xsZXIuaXNGY2xFbmFibGVkKClcblx0XHRcdD8gcm9vdFZpZXdDb250cm9sbGVyLmdldFJpZ2h0bW9zdFZpZXcoKVxuXHRcdFx0OiAodGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb290Q29udGFpbmVyKCkgYXMgTmF2Q29udGFpbmVyKS5nZXRDdXJyZW50UGFnZSgpO1xuXHRcdGlmIChpc0VkaXRNb2RlICYmICFjdXJyZW50UGFnZVZpZXcuaXNBKFwic2FwLm0uTWVzc2FnZVBhZ2VcIikpIHtcblx0XHRcdGNvbnN0IG9NZXNzYWdlQnV0dG9uID0gdGhpcy5tZXNzYWdlQnV0dG9uLFxuXHRcdFx0XHRvTWVzc2FnZVBvcG92ZXIgPSBvTWVzc2FnZUJ1dHRvbi5vTWVzc2FnZVBvcG92ZXIsXG5cdFx0XHRcdG9JdGVtQmluZGluZyA9IG9NZXNzYWdlUG9wb3Zlci5nZXRCaW5kaW5nKFwiaXRlbXNcIikgYXMgTGlzdEJpbmRpbmc7XG5cblx0XHRcdGlmIChvSXRlbUJpbmRpbmcuZ2V0TGVuZ3RoKCkgPiAwICYmICFvTWVzc2FnZVBvcG92ZXIuaXNPcGVuKCkpIHtcblx0XHRcdFx0b01lc3NhZ2VCdXR0b24uc2V0VmlzaWJsZSh0cnVlKTtcblx0XHRcdFx0Ly8gd29ya2Fyb3VuZCB0byBlbnN1cmUgdGhhdCBvTWVzc2FnZUJ1dHRvbiBpcyByZW5kZXJlZCB3aGVuIG9wZW5CeSBpcyBjYWxsZWRcblx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0b01lc3NhZ2VQb3BvdmVyLm9wZW5CeShvTWVzc2FnZUJ1dHRvbik7XG5cdFx0XHRcdH0sIDApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb1JldDtcblx0fVxuXG5cdGFzeW5jIF9lZGl0RG9jdW1lbnQoKTogUHJvbWlzZTx2b2lkIHwgQ29udGV4dD4ge1xuXHRcdGNvbnN0IG9Db250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRjb25zdCBvTW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpO1xuXHRcdEJ1c3lMb2NrZXIubG9jayhvTW9kZWwpO1xuXHRcdHJldHVybiB0aGlzLmVkaXRGbG93LmVkaXREb2N1bWVudC5hcHBseSh0aGlzLmVkaXRGbG93LCBbb0NvbnRleHRdKS5maW5hbGx5KGZ1bmN0aW9uICgpIHtcblx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKG9Nb2RlbCk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgZGVmYXVsdCBzZW1hbnRpYyBvYmplY3QgbWFwcGluZyBvYmplY3QuXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggVGhlIHZhbHVlIG9mIHRoZSBkYXRhIHBvaW50IHByb3BlcnR5IHBhdGhcblx0ICogQHBhcmFtIHNlbWFudGljT2JqZWN0IFRoZSBzZW1hbnRpYyBvYmplY3Rcblx0ICogQHJldHVybnMgVGhlIGFycmF5IG9mIHRoZSBkZWZhdWx0IHNlbWFudGljIG9iamVjdCBtYXBwaW5nIG9iamVjdFxuXHQgKi9cblx0X2dldEltcGxpY2l0U2VtYW50aWNPYmplY3RNYXBwaW5nRm9yRGF0YVBvaW50cyhcblx0XHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0XHRzZW1hbnRpY09iamVjdDogc3RyaW5nXG5cdCk6IE1ldGFNb2RlbFR5cGU8U2VtYW50aWNPYmplY3RNYXBwaW5nVHlwZT5bXSB7XG5cdFx0cmV0dXJuIFtcblx0XHRcdHtcblx0XHRcdFx0TG9jYWxQcm9wZXJ0eToge1xuXHRcdFx0XHRcdCRQcm9wZXJ0eVBhdGg6IHByb3BlcnR5UGF0aFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRTZW1hbnRpY09iamVjdFByb3BlcnR5OiBzZW1hbnRpY09iamVjdFxuXHRcdFx0fVxuXHRcdF07XG5cdH1cblxuXHQvKipcblx0ICogRXhlY3V0ZXMgdGhlIHZhbGlkYXRpb24gb2YgdGhlIGRvY3VtZW50XG5cdCAqIE9uZSBvZiB0aGUgZm9sbG93aW5nIGFjdGlvbnMgaXMgdHJpZ2dlcmVkIG9uIHRoZSBkcmFmdCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudDpcblx0ICogLSBvbiBhIHRyYW5zaWVudCBjb250ZXh0OlxuXHQgKiAtIGlmIHRoZSBjb250ZXh0IGdldHMgZGF0YSwgd2FpdCBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSBjb250ZXh0IGFuZCBleGVjdXRlIHRoZSBnbG9iYWwgdmFsaWRhdGlvblxuXHQgKiAtIGlmIG5vIGRhdGEgaXMgZm91bmQgb24gdGhpcyBjb250ZXh0LCBvbmx5IHRoZSBwcmVwYXJlQWN0aW9uIGlzIHJlcXVlc3RlZFxuXHQgKiAtIG9uIGEgcmVndWxhciBjb250ZXh0LCB0aGUgZ2xvYmFsIHZhbGlkYXRpb24gaXMgcmVxdWVzdGVkLlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIG9mIHRoZSBnbG9iYWwgdmFsaWRhdGlvbiBvciB1bmRlZmluZWQgaWYgbm90IGV4ZWN1dGVkXG5cdCAqL1xuXHRhc3luYyBfdmFsaWRhdGVEb2N1bWVudCgpOiBQcm9taXNlPHZvaWQgfCB1bmtub3duW10gfCBPRGF0YUNvbnRleHRCaW5kaW5nPiB7XG5cdFx0Y29uc3QgY29udHJvbCA9IFVJNUVsZW1lbnQuZ2V0QWN0aXZlRWxlbWVudCgpIGFzIENvbnRyb2w7XG5cdFx0Y29uc3QgY29udGV4dCA9IGNvbnRyb2w/LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ7XG5cblx0XHRpZiAoIWNvbnRyb2wgfHwgIWNvbnRleHQpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGxldCBieVBhc3NTaWRlRWZmZWN0cyA9IGZhbHNlO1xuXHRcdGlmIChjb250ZXh0LmlzVHJhbnNpZW50KCkpIHtcblx0XHRcdGlmIChjb250ZXh0Lmhhc1BlbmRpbmdDaGFuZ2VzKCkpIHtcblx0XHRcdFx0YXdhaXQgY29udGV4dC5jcmVhdGVkKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRieVBhc3NTaWRlRWZmZWN0cyA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMubWVzc2FnZUhhbmRsZXIuaG9sZE1lc3NhZ2VzRm9yQ29udHJvbChjb250cm9sKTtcblx0XHRjb25zdCByZXQgPSBhd2FpdCB0aGlzLmV4ZWN1dGVHbG9iYWxWYWxpZGF0aW9uKGNvbnRleHQsIGJ5UGFzc1NpZGVFZmZlY3RzKTtcblx0XHR0aGlzLm1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlcyh7IGNvbnRyb2wgfSk7XG5cdFx0cmV0dXJuIHJldDtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGUgZ2xvYmFsIHZhbGlkYXRpb24gb2YgdGhlIGRyYWZ0XG5cdCAqIE9uZSBvZiB0aGUgZm9sbG93aW5nIGFjdGlvbnMgaXMgdHJpZ2dlcmVkIG9uIHRoZSBkcmFmdCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudDpcblx0ICogLSB0aGUgZ2xvYmFsIHNpZGUgZWZmZWN0cyBhcmUgZXhlY3V0ZWQgaWYgdGhlc2Ugc2lkZSBlZmZlY3RzIGFyZSBkZWZpbmVkIGluIHRoZSBjb250ZXh0XG5cdCAqIC0gdGhlIGRyYWZ0IFZhbGlkYXRpb24gb24gdGhlIERyYWZ0Um9vdCBjb250ZXh0LlxuXHQgKiBAcGFyYW0gY29udGV4dCBUaGUgQ29udGV4dFxuXHQgKiBAcGFyYW0gYnlQYXNzU2lkZUVmZmVjdHMgT25seSB0aGUgZHJhZnQgVmFsaWRhdGlvbiBzdGVwIGlzIGV4ZWN1dGVkXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugb2YgdGhlIGdsb2JhbCB2YWxpZGF0aW9uXG5cdCAqL1xuXHRhc3luYyBleGVjdXRlR2xvYmFsVmFsaWRhdGlvbihjb250ZXh0OiBPRGF0YVY0Q29udGV4dCwgYnlQYXNzU2lkZUVmZmVjdHMgPSBmYWxzZSk6IFByb21pc2U8dm9pZCB8IHVua25vd25bXSB8IE9EYXRhQ29udGV4dEJpbmRpbmc+IHtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdC8vIHRoZSBkcmFmdCB2YWxpZGF0aW9uIGlzIHRyZWF0ZWQgYXMgYSB1c2VyIGludGVyYWN0aW9uLCBhbmQgdGhlIHNlcnZpY2UgbXVzdCByZXR1cm4gdHJhbnNpdGlvbiBtZXNzYWdlcyBhZ2FpbiBpZiBzdGlsbCB2YWxpZFxuXHRcdHRoaXMubWVzc2FnZUhhbmRsZXIucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0aWYgKCFieVBhc3NTaWRlRWZmZWN0cykge1xuXHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNTZXJ2aWNlID0gYXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXHRcdFx0Y29uc3QgZW50aXR5VHlwZSA9IHNpZGVFZmZlY3RzU2VydmljZS5nZXRFbnRpdHlUeXBlRnJvbUNvbnRleHQoY29udGV4dCk7XG5cdFx0XHRjb25zdCBnbG9iYWxTaWRlRWZmZWN0cyA9IGVudGl0eVR5cGUgPyBzaWRlRWZmZWN0c1NlcnZpY2UuZ2V0R2xvYmFsT0RhdGFFbnRpdHlTaWRlRWZmZWN0cyhlbnRpdHlUeXBlKSA6IFtdO1xuXHRcdFx0Ly8gSWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGdsb2JhbCBTaWRlRWZmZWN0cyBmb3IgdGhlIHJlbGF0ZWQgZW50aXR5LCBleGVjdXRlIGl0L3RoZW1cblx0XHRcdGlmIChnbG9iYWxTaWRlRWZmZWN0cy5sZW5ndGgpIHtcblx0XHRcdFx0YXdhaXQgdGhpcy5lZGl0Rmxvdy5zeW5jVGFzaygpO1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoXG5cdFx0XHRcdFx0Z2xvYmFsU2lkZUVmZmVjdHMubWFwKGFzeW5jIChzaWRlRWZmZWN0cykgPT4gdGhpcy5fc2lkZUVmZmVjdHMucmVxdWVzdFNpZGVFZmZlY3RzKHNpZGVFZmZlY3RzLCBjb250ZXh0KSlcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBkcmFmdFJvb3RDb250ZXh0ID0gKGF3YWl0IENvbW1vblV0aWxzLmNyZWF0ZVJvb3RDb250ZXh0KFxuXHRcdFx0UHJvZ3JhbW1pbmdNb2RlbC5EcmFmdCxcblx0XHRcdHRoaXMuZ2V0VmlldygpLFxuXHRcdFx0YXBwQ29tcG9uZW50XG5cdFx0KSkgYXMgT0RhdGFWNENvbnRleHQ7XG5cdFx0Ly9FeGVjdXRlIHRoZSBkcmFmdFZhbGlkYXRpb24gaWYgdGhlcmUgaXMgbm8gZ2xvYmFsU2lkZUVmZmVjdHMgKGlnbm9yZSBFVGFncyBpbiBjb2xsYWJvcmF0aW9uIGRyYWZ0KVxuXHRcdGlmIChkcmFmdFJvb3RDb250ZXh0KSB7XG5cdFx0XHRhd2FpdCB0aGlzLmVkaXRGbG93LnN5bmNUYXNrKCk7XG5cdFx0XHRyZXR1cm4gZHJhZnQuZXhlY3V0ZURyYWZ0VmFsaWRhdGlvbihkcmFmdFJvb3RDb250ZXh0LCBhcHBDb21wb25lbnQsIHRoaXMuY29sbGFib3JhdGl2ZURyYWZ0LmlzQ29ubmVjdGVkKCkpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTYXZlcyB0aGUgZHJhZnQgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnRcblx0ICogSWYgZGF0YSBoYXMgYmVlbiBwcm92aWRlZCBvbiB0aGUgY3JlYXRpb24gcm93cywgdGhlIHJlbGF0ZWQgZG9jdW1lbnRzIGFyZSBjcmVhdGVkXG5cdCAqIGJlZm9yZSBzYXZpbmcgdGhlIGRyYWZ0IHZlcnNpb24uXG5cdCAqIEBwYXJhbSBza2lwQmluZGluZ1RvVmlldyBJbmRpY2F0ZXMgaWYgdGhlIGJpbmRpbmcgdG8gdGhlIHZpZXcgc2hvdWxkIGJlIHNraXBwZWRcblx0ICogQHJldHVybnMgUHJvbWlzZVxuXHQgKi9cblx0YXN5bmMgX3NhdmVEb2N1bWVudChza2lwQmluZGluZ1RvVmlldz86IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRjb25zdCBtb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIiksXG5cdFx0XHRhd2FpdENyZWF0ZURvY3VtZW50czogUHJvbWlzZTx2b2lkIHwgT0RhdGFMaXN0QmluZGluZz5bXSA9IFtdO1xuXHRcdC8vIGluZGljYXRlcyBpZiB3ZSBhcmUgY3JlYXRpbmcgYSBuZXcgcm93IGluIHRoZSBPUFxuXHRcdGxldCBleGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yID0gZmFsc2U7XG5cdFx0QnVzeUxvY2tlci5sb2NrKG1vZGVsKTtcblx0XHR0cnkge1xuXHRcdFx0aWYgKHRoaXMuY29sbGFib3JhdGl2ZURyYWZ0LmlzQ29sbGFib3JhdGlvbkVuYWJsZWQoKSkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGNvbnN0IGRpYWxvZ0FjdGlvbiA9IGF3YWl0IG5ldyBDb2xsYWJvcmF0aW9uRGlzY2FyZCh0aGlzLmdldFZpZXcoKSwgdHJ1ZSkuZ2V0VXNlckFjdGlvbigpO1xuXHRcdFx0XHRcdC8vIFdlIGNhbmNlbCB0aGUgYWN0aW9uXG5cdFx0XHRcdFx0aWYgKGRpYWxvZ0FjdGlvbiA9PT0gXCJjYW5jZWxcIikge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBXZSBrZWVwIHRoZSBkcmFmdCBhbmQgbGVhdmUgZm9yIExSXG5cdFx0XHRcdFx0aWYgKGRpYWxvZ0FjdGlvbiA9PT0gXCJrZWVwRHJhZnRcIikge1xuXHRcdFx0XHRcdFx0dGhpcy5jb2xsYWJvcmF0aXZlRHJhZnQuZGlzY29ubmVjdCgpO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5fcm91dGluZy5uYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dChjb250ZXh0KTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHRcdExvZy5lcnJvcihgU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCBjb2xsYWJvcmF0aW9uIGRpc2NhcmQ6ICR7ZXJyfWApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGF3YWl0IHRoaXMuZWRpdEZsb3cuc3luY1Rhc2soKTtcblx0XHRcdHRoaXMuX2ZpbmRUYWJsZXMoKS5mb3JFYWNoKCh0YWJsZTogVGFibGUpID0+IHtcblx0XHRcdFx0Y29uc3QgY3JlYXRpb25Sb3cgPSB0YWJsZS5nZXRDcmVhdGlvblJvdygpO1xuXHRcdFx0XHRjb25zdCB0YWJsZUJpbmRpbmcgPSB0aGlzLl9nZXRUYWJsZUJpbmRpbmcodGFibGUpO1xuXHRcdFx0XHRjb25zdCBjb250ZXh0S2V5cyA9IE9iamVjdC5rZXlzKChjcmVhdGlvblJvdz8uZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCk/LmdldE9iamVjdCgpIHx8IHt9KTtcblx0XHRcdFx0aWYgKGNvbnRleHRLZXlzLmZpbHRlcigoa2V5KSA9PiAha2V5LnN0YXJ0c1dpdGgoXCJAJHVpNS5cIikpLmxlbmd0aCkge1xuXHRcdFx0XHRcdGV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IgPSB0cnVlO1xuXHRcdFx0XHRcdGF3YWl0Q3JlYXRlRG9jdW1lbnRzLnB1c2goXG5cdFx0XHRcdFx0XHR0aGlzLmVkaXRGbG93XG5cdFx0XHRcdFx0XHRcdC5jcmVhdGVEb2N1bWVudCh0YWJsZUJpbmRpbmcsIHtcblx0XHRcdFx0XHRcdFx0XHRjcmVhdGlvbk1vZGU6IHRhYmxlLmRhdGEoXCJjcmVhdGlvbk1vZGVcIiksXG5cdFx0XHRcdFx0XHRcdFx0Y3JlYXRpb25Sb3c6IGNyZWF0aW9uUm93LFxuXHRcdFx0XHRcdFx0XHRcdGNyZWF0ZUF0RW5kOiB0YWJsZS5kYXRhKFwiY3JlYXRlQXRFbmRcIikgPT09IFwidHJ1ZVwiLFxuXHRcdFx0XHRcdFx0XHRcdHNraXBTaWRlRWZmZWN0czogdHJ1ZSAvLyB0aGUgc2tpcFNpZGVFZmZlY3RzIGlzIGEgcGFyYW1ldGVyIGNyZWF0ZWQgd2hlbiB3ZSBjbGljayB0aGUgc2F2ZSBrZXkuIElmIHdlIHByZXNzIHRoaXMga2V5LCB3ZSBkb24ndCBleGVjdXRlIHRoZSBoYW5kbGVTaWRlRWZmZWN0cyBmdW5jaXRvbiB0byBhdm9pZCBiYXRjaCByZWR1bmRhbmN5XG5cdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdC50aGVuKCgpID0+IHRhYmxlQmluZGluZylcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IGlzU2tpcEJpbmRpbmdUb1ZpZXcgPSBza2lwQmluZGluZ1RvVmlldyBhcyB1bmtub3duIGFzIENvbW1hbmRFeGVjdXRpb24kRXhlY3V0ZUV2ZW50O1xuXHRcdFx0Y29uc3QgaXNTdGFuZGFyZFNhdmUgPVxuXHRcdFx0XHRpc1NraXBCaW5kaW5nVG9WaWV3ICYmIHR5cGVvZiBpc1NraXBCaW5kaW5nVG9WaWV3ID09IFwib2JqZWN0XCIgJiYgaXNTa2lwQmluZGluZ1RvVmlldy5nZXRTb3VyY2UoKS5nZXRDb21tYW5kKCkgPT09IFwiU2F2ZVwiO1xuXG5cdFx0XHRjb25zdCBiaW5kaW5ncyA9IGF3YWl0IFByb21pc2UuYWxsKGF3YWl0Q3JlYXRlRG9jdW1lbnRzKTtcblx0XHRcdC8vIFdlIG5lZWQgdG8gZWl0aGVyIHJlamVjdCBvciByZXNvbHZlIGEgcHJvbWlzZSBoZXJlIGFuZCByZXR1cm4gaXQgc2luY2UgdGhpcyBzYXZlXG5cdFx0XHQvLyBmdW5jdGlvbiBpcyBub3Qgb25seSBjYWxsZWQgd2hlbiBwcmVzc2luZyB0aGUgc2F2ZSBidXR0b24gaW4gdGhlIGZvb3RlciwgYnV0IGFsc29cblx0XHRcdC8vIHdoZW4gdGhlIHVzZXIgc2VsZWN0cyBjcmVhdGUgb3Igc2F2ZSBpbiBhIGRhdGFsb3NzIHBvcHVwLlxuXHRcdFx0Ly8gVGhlIGxvZ2ljIG9mIHRoZSBkYXRhbG9zcyBwb3B1cCBuZWVkcyB0byBkZXRlY3QgaWYgdGhlIHNhdmUgaGFkIGVycm9ycyBvciBub3QgaW4gb3JkZXJcblx0XHRcdC8vIHRvIGRlY2lkZSBpZiB0aGUgc3Vic2VxdWVudCBhY3Rpb24gLSBsaWtlIGEgYmFjayBuYXZpZ2F0aW9uIC0gaGFzIHRvIGJlIGV4ZWN1dGVkIG9yIG5vdC5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGF3YWl0IHRoaXMuZWRpdEZsb3cuc2F2ZURvY3VtZW50KGNvbnRleHQsIHtcblx0XHRcdFx0XHRiRXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvcjogZXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvcixcblx0XHRcdFx0XHRiaW5kaW5nczogYmluZGluZ3MgYXMgdW5rbm93biBhcyBPRGF0YUxpc3RCaW5kaW5nW10sXG5cdFx0XHRcdFx0bWVyZ2VQYXRjaERyYWZ0OiB0aGlzLm1lcmdlUGF0Y2hEcmFmdCxcblx0XHRcdFx0XHRza2lwQmluZGluZ1RvVmlldyxcblx0XHRcdFx0XHRpc1N0YW5kYXJkU2F2ZVxuXHRcdFx0XHR9KTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdC8vIElmIHRoZSBzYXZlRG9jdW1lbnQgaW4gZWRpdEZsb3cgcmV0dXJucyBlcnJvcnMgd2UgbmVlZFxuXHRcdFx0XHQvLyB0byBzaG93IHRoZSBtZXNzYWdlIHBvcG92ZXIgaGVyZSBhbmQgZW5zdXJlIHRoYXQgdGhlXG5cdFx0XHRcdC8vIGRhdGFsb3NzIGxvZ2ljIGRvZXMgbm90IHBlcmZvcm0gdGhlIGZvbGxvdyB1cCBmdW5jdGlvblxuXHRcdFx0XHQvLyBsaWtlIGUuZy4gYSBiYWNrIG5hdmlnYXRpb24gaGVuY2Ugd2UgcmV0dXJuIGEgcHJvbWlzZSBhbmQgcmVqZWN0IGl0XG5cdFx0XHRcdGlmIChlcnJvciAhPT0gUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbi5Db250aW51ZSkge1xuXHRcdFx0XHRcdHRoaXMuX3Nob3dNZXNzYWdlUG9wb3ZlcihlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRocm93IGVycm9yO1xuXHRcdFx0fVxuXHRcdH0gZmluYWxseSB7XG5cdFx0XHRpZiAoQnVzeUxvY2tlci5pc0xvY2tlZChtb2RlbCkpIHtcblx0XHRcdFx0QnVzeUxvY2tlci51bmxvY2sobW9kZWwpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGFzeW5jIF9jYW5jZWxEb2N1bWVudChtUGFyYW1ldGVyczogeyBjYW5jZWxCdXR0b246IHN0cmluZyB9KTogUHJvbWlzZTxDb250ZXh0IHwgdm9pZD4ge1xuXHRcdGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldFZpZXcoKT8uZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRjb25zdCBjYW5jZWxCdXR0b24gPSB0aGlzLmdldFZpZXcoKS5ieUlkKG1QYXJhbWV0ZXJzLmNhbmNlbEJ1dHRvbikgYXMgQnV0dG9uIHwgdW5kZWZpbmVkOyAvL3RvIGdldCB0aGUgcmVmZXJlbmNlIG9mIHRoZSBjYW5jZWwgYnV0dG9uIGZyb20gY29tbWFuZCBleGVjdXRpb25cblx0XHRjb25zdCBsYXN0Rm9jdXNlZENvbnRyb2xJZCA9IFVJNUVsZW1lbnQuZ2V0QWN0aXZlRWxlbWVudCgpPy5nZXRJZCgpO1xuXHRcdGxldCBzaG91bGRTa2lwRGlzY2FyZFBvcG92ZXIgPSBmYWxzZTtcblx0XHRpZiAodGhpcy5jb2xsYWJvcmF0aXZlRHJhZnQuaXNDb2xsYWJvcmF0aW9uRW5hYmxlZCgpKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCBkaWFsb2dBY3Rpb24gPSBhd2FpdCBuZXcgQ29sbGFib3JhdGlvbkRpc2NhcmQodGhpcy5nZXRWaWV3KCksIGZhbHNlKS5nZXRVc2VyQWN0aW9uKCk7XG5cdFx0XHRcdC8vIFdlIGNhbmNlbCB0aGUgYWN0aW9uXG5cdFx0XHRcdGlmIChkaWFsb2dBY3Rpb24gPT09IFwiY2FuY2VsXCIpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gV2Uga2VlcCB0aGUgZHJhZnQgYW5kIGxlYXZlIGZvciBMUlxuXHRcdFx0XHRpZiAoZGlhbG9nQWN0aW9uID09PSBcImtlZXBEcmFmdFwiKSB7XG5cdFx0XHRcdFx0dGhpcy5jb2xsYWJvcmF0aXZlRHJhZnQuZGlzY29ubmVjdCgpO1xuXHRcdFx0XHRcdGF3YWl0IHRoaXMuX3JvdXRpbmcubmF2aWdhdGVCYWNrRnJvbUNvbnRleHQoY29udGV4dCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIFdlIGhhdmUgZGlzcGxheWVkIHRoZSBkaWFsb2cgYW5kIHRoZSB1c2VyIGNvbmZpcm1lZCB0aGUgZGlzY2FyZCAtPiBXZSBza2lwIHRoZSBkaXNjYXJkIGNvbmZpcm1hdGlvblxuXHRcdFx0XHRpZiAoZGlhbG9nQWN0aW9uID09PSBcImRpc2NhcmRDb25maXJtZWRcIikge1xuXHRcdFx0XHRcdHNob3VsZFNraXBEaXNjYXJkUG9wb3ZlciA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgZ2V0IGNvbGxhYm9yYXRpdmUgdXNlcnNcIik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnN0IGlzRG9jdW1lbnRNb2RpZmllZCA9XG5cdFx0XHQhIXRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoVWlNb2RlbENvbnN0YW50cy5Eb2N1bWVudE1vZGlmaWVkKSB8fFxuXHRcdFx0KCF0aGlzLmdldFN0aWNreUVkaXRNb2RlKCkgJiYgY29udGV4dC5nZXRQcm9wZXJ0eShcIkhhc0FjdGl2ZUVudGl0eVwiKSA9PT0gZmFsc2UpO1xuXHRcdGNvbnN0IGFmdGVyQ2FuY2VsOiBGdW5jdGlvbiA9IChwcm9taXNlUmVzdWx0OiBPRGF0YVY0Q29udGV4dCkgPT4ge1xuXHRcdFx0Ly8gZm9jdXMgaXMgcmV0YWluZWQgb24gdGhlIGxhc3QgZm9jdXNlZCBlbGVtZW50XG5cdFx0XHRpZiAobGFzdEZvY3VzZWRDb250cm9sSWQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKGxhc3RGb2N1c2VkQ29udHJvbElkKT8uZm9jdXMoKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBwcm9taXNlUmVzdWx0O1xuXHRcdH07XG5cdFx0aWYgKFxuXHRcdFx0KHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk/LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCk/LmdldENhcGFiaWxpdGllcygpPy5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdCk/LmVuYWJsZWQgJiZcblx0XHRcdGlzRG9jdW1lbnRNb2RpZmllZFxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIGRyYWZ0LnByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uKFxuXHRcdFx0XHRhZnRlckNhbmNlbCxcblx0XHRcdFx0RnVuY3Rpb24ucHJvdG90eXBlLFxuXHRcdFx0XHRjb250ZXh0LFxuXHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0ZHJhZnQuTmF2aWdhdGlvblR5cGUuQmFja05hdmlnYXRpb24sXG5cdFx0XHRcdHRydWVcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmVkaXRGbG93XG5cdFx0XHQuY2FuY2VsRG9jdW1lbnQoY29udGV4dCwgeyBjb250cm9sOiBjYW5jZWxCdXR0b24sIHNraXBEaXNjYXJkUG9wb3Zlcjogc2hvdWxkU2tpcERpc2NhcmRQb3BvdmVyIH0pXG5cdFx0XHQudGhlbigocHJvbWlzZVJlc3VsdCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gYWZ0ZXJDYW5jZWwocHJvbWlzZVJlc3VsdCk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdGFzeW5jIF9hcHBseURvY3VtZW50KG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiB0aGlzLmVkaXRGbG93LmFwcGx5RG9jdW1lbnQob0NvbnRleHQpLmNhdGNoKCgpID0+IHtcblx0XHRcdHRoaXMuX3Nob3dNZXNzYWdlUG9wb3ZlcigpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH0pO1xuXHR9XG5cblx0X3VwZGF0ZVJlbGF0ZWRBcHBzKCk6IHZvaWQge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRjb25zdCBzaG93UmVsYXRlZEFwcHMgPSBvT2JqZWN0UGFnZS5kYXRhKFwic2hvd1JlbGF0ZWRBcHBzXCIpO1xuXHRcdGlmIChzaG93UmVsYXRlZEFwcHMgPT09IFwidHJ1ZVwiIHx8IHNob3dSZWxhdGVkQXBwcyA9PT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuZ2V0VmlldygpKTtcblx0XHRcdENvbW1vblV0aWxzLnVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyhvT2JqZWN0UGFnZSwgYXBwQ29tcG9uZW50KTtcblx0XHR9XG5cdH1cblxuXHRfZmluZENvbnRyb2xJblN1YlNlY3Rpb24oYVBhcmVudEVsZW1lbnQ6IENvbnRyb2xbXSwgYVN1YnNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLCBhQ29udHJvbHM6IENvbnRyb2xbXSwgYklzQ2hhcnQ/OiBib29sZWFuKTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCBpdGVtMSBvZiBhUGFyZW50RWxlbWVudCkge1xuXHRcdFx0bGV0IG9FbGVtZW50ID0gKGl0ZW0xIGFzIE1hY3JvQVBJKS5nZXRDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gPyAoaXRlbTEgYXMgTWFjcm9BUEkpLmdldENvbnRlbnQoKSA6IHVuZGVmaW5lZDtcblx0XHRcdGlmIChiSXNDaGFydCkge1xuXHRcdFx0XHRpZiAob0VsZW1lbnQ/LmdldEFnZ3JlZ2F0aW9uKFwiaXRlbXNcIikpIHtcblx0XHRcdFx0XHRjb25zdCBpdGVtcyA9IG9FbGVtZW50LmdldEFnZ3JlZ2F0aW9uKFwiaXRlbXNcIikgYXMgQ29udHJvbFtdO1xuXHRcdFx0XHRcdGl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGl0ZW06IENvbnRyb2wpIHtcblx0XHRcdFx0XHRcdGlmIChpdGVtLmlzQTxDaGFydEJsb2NrPihcInNhcC5mZS5tYWNyb3MuQ2hhcnRcIikpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgY2hhcnRDb250cm9sID0gaXRlbS5nZXRDaGFydENvbnRyb2woKTtcblx0XHRcdFx0XHRcdFx0YUNvbnRyb2xzLnB1c2goY2hhcnRDb250cm9sKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50LmlzQSAmJiBvRWxlbWVudC5pc0E8RHluYW1pY1NpZGVDb250ZW50PihcInNhcC51aS5sYXlvdXQuRHluYW1pY1NpZGVDb250ZW50XCIpKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1N1YkVsZW1lbnQgPSBvRWxlbWVudC5nZXRNYWluQ29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gb0VsZW1lbnQuZ2V0TWFpbkNvbnRlbnQoKSA6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRpZiAob1N1YkVsZW1lbnQgJiYgb1N1YkVsZW1lbnQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0b0VsZW1lbnQgPSBvU3ViRWxlbWVudFswXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gVGhlIHRhYmxlIG1heSBjdXJyZW50bHkgYmUgc2hvd24gaW4gYSBmdWxsIHNjcmVlbiBkaWFsb2csIHdlIGNhbiB0aGVuIGdldCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBUYWJsZUFQSVxuXHRcdFx0XHQvLyBjb250cm9sIGZyb20gdGhlIGN1c3RvbSBkYXRhIG9mIHRoZSBwbGFjZSBob2xkZXIgcGFuZWxcblx0XHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50LmlzQSAmJiBvRWxlbWVudC5pc0EoXCJzYXAubS5QYW5lbFwiKSAmJiBvRWxlbWVudC5kYXRhKFwiRnVsbFNjcmVlblRhYmxlUGxhY2VIb2xkZXJcIikpIHtcblx0XHRcdFx0XHRvRWxlbWVudCA9IG9FbGVtZW50LmRhdGEoXCJ0YWJsZUFQSXJlZmVyZW5jZVwiKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQuaXNBICYmIG9FbGVtZW50LmlzQTxUYWJsZUFQST4oXCJzYXAuZmUubWFjcm9zLnRhYmxlLlRhYmxlQVBJXCIpKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1N1YkVsZW1lbnQgPSBvRWxlbWVudC5nZXRDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gPyBvRWxlbWVudC5nZXRDb250ZW50KCkgOiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0aWYgKG9TdWJFbGVtZW50ICYmIG9TdWJFbGVtZW50LmlzQSAmJiBvU3ViRWxlbWVudC5pc0E8VGFibGU+KFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRcdFx0YUNvbnRyb2xzLnB1c2gob1N1YkVsZW1lbnQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF9nZXRBbGxTdWJTZWN0aW9ucygpOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdIHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0bGV0IGFTdWJTZWN0aW9uczogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSA9IFtdO1xuXHRcdG9PYmplY3RQYWdlLmdldFNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1NlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uKSB7XG5cdFx0XHRhU3ViU2VjdGlvbnMgPSBhU3ViU2VjdGlvbnMuY29uY2F0KG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBhU3ViU2VjdGlvbnM7XG5cdH1cblxuXHRfZ2V0QWxsQmxvY2tzKCk6IEVuaGFuY2VXaXRoVUk1PFN1YlNlY3Rpb25CbG9jaz5bXSB7XG5cdFx0bGV0IGFCbG9ja3M6IEVuaGFuY2VXaXRoVUk1PFN1YlNlY3Rpb25CbG9jaz5bXSA9IFtdO1xuXHRcdHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1N1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uKSB7XG5cdFx0XHRhQmxvY2tzID0gYUJsb2Nrcy5jb25jYXQob1N1YlNlY3Rpb24uZ2V0QmxvY2tzKCkgYXMgRW5oYW5jZVdpdGhVSTU8U3ViU2VjdGlvbkJsb2NrPltdKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gYUJsb2Nrcztcblx0fVxuXG5cdF9maW5kVGFibGVzKCk6IFRhYmxlW10ge1xuXHRcdGNvbnN0IGFTdWJTZWN0aW9ucyA9IHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCk7XG5cdFx0Y29uc3QgYVRhYmxlczogVGFibGVbXSA9IFtdO1xuXHRcdGZvciAobGV0IHN1YlNlY3Rpb24gPSAwOyBzdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgc3ViU2VjdGlvbisrKSB7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0QmxvY2tzKCksIGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXSwgYVRhYmxlcyk7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0TW9yZUJsb2NrcygpLCBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0sIGFUYWJsZXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gYVRhYmxlcztcblx0fVxuXG5cdF9maW5kQ2hhcnRzKCk6IENoYXJ0W10ge1xuXHRcdGNvbnN0IGFTdWJTZWN0aW9ucyA9IHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCk7XG5cdFx0Y29uc3QgYUNoYXJ0czogQ2hhcnRbXSA9IFtdO1xuXHRcdGZvciAobGV0IHN1YlNlY3Rpb24gPSAwOyBzdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgc3ViU2VjdGlvbisrKSB7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0QmxvY2tzKCksIGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXSwgYUNoYXJ0cywgdHJ1ZSk7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0TW9yZUJsb2NrcygpLCBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0sIGFDaGFydHMsIHRydWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gYUNoYXJ0cztcblx0fVxuXG5cdF9jbG9zZVNpZGVDb250ZW50KCk6IHZvaWQge1xuXHRcdHRoaXMuX2dldEFsbEJsb2NrcygpLmZvckVhY2goZnVuY3Rpb24gKG9CbG9jazogRW5oYW5jZVdpdGhVSTU8U3ViU2VjdGlvbkJsb2NrPik6IHZvaWQge1xuXHRcdFx0Y29uc3Qgb0NvbnRlbnQgPSBvQmxvY2suZ2V0Q29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIG9CbG9jay5nZXRDb250ZW50KCk7XG5cdFx0XHRpZiAob0NvbnRlbnQgJiYgb0NvbnRlbnQuaXNBICYmIG9Db250ZW50LmlzQTxEeW5hbWljU2lkZUNvbnRlbnQ+KFwic2FwLnVpLmxheW91dC5EeW5hbWljU2lkZUNvbnRlbnRcIikpIHtcblx0XHRcdFx0aWYgKG9Db250ZW50LnNldFNob3dTaWRlQ29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG5cdFx0XHRcdFx0b0NvbnRlbnQuc2V0U2hvd1NpZGVDb250ZW50KGZhbHNlLCBmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGFydCBDb250ZXh0IGlzIHJlc29sdmVkIGZvciAxOm4gbWljcm9jaGFydHMuXG5cdCAqIEBwYXJhbSBvQ2hhcnRDb250ZXh0IFRoZSBDb250ZXh0IG9mIHRoZSBNaWNyb0NoYXJ0XG5cdCAqIEBwYXJhbSBzQ2hhcnRQYXRoIFRoZSBjb2xsZWN0aW9uUGF0aCBvZiB0aGUgdGhlIGNoYXJ0XG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIEF0dHJpYnV0ZXMgb2YgdGhlIGNoYXJ0IENvbnRleHRcblx0ICovXG5cdF9nZXRDaGFydENvbnRleHREYXRhKG9DaGFydENvbnRleHQ6IENvbnRleHQsIHNDaGFydFBhdGg6IHN0cmluZyk6IHVua25vd25bXSB7XG5cdFx0Y29uc3Qgb0NvbnRleHREYXRhID0gb0NoYXJ0Q29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRsZXQgb0NoYXJ0Q29udGV4dERhdGEgPSBbb0NvbnRleHREYXRhXTtcblx0XHRpZiAob0NoYXJ0Q29udGV4dCAmJiBzQ2hhcnRQYXRoKSB7XG5cdFx0XHRpZiAob0NvbnRleHREYXRhW3NDaGFydFBhdGhdKSB7XG5cdFx0XHRcdG9DaGFydENvbnRleHREYXRhID0gb0NvbnRleHREYXRhW3NDaGFydFBhdGhdO1xuXHRcdFx0XHRkZWxldGUgb0NvbnRleHREYXRhW3NDaGFydFBhdGhdO1xuXHRcdFx0XHRvQ2hhcnRDb250ZXh0RGF0YS5wdXNoKG9Db250ZXh0RGF0YSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvQ2hhcnRDb250ZXh0RGF0YTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTY3JvbGwgdGhlIHRhYmxlcyB0byB0aGUgcm93IHdpdGggdGhlIHNQYXRoXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzUm93UGF0aCAnc1BhdGggb2YgdGhlIHRhYmxlIHJvdydcblx0ICovXG5cblx0X3Njcm9sbFRhYmxlc1RvUm93KHNSb3dQYXRoOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5fZmluZFRhYmxlcyAmJiB0aGlzLl9maW5kVGFibGVzKCkubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgYVRhYmxlcyA9IHRoaXMuX2ZpbmRUYWJsZXMoKTtcblx0XHRcdGZvciAoY29uc3QgaXRlbSBvZiBhVGFibGVzKSB7XG5cdFx0XHRcdFRhYmxlU2Nyb2xsZXIuc2Nyb2xsVGFibGVUb1JvdyhpdGVtLCBzUm93UGF0aCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBtZXJnZSBzZWxlY3RlZCBjb250ZXh0cyBhbmQgZmlsdGVycy5cblx0ICogQHBhcmFtIG9QYWdlQ29udGV4dCBQYWdlIGNvbnRleHRcblx0ICogQHBhcmFtIGFMaW5lQ29udGV4dCBTZWxlY3RlZCBDb250ZXh0c1xuXHQgKiBAcGFyYW0gc0NoYXJ0UGF0aCBDb2xsZWN0aW9uIG5hbWUgb2YgdGhlIGNoYXJ0XG5cdCAqIEByZXR1cm5zIFNlbGVjdGlvbiBWYXJpYW50IE9iamVjdFxuXHQgKi9cblx0X21lcmdlTXVsdGlwbGVDb250ZXh0cyhcblx0XHRvUGFnZUNvbnRleHQ6IENvbnRleHQsXG5cdFx0YUxpbmVDb250ZXh0OiBPRGF0YVY0Q29udGV4dFtdLFxuXHRcdHNDaGFydFBhdGg6IHN0cmluZ1xuXHQpOiB7IHNlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQ7IGF0dHJpYnV0ZXM6IHVua25vd25bXSB9IHtcblx0XHRsZXQgYUF0dHJpYnV0ZXM6IHVua25vd25bXSA9IFtdLFxuXHRcdFx0YVBhZ2VBdHRyaWJ1dGVzID0gW10sXG5cdFx0XHRvQ29udGV4dCxcblx0XHRcdHNNZXRhUGF0aExpbmU6IHN0cmluZyxcblx0XHRcdHNQYXRoTGluZTtcblxuXHRcdGNvbnN0IHNQYWdlUGF0aCA9IG9QYWdlQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9QYWdlQ29udGV4dCAmJiBvUGFnZUNvbnRleHQuZ2V0TW9kZWwoKSAmJiBvUGFnZUNvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBzTWV0YVBhdGhQYWdlID0gb01ldGFNb2RlbCAmJiBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNQYWdlUGF0aCkucmVwbGFjZSgvXlxcLyovLCBcIlwiKTtcblxuXHRcdC8vIEdldCBzaW5nbGUgbGluZSBjb250ZXh0IGlmIG5lY2Vzc2FyeVxuXHRcdGlmIChhTGluZUNvbnRleHQgJiYgYUxpbmVDb250ZXh0Lmxlbmd0aCkge1xuXHRcdFx0b0NvbnRleHQgPSBhTGluZUNvbnRleHRbMF07XG5cdFx0XHRzUGF0aExpbmUgPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRzTWV0YVBhdGhMaW5lID0gb01ldGFNb2RlbCAmJiBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNQYXRoTGluZSkucmVwbGFjZSgvXlxcLyovLCBcIlwiKTtcblxuXHRcdFx0YUxpbmVDb250ZXh0LmZvckVhY2goKG9TaW5nbGVDb250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRpZiAoc0NoYXJ0UGF0aCkge1xuXHRcdFx0XHRcdGNvbnN0IG9DaGFydENvbnRleHREYXRhID0gdGhpcy5fZ2V0Q2hhcnRDb250ZXh0RGF0YShvU2luZ2xlQ29udGV4dCwgc0NoYXJ0UGF0aCk7XG5cdFx0XHRcdFx0aWYgKG9DaGFydENvbnRleHREYXRhKSB7XG5cdFx0XHRcdFx0XHRhQXR0cmlidXRlcyA9IG9DaGFydENvbnRleHREYXRhLm1hcChmdW5jdGlvbiAob1N1YkNoYXJ0Q29udGV4dERhdGE6IHVua25vd24pIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRjb250ZXh0RGF0YTogb1N1YkNoYXJ0Q29udGV4dERhdGEsXG5cdFx0XHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBgJHtzTWV0YVBhdGhQYWdlfS8ke3NDaGFydFBhdGh9YFxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGFBdHRyaWJ1dGVzLnB1c2goe1xuXHRcdFx0XHRcdFx0Y29udGV4dERhdGE6IG9TaW5nbGVDb250ZXh0LmdldE9iamVjdCgpLFxuXHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBzTWV0YVBhdGhMaW5lXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRhUGFnZUF0dHJpYnV0ZXMucHVzaCh7XG5cdFx0XHRjb250ZXh0RGF0YTogb1BhZ2VDb250ZXh0LmdldE9iamVjdCgpLFxuXHRcdFx0ZW50aXR5U2V0OiBzTWV0YVBhdGhQYWdlXG5cdFx0fSk7XG5cdFx0Ly8gQWRkaW5nIFBhZ2UgQ29udGV4dCB0byBzZWxlY3Rpb24gdmFyaWFudFxuXHRcdGFQYWdlQXR0cmlidXRlcyA9IHRoaXMuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5yZW1vdmVTZW5zaXRpdmVEYXRhKGFQYWdlQXR0cmlidXRlcywgc01ldGFQYXRoUGFnZSk7XG5cdFx0Y29uc3Qgb1BhZ2VMZXZlbFNWID0gQ29tbW9uVXRpbHMuYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQobmV3IFNlbGVjdGlvblZhcmlhbnQoKSwgYVBhZ2VBdHRyaWJ1dGVzLCB0aGlzLmdldFZpZXcoKSk7XG5cdFx0YUF0dHJpYnV0ZXMgPSB0aGlzLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ucmVtb3ZlU2Vuc2l0aXZlRGF0YShhQXR0cmlidXRlcywgc01ldGFQYXRoUGFnZSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnQ6IG9QYWdlTGV2ZWxTVixcblx0XHRcdGF0dHJpYnV0ZXM6IGFBdHRyaWJ1dGVzXG5cdFx0fTtcblx0fVxuXG5cdF9nZXRCYXRjaEdyb3Vwc0ZvclZpZXcoKTogc3RyaW5nW10ge1xuXHRcdGNvbnN0IG9WaWV3RGF0YSA9IHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCksXG5cdFx0XHRvQ29uZmlndXJhdGlvbnMgPSBvVmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb24sXG5cdFx0XHRhQ29uZmlndXJhdGlvbnMgPSBvQ29uZmlndXJhdGlvbnMgJiYgT2JqZWN0LmtleXMob0NvbmZpZ3VyYXRpb25zKSxcblx0XHRcdGFCYXRjaEdyb3VwcyA9IFtcIiRhdXRvLkhlcm9lc1wiLCBcIiRhdXRvLkRlY29yYXRpb25cIiwgXCIkYXV0by5Xb3JrZXJzXCJdO1xuXG5cdFx0aWYgKGFDb25maWd1cmF0aW9ucyAmJiBhQ29uZmlndXJhdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0YUNvbmZpZ3VyYXRpb25zLmZvckVhY2goZnVuY3Rpb24gKHNLZXkpIHtcblx0XHRcdFx0Y29uc3Qgb0NvbmZpZ3VyYXRpb24gPSBvQ29uZmlndXJhdGlvbnNbc0tleV0gYXMgTWljcm9DaGFydE1hbmlmZXN0Q29uZmlndXJhdGlvbjtcblx0XHRcdFx0aWYgKG9Db25maWd1cmF0aW9uLnJlcXVlc3RHcm91cElkID09PSBcIkxvbmdSdW5uZXJzXCIpIHtcblx0XHRcdFx0XHRhQmF0Y2hHcm91cHMucHVzaChcIiRhdXRvLkxvbmdSdW5uZXJzXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGFCYXRjaEdyb3Vwcztcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gaW5pdGlhbGl6ZSBwYWdpbmF0aW9uLlxuXHQgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0IG9mIG9iamVjdCBwYWdlXG5cdCAqIEBwYXJhbSBpbnRlcm5hbE1vZGVsIEludGVybmFsIG1vZGVsXG5cdCAqIEBwYXJhbSBsaXN0QmluZGluZyBQYXJlbnQgbGlzdCBiaW5kaW5nIHRvIHVzZVxuXHQgKi9cblx0X2luaXRpYWxpemVQYWdpbmF0aW9uKGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0LCBpbnRlcm5hbE1vZGVsOiBKU09OTW9kZWwsIGxpc3RCaW5kaW5nPzogT0RhdGFMaXN0QmluZGluZyk6IHZvaWQge1xuXHRcdGNvbnN0IHZpZXdMZXZlbCA9IHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkudmlld0xldmVsO1xuXHRcdGlmICh2aWV3TGV2ZWwgPiAxKSB7XG5cdFx0XHRjb25zdCBwYWdpbmF0b3JDdXJyZW50Q29udGV4dCA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvcGFnaW5hdG9yQ3VycmVudENvbnRleHRcIik7XG5cdFx0XHRpZiAocGFnaW5hdG9yQ3VycmVudENvbnRleHQpIHtcblx0XHRcdFx0Y29uc3QgYmluZGluZ1RvVXNlID0gcGFnaW5hdG9yQ3VycmVudENvbnRleHQuZ2V0QmluZGluZygpO1xuXHRcdFx0XHR0aGlzLnBhZ2luYXRvci5pbml0aWFsaXplKGJpbmRpbmdUb1VzZSwgcGFnaW5hdG9yQ3VycmVudENvbnRleHQpO1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL3BhZ2luYXRvckN1cnJlbnRDb250ZXh0XCIsIG51bGwpO1xuXHRcdFx0fSBlbHNlIGlmIChsaXN0QmluZGluZykge1xuXHRcdFx0XHR0aGlzLnBhZ2luYXRvci5pbml0aWFsaXplKGxpc3RCaW5kaW5nLCBjb250ZXh0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfY2hlY2tEYXRhUG9pbnRUaXRsZUZvckV4dGVybmFsTmF2aWdhdGlvbigpOiB2b2lkIHtcblx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3Qgb0RhdGFQb2ludHMgPSBDb21tb25VdGlscy5nZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24oXG5cdFx0XHRvVmlldy5nZXRWaWV3RGF0YSgpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRcdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb3V0aW5nU2VydmljZSgpLmdldE91dGJvdW5kcygpXG5cdFx0KTtcblx0XHRjb25zdCBvU2hlbGxTZXJ2aWNlcyA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0U2hlbGxTZXJ2aWNlcygpO1xuXHRcdGNvbnN0IG9QYWdlQ29udGV4dCA9IG9WaWV3ICYmIG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaXNIZWFkZXJEUExpbmtWaXNpYmxlXCIsIHt9KTtcblx0XHRpZiAob1BhZ2VDb250ZXh0KSB7XG5cdFx0XHRvUGFnZUNvbnRleHRcblx0XHRcdFx0LnJlcXVlc3RPYmplY3QoKVxuXHRcdFx0XHQudGhlbihmdW5jdGlvbiAob0RhdGE6IG9iamVjdCkge1xuXHRcdFx0XHRcdHJldHVybiBmbkdldExpbmtzKG9EYXRhUG9pbnRzLCBvRGF0YSk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IHJldHJpZXZlIHRoZSBsaW5rcyBmcm9tIHRoZSBzaGVsbCBzZXJ2aWNlXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBAcGFyYW0gb0Vycm9yXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gZm5PbkVycm9yKG9FcnJvcjogc3RyaW5nKTogdm9pZCB7XG5cdFx0XHRMb2cuZXJyb3Iob0Vycm9yKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBmblNldExpbmtFbmFibGVtZW50KGlkOiBzdHJpbmcsIGFTdXBwb3J0ZWRMaW5rczogeyBzdXBwb3J0ZWQ/OiBib29sZWFuIH1bXSk6IHZvaWQge1xuXHRcdFx0Y29uc3Qgc0xpbmtJZCA9IGlkO1xuXHRcdFx0Ly8gcHJvY2VzcyB2aWFibGUgbGlua3MgZnJvbSBnZXRMaW5rcyBmb3IgYWxsIGRhdGFwb2ludHMgaGF2aW5nIG91dGJvdW5kXG5cdFx0XHRpZiAoYVN1cHBvcnRlZExpbmtzICYmIGFTdXBwb3J0ZWRMaW5rcy5sZW5ndGggPT09IDEgJiYgYVN1cHBvcnRlZExpbmtzWzBdLnN1cHBvcnRlZCkge1xuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYGlzSGVhZGVyRFBMaW5rVmlzaWJsZS8ke3NMaW5rSWR9YCwgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogQHBhcmFtIG9TdWJEYXRhUG9pbnRzXG5cdFx0ICogQHBhcmFtIG9QYWdlRGF0YVxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIGZuR2V0TGlua3MoXG5cdFx0XHRvU3ViRGF0YVBvaW50czogUmVjb3JkPFxuXHRcdFx0XHRzdHJpbmcsXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogc3RyaW5nO1xuXHRcdFx0XHRcdGFjdGlvbjogc3RyaW5nO1xuXHRcdFx0XHRcdHNlbWFudGljT2JqZWN0TWFwcGluZzogTWV0YU1vZGVsVHlwZTxTZW1hbnRpY09iamVjdE1hcHBpbmdUeXBlPltdO1xuXHRcdFx0XHR9XG5cdFx0XHQ+LFxuXHRcdFx0b1BhZ2VEYXRhOiBvYmplY3Rcblx0XHQpOiB2b2lkIHtcblx0XHRcdGZvciAoY29uc3Qgc0lkIGluIG9TdWJEYXRhUG9pbnRzKSB7XG5cdFx0XHRcdGNvbnN0IG9EYXRhUG9pbnQgPSBvU3ViRGF0YVBvaW50c1tzSWRdO1xuXHRcdFx0XHRjb25zdCBvUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXHRcdFx0XHRjb25zdCBvTGluayA9IG9WaWV3LmJ5SWQoc0lkKTtcblx0XHRcdFx0aWYgKCFvTGluaykge1xuXHRcdFx0XHRcdC8vIGZvciBkYXRhIHBvaW50cyBjb25maWd1cmVkIGluIGFwcCBkZXNjcmlwdG9yIGJ1dCBub3QgYW5ub3RhdGVkIGluIHRoZSBoZWFkZXJcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBvTGlua0NvbnRleHQgPSBvTGluay5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdFx0XHRjb25zdCBvTGlua0RhdGE6IG9iamVjdCA9IG9MaW5rQ29udGV4dCAmJiBvTGlua0NvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdGxldCBvTWl4ZWRDb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IG1lcmdlKHt9LCBvUGFnZURhdGEsIG9MaW5rRGF0YSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cdFx0XHRcdC8vIHByb2Nlc3Mgc2VtYW50aWMgb2JqZWN0IG1hcHBpbmdzXG5cdFx0XHRcdGlmIChvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0TWFwcGluZykge1xuXHRcdFx0XHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0TWFwcGluZztcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW0gaW4gYVNlbWFudGljT2JqZWN0TWFwcGluZykge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb01hcHBpbmcgPSBhU2VtYW50aWNPYmplY3RNYXBwaW5nW2l0ZW1dO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc01haW5Qcm9wZXJ0eSA9IG9NYXBwaW5nW1wiTG9jYWxQcm9wZXJ0eVwiXSFbXCIkUHJvcGVydHlQYXRoXCJdO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc01hcHBlZFByb3BlcnR5ID0gb01hcHBpbmdbXCJTZW1hbnRpY09iamVjdFByb3BlcnR5XCJdITtcblx0XHRcdFx0XHRcdGlmIChzTWFpblByb3BlcnR5ICE9PSBzTWFwcGVkUHJvcGVydHkpIHtcblx0XHRcdFx0XHRcdFx0aWYgKG9NaXhlZENvbnRleHQuaGFzT3duUHJvcGVydHkoc01haW5Qcm9wZXJ0eSkpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBvTmV3TWFwcGluZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblx0XHRcdFx0XHRcdFx0XHRvTmV3TWFwcGluZ1tzTWFwcGVkUHJvcGVydHldID0gb01peGVkQ29udGV4dFtzTWFpblByb3BlcnR5XTtcblx0XHRcdFx0XHRcdFx0XHRvTWl4ZWRDb250ZXh0ID0gbWVyZ2Uoe30sIG9NaXhlZENvbnRleHQsIG9OZXdNYXBwaW5nKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0XHRcdFx0XHRcdFx0XHRkZWxldGUgb01peGVkQ29udGV4dFtzTWFpblByb3BlcnR5XTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChvTWl4ZWRDb250ZXh0KSB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBzS2V5IGluIG9NaXhlZENvbnRleHQpIHtcblx0XHRcdFx0XHRcdGlmICghc0tleS5zdGFydHNXaXRoKFwiX1wiKSAmJiAhc0tleS5pbmNsdWRlcyhcIm9kYXRhLmNvbnRleHRcIikpIHtcblx0XHRcdFx0XHRcdFx0b1BhcmFtc1tzS2V5XSA9IG9NaXhlZENvbnRleHRbc0tleV07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIHZhbGlkYXRlIGlmIGEgbGluayBtdXN0IGJlIHJlbmRlcmVkXG5cdFx0XHRcdG9TaGVsbFNlcnZpY2VzXG5cdFx0XHRcdFx0LmlzTmF2aWdhdGlvblN1cHBvcnRlZChbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhcmdldDoge1xuXHRcdFx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRcdGFjdGlvbjogb0RhdGFQb2ludC5hY3Rpb25cblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0cGFyYW1zOiBvUGFyYW1zXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XSlcblx0XHRcdFx0XHQudGhlbigoYUxpbmtzKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZm5TZXRMaW5rRW5hYmxlbWVudChzSWQsIGFMaW5rcyk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZm5PbkVycm9yKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfZmluZFN1bW1hcml6ZUJ1dHRvbigpOiBCdXR0b24gfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG9iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGNvbnN0IG9iamVjdFBhZ2VUaXRsZSA9IG9iamVjdFBhZ2UuZ2V0SGVhZGVyVGl0bGUoKSBhcyBPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlO1xuXHRcdGNvbnN0IGFjdGlvbnMgPSBvYmplY3RQYWdlVGl0bGU/LmdldEFjdGlvbnMoKTtcblx0XHRsZXQgc3VtbWFyaXplQnV0dG9uOiBCdXR0b24gfCB1bmRlZmluZWQ7XG5cblx0XHRmb3IgKGNvbnN0IGFjdGlvbiBvZiBhY3Rpb25zKSB7XG5cdFx0XHRpZiAoYWN0aW9uLmlzQTxTdW1tYXJpemF0aW9uQnV0dG9uPihcInNhcC5mZS5tYWNyb3MuYWkuU3VtbWFyaXphdGlvbkJ1dHRvblwiKSkge1xuXHRcdFx0XHRjb25zdCBidXR0b24gPSBhY3Rpb24uZ2V0Q29udGVudCgpIGFzIEJ1dHRvbiB8IHVuZGVmaW5lZDtcblx0XHRcdFx0aWYgKGJ1dHRvbiAmJiBidXR0b24uZ2V0SWQoKS5lbmRzV2l0aChcIjo6U3VtbWFyaXplOjpidXR0b25cIikpIHtcblx0XHRcdFx0XHRzdW1tYXJpemVCdXR0b24gPSBidXR0b247XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gc3VtbWFyaXplQnV0dG9uO1xuXHR9XG5cblx0LyoqXG5cdCAqIEV2YWx1YXRlcyBzdGFydHVwIHBhcmFtZXRlcnMgYW5kIHRyaWdnZXJzIHRoZSBzbWFydCBzdW1tYXJ5IGFjdGlvbiBvbiB0aGUgT2JqZWN0IFBhZ2UgaWYgcmVxdWlyZWQuXG5cdCAqXG5cdCAqIFRoaXMgbWV0aG9kIGNoZWNrcyB3aGV0aGVyIHRoZSBzdGFydHVwIHBhcmFtZXRlcnMgaW5kaWNhdGUgdGhhdCBhIHNtYXJ0IHN1bW1hcnkgc2hvdWxkIGJlIHBlcmZvcm1lZCBmb3IgdGhlIGN1cnJlbnQgT2JqZWN0IFBhZ2UgbGV2ZWwuXG5cdCAqIFRoZSBsZXZlbCBwYXJhbWV0ZXIgZGV0ZXJtaW5lcyB3aGljaCBPYmplY3QgUGFnZSBzaG91bGQgYmUgc3VtbWFyaXplZCwgd2hpY2ggaXMgcmVsZXZhbnQgaW4gRmxleGlibGUgQ29sdW1uIExheW91dCAoRkNMKSBzY2VuYXJpb3Mgd2hlcmVcblx0ICogbXVsdGlwbGUgT2JqZWN0IFBhZ2VzIG1heSBiZSBkaXNwbGF5ZWQgc2ltdWx0YW5lb3VzbHkuXG5cdCAqIElmIG5vIGxldmVsIGlzIHByb3ZpZGVkIGluIHRoZSBzdGFydHVwIHBhcmFtZXRlcnMsIHRoZSBtZXRob2QgZGVmYXVsdHMgdGhlIGxldmVsIHRvIDEuXG5cdCAqIElmIHRoZSBzdW1tYXJ5IGFjdGlvbiBpcyBhbGxvd2VkIGFuZCB0aGUgU21hcnRTdW1tYXJpemUgY2FwYWJpbGl0eSBpcyBhdmFpbGFibGUsIGl0IGxvY2F0ZXMgdGhlIHN1bW1hcml6ZSBidXR0b24gYW5kIHRyaWdnZXJzIGl0cyBwcmVzcyBldmVudC5cblx0ICogVGhlIG1ldGhvZCBlbnN1cmVzIHRoZSBzdW1tYXJ5IGlzIG9ubHkgZXhlY3V0ZWQgb25jZSBwZXIgbmF2aWdhdGlvbiBhbmQgbG9ncyBlcnJvcnMgaWYgcHJlcmVxdWlzaXRlcyBhcmUgbm90IG1ldCBvciB0aGUgYnV0dG9uIGlzIHVuYXZhaWxhYmxlLlxuXHQgKiBBbGwgZXJyb3JzIGVuY291bnRlcmVkIGR1cmluZyB0aGUgcHJvY2VzcyBhcmUgY2F1Z2h0IGFuZCBsb2dnZWQuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfaGFuZGxlU21hcnRTdW1tYXJ5U3RhcnR1cEFjdGlvbigpOiB2b2lkIHtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdGFwcENvbXBvbmVudFxuXHRcdFx0Py5nZXRTdGFydHVwUGFyYW1ldGVycygpXG5cdFx0XHQ/LnRoZW4oKHN0YXJ0dXBQYXJhbXM6IFN0YXJ0dXBQYXJhbWV0ZXJzKSA9PiB7XG5cdFx0XHRcdGlmICghc3RhcnR1cFBhcmFtcy5wcmVmZXJyZWRBY3Rpb24gfHwgIXN0YXJ0dXBQYXJhbXMucHJlZmVycmVkQWN0aW9uWzBdLnN0YXJ0c1dpdGgoXCJzdW1tYXJ5XCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gY2hlY2sgaWYgd2UgYXJlIG9uIHRoZSBjb3JyZWN0IE9QIGJ5IGNoZWNraW5nIHRoZSBsZXZlbCBwcm92aWRlZCBpbiB0aGUgc3RhcnR1cCBwYXJhbWV0ZXJzXG5cdFx0XHRcdGNvbnN0IHZpZXdMZXZlbCA9IHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkudmlld0xldmVsO1xuXHRcdFx0XHRjb25zdCBwcmVmZXJyZWRBY3Rpb25MZXZlbCA9XG5cdFx0XHRcdFx0c3RhcnR1cFBhcmFtcy5wcmVmZXJyZWRBY3Rpb25bMF0gPT09IFwic3VtbWFyeVwiID8gMSA6IHBhcnNlSW50KHN0YXJ0dXBQYXJhbXMucHJlZmVycmVkQWN0aW9uWzBdLnNwbGl0KFwiLVwiKVsxXSwgMTApO1xuXHRcdFx0XHRpZiAoaXNOYU4ocHJlZmVycmVkQWN0aW9uTGV2ZWwpIHx8IHZpZXdMZXZlbCAhPT0gcHJlZmVycmVkQWN0aW9uTGV2ZWwpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDaGVjayBpZiBzdW1tYXJ5IGFjdGlvbiBzaGFsbCBiZSBleGVjdXRlZCBub3cgKGl0IG1pZ2h0IGhhdmUgYWxyZWFkeSBiZWVuIGV4ZWN1dGVkIGJ5IGEgaGlnaGVyIGxldmVsIE9QKVxuXHRcdFx0XHRpZiAoYXBwQ29tcG9uZW50LmdldFByZWZlcnJlZEFjdGlvblN0YXR1cygpID09PSBQcmVmZXJyZWRBY3Rpb25TdGF0dXMuQ2FuUGVyZm9ybSkge1xuXHRcdFx0XHRcdGFwcENvbXBvbmVudC5zZXRQcmVmZXJyZWRBY3Rpb25TdGF0dXMoUHJlZmVycmVkQWN0aW9uU3RhdHVzLkFscmVhZHlQZXJmb3JtZWQpOyAvLyB0byBwcmV2ZW50IG90aGVyIE9QcyBvbiBoaWdoZXIgbGV2ZWxzIHRvIGV4ZWN1dGUgdGhlIHN1bW1hcnkgYWdhaW5cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDaGVjayBpZiBTbWFydFN1bW1hcml6ZSBjYXBhYmlsaXR5IGlzIGF2YWlsYWJsZVxuXHRcdFx0XHRjb25zdCBlbnZpcm9ubWVudFNlcnZpY2UgPSBhcHBDb21wb25lbnQuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKTtcblx0XHRcdFx0aWYgKCFlbnZpcm9ubWVudFNlcnZpY2U/LmVudmlyb25tZW50Q2FwYWJpbGl0aWVzLlNtYXJ0U3VtbWFyaXplKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiU21hcnQgU3VtbWFyaXphdGlvbiB3YXMgbm90IHRyaWdnZXJlZCBiZWNhdXNlIFNtYXJ0U3VtbWFyaXplIGNhcGFiaWxpdHkgaXMgbm90IGF2YWlsYWJsZVwiKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBGaW5kIHRoZSBTdW1tYXJ5IGJ1dHRvblxuXHRcdFx0XHRjb25zdCBzdW1tYXJpemVCdXR0b24gPSB0aGlzLl9maW5kU3VtbWFyaXplQnV0dG9uKCk7XG5cblx0XHRcdFx0aWYgKHN1bW1hcml6ZUJ1dHRvbiAmJiBzdW1tYXJpemVCdXR0b24uZ2V0VmlzaWJsZSgpICYmIHN1bW1hcml6ZUJ1dHRvbi5nZXRFbmFibGVkKCkpIHtcblx0XHRcdFx0XHRzdW1tYXJpemVCdXR0b24uZmlyZVByZXNzKCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcblx0XHRcdFx0XHRcdFwiU21hcnQgU3VtbWFyaXphdGlvbiB3YXMgbm90IHRyaWdnZXJlZCBiZWNhdXNlIHRoZSBTdW1tYXJpemUgYnV0dG9uIGlzIGVpdGhlciBub3QgdmlzaWJsZSBvciBub3QgZW5hYmxlZCBvciBub3QgZm91bmQuXCJcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5jYXRjaCgoZXJyb3I6IHVua25vd24pID0+IHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmV0cmlldmluZyBzdGFydHVwIHBhcmFtZXRlcnMgb3IgdHJpZ2dlcmluZyBzbWFydCBzdW1tYXJ5OlwiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRoYW5kbGVycyA9IHtcblx0XHRvblByaW1hcnlBY3Rpb24oXG5cdFx0XHRvQ29udHJvbGxlcjogT2JqZWN0UGFnZUNvbnRyb2xsZXIsXG5cdFx0XHRvVmlldzogRkVWaWV3LFxuXHRcdFx0b0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0LFxuXHRcdFx0c0FjdGlvbk5hbWU6IHN0cmluZyxcblx0XHRcdG1QYXJhbWV0ZXJzOiB7XG5cdFx0XHRcdHBhcmFtZXRlclZhbHVlcz86IHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogdW5rbm93biB9W107XG5cdFx0XHRcdHNraXBQYXJhbWV0ZXJEaWFsb2c/OiBib29sZWFuO1xuXHRcdFx0XHRjb250ZXh0cz86IE9EYXRhVjRDb250ZXh0IHwgT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdFx0bW9kZWw/OiBPRGF0YU1vZGVsO1xuXHRcdFx0XHRyZXF1aXJlc05hdmlnYXRpb24/OiBib29sZWFuO1xuXHRcdFx0XHRsYWJlbD86IHN0cmluZztcblx0XHRcdFx0aXNOYXZpZ2FibGU/OiBib29sZWFuO1xuXHRcdFx0XHRlbnRpdHlTZXROYW1lPzogc3RyaW5nO1xuXHRcdFx0XHRpbnZvY2F0aW9uR3JvdXBpbmc/OiBzdHJpbmc7XG5cdFx0XHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcD86IHN0cmluZztcblx0XHRcdFx0Y29udHJvbElkPzogc3RyaW5nO1xuXHRcdFx0XHRiU3RhdGljQWN0aW9uPzogYm9vbGVhbjtcblx0XHRcdFx0YXBwbGljYWJsZUNvbnRleHRzPzogT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdFx0bm90QXBwbGljYWJsZUNvbnRleHRzPzogT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdFx0ZW5hYmxlQXV0b1Njcm9sbD86IGJvb2xlYW47XG5cdFx0XHRcdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbj86IHN0cmluZztcblx0XHRcdH0sXG5cdFx0XHRtQ29uZGl0aW9uczoge1xuXHRcdFx0XHRwb3NpdGl2ZUFjdGlvblZpc2libGU6IGJvb2xlYW47XG5cdFx0XHRcdHBvc2l0aXZlQWN0aW9uRW5hYmxlZDogYm9vbGVhbjtcblx0XHRcdFx0ZWRpdEFjdGlvblZpc2libGU6IGJvb2xlYW47XG5cdFx0XHRcdGVkaXRBY3Rpb25FbmFibGVkOiBib29sZWFuO1xuXHRcdFx0fVxuXHRcdCk6IHZvaWQge1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBJbnZva2VzIHRoZSBwYWdlIHByaW1hcnkgYWN0aW9uIG9uIHByZXNzIG9mIEN0cmwrRW50ZXIuXG5cdFx0XHQgKi9cblx0XHRcdGNvbnN0IGlWaWV3TGV2ZWwgPSBvQ29udHJvbGxlci5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS52aWV3TGV2ZWw7XG5cdFx0XHRpZiAobUNvbmRpdGlvbnMucG9zaXRpdmVBY3Rpb25WaXNpYmxlKSB7XG5cdFx0XHRcdGlmIChtQ29uZGl0aW9ucy5wb3NpdGl2ZUFjdGlvbkVuYWJsZWQpIHtcblx0XHRcdFx0XHRvQ29udHJvbGxlci5oYW5kbGVycy5vbkNhbGxBY3Rpb24ob1ZpZXcsIHNBY3Rpb25OYW1lLCBtUGFyYW1ldGVycyk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAobUNvbmRpdGlvbnMuZWRpdEFjdGlvblZpc2libGUpIHtcblx0XHRcdFx0aWYgKG1Db25kaXRpb25zLmVkaXRBY3Rpb25FbmFibGVkKSB7XG5cdFx0XHRcdFx0b0NvbnRyb2xsZXIuX2VkaXREb2N1bWVudCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGlWaWV3TGV2ZWwgPT09IDEgJiYgQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZShvVmlldykpIHtcblx0XHRcdFx0b0NvbnRyb2xsZXIuX3NhdmVEb2N1bWVudCgpO1xuXHRcdFx0fSBlbHNlIGlmIChDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKG9WaWV3KSkge1xuXHRcdFx0XHRvQ29udHJvbGxlci5fYXBwbHlEb2N1bWVudChvQ29udGV4dCk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIE1hbmFnZXMgdGhlIGNvbnRleHQgY2hhbmdlIGV2ZW50IG9uIHRoZSB0YWJsZXMuXG5cdFx0ICogVGhlIGZvY3VzIGlzIHNldCBpZiB0aGlzIGNoYW5nZSBpcyByZWxhdGVkIHRvIGFuIGVkaXRGbG93IGFjdGlvbiBhbmRcblx0XHQgKiBhbiBldmVudCBpcyBmaXJlZCBvbiB0aGUgb2JqZWN0UGFnZSBtZXNzYWdlQnV0dG9uLlxuXHRcdCAqIEBwYXJhbSB0aGlzIFRoZSBvYmplY3RQYWdlIGNvbnRyb2xsZXJcblx0XHQgKiBAcGFyYW0gZXZlbnQgVGhlIFVJNSBldmVudFxuXHRcdCAqL1xuXHRcdGFzeW5jIG9uVGFibGVDb250ZXh0Q2hhbmdlKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyLCBldmVudDogVUk1RXZlbnQ8e30sIFRhYmxlQVBJPik6IFByb21pc2U8dm9pZD4ge1xuXHRcdFx0Y29uc3QgdGFibGVBUEkgPSBldmVudC5nZXRTb3VyY2UoKTtcblx0XHRcdGNvbnN0IHRhYmxlID0gdGFibGVBUEkuY29udGVudDtcblx0XHRcdGNvbnN0IGN1cnJlbnRBY3Rpb25Qcm9taXNlID0gdGhpcy5lZGl0Rmxvdy5nZXRDdXJyZW50QWN0aW9uUHJvbWlzZSgpO1xuXHRcdFx0Y29uc3QgdGFibGVDb250ZXh0cyA9IHRoaXMuX2dldFRhYmxlQmluZGluZyh0YWJsZSk/LmdldEN1cnJlbnRDb250ZXh0cygpO1xuXG5cdFx0XHRpZiAoY3VycmVudEFjdGlvblByb21pc2UgJiYgdGFibGVDb250ZXh0cz8ubGVuZ3RoKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Y29uc3QgYWN0aW9uUmVzcG9uc2UgPSBhd2FpdCBjdXJyZW50QWN0aW9uUHJvbWlzZTtcblx0XHRcdFx0XHRpZiAoYWN0aW9uUmVzcG9uc2U/LmNvbnRyb2xJZCA9PT0gdGFibGUuZ2V0SWQoKSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgYWN0aW9uRGF0YSA9IGFjdGlvblJlc3BvbnNlLm9EYXRhO1xuXHRcdFx0XHRcdFx0Y29uc3Qga2V5cyA9IGFjdGlvblJlc3BvbnNlLmtleXM7XG5cdFx0XHRcdFx0XHRjb25zdCBuZXdJdGVtID0gdGFibGVDb250ZXh0cy5maW5kSW5kZXgoKHRhYmxlQ29udGV4dDogQ29udGV4dCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCB0YWJsZURhdGEgPSB0YWJsZUNvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBrZXlzLmV2ZXJ5KChrZXk6IHN0cmluZykgPT4gdGFibGVEYXRhW2tleV0gPT09IGFjdGlvbkRhdGFba2V5XSk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGlmIChuZXdJdGVtICE9PSAtMSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBkaWFsb2cgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0T3BlbkRpYWxvZ3MoKS5maW5kKChkaWFsb2cpID0+IGRpYWxvZy5kYXRhKFwiRnVsbFNjcmVlbkRpYWxvZ1wiKSAhPT0gdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdGlmIChkaWFsb2cpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBieSBkZXNpZ24sIGEgc2FwLm0uZGlhbG9nIHNldCB0aGUgZm9jdXMgdG8gdGhlIHByZXZpb3VzIGZvY3VzZWQgZWxlbWVudCB3aGVuIGNsb3NpbmcuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gd2Ugc2hvdWxkIHdhaXQgZm9yIHRoZSBkaWFsb2cgdG8gYmUgY2xvc2VkIGJlZm9yZSBzZXQgdGhlIGZvY3VzIHRvIGFub3RoZXIgZWxlbWVudFxuXHRcdFx0XHRcdFx0XHRcdGRpYWxvZy5hdHRhY2hFdmVudE9uY2UoXCJhZnRlckNsb3NlXCIsICgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdHRhYmxlLmZvY3VzUm93KG5ld0l0ZW0sIHRydWUpO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHRhYmxlLmZvY3VzUm93KG5ld0l0ZW0sIHRydWUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHRoaXMuZWRpdEZsb3cuZGVsZXRlQ3VycmVudEFjdGlvblByb21pc2UoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoYEFuIGVycm9yIG9jY3VycyB3aGlsZSBzY3JvbGxpbmcgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgSXRlbTogJHtlfWApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvLyBmaXJlIE1vZGVsQ29udGV4dENoYW5nZSBvbiB0aGUgbWVzc2FnZSBidXR0b24gd2hlbmV2ZXIgdGhlIHRhYmxlIGNvbnRleHQgY2hhbmdlc1xuXHRcdFx0dGhpcy5tZXNzYWdlQnV0dG9uLmZpcmVNb2RlbENvbnRleHRDaGFuZ2UoKTtcblx0XHR9LFxuXG5cdFx0YXN5bmMgb25DYWxsQWN0aW9uKFxuXHRcdFx0b1ZpZXc6IEZFVmlldyxcblx0XHRcdHNBY3Rpb25OYW1lOiBzdHJpbmcsXG5cdFx0XHRtUGFyYW1ldGVyczoge1xuXHRcdFx0XHRwYXJhbWV0ZXJWYWx1ZXM/OiB7IG5hbWU6IHN0cmluZzsgdmFsdWU6IHVua25vd24gfVtdO1xuXHRcdFx0XHRza2lwUGFyYW1ldGVyRGlhbG9nPzogYm9vbGVhbjtcblx0XHRcdFx0Y29udGV4dHM/OiBPRGF0YVY0Q29udGV4dCB8IE9EYXRhVjRDb250ZXh0W107XG5cdFx0XHRcdG1vZGVsPzogT0RhdGFNb2RlbDtcblx0XHRcdFx0cmVxdWlyZXNOYXZpZ2F0aW9uPzogYm9vbGVhbjtcblx0XHRcdFx0bGFiZWw/OiBzdHJpbmc7XG5cdFx0XHRcdGlzTmF2aWdhYmxlPzogYm9vbGVhbjtcblx0XHRcdFx0ZW50aXR5U2V0TmFtZT86IHN0cmluZztcblx0XHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nPzogc3RyaW5nO1xuXHRcdFx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA/OiBzdHJpbmc7XG5cdFx0XHRcdGNvbnRyb2xJZD86IHN0cmluZztcblx0XHRcdFx0YlN0YXRpY0FjdGlvbj86IGJvb2xlYW47XG5cdFx0XHRcdGFwcGxpY2FibGVDb250ZXh0cz86IE9EYXRhVjRDb250ZXh0W107XG5cdFx0XHRcdG5vdEFwcGxpY2FibGVDb250ZXh0cz86IE9EYXRhVjRDb250ZXh0W107XG5cdFx0XHRcdGVuYWJsZUF1dG9TY3JvbGw/OiBib29sZWFuO1xuXHRcdFx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24/OiBzdHJpbmc7XG5cdFx0XHRcdGRpc2FibGVTdHJpY3RIYW5kbGluZz86IGJvb2xlYW47XG5cdFx0XHR9XG5cdFx0KTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0XHRjb25zdCBvQ29udHJvbGxlciA9IG9WaWV3LmdldENvbnRyb2xsZXIoKSBhcyBPYmplY3RQYWdlQ29udHJvbGxlcjtcblxuXHRcdFx0Ly8gV2FpdCBmb3IgVkggdmFsdWVzIHRvIGJlIHJlc29sdmVkIGJlZm9yZSBjYWxsaW5nIHRoZSBhY3Rpb25cblx0XHRcdGF3YWl0IG9Db250cm9sbGVyLmVkaXRGbG93LnN5bmNUYXNrKCk7XG5cblx0XHRcdHJldHVybiBvQ29udHJvbGxlci5lZGl0Rmxvd1xuXHRcdFx0XHQuaW52b2tlQWN0aW9uKHNBY3Rpb25OYW1lLCBtUGFyYW1ldGVycylcblx0XHRcdFx0LnRoZW4ob0NvbnRyb2xsZXIuX3Nob3dNZXNzYWdlUG9wb3Zlci5iaW5kKG9Db250cm9sbGVyLCB1bmRlZmluZWQpKVxuXHRcdFx0XHQuY2F0Y2gob0NvbnRyb2xsZXIuX3Nob3dNZXNzYWdlUG9wb3Zlci5iaW5kKG9Db250cm9sbGVyKSk7XG5cdFx0fSxcblx0XHRvbkRhdGFQb2ludFRpdGxlUHJlc3NlZChcblx0XHRcdG9Db250cm9sbGVyOiBPYmplY3RQYWdlQ29udHJvbGxlcixcblx0XHRcdG9Tb3VyY2U6IENvbnRyb2wsXG5cdFx0XHRvTWFuaWZlc3RPdXRib3VuZDogUmVjb3JkPHN0cmluZywgTWFuaWZlc3RPdXRib3VuZEVudHJ5Pixcblx0XHRcdHNDb250cm9sQ29uZmlnOiBzdHJpbmcsXG5cdFx0XHRzQ29sbGVjdGlvblBhdGg6IHN0cmluZ1xuXHRcdCk6IHZvaWQge1xuXHRcdFx0b01hbmlmZXN0T3V0Ym91bmQgPSB0eXBlb2Ygb01hbmlmZXN0T3V0Ym91bmQgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKG9NYW5pZmVzdE91dGJvdW5kKSA6IG9NYW5pZmVzdE91dGJvdW5kO1xuXHRcdFx0Y29uc3Qgb1RhcmdldEluZm8gPSBvTWFuaWZlc3RPdXRib3VuZFtzQ29udHJvbENvbmZpZ10sXG5cdFx0XHRcdG9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHQgPSBvU291cmNlLmdldEJpbmRpbmdDb250ZXh0KCkhLFxuXHRcdFx0XHRzTWV0YVBhdGggPSBvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0XG5cdFx0XHRcdFx0LmdldE1vZGVsKClcblx0XHRcdFx0XHQuZ2V0TWV0YU1vZGVsKClcblx0XHRcdFx0XHQuZ2V0TWV0YVBhdGgob0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdFx0bGV0IGFTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBDb21tb25VdGlscy5nZXRTZW1hbnRpY09iamVjdE1hcHBpbmcob1RhcmdldEluZm8pLFxuXHRcdFx0XHRhTmF2aWdhdGlvbkRhdGEgPSBvQ29udHJvbGxlci5fZ2V0Q2hhcnRDb250ZXh0RGF0YShvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0LCBzQ29sbGVjdGlvblBhdGgpLFxuXHRcdFx0XHRhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnM7XG5cblx0XHRcdGFOYXZpZ2F0aW9uRGF0YSA9IGFOYXZpZ2F0aW9uRGF0YS5tYXAoZnVuY3Rpb24gKG9OYXZpZ2F0aW9uRGF0YTogdW5rbm93bikge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdGRhdGE6IG9OYXZpZ2F0aW9uRGF0YSxcblx0XHRcdFx0XHRtZXRhUGF0aDogc01ldGFQYXRoICsgKHNDb2xsZWN0aW9uUGF0aCA/IGAvJHtzQ29sbGVjdGlvblBhdGh9YCA6IFwiXCIpXG5cdFx0XHRcdH07XG5cdFx0XHR9KTtcblx0XHRcdGlmIChvVGFyZ2V0SW5mbyAmJiBvVGFyZ2V0SW5mby5wYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdGNvbnN0IG9QYXJhbXMgPSBvVGFyZ2V0SW5mby5wYXJhbWV0ZXJzICYmIG9Db250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24uZ2V0T3V0Ym91bmRQYXJhbXMob1RhcmdldEluZm8ucGFyYW1ldGVycyk7XG5cdFx0XHRcdGlmIChPYmplY3Qua2V5cyhvUGFyYW1zKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0YWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzID0gb1BhcmFtcztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly8gQ2hlY2sgaWYgaW1wbGljaXQgc2VtYW50aWMgb2JqZWN0IG1hcHBpbmcgaXMgbmVlZGVkXG5cdFx0XHRpZiAoYVNlbWFudGljT2JqZWN0TWFwcGluZy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0Y29uc3QgY3VzdG9tRGF0YSA9IG9Tb3VyY2UuZ2V0Q3VzdG9tRGF0YSgpLmZpbmQoKGRhdGEpID0+IGRhdGEuZ2V0S2V5KCkgPT09IFwiVmFsdWVQcm9wZXJ0eVBhdGhcIik7XG5cdFx0XHRcdGlmIChjdXN0b21EYXRhKSB7XG5cdFx0XHRcdFx0YVNlbWFudGljT2JqZWN0TWFwcGluZyA9IG9Db250cm9sbGVyLl9nZXRJbXBsaWNpdFNlbWFudGljT2JqZWN0TWFwcGluZ0ZvckRhdGFQb2ludHMoXG5cdFx0XHRcdFx0XHRjdXN0b21EYXRhLmdldFZhbHVlKCksXG5cdFx0XHRcdFx0XHRvVGFyZ2V0SW5mby5zZW1hbnRpY09iamVjdFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKG9UYXJnZXRJbmZvICYmIG9UYXJnZXRJbmZvLnNlbWFudGljT2JqZWN0ICYmIG9UYXJnZXRJbmZvLmFjdGlvbikge1xuXHRcdFx0XHRvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlKG9UYXJnZXRJbmZvLnNlbWFudGljT2JqZWN0LCBvVGFyZ2V0SW5mby5hY3Rpb24sIHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHM6IGFOYXZpZ2F0aW9uRGF0YSxcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdE1hcHBpbmc6IGFTZW1hbnRpY09iamVjdE1hcHBpbmcsXG5cdFx0XHRcdFx0YWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzOiBhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnNcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFRyaWdnZXJzIGFuIG91dGJvdW5kIG5hdmlnYXRpb24gd2hlbiBhIHVzZXIgY2hvb3NlcyB0aGUgY2hldnJvbi5cblx0XHQgKiBAcGFyYW0gb0NvbnRyb2xsZXJcblx0XHQgKiBAcGFyYW0gc091dGJvdW5kVGFyZ2V0IE5hbWUgb2YgdGhlIG91dGJvdW5kIHRhcmdldCAobmVlZHMgdG8gYmUgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QpXG5cdFx0ICogQHBhcmFtIG9Db250ZXh0IFRoZSBjb250ZXh0IHRoYXQgY29udGFpbnMgdGhlIGRhdGEgZm9yIHRoZSB0YXJnZXQgYXBwXG5cdFx0ICogQHBhcmFtIHNDcmVhdGVQYXRoIENyZWF0ZSBwYXRoIHdoZW4gdGhlIGNoZXZyb24gaXMgY3JlYXRlZC5cblx0XHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIGlzIHJlc29sdmVkIG9uY2UgdGhlIG5hdmlnYXRpb24gaXMgdHJpZ2dlcmVkICg/Pz8gbWF5YmUgb25seSBvbmNlIGZpbmlzaGVkPylcblx0XHQgKiBAZmluYWxcblx0XHQgKi9cblx0XHRhc3luYyBvbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQoXG5cdFx0XHRvQ29udHJvbGxlcjogT2JqZWN0UGFnZUNvbnRyb2xsZXIsXG5cdFx0XHRzT3V0Ym91bmRUYXJnZXQ6IHN0cmluZyxcblx0XHRcdG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCxcblx0XHRcdHNDcmVhdGVQYXRoOiBzdHJpbmdcblx0XHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRcdHJldHVybiBvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZChvQ29udHJvbGxlciwgc091dGJvdW5kVGFyZ2V0LCBvQ29udGV4dCwgc0NyZWF0ZVBhdGgpO1xuXHRcdH0sXG5cblx0XHRvbk5hdmlnYXRlQ2hhbmdlKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyLCBvRXZlbnQ6IFVJNUV2ZW50PHsgc3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24gfT4pOiB2b2lkIHtcblx0XHRcdC8vd2lsbCBiZSBjYWxsZWQgYWx3YXlzIHdoZW4gd2UgY2xpY2sgb24gYSBzZWN0aW9uIHRhYlxuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0dGhpcy5iU2VjdGlvbk5hdmlnYXRlZCA9IHRydWU7XG5cblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdENvbW1vblV0aWxzLmdldElzRWRpdGFibGUodGhpcy5nZXRWaWV3KCkpICYmXG5cdFx0XHRcdHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkuc2VjdGlvbkxheW91dCA9PT0gXCJUYWJzXCIgJiZcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiZXJyb3JOYXZpZ2F0aW9uU2VjdGlvbkZsYWdcIikgPT09IGZhbHNlXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29uc3Qgb1N1YlNlY3Rpb24gPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwic3ViU2VjdGlvblwiKTtcblx0XHRcdFx0dGhpcy5fdXBkYXRlRm9jdXNJbkVkaXRNb2RlKFtvU3ViU2VjdGlvbl0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0b25WYXJpYW50U2VsZWN0ZWQ6IGZ1bmN0aW9uICh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdH0sXG5cdFx0b25WYXJpYW50U2F2ZWQ6IGZ1bmN0aW9uICh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0Ly9UT0RPOiBTaG91bGQgcmVtb3ZlIHRoaXMgc2V0VGltZU91dCBvbmNlIFZhcmlhbnQgTWFuYWdlbWVudCBwcm92aWRlcyBhbiBhcGkgdG8gZmV0Y2ggdGhlIGN1cnJlbnQgdmFyaWFudCBrZXkgb24gc2F2ZVxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdH0sIDIwMDApO1xuXHRcdH0sXG5cdFx0bmF2aWdhdGVUb1N1YlNlY3Rpb246IGZ1bmN0aW9uIChvQ29udHJvbGxlcjogT2JqZWN0UGFnZUNvbnRyb2xsZXIsIHZEZXRhaWxDb25maWc6IHN0cmluZyB8IG9iamVjdCk6IHZvaWQge1xuXHRcdFx0Y29uc3Qgb0RldGFpbENvbmZpZyA9IHR5cGVvZiB2RGV0YWlsQ29uZmlnID09PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZSh2RGV0YWlsQ29uZmlnKSA6IHZEZXRhaWxDb25maWc7XG5cdFx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IG9Db250cm9sbGVyLmdldFZpZXcoKS5ieUlkKFwiZmU6Ok9iamVjdFBhZ2VcIikgYXMgT2JqZWN0UGFnZUxheW91dDtcblx0XHRcdGxldCBvU2VjdGlvbjtcblx0XHRcdGxldCBvU3ViU2VjdGlvbjtcblx0XHRcdGlmIChvRGV0YWlsQ29uZmlnLnNlY3Rpb25JZCkge1xuXHRcdFx0XHRvU2VjdGlvbiA9IG9Db250cm9sbGVyLmdldFZpZXcoKS5ieUlkKG9EZXRhaWxDb25maWcuc2VjdGlvbklkKSBhcyBPYmplY3RQYWdlU2VjdGlvbjtcblx0XHRcdFx0b1N1YlNlY3Rpb24gPSAoXG5cdFx0XHRcdFx0b0RldGFpbENvbmZpZy5zdWJTZWN0aW9uSWRcblx0XHRcdFx0XHRcdD8gb0NvbnRyb2xsZXIuZ2V0VmlldygpLmJ5SWQob0RldGFpbENvbmZpZy5zdWJTZWN0aW9uSWQpXG5cdFx0XHRcdFx0XHQ6IG9TZWN0aW9uICYmIG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkgJiYgb1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKVswXVxuXHRcdFx0XHQpIGFzIE9iamVjdFBhZ2VTdWJTZWN0aW9uO1xuXHRcdFx0fSBlbHNlIGlmIChvRGV0YWlsQ29uZmlnLnN1YlNlY3Rpb25JZCkge1xuXHRcdFx0XHRvU3ViU2VjdGlvbiA9IG9Db250cm9sbGVyLmdldFZpZXcoKS5ieUlkKG9EZXRhaWxDb25maWcuc3ViU2VjdGlvbklkKSBhcyBPYmplY3RQYWdlU3ViU2VjdGlvbjtcblx0XHRcdFx0b1NlY3Rpb24gPSBvU3ViU2VjdGlvbiAmJiAob1N1YlNlY3Rpb24uZ2V0UGFyZW50KCkgYXMgT2JqZWN0UGFnZVNlY3Rpb24pO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFvU2VjdGlvbiB8fCAhb1N1YlNlY3Rpb24gfHwgIW9TZWN0aW9uLmdldFZpc2libGUoKSB8fCAhb1N1YlNlY3Rpb24uZ2V0VmlzaWJsZSgpKSB7XG5cdFx0XHRcdGNvbnN0IHNUaXRsZSA9IGdldFJlc291cmNlTW9kZWwob0NvbnRyb2xsZXIpLmdldFRleHQoXG5cdFx0XHRcdFx0XCJDX1JPVVRJTkdfTkFWSUdBVElPTl9ESVNBQkxFRF9USVRMRVwiLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRvQ29udHJvbGxlci5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS5lbnRpdHlTZXRcblx0XHRcdFx0KTtcblx0XHRcdFx0TG9nLmVycm9yKHNUaXRsZSk7XG5cdFx0XHRcdE1lc3NhZ2VCb3guZXJyb3Ioc1RpdGxlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9PYmplY3RQYWdlLnNldFNlbGVjdGVkU2VjdGlvbihvU3ViU2VjdGlvbi5nZXRJZCgpKTtcblx0XHRcdFx0Ly8gdHJpZ2dlciBpYXBwIHN0YXRlIGNoYW5nZVxuXHRcdFx0XHRvT2JqZWN0UGFnZS5maXJlTmF2aWdhdGUoe1xuXHRcdFx0XHRcdHNlY3Rpb246IG9TZWN0aW9uLFxuXHRcdFx0XHRcdHN1YlNlY3Rpb246IG9TdWJTZWN0aW9uXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRjbG9zZUNvbGxhYm9yYXRpb25TdHJpcDogZnVuY3Rpb24gKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyKTogdm9pZCB7XG5cdFx0XHR0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpLnNldFByb3BlcnR5KFwiL3Nob3dDb2xsYWJvcmF0aW9uU3RyaXBcIiwgZmFsc2UpO1xuXHRcdH0sXG5cblx0XHRjbG9zZU9QTWVzc2FnZVN0cmlwOiBmdW5jdGlvbiAodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIpOiB2b2lkIHtcblx0XHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRcdGNvbnN0IGJJc0luRWRpdE1vZGUgPSBDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKHZpZXcpO1xuXHRcdFx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IHZpZXcuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKTtcblx0XHRcdGNvbnN0IG1lc3NhZ2VzdHJpcEludGVybmFsTW9kZWxDb250ZXh0ID0gaW50ZXJuYWxNb2RlbFxuXHRcdFx0XHQuYmluZENvbnRleHQodGhpcy5nZXRFeHRlbnNpb25BUEkoKS5fZ2V0TWVzc2FnZVN0cmlwQmluZGluZ0NvbnRleHRQYXRoKCkpXG5cdFx0XHRcdC5nZXRCb3VuZENvbnRleHQoKSE7XG5cdFx0XHQvLyBSZW1vdmUgY29udGV4dCBib3VuZCBtZXNzYWdlcyBhbmQgc2V0IHRoZSBwcm9wZXJ0eSB0byBmYWxzZSBmb3IgdGhlIGJhY2tlbmQgdHJhbnNpdGlvbiBtZXNzYWdlcyBpbiBlZGl0IG1vZGUuXG5cdFx0XHRpZiAoIWJJc0luRWRpdE1vZGUgJiYgbWVzc2FnZXN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJPUEJhY2tlbmRNZXNzYWdlVmlzaWJsZVwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRjb25zdCBjb250ZXh0Qm91bmRNZXNzYWdlcyA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKVxuXHRcdFx0XHRcdC5nZXREYXRhKClcblx0XHRcdFx0XHQuZmlsdGVyKFxuXHRcdFx0XHRcdFx0KG1lc3NhZ2U6IE1lc3NhZ2UpID0+XG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdID09PSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCkgJiYgbWVzc2FnZS5nZXRQZXJzaXN0ZW50KCkgPT09IHRydWVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoY29udGV4dEJvdW5kTWVzc2FnZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKGNvbnRleHRCb3VuZE1lc3NhZ2VzKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0bWVzc2FnZXN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJPUEJhY2tlbmRNZXNzYWdlVmlzaWJsZVwiLCBmYWxzZSk7XG5cdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLmhpZGVNZXNzYWdlKCk7XG5cdFx0fVxuXHR9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBPYmplY3RQYWdlQ29udHJvbGxlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUF5R0EsTUFBTUEsZ0JBQWdCLEdBQUdDLFNBQVMsQ0FBQ0QsZ0JBQWdCO0VBQ25ELE1BQU1FLHFCQUFxQixHQUFHRCxTQUFTLENBQUNFLHlCQUF5Qjs7RUFFakU7QUFDQTtBQUNBO0VBRkEsSUFJTUMsb0JBQW9CLElBQUFDLElBQUEsR0FEekJDLGNBQWMsQ0FBQyxrREFBa0QsQ0FBQyxFQUFBQyxLQUFBLEdBSWpFQyxjQUFjLENBQUNDLFdBQVcsQ0FBQyxFQUFBQyxLQUFBLEdBRzNCRixjQUFjLENBQUNHLEtBQUssQ0FBQ0MsUUFBUSxDQUFDQyxjQUFjLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBRzlDTixjQUFjLENBQUNPLGVBQWUsQ0FBQ0gsUUFBUSxDQUFDSSx1QkFBdUIsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHakVULGNBQWMsQ0FBQ1UsU0FBUyxDQUFDTixRQUFRLENBQUNPLGlCQUFpQixDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUdyRFosY0FBYyxDQUFDYSxjQUFjLENBQUNULFFBQVEsQ0FBQ1Usc0JBQXNCLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBRy9EZixjQUFjLENBQUNnQixxQkFBcUIsQ0FBQ1osUUFBUSxDQUFDYSw2QkFBNkIsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHN0VsQixjQUFjLENBQUNtQixvQkFBb0IsQ0FBQ2YsUUFBUSxDQUFDZ0IsNEJBQTRCLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBRzNFckIsY0FBYyxDQUNkc0IsNkJBQTZCLENBQUNsQixRQUFRLENBQUM7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
|
|
1706
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQcm9ncmFtbWluZ01vZGVsIiwiRkVMaWJyYXJ5IiwiUHJlZmVycmVkQWN0aW9uU3RhdHVzIiwiUHJlZmVycmVkQWN0aW9uU3RhdHVzVHlwZSIsIk9iamVjdFBhZ2VDb250cm9sbGVyIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJ1c2luZ0V4dGVuc2lvbiIsIlBsYWNlaG9sZGVyIiwiX2RlYzMiLCJTaGFyZSIsIm92ZXJyaWRlIiwiU2hhcmVPdmVycmlkZXMiLCJfZGVjNCIsIkludGVybmFsUm91dGluZyIsIkludGVybmFsUm91dGluZ092ZXJyaWRlIiwiX2RlYzUiLCJQYWdpbmF0b3IiLCJQYWdpbmF0b3JPdmVycmlkZSIsIl9kZWM2IiwiTWVzc2FnZUhhbmRsZXIiLCJNZXNzYWdlSGFuZGxlck92ZXJyaWRlIiwiX2RlYzciLCJJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSIsIl9kZWM4IiwiQ29sbGFib3JhdGlvbk1hbmFnZXIiLCJDb2xsYWJvcmF0aW9uTWFuYWdlck92ZXJyaWRlIiwiX2RlYzkiLCJJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldE5hdmlnYXRpb25Nb2RlIiwiYklzU3RpY2t5RWRpdE1vZGUiLCJnZXRWaWV3IiwiZ2V0Q29udHJvbGxlciIsImdldFN0aWNreUVkaXRNb2RlIiwidW5kZWZpbmVkIiwiX2RlYzEwIiwiVmlld1N0YXRlIiwiVmlld1N0YXRlT3ZlcnJpZGVzIiwiX2RlYzExIiwiUGFnZVJlYWR5IiwiaXNDb250ZXh0RXhwZWN0ZWQiLCJfZGVjMTIiLCJwdWJsaWNFeHRlbnNpb24iLCJfZGVjMTMiLCJmaW5hbEV4dGVuc2lvbiIsIl9kZWMxNCIsIl9kZWMxNSIsImV4dGVuc2libGUiLCJPdmVycmlkZUV4ZWN1dGlvbiIsIkFmdGVyIiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9QYWdlQ29udHJvbGxlciIsIl90aGlzIiwiX2xlbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsIl9kZXNjcmlwdG9yMyIsIl9kZXNjcmlwdG9yNCIsIl9kZXNjcmlwdG9yNSIsIl9kZXNjcmlwdG9yNiIsIl9kZXNjcmlwdG9yNyIsIl9kZXNjcmlwdG9yOCIsIl9kZXNjcmlwdG9yOSIsIl9kZXNjcmlwdG9yMTAiLCJpbnZhbGlkYXRlVGl0bGVIaWVyYXJjaHlDYWNoZVNldFVwIiwibWVyZ2VQYXRjaERyYWZ0IiwiaXNGaXJzdEJpbmRpbmciLCJoYW5kbGVycyIsIm9uUHJpbWFyeUFjdGlvbiIsIm9Db250cm9sbGVyIiwib1ZpZXciLCJvQ29udGV4dCIsInNBY3Rpb25OYW1lIiwibVBhcmFtZXRlcnMiLCJtQ29uZGl0aW9ucyIsImlWaWV3TGV2ZWwiLCJnZXRWaWV3RGF0YSIsInZpZXdMZXZlbCIsInBvc2l0aXZlQWN0aW9uVmlzaWJsZSIsInBvc2l0aXZlQWN0aW9uRW5hYmxlZCIsIm9uQ2FsbEFjdGlvbiIsImVkaXRBY3Rpb25WaXNpYmxlIiwiZWRpdEFjdGlvbkVuYWJsZWQiLCJfZWRpdERvY3VtZW50IiwiQ29tbW9uVXRpbHMiLCJnZXRJc0VkaXRhYmxlIiwiX3NhdmVEb2N1bWVudCIsIl9hcHBseURvY3VtZW50Iiwib25UYWJsZUNvbnRleHRDaGFuZ2UiLCJldmVudCIsInRhYmxlQVBJIiwiZ2V0U291cmNlIiwidGFibGUiLCJjb250ZW50IiwiY3VycmVudEFjdGlvblByb21pc2UiLCJlZGl0RmxvdyIsImdldEN1cnJlbnRBY3Rpb25Qcm9taXNlIiwidGFibGVDb250ZXh0cyIsIl9nZXRUYWJsZUJpbmRpbmciLCJnZXRDdXJyZW50Q29udGV4dHMiLCJhY3Rpb25SZXNwb25zZSIsImNvbnRyb2xJZCIsImdldElkIiwiYWN0aW9uRGF0YSIsIm9EYXRhIiwia2V5cyIsIm5ld0l0ZW0iLCJmaW5kSW5kZXgiLCJ0YWJsZUNvbnRleHQiLCJ0YWJsZURhdGEiLCJnZXRPYmplY3QiLCJldmVyeSIsImtleSIsImRpYWxvZyIsIkluc3RhbmNlTWFuYWdlciIsImdldE9wZW5EaWFsb2dzIiwiZmluZCIsImRhdGEiLCJhdHRhY2hFdmVudE9uY2UiLCJmb2N1c1JvdyIsImRlbGV0ZUN1cnJlbnRBY3Rpb25Qcm9taXNlIiwiZSIsIkxvZyIsImVycm9yIiwibWVzc2FnZUJ1dHRvbiIsImZpcmVNb2RlbENvbnRleHRDaGFuZ2UiLCJzeW5jVGFzayIsImludm9rZUFjdGlvbiIsInRoZW4iLCJfc2hvd01lc3NhZ2VQb3BvdmVyIiwiYmluZCIsImNhdGNoIiwib25EYXRhUG9pbnRUaXRsZVByZXNzZWQiLCJvU291cmNlIiwib01hbmlmZXN0T3V0Ym91bmQiLCJzQ29udHJvbENvbmZpZyIsInNDb2xsZWN0aW9uUGF0aCIsIkpTT04iLCJwYXJzZSIsIm9UYXJnZXRJbmZvIiwib0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0Iiwic01ldGFQYXRoIiwiZ2V0TW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJnZXRNZXRhUGF0aCIsImdldFBhdGgiLCJhU2VtYW50aWNPYmplY3RNYXBwaW5nIiwiZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nIiwiYU5hdmlnYXRpb25EYXRhIiwiX2dldENoYXJ0Q29udGV4dERhdGEiLCJhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnMiLCJtYXAiLCJvTmF2aWdhdGlvbkRhdGEiLCJtZXRhUGF0aCIsInBhcmFtZXRlcnMiLCJvUGFyYW1zIiwiX2ludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldE91dGJvdW5kUGFyYW1zIiwiT2JqZWN0IiwiY3VzdG9tRGF0YSIsImdldEN1c3RvbURhdGEiLCJnZXRLZXkiLCJfZ2V0SW1wbGljaXRTZW1hbnRpY09iamVjdE1hcHBpbmdGb3JEYXRhUG9pbnRzIiwiZ2V0VmFsdWUiLCJzZW1hbnRpY09iamVjdCIsImFjdGlvbiIsIm5hdmlnYXRlIiwibmF2aWdhdGlvbkNvbnRleHRzIiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwib25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kIiwic091dGJvdW5kVGFyZ2V0Iiwic0NyZWF0ZVBhdGgiLCJvbk5hdmlnYXRlQ2hhbmdlIiwib0V2ZW50IiwiZ2V0RXh0ZW5zaW9uQVBJIiwidXBkYXRlQXBwU3RhdGUiLCJiU2VjdGlvbk5hdmlnYXRlZCIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsInNlY3Rpb25MYXlvdXQiLCJnZXRQcm9wZXJ0eSIsIm9TdWJTZWN0aW9uIiwiZ2V0UGFyYW1ldGVyIiwiX3VwZGF0ZUZvY3VzSW5FZGl0TW9kZSIsIm9uVmFyaWFudFNlbGVjdGVkIiwib25WYXJpYW50U2F2ZWQiLCJzZXRUaW1lb3V0IiwibmF2aWdhdGVUb1N1YlNlY3Rpb24iLCJ2RGV0YWlsQ29uZmlnIiwib0RldGFpbENvbmZpZyIsIm9PYmplY3RQYWdlIiwiYnlJZCIsIm9TZWN0aW9uIiwic2VjdGlvbklkIiwic3ViU2VjdGlvbklkIiwiZ2V0U3ViU2VjdGlvbnMiLCJnZXRQYXJlbnQiLCJnZXRWaXNpYmxlIiwic1RpdGxlIiwiZ2V0UmVzb3VyY2VNb2RlbCIsImdldFRleHQiLCJlbnRpdHlTZXQiLCJNZXNzYWdlQm94Iiwic2V0U2VsZWN0ZWRTZWN0aW9uIiwiZmlyZU5hdmlnYXRlIiwic2VjdGlvbiIsInN1YlNlY3Rpb24iLCJjbG9zZUNvbGxhYm9yYXRpb25TdHJpcCIsInNldFByb3BlcnR5IiwiY2xvc2VPUE1lc3NhZ2VTdHJpcCIsInZpZXciLCJiSXNJbkVkaXRNb2RlIiwiaW50ZXJuYWxNb2RlbCIsIm1lc3NhZ2VzdHJpcEludGVybmFsTW9kZWxDb250ZXh0IiwiYmluZENvbnRleHQiLCJfZ2V0TWVzc2FnZVN0cmlwQmluZGluZ0NvbnRleHRQYXRoIiwiZ2V0Qm91bmRDb250ZXh0IiwiY29udGV4dEJvdW5kTWVzc2FnZXMiLCJNZXNzYWdpbmciLCJnZXRNZXNzYWdlTW9kZWwiLCJnZXREYXRhIiwiZmlsdGVyIiwibWVzc2FnZSIsImdldFRhcmdldHMiLCJnZXRQZXJzaXN0ZW50IiwicmVtb3ZlTWVzc2FnZXMiLCJoaWRlTWVzc2FnZSIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwic0lkIiwibUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzIiwiRXh0ZW5zaW9uQVBJIiwiZXh0ZW5zaW9uQVBJIiwib25Jbml0IiwiX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sIiwiZ2V0T3duZXJDb21wb25lbnQiLCJwYWdlIiwidmlzaWJpbGl0eSIsIml0ZW1zIiwiX2dldEJhdGNoR3JvdXBzRm9yVmlldyIsImdldEVuYWJsZUxhenlMb2FkaW5nIiwiYXR0YWNoRXZlbnQiLCJfaGFuZGxlU3ViU2VjdGlvbkVudGVyZWRWaWV3UG9ydCIsIm1lc3NhZ2VCaW5kaW5nIiwiYmluZExpc3QiLCJhdHRhY2hDaGFuZ2UiLCJfZm5TaG93T1BNZXNzYWdlIiwiX2hhbmRsZVNtYXJ0U3VtbWFyeVN0YXJ0dXBBY3Rpb24iLCJvbkV4aXQiLCJkZXN0cm95Iiwib01lc3NhZ2VQb3BvdmVyIiwiaXNPcGVuIiwiY2xvc2UiLCJpc0tlZXBBbGl2ZSIsInNldEtlZXBBbGl2ZSIsImNvbGxhYm9yYXRpdmVEcmFmdCIsImRpc2Nvbm5lY3QiLCJkZXRhY2hDaGFuZ2UiLCJnZXRBcHBDb21wb25lbnQiLCJpc1N1c3BlbmRlZCIsIm1lc3NhZ2VzIiwiX3Nob3dNZXNzYWdlcyIsIm9UYWJsZSIsImdldFJvd0JpbmRpbmciLCJjaGVja1NlY3Rpb25zRm9yTm9uUmVzcG9uc2l2ZVRhYmxlIiwic3ViU2VjdGlvbnMiLCJjaGFuZ2VDbGFzc0ZvclRhYmxlcyIsImxhc3RWaXNpYmxlU3ViU2VjdGlvbiIsImJsb2NrcyIsImdldEJsb2NrcyIsImdldE1vcmVCbG9ja3MiLCJzZWFyY2hUYWJsZUluQmxvY2siLCJ0YWJsZVR5cGUiLCJpc0EiLCJnZXRUeXBlIiwiZ2V0VGFibGVEZWZpbml0aW9uIiwiY29udHJvbCIsInJvd0NvdW50TW9kZSIsImFkZFN0eWxlQ2xhc3MiLCJkZXRhY2hFdmVudCIsInN1YlNlY3Rpb25JbmRleCIsImJsb2NrIiwiZ2V0VGFibGVBUEkiLCJtYWluQ29udGVudCIsImdldE1haW5Db250ZW50IiwibWFpbkNvbnRlbnRUYWJsZUFQSSIsInNpZGVDb250ZW50IiwiZ2V0U2lkZUNvbnRlbnQiLCJzaWRlQ29udGVudFRhYmxlQVBJIiwib25CZWZvcmVSZW5kZXJpbmciLCJQYWdlQ29udHJvbGxlciIsImFwcGx5IiwicmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCIsIkNvbW1vbkhlbHBlciIsInNldE1ldGFNb2RlbCIsIm9uQWZ0ZXJSZW5kZXJpbmciLCJnZXRVc2VJY29uVGFiQmFyIiwic2VjdGlvbnMiLCJnZXRTZWN0aW9ucyIsIl9nZXRBbGxTdWJTZWN0aW9ucyIsIl9vbkJlZm9yZUJpbmRpbmciLCJhVGFibGVzIiwiX2ZpbmRUYWJsZXMiLCJvSW50ZXJuYWxNb2RlbCIsImFCYXRjaEdyb3VwcyIsIm9GYXN0Q3JlYXRpb25Sb3ciLCJwdXNoIiwicmVhc29uIiwiTmF2aWdhdGlvblJlYXNvbiIsIkVkaXRGbG93QWN0aW9uIiwiX2Nsb3NlU2lkZUNvbnRlbnQiLCJvcENvbnRleHQiLCJoYXNQZW5kaW5nQ2hhbmdlcyIsInNvbWUiLCJnZXRCaW5kaW5nIiwicmVzZXRDaGFuZ2VzIiwiaXRlbSIsImdldENyZWF0aW9uUm93Iiwic2V0QmluZGluZ0NvbnRleHQiLCJmblNjcm9sbFRvUHJlc2VudFNlY3Rpb24iLCJpc0ZpcnN0UmVuZGVyaW5nIiwiYlBlcnNpc3RPUFNjcm9sbCIsImZuT1BSZW5kZXJpbmdMYXlvdXQiLCJlZGl0YWJsZUhlYWRlckNvbnRlbnQiLCJyZW1vdmVFdmVudERlbGVnYXRlIiwiYWRkRXZlbnREZWxlZ2F0ZSIsIl9pbml0aWFsaXplUGFnaW5hdGlvbiIsImxpc3RCaW5kaW5nIiwiZmlyc3RTdWJTZWN0aW9uVmlzaWJpbGl0eUJpbmRpbmciLCJfZ2V0Zmlyc3RTdWJTZWN0aW9uVmlzaWJpbGl0eUJpbmRpbmciLCJ1c2VMYXp5TG9hZGVyT3B0aW1pemF0aW9ucyIsInNldFZpc2libGUiLCJNRENUYWJsZVByb21pc2VzIiwiX2dldEFsbEJsb2NrcyIsImdldENvbnRlbnQiLCJpbml0aWFsaXplZCIsIlByb21pc2UiLCJhbGwiLCJfZGlzYWJsZUJsb2Nrc0JpbmRpbmdzIiwicGxhY2Vob2xkZXIiLCJpc1BsYWNlaG9sZGVyRW5hYmxlZCIsInNob3dQbGFjZWhvbGRlciIsIm9OYXZDb250YWluZXIiLCJvQ29udGFpbmVyIiwiZW5hYmxlQW5pbWF0aW9uIiwiVVJMU2VhcmNoUGFyYW1zIiwid2luZG93IiwibG9jYXRpb24iLCJzZWFyY2giLCJnZXQiLCJnZXRGaXJzdEVkaXRhYmxlSW5wdXQiLCJkb21FZGl0YWJsZUVsZW1lbnQiLCJfZ2V0Rmlyc3RFZGl0YWJsZUlucHV0IiwiVUk1RWxlbWVudCIsImNsb3Nlc3RUbyIsImdldEZpcnN0Q2xpY2thYmxlRWxlbWVudCIsIm9iamVjdFBhZ2UiLCJmaXJzdENsaWNrYWJsZUVsZW1lbnQiLCJhY3Rpb25zIiwiZ2V0SGVhZGVyVGl0bGUiLCJnZXRBY3Rpb25zIiwiZ2V0RW5hYmxlZCIsImFTZWN0aW9ucyIsImJVc2VJY29uVGFiQmFyIiwiaVNraXAiLCJiRWRpdGFibGVIZWFkZXIiLCJmaXJzdFZpc2liaWxpdHlCaW5kaW5nIiwiaVNlY3Rpb24iLCJhU3ViU2VjdGlvbnMiLCJpU3ViU2VjdGlvbiIsImRpc2FibGVCaW5kaW5nQ29udGV4dENvbmRpdGlvbiIsImZvckVhY2giLCJzdWJCbG9jayIsIl9nZXRGaXJzdEVtcHR5TWFuZGF0b3J5RmllbGRGcm9tU3ViU2VjdGlvbiIsImFCbG9ja3MiLCJibG9ja0NvbnRyb2wiLCJhRm9ybUNvbnRhaW5lcnMiLCJnZXRGb3JtQ29udGFpbmVycyIsImZvcm1Db250YWluZXIiLCJhRm9ybUVsZW1lbnRzIiwiZ2V0Rm9ybUVsZW1lbnRzIiwiZm9ybUVsZW1lbnQiLCJhRmllbGRzIiwiZ2V0RmllbGRzIiwiZW1wdHlGaWVsZCIsImdldEZpcnN0RW1wdHlSZXF1aXJlZEZpZWxkIiwiZmllbGRzIiwiZ2V0UmVxdWlyZWQiLCJpc0VtcHR5IiwiZ2V0TXVsdGlWYWx1ZUZpZWxkIiwiZ2V0SXRlbXMiLCJ2YWx1ZSIsImRlYnVnIiwib01hbmRhdG9yeUZpZWxkIiwib0ZpZWxkVG9Gb2N1cyIsImdldENvbnRlbnRFZGl0IiwiZm9jdXNJbmZvIiwiZ2V0Rm9jdXNJbmZvIiwidGFyZ2V0SW5mbyIsInNpbGVudCIsImZvY3VzIiwiYWxsc3ViU2VjdGlvbnMiLCJjdXJyZW50TW9kZWwiLCJnZXRCaW5kaW5ncyIsImJpbmRpbmciLCJfb25CYWNrTmF2aWdhdGlvbkluRHJhZnQiLCJtZXNzYWdlSGFuZGxlciIsInJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyIsIm5hdkJhY2siLCJjdXJyZW50VVJMIiwiZG9jdW1lbnQiLCJVUkwiLCJoaXN0b3J5IiwiYmFjayIsIl9yb3V0aW5nIiwibmF2aWdhdGVCYWNrRnJvbUNvbnRleHQiLCJnZXRSb3V0ZXJQcm94eSIsImNoZWNrSWZCYWNrSGFzU2FtZUNvbnRleHQiLCJnZXRTaGVsbFNlcnZpY2VzIiwic2V0QmFja05hdmlnYXRpb24iLCJ3YXJuaW5nIiwiaGlkZGVuRHJhZnRFbmFibGVkIiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJnZXRDYXBhYmlsaXRpZXMiLCJIaWRkZW5EcmFmdCIsImVuYWJsZWQiLCJkcmFmdCIsInByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uIiwiRnVuY3Rpb24iLCJOYXZpZ2F0aW9uVHlwZSIsIkJhY2tOYXZpZ2F0aW9uIiwiX29uQWZ0ZXJCaW5kaW5nIiwiaW5wdXRCaW5kaW5nQ29udGV4dCIsIl9zaWRlRWZmZWN0cyIsImNsZWFyRmllbGRHcm91cHNWYWxpZGl0eSIsImJpbmRpbmdDb250ZXh0IiwiYUlCTkFjdGlvbnMiLCJnZXRJQk5BY3Rpb25zIiwib1RhYmxlUm93QmluZGluZyIsIk1vZGVsSGVscGVyIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwicmVtb3ZlQ2FjaGVzQW5kTWVzc2FnZXMiLCJvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwidGFibGVEZWZpbml0aW9uIiwib3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiQWN0aW9uUnVudGltZSIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJjbGVhclNlbGVjdGlvbiIsIm9PYmplY3RQYWdlVGl0bGUiLCJhSUJOSGVhZGVyQWN0aW9ucyIsImNvbmNhdCIsInVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5Iiwib01vZGVsIiwib0ZpbmFsVUlTdGF0ZSIsInJlc29sdmUiLCJoYW5kbGVUYWJsZU1vZGlmaWNhdGlvbnMiLCJvQmluZGluZyIsImZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cyIsIlRhYmxlSGVscGVyIiwiZW5hYmxlRmFzdENyZWF0aW9uUm93IiwiZ2V0Q29udGV4dCIsImZuSGFuZGxlQ2hhbmdlIiwiY29tcHV0ZU1vZGVsc0ZvckVkaXRNb2RlIiwiX3VwZGF0ZVJlbGF0ZWRBcHBzIiwiY3VycmVudEJpbmRpbmciLCJoYW5kbGVQYXRjaFNlbnQiLCJUYWJsZVV0aWxzIiwid2hlbkJvdW5kIiwib0Vycm9yIiwiX3RyaWdnZXJWaXNpYmxlU3ViU2VjdGlvbnNFdmVudHMiLCJ1cGRhdGVFZGl0QnV0dG9uVmlzaWJpbGl0eUFuZEVuYWJsZW1lbnQiLCJfdXBkYXRlQXZhaWxhYmxlQ2FyZHMiLCJyZWNvbW1lbmRhdGlvbnMiLCJjbGVhclJlY29tbWVuZGF0aW9ucyIsImRpc3BsYXlDb2xsYWJvcmF0aW9uTWVzc2FnZSIsInJlZGlyZWN0ZWRUb05vbkRyYWZ0IiwiX3NldE9QTWVzc2FnZVN0cmlwSW50ZXJuYWxDb250ZXh0IiwiYXBwbHlBcHBTdGF0ZSIsImdldEFwcFN0YXRlSGFuZGxlciIsInBhZ2VSZWFkeSIsIndhaXRGb3IiLCJjYXJkcyIsImNvbGxhYm9yYXRpb25NYW5hZ2VyIiwiY29sbGVjdEF2YWlsYWJsZUNhcmRzIiwiY2FyZE9iamVjdCIsInVwZGF0ZUNhcmRzIiwicGFyZW50QXBwSWQiLCJnZXRDb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2UiLCJhZGRDYXJkc1RvQ29sbGFib3JhdGlvbk1hbmFnZXIiLCJzaGFyZUF2YWlsYWJsZUNhcmRzIiwiaW50ZXJuYWxNb2RlbENvbnRleHQiLCJmaW5kRWxlbWVudHMiLCJlbGVtIiwibWVzc2FnZVN0cmlwIiwiZW50aXR5TmFtZSIsInJlc291cmNlQnVuZGxlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiY29sbGFib3JhdGlvbk1lc3NhZ2UiLCJNZXNzYWdlIiwidHlwZSIsIk1lc3NhZ2VUeXBlIiwiSW5mb3JtYXRpb24iLCJ0YXJnZXQiLCJhZGRNZXNzYWdlcyIsIm9uUGFnZVJlYWR5Iiwic2V0Rm9jdXMiLCJpc0luRGlzcGxheU1vZGUiLCJvRmlyc3RDbGlja2FibGVFbGVtZW50Iiwib1NlbGVjdGVkU2VjdGlvbiIsImdldEVsZW1lbnRCeUlkIiwiZ2V0U2VsZWN0ZWRTZWN0aW9uIiwiY3R4dCIsIm9CaW5kaW5nQ29udGV4dCIsImJJc1N0aWNreU1vZGUiLCJvQXBwQ29tcG9uZW50IiwiaXNFZGl0YWJsZSIsImZldGNoQW5kQXBwbHlSZWNvbW1lbmRhdGlvbnMiLCJjb250ZXh0IiwiZm9yY2VGb2N1cyIsIl9jaGVja0RhdGFQb2ludFRpdGxlRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uIiwiRGV2aWNlIiwic3VwcG9ydCIsInRvdWNoIiwic2F2ZUJ1dHRvbiIsImF1dG9RdWV1ZVVubG9jayIsImF1dG9RdWV1ZUxvY2siLCJpc0xvY2tlZCIsInVubG9jayIsImRldGFjaEJyb3dzZXJFdmVudCIsImF0dGFjaEJyb3dzZXJFdmVudCIsImxvY2siLCJfZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24iLCJvT2JqZWN0UGFnZVN1YnRpdGxlIiwib0N1c3RvbURhdGEiLCJvT2JqZWN0UGFnZURlc2NyaXB0aW9uIiwiZXh0cmFjdFBhdGhzIiwiYmluZGluZ0luZm8iLCJmcm9tIiwiU2V0IiwicGFydHMiLCJwYXJ0IiwibW9kZWwiLCJwYXRoIiwiQm9vbGVhbiIsInN1YnRpdGxlUGF0aHMiLCJnZXRCaW5kaW5nSW5mbyIsImRlc2NyaXB0aW9uUGF0aHMiLCJwYXRoc1RvUmVzb2x2ZSIsImFwcENvbXBvbmVudCIsInJvb3RWaWV3Q29udHJvbGxlciIsImdldFJvb3RWaWV3Q29udHJvbGxlciIsImZuQ2xlYXJDYWNoZVRpdGxlIiwiaW52YWxpZGF0ZVRpdGxlSGllcmFyY2h5Q2FjaGUiLCJvT2JqZWN0UGFnZUNvbnRleHQiLCJidWlsZCIsInRpdGxlIiwic3VidGl0bGUiLCJpbnRlbnQiLCJpY29uIiwiZGVzY3JpcHRpb24iLCJwIiwicmVxdWVzdE9iamVjdCIsIl9leGVjdXRlVGFiU2hvcnRDdXQiLCJvRXhlY3V0aW9uIiwiaVNlY3Rpb25JbmRleE1heCIsInNDb21tYW5kIiwiZ2V0Q29tbWFuZCIsIm5ld1NlY3Rpb24iLCJpU2VsZWN0ZWRTZWN0aW9uSW5kZXgiLCJpbmRleE9mU2VjdGlvbiIsIl9nZXRGb290ZXJWaXNpYmlsaXR5Iiwic1ZpZXdJZCIsImlzSGlkZGVuRHJhZnRFbmFibGVkIiwib01lc3NhZ2UiLCJpc0Vycm9yTWVzc2FnZSIsInZhbGlkYXRpb24iLCJtZXNzYWdlVmFsaWRhdGlvbiIsImluY2x1ZGVzIiwiZXJyIiwib1JldCIsImlzRWRpdE1vZGUiLCJjdXJyZW50UGFnZVZpZXciLCJpc0ZjbEVuYWJsZWQiLCJnZXRSaWdodG1vc3RWaWV3IiwiZ2V0Um9vdENvbnRhaW5lciIsImdldEN1cnJlbnRQYWdlIiwib01lc3NhZ2VCdXR0b24iLCJvSXRlbUJpbmRpbmciLCJnZXRMZW5ndGgiLCJvcGVuQnkiLCJCdXN5TG9ja2VyIiwiZWRpdERvY3VtZW50IiwiZmluYWxseSIsInByb3BlcnR5UGF0aCIsIkxvY2FsUHJvcGVydHkiLCIkUHJvcGVydHlQYXRoIiwiU2VtYW50aWNPYmplY3RQcm9wZXJ0eSIsIl92YWxpZGF0ZURvY3VtZW50IiwiZ2V0QWN0aXZlRWxlbWVudCIsImJ5UGFzc1NpZGVFZmZlY3RzIiwiaXNUcmFuc2llbnQiLCJjcmVhdGVkIiwiaG9sZE1lc3NhZ2VzRm9yQ29udHJvbCIsInJldCIsImV4ZWN1dGVHbG9iYWxWYWxpZGF0aW9uIiwic2hvd01lc3NhZ2VzIiwic2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZW50aXR5VHlwZSIsImdldEVudGl0eVR5cGVGcm9tQ29udGV4dCIsImdsb2JhbFNpZGVFZmZlY3RzIiwiZ2V0R2xvYmFsT0RhdGFFbnRpdHlTaWRlRWZmZWN0cyIsInNpZGVFZmZlY3RzIiwicmVxdWVzdFNpZGVFZmZlY3RzIiwiZHJhZnRSb290Q29udGV4dCIsImNyZWF0ZVJvb3RDb250ZXh0IiwiRHJhZnQiLCJleGVjdXRlRHJhZnRWYWxpZGF0aW9uIiwiaXNDb25uZWN0ZWQiLCJza2lwQmluZGluZ1RvVmlldyIsImF3YWl0Q3JlYXRlRG9jdW1lbnRzIiwiZXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvciIsImlzQ29sbGFib3JhdGlvbkVuYWJsZWQiLCJkaWFsb2dBY3Rpb24iLCJDb2xsYWJvcmF0aW9uRGlzY2FyZCIsImdldFVzZXJBY3Rpb24iLCJjcmVhdGlvblJvdyIsInRhYmxlQmluZGluZyIsImNvbnRleHRLZXlzIiwic3RhcnRzV2l0aCIsImNyZWF0ZURvY3VtZW50IiwiY3JlYXRpb25Nb2RlIiwiY3JlYXRlQXRFbmQiLCJza2lwU2lkZUVmZmVjdHMiLCJpc1NraXBCaW5kaW5nVG9WaWV3IiwiaXNTdGFuZGFyZFNhdmUiLCJiaW5kaW5ncyIsInNhdmVEb2N1bWVudCIsImJFeGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yIiwiUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbiIsIkNvbnRpbnVlIiwiX2NhbmNlbERvY3VtZW50IiwiY2FuY2VsQnV0dG9uIiwibGFzdEZvY3VzZWRDb250cm9sSWQiLCJzaG91bGRTa2lwRGlzY2FyZFBvcG92ZXIiLCJpc0RvY3VtZW50TW9kaWZpZWQiLCJVaU1vZGVsQ29uc3RhbnRzIiwiRG9jdW1lbnRNb2RpZmllZCIsImFmdGVyQ2FuY2VsIiwicHJvbWlzZVJlc3VsdCIsImNhbmNlbERvY3VtZW50Iiwic2tpcERpc2NhcmRQb3BvdmVyIiwiYXBwbHlEb2N1bWVudCIsInNob3dSZWxhdGVkQXBwcyIsInVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyIsIl9maW5kQ29udHJvbEluU3ViU2VjdGlvbiIsImFQYXJlbnRFbGVtZW50IiwiYVN1YnNlY3Rpb24iLCJhQ29udHJvbHMiLCJiSXNDaGFydCIsIml0ZW0xIiwib0VsZW1lbnQiLCJnZXRBZ2dyZWdhdGlvbiIsImNoYXJ0Q29udHJvbCIsImdldENoYXJ0Q29udHJvbCIsIm9TdWJFbGVtZW50IiwiX2ZpbmRDaGFydHMiLCJhQ2hhcnRzIiwib0Jsb2NrIiwib0NvbnRlbnQiLCJzZXRTaG93U2lkZUNvbnRlbnQiLCJvQ2hhcnRDb250ZXh0Iiwic0NoYXJ0UGF0aCIsIm9Db250ZXh0RGF0YSIsIm9DaGFydENvbnRleHREYXRhIiwiX3Njcm9sbFRhYmxlc1RvUm93Iiwic1Jvd1BhdGgiLCJUYWJsZVNjcm9sbGVyIiwic2Nyb2xsVGFibGVUb1JvdyIsIl9tZXJnZU11bHRpcGxlQ29udGV4dHMiLCJvUGFnZUNvbnRleHQiLCJhTGluZUNvbnRleHQiLCJhQXR0cmlidXRlcyIsImFQYWdlQXR0cmlidXRlcyIsInNNZXRhUGF0aExpbmUiLCJzUGF0aExpbmUiLCJzUGFnZVBhdGgiLCJvTWV0YU1vZGVsIiwic01ldGFQYXRoUGFnZSIsInJlcGxhY2UiLCJvU2luZ2xlQ29udGV4dCIsIm9TdWJDaGFydENvbnRleHREYXRhIiwiY29udGV4dERhdGEiLCJyZW1vdmVTZW5zaXRpdmVEYXRhIiwib1BhZ2VMZXZlbFNWIiwiYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQiLCJTZWxlY3Rpb25WYXJpYW50Iiwic2VsZWN0aW9uVmFyaWFudCIsImF0dHJpYnV0ZXMiLCJvVmlld0RhdGEiLCJvQ29uZmlndXJhdGlvbnMiLCJjb250cm9sQ29uZmlndXJhdGlvbiIsImFDb25maWd1cmF0aW9ucyIsInNLZXkiLCJvQ29uZmlndXJhdGlvbiIsInJlcXVlc3RHcm91cElkIiwicGFnaW5hdG9yQ3VycmVudENvbnRleHQiLCJiaW5kaW5nVG9Vc2UiLCJwYWdpbmF0b3IiLCJpbml0aWFsaXplIiwib0RhdGFQb2ludHMiLCJnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJnZXRSb3V0aW5nU2VydmljZSIsImdldE91dGJvdW5kcyIsIm9TaGVsbFNlcnZpY2VzIiwiZm5HZXRMaW5rcyIsImZuT25FcnJvciIsImZuU2V0TGlua0VuYWJsZW1lbnQiLCJpZCIsImFTdXBwb3J0ZWRMaW5rcyIsInNMaW5rSWQiLCJzdXBwb3J0ZWQiLCJvU3ViRGF0YVBvaW50cyIsIm9QYWdlRGF0YSIsIm9EYXRhUG9pbnQiLCJvTGluayIsIm9MaW5rQ29udGV4dCIsIm9MaW5rRGF0YSIsIm9NaXhlZENvbnRleHQiLCJtZXJnZSIsIm9NYXBwaW5nIiwic01haW5Qcm9wZXJ0eSIsInNNYXBwZWRQcm9wZXJ0eSIsImhhc093blByb3BlcnR5Iiwib05ld01hcHBpbmciLCJpc05hdmlnYXRpb25TdXBwb3J0ZWQiLCJwYXJhbXMiLCJhTGlua3MiLCJfZmluZFN1bW1hcml6ZUJ1dHRvbiIsIm9iamVjdFBhZ2VUaXRsZSIsInN1bW1hcml6ZUJ1dHRvbiIsImJ1dHRvbiIsImVuZHNXaXRoIiwiZ2V0U3RhcnR1cFBhcmFtZXRlcnMiLCJzdGFydHVwUGFyYW1zIiwicHJlZmVycmVkQWN0aW9uIiwicHJlZmVycmVkQWN0aW9uTGV2ZWwiLCJwYXJzZUludCIsInNwbGl0IiwiaXNOYU4iLCJnZXRQcmVmZXJyZWRBY3Rpb25TdGF0dXMiLCJDYW5QZXJmb3JtIiwic2V0UHJlZmVycmVkQWN0aW9uU3RhdHVzIiwiQWxyZWFkeVBlcmZvcm1lZCIsImVudmlyb25tZW50U2VydmljZSIsImVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiU21hcnRTdW1tYXJpemUiLCJmaXJlUHJlc3MiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIk9iamVjdFBhZ2VDb250cm9sbGVyLmNvbnRyb2xsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBTZW1hbnRpY09iamVjdE1hcHBpbmdUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25cIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IG1lcmdlIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgdHlwZSB7IEVuaGFuY2VXaXRoVUk1IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIGV4dGVuc2libGUsIGZpbmFsRXh0ZW5zaW9uLCBwdWJsaWNFeHRlbnNpb24sIHVzaW5nRXh0ZW5zaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IEFjdGlvblJ1bnRpbWUgZnJvbSBcInNhcC9mZS9jb3JlL0FjdGlvblJ1bnRpbWVcIjtcbmltcG9ydCB0eXBlIHsgU3RhcnR1cFBhcmFtZXRlcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IEJ1c3lMb2NrZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0J1c3lMb2NrZXJcIjtcbmltcG9ydCBJbnRlbnRCYXNlZE5hdmlnYXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IEludGVybmFsUm91dGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxSb3V0aW5nXCI7XG5pbXBvcnQgTWVzc2FnZUhhbmRsZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgUGFnZVJlYWR5IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QYWdlUmVhZHlcIjtcbmltcG9ydCBQYWdpbmF0b3IgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BhZ2luYXRvclwiO1xuaW1wb3J0IFBsYWNlaG9sZGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QbGFjZWhvbGRlclwiO1xuaW1wb3J0IFNoYXJlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9TaGFyZVwiO1xuaW1wb3J0IFZpZXdTdGF0ZSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvVmlld1N0YXRlXCI7XG5pbXBvcnQgQ29sbGFib3JhdGlvbk1hbmFnZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NhcmRzL0NvbGxhYm9yYXRpb25NYW5hZ2VyXCI7XG5pbXBvcnQgZHJhZnQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2VkaXRGbG93L2RyYWZ0XCI7XG5pbXBvcnQgVWlNb2RlbENvbnN0YW50cyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvZWRpdEZsb3dDb25zdGFudHNcIjtcbmltcG9ydCBOYXZpZ2F0aW9uUmVhc29uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9yb3V0aW5nL05hdmlnYXRpb25SZWFzb25cIjtcbmltcG9ydCB0eXBlIENvbW1hbmRFeGVjdXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL0NvbW1hbmRFeGVjdXRpb25cIjtcbmltcG9ydCB7IFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbHMvUmVjb21tZW5kYXRpb25zL0NvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1wiO1xuaW1wb3J0IHR5cGUgeyBIaWRkZW5EcmFmdCwgTWljcm9DaGFydE1hbmlmZXN0Q29uZmlndXJhdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IEZFTGlicmFyeSBmcm9tIFwic2FwL2ZlL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHsgdHlwZSBXcmFwcGVkQ2FyZCB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9Db2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSBDaGFydEJsb2NrIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NoYXJ0XCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgTWFjcm9BUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvTWFjcm9BUElcIjtcbmltcG9ydCB0eXBlIE11bHRpVmFsdWVGaWVsZEJsb2NrIGZyb20gXCJzYXAvZmUvbWFjcm9zL011bHRpVmFsdWVGaWVsZFwiO1xuaW1wb3J0IHR5cGUgRWFzeUZpbGxCdXR0b24gZnJvbSBcInNhcC9mZS9tYWNyb3MvYWkvRWFzeUZpbGxCdXR0b25cIjtcbmltcG9ydCB0eXBlIFN1bW1hcml6YXRpb25CdXR0b24gZnJvbSBcInNhcC9mZS9tYWNyb3MvYWkvU3VtbWFyaXphdGlvbkJ1dHRvblwiO1xuaW1wb3J0IHR5cGUgRm9ybUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9mb3JtL0Zvcm1BUElcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2VCdXR0b24gZnJvbSBcInNhcC9mZS9tYWNyb3MvbWVzc2FnZXMvTWVzc2FnZUJ1dHRvblwiO1xuaW1wb3J0IHR5cGUgU2hhcmVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3Mvc2hhcmUvU2hhcmVBUElcIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgVGFibGVIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVIZWxwZXJcIjtcbmltcG9ydCBUYWJsZVV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1V0aWxzXCI7XG5pbXBvcnQgU2VsZWN0aW9uVmFyaWFudCBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vU2VsZWN0aW9uVmFyaWFudFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE9iamVjdFBhZ2VFeHRlbnNpb25BUEkgfSBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL0V4dGVuc2lvbkFQSVwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBFeHRlbnNpb25BUEkgfSBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL0V4dGVuc2lvbkFQSVwiO1xuaW1wb3J0IENvbGxhYm9yYXRpb25EaXNjYXJkIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvY29tcG9uZW50cy9Db2xsYWJvcmF0aW9uRGlzY2FyZERpYWxvZ1wiO1xuaW1wb3J0IHR5cGUgU3ViU2VjdGlvbkJsb2NrIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvY29udHJvbHMvU3ViU2VjdGlvbkJsb2NrXCI7XG5pbXBvcnQgVGFibGVTY3JvbGxlciBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9UYWJsZVNjcm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IHR5cGUgSW5wdXRCYXNlIGZyb20gXCJzYXAvbS9JbnB1dEJhc2VcIjtcbmltcG9ydCBJbnN0YW5jZU1hbmFnZXIgZnJvbSBcInNhcC9tL0luc3RhbmNlTWFuYWdlclwiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCB0eXBlIE5hdkNvbnRhaW5lciBmcm9tIFwic2FwL20vTmF2Q29udGFpbmVyXCI7XG5pbXBvcnQgdHlwZSBQb3BvdmVyIGZyb20gXCJzYXAvbS9Qb3BvdmVyXCI7XG5pbXBvcnQgdHlwZSBUb29sYmFyU3BhY2VyIGZyb20gXCJzYXAvbS9Ub29sYmFyU3BhY2VyXCI7XG5pbXBvcnQgRGV2aWNlIGZyb20gXCJzYXAvdWkvRGV2aWNlXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIHsgQ29tbWFuZEV4ZWN1dGlvbiRFeGVjdXRlRXZlbnQgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29tbWFuZEV4ZWN1dGlvblwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB0eXBlIEludmlzaWJsZVRleHQgZnJvbSBcInNhcC91aS9jb3JlL0ludmlzaWJsZVRleHRcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCB0eXBlIHsgTWFuaWZlc3RPdXRib3VuZEVudHJ5IH0gZnJvbSBcInNhcC91aS9jb3JlL01hbmlmZXN0XCI7XG5pbXBvcnQgTWVzc2FnaW5nIGZyb20gXCJzYXAvdWkvY29yZS9NZXNzYWdpbmdcIjtcbmltcG9ydCBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCBNZXNzYWdlVHlwZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlVHlwZVwiO1xuaW1wb3J0IE92ZXJyaWRlRXhlY3V0aW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvT3ZlcnJpZGVFeGVjdXRpb25cIjtcbmltcG9ydCB0eXBlIER5bmFtaWNTaWRlQ29udGVudCBmcm9tIFwic2FwL3VpL2xheW91dC9EeW5hbWljU2lkZUNvbnRlbnRcIjtcbmltcG9ydCB0eXBlIEZvcm0gZnJvbSBcInNhcC91aS9sYXlvdXQvZm9ybS9Gb3JtXCI7XG5pbXBvcnQgdHlwZSBDaGFydCBmcm9tIFwic2FwL3VpL21kYy9DaGFydFwiO1xuaW1wb3J0IHR5cGUgVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIFRhYmxlVHlwZUJhc2UgZnJvbSBcInNhcC91aS9tZGMvdGFibGUvVGFibGVUeXBlQmFzZVwiO1xuaW1wb3J0IHR5cGUgQmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL0JpbmRpbmdcIjtcbmltcG9ydCB0eXBlIENvbXBvc2l0ZUJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9Db21wb3NpdGVCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9MaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFDb250ZXh0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhQ29udGV4dEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZSBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZVwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUxheW91dCBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUxheW91dFwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZVNlY3Rpb24gZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VTZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlU3ViU2VjdGlvbiBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZVN1YlNlY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgTWV0YU1vZGVsVHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi8uLi90eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcbmltcG9ydCB0eXBlIENvbGxhYm9yYXRpb25EcmFmdCBmcm9tIFwiLi9jb21wb25lbnRzL0NvbGxhYm9yYXRpb25EcmFmdFwiO1xuaW1wb3J0IENvbGxhYm9yYXRpb25NYW5hZ2VyT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL0NvbGxhYm9yYXRpb25NYW5hZ2VyXCI7XG5pbXBvcnQgSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL0ludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IEludGVybmFsUm91dGluZ092ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9JbnRlcm5hbFJvdXRpbmdcIjtcbmltcG9ydCBNZXNzYWdlSGFuZGxlck92ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IFBhZ2luYXRvck92ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9QYWdpbmF0b3JcIjtcbmltcG9ydCBTaGFyZU92ZXJyaWRlcyBmcm9tIFwiLi9vdmVycmlkZXMvU2hhcmVcIjtcbmltcG9ydCBWaWV3U3RhdGVPdmVycmlkZXMgZnJvbSBcIi4vb3ZlcnJpZGVzL1ZpZXdTdGF0ZVwiO1xuXG5leHBvcnQgdHlwZSBCaW5kaW5nUGFyYW1zID0ge1xuXHRyZWRpcmVjdGVkVG9Ob25EcmFmdD86IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0cmVhc29uPzogTmF2aWdhdGlvblJlYXNvbjtcblx0YlBlcnNpc3RPUFNjcm9sbD86IGJvb2xlYW47XG5cdGxpc3RCaW5kaW5nPzogT0RhdGFMaXN0QmluZGluZztcblx0c2hvd1BsYWNlaG9sZGVyPzogYm9vbGVhbjtcbn07XG5cbmNvbnN0IFByb2dyYW1taW5nTW9kZWwgPSBGRUxpYnJhcnkuUHJvZ3JhbW1pbmdNb2RlbDtcbmNvbnN0IFByZWZlcnJlZEFjdGlvblN0YXR1cyA9IEZFTGlicmFyeS5QcmVmZXJyZWRBY3Rpb25TdGF0dXNUeXBlO1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLk9iamVjdFBhZ2VDb250cm9sbGVyXCIpXG5jbGFzcyBPYmplY3RQYWdlQ29udHJvbGxlciBleHRlbmRzIFBhZ2VDb250cm9sbGVyIHtcblx0b1ZpZXchOiBGRVZpZXc7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFBsYWNlaG9sZGVyKVxuXHRwbGFjZWhvbGRlciE6IFBsYWNlaG9sZGVyO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihTaGFyZS5vdmVycmlkZShTaGFyZU92ZXJyaWRlcykpXG5cdHNoYXJlITogU2hhcmU7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKEludGVybmFsUm91dGluZy5vdmVycmlkZShJbnRlcm5hbFJvdXRpbmdPdmVycmlkZSkpXG5cdF9yb3V0aW5nITogSW50ZXJuYWxSb3V0aW5nO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihQYWdpbmF0b3Iub3ZlcnJpZGUoUGFnaW5hdG9yT3ZlcnJpZGUpKVxuXHRwYWdpbmF0b3IhOiBQYWdpbmF0b3I7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKE1lc3NhZ2VIYW5kbGVyLm92ZXJyaWRlKE1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGUpKVxuXHRtZXNzYWdlSGFuZGxlciE6IE1lc3NhZ2VIYW5kbGVyO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihJbnRlbnRCYXNlZE5hdmlnYXRpb24ub3ZlcnJpZGUoSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUpKVxuXHRpbnRlbnRCYXNlZE5hdmlnYXRpb24hOiBJbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cblx0QHVzaW5nRXh0ZW5zaW9uKENvbGxhYm9yYXRpb25NYW5hZ2VyLm92ZXJyaWRlKENvbGxhYm9yYXRpb25NYW5hZ2VyT3ZlcnJpZGUpKVxuXHRjb2xsYWJvcmF0aW9uTWFuYWdlciE6IENvbGxhYm9yYXRpb25NYW5hZ2VyO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihcblx0XHRJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbi5vdmVycmlkZSh7XG5cdFx0XHRnZXROYXZpZ2F0aW9uTW9kZTogZnVuY3Rpb24gKHRoaXM6IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IGJJc1N0aWNreUVkaXRNb2RlID1cblx0XHRcdFx0XHQodGhpcy5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIE9iamVjdFBhZ2VDb250cm9sbGVyKS5nZXRTdGlja3lFZGl0TW9kZSAmJlxuXHRcdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgT2JqZWN0UGFnZUNvbnRyb2xsZXIpLmdldFN0aWNreUVkaXRNb2RlKCk7XG5cdFx0XHRcdHJldHVybiBiSXNTdGlja3lFZGl0TW9kZSA/IFwiZXhwbGFjZVwiIDogdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHRcdH0pXG5cdClcblx0X2ludGVudEJhc2VkTmF2aWdhdGlvbiE6IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihWaWV3U3RhdGUub3ZlcnJpZGUoVmlld1N0YXRlT3ZlcnJpZGVzKSlcblx0dmlld1N0YXRlITogVmlld1N0YXRlO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihcblx0XHRQYWdlUmVhZHkub3ZlcnJpZGUoe1xuXHRcdFx0aXNDb250ZXh0RXhwZWN0ZWQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fSlcblx0KVxuXHRwYWdlUmVhZHkhOiBQYWdlUmVhZHk7XG5cblx0cHJpdmF0ZSBtQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXM/OiBSZWNvcmQ8c3RyaW5nLCBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJPjtcblxuXHRwcm90ZWN0ZWQgZXh0ZW5zaW9uQVBJPzogT2JqZWN0UGFnZUV4dGVuc2lvbkFQSTtcblxuXHRwcml2YXRlIGJTZWN0aW9uTmF2aWdhdGVkPzogYm9vbGVhbjtcblxuXHRwcml2YXRlIGludmFsaWRhdGVUaXRsZUhpZXJhcmNoeUNhY2hlU2V0VXAgPSBmYWxzZTtcblxuXHRwcml2YXRlIHN3aXRjaERyYWZ0QW5kQWN0aXZlUG9wT3Zlcj86IFBvcG92ZXI7XG5cblx0cHJpdmF0ZSBjdXJyZW50QmluZGluZz86IEJpbmRpbmc7XG5cblx0cHJpdmF0ZSBtZXNzYWdlQnV0dG9uITogTWVzc2FnZUJ1dHRvbjtcblxuXHRwcml2YXRlIGNvbGxhYm9yYXRpb25NZXNzYWdlPzogTWVzc2FnZTtcblxuXHRwcml2YXRlIG1lcmdlUGF0Y2hEcmFmdCA9IGZhbHNlO1xuXG5cdHByaXZhdGUgYXV0b1F1ZXVlTG9jazogUmV0dXJuVHlwZTxPRGF0YU1vZGVsW1wibG9ja1wiXT4gfCB1bmRlZmluZWQ7XG5cblx0cHJpdmF0ZSBtZXNzYWdlQmluZGluZz86IEJpbmRpbmc7XG5cblx0cHJpdmF0ZSBpc0ZpcnN0QmluZGluZyA9IHRydWU7XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGdldEV4dGVuc2lvbkFQSShzSWQ/OiBzdHJpbmcpOiBFeHRlbnNpb25BUEkge1xuXHRcdGlmIChzSWQpIHtcblx0XHRcdC8vIHRvIGFsbG93IGxvY2FsIElEIHVzYWdlIGZvciBjdXN0b20gcGFnZXMgd2UnbGwgY3JlYXRlL3JldHVybiBvd24gaW5zdGFuY2VzIGZvciBjdXN0b20gc2VjdGlvbnNcblx0XHRcdHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzID0gdGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXMgfHwge307XG5cblx0XHRcdGlmICghdGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXSkge1xuXHRcdFx0XHR0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdID0gbmV3IEV4dGVuc2lvbkFQSSh0aGlzLCBzSWQpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICghdGhpcy5leHRlbnNpb25BUEkpIHtcblx0XHRcdFx0dGhpcy5leHRlbnNpb25BUEkgPSBuZXcgRXh0ZW5zaW9uQVBJKHRoaXMpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMuZXh0ZW5zaW9uQVBJO1xuXHRcdH1cblx0fVxuXG5cdG9uSW5pdCgpOiB2b2lkIHtcblx0XHRzdXBlci5vbkluaXQoKTtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cblx0XHQvLyBTZXR0aW5nIGRlZmF1bHRzIG9mIGludGVybmFsIG1vZGVsIGNvbnRleHRcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldE93bmVyQ29tcG9uZW50KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiZXh0ZXJuYWxOYXZpZ2F0aW9uQ29udGV4dFwiLCB7IHBhZ2U6IHRydWUgfSwgdW5kZWZpbmVkLCB0cnVlKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFxuXHRcdFx0XCJyZWxhdGVkQXBwc1wiLFxuXHRcdFx0e1xuXHRcdFx0XHR2aXNpYmlsaXR5OiBmYWxzZSxcblx0XHRcdFx0aXRlbXM6IG51bGxcblx0XHRcdH0sXG5cdFx0XHR1bmRlZmluZWQsXG5cdFx0XHR0cnVlXG5cdFx0KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiYmF0Y2hHcm91cHNcIiwgdGhpcy5fZ2V0QmF0Y2hHcm91cHNGb3JWaWV3KCkpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJlcnJvck5hdmlnYXRpb25TZWN0aW9uRmxhZ1wiLCBmYWxzZSk7XG5cdFx0aWYgKG9PYmplY3RQYWdlLmdldEVuYWJsZUxhenlMb2FkaW5nKCkpIHtcblx0XHRcdC8vQXR0YWNoaW5nIHRoZSBldmVudCB0byBtYWtlIHRoZSBzdWJzZWN0aW9uIGNvbnRleHQgYmluZGluZyBhY3RpdmUgd2hlbiBpdCBpcyB2aXNpYmxlLlxuXHRcdFx0b09iamVjdFBhZ2UuYXR0YWNoRXZlbnQoXCJzdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0XCIsIHRoaXMuX2hhbmRsZVN1YlNlY3Rpb25FbnRlcmVkVmlld1BvcnQuYmluZCh0aGlzKSk7XG5cdFx0fVxuXHRcdHRoaXMubWVzc2FnZUJ1dHRvbiA9IHRoaXMuZ2V0VmlldygpLmJ5SWQoXCJmZTo6Rm9vdGVyQmFyOjpNZXNzYWdlQnV0dG9uXCIpIGFzIE1lc3NhZ2VCdXR0b247XG5cdFx0dGhpcy5tZXNzYWdlQmluZGluZyA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKS5iaW5kTGlzdChcIi9cIik7XG5cdFx0dGhpcy5tZXNzYWdlQmluZGluZz8uYXR0YWNoQ2hhbmdlKHRoaXMuX2ZuU2hvd09QTWVzc2FnZSwgdGhpcyk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcInJvb3RFZGl0RW5hYmxlZFwiLCB0cnVlLCB1bmRlZmluZWQsIHRydWUpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJyb290RWRpdFZpc2libGVcIiwgdHJ1ZSwgdW5kZWZpbmVkLCB0cnVlKTtcblxuXHRcdHRoaXMuX2hhbmRsZVNtYXJ0U3VtbWFyeVN0YXJ0dXBBY3Rpb24oKTtcblx0fVxuXG5cdG9uRXhpdCgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXMpIHtcblx0XHRcdGZvciAoY29uc3Qgc0lkIG9mIE9iamVjdC5rZXlzKHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzKSkge1xuXHRcdFx0XHRpZiAodGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXSkge1xuXHRcdFx0XHRcdHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF0uZGVzdHJveSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRkZWxldGUgdGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXM7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmV4dGVuc2lvbkFQSSkge1xuXHRcdFx0dGhpcy5leHRlbnNpb25BUEkuZGVzdHJveSgpO1xuXHRcdH1cblx0XHRkZWxldGUgdGhpcy5leHRlbnNpb25BUEk7XG5cblx0XHRjb25zdCBvTWVzc2FnZVBvcG92ZXIgPSB0aGlzLm1lc3NhZ2VCdXR0b24gPyB0aGlzLm1lc3NhZ2VCdXR0b24ub01lc3NhZ2VQb3BvdmVyIDogbnVsbDtcblx0XHRpZiAob01lc3NhZ2VQb3BvdmVyICYmIG9NZXNzYWdlUG9wb3Zlci5pc09wZW4oKSkge1xuXHRcdFx0b01lc3NhZ2VQb3BvdmVyLmNsb3NlKCk7XG5cdFx0fVxuXHRcdC8vd2hlbiBleGl0aW5nIHdlIHNldCBrZWVwQWxpdmUgY29udGV4dCB0byBmYWxzZVxuXHRcdGNvbnN0IG9Db250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRpZiAob0NvbnRleHQgJiYgb0NvbnRleHQuaXNLZWVwQWxpdmUoKSkge1xuXHRcdFx0b0NvbnRleHQuc2V0S2VlcEFsaXZlKGZhbHNlKTtcblx0XHR9XG5cblx0XHR0aGlzLmNvbGxhYm9yYXRpdmVEcmFmdC5kaXNjb25uZWN0KCk7IC8vIENsZWFudXAgY29sbGFib3JhdGlvbiBjb25uZWN0aW9uIHdoZW4gbGVhdmluZyB0aGUgYXBwXG5cblx0XHR0aGlzLm1lc3NhZ2VCaW5kaW5nPy5kZXRhY2hDaGFuZ2UodGhpcy5fZm5TaG93T1BNZXNzYWdlLCB0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gc2hvdyB0aGUgbWVzc2FnZSBzdHJpcCBvbiB0aGUgb2JqZWN0IHBhZ2UuXG5cdCAqXG5cdCAqL1xuXHRfZm5TaG93T1BNZXNzYWdlKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmdldEFwcENvbXBvbmVudCgpLmlzU3VzcGVuZGVkKCkpIHtcblx0XHRcdC8vIElmIHRoZSBhcHAgaXMgc3VzcGVuZGVkLCB3ZSBkbyBub3Qgc2hvdyB0aGUgbWVzc2FnZXMgKHRoZSBNZXNzYWdlTW9kZWwgY29udGFpbnMgbWVzc2FnZXMgZnJvbSB0aGUgYWN0aXZlIGFwcCkuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgZXh0ZW5zaW9uQVBJID0gdGhpcy5nZXRFeHRlbnNpb25BUEkoKTtcblx0XHRjb25zdCB2aWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0Y29uc3QgbWVzc2FnZXMgPSBNZXNzYWdpbmc/LmdldE1lc3NhZ2VNb2RlbCgpXG5cdFx0XHQuZ2V0RGF0YSgpXG5cdFx0XHQuZmlsdGVyKChtZXNzYWdlOiBNZXNzYWdlKSA9PiB7XG5cdFx0XHRcdHJldHVybiBtZXNzYWdlLmdldFRhcmdldHMoKVswXSA9PT0gdmlldy5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCk7XG5cdFx0XHR9KTtcblxuXHRcdGlmIChleHRlbnNpb25BUEkpIHtcblx0XHRcdGV4dGVuc2lvbkFQSS5fc2hvd01lc3NhZ2VzKG1lc3NhZ2VzLCBcIkJhY2tlbmRcIik7XG5cdFx0fVxuXHR9XG5cblx0X2dldFRhYmxlQmluZGluZyhvVGFibGU6IFRhYmxlKTogT0RhdGFMaXN0QmluZGluZyB7XG5cdFx0cmV0dXJuIG9UYWJsZSAmJiBvVGFibGUuZ2V0Um93QmluZGluZygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZpbmQgdGhlIGxhc3QgdmlzaWJsZSBzdWJzZWN0aW9uIGFuZCBhZGQgdGhlIHNhcFV4QVBPYmplY3RQYWdlU3ViU2VjdGlvbkZpdENvbnRhaW5lciBDU1MgY2xhc3MgaWYgaXQgY29udGFpbnMgb25seSBhIEdyaWRUYWJsZSBvciBhIFRyZWVUYWJsZS5cblx0ICogQHBhcmFtIHN1YlNlY3Rpb25zIFRoZSBzdWIgc2VjdGlvbnMgdG8gbG9vayBmb3Jcblx0ICovXG5cdHByaXZhdGUgY2hlY2tTZWN0aW9uc0Zvck5vblJlc3BvbnNpdmVUYWJsZShzdWJTZWN0aW9uczogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSk6IHZvaWQge1xuXHRcdGNvbnN0IGNoYW5nZUNsYXNzRm9yVGFibGVzID0gKGV2ZW50OiBFdmVudCwgbGFzdFZpc2libGVTdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbik6IHZvaWQgPT4ge1xuXHRcdFx0Y29uc3QgYmxvY2tzID0gWy4uLmxhc3RWaXNpYmxlU3ViU2VjdGlvbi5nZXRCbG9ja3MoKSwgLi4ubGFzdFZpc2libGVTdWJTZWN0aW9uLmdldE1vcmVCbG9ja3MoKV07XG5cdFx0XHRpZiAoYmxvY2tzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHRjb25zdCB0YWJsZSA9IHRoaXMuc2VhcmNoVGFibGVJbkJsb2NrKGJsb2Nrc1swXSBhcyBTdWJTZWN0aW9uQmxvY2spO1xuXHRcdFx0XHRpZiAoIXRhYmxlKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHRhYmxlVHlwZSA9IHRhYmxlLmlzQTxUYWJsZT4oXCJzYXAudWkubWRjLlRhYmxlXCIpICYmICh0YWJsZS5nZXRUeXBlKCkgYXMgVGFibGVUeXBlQmFzZSk7XG5cdFx0XHRcdGNvbnN0IHRhYmxlQVBJID0gdGFibGUuZ2V0UGFyZW50KCk/LmlzQTxUYWJsZUFQST4oXCJzYXAuZmUubWFjcm9zLnRhYmxlLlRhYmxlQVBJXCIpXG5cdFx0XHRcdFx0PyAodGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHR0YWJsZVR5cGUgJiZcblx0XHRcdFx0XHQodGFibGVUeXBlPy5pc0EoXCJzYXAudWkubWRjLnRhYmxlLkdyaWRUYWJsZVR5cGVcIikgfHwgdGFibGVUeXBlPy5pc0EoXCJzYXAudWkubWRjLnRhYmxlLlRyZWVUYWJsZVR5cGVcIikpICYmXG5cdFx0XHRcdFx0dGFibGVBUEk/LmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wucm93Q291bnRNb2RlID09PSBcIkF1dG9cIlxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHQvL0luIGNhc2UgdGhlcmUgaXMgb25seSBhIHNpbmdsZSB0YWJsZSBpbiBhIHN1YlNlY3Rpb24gd2UgZml0IHRoYXQgdG8gdGhlIHdob2xlIHBhZ2Ugc28gdGhhdCB0aGUgc2Nyb2xsYmFyIGNvbWVzIG9ubHkgb24gdGFibGUgYW5kIG5vdCBvbiBwYWdlXG5cdFx0XHRcdFx0bGFzdFZpc2libGVTdWJTZWN0aW9uLmFkZFN0eWxlQ2xhc3MoXCJzYXBVeEFQT2JqZWN0UGFnZVN1YlNlY3Rpb25GaXRDb250YWluZXJcIik7XG5cdFx0XHRcdFx0bGFzdFZpc2libGVTdWJTZWN0aW9uLmRldGFjaEV2ZW50KFwibW9kZWxDb250ZXh0Q2hhbmdlXCIsIGNoYW5nZUNsYXNzRm9yVGFibGVzLCB0aGlzKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdFx0Zm9yIChsZXQgc3ViU2VjdGlvbkluZGV4ID0gc3ViU2VjdGlvbnMubGVuZ3RoIC0gMTsgc3ViU2VjdGlvbkluZGV4ID49IDA7IHN1YlNlY3Rpb25JbmRleC0tKSB7XG5cdFx0XHRpZiAoc3ViU2VjdGlvbnNbc3ViU2VjdGlvbkluZGV4XS5nZXRWaXNpYmxlKCkpIHtcblx0XHRcdFx0Y29uc3QgbGFzdFZpc2libGVTdWJTZWN0aW9uID0gc3ViU2VjdGlvbnNbc3ViU2VjdGlvbkluZGV4XTtcblx0XHRcdFx0Ly8gV2UgbmVlZCB0byBhdHRhY2ggdGhpcyBldmVudCBpbiBvcmRlciB0byBtYW5hZ2UgdGhlIE9iamVjdCBQYWdlIExhenkgTG9hZGluZyBtZWNoYW5pc21cblx0XHRcdFx0bGFzdFZpc2libGVTdWJTZWN0aW9uLmF0dGFjaEV2ZW50KFwibW9kZWxDb250ZXh0Q2hhbmdlXCIsIGxhc3RWaXNpYmxlU3ViU2VjdGlvbiwgY2hhbmdlQ2xhc3NGb3JUYWJsZXMsIHRoaXMpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRmluZCBhIHRhYmxlIGluIGJsb2NrcyBvZiBzZWN0aW9uLlxuXHQgKiBAcGFyYW0gYmxvY2sgT25lIHN1YiBzZWN0aW9uIGJsb2NrXG5cdCAqIEByZXR1cm5zIFRhYmxlIGlmIGV4aXN0c1xuXHQgKi9cblx0cHJpdmF0ZSBzZWFyY2hUYWJsZUluQmxvY2soYmxvY2s6IFN1YlNlY3Rpb25CbG9jayk6IFRhYmxlIHwgdW5kZWZpbmVkIHtcblx0XHRsZXQgdGFibGVBUEk6IFRhYmxlQVBJIHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGdldFRhYmxlQVBJID0gKGNvbnRyb2w6IENvbnRyb2wpOiBUYWJsZUFQSSB8IHVuZGVmaW5lZCA9PiB7XG5cdFx0XHQvLyBUaGUgdGFibGUgbWF5IGN1cnJlbnRseSBiZSBzaG93biBpbiBhIGZ1bGwgc2NyZWVuIGRpYWxvZywgd2UgY2FuIHRoZW4gZ2V0IHRoZSByZWZlcmVuY2UgdG8gdGhlIFRhYmxlQVBJXG5cdFx0XHQvLyBjb250cm9sIGZyb20gdGhlIGN1c3RvbSBkYXRhIG9mIHRoZSBwbGFjZSBob2xkZXIgcGFuZWxcblx0XHRcdGlmIChjb250cm9sLmlzQShcInNhcC5tLlBhbmVsXCIpICYmIGNvbnRyb2wuZGF0YShcIkZ1bGxTY3JlZW5UYWJsZVBsYWNlSG9sZGVyXCIpKSB7XG5cdFx0XHRcdHJldHVybiBjb250cm9sLmRhdGEoXCJ0YWJsZUFQSXJlZmVyZW5jZVwiKTtcblx0XHRcdH0gZWxzZSBpZiAoY29udHJvbC5pc0EoXCJzYXAuZmUubWFjcm9zLnRhYmxlLlRhYmxlQVBJXCIpKSB7XG5cdFx0XHRcdHJldHVybiBjb250cm9sIGFzIFRhYmxlQVBJO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0aWYgKGJsb2NrLmlzQShcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5jb250cm9scy5TdWJTZWN0aW9uQmxvY2tcIikpIHtcblx0XHRcdGNvbnN0IGNvbnRyb2wgPSBibG9jay5jb250ZW50O1xuXHRcdFx0aWYgKGNvbnRyb2wuaXNBKFwic2FwLnVpLmxheW91dC5EeW5hbWljU2lkZUNvbnRlbnRcIikpIHtcblx0XHRcdFx0Y29uc3QgbWFpbkNvbnRlbnQgPSAoY29udHJvbCBhcyBEeW5hbWljU2lkZUNvbnRlbnQpLmdldE1haW5Db250ZW50KClbMF07XG5cdFx0XHRcdGNvbnN0IG1haW5Db250ZW50VGFibGVBUEkgPSBnZXRUYWJsZUFQSShtYWluQ29udGVudCk7XG5cdFx0XHRcdGlmIChtYWluQ29udGVudFRhYmxlQVBJKSB7XG5cdFx0XHRcdFx0dGFibGVBUEkgPSBtYWluQ29udGVudFRhYmxlQVBJO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0IHNpZGVDb250ZW50ID0gKGNvbnRyb2wgYXMgRHluYW1pY1NpZGVDb250ZW50KS5nZXRTaWRlQ29udGVudCgpWzBdO1xuXHRcdFx0XHRcdGNvbnN0IHNpZGVDb250ZW50VGFibGVBUEkgPSBnZXRUYWJsZUFQSShzaWRlQ29udGVudCk7XG5cdFx0XHRcdFx0aWYgKHNpZGVDb250ZW50VGFibGVBUEkpIHtcblx0XHRcdFx0XHRcdHRhYmxlQVBJID0gc2lkZUNvbnRlbnRUYWJsZUFQSTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRhYmxlQVBJID0gZ2V0VGFibGVBUEkoY29udHJvbCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0YWJsZUFQSSkge1xuXHRcdFx0XHRyZXR1cm4gdGFibGVBUEkuY29udGVudDtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdG9uQmVmb3JlUmVuZGVyaW5nKCk6IHZvaWQge1xuXHRcdFBhZ2VDb250cm9sbGVyLnByb3RvdHlwZS5vbkJlZm9yZVJlbmRlcmluZy5hcHBseSh0aGlzKTtcblx0XHQvLyBJbiB0aGUgcmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCBzY2VuYXJpbyB3ZSBuZWVkIHRvIGVuc3VyZSBpbiBjYXNlIG9mIHJlbG9hZC9yZWZyZXNoIHRoYXQgdGhlIG1ldGEgbW9kZWwgaW4gdGhlIG1ldGhvZGUgcmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCBvZiB0aGUgRmllbGRSdW50aW1lIGlzIGF2YWlsYWJsZVxuXHRcdGlmICh0aGlzLm9WaWV3LmdldFZpZXdEYXRhKCk/LnJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3QgJiYgQ29tbW9uSGVscGVyLmdldE1ldGFNb2RlbCgpID09PSB1bmRlZmluZWQpIHtcblx0XHRcdENvbW1vbkhlbHBlci5zZXRNZXRhTW9kZWwodGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0fVxuXHR9XG5cblx0b25BZnRlclJlbmRlcmluZygpOiB2b2lkIHtcblx0XHRsZXQgc3ViU2VjdGlvbnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW107XG5cdFx0aWYgKHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkuZ2V0VXNlSWNvblRhYkJhcigpKSB7XG5cdFx0XHRjb25zdCBzZWN0aW9ucyA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkuZ2V0U2VjdGlvbnMoKTtcblx0XHRcdGZvciAoY29uc3Qgc2VjdGlvbiBvZiBzZWN0aW9ucykge1xuXHRcdFx0XHRzdWJTZWN0aW9ucyA9IHNlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKTtcblx0XHRcdFx0dGhpcy5jaGVja1NlY3Rpb25zRm9yTm9uUmVzcG9uc2l2ZVRhYmxlKHN1YlNlY3Rpb25zKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0c3ViU2VjdGlvbnMgPSB0aGlzLl9nZXRBbGxTdWJTZWN0aW9ucygpO1xuXHRcdFx0dGhpcy5jaGVja1NlY3Rpb25zRm9yTm9uUmVzcG9uc2l2ZVRhYmxlKHN1YlNlY3Rpb25zKTtcblx0XHR9XG5cdH1cblxuXHRfb25CZWZvcmVCaW5kaW5nKG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCwgbVBhcmFtZXRlcnM6IEJpbmRpbmdQYXJhbXMgPSB7fSk6IHZvaWQge1xuXHRcdC8vIFRPRE86IHdlIHNob3VsZCBjaGVjayBob3cgdGhpcyBjb21lcyB0b2dldGhlciB3aXRoIHRoZSB0cmFuc2FjdGlvbiBoZWxwZXIsIHNhbWUgdG8gdGhlIGNoYW5nZSBpbiB0aGUgYWZ0ZXJCaW5kaW5nXG5cdFx0Y29uc3QgYVRhYmxlcyA9IHRoaXMuX2ZpbmRUYWJsZXMoKSxcblx0XHRcdG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKSxcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRvSW50ZXJuYWxNb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwiaW50ZXJuYWxcIiksXG5cdFx0XHRhQmF0Y2hHcm91cHMgPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJiYXRjaEdyb3Vwc1wiKTtcblx0XHRsZXQgb0Zhc3RDcmVhdGlvblJvdztcblx0XHRhQmF0Y2hHcm91cHMucHVzaChcIiRhdXRvXCIpO1xuXHRcdGlmIChtUGFyYW1ldGVycy5yZWFzb24gIT09IE5hdmlnYXRpb25SZWFzb24uRWRpdEZsb3dBY3Rpb24pIHtcblx0XHRcdHRoaXMuX2Nsb3NlU2lkZUNvbnRlbnQoKTtcblx0XHR9XG5cdFx0Y29uc3Qgb3BDb250ZXh0ID0gb09iamVjdFBhZ2UuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dDtcblx0XHRpZiAoXG5cdFx0XHRvcENvbnRleHQgJiZcblx0XHRcdG9wQ29udGV4dC5oYXNQZW5kaW5nQ2hhbmdlcygpICYmXG5cdFx0XHQhYUJhdGNoR3JvdXBzLnNvbWUob3BDb250ZXh0LmdldE1vZGVsKCkuaGFzUGVuZGluZ0NoYW5nZXMuYmluZChvcENvbnRleHQuZ2V0TW9kZWwoKSkpXG5cdFx0KSB7XG5cdFx0XHQvKiBcdEluIGNhc2UgdGhlcmUgYXJlIHBlbmRpbmcgY2hhbmdlcyBmb3IgdGhlIGNyZWF0aW9uIHJvdyBhbmQgbm8gb3RoZXJzIHdlIG5lZWQgdG8gcmVzZXQgdGhlIGNoYW5nZXNcblx0XHRcdFx0XHRcdFx0XHRUT0RPOiB0aGlzIGlzIGp1c3QgYSBxdWljayBzb2x1dGlvbiwgdGhpcyBuZWVkcyB0byBiZSByZXdvcmtlZFxuXHRcdFx0XHRcdFx0XHRcdCovXG5cblx0XHRcdG9wQ29udGV4dC5nZXRCaW5kaW5nKCkucmVzZXRDaGFuZ2VzKCk7XG5cdFx0fVxuXG5cdFx0Ly8gRm9yIG5vdyB3ZSBoYXZlIHRvIHNldCB0aGUgYmluZGluZyBjb250ZXh0IHRvIG51bGwgZm9yIGV2ZXJ5IGZhc3QgY3JlYXRpb24gcm93XG5cdFx0Ly8gVE9ETzogR2V0IHJpZCBvZiB0aGlzIGNvZGluZyBvciBtb3ZlIGl0IHRvIGFub3RoZXIgbGF5ZXIgLSB0byBiZSBkaXNjdXNzZWQgd2l0aCBNREMgYW5kIG1vZGVsXG5cdFx0Zm9yIChjb25zdCBpdGVtIG9mIGFUYWJsZXMpIHtcblx0XHRcdG9GYXN0Q3JlYXRpb25Sb3cgPSBpdGVtLmdldENyZWF0aW9uUm93KCk7XG5cdFx0XHRpZiAob0Zhc3RDcmVhdGlvblJvdykge1xuXHRcdFx0XHRvRmFzdENyZWF0aW9uUm93LnNldEJpbmRpbmdDb250ZXh0KG51bGwpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFNjcm9sbCB0byBwcmVzZW50IFNlY3Rpb24gc28gdGhhdCBiaW5kaW5ncyBhcmUgZW5hYmxlZCBkdXJpbmcgbmF2aWdhdGlvbiB0aHJvdWdoIHBhZ2luYXRvciBidXR0b25zLCBhcyB0aGVyZSBpcyBubyB2aWV3IHJlcmVuZGVyaW5nL3JlYmluZFxuXHRcdGNvbnN0IGZuU2Nyb2xsVG9QcmVzZW50U2VjdGlvbiA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdGlmICghKG9PYmplY3RQYWdlIGFzIHsgaXNGaXJzdFJlbmRlcmluZz86ICgpID0+IGJvb2xlYW4gfSkuaXNGaXJzdFJlbmRlcmluZz8uKCkgJiYgIW1QYXJhbWV0ZXJzLmJQZXJzaXN0T1BTY3JvbGwpIHtcblx0XHRcdFx0b09iamVjdFBhZ2Uuc2V0U2VsZWN0ZWRTZWN0aW9uKG51bGwgYXMgdW5rbm93biBhcyBzdHJpbmcpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0b09iamVjdFBhZ2UuYXR0YWNoRXZlbnRPbmNlKFwibW9kZWxDb250ZXh0Q2hhbmdlXCIsIGZuU2Nyb2xsVG9QcmVzZW50U2VjdGlvbik7XG5cblx0XHRjb25zdCBmbk9QUmVuZGVyaW5nTGF5b3V0ID0ge1xuXHRcdFx0b25BZnRlclJlbmRlcmluZzogKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKT8uZWRpdGFibGVIZWFkZXJDb250ZW50KSB7XG5cdFx0XHRcdFx0Zm5TY3JvbGxUb1ByZXNlbnRTZWN0aW9uKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0b09iamVjdFBhZ2UucmVtb3ZlRXZlbnREZWxlZ2F0ZShmbk9QUmVuZGVyaW5nTGF5b3V0KTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdG9PYmplY3RQYWdlLmFkZEV2ZW50RGVsZWdhdGUoZm5PUFJlbmRlcmluZ0xheW91dCk7XG5cblx0XHQvL1NldCB0aGUgQmluZGluZyBmb3IgUGFnaW5hdG9ycyB1c2luZyBMaXN0QmluZGluZyBJRFxuXHRcdHRoaXMuX2luaXRpYWxpemVQYWdpbmF0aW9uKG9Db250ZXh0LCBvSW50ZXJuYWxNb2RlbCwgbVBhcmFtZXRlcnM/Lmxpc3RCaW5kaW5nKTtcblxuXHRcdGNvbnN0IGZpcnN0U3ViU2VjdGlvblZpc2liaWxpdHlCaW5kaW5nID0gdGhpcy5fZ2V0Zmlyc3RTdWJTZWN0aW9uVmlzaWJpbGl0eUJpbmRpbmcoKTtcblxuXHRcdGlmIChcblx0XHRcdHRoaXMudXNlTGF6eUxvYWRlck9wdGltaXphdGlvbnMoKSAmJlxuXHRcdFx0b09iamVjdFBhZ2UuZ2V0RW5hYmxlTGF6eUxvYWRpbmcoKSAmJlxuXHRcdFx0Zmlyc3RTdWJTZWN0aW9uVmlzaWJpbGl0eUJpbmRpbmcgJiZcblx0XHRcdHRoaXMuaXNGaXJzdEJpbmRpbmdcblx0XHQpIHtcblx0XHRcdC8vIGlmIGxhenkgbG9hZGluZyBpcyBlbmFibGVkIGFuZCBhdCBsZWFzdCBvbmUgc3Vic2VjdGlvbiBoYXMgYSB2aXNpYmlsaXR5IGJpbmRpbmdcblx0XHRcdG9PYmplY3RQYWdlLnNldFZpc2libGUoZmFsc2UpOyAvLyBUaGUgb2JqZWN0UGFnZSBWaXNpYmlsaXR5IGlzIHNldCB0byBmYWxzZSB0byBwcmV2ZW50IHRoZSBsYXp5IGxvYWRlciB0byBjb21wdXRlIHRoZSBzZWN0aW9uc1xuXHRcdFx0Zmlyc3RTdWJTZWN0aW9uVmlzaWJpbGl0eUJpbmRpbmcuYXR0YWNoRXZlbnRPbmNlKFwiY2hhbmdlXCIsIGFzeW5jICgpID0+IHtcblx0XHRcdFx0Y29uc3QgTURDVGFibGVQcm9taXNlcyA9IHRoaXMuX2dldEFsbEJsb2NrcygpLm1hcChhc3luYyAoYmxvY2spID0+XG5cdFx0XHRcdFx0YmxvY2suZ2V0VmlzaWJsZSgpICYmIGJsb2NrLmdldENvbnRlbnQ/LigpPy5pc0E8VGFibGVBUEk+KFwic2FwLmZlLm1hY3Jvcy50YWJsZS5UYWJsZUFQSVwiKVxuXHRcdFx0XHRcdFx0PyAoYmxvY2suZ2V0Q29udGVudCgpIGFzIFRhYmxlQVBJKS5nZXRDb250ZW50KCkuaW5pdGlhbGl6ZWQoKVxuXHRcdFx0XHRcdFx0OiBudWxsXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGF3YWl0IFByb21pc2UuYWxsKE1EQ1RhYmxlUHJvbWlzZXMpO1xuXHRcdFx0XHRvT2JqZWN0UGFnZS5zZXRWaXNpYmxlKHRydWUpOyAvLyBWaXNpYmlsaXR5IGlzIHJlc3RvcmVkIG9uY2UgdGhlIHZpc2liaWxpdHkgYmluZGluZ3Mgb2YgdGhlIHNlY3Rpb25zIGFyZSByZXNvbHZlZCwgYWxsb3dpbmcgbGF6eSBsb2FkaW5nIHRvIHByb3Blcmx5IHByb2Nlc3MgdGhlbVxuXHRcdFx0XHR0aGlzLmlzRmlyc3RCaW5kaW5nID0gZmFsc2U7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRpZiAob09iamVjdFBhZ2UuZ2V0RW5hYmxlTGF6eUxvYWRpbmcoKSkge1xuXHRcdFx0dGhpcy5fZGlzYWJsZUJsb2Nrc0JpbmRpbmdzKG9PYmplY3RQYWdlKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5wbGFjZWhvbGRlci5pc1BsYWNlaG9sZGVyRW5hYmxlZCgpICYmIG1QYXJhbWV0ZXJzLnNob3dQbGFjZWhvbGRlcikge1xuXHRcdFx0Y29uc3Qgb1ZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRcdGNvbnN0IG9OYXZDb250YWluZXIgPSAob1ZpZXcuZ2V0UGFyZW50KCkgYXMgdW5rbm93biBhcyB7IG9Db250YWluZXI6IENvbnRyb2wgfSkub0NvbnRhaW5lci5nZXRQYXJlbnQoKTtcblx0XHRcdGlmIChvTmF2Q29udGFpbmVyKSB7XG5cdFx0XHRcdHRoaXMucGxhY2Vob2xkZXIuZW5hYmxlQW5pbWF0aW9uKCk7XG5cdFx0XHRcdChvTmF2Q29udGFpbmVyIGFzIHVua25vd24gYXMgeyBzaG93UGxhY2Vob2xkZXI6IEZ1bmN0aW9uIH0pLnNob3dQbGFjZWhvbGRlcih7fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSB1c2VMYXp5TG9hZGVyT3B0aW1pemF0aW9ucygpOiBib29sZWFuIHtcblx0XHRpZiAobmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5nZXQoXCJzYXAtdWkteHgtbGF6eWxvYWRlci1vcHRpbWl6YXRpb25zXCIpID09PSBcInRydWVcIikge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0Rmlyc3RFZGl0YWJsZUlucHV0KCk6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGRvbUVkaXRhYmxlRWxlbWVudCA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkuX2dldEZpcnN0RWRpdGFibGVJbnB1dCgpO1xuXHRcdHJldHVybiBkb21FZGl0YWJsZUVsZW1lbnQgPyBVSTVFbGVtZW50LmNsb3Nlc3RUbyhkb21FZGl0YWJsZUVsZW1lbnQpIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgZmlyc3QgY2xpY2thYmxlIGVsZW1lbnQgaW4gdGhlIGhlYWRlciBvZiB0aGUgb2JqZWN0IHBhZ2UuXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSBvYmplY3RQYWdlIE9iamVjdCBQYWdlIExheW91dCBjb250cm9sXG5cdCAqIEByZXR1cm5zIFRoZSBmaXJzdCBjbGlja2FibGUgZWxlbWVudCBmb3VuZCBpbiB0aGUgaGVhZGVyXG5cdCAqL1xuXHRwcml2YXRlIGdldEZpcnN0Q2xpY2thYmxlRWxlbWVudChvYmplY3RQYWdlOiBPYmplY3RQYWdlTGF5b3V0KTogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IGZpcnN0Q2xpY2thYmxlRWxlbWVudDtcblx0XHRjb25zdCBhY3Rpb25zID0gb2JqZWN0UGFnZS5nZXRIZWFkZXJUaXRsZSgpICYmIChvYmplY3RQYWdlLmdldEhlYWRlclRpdGxlKCkgYXMgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZSkuZ2V0QWN0aW9ucygpO1xuXHRcdGlmIChhY3Rpb25zPy5sZW5ndGgpIHtcblx0XHRcdGZpcnN0Q2xpY2thYmxlRWxlbWVudCA9IGFjdGlvbnMuZmluZChmdW5jdGlvbiAoYWN0aW9uOiBDb250cm9sKSB7XG5cdFx0XHRcdC8vIER1ZSB0byB0aGUgbGVmdCBhbGlnbm1lbnQgb2YgdGhlIERyYWZ0IHN3aXRjaCBhbmQgdGhlIGNvbGxhYm9yYXRpdmUgZHJhZnQgYXZhdGFyIGNvbnRyb2xzXG5cdFx0XHRcdC8vIHRoZXJlIGlzIGEgVG9vbGJhclNwYWNlciBpbiB0aGUgYWN0aW9ucyBhZ2dyZWdhdGlvbiB3aGljaCB3ZSBuZWVkIHRvIGV4Y2x1ZGUgaGVyZSFcblx0XHRcdFx0Ly8gRHVlIHRvIHRoZSBBQ0MgcmVwb3J0LCB3ZSBhbHNvIG5lZWQgbm90IHRvIGNoZWNrIGZvciB0aGUgSW52aXNpYmxlVGV4dCBlbGVtZW50c1xuXHRcdFx0XHRpZiAoYWN0aW9uLmlzQTxTdW1tYXJpemF0aW9uQnV0dG9uPihcInNhcC5mZS5tYWNyb3MuYWkuU3VtbWFyaXphdGlvbkJ1dHRvblwiKSkge1xuXHRcdFx0XHRcdHJldHVybiBhY3Rpb24uZ2V0Q29udGVudCgpPy5nZXRWaXNpYmxlKCkgPz8gZmFsc2U7XG5cdFx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdFx0YWN0aW9uLmlzQTxTaGFyZUFQST4oXCJzYXAuZmUubWFjcm9zLlNoYXJlXCIpIHx8XG5cdFx0XHRcdFx0YWN0aW9uLmlzQTxFYXN5RmlsbEJ1dHRvbj4oXCJzYXAuZmUubWFjcm9zLmFpLkVhc3lGaWxsQnV0dG9uXCIpIHx8XG5cdFx0XHRcdFx0YWN0aW9uLmlzQTxDb2xsYWJvcmF0aW9uRHJhZnQ+KFwic2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLmNvbXBvbmVudHMuQ29sbGFib3JhdGlvbkRyYWZ0XCIpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdC8vIHNpbmNlIFNoYXJlIGFuZCBDb2xsYWJvcmF0aW9uRHJhZnQgZG9lcyBub3QgaGF2ZSBhIGRpc2FibGUgcHJvcGVydHlcblx0XHRcdFx0XHQvLyBoZW5jZSB0aGVyZSBpcyBubyBuZWVkIHRvIGNoZWNrIGlmIGl0IGlzIGRpc2FibGVkIG9yIG5vdFxuXHRcdFx0XHRcdHJldHVybiBhY3Rpb24uZ2V0VmlzaWJsZSgpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCFhY3Rpb24uaXNBPEludmlzaWJsZVRleHQ+KFwic2FwLnVpLmNvcmUuSW52aXNpYmxlVGV4dFwiKSAmJiAhYWN0aW9uLmlzQTxUb29sYmFyU3BhY2VyPihcInNhcC5tLlRvb2xiYXJTcGFjZXJcIikpIHtcblx0XHRcdFx0XHRyZXR1cm4gYWN0aW9uLmdldFZpc2libGUoKSAmJiAoYWN0aW9uIGFzIEJ1dHRvbikuZ2V0RW5hYmxlZCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGZpcnN0Q2xpY2thYmxlRWxlbWVudDtcblx0fVxuXG5cdC8qKlxuXHQgKiBEaXNhYmxlIHRoZSBiaW5kaW5ncyBvZiBibG9ja3MgaW4gT2JqZWN0IFBhZ2UgTGF5b3V0IGJhc2VkIG9uIHRoZSBpdHMgb3ZlcmFsbCBjb250ZW50LlxuXHQgKiBAcGFyYW0gb2JqZWN0UGFnZSBPYmplY3QgUGFnZSBMYXlvdXQgY29udHJvbFxuXHQgKi9cblx0X2Rpc2FibGVCbG9ja3NCaW5kaW5ncyh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlciwgb2JqZWN0UGFnZTogT2JqZWN0UGFnZUxheW91dCk6IHZvaWQge1xuXHRcdGNvbnN0IGFTZWN0aW9ucyA9IG9iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKTtcblx0XHRjb25zdCBiVXNlSWNvblRhYkJhciA9IG9iamVjdFBhZ2UuZ2V0VXNlSWNvblRhYkJhcigpO1xuXHRcdGxldCBpU2tpcCA9IDM7IC8vIDMgc2VjdGlvbnMvc3Vic2VjdGlvbnMgYXJlIGxvYWRlZCBpbml0aWFsbHksIHRoZSBvdGhlcnMgYXJlIGxvYWRlZCBsYXppbHlcblx0XHRjb25zdCBiSXNJbkVkaXRNb2RlID0gQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZSh0aGlzLmdldFZpZXcoKSk7XG5cdFx0Y29uc3QgYkVkaXRhYmxlSGVhZGVyID0gdGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS5lZGl0YWJsZUhlYWRlckNvbnRlbnQ7XG5cdFx0Y29uc3QgZmlyc3RWaXNpYmlsaXR5QmluZGluZyA9IHRoaXMuX2dldGZpcnN0U3ViU2VjdGlvblZpc2liaWxpdHlCaW5kaW5nKCk7XG5cdFx0Zm9yIChsZXQgaVNlY3Rpb24gPSAwOyBpU2VjdGlvbiA8IGFTZWN0aW9ucy5sZW5ndGg7IGlTZWN0aW9uKyspIHtcblx0XHRcdGNvbnN0IG9TZWN0aW9uID0gYVNlY3Rpb25zW2lTZWN0aW9uXTtcblx0XHRcdGNvbnN0IGFTdWJTZWN0aW9ucyA9IG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCk7XG5cdFx0XHRmb3IgKGxldCBpU3ViU2VjdGlvbiA9IDA7IGlTdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgaVN1YlNlY3Rpb24rKywgaVNraXAtLSkge1xuXHRcdFx0XHQvLyBJbiBJY29uVGFiQmFyIG1vZGUga2VlcCB0aGUgc2Vjb25kIHNlY3Rpb24gYm91bmQgaWYgdGhlcmUgaXMgYW4gZWRpdGFibGUgaGVhZGVyIGFuZCB3ZSBhcmUgc3dpdGNoaW5nIHRvIGRpc3BsYXkgbW9kZVxuXG5cdFx0XHRcdGNvbnN0IGRpc2FibGVCaW5kaW5nQ29udGV4dENvbmRpdGlvbiA9XG5cdFx0XHRcdFx0KCF0aGlzLnVzZUxhenlMb2FkZXJPcHRpbWl6YXRpb25zKCkgJiZcblx0XHRcdFx0XHRcdChpU2tpcCA8IDEgfHwgKGJVc2VJY29uVGFiQmFyICYmIChpU2VjdGlvbiA+IDEgfHwgKGlTZWN0aW9uID09PSAxICYmICFiRWRpdGFibGVIZWFkZXIgJiYgIWJJc0luRWRpdE1vZGUpKSkpKSB8fFxuXHRcdFx0XHRcdCh0aGlzLnVzZUxhenlMb2FkZXJPcHRpbWl6YXRpb25zKCkgJiZcblx0XHRcdFx0XHRcdCgoIWJVc2VJY29uVGFiQmFyICYmIGZpcnN0VmlzaWJpbGl0eUJpbmRpbmcpIHx8IC8vaWYgc29tZSBzdWJzZWN0aW9ucyBoYXZlIHZpc2liaWxpdHkgYmluZGluZyBhbmQgd2UgYXJlIG5vdCBpbiBJY29uVGFiQmFyIG1vZGVcblx0XHRcdFx0XHRcdFx0KCFiVXNlSWNvblRhYkJhciAmJiAhZmlyc3RWaXNpYmlsaXR5QmluZGluZyAmJiBpU2tpcCA8IDEpIHx8IC8vIGlmIG5vIHN1YnNlY3Rpb24gaGFzIHZpc2liaWxpdHkgYmluZGluZyBhbmQgd2UgYXJlIG5vdCBpbiBJY29uVGFiQmFyIG1vZGVcblx0XHRcdFx0XHRcdFx0KGJVc2VJY29uVGFiQmFyICYmIChpU2VjdGlvbiA+IDEgfHwgKGlTZWN0aW9uID09PSAxICYmICFiRWRpdGFibGVIZWFkZXIgJiYgIWJJc0luRWRpdE1vZGUpKSkpKTtcblx0XHRcdFx0aWYgKGRpc2FibGVCaW5kaW5nQ29udGV4dENvbmRpdGlvbikge1xuXHRcdFx0XHRcdGNvbnN0IG9TdWJTZWN0aW9uID0gYVN1YlNlY3Rpb25zW2lTdWJTZWN0aW9uXTtcblx0XHRcdFx0XHQvLyBTdWJTZWN0aW9uJ3MgYmluZGluZyBpcyBlbmFibGVkLlxuXHRcdFx0XHRcdG9TdWJTZWN0aW9uLnNldEJpbmRpbmdDb250ZXh0KHVuZGVmaW5lZCk7XG5cdFx0XHRcdFx0Y29uc3QgYmxvY2tzID0gb1N1YlNlY3Rpb24uZ2V0QmxvY2tzKCkgYXMgU3ViU2VjdGlvbkJsb2NrW107XG5cdFx0XHRcdFx0Ly8gU3ViU2VjdGlvbidzIGNvbnRlbnRzIGJpbmRpbmcgaXMgZGlzYWJsZWQuXG5cdFx0XHRcdFx0YmxvY2tzLmZvckVhY2goKGJsb2NrKSA9PiBibG9jay5zZXRCaW5kaW5nQ29udGV4dChudWxsKSk7XG5cdFx0XHRcdFx0b1N1YlNlY3Rpb24uZ2V0TW9yZUJsb2NrcygpLmZvckVhY2goKHN1YkJsb2NrKSA9PiBzdWJCbG9jay5zZXRCaW5kaW5nQ29udGV4dChudWxsKSk7XG5cdFx0XHRcdFx0b1N1YlNlY3Rpb24uZ2V0QWN0aW9ucygpLmZvckVhY2goKGFjdGlvbnMpID0+IGFjdGlvbnMuc2V0QmluZGluZ0NvbnRleHQobnVsbCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X2dldEZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZEZyb21TdWJTZWN0aW9uKGFTdWJTZWN0aW9uczogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSk6IElucHV0QmFzZSB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKGFTdWJTZWN0aW9ucy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG5cdFx0Zm9yIChjb25zdCBzdWJTZWN0aW9uIG9mIGFTdWJTZWN0aW9ucykge1xuXHRcdFx0Y29uc3QgYUJsb2NrcyA9IHN1YlNlY3Rpb24uZ2V0QmxvY2tzKCkgYXMgKEZvcm0gfCBGb3JtQVBJKVtdO1xuXG5cdFx0XHRpZiAoYUJsb2Nrcykge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGJsb2NrQ29udHJvbCBvZiBhQmxvY2tzKSB7XG5cdFx0XHRcdFx0aWYgKGJsb2NrQ29udHJvbC5nZXRCaW5kaW5nQ29udGV4dD8uKCkpIHtcblx0XHRcdFx0XHRcdGxldCBhRm9ybUNvbnRhaW5lcnM7XG5cblx0XHRcdFx0XHRcdGlmIChibG9ja0NvbnRyb2wuaXNBPEZvcm0+KFwic2FwLnVpLmxheW91dC5mb3JtLkZvcm1cIikpIHtcblx0XHRcdFx0XHRcdFx0YUZvcm1Db250YWluZXJzID0gYmxvY2tDb250cm9sLmdldEZvcm1Db250YWluZXJzKCk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGJsb2NrQ29udHJvbC5nZXRDb250ZW50ICYmIGJsb2NrQ29udHJvbC5nZXRDb250ZW50KCk/LmlzQTxGb3JtPihcInNhcC51aS5sYXlvdXQuZm9ybS5Gb3JtXCIpKSB7XG5cdFx0XHRcdFx0XHRcdGFGb3JtQ29udGFpbmVycyA9IChibG9ja0NvbnRyb2wuZ2V0Q29udGVudCgpIGFzIEZvcm0pLmdldEZvcm1Db250YWluZXJzKCk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGJsb2NrQ29udHJvbD8uZ2V0Q29udGVudD8uKCk/LmlzQTxGb3JtQVBJPihcInNhcC5mZS5tYWNyb3MuZm9ybS5Gb3JtQVBJXCIpKSB7XG5cdFx0XHRcdFx0XHRcdGFGb3JtQ29udGFpbmVycyA9ICgoYmxvY2tDb250cm9sLmdldENvbnRlbnQoKSBhcyBGb3JtQVBJKS5nZXRDb250ZW50KCkgYXMgRm9ybSkuZ2V0Rm9ybUNvbnRhaW5lcnMoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChhRm9ybUNvbnRhaW5lcnMpIHtcblx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBmb3JtQ29udGFpbmVyIG9mIGFGb3JtQ29udGFpbmVycykge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGFGb3JtRWxlbWVudHMgPSBmb3JtQ29udGFpbmVyLmdldEZvcm1FbGVtZW50cygpO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChhRm9ybUVsZW1lbnRzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGZvcm1FbGVtZW50IG9mIGFGb3JtRWxlbWVudHMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgYUZpZWxkcyA9IGZvcm1FbGVtZW50LmdldEZpZWxkcygpIGFzIElucHV0QmFzZVtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBlbXB0eUZpZWxkID0gdGhpcy5nZXRGaXJzdEVtcHR5UmVxdWlyZWRGaWVsZChhRmllbGRzKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGVtcHR5RmllbGQpIHJldHVybiBlbXB0eUZpZWxkO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogVmVyaWZ5IGlmIHRoZSBmaXJzdCBmaWVsZCBpcyBlbXB0eSBhbmQgcmVxdWlyZWQuXG5cdCAqIEBwYXJhbSBmaWVsZHMgVGhlIGZpZWxkcyB0byBjaGVja1xuXHQgKiBAcmV0dXJucyBUaGUgZmlyc3QgZW1wdHkgcmVxdWlyZWQgZmllbGQgb3IgdW5kZWZpbmVkIGlmIG5vIHN1Y2ggZmllbGQgZXhpc3RzXG5cdCAqL1xuXHRnZXRGaXJzdEVtcHR5UmVxdWlyZWRGaWVsZChmaWVsZHM6IElucHV0QmFzZVtdKTogSW5wdXRCYXNlIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoIWZpZWxkcyB8fCBmaWVsZHMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cblx0XHRpZiAoIWZpZWxkc1swXS5nZXRSZXF1aXJlZD8uKCkpIHJldHVybjtcblxuXHRcdGxldCBpc0VtcHR5ID0gZmFsc2U7XG5cblx0XHR0cnkge1xuXHRcdFx0aWYgKGZpZWxkc1swXS5pc0EoXCJzYXAuZmUubWFjcm9zLk11bHRpVmFsdWVGaWVsZFwiKSkge1xuXHRcdFx0XHRjb25zdCBpdGVtcyA9IChmaWVsZHNbMF0gYXMgdW5rbm93biBhcyBNdWx0aVZhbHVlRmllbGRCbG9jaykuZ2V0TXVsdGlWYWx1ZUZpZWxkKCkuZ2V0SXRlbXMoKTtcblx0XHRcdFx0aXNFbXB0eSA9IGl0ZW1zLmxlbmd0aCA9PT0gMDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gKGZpZWxkc1swXSBhcyBJbnB1dEJhc2UpLmdldFZhbHVlKCk7XG5cdFx0XHRcdGlzRW1wdHkgPSAhdmFsdWU7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdExvZy5kZWJ1ZyhgRXJyb3Igd2hlbiBjaGVja2luZyBmaWVsZCBwcm9wZXJ0aWVzOiAke2Vycm9yfWApO1xuXHRcdH1cblxuXHRcdHJldHVybiBpc0VtcHR5ID8gZmllbGRzWzBdIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgaW5pdGlhbCBmb2N1cyBpbiBlZGl0IG1vZGUuXG5cdCAqIEBwYXJhbSBhU3ViU2VjdGlvbnMgT2JqZWN0IHBhZ2Ugc3ViIHNlY3Rpb25zXG5cdCAqL1xuXHRfdXBkYXRlRm9jdXNJbkVkaXRNb2RlKGFTdWJTZWN0aW9uczogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSk6IHZvaWQge1xuXHRcdHNldFRpbWVvdXQoXG5cdFx0XHRmdW5jdGlvbiAodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIpOiB2b2lkIHtcblx0XHRcdFx0Ly8gV2Ugc2V0IHRoZSBmb2N1cyBpbiBhIHRpbWVlb3V0LCBvdGhlcndpc2UgdGhlIGZvY3VzIHNvbWV0aW1lcyBnb2VzIHRvIHRoZSBUYWJCYXJcblx0XHRcdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdFx0XHRjb25zdCBvTWFuZGF0b3J5RmllbGQgPSB0aGlzLl9nZXRGaXJzdEVtcHR5TWFuZGF0b3J5RmllbGRGcm9tU3ViU2VjdGlvbihhU3ViU2VjdGlvbnMpO1xuXHRcdFx0XHRsZXQgb0ZpZWxkVG9Gb2N1cztcblx0XHRcdFx0aWYgKG9NYW5kYXRvcnlGaWVsZCkge1xuXHRcdFx0XHRcdGlmIChvTWFuZGF0b3J5RmllbGQuaXNBKFwic2FwLmZlLm1hY3Jvcy5NdWx0aVZhbHVlRmllbGRcIikpIHtcblx0XHRcdFx0XHRcdG9GaWVsZFRvRm9jdXMgPSAob01hbmRhdG9yeUZpZWxkIGFzIHVua25vd24gYXMgTXVsdGlWYWx1ZUZpZWxkQmxvY2spLmdldE11bHRpVmFsdWVGaWVsZCgpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRvRmllbGRUb0ZvY3VzID0gKFxuXHRcdFx0XHRcdFx0XHRvTWFuZGF0b3J5RmllbGQgYXMgdW5rbm93biBhcyB7IGNvbnRlbnQ6IHsgZ2V0Q29udGVudEVkaXQ6IEZ1bmN0aW9uIH0gfVxuXHRcdFx0XHRcdFx0KS5jb250ZW50LmdldENvbnRlbnRFZGl0KClbMF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG9GaWVsZFRvRm9jdXMgPSB0aGlzLmdldEZpcnN0RWRpdGFibGVJbnB1dCgpID8/IHRoaXMuZ2V0Rmlyc3RDbGlja2FibGVFbGVtZW50KG9PYmplY3RQYWdlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob0ZpZWxkVG9Gb2N1cykge1xuXHRcdFx0XHRcdGNvbnN0IGZvY3VzSW5mbyA9IG9GaWVsZFRvRm9jdXMuZ2V0Rm9jdXNJbmZvKCkgYXMgeyB0YXJnZXRJbmZvOiBvYmplY3QgfTtcblx0XHRcdFx0XHRmb2N1c0luZm8udGFyZ2V0SW5mbyA9IHsgc2lsZW50OiB0cnVlIH07XG5cdFx0XHRcdFx0aWYgKG9GaWVsZFRvRm9jdXMuaXNBKFwic2FwLnVpLm1kYy5maWVsZC5GaWVsZElucHV0XCIpKSB7XG5cdFx0XHRcdFx0XHRvRmllbGRUb0ZvY3VzID0gb0ZpZWxkVG9Gb2N1cy5nZXRQYXJlbnQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0b0ZpZWxkVG9Gb2N1cy5mb2N1cyhmb2N1c0luZm8pO1xuXHRcdFx0XHR9XG5cdFx0XHR9LmJpbmQodGhpcyksXG5cdFx0XHQwIC8vMzAwXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGZpcnN0IHN1Yi1zZWN0aW9uIHdpdGggYSB2aXNpYmlsaXR5IGJvdW5kIHRvIHRoZSBtb2RlbCBvZiB0aGUgdmlldy5cblx0ICogU2VjdGlvbnMgd2l0aCBCaW5kaW5ncyBvbiBpbnRlcm5hbCBtb2RlbHMgb25seSBhcmUgaWdub3JlZC5cblx0ICogQHJldHVybnMgVGhlIHZpc2liaWxpdHkgYmluZGluZyBvZiB0aGUgZmlyc3Qgc3ViLXNlY3Rpb24gb3IgdW5kZWZpbmVkIGlmIG5vdCBmb3VuZC5cblx0ICovXG5cdF9nZXRmaXJzdFN1YlNlY3Rpb25WaXNpYmlsaXR5QmluZGluZygpOiBCaW5kaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBhbGxzdWJTZWN0aW9ucyA9IHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCk7XG5cdFx0Y29uc3QgY3VycmVudE1vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoKTtcblx0XHRyZXR1cm4gYWxsc3ViU2VjdGlvbnNcblx0XHRcdC5maW5kKFxuXHRcdFx0XHQoc3ViU2VjdGlvbikgPT5cblx0XHRcdFx0XHQoc3ViU2VjdGlvbi5nZXRCaW5kaW5nKFwidmlzaWJsZVwiKSBhcyBDb21wb3NpdGVCaW5kaW5nIHwgdW5kZWZpbmVkKVxuXHRcdFx0XHRcdFx0Py5nZXRCaW5kaW5ncz8uKClcblx0XHRcdFx0XHRcdC5zb21lKChiaW5kaW5nKSA9PiBiaW5kaW5nLmdldE1vZGVsKCkgPT09IGN1cnJlbnRNb2RlbClcblx0XHRcdClcblx0XHRcdD8uZ2V0QmluZGluZyhcInZpc2libGVcIik7XG5cdH1cblxuXHRfaGFuZGxlU3ViU2VjdGlvbkVudGVyZWRWaWV3UG9ydChvRXZlbnQ6IFVJNUV2ZW50PHsgc3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24gfT4pOiB2b2lkIHtcblx0XHRjb25zdCBvU3ViU2VjdGlvbiA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJzdWJTZWN0aW9uXCIpO1xuXHRcdGNvbnN0IGJsb2NrcyA9IG9TdWJTZWN0aW9uLmdldEJsb2NrcygpIGFzIFN1YlNlY3Rpb25CbG9ja1tdO1xuXHRcdGJsb2Nrcy5mb3JFYWNoKChibG9jaykgPT4gYmxvY2suc2V0QmluZGluZ0NvbnRleHQodW5kZWZpbmVkKSk7XG5cdFx0b1N1YlNlY3Rpb24uZ2V0TW9yZUJsb2NrcygpLmZvckVhY2goKHN1YkJsb2NrKSA9PiBzdWJCbG9jay5zZXRCaW5kaW5nQ29udGV4dCh1bmRlZmluZWQpKTtcblx0XHRvU3ViU2VjdGlvbi5nZXRBY3Rpb25zKCkuZm9yRWFjaCgoYWN0aW9ucykgPT4gYWN0aW9ucy5zZXRCaW5kaW5nQ29udGV4dCh1bmRlZmluZWQpKTtcblx0fVxuXG5cdF9vbkJhY2tOYXZpZ2F0aW9uSW5EcmFmdChvQ29udGV4dDogT0RhdGFWNENvbnRleHQpOiB2b2lkIHtcblx0XHR0aGlzLm1lc3NhZ2VIYW5kbGVyLnJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcygpO1xuXG5cdFx0Ly8gRnVuY3Rpb24gdG8gbmF2aWdhdGUgYmFjaywgb3IgZGlzcGxheSB0aGUgbGF1bmNocGFkIGlmIHdlJ3JlIG9uIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBoaXN0b3J5XG5cdFx0Y29uc3QgbmF2QmFjayA9ICgpOiB2b2lkID0+IHtcblx0XHRcdGNvbnN0IGN1cnJlbnRVUkwgPSBkb2N1bWVudC5VUkw7XG5cdFx0XHRoaXN0b3J5LmJhY2soKTtcblx0XHRcdC8vIEluIGNhc2UgdGhlcmUgaXMgbm8gcHJldmlvdXMgcGFnZSBpbiB0aGUgaGlzdG9yeSwgaGlzdG9yeS5iYWNrIGRvZXMgbm90aGluZy5cblx0XHRcdC8vIEluIHRoaXMgY2FzZSwgd2UgbmVlZCB0byB1c2UgbmF2aWdhdGVCYWNrRnJvbUNvbnRleHQsIHRoYXQgd2lsbCBkaXNwbGF5IHRoZSBob21lIHBhZ2Vcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRpZiAoZG9jdW1lbnQuVVJMID09PSBjdXJyZW50VVJMKSB7XG5cdFx0XHRcdFx0dGhpcy5fcm91dGluZy5uYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dChvQ29udGV4dCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sIDUwMCk7XG5cdFx0fTtcblxuXHRcdGlmICh0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvdXRlclByb3h5KCkuY2hlY2tJZkJhY2tIYXNTYW1lQ29udGV4dCgpKSB7XG5cdFx0XHQvLyBCYWNrIG5hdiB3aWxsIGtlZXAgdGhlIHNhbWUgY29udGV4dCAtLT4gbm8gbmVlZCB0byBkaXNwbGF5IHRoZSBkaWFsb2dcblx0XHRcdGhpc3RvcnkuYmFjaygpO1xuXHRcdH0gZWxzZSBpZiAoIXRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCkpIHtcblx0XHRcdC8vIFRoaXMgb2JqZWN0IHBhZ2UgZG9lc24ndCBoYXZlIGEgYmluZGluZyBjb250ZXh0LCBidXQgc3RpbGwgaGFuZGxlcyB0aGUgc2hlbGwgYmFjayBuYXZpZ2F0aW9uIC0tPiBwZm9ybSB0aGUgbmF2IGJhY2sgYW5kIHJlbW92ZSB0aGUgbmF2YmFjayBoYW5kbGVyIGFzIGl0IG1ha2VzIG5vIHNlbnNlIGFueSBsb25nZXJcblx0XHRcdHRoaXMuZ2V0QXBwQ29tcG9uZW50KClcblx0XHRcdFx0LmdldFNoZWxsU2VydmljZXMoKVxuXHRcdFx0XHQuc2V0QmFja05hdmlnYXRpb24odW5kZWZpbmVkKVxuXHRcdFx0XHQudGhlbihuYXZCYWNrKVxuXHRcdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRMb2cud2FybmluZyhcIkVycm9yIHdoaWxlIHNldHRpbmcgYmFjayBuYXZpZ2F0aW9uXCIsIGUpO1xuXHRcdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgaGlkZGVuRHJhZnRFbmFibGVkID0gKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk/LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCk/LmdldENhcGFiaWxpdGllcygpPy5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdClcblx0XHRcdFx0Py5lbmFibGVkO1xuXHRcdFx0ZHJhZnQucHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24oXG5cdFx0XHRcdG5hdkJhY2ssXG5cdFx0XHRcdEZ1bmN0aW9uLnByb3RvdHlwZSxcblx0XHRcdFx0b0NvbnRleHQsXG5cdFx0XHRcdHRoaXMsXG5cdFx0XHRcdHRydWUsXG5cdFx0XHRcdGRyYWZ0Lk5hdmlnYXRpb25UeXBlLkJhY2tOYXZpZ2F0aW9uLFxuXHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdGhpZGRlbkRyYWZ0RW5hYmxlZCA/IHRydWUgOiB1bmRlZmluZWRcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRfb25BZnRlckJpbmRpbmcoaW5wdXRCaW5kaW5nQ29udGV4dDogQ29udGV4dCB8IHVuZGVmaW5lZCwgbVBhcmFtZXRlcnM6IEJpbmRpbmdQYXJhbXMgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0XHRjb25zdCB2aWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0Y29uc3Qgdmlld0xldmVsID0gdmlldz8uZ2V0Vmlld0RhdGEoKT8udmlld0xldmVsO1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRjb25zdCBhVGFibGVzID0gdGhpcy5fZmluZFRhYmxlcygpO1xuXG5cdFx0dGhpcy5fc2lkZUVmZmVjdHMuY2xlYXJGaWVsZEdyb3Vwc1ZhbGlkaXR5KCk7XG5cblx0XHQvLyBUT0RPOiB0aGlzIGlzIG9ubHkgYSB0ZW1wIHNvbHV0aW9uIGFzIGxvbmcgYXMgdGhlIG1vZGVsIGZpeCB0aGUgY2FjaGUgaXNzdWUgYW5kIHdlIHVzZSB0aGlzIGFkZGl0aW9uYWxcblx0XHQvLyBiaW5kaW5nIHdpdGggb3duUmVxdWVzdFxuXHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0ID0gb09iamVjdFBhZ2UuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dDtcblxuXHRcdGxldCBhSUJOQWN0aW9uczogVUk1RWxlbWVudFtdID0gW107XG5cdFx0b09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvU2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24pIHtcblx0XHRcdG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1N1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uKSB7XG5cdFx0XHRcdGFJQk5BY3Rpb25zID0gQ29tbW9uVXRpbHMuZ2V0SUJOQWN0aW9ucyhvU3ViU2VjdGlvbiwgYUlCTkFjdGlvbnMpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHQvLyBBc3NpZ24gaW50ZXJuYWwgYmluZGluZyBjb250ZXh0cyB0byBvRm9ybUNvbnRhaW5lcjpcblx0XHQvLyAxLiBJdCBpcyBub3QgcG9zc2libGUgdG8gYXNzaWduIHRoZSBpbnRlcm5hbCBiaW5kaW5nIGNvbnRleHQgdG8gdGhlIFhNTCBmcmFnbWVudFxuXHRcdC8vIChGb3JtQ29udGFpbmVyLmZyYWdtZW50LnhtbCkgeWV0IC0gaXQgaXMgdXNlZCBhbHJlYWR5IGZvciB0aGUgZGF0YS1zdHJ1Y3R1cmUuXG5cdFx0Ly8gMi4gQW5vdGhlciBwcm9ibGVtIGlzLCB0aGF0IEZvcm1Db250YWluZXJzIGFzc2lnbmVkIHRvIGEgJ01vcmVCbG9jaycgZG9lcyBub3QgaGF2ZSBhblxuXHRcdC8vIGludGVybmFsIG1vZGVsIGNvbnRleHQgYXQgYWxsLlxuXG5cdFx0YVRhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uIChvVGFibGU6IFRhYmxlKSB7XG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRcdGlmIChvSW50ZXJuYWxNb2RlbENvbnRleHQpIHtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3JlYXRpb25Sb3dGaWVsZFZhbGlkaXR5XCIsIHt9KTtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3JlYXRpb25Sb3dDdXN0b21WYWxpZGl0eVwiLCB7fSk7XG5cblx0XHRcdFx0YUlCTkFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9UYWJsZSwgYUlCTkFjdGlvbnMpO1xuXG5cdFx0XHRcdC8vIHRlbXBvcmFyeSB3b3JrYXJvdW5kIGZvciBCQ1A6IDIwODAyMTgwMDRcblx0XHRcdFx0Ly8gTmVlZCB0byBmaXggd2l0aCBCTEk6IEZJT1JJVEVDSFAxLTE1Mjc0XG5cdFx0XHRcdC8vIG9ubHkgZm9yIGVkaXQgbW9kZSwgd2UgY2xlYXIgdGhlIHRhYmxlIGNhY2hlXG5cdFx0XHRcdC8vIFdvcmthcm91bmQgc3RhcnRzIGhlcmUhIVxuXHRcdFx0XHRjb25zdCBvVGFibGVSb3dCaW5kaW5nID0gb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRcdFx0aWYgKG9UYWJsZVJvd0JpbmRpbmcpIHtcblx0XHRcdFx0XHRpZiAoTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKG9UYWJsZVJvd0JpbmRpbmcuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSkpIHtcblx0XHRcdFx0XHRcdC8vIGFwcGx5IGZvciBib3RoIGVkaXQgYW5kIGRpc3BsYXkgbW9kZSBpbiBzdGlja3lcblx0XHRcdFx0XHRcdChvVGFibGVSb3dCaW5kaW5nIGFzIHVua25vd24gYXMgeyByZW1vdmVDYWNoZXNBbmRNZXNzYWdlczogRnVuY3Rpb24gfSkucmVtb3ZlQ2FjaGVzQW5kTWVzc2FnZXMoXCJcIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIFdvcmthcm91bmQgZW5kcyBoZXJlISFcblxuXHRcdFx0XHQvLyBDbGVhciB0aGUgc2VsZWN0aW9uIGluIHRoZSB0YWJsZSBhbmQgdXBkYXRlIGFjdGlvbiBlbmFibGVtZW50IGFjY29yZGluZ2x5XG5cdFx0XHRcdC8vIFdpbGwgdG8gYmUgZml4ZWQgd2l0aCBCTEk6IEZJT1JJVEVDSFAxLTI0MzE4XG5cdFx0XHRcdGNvbnN0IHRhYmxlQVBJID0gb1RhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdFx0XHRjb25zdCBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gdGFibGVBUEkgPyBKU09OLnBhcnNlKHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5vcGVyYXRpb25BdmFpbGFibGVNYXApIDoge307XG5cblx0XHRcdFx0QWN0aW9uUnVudGltZS5zZXRBY3Rpb25FbmFibGVtZW50KG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCwgW10sIFwidGFibGVcIik7XG5cblx0XHRcdFx0b1RhYmxlLmNsZWFyU2VsZWN0aW9uKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0Ly9SZXRyaWV2ZSBPYmplY3QgUGFnZSBoZWFkZXIgYWN0aW9ucyBmcm9tIE9iamVjdCBQYWdlIHRpdGxlIGNvbnRyb2xcblx0XHRjb25zdCBvT2JqZWN0UGFnZVRpdGxlID0gb09iamVjdFBhZ2UuZ2V0SGVhZGVyVGl0bGUoKSBhcyBPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlO1xuXHRcdGxldCBhSUJOSGVhZGVyQWN0aW9uczogVUk1RWxlbWVudFtdID0gW107XG5cdFx0YUlCTkhlYWRlckFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9PYmplY3RQYWdlVGl0bGUsIGFJQk5IZWFkZXJBY3Rpb25zKTtcblx0XHRhSUJOQWN0aW9ucyA9IGFJQk5BY3Rpb25zLmNvbmNhdChhSUJOSGVhZGVyQWN0aW9ucyk7XG5cdFx0Q29tbW9uVXRpbHMudXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkoYUlCTkFjdGlvbnMsIHRoaXMuZ2V0VmlldygpKTtcblxuXHRcdGxldCBvTW9kZWw6IE9EYXRhTW9kZWwsXG5cdFx0XHRvRmluYWxVSVN0YXRlOiBQcm9taXNlPHVua25vd24+ID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cblx0XHQvLyB0aGlzIHNob3VsZCBub3QgYmUgbmVlZGVkIGF0IHRoZSBhbGxcblx0XHQvKipcblx0XHQgKiBAcGFyYW0gb1RhYmxlXG5cdFx0ICovXG5cdFx0Y29uc3QgaGFuZGxlVGFibGVNb2RpZmljYXRpb25zID0gKG9UYWJsZTogVGFibGUpOiB2b2lkID0+IHtcblx0XHRcdGNvbnN0IG9CaW5kaW5nID0gdGhpcy5fZ2V0VGFibGVCaW5kaW5nKG9UYWJsZSksXG5cdFx0XHRcdGZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cyA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0XHRUYWJsZUhlbHBlci5lbmFibGVGYXN0Q3JlYXRpb25Sb3coXG5cdFx0XHRcdFx0XHRvVGFibGUuZ2V0Q3JlYXRpb25Sb3coKSxcblx0XHRcdFx0XHRcdG9CaW5kaW5nLmdldFBhdGgoKSxcblx0XHRcdFx0XHRcdG9CaW5kaW5nLmdldENvbnRleHQoKSxcblx0XHRcdFx0XHRcdG9Nb2RlbCxcblx0XHRcdFx0XHRcdG9GaW5hbFVJU3RhdGVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRpZiAoIW9CaW5kaW5nKSB7XG5cdFx0XHRcdExvZy5lcnJvcihgRXhwZWN0ZWQgYmluZGluZyBtaXNzaW5nIGZvciB0YWJsZTogJHtvVGFibGUuZ2V0SWQoKX1gKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAob0JpbmRpbmcuZ2V0Q29udGV4dCgpKSB7XG5cdFx0XHRcdGZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgZm5IYW5kbGVDaGFuZ2UgPSBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRcdFx0aWYgKG9CaW5kaW5nLmdldENvbnRleHQoKSkge1xuXHRcdFx0XHRcdFx0Zm5IYW5kbGVUYWJsZVBhdGNoRXZlbnRzKCk7XG5cdFx0XHRcdFx0XHRvQmluZGluZy5kZXRhY2hDaGFuZ2UoZm5IYW5kbGVDaGFuZ2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdFx0b0JpbmRpbmcuYXR0YWNoQ2hhbmdlKGZuSGFuZGxlQ2hhbmdlKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0aWYgKGJpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRvTW9kZWwgPSBiaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpO1xuXG5cdFx0XHQvLyBDb21wdXRlIEVkaXQgTW9kZVxuXHRcdFx0b0ZpbmFsVUlTdGF0ZSA9IHRoaXMuZWRpdEZsb3cuY29tcHV0ZU1vZGVsc0ZvckVkaXRNb2RlKGJpbmRpbmdDb250ZXh0KTtcblxuXHRcdFx0Ly8gdXBkYXRlIHJlbGF0ZWQgYXBwc1xuXHRcdFx0dGhpcy5fdXBkYXRlUmVsYXRlZEFwcHMoKTtcblxuXHRcdFx0Ly9BdHRhY2ggdGhlIHBhdGNoIHNlbnQgYW5kIHBhdGNoIGNvbXBsZXRlZCBldmVudCB0byB0aGUgb2JqZWN0IHBhZ2UgYmluZGluZyBzbyB0aGF0IHdlIGNhbiByZWFjdFxuXHRcdFx0Y29uc3Qgb0JpbmRpbmcgPSAoYmluZGluZ0NvbnRleHQuZ2V0QmluZGluZyAmJiBiaW5kaW5nQ29udGV4dC5nZXRCaW5kaW5nKCkpIHx8IGJpbmRpbmdDb250ZXh0O1xuXG5cdFx0XHQvLyBBdHRhY2ggdGhlIGV2ZW50IGhhbmRsZXIgb25seSBvbmNlIHRvIHRoZSBzYW1lIGJpbmRpbmdcblx0XHRcdGlmICh0aGlzLmN1cnJlbnRCaW5kaW5nICE9PSBvQmluZGluZykge1xuXHRcdFx0XHRvQmluZGluZy5hdHRhY2hFdmVudChcInBhdGNoU2VudFwiLCB7fSwgdGhpcy5lZGl0Rmxvdy5oYW5kbGVQYXRjaFNlbnQsIHRoaXMpO1xuXHRcdFx0XHR0aGlzLmN1cnJlbnRCaW5kaW5nID0gb0JpbmRpbmc7XG5cdFx0XHR9XG5cblx0XHRcdGFUYWJsZXMuZm9yRWFjaChmdW5jdGlvbiAob1RhYmxlOiBUYWJsZSk6IHZvaWQge1xuXHRcdFx0XHQvLyBhY2Nlc3MgYmluZGluZyBvbmx5IGFmdGVyIHRhYmxlIGlzIGJvdW5kXG5cdFx0XHRcdFRhYmxlVXRpbHMud2hlbkJvdW5kKG9UYWJsZSlcblx0XHRcdFx0XHQudGhlbihoYW5kbGVUYWJsZU1vZGlmaWNhdGlvbnMpXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSB0YWJsZSB0byBiZSBib3VuZFwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYWZ0ZXIgYmluZGluZyBpcyByZWFkeSBoZW5jZSBjYWxsaW5nIGl0IGluIG9uQWZ0ZXJCaW5kaW5nXG5cdFx0XHQob09iamVjdFBhZ2UgYXMgdW5rbm93biBhcyB7IF90cmlnZ2VyVmlzaWJsZVN1YlNlY3Rpb25zRXZlbnRzOiBGdW5jdGlvbiB9KS5fdHJpZ2dlclZpc2libGVTdWJTZWN0aW9uc0V2ZW50cygpO1xuXG5cdFx0XHQvL1RvIENvbXB1dGUgdGhlIEVkaXQgQmluZGluZyBvZiB0aGUgc3ViT2JqZWN0IHBhZ2UgdXNpbmcgcm9vdCBvYmplY3QgcGFnZSwgY3JlYXRlIGEgY29udGV4dCBmb3IgZHJhZnQgcm9vdCBhbmQgdXBkYXRlIHRoZSBlZGl0IGJ1dHRvbiBpbiBzdWIgT1AgdXNpbmcgdGhlIGNvbnRleHRcblx0XHRcdEFjdGlvblJ1bnRpbWUudXBkYXRlRWRpdEJ1dHRvblZpc2liaWxpdHlBbmRFbmFibGVtZW50KHRoaXMuZ2V0VmlldygpKTtcblxuXHRcdFx0dGhpcy5fdXBkYXRlQXZhaWxhYmxlQ2FyZHMoW10pO1xuXHRcdH1cblx0XHQvLyB3ZSBhcmUgY2xlYXJpbmcgYW55IHByZXZpb3VzIGRhdGEgZnJvbSByZWNvbW1lbmRhdGlvbnMgZXZlcnkgdGltZSB3ZSBjb21lIHRvIG5ldyBPUFxuXHRcdC8vIHNvIHRoYXQgY2FjaGVkIHJlY29tbWVuZGF0aW9ucyBhcmUgbm90IHNob3duIHRvIHVzZXJcblx0XHRpZiAodmlld0xldmVsICYmIHZpZXdMZXZlbCA9PT0gMSkge1xuXHRcdFx0b0ZpbmFsVUlTdGF0ZT8udGhlbigoKSA9PiB7XG5cdFx0XHRcdHRoaXMucmVjb21tZW5kYXRpb25zLmNsZWFyUmVjb21tZW5kYXRpb25zKCk7XG5cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHRoaXMuZGlzcGxheUNvbGxhYm9yYXRpb25NZXNzYWdlKG1QYXJhbWV0ZXJzPy5yZWRpcmVjdGVkVG9Ob25EcmFmdCk7XG5cdFx0dGhpcy5fc2V0T1BNZXNzYWdlU3RyaXBJbnRlcm5hbENvbnRleHQoKTtcblxuXHRcdGNvbnN0IGFwcGx5QXBwU3RhdGUgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldEFwcFN0YXRlSGFuZGxlcigpLmFwcGx5QXBwU3RhdGUodmlldyk7XG5cdFx0dGhpcy5wYWdlUmVhZHkud2FpdEZvcihhcHBseUFwcFN0YXRlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGUgdGhlIGNhcmRzIHdoZW4gdGhlIGJpbmRpbmcgaXMgcmVmcmVzaGVkLlxuXHQgKiBAcGFyYW0gY2FyZHMgQXJyYXkgb2YgY2FyZHMgdG8gYmUgdXBkYXRlZFxuXHQgKi9cblx0YXN5bmMgX3VwZGF0ZUF2YWlsYWJsZUNhcmRzKGNhcmRzOiBXcmFwcGVkQ2FyZFtdKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0YXdhaXQgdGhpcy5jb2xsYWJvcmF0aW9uTWFuYWdlci5jb2xsZWN0QXZhaWxhYmxlQ2FyZHMoY2FyZHMpO1xuXHRcdGlmIChjYXJkcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRjb25zdCBjYXJkT2JqZWN0ID0gdGhpcy5jb2xsYWJvcmF0aW9uTWFuYWdlci51cGRhdGVDYXJkcyhjYXJkcyk7XG5cdFx0XHRjb25zdCBwYXJlbnRBcHBJZCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0SWQoKTtcblx0XHRcdHRoaXMuZ2V0QXBwQ29tcG9uZW50KClcblx0XHRcdFx0LmdldENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSgpXG5cdFx0XHRcdC5hZGRDYXJkc1RvQ29sbGFib3JhdGlvbk1hbmFnZXIoY2FyZE9iamVjdCwgcGFyZW50QXBwSWQsIHRoaXMuZ2V0VmlldygpLmdldElkKCkpO1xuXHRcdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRDb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2UoKS5zaGFyZUF2YWlsYWJsZUNhcmRzKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgaW50ZXJuYWwgYmluZGluZyBjb250ZXh0IG9mIHRoZSBNZXNzYWdlc3RyaXAgT1AuXG5cdCAqL1xuXHRfc2V0T1BNZXNzYWdlU3RyaXBJbnRlcm5hbENvbnRleHQoKTogdm9pZCB7XG5cdFx0Y29uc3QgdmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsQ29udGV4dCA9IHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJNZXNzYWdlU3RyaXBcIiwgeyAuLi5pbnRlcm5hbE1vZGVsQ29udGV4dD8uZ2V0UHJvcGVydHkoXCJNZXNzYWdlU3RyaXBcIikgfSk7XG5cdFx0aWYgKGludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0XHQob09iamVjdFBhZ2UuZ2V0SGVhZGVyVGl0bGUoKSBhcyB1bmtub3duIGFzIENvbnRyb2wpXG5cdFx0XHRcdD8uZmluZEVsZW1lbnRzKHRydWUsIChlbGVtOiBDb250cm9sKSA9PiBlbGVtLmlzQShcInNhcC5tLk1lc3NhZ2VTdHJpcFwiKSlcblx0XHRcdFx0LmZvckVhY2goKG1lc3NhZ2VTdHJpcDogVUk1RWxlbWVudCkgPT4ge1xuXHRcdFx0XHRcdG1lc3NhZ2VTdHJpcC5zZXRCaW5kaW5nQ29udGV4dChcblx0XHRcdFx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0XG5cdFx0XHRcdFx0XHRcdC5nZXRNb2RlbCgpXG5cdFx0XHRcdFx0XHRcdC5iaW5kQ29udGV4dCh0aGlzLmdldEV4dGVuc2lvbkFQSSgpLl9nZXRNZXNzYWdlU3RyaXBCaW5kaW5nQ29udGV4dFBhdGgoKSlcblx0XHRcdFx0XHRcdFx0LmdldEJvdW5kQ29udGV4dCgpISxcblx0XHRcdFx0XHRcdFwiaW50ZXJuYWxcIlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0Ly8gSWYgdGhlIHZpZXcncyBiaW5kaW5nIGNvbnRleHQgYWxyZWFkeSBoYWQgbWVzc2FnZXMgdGhhdCB3ZXJlIG5vdCBjbGVhcmVkLCB3ZSB3b3VsZCBuZWVkIHRvIHJlLWV2YWx1YXRlIHRvIHNob3cgdGhlIG1lc3NhZ2Ugc3RyaXAuXG5cdFx0XHR0aGlzLl9mblNob3dPUE1lc3NhZ2UoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2hvdyBhIG1lc3NhZ2Ugc3RyaXAgaWYgYSByZWRpcmVjdGlvbiB0byBhIG5vbi1kcmFmdCBlbGVtZW50IGhhcyBiZWVuIGRvbmUuXG5cdCAqIFJlbW92ZSB0aGUgbWVzc2FnZSBzdHJpcCBpbiBjYXNlIHdlIG5hdmlnYXRlIHRvIGFub3RoZXIgb2JqZWN0IHBhZ2UuXG5cdCAqIEBwYXJhbSBlbnRpdHlOYW1lIE5hbWUgb2YgdGhlIEVudGl0eSB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIG1lc3NhZ2Vcblx0ICovXG5cdGRpc3BsYXlDb2xsYWJvcmF0aW9uTWVzc2FnZShlbnRpdHlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0XHRjb25zdCByZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSE7XG5cblx0XHRpZiAodGhpcy5jb2xsYWJvcmF0aW9uTWVzc2FnZSkge1xuXHRcdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKFt0aGlzLmNvbGxhYm9yYXRpb25NZXNzYWdlXSk7XG5cdFx0XHRkZWxldGUgdGhpcy5jb2xsYWJvcmF0aW9uTWVzc2FnZTtcblx0XHR9XG5cblx0XHRpZiAoZW50aXR5TmFtZSkge1xuXHRcdFx0dGhpcy5jb2xsYWJvcmF0aW9uTWVzc2FnZSA9IG5ldyBNZXNzYWdlKHtcblx0XHRcdFx0bWVzc2FnZTogcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIlJFUk9VVEVEX05BVklHQVRJT05fVE9fU0FWRURfVkVSU0lPTlwiLCBbZW50aXR5TmFtZV0pLFxuXHRcdFx0XHR0eXBlOiBNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbixcblx0XHRcdFx0dGFyZ2V0OiB0aGlzLmdldFZpZXcoKT8uZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpXG5cdFx0XHR9KTtcblx0XHRcdE1lc3NhZ2luZy5hZGRNZXNzYWdlcyhbdGhpcy5jb2xsYWJvcmF0aW9uTWVzc2FnZV0pO1xuXHRcdH1cblx0fVxuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0YXN5bmMgb25QYWdlUmVhZHkobVBhcmFtZXRlcnM6IHsgZm9yY2VGb2N1czogYm9vbGVhbiB9IHwgdW5kZWZpbmVkKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qgc2V0Rm9jdXMgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHQvLyBTZXQgdGhlIGZvY3VzIHRvIHRoZSBmaXJzdCBhY3Rpb24gYnV0dG9uLCBvciB0byB0aGUgZmlyc3QgZWRpdGFibGUgaW5wdXQgaWYgaW4gZWRpdGFibGUgbW9kZVxuXHRcdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdFx0Y29uc3QgaXNJbkRpc3BsYXlNb2RlID0gIUNvbW1vblV0aWxzLmdldElzRWRpdGFibGUodGhpcy5nZXRWaWV3KCkpO1xuXG5cdFx0XHRpZiAoaXNJbkRpc3BsYXlNb2RlKSB7XG5cdFx0XHRcdGNvbnN0IG9GaXJzdENsaWNrYWJsZUVsZW1lbnQgPSB0aGlzLmdldEZpcnN0Q2xpY2thYmxlRWxlbWVudChvT2JqZWN0UGFnZSk7XG5cdFx0XHRcdGlmIChvRmlyc3RDbGlja2FibGVFbGVtZW50KSB7XG5cdFx0XHRcdFx0b0ZpcnN0Q2xpY2thYmxlRWxlbWVudC5mb2N1cygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBvU2VsZWN0ZWRTZWN0aW9uID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChvT2JqZWN0UGFnZS5nZXRTZWxlY3RlZFNlY3Rpb24oKSkgYXMgT2JqZWN0UGFnZVNlY3Rpb24gfCB1bmRlZmluZWQ7XG5cdFx0XHRcdGlmIChvU2VsZWN0ZWRTZWN0aW9uKSB7XG5cdFx0XHRcdFx0dGhpcy5fdXBkYXRlRm9jdXNJbkVkaXRNb2RlKG9TZWxlY3RlZFNlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHRcdGNvbnN0IGN0eHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdC8vIHNldHRpbmcgdGhpcyBtb2RlbCBkYXRhIHRvIGJlIHVzZWQgZm9yIHJlY29tbWVuZGF0aW9ucyBiaW5kaW5nXG5cdFx0dGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKS5zZXRQcm9wZXJ0eShcIi9jdXJyZW50Q3R4dFwiLCBjdHh0KTtcblxuXHRcdC8vIEFwcGx5IGFwcCBzdGF0ZSBvbmx5IGFmdGVyIHRoZSBwYWdlIGlzIHJlYWR5IHdpdGggdGhlIGZpcnN0IHNlY3Rpb24gc2VsZWN0ZWRcblx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHQvL1Nob3cgcG9wdXAgd2hpbGUgbmF2aWdhdGluZyBiYWNrIGZyb20gb2JqZWN0IHBhZ2UgaW4gY2FzZSBvZiBkcmFmdFxuXHRcdGlmIChvQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdGNvbnN0IGJJc1N0aWNreU1vZGUgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQob0JpbmRpbmdDb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdFx0aWYgKCFiSXNTdGlja3lNb2RlKSB7XG5cdFx0XHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQob1ZpZXcpO1xuXHRcdFx0XHRhd2FpdCBvQXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKS5zZXRCYWNrTmF2aWdhdGlvbigoKSA9PiB0aGlzLl9vbkJhY2tOYXZpZ2F0aW9uSW5EcmFmdChvQmluZGluZ0NvbnRleHQpKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gZG8gbm90IHJlcXVlc3QgcmVjb21tZW5kYXRpb25zIGFjdGlvbiBpZiB3ZSBhcmUgaW4gRGlzcGxheSBtb2RlXG5cdFx0Y29uc3QgaXNFZGl0YWJsZSA9IENvbW1vblV0aWxzLmdldElzRWRpdGFibGUodGhpcy5nZXRWaWV3KCkpO1xuXHRcdGlmIChpc0VkaXRhYmxlICYmIG9CaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0YXdhaXQgdGhpcy5yZWNvbW1lbmRhdGlvbnMuZmV0Y2hBbmRBcHBseVJlY29tbWVuZGF0aW9ucyhbeyBjb250ZXh0OiBvQmluZGluZ0NvbnRleHQgfV0pO1xuXHRcdH1cblxuXHRcdGlmIChtUGFyYW1ldGVycz8uZm9yY2VGb2N1cykge1xuXHRcdFx0c2V0Rm9jdXMoKTtcblx0XHR9XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZXJyb3JOYXZpZ2F0aW9uU2VjdGlvbkZsYWdcIiwgZmFsc2UpO1xuXHRcdHRoaXMuX2NoZWNrRGF0YVBvaW50VGl0bGVGb3JFeHRlcm5hbE5hdmlnYXRpb24oKTtcblxuXHRcdC8vVGhlIGZvbGxvd2luZyBjb2RpbmcgaXMgZG9uZSB0byBtZXJnZSBhbiBvcGVuIFBBVENIIGFuZCB0aGUgZHJhZnRwcmVwYXJlL2RyYWZ0YWN0aXZhdGVcblx0XHQvL3JlcXVlc3QgaW50byBvbmUgJGJhdGNoIHJlcXVlc3Rcblx0XHQvL1RvIGFjaGlldmUgdGhpcyB0aGUgJGF1dG8gcXVldWUgaXMgbG9ja2VkIGF0IHRoZSBtb3VzZWRvd24gZXZlbnQgKGJlZm9yZSBmb2N1c291dCkgaW5cblx0XHQvL29yZGVyIHRvIHdhaXQgZm9yIHRoZSBkcmFmdCByZXF1ZXN0IGlzc3VlZCBpbiB0aGUgc2F2ZSBidXR0b25zIHByZXNzIGV2ZW50IGhhbmRsZXIuXG5cdFx0Ly9UaGUgcXVldWUgaXMgcmVsZWFzZWQgYWdhaW4gZHVyaW5nIG1vdXNldXAgKGJlZm9yZSBwcmVzcykuXG5cdFx0Ly9UaGlzIGlzIG9ubHkgcG9zc2libGUgb24gbm9uIHRvdWNoIGRldmljZXMgYmVjYXVzZSBvbiB0b3VjaCBkZXZpY2VzIHRoZSBmb2N1c291dCBhbmQgcHJlc3Ncblx0XHQvL2V2ZW50cyBhcmUgYm90aCBpbml0aWF0ZWQgYXQgdG91Y2hlbmQgYnkgc2FwLm0uQnV0dG9uLlxuXHRcdC8vbW91c2VIYW5kbGVyU2V0IGlzIHVzZWQgdG8gZW5zdXJlcyB0aGF0IHRoZSBldmVudCBoYW5kbGVycyBhcmUgYXR0YWNoZWQgb25seSBvbmUgdGltZS5cblx0XHQvL1RoZXJlIGNhbiBiZSBtdWx0aXBsZSBvblBhZ2VSZWFkeSBlLmcuIHdoZW4gc3dpdGNoaW5nIGJldHdlZW4gZWRpdC9kaXNwbGF5IG1vZGVcblx0XHRpZiAoIXRoaXMubWVyZ2VQYXRjaERyYWZ0ICYmICFEZXZpY2Uuc3VwcG9ydC50b3VjaCkge1xuXHRcdFx0Y29uc3Qgc2F2ZUJ1dHRvbiA9IG9WaWV3LmJ5SWQoXCJmZTo6Rm9vdGVyQmFyOjpTdGFuZGFyZEFjdGlvbjo6U2F2ZVwiKSBhcyBCdXR0b247XG5cdFx0XHRjb25zdCBhdXRvUXVldWVVbmxvY2sgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLmF1dG9RdWV1ZUxvY2s/LmlzTG9ja2VkKCkpIHtcblx0XHRcdFx0XHR0aGlzLmF1dG9RdWV1ZUxvY2sudW5sb2NrKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0c2F2ZUJ1dHRvbi5kZXRhY2hCcm93c2VyRXZlbnQoXCJtb3VzZXVwXCIsIGF1dG9RdWV1ZVVubG9jayk7XG5cdFx0XHRcdHNhdmVCdXR0b24uZGV0YWNoQnJvd3NlckV2ZW50KFwiYmx1clwiLCBhdXRvUXVldWVVbmxvY2spO1xuXHRcdFx0fTtcblxuXHRcdFx0c2F2ZUJ1dHRvbj8uYXR0YWNoQnJvd3NlckV2ZW50KFwibW91c2Vkb3duXCIsICgpOiB2b2lkID0+IHtcblx0XHRcdFx0aWYgKCF0aGlzLmF1dG9RdWV1ZUxvY2s/LmlzTG9ja2VkKCkpIHtcblx0XHRcdFx0XHR0aGlzLmF1dG9RdWV1ZUxvY2sgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbCgpLmxvY2soXCIkYXV0b1wiKTtcblx0XHRcdFx0XHQvL3doZW4gdGhlIG1vdXNlIGlzIGRyYWdnZWQgYXdheSBmcm9tIHRoZSBzYXZlIGJ1dHRvbiB3aGlsZSBwcmVzc2VkIHRoZW4gdGhlcmUgd2lsbCBiZSBub1xuXHRcdFx0XHRcdC8vbW91c2V1cCBldmVudCBvbiB0aGUgc2F2ZSBidXR0b24uIFRoZXJlZm9yZSwgdGhlIHVubG9ja2luZyBpcyBkb25lIG9uIFwibW91c2V1cFwiIGFuZCBcImJsdXJcIlxuXHRcdFx0XHRcdHNhdmVCdXR0b24uYXR0YWNoQnJvd3NlckV2ZW50KFwibW91c2V1cFwiLCBhdXRvUXVldWVVbmxvY2spO1xuXHRcdFx0XHRcdHNhdmVCdXR0b24uYXR0YWNoQnJvd3NlckV2ZW50KFwiYmx1clwiLCBhdXRvUXVldWVVbmxvY2spO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5tZXJnZVBhdGNoRHJhZnQgPSB0cnVlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHN0YXR1cyBvZiBlZGl0IG1vZGUgZm9yIHN0aWNreSBzZXNzaW9uLlxuXHQgKiBAcmV0dXJucyBUaGUgc3RhdHVzIG9mIGVkaXQgbW9kZSBmb3Igc3RpY2t5IHNlc3Npb25cblx0ICovXG5cdGdldFN0aWNreUVkaXRNb2RlKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0ICYmIHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0bGV0IGJJc1N0aWNreUVkaXRNb2RlID0gZmFsc2U7XG5cdFx0aWYgKG9CaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0Y29uc3QgYklzU3RpY2t5TW9kZSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChvQmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0XHRpZiAoYklzU3RpY2t5TW9kZSkge1xuXHRcdFx0XHRiSXNTdGlja3lFZGl0TW9kZSA9IENvbW1vblV0aWxzLmdldElzRWRpdGFibGUodGhpcy5nZXRWaWV3KCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gYklzU3RpY2t5RWRpdE1vZGU7XG5cdH1cblxuXHRfZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTogT2JqZWN0UGFnZUxheW91dCB7XG5cdFx0cmV0dXJuIHRoaXMuYnlJZChcImZlOjpPYmplY3RQYWdlXCIpIGFzIE9iamVjdFBhZ2VMYXlvdXQ7XG5cdH1cblxuXHRhc3luYyBfZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24oKTogUHJvbWlzZTx7IHRpdGxlOiBzdHJpbmc7IHN1YnRpdGxlOiBzdHJpbmc7IGludGVudDogc3RyaW5nOyBpY29uOiBzdHJpbmc7IGRlc2NyaXB0aW9uOiBzdHJpbmcgfT4ge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRjb25zdCBvT2JqZWN0UGFnZVN1YnRpdGxlID0gb09iamVjdFBhZ2UuZ2V0Q3VzdG9tRGF0YSgpLmZpbmQoZnVuY3Rpb24gKG9DdXN0b21EYXRhKSB7XG5cdFx0XHRyZXR1cm4gb0N1c3RvbURhdGEuZ2V0S2V5KCkgPT09IFwiT2JqZWN0UGFnZVN1YnRpdGxlXCI7XG5cdFx0fSk7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2VEZXNjcmlwdGlvbiA9IG9PYmplY3RQYWdlLmdldEN1c3RvbURhdGEoKS5maW5kKGZ1bmN0aW9uIChvQ3VzdG9tRGF0YSkge1xuXHRcdFx0cmV0dXJuIG9DdXN0b21EYXRhLmdldEtleSgpID09PSBcIk9iamVjdFBhZ2VEZXNjcmlwdGlvblwiO1xuXHRcdH0pO1xuXHRcdGNvbnN0IGV4dHJhY3RQYXRocyA9IChiaW5kaW5nSW5mbz86IHsgcGFydHM/OiB7IHBhdGg/OiBzdHJpbmc7IG1vZGVsPzogc3RyaW5nIH1bXSB9KTogc3RyaW5nW10gPT5cblx0XHRcdEFycmF5LmZyb20oXG5cdFx0XHRcdG5ldyBTZXQoXG5cdFx0XHRcdFx0KGJpbmRpbmdJbmZvPy5wYXJ0cyB8fCBbXSlcblx0XHRcdFx0XHRcdC5maWx0ZXIoKHBhcnQpID0+ICFwYXJ0Lm1vZGVsKVxuXHRcdFx0XHRcdFx0Lm1hcCgocGFydCkgPT4gcGFydC5wYXRoIHx8IFwiXCIpXG5cdFx0XHRcdFx0XHQuZmlsdGVyKEJvb2xlYW4pXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0Y29uc3Qgc3VidGl0bGVQYXRocyA9IGV4dHJhY3RQYXRocyhvT2JqZWN0UGFnZVN1YnRpdGxlPy5nZXRCaW5kaW5nSW5mbyhcInZhbHVlXCIpKTtcblx0XHRjb25zdCBkZXNjcmlwdGlvblBhdGhzID0gZXh0cmFjdFBhdGhzKG9PYmplY3RQYWdlRGVzY3JpcHRpb24/LmdldEJpbmRpbmdJbmZvKFwidmFsdWVcIikpO1xuXHRcdGNvbnN0IHBhdGhzVG9SZXNvbHZlID0gWy4uLnN1YnRpdGxlUGF0aHMsIC4uLmRlc2NyaXB0aW9uUGF0aHNdO1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0Y29uc3Qgcm9vdFZpZXdDb250cm9sbGVyID0gYXBwQ29tcG9uZW50LmdldFJvb3RWaWV3Q29udHJvbGxlcigpO1xuXHRcdGNvbnN0IGZuQ2xlYXJDYWNoZVRpdGxlID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0cm9vdFZpZXdDb250cm9sbGVyLmludmFsaWRhdGVUaXRsZUhpZXJhcmNoeUNhY2hlKG9PYmplY3RQYWdlLmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKSBhcyBzdHJpbmcpO1xuXHRcdH07XG5cdFx0aWYgKChvT2JqZWN0UGFnZURlc2NyaXB0aW9uIHx8IG9PYmplY3RQYWdlU3VidGl0bGUpICYmICF0aGlzLmludmFsaWRhdGVUaXRsZUhpZXJhcmNoeUNhY2hlU2V0VXApIHtcblx0XHRcdG9PYmplY3RQYWdlU3VidGl0bGU/LmdldEJpbmRpbmcoXCJ2YWx1ZVwiKT8uYXR0YWNoQ2hhbmdlKGZuQ2xlYXJDYWNoZVRpdGxlLCB0aGlzKTtcblx0XHRcdG9PYmplY3RQYWdlRGVzY3JpcHRpb24/LmdldEJpbmRpbmcoXCJ2YWx1ZVwiKT8uYXR0YWNoQ2hhbmdlKGZuQ2xlYXJDYWNoZVRpdGxlLCB0aGlzKTtcblx0XHRcdHRoaXMuaW52YWxpZGF0ZVRpdGxlSGllcmFyY2h5Q2FjaGVTZXRVcCA9IHRydWU7XG5cdFx0fVxuXHRcdGNvbnN0IG9PYmplY3RQYWdlQ29udGV4dCA9IG9PYmplY3RQYWdlLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0Y29uc3QgYnVpbGQgPSAoKTogeyB0aXRsZTogc3RyaW5nOyBzdWJ0aXRsZTogc3RyaW5nOyBpbnRlbnQ6IHN0cmluZzsgaWNvbjogc3RyaW5nOyBkZXNjcmlwdGlvbjogc3RyaW5nIH0gPT4gKHtcblx0XHRcdHRpdGxlOiBvT2JqZWN0UGFnZS5kYXRhKFwiT2JqZWN0UGFnZVRpdGxlXCIpID8/IFwiXCIsXG5cdFx0XHRzdWJ0aXRsZTogb09iamVjdFBhZ2VTdWJ0aXRsZT8uZ2V0VmFsdWUoKSA/PyBcIlwiLFxuXHRcdFx0aW50ZW50OiBcIlwiLFxuXHRcdFx0aWNvbjogXCJcIixcblx0XHRcdGRlc2NyaXB0aW9uOiBvT2JqZWN0UGFnZURlc2NyaXB0aW9uPy5nZXRWYWx1ZSgpID8/IFwiXCJcblx0XHR9KTtcblx0XHQvL2lmIG5vIGNvbnRleHQgb3Igbm90aGluZyB0byByZXNvbHZlLCBkaXJlY3QgcmV0dXJuXG5cdFx0aWYgKCFvT2JqZWN0UGFnZUNvbnRleHQgfHwgcGF0aHNUb1Jlc29sdmUubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGJ1aWxkKCkpO1xuXHRcdH1cblx0XHRhd2FpdCBQcm9taXNlLmFsbChwYXRoc1RvUmVzb2x2ZS5tYXAoYXN5bmMgKHApID0+IChvT2JqZWN0UGFnZUNvbnRleHQgYXMgT0RhdGFWNENvbnRleHQpLnJlcXVlc3RPYmplY3QocCkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKSkpO1xuXHRcdHJldHVybiBidWlsZCgpO1xuXHR9XG5cblx0X2V4ZWN1dGVUYWJTaG9ydEN1dChvRXhlY3V0aW9uOiBVSTVFdmVudCk6IHZvaWQge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKSxcblx0XHRcdGFTZWN0aW9ucyA9IG9PYmplY3RQYWdlLmdldFNlY3Rpb25zKCksXG5cdFx0XHRpU2VjdGlvbkluZGV4TWF4ID0gYVNlY3Rpb25zLmxlbmd0aCAtIDEsXG5cdFx0XHRzQ29tbWFuZCA9IChvRXhlY3V0aW9uLmdldFNvdXJjZSgpIGFzIHVua25vd24gYXMgQ29tbWFuZEV4ZWN1dGlvbikuZ2V0Q29tbWFuZCgpO1xuXHRcdGxldCBuZXdTZWN0aW9uLFxuXHRcdFx0aVNlbGVjdGVkU2VjdGlvbkluZGV4ID0gb09iamVjdFBhZ2UuaW5kZXhPZlNlY3Rpb24odGhpcy5ieUlkKG9PYmplY3RQYWdlLmdldFNlbGVjdGVkU2VjdGlvbigpISkgYXMgT2JqZWN0UGFnZVNlY3Rpb24pO1xuXHRcdGlmIChpU2VsZWN0ZWRTZWN0aW9uSW5kZXggIT09IC0xICYmIGlTZWN0aW9uSW5kZXhNYXggPiAwKSB7XG5cdFx0XHRpZiAoc0NvbW1hbmQgPT09IFwiTmV4dFRhYlwiKSB7XG5cdFx0XHRcdGlmIChpU2VsZWN0ZWRTZWN0aW9uSW5kZXggPD0gaVNlY3Rpb25JbmRleE1heCAtIDEpIHtcblx0XHRcdFx0XHRuZXdTZWN0aW9uID0gYVNlY3Rpb25zWysraVNlbGVjdGVkU2VjdGlvbkluZGV4XTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChpU2VsZWN0ZWRTZWN0aW9uSW5kZXggIT09IDApIHtcblx0XHRcdFx0Ly8gUHJldmlvdXNUYWJcblx0XHRcdFx0bmV3U2VjdGlvbiA9IGFTZWN0aW9uc1stLWlTZWxlY3RlZFNlY3Rpb25JbmRleF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChuZXdTZWN0aW9uKSB7XG5cdFx0XHRcdG9PYmplY3RQYWdlLnNldFNlbGVjdGVkU2VjdGlvbihuZXdTZWN0aW9uKTtcblx0XHRcdFx0bmV3U2VjdGlvbi5mb2N1cygpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF9nZXRGb290ZXJWaXNpYmlsaXR5KCk6IHZvaWQge1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3Qgc1ZpZXdJZCA9IHRoaXMuZ2V0VmlldygpLmdldElkKCk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwibWVzc2FnZUZvb3RlckNvbnRhaW5zRXJyb3JzXCIsIGZhbHNlKTtcblx0XHRjb25zdCBpc0hpZGRlbkRyYWZ0RW5hYmxlZCA9ICh0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCkuZ2V0Q2FwYWJpbGl0aWVzKCkuSGlkZGVuRHJhZnQgYXMgSGlkZGVuRHJhZnQpXG5cdFx0XHQ/LmVuYWJsZWQ7XG5cdFx0TWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpXG5cdFx0XHQuZ2V0RGF0YSgpXG5cdFx0XHQuZm9yRWFjaChmdW5jdGlvbiAob01lc3NhZ2U6IE1lc3NhZ2UpOiB2b2lkIHtcblx0XHRcdFx0Y29uc3QgaXNFcnJvck1lc3NhZ2UgPSBvTWVzc2FnZS52YWxpZGF0aW9uICYmIG9NZXNzYWdlLmdldFR5cGUoKSA9PT0gXCJFcnJvclwiO1xuXHRcdFx0XHRjb25zdCBtZXNzYWdlVmFsaWRhdGlvbiA9IGlzSGlkZGVuRHJhZnRFbmFibGVkXG5cdFx0XHRcdFx0PyBpc0Vycm9yTWVzc2FnZVxuXHRcdFx0XHRcdDogaXNFcnJvck1lc3NhZ2UgJiYgb01lc3NhZ2UuZ2V0VGFyZ2V0cygpLnNvbWUoKHRhcmdldCkgPT4gdGFyZ2V0LmluY2x1ZGVzKHNWaWV3SWQpKTtcblx0XHRcdFx0aWYgKG1lc3NhZ2VWYWxpZGF0aW9uKSB7XG5cdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwibWVzc2FnZUZvb3RlckNvbnRhaW5zRXJyb3JzXCIsIHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0fVxuXG5cdF9zaG93TWVzc2FnZVBvcG92ZXIoZXJyPzogc3RyaW5nLCBvUmV0PzogdW5rbm93bik6IHVua25vd24ge1xuXHRcdGlmIChlcnIpIHtcblx0XHRcdExvZy5lcnJvcihlcnIpO1xuXHRcdH1cblx0XHRjb25zdCBpc0VkaXRNb2RlID0gQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZSh0aGlzLmdldFZpZXcoKSk7XG5cdFx0Y29uc3Qgcm9vdFZpZXdDb250cm9sbGVyID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb290Vmlld0NvbnRyb2xsZXIoKTtcblx0XHRjb25zdCBjdXJyZW50UGFnZVZpZXcgPSByb290Vmlld0NvbnRyb2xsZXIuaXNGY2xFbmFibGVkKClcblx0XHRcdD8gcm9vdFZpZXdDb250cm9sbGVyLmdldFJpZ2h0bW9zdFZpZXcoKVxuXHRcdFx0OiAodGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb290Q29udGFpbmVyKCkgYXMgTmF2Q29udGFpbmVyKS5nZXRDdXJyZW50UGFnZSgpO1xuXHRcdGlmIChpc0VkaXRNb2RlICYmICFjdXJyZW50UGFnZVZpZXcuaXNBKFwic2FwLm0uTWVzc2FnZVBhZ2VcIikpIHtcblx0XHRcdGNvbnN0IG9NZXNzYWdlQnV0dG9uID0gdGhpcy5tZXNzYWdlQnV0dG9uLFxuXHRcdFx0XHRvTWVzc2FnZVBvcG92ZXIgPSBvTWVzc2FnZUJ1dHRvbi5vTWVzc2FnZVBvcG92ZXIsXG5cdFx0XHRcdG9JdGVtQmluZGluZyA9IG9NZXNzYWdlUG9wb3Zlci5nZXRCaW5kaW5nKFwiaXRlbXNcIikgYXMgTGlzdEJpbmRpbmc7XG5cblx0XHRcdGlmIChvSXRlbUJpbmRpbmcuZ2V0TGVuZ3RoKCkgPiAwICYmICFvTWVzc2FnZVBvcG92ZXIuaXNPcGVuKCkpIHtcblx0XHRcdFx0b01lc3NhZ2VCdXR0b24uc2V0VmlzaWJsZSh0cnVlKTtcblx0XHRcdFx0Ly8gd29ya2Fyb3VuZCB0byBlbnN1cmUgdGhhdCBvTWVzc2FnZUJ1dHRvbiBpcyByZW5kZXJlZCB3aGVuIG9wZW5CeSBpcyBjYWxsZWRcblx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0b01lc3NhZ2VQb3BvdmVyLm9wZW5CeShvTWVzc2FnZUJ1dHRvbik7XG5cdFx0XHRcdH0sIDApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb1JldDtcblx0fVxuXG5cdGFzeW5jIF9lZGl0RG9jdW1lbnQoKTogUHJvbWlzZTx2b2lkIHwgQ29udGV4dD4ge1xuXHRcdGNvbnN0IG9Db250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRjb25zdCBvTW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpO1xuXHRcdEJ1c3lMb2NrZXIubG9jayhvTW9kZWwpO1xuXHRcdHJldHVybiB0aGlzLmVkaXRGbG93LmVkaXREb2N1bWVudC5hcHBseSh0aGlzLmVkaXRGbG93LCBbb0NvbnRleHRdKS5maW5hbGx5KGZ1bmN0aW9uICgpIHtcblx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKG9Nb2RlbCk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgZGVmYXVsdCBzZW1hbnRpYyBvYmplY3QgbWFwcGluZyBvYmplY3QuXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggVGhlIHZhbHVlIG9mIHRoZSBkYXRhIHBvaW50IHByb3BlcnR5IHBhdGhcblx0ICogQHBhcmFtIHNlbWFudGljT2JqZWN0IFRoZSBzZW1hbnRpYyBvYmplY3Rcblx0ICogQHJldHVybnMgVGhlIGFycmF5IG9mIHRoZSBkZWZhdWx0IHNlbWFudGljIG9iamVjdCBtYXBwaW5nIG9iamVjdFxuXHQgKi9cblx0X2dldEltcGxpY2l0U2VtYW50aWNPYmplY3RNYXBwaW5nRm9yRGF0YVBvaW50cyhcblx0XHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0XHRzZW1hbnRpY09iamVjdDogc3RyaW5nXG5cdCk6IE1ldGFNb2RlbFR5cGU8U2VtYW50aWNPYmplY3RNYXBwaW5nVHlwZT5bXSB7XG5cdFx0cmV0dXJuIFtcblx0XHRcdHtcblx0XHRcdFx0TG9jYWxQcm9wZXJ0eToge1xuXHRcdFx0XHRcdCRQcm9wZXJ0eVBhdGg6IHByb3BlcnR5UGF0aFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRTZW1hbnRpY09iamVjdFByb3BlcnR5OiBzZW1hbnRpY09iamVjdFxuXHRcdFx0fVxuXHRcdF07XG5cdH1cblxuXHQvKipcblx0ICogRXhlY3V0ZXMgdGhlIHZhbGlkYXRpb24gb2YgdGhlIGRvY3VtZW50XG5cdCAqIE9uZSBvZiB0aGUgZm9sbG93aW5nIGFjdGlvbnMgaXMgdHJpZ2dlcmVkIG9uIHRoZSBkcmFmdCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudDpcblx0ICogLSBvbiBhIHRyYW5zaWVudCBjb250ZXh0OlxuXHQgKiAtIGlmIHRoZSBjb250ZXh0IGdldHMgZGF0YSwgd2FpdCBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSBjb250ZXh0IGFuZCBleGVjdXRlIHRoZSBnbG9iYWwgdmFsaWRhdGlvblxuXHQgKiAtIGlmIG5vIGRhdGEgaXMgZm91bmQgb24gdGhpcyBjb250ZXh0LCBvbmx5IHRoZSBwcmVwYXJlQWN0aW9uIGlzIHJlcXVlc3RlZFxuXHQgKiAtIG9uIGEgcmVndWxhciBjb250ZXh0LCB0aGUgZ2xvYmFsIHZhbGlkYXRpb24gaXMgcmVxdWVzdGVkLlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIG9mIHRoZSBnbG9iYWwgdmFsaWRhdGlvbiBvciB1bmRlZmluZWQgaWYgbm90IGV4ZWN1dGVkXG5cdCAqL1xuXHRhc3luYyBfdmFsaWRhdGVEb2N1bWVudCgpOiBQcm9taXNlPHZvaWQgfCB1bmtub3duW10gfCBPRGF0YUNvbnRleHRCaW5kaW5nPiB7XG5cdFx0Y29uc3QgY29udHJvbCA9IFVJNUVsZW1lbnQuZ2V0QWN0aXZlRWxlbWVudCgpIGFzIENvbnRyb2w7XG5cdFx0Y29uc3QgY29udGV4dCA9IGNvbnRyb2w/LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ7XG5cblx0XHRpZiAoIWNvbnRyb2wgfHwgIWNvbnRleHQpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGxldCBieVBhc3NTaWRlRWZmZWN0cyA9IGZhbHNlO1xuXHRcdGlmIChjb250ZXh0LmlzVHJhbnNpZW50KCkpIHtcblx0XHRcdGlmIChjb250ZXh0Lmhhc1BlbmRpbmdDaGFuZ2VzKCkpIHtcblx0XHRcdFx0YXdhaXQgY29udGV4dC5jcmVhdGVkKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRieVBhc3NTaWRlRWZmZWN0cyA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMubWVzc2FnZUhhbmRsZXIuaG9sZE1lc3NhZ2VzRm9yQ29udHJvbChjb250cm9sKTtcblx0XHRjb25zdCByZXQgPSBhd2FpdCB0aGlzLmV4ZWN1dGVHbG9iYWxWYWxpZGF0aW9uKGNvbnRleHQsIGJ5UGFzc1NpZGVFZmZlY3RzKTtcblx0XHR0aGlzLm1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlcyh7IGNvbnRyb2wgfSk7XG5cdFx0cmV0dXJuIHJldDtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGUgZ2xvYmFsIHZhbGlkYXRpb24gb2YgdGhlIGRyYWZ0XG5cdCAqIE9uZSBvZiB0aGUgZm9sbG93aW5nIGFjdGlvbnMgaXMgdHJpZ2dlcmVkIG9uIHRoZSBkcmFmdCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudDpcblx0ICogLSB0aGUgZ2xvYmFsIHNpZGUgZWZmZWN0cyBhcmUgZXhlY3V0ZWQgaWYgdGhlc2Ugc2lkZSBlZmZlY3RzIGFyZSBkZWZpbmVkIGluIHRoZSBjb250ZXh0XG5cdCAqIC0gdGhlIGRyYWZ0IFZhbGlkYXRpb24gb24gdGhlIERyYWZ0Um9vdCBjb250ZXh0LlxuXHQgKiBAcGFyYW0gY29udGV4dCBUaGUgQ29udGV4dFxuXHQgKiBAcGFyYW0gYnlQYXNzU2lkZUVmZmVjdHMgT25seSB0aGUgZHJhZnQgVmFsaWRhdGlvbiBzdGVwIGlzIGV4ZWN1dGVkXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugb2YgdGhlIGdsb2JhbCB2YWxpZGF0aW9uXG5cdCAqL1xuXHRhc3luYyBleGVjdXRlR2xvYmFsVmFsaWRhdGlvbihjb250ZXh0OiBPRGF0YVY0Q29udGV4dCwgYnlQYXNzU2lkZUVmZmVjdHMgPSBmYWxzZSk6IFByb21pc2U8dm9pZCB8IHVua25vd25bXSB8IE9EYXRhQ29udGV4dEJpbmRpbmc+IHtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdC8vIHRoZSBkcmFmdCB2YWxpZGF0aW9uIGlzIHRyZWF0ZWQgYXMgYSB1c2VyIGludGVyYWN0aW9uLCBhbmQgdGhlIHNlcnZpY2UgbXVzdCByZXR1cm4gdHJhbnNpdGlvbiBtZXNzYWdlcyBhZ2FpbiBpZiBzdGlsbCB2YWxpZFxuXHRcdHRoaXMubWVzc2FnZUhhbmRsZXIucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0aWYgKCFieVBhc3NTaWRlRWZmZWN0cykge1xuXHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNTZXJ2aWNlID0gYXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXHRcdFx0Y29uc3QgZW50aXR5VHlwZSA9IHNpZGVFZmZlY3RzU2VydmljZS5nZXRFbnRpdHlUeXBlRnJvbUNvbnRleHQoY29udGV4dCk7XG5cdFx0XHRjb25zdCBnbG9iYWxTaWRlRWZmZWN0cyA9IGVudGl0eVR5cGUgPyBzaWRlRWZmZWN0c1NlcnZpY2UuZ2V0R2xvYmFsT0RhdGFFbnRpdHlTaWRlRWZmZWN0cyhlbnRpdHlUeXBlKSA6IFtdO1xuXHRcdFx0Ly8gSWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGdsb2JhbCBTaWRlRWZmZWN0cyBmb3IgdGhlIHJlbGF0ZWQgZW50aXR5LCBleGVjdXRlIGl0L3RoZW1cblx0XHRcdGlmIChnbG9iYWxTaWRlRWZmZWN0cy5sZW5ndGgpIHtcblx0XHRcdFx0YXdhaXQgdGhpcy5lZGl0Rmxvdy5zeW5jVGFzaygpO1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoXG5cdFx0XHRcdFx0Z2xvYmFsU2lkZUVmZmVjdHMubWFwKGFzeW5jIChzaWRlRWZmZWN0cykgPT4gdGhpcy5fc2lkZUVmZmVjdHMucmVxdWVzdFNpZGVFZmZlY3RzKHNpZGVFZmZlY3RzLCBjb250ZXh0KSlcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBkcmFmdFJvb3RDb250ZXh0ID0gKGF3YWl0IENvbW1vblV0aWxzLmNyZWF0ZVJvb3RDb250ZXh0KFxuXHRcdFx0UHJvZ3JhbW1pbmdNb2RlbC5EcmFmdCxcblx0XHRcdHRoaXMuZ2V0VmlldygpLFxuXHRcdFx0YXBwQ29tcG9uZW50XG5cdFx0KSkgYXMgT0RhdGFWNENvbnRleHQ7XG5cdFx0Ly9FeGVjdXRlIHRoZSBkcmFmdFZhbGlkYXRpb24gaWYgdGhlcmUgaXMgbm8gZ2xvYmFsU2lkZUVmZmVjdHMgKGlnbm9yZSBFVGFncyBpbiBjb2xsYWJvcmF0aW9uIGRyYWZ0KVxuXHRcdGlmIChkcmFmdFJvb3RDb250ZXh0KSB7XG5cdFx0XHRhd2FpdCB0aGlzLmVkaXRGbG93LnN5bmNUYXNrKCk7XG5cdFx0XHRyZXR1cm4gZHJhZnQuZXhlY3V0ZURyYWZ0VmFsaWRhdGlvbihkcmFmdFJvb3RDb250ZXh0LCBhcHBDb21wb25lbnQsIHRoaXMuY29sbGFib3JhdGl2ZURyYWZ0LmlzQ29ubmVjdGVkKCkpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTYXZlcyB0aGUgZHJhZnQgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnRcblx0ICogSWYgZGF0YSBoYXMgYmVlbiBwcm92aWRlZCBvbiB0aGUgY3JlYXRpb24gcm93cywgdGhlIHJlbGF0ZWQgZG9jdW1lbnRzIGFyZSBjcmVhdGVkXG5cdCAqIGJlZm9yZSBzYXZpbmcgdGhlIGRyYWZ0IHZlcnNpb24uXG5cdCAqIEBwYXJhbSBza2lwQmluZGluZ1RvVmlldyBJbmRpY2F0ZXMgaWYgdGhlIGJpbmRpbmcgdG8gdGhlIHZpZXcgc2hvdWxkIGJlIHNraXBwZWRcblx0ICogQHJldHVybnMgUHJvbWlzZVxuXHQgKi9cblx0YXN5bmMgX3NhdmVEb2N1bWVudChza2lwQmluZGluZ1RvVmlldz86IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRjb25zdCBtb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIiksXG5cdFx0XHRhd2FpdENyZWF0ZURvY3VtZW50czogUHJvbWlzZTx2b2lkIHwgT0RhdGFMaXN0QmluZGluZz5bXSA9IFtdO1xuXHRcdC8vIGluZGljYXRlcyBpZiB3ZSBhcmUgY3JlYXRpbmcgYSBuZXcgcm93IGluIHRoZSBPUFxuXHRcdGxldCBleGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yID0gZmFsc2U7XG5cdFx0QnVzeUxvY2tlci5sb2NrKG1vZGVsKTtcblx0XHR0cnkge1xuXHRcdFx0aWYgKHRoaXMuY29sbGFib3JhdGl2ZURyYWZ0LmlzQ29sbGFib3JhdGlvbkVuYWJsZWQoKSkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGNvbnN0IGRpYWxvZ0FjdGlvbiA9IGF3YWl0IG5ldyBDb2xsYWJvcmF0aW9uRGlzY2FyZCh0aGlzLmdldFZpZXcoKSwgdHJ1ZSkuZ2V0VXNlckFjdGlvbigpO1xuXHRcdFx0XHRcdC8vIFdlIGNhbmNlbCB0aGUgYWN0aW9uXG5cdFx0XHRcdFx0aWYgKGRpYWxvZ0FjdGlvbiA9PT0gXCJjYW5jZWxcIikge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBXZSBrZWVwIHRoZSBkcmFmdCBhbmQgbGVhdmUgZm9yIExSXG5cdFx0XHRcdFx0aWYgKGRpYWxvZ0FjdGlvbiA9PT0gXCJrZWVwRHJhZnRcIikge1xuXHRcdFx0XHRcdFx0dGhpcy5jb2xsYWJvcmF0aXZlRHJhZnQuZGlzY29ubmVjdCgpO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5fcm91dGluZy5uYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dChjb250ZXh0KTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHRcdExvZy5lcnJvcihgU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCBjb2xsYWJvcmF0aW9uIGRpc2NhcmQ6ICR7ZXJyfWApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGF3YWl0IHRoaXMuZWRpdEZsb3cuc3luY1Rhc2soKTtcblx0XHRcdHRoaXMuX2ZpbmRUYWJsZXMoKS5mb3JFYWNoKCh0YWJsZTogVGFibGUpID0+IHtcblx0XHRcdFx0Y29uc3QgY3JlYXRpb25Sb3cgPSB0YWJsZS5nZXRDcmVhdGlvblJvdygpO1xuXHRcdFx0XHRjb25zdCB0YWJsZUJpbmRpbmcgPSB0aGlzLl9nZXRUYWJsZUJpbmRpbmcodGFibGUpO1xuXHRcdFx0XHRjb25zdCBjb250ZXh0S2V5cyA9IE9iamVjdC5rZXlzKChjcmVhdGlvblJvdz8uZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCk/LmdldE9iamVjdCgpIHx8IHt9KTtcblx0XHRcdFx0aWYgKGNvbnRleHRLZXlzLmZpbHRlcigoa2V5KSA9PiAha2V5LnN0YXJ0c1dpdGgoXCJAJHVpNS5cIikpLmxlbmd0aCkge1xuXHRcdFx0XHRcdGV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IgPSB0cnVlO1xuXHRcdFx0XHRcdGF3YWl0Q3JlYXRlRG9jdW1lbnRzLnB1c2goXG5cdFx0XHRcdFx0XHR0aGlzLmVkaXRGbG93XG5cdFx0XHRcdFx0XHRcdC5jcmVhdGVEb2N1bWVudCh0YWJsZUJpbmRpbmcsIHtcblx0XHRcdFx0XHRcdFx0XHRjcmVhdGlvbk1vZGU6IHRhYmxlLmRhdGEoXCJjcmVhdGlvbk1vZGVcIiksXG5cdFx0XHRcdFx0XHRcdFx0Y3JlYXRpb25Sb3c6IGNyZWF0aW9uUm93LFxuXHRcdFx0XHRcdFx0XHRcdGNyZWF0ZUF0RW5kOiB0YWJsZS5kYXRhKFwiY3JlYXRlQXRFbmRcIikgPT09IFwidHJ1ZVwiLFxuXHRcdFx0XHRcdFx0XHRcdHNraXBTaWRlRWZmZWN0czogdHJ1ZSAvLyB0aGUgc2tpcFNpZGVFZmZlY3RzIGlzIGEgcGFyYW1ldGVyIGNyZWF0ZWQgd2hlbiB3ZSBjbGljayB0aGUgc2F2ZSBrZXkuIElmIHdlIHByZXNzIHRoaXMga2V5LCB3ZSBkb24ndCBleGVjdXRlIHRoZSBoYW5kbGVTaWRlRWZmZWN0cyBmdW5jaXRvbiB0byBhdm9pZCBiYXRjaCByZWR1bmRhbmN5XG5cdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdC50aGVuKCgpID0+IHRhYmxlQmluZGluZylcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IGlzU2tpcEJpbmRpbmdUb1ZpZXcgPSBza2lwQmluZGluZ1RvVmlldyBhcyB1bmtub3duIGFzIENvbW1hbmRFeGVjdXRpb24kRXhlY3V0ZUV2ZW50O1xuXHRcdFx0Y29uc3QgaXNTdGFuZGFyZFNhdmUgPVxuXHRcdFx0XHRpc1NraXBCaW5kaW5nVG9WaWV3ICYmIHR5cGVvZiBpc1NraXBCaW5kaW5nVG9WaWV3ID09IFwib2JqZWN0XCIgJiYgaXNTa2lwQmluZGluZ1RvVmlldy5nZXRTb3VyY2UoKS5nZXRDb21tYW5kKCkgPT09IFwiU2F2ZVwiO1xuXG5cdFx0XHRjb25zdCBiaW5kaW5ncyA9IGF3YWl0IFByb21pc2UuYWxsKGF3YWl0Q3JlYXRlRG9jdW1lbnRzKTtcblx0XHRcdC8vIFdlIG5lZWQgdG8gZWl0aGVyIHJlamVjdCBvciByZXNvbHZlIGEgcHJvbWlzZSBoZXJlIGFuZCByZXR1cm4gaXQgc2luY2UgdGhpcyBzYXZlXG5cdFx0XHQvLyBmdW5jdGlvbiBpcyBub3Qgb25seSBjYWxsZWQgd2hlbiBwcmVzc2luZyB0aGUgc2F2ZSBidXR0b24gaW4gdGhlIGZvb3RlciwgYnV0IGFsc29cblx0XHRcdC8vIHdoZW4gdGhlIHVzZXIgc2VsZWN0cyBjcmVhdGUgb3Igc2F2ZSBpbiBhIGRhdGFsb3NzIHBvcHVwLlxuXHRcdFx0Ly8gVGhlIGxvZ2ljIG9mIHRoZSBkYXRhbG9zcyBwb3B1cCBuZWVkcyB0byBkZXRlY3QgaWYgdGhlIHNhdmUgaGFkIGVycm9ycyBvciBub3QgaW4gb3JkZXJcblx0XHRcdC8vIHRvIGRlY2lkZSBpZiB0aGUgc3Vic2VxdWVudCBhY3Rpb24gLSBsaWtlIGEgYmFjayBuYXZpZ2F0aW9uIC0gaGFzIHRvIGJlIGV4ZWN1dGVkIG9yIG5vdC5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGF3YWl0IHRoaXMuZWRpdEZsb3cuc2F2ZURvY3VtZW50KGNvbnRleHQsIHtcblx0XHRcdFx0XHRiRXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvcjogZXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvcixcblx0XHRcdFx0XHRiaW5kaW5nczogYmluZGluZ3MgYXMgdW5rbm93biBhcyBPRGF0YUxpc3RCaW5kaW5nW10sXG5cdFx0XHRcdFx0bWVyZ2VQYXRjaERyYWZ0OiB0aGlzLm1lcmdlUGF0Y2hEcmFmdCxcblx0XHRcdFx0XHRza2lwQmluZGluZ1RvVmlldyxcblx0XHRcdFx0XHRpc1N0YW5kYXJkU2F2ZVxuXHRcdFx0XHR9KTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdC8vIElmIHRoZSBzYXZlRG9jdW1lbnQgaW4gZWRpdEZsb3cgcmV0dXJucyBlcnJvcnMgd2UgbmVlZFxuXHRcdFx0XHQvLyB0byBzaG93IHRoZSBtZXNzYWdlIHBvcG92ZXIgaGVyZSBhbmQgZW5zdXJlIHRoYXQgdGhlXG5cdFx0XHRcdC8vIGRhdGFsb3NzIGxvZ2ljIGRvZXMgbm90IHBlcmZvcm0gdGhlIGZvbGxvdyB1cCBmdW5jdGlvblxuXHRcdFx0XHQvLyBsaWtlIGUuZy4gYSBiYWNrIG5hdmlnYXRpb24gaGVuY2Ugd2UgcmV0dXJuIGEgcHJvbWlzZSBhbmQgcmVqZWN0IGl0XG5cdFx0XHRcdGlmIChlcnJvciAhPT0gUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbi5Db250aW51ZSkge1xuXHRcdFx0XHRcdHRoaXMuX3Nob3dNZXNzYWdlUG9wb3ZlcihlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRocm93IGVycm9yO1xuXHRcdFx0fVxuXHRcdH0gZmluYWxseSB7XG5cdFx0XHRpZiAoQnVzeUxvY2tlci5pc0xvY2tlZChtb2RlbCkpIHtcblx0XHRcdFx0QnVzeUxvY2tlci51bmxvY2sobW9kZWwpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGFzeW5jIF9jYW5jZWxEb2N1bWVudChtUGFyYW1ldGVyczogeyBjYW5jZWxCdXR0b246IHN0cmluZyB9KTogUHJvbWlzZTxDb250ZXh0IHwgdm9pZD4ge1xuXHRcdGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldFZpZXcoKT8uZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRjb25zdCBjYW5jZWxCdXR0b24gPSB0aGlzLmdldFZpZXcoKS5ieUlkKG1QYXJhbWV0ZXJzLmNhbmNlbEJ1dHRvbikgYXMgQnV0dG9uIHwgdW5kZWZpbmVkOyAvL3RvIGdldCB0aGUgcmVmZXJlbmNlIG9mIHRoZSBjYW5jZWwgYnV0dG9uIGZyb20gY29tbWFuZCBleGVjdXRpb25cblx0XHRjb25zdCBsYXN0Rm9jdXNlZENvbnRyb2xJZCA9IFVJNUVsZW1lbnQuZ2V0QWN0aXZlRWxlbWVudCgpPy5nZXRJZCgpO1xuXHRcdGxldCBzaG91bGRTa2lwRGlzY2FyZFBvcG92ZXIgPSBmYWxzZTtcblx0XHRpZiAodGhpcy5jb2xsYWJvcmF0aXZlRHJhZnQuaXNDb2xsYWJvcmF0aW9uRW5hYmxlZCgpKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCBkaWFsb2dBY3Rpb24gPSBhd2FpdCBuZXcgQ29sbGFib3JhdGlvbkRpc2NhcmQodGhpcy5nZXRWaWV3KCksIGZhbHNlKS5nZXRVc2VyQWN0aW9uKCk7XG5cdFx0XHRcdC8vIFdlIGNhbmNlbCB0aGUgYWN0aW9uXG5cdFx0XHRcdGlmIChkaWFsb2dBY3Rpb24gPT09IFwiY2FuY2VsXCIpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gV2Uga2VlcCB0aGUgZHJhZnQgYW5kIGxlYXZlIGZvciBMUlxuXHRcdFx0XHRpZiAoZGlhbG9nQWN0aW9uID09PSBcImtlZXBEcmFmdFwiKSB7XG5cdFx0XHRcdFx0dGhpcy5jb2xsYWJvcmF0aXZlRHJhZnQuZGlzY29ubmVjdCgpO1xuXHRcdFx0XHRcdGF3YWl0IHRoaXMuX3JvdXRpbmcubmF2aWdhdGVCYWNrRnJvbUNvbnRleHQoY29udGV4dCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIFdlIGhhdmUgZGlzcGxheWVkIHRoZSBkaWFsb2cgYW5kIHRoZSB1c2VyIGNvbmZpcm1lZCB0aGUgZGlzY2FyZCAtPiBXZSBza2lwIHRoZSBkaXNjYXJkIGNvbmZpcm1hdGlvblxuXHRcdFx0XHRpZiAoZGlhbG9nQWN0aW9uID09PSBcImRpc2NhcmRDb25maXJtZWRcIikge1xuXHRcdFx0XHRcdHNob3VsZFNraXBEaXNjYXJkUG9wb3ZlciA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgZ2V0IGNvbGxhYm9yYXRpdmUgdXNlcnNcIik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnN0IGlzRG9jdW1lbnRNb2RpZmllZCA9XG5cdFx0XHQhIXRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoVWlNb2RlbENvbnN0YW50cy5Eb2N1bWVudE1vZGlmaWVkKSB8fFxuXHRcdFx0KCF0aGlzLmdldFN0aWNreUVkaXRNb2RlKCkgJiYgY29udGV4dC5nZXRQcm9wZXJ0eShcIkhhc0FjdGl2ZUVudGl0eVwiKSA9PT0gZmFsc2UpO1xuXHRcdGNvbnN0IGFmdGVyQ2FuY2VsOiBGdW5jdGlvbiA9IChwcm9taXNlUmVzdWx0OiBPRGF0YVY0Q29udGV4dCkgPT4ge1xuXHRcdFx0Ly8gZm9jdXMgaXMgcmV0YWluZWQgb24gdGhlIGxhc3QgZm9jdXNlZCBlbGVtZW50XG5cdFx0XHRpZiAobGFzdEZvY3VzZWRDb250cm9sSWQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKGxhc3RGb2N1c2VkQ29udHJvbElkKT8uZm9jdXMoKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBwcm9taXNlUmVzdWx0O1xuXHRcdH07XG5cdFx0aWYgKFxuXHRcdFx0KHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk/LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCk/LmdldENhcGFiaWxpdGllcygpPy5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdCk/LmVuYWJsZWQgJiZcblx0XHRcdGlzRG9jdW1lbnRNb2RpZmllZFxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIGRyYWZ0LnByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uKFxuXHRcdFx0XHRhZnRlckNhbmNlbCxcblx0XHRcdFx0RnVuY3Rpb24ucHJvdG90eXBlLFxuXHRcdFx0XHRjb250ZXh0LFxuXHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0ZHJhZnQuTmF2aWdhdGlvblR5cGUuQmFja05hdmlnYXRpb24sXG5cdFx0XHRcdHRydWVcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmVkaXRGbG93XG5cdFx0XHQuY2FuY2VsRG9jdW1lbnQoY29udGV4dCwgeyBjb250cm9sOiBjYW5jZWxCdXR0b24sIHNraXBEaXNjYXJkUG9wb3Zlcjogc2hvdWxkU2tpcERpc2NhcmRQb3BvdmVyIH0pXG5cdFx0XHQudGhlbigocHJvbWlzZVJlc3VsdCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gYWZ0ZXJDYW5jZWwocHJvbWlzZVJlc3VsdCk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdGFzeW5jIF9hcHBseURvY3VtZW50KG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiB0aGlzLmVkaXRGbG93LmFwcGx5RG9jdW1lbnQob0NvbnRleHQpLmNhdGNoKCgpID0+IHtcblx0XHRcdHRoaXMuX3Nob3dNZXNzYWdlUG9wb3ZlcigpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH0pO1xuXHR9XG5cblx0X3VwZGF0ZVJlbGF0ZWRBcHBzKCk6IHZvaWQge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRjb25zdCBzaG93UmVsYXRlZEFwcHMgPSBvT2JqZWN0UGFnZS5kYXRhKFwic2hvd1JlbGF0ZWRBcHBzXCIpO1xuXHRcdGlmIChzaG93UmVsYXRlZEFwcHMgPT09IFwidHJ1ZVwiIHx8IHNob3dSZWxhdGVkQXBwcyA9PT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuZ2V0VmlldygpKTtcblx0XHRcdENvbW1vblV0aWxzLnVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyhvT2JqZWN0UGFnZSwgYXBwQ29tcG9uZW50KTtcblx0XHR9XG5cdH1cblxuXHRfZmluZENvbnRyb2xJblN1YlNlY3Rpb24oYVBhcmVudEVsZW1lbnQ6IENvbnRyb2xbXSwgYVN1YnNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLCBhQ29udHJvbHM6IENvbnRyb2xbXSwgYklzQ2hhcnQ/OiBib29sZWFuKTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCBpdGVtMSBvZiBhUGFyZW50RWxlbWVudCkge1xuXHRcdFx0bGV0IG9FbGVtZW50ID0gKGl0ZW0xIGFzIE1hY3JvQVBJKS5nZXRDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gPyAoaXRlbTEgYXMgTWFjcm9BUEkpLmdldENvbnRlbnQoKSA6IHVuZGVmaW5lZDtcblx0XHRcdGlmIChiSXNDaGFydCkge1xuXHRcdFx0XHRpZiAob0VsZW1lbnQ/LmdldEFnZ3JlZ2F0aW9uKFwiaXRlbXNcIikpIHtcblx0XHRcdFx0XHRjb25zdCBpdGVtcyA9IG9FbGVtZW50LmdldEFnZ3JlZ2F0aW9uKFwiaXRlbXNcIikgYXMgQ29udHJvbFtdO1xuXHRcdFx0XHRcdGl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGl0ZW06IENvbnRyb2wpIHtcblx0XHRcdFx0XHRcdGlmIChpdGVtLmlzQTxDaGFydEJsb2NrPihcInNhcC5mZS5tYWNyb3MuQ2hhcnRcIikpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgY2hhcnRDb250cm9sID0gaXRlbS5nZXRDaGFydENvbnRyb2woKTtcblx0XHRcdFx0XHRcdFx0YUNvbnRyb2xzLnB1c2goY2hhcnRDb250cm9sKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50LmlzQSAmJiBvRWxlbWVudC5pc0E8RHluYW1pY1NpZGVDb250ZW50PihcInNhcC51aS5sYXlvdXQuRHluYW1pY1NpZGVDb250ZW50XCIpKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1N1YkVsZW1lbnQgPSBvRWxlbWVudC5nZXRNYWluQ29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gb0VsZW1lbnQuZ2V0TWFpbkNvbnRlbnQoKSA6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRpZiAob1N1YkVsZW1lbnQgJiYgb1N1YkVsZW1lbnQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0b0VsZW1lbnQgPSBvU3ViRWxlbWVudFswXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gVGhlIHRhYmxlIG1heSBjdXJyZW50bHkgYmUgc2hvd24gaW4gYSBmdWxsIHNjcmVlbiBkaWFsb2csIHdlIGNhbiB0aGVuIGdldCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBUYWJsZUFQSVxuXHRcdFx0XHQvLyBjb250cm9sIGZyb20gdGhlIGN1c3RvbSBkYXRhIG9mIHRoZSBwbGFjZSBob2xkZXIgcGFuZWxcblx0XHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50LmlzQSAmJiBvRWxlbWVudC5pc0EoXCJzYXAubS5QYW5lbFwiKSAmJiBvRWxlbWVudC5kYXRhKFwiRnVsbFNjcmVlblRhYmxlUGxhY2VIb2xkZXJcIikpIHtcblx0XHRcdFx0XHRvRWxlbWVudCA9IG9FbGVtZW50LmRhdGEoXCJ0YWJsZUFQSXJlZmVyZW5jZVwiKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQuaXNBICYmIG9FbGVtZW50LmlzQTxUYWJsZUFQST4oXCJzYXAuZmUubWFjcm9zLnRhYmxlLlRhYmxlQVBJXCIpKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1N1YkVsZW1lbnQgPSBvRWxlbWVudC5nZXRDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gPyBvRWxlbWVudC5nZXRDb250ZW50KCkgOiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0aWYgKG9TdWJFbGVtZW50ICYmIG9TdWJFbGVtZW50LmlzQSAmJiBvU3ViRWxlbWVudC5pc0E8VGFibGU+KFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRcdFx0YUNvbnRyb2xzLnB1c2gob1N1YkVsZW1lbnQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF9nZXRBbGxTdWJTZWN0aW9ucygpOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdIHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0bGV0IGFTdWJTZWN0aW9uczogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSA9IFtdO1xuXHRcdG9PYmplY3RQYWdlLmdldFNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1NlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uKSB7XG5cdFx0XHRhU3ViU2VjdGlvbnMgPSBhU3ViU2VjdGlvbnMuY29uY2F0KG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBhU3ViU2VjdGlvbnM7XG5cdH1cblxuXHRfZ2V0QWxsQmxvY2tzKCk6IEVuaGFuY2VXaXRoVUk1PFN1YlNlY3Rpb25CbG9jaz5bXSB7XG5cdFx0bGV0IGFCbG9ja3M6IEVuaGFuY2VXaXRoVUk1PFN1YlNlY3Rpb25CbG9jaz5bXSA9IFtdO1xuXHRcdHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1N1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uKSB7XG5cdFx0XHRhQmxvY2tzID0gYUJsb2Nrcy5jb25jYXQob1N1YlNlY3Rpb24uZ2V0QmxvY2tzKCkgYXMgRW5oYW5jZVdpdGhVSTU8U3ViU2VjdGlvbkJsb2NrPltdKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gYUJsb2Nrcztcblx0fVxuXG5cdF9maW5kVGFibGVzKCk6IFRhYmxlW10ge1xuXHRcdGNvbnN0IGFTdWJTZWN0aW9ucyA9IHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCk7XG5cdFx0Y29uc3QgYVRhYmxlczogVGFibGVbXSA9IFtdO1xuXHRcdGZvciAobGV0IHN1YlNlY3Rpb24gPSAwOyBzdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgc3ViU2VjdGlvbisrKSB7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0QmxvY2tzKCksIGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXSwgYVRhYmxlcyk7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0TW9yZUJsb2NrcygpLCBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0sIGFUYWJsZXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gYVRhYmxlcztcblx0fVxuXG5cdF9maW5kQ2hhcnRzKCk6IENoYXJ0W10ge1xuXHRcdGNvbnN0IGFTdWJTZWN0aW9ucyA9IHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCk7XG5cdFx0Y29uc3QgYUNoYXJ0czogQ2hhcnRbXSA9IFtdO1xuXHRcdGZvciAobGV0IHN1YlNlY3Rpb24gPSAwOyBzdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgc3ViU2VjdGlvbisrKSB7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0QmxvY2tzKCksIGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXSwgYUNoYXJ0cywgdHJ1ZSk7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0TW9yZUJsb2NrcygpLCBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0sIGFDaGFydHMsIHRydWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gYUNoYXJ0cztcblx0fVxuXG5cdF9jbG9zZVNpZGVDb250ZW50KCk6IHZvaWQge1xuXHRcdHRoaXMuX2dldEFsbEJsb2NrcygpLmZvckVhY2goZnVuY3Rpb24gKG9CbG9jazogRW5oYW5jZVdpdGhVSTU8U3ViU2VjdGlvbkJsb2NrPik6IHZvaWQge1xuXHRcdFx0Y29uc3Qgb0NvbnRlbnQgPSBvQmxvY2suZ2V0Q29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIG9CbG9jay5nZXRDb250ZW50KCk7XG5cdFx0XHRpZiAob0NvbnRlbnQgJiYgb0NvbnRlbnQuaXNBICYmIG9Db250ZW50LmlzQTxEeW5hbWljU2lkZUNvbnRlbnQ+KFwic2FwLnVpLmxheW91dC5EeW5hbWljU2lkZUNvbnRlbnRcIikpIHtcblx0XHRcdFx0aWYgKG9Db250ZW50LnNldFNob3dTaWRlQ29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG5cdFx0XHRcdFx0b0NvbnRlbnQuc2V0U2hvd1NpZGVDb250ZW50KGZhbHNlLCBmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGFydCBDb250ZXh0IGlzIHJlc29sdmVkIGZvciAxOm4gbWljcm9jaGFydHMuXG5cdCAqIEBwYXJhbSBvQ2hhcnRDb250ZXh0IFRoZSBDb250ZXh0IG9mIHRoZSBNaWNyb0NoYXJ0XG5cdCAqIEBwYXJhbSBzQ2hhcnRQYXRoIFRoZSBjb2xsZWN0aW9uUGF0aCBvZiB0aGUgdGhlIGNoYXJ0XG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIEF0dHJpYnV0ZXMgb2YgdGhlIGNoYXJ0IENvbnRleHRcblx0ICovXG5cdF9nZXRDaGFydENvbnRleHREYXRhKG9DaGFydENvbnRleHQ6IENvbnRleHQsIHNDaGFydFBhdGg6IHN0cmluZyk6IHVua25vd25bXSB7XG5cdFx0Y29uc3Qgb0NvbnRleHREYXRhID0gb0NoYXJ0Q29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRsZXQgb0NoYXJ0Q29udGV4dERhdGEgPSBbb0NvbnRleHREYXRhXTtcblx0XHRpZiAob0NoYXJ0Q29udGV4dCAmJiBzQ2hhcnRQYXRoKSB7XG5cdFx0XHRpZiAob0NvbnRleHREYXRhW3NDaGFydFBhdGhdKSB7XG5cdFx0XHRcdG9DaGFydENvbnRleHREYXRhID0gb0NvbnRleHREYXRhW3NDaGFydFBhdGhdO1xuXHRcdFx0XHRkZWxldGUgb0NvbnRleHREYXRhW3NDaGFydFBhdGhdO1xuXHRcdFx0XHRvQ2hhcnRDb250ZXh0RGF0YS5wdXNoKG9Db250ZXh0RGF0YSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvQ2hhcnRDb250ZXh0RGF0YTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTY3JvbGwgdGhlIHRhYmxlcyB0byB0aGUgcm93IHdpdGggdGhlIHNQYXRoXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzUm93UGF0aCAnc1BhdGggb2YgdGhlIHRhYmxlIHJvdydcblx0ICovXG5cblx0X3Njcm9sbFRhYmxlc1RvUm93KHNSb3dQYXRoOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5fZmluZFRhYmxlcyAmJiB0aGlzLl9maW5kVGFibGVzKCkubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgYVRhYmxlcyA9IHRoaXMuX2ZpbmRUYWJsZXMoKTtcblx0XHRcdGZvciAoY29uc3QgaXRlbSBvZiBhVGFibGVzKSB7XG5cdFx0XHRcdFRhYmxlU2Nyb2xsZXIuc2Nyb2xsVGFibGVUb1JvdyhpdGVtLCBzUm93UGF0aCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBtZXJnZSBzZWxlY3RlZCBjb250ZXh0cyBhbmQgZmlsdGVycy5cblx0ICogQHBhcmFtIG9QYWdlQ29udGV4dCBQYWdlIGNvbnRleHRcblx0ICogQHBhcmFtIGFMaW5lQ29udGV4dCBTZWxlY3RlZCBDb250ZXh0c1xuXHQgKiBAcGFyYW0gc0NoYXJ0UGF0aCBDb2xsZWN0aW9uIG5hbWUgb2YgdGhlIGNoYXJ0XG5cdCAqIEByZXR1cm5zIFNlbGVjdGlvbiBWYXJpYW50IE9iamVjdFxuXHQgKi9cblx0X21lcmdlTXVsdGlwbGVDb250ZXh0cyhcblx0XHRvUGFnZUNvbnRleHQ6IENvbnRleHQsXG5cdFx0YUxpbmVDb250ZXh0OiBPRGF0YVY0Q29udGV4dFtdLFxuXHRcdHNDaGFydFBhdGg6IHN0cmluZ1xuXHQpOiB7IHNlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQ7IGF0dHJpYnV0ZXM6IHVua25vd25bXSB9IHtcblx0XHRsZXQgYUF0dHJpYnV0ZXM6IHVua25vd25bXSA9IFtdLFxuXHRcdFx0YVBhZ2VBdHRyaWJ1dGVzID0gW10sXG5cdFx0XHRvQ29udGV4dCxcblx0XHRcdHNNZXRhUGF0aExpbmU6IHN0cmluZyxcblx0XHRcdHNQYXRoTGluZTtcblxuXHRcdGNvbnN0IHNQYWdlUGF0aCA9IG9QYWdlQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9QYWdlQ29udGV4dCAmJiBvUGFnZUNvbnRleHQuZ2V0TW9kZWwoKSAmJiBvUGFnZUNvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBzTWV0YVBhdGhQYWdlID0gb01ldGFNb2RlbCAmJiBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNQYWdlUGF0aCkucmVwbGFjZSgvXlxcLyovLCBcIlwiKTtcblxuXHRcdC8vIEdldCBzaW5nbGUgbGluZSBjb250ZXh0IGlmIG5lY2Vzc2FyeVxuXHRcdGlmIChhTGluZUNvbnRleHQgJiYgYUxpbmVDb250ZXh0Lmxlbmd0aCkge1xuXHRcdFx0b0NvbnRleHQgPSBhTGluZUNvbnRleHRbMF07XG5cdFx0XHRzUGF0aExpbmUgPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRzTWV0YVBhdGhMaW5lID0gb01ldGFNb2RlbCAmJiBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNQYXRoTGluZSkucmVwbGFjZSgvXlxcLyovLCBcIlwiKTtcblxuXHRcdFx0YUxpbmVDb250ZXh0LmZvckVhY2goKG9TaW5nbGVDb250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRpZiAoc0NoYXJ0UGF0aCkge1xuXHRcdFx0XHRcdGNvbnN0IG9DaGFydENvbnRleHREYXRhID0gdGhpcy5fZ2V0Q2hhcnRDb250ZXh0RGF0YShvU2luZ2xlQ29udGV4dCwgc0NoYXJ0UGF0aCk7XG5cdFx0XHRcdFx0aWYgKG9DaGFydENvbnRleHREYXRhKSB7XG5cdFx0XHRcdFx0XHRhQXR0cmlidXRlcyA9IG9DaGFydENvbnRleHREYXRhLm1hcChmdW5jdGlvbiAob1N1YkNoYXJ0Q29udGV4dERhdGE6IHVua25vd24pIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRjb250ZXh0RGF0YTogb1N1YkNoYXJ0Q29udGV4dERhdGEsXG5cdFx0XHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBgJHtzTWV0YVBhdGhQYWdlfS8ke3NDaGFydFBhdGh9YFxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGFBdHRyaWJ1dGVzLnB1c2goe1xuXHRcdFx0XHRcdFx0Y29udGV4dERhdGE6IG9TaW5nbGVDb250ZXh0LmdldE9iamVjdCgpLFxuXHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBzTWV0YVBhdGhMaW5lXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRhUGFnZUF0dHJpYnV0ZXMucHVzaCh7XG5cdFx0XHRjb250ZXh0RGF0YTogb1BhZ2VDb250ZXh0LmdldE9iamVjdCgpLFxuXHRcdFx0ZW50aXR5U2V0OiBzTWV0YVBhdGhQYWdlXG5cdFx0fSk7XG5cdFx0Ly8gQWRkaW5nIFBhZ2UgQ29udGV4dCB0byBzZWxlY3Rpb24gdmFyaWFudFxuXHRcdGFQYWdlQXR0cmlidXRlcyA9IHRoaXMuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5yZW1vdmVTZW5zaXRpdmVEYXRhKGFQYWdlQXR0cmlidXRlcywgc01ldGFQYXRoUGFnZSk7XG5cdFx0Y29uc3Qgb1BhZ2VMZXZlbFNWID0gQ29tbW9uVXRpbHMuYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQobmV3IFNlbGVjdGlvblZhcmlhbnQoKSwgYVBhZ2VBdHRyaWJ1dGVzLCB0aGlzLmdldFZpZXcoKSk7XG5cdFx0YUF0dHJpYnV0ZXMgPSB0aGlzLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ucmVtb3ZlU2Vuc2l0aXZlRGF0YShhQXR0cmlidXRlcywgc01ldGFQYXRoUGFnZSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnQ6IG9QYWdlTGV2ZWxTVixcblx0XHRcdGF0dHJpYnV0ZXM6IGFBdHRyaWJ1dGVzXG5cdFx0fTtcblx0fVxuXG5cdF9nZXRCYXRjaEdyb3Vwc0ZvclZpZXcoKTogc3RyaW5nW10ge1xuXHRcdGNvbnN0IG9WaWV3RGF0YSA9IHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCksXG5cdFx0XHRvQ29uZmlndXJhdGlvbnMgPSBvVmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb24sXG5cdFx0XHRhQ29uZmlndXJhdGlvbnMgPSBvQ29uZmlndXJhdGlvbnMgJiYgT2JqZWN0LmtleXMob0NvbmZpZ3VyYXRpb25zKSxcblx0XHRcdGFCYXRjaEdyb3VwcyA9IFtcIiRhdXRvLkhlcm9lc1wiLCBcIiRhdXRvLkRlY29yYXRpb25cIiwgXCIkYXV0by5Xb3JrZXJzXCJdO1xuXG5cdFx0aWYgKGFDb25maWd1cmF0aW9ucyAmJiBhQ29uZmlndXJhdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0YUNvbmZpZ3VyYXRpb25zLmZvckVhY2goZnVuY3Rpb24gKHNLZXkpIHtcblx0XHRcdFx0Y29uc3Qgb0NvbmZpZ3VyYXRpb24gPSBvQ29uZmlndXJhdGlvbnNbc0tleV0gYXMgTWljcm9DaGFydE1hbmlmZXN0Q29uZmlndXJhdGlvbjtcblx0XHRcdFx0aWYgKG9Db25maWd1cmF0aW9uLnJlcXVlc3RHcm91cElkID09PSBcIkxvbmdSdW5uZXJzXCIpIHtcblx0XHRcdFx0XHRhQmF0Y2hHcm91cHMucHVzaChcIiRhdXRvLkxvbmdSdW5uZXJzXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGFCYXRjaEdyb3Vwcztcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gaW5pdGlhbGl6ZSBwYWdpbmF0aW9uLlxuXHQgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0IG9mIG9iamVjdCBwYWdlXG5cdCAqIEBwYXJhbSBpbnRlcm5hbE1vZGVsIEludGVybmFsIG1vZGVsXG5cdCAqIEBwYXJhbSBsaXN0QmluZGluZyBQYXJlbnQgbGlzdCBiaW5kaW5nIHRvIHVzZVxuXHQgKi9cblx0X2luaXRpYWxpemVQYWdpbmF0aW9uKGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0LCBpbnRlcm5hbE1vZGVsOiBKU09OTW9kZWwsIGxpc3RCaW5kaW5nPzogT0RhdGFMaXN0QmluZGluZyk6IHZvaWQge1xuXHRcdGNvbnN0IHZpZXdMZXZlbCA9IHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkudmlld0xldmVsO1xuXHRcdGlmICh2aWV3TGV2ZWwgPiAxKSB7XG5cdFx0XHRjb25zdCBwYWdpbmF0b3JDdXJyZW50Q29udGV4dCA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvcGFnaW5hdG9yQ3VycmVudENvbnRleHRcIik7XG5cdFx0XHRpZiAocGFnaW5hdG9yQ3VycmVudENvbnRleHQpIHtcblx0XHRcdFx0Y29uc3QgYmluZGluZ1RvVXNlID0gcGFnaW5hdG9yQ3VycmVudENvbnRleHQuZ2V0QmluZGluZygpO1xuXHRcdFx0XHR0aGlzLnBhZ2luYXRvci5pbml0aWFsaXplKGJpbmRpbmdUb1VzZSwgcGFnaW5hdG9yQ3VycmVudENvbnRleHQpO1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL3BhZ2luYXRvckN1cnJlbnRDb250ZXh0XCIsIG51bGwpO1xuXHRcdFx0fSBlbHNlIGlmIChsaXN0QmluZGluZykge1xuXHRcdFx0XHR0aGlzLnBhZ2luYXRvci5pbml0aWFsaXplKGxpc3RCaW5kaW5nLCBjb250ZXh0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfY2hlY2tEYXRhUG9pbnRUaXRsZUZvckV4dGVybmFsTmF2aWdhdGlvbigpOiB2b2lkIHtcblx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3Qgb0RhdGFQb2ludHMgPSBDb21tb25VdGlscy5nZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24oXG5cdFx0XHRvVmlldy5nZXRWaWV3RGF0YSgpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRcdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb3V0aW5nU2VydmljZSgpLmdldE91dGJvdW5kcygpXG5cdFx0KTtcblx0XHRjb25zdCBvU2hlbGxTZXJ2aWNlcyA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0U2hlbGxTZXJ2aWNlcygpO1xuXHRcdGNvbnN0IG9QYWdlQ29udGV4dCA9IG9WaWV3ICYmIG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaXNIZWFkZXJEUExpbmtWaXNpYmxlXCIsIHt9KTtcblx0XHRpZiAob1BhZ2VDb250ZXh0KSB7XG5cdFx0XHRvUGFnZUNvbnRleHRcblx0XHRcdFx0LnJlcXVlc3RPYmplY3QoKVxuXHRcdFx0XHQudGhlbihmdW5jdGlvbiAob0RhdGE6IG9iamVjdCkge1xuXHRcdFx0XHRcdHJldHVybiBmbkdldExpbmtzKG9EYXRhUG9pbnRzLCBvRGF0YSk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IHJldHJpZXZlIHRoZSBsaW5rcyBmcm9tIHRoZSBzaGVsbCBzZXJ2aWNlXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBAcGFyYW0gb0Vycm9yXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gZm5PbkVycm9yKG9FcnJvcjogc3RyaW5nKTogdm9pZCB7XG5cdFx0XHRMb2cuZXJyb3Iob0Vycm9yKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBmblNldExpbmtFbmFibGVtZW50KGlkOiBzdHJpbmcsIGFTdXBwb3J0ZWRMaW5rczogeyBzdXBwb3J0ZWQ/OiBib29sZWFuIH1bXSk6IHZvaWQge1xuXHRcdFx0Y29uc3Qgc0xpbmtJZCA9IGlkO1xuXHRcdFx0Ly8gcHJvY2VzcyB2aWFibGUgbGlua3MgZnJvbSBnZXRMaW5rcyBmb3IgYWxsIGRhdGFwb2ludHMgaGF2aW5nIG91dGJvdW5kXG5cdFx0XHRpZiAoYVN1cHBvcnRlZExpbmtzICYmIGFTdXBwb3J0ZWRMaW5rcy5sZW5ndGggPT09IDEgJiYgYVN1cHBvcnRlZExpbmtzWzBdLnN1cHBvcnRlZCkge1xuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYGlzSGVhZGVyRFBMaW5rVmlzaWJsZS8ke3NMaW5rSWR9YCwgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogQHBhcmFtIG9TdWJEYXRhUG9pbnRzXG5cdFx0ICogQHBhcmFtIG9QYWdlRGF0YVxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIGZuR2V0TGlua3MoXG5cdFx0XHRvU3ViRGF0YVBvaW50czogUmVjb3JkPFxuXHRcdFx0XHRzdHJpbmcsXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogc3RyaW5nO1xuXHRcdFx0XHRcdGFjdGlvbjogc3RyaW5nO1xuXHRcdFx0XHRcdHNlbWFudGljT2JqZWN0TWFwcGluZzogTWV0YU1vZGVsVHlwZTxTZW1hbnRpY09iamVjdE1hcHBpbmdUeXBlPltdO1xuXHRcdFx0XHR9XG5cdFx0XHQ+LFxuXHRcdFx0b1BhZ2VEYXRhOiBvYmplY3Rcblx0XHQpOiB2b2lkIHtcblx0XHRcdGZvciAoY29uc3Qgc0lkIGluIG9TdWJEYXRhUG9pbnRzKSB7XG5cdFx0XHRcdGNvbnN0IG9EYXRhUG9pbnQgPSBvU3ViRGF0YVBvaW50c1tzSWRdO1xuXHRcdFx0XHRjb25zdCBvUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXHRcdFx0XHRjb25zdCBvTGluayA9IG9WaWV3LmJ5SWQoc0lkKTtcblx0XHRcdFx0aWYgKCFvTGluaykge1xuXHRcdFx0XHRcdC8vIGZvciBkYXRhIHBvaW50cyBjb25maWd1cmVkIGluIGFwcCBkZXNjcmlwdG9yIGJ1dCBub3QgYW5ub3RhdGVkIGluIHRoZSBoZWFkZXJcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBvTGlua0NvbnRleHQgPSBvTGluay5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdFx0XHRjb25zdCBvTGlua0RhdGE6IG9iamVjdCA9IG9MaW5rQ29udGV4dCAmJiBvTGlua0NvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdGxldCBvTWl4ZWRDb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IG1lcmdlKHt9LCBvUGFnZURhdGEsIG9MaW5rRGF0YSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cdFx0XHRcdC8vIHByb2Nlc3Mgc2VtYW50aWMgb2JqZWN0IG1hcHBpbmdzXG5cdFx0XHRcdGlmIChvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0TWFwcGluZykge1xuXHRcdFx0XHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0TWFwcGluZztcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW0gaW4gYVNlbWFudGljT2JqZWN0TWFwcGluZykge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb01hcHBpbmcgPSBhU2VtYW50aWNPYmplY3RNYXBwaW5nW2l0ZW1dO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc01haW5Qcm9wZXJ0eSA9IG9NYXBwaW5nW1wiTG9jYWxQcm9wZXJ0eVwiXSFbXCIkUHJvcGVydHlQYXRoXCJdO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc01hcHBlZFByb3BlcnR5ID0gb01hcHBpbmdbXCJTZW1hbnRpY09iamVjdFByb3BlcnR5XCJdITtcblx0XHRcdFx0XHRcdGlmIChzTWFpblByb3BlcnR5ICE9PSBzTWFwcGVkUHJvcGVydHkpIHtcblx0XHRcdFx0XHRcdFx0aWYgKG9NaXhlZENvbnRleHQuaGFzT3duUHJvcGVydHkoc01haW5Qcm9wZXJ0eSkpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBvTmV3TWFwcGluZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblx0XHRcdFx0XHRcdFx0XHRvTmV3TWFwcGluZ1tzTWFwcGVkUHJvcGVydHldID0gb01peGVkQ29udGV4dFtzTWFpblByb3BlcnR5XTtcblx0XHRcdFx0XHRcdFx0XHRvTWl4ZWRDb250ZXh0ID0gbWVyZ2Uoe30sIG9NaXhlZENvbnRleHQsIG9OZXdNYXBwaW5nKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0XHRcdFx0XHRcdFx0XHRkZWxldGUgb01peGVkQ29udGV4dFtzTWFpblByb3BlcnR5XTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChvTWl4ZWRDb250ZXh0KSB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBzS2V5IGluIG9NaXhlZENvbnRleHQpIHtcblx0XHRcdFx0XHRcdGlmICghc0tleS5zdGFydHNXaXRoKFwiX1wiKSAmJiAhc0tleS5pbmNsdWRlcyhcIm9kYXRhLmNvbnRleHRcIikpIHtcblx0XHRcdFx0XHRcdFx0b1BhcmFtc1tzS2V5XSA9IG9NaXhlZENvbnRleHRbc0tleV07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIHZhbGlkYXRlIGlmIGEgbGluayBtdXN0IGJlIHJlbmRlcmVkXG5cdFx0XHRcdG9TaGVsbFNlcnZpY2VzXG5cdFx0XHRcdFx0LmlzTmF2aWdhdGlvblN1cHBvcnRlZChbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhcmdldDoge1xuXHRcdFx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRcdGFjdGlvbjogb0RhdGFQb2ludC5hY3Rpb25cblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0cGFyYW1zOiBvUGFyYW1zXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XSlcblx0XHRcdFx0XHQudGhlbigoYUxpbmtzKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZm5TZXRMaW5rRW5hYmxlbWVudChzSWQsIGFMaW5rcyk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZm5PbkVycm9yKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfZmluZFN1bW1hcml6ZUJ1dHRvbigpOiBCdXR0b24gfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG9iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGNvbnN0IG9iamVjdFBhZ2VUaXRsZSA9IG9iamVjdFBhZ2UuZ2V0SGVhZGVyVGl0bGUoKSBhcyBPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlO1xuXHRcdGNvbnN0IGFjdGlvbnMgPSBvYmplY3RQYWdlVGl0bGU/LmdldEFjdGlvbnMoKTtcblx0XHRsZXQgc3VtbWFyaXplQnV0dG9uOiBCdXR0b24gfCB1bmRlZmluZWQ7XG5cblx0XHRmb3IgKGNvbnN0IGFjdGlvbiBvZiBhY3Rpb25zKSB7XG5cdFx0XHRpZiAoYWN0aW9uLmlzQTxTdW1tYXJpemF0aW9uQnV0dG9uPihcInNhcC5mZS5tYWNyb3MuYWkuU3VtbWFyaXphdGlvbkJ1dHRvblwiKSkge1xuXHRcdFx0XHRjb25zdCBidXR0b24gPSBhY3Rpb24uZ2V0Q29udGVudCgpIGFzIEJ1dHRvbiB8IHVuZGVmaW5lZDtcblx0XHRcdFx0aWYgKGJ1dHRvbiAmJiBidXR0b24uZ2V0SWQoKS5lbmRzV2l0aChcIjo6U3VtbWFyaXplOjpidXR0b25cIikpIHtcblx0XHRcdFx0XHRzdW1tYXJpemVCdXR0b24gPSBidXR0b247XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gc3VtbWFyaXplQnV0dG9uO1xuXHR9XG5cblx0LyoqXG5cdCAqIEV2YWx1YXRlcyBzdGFydHVwIHBhcmFtZXRlcnMgYW5kIHRyaWdnZXJzIHRoZSBzbWFydCBzdW1tYXJ5IGFjdGlvbiBvbiB0aGUgT2JqZWN0IFBhZ2UgaWYgcmVxdWlyZWQuXG5cdCAqXG5cdCAqIFRoaXMgbWV0aG9kIGNoZWNrcyB3aGV0aGVyIHRoZSBzdGFydHVwIHBhcmFtZXRlcnMgaW5kaWNhdGUgdGhhdCBhIHNtYXJ0IHN1bW1hcnkgc2hvdWxkIGJlIHBlcmZvcm1lZCBmb3IgdGhlIGN1cnJlbnQgT2JqZWN0IFBhZ2UgbGV2ZWwuXG5cdCAqIFRoZSBsZXZlbCBwYXJhbWV0ZXIgZGV0ZXJtaW5lcyB3aGljaCBPYmplY3QgUGFnZSBzaG91bGQgYmUgc3VtbWFyaXplZCwgd2hpY2ggaXMgcmVsZXZhbnQgaW4gRmxleGlibGUgQ29sdW1uIExheW91dCAoRkNMKSBzY2VuYXJpb3Mgd2hlcmVcblx0ICogbXVsdGlwbGUgT2JqZWN0IFBhZ2VzIG1heSBiZSBkaXNwbGF5ZWQgc2ltdWx0YW5lb3VzbHkuXG5cdCAqIElmIG5vIGxldmVsIGlzIHByb3ZpZGVkIGluIHRoZSBzdGFydHVwIHBhcmFtZXRlcnMsIHRoZSBtZXRob2QgZGVmYXVsdHMgdGhlIGxldmVsIHRvIDEuXG5cdCAqIElmIHRoZSBzdW1tYXJ5IGFjdGlvbiBpcyBhbGxvd2VkIGFuZCB0aGUgU21hcnRTdW1tYXJpemUgY2FwYWJpbGl0eSBpcyBhdmFpbGFibGUsIGl0IGxvY2F0ZXMgdGhlIHN1bW1hcml6ZSBidXR0b24gYW5kIHRyaWdnZXJzIGl0cyBwcmVzcyBldmVudC5cblx0ICogVGhlIG1ldGhvZCBlbnN1cmVzIHRoZSBzdW1tYXJ5IGlzIG9ubHkgZXhlY3V0ZWQgb25jZSBwZXIgbmF2aWdhdGlvbiBhbmQgbG9ncyBlcnJvcnMgaWYgcHJlcmVxdWlzaXRlcyBhcmUgbm90IG1ldCBvciB0aGUgYnV0dG9uIGlzIHVuYXZhaWxhYmxlLlxuXHQgKiBBbGwgZXJyb3JzIGVuY291bnRlcmVkIGR1cmluZyB0aGUgcHJvY2VzcyBhcmUgY2F1Z2h0IGFuZCBsb2dnZWQuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfaGFuZGxlU21hcnRTdW1tYXJ5U3RhcnR1cEFjdGlvbigpOiB2b2lkIHtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdGFwcENvbXBvbmVudFxuXHRcdFx0Py5nZXRTdGFydHVwUGFyYW1ldGVycygpXG5cdFx0XHQ/LnRoZW4oKHN0YXJ0dXBQYXJhbXM6IFN0YXJ0dXBQYXJhbWV0ZXJzKSA9PiB7XG5cdFx0XHRcdGlmICghc3RhcnR1cFBhcmFtcy5wcmVmZXJyZWRBY3Rpb24gfHwgIXN0YXJ0dXBQYXJhbXMucHJlZmVycmVkQWN0aW9uWzBdLnN0YXJ0c1dpdGgoXCJzdW1tYXJ5XCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gY2hlY2sgaWYgd2UgYXJlIG9uIHRoZSBjb3JyZWN0IE9QIGJ5IGNoZWNraW5nIHRoZSBsZXZlbCBwcm92aWRlZCBpbiB0aGUgc3RhcnR1cCBwYXJhbWV0ZXJzXG5cdFx0XHRcdGNvbnN0IHZpZXdMZXZlbCA9IHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkudmlld0xldmVsO1xuXHRcdFx0XHRjb25zdCBwcmVmZXJyZWRBY3Rpb25MZXZlbCA9XG5cdFx0XHRcdFx0c3RhcnR1cFBhcmFtcy5wcmVmZXJyZWRBY3Rpb25bMF0gPT09IFwic3VtbWFyeVwiID8gMSA6IHBhcnNlSW50KHN0YXJ0dXBQYXJhbXMucHJlZmVycmVkQWN0aW9uWzBdLnNwbGl0KFwiLVwiKVsxXSwgMTApO1xuXHRcdFx0XHRpZiAoaXNOYU4ocHJlZmVycmVkQWN0aW9uTGV2ZWwpIHx8IHZpZXdMZXZlbCAhPT0gcHJlZmVycmVkQWN0aW9uTGV2ZWwpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDaGVjayBpZiBzdW1tYXJ5IGFjdGlvbiBzaGFsbCBiZSBleGVjdXRlZCBub3cgKGl0IG1pZ2h0IGhhdmUgYWxyZWFkeSBiZWVuIGV4ZWN1dGVkIGJ5IGEgaGlnaGVyIGxldmVsIE9QKVxuXHRcdFx0XHRpZiAoYXBwQ29tcG9uZW50LmdldFByZWZlcnJlZEFjdGlvblN0YXR1cygpID09PSBQcmVmZXJyZWRBY3Rpb25TdGF0dXMuQ2FuUGVyZm9ybSkge1xuXHRcdFx0XHRcdGFwcENvbXBvbmVudC5zZXRQcmVmZXJyZWRBY3Rpb25TdGF0dXMoUHJlZmVycmVkQWN0aW9uU3RhdHVzLkFscmVhZHlQZXJmb3JtZWQpOyAvLyB0byBwcmV2ZW50IG90aGVyIE9QcyBvbiBoaWdoZXIgbGV2ZWxzIHRvIGV4ZWN1dGUgdGhlIHN1bW1hcnkgYWdhaW5cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDaGVjayBpZiBTbWFydFN1bW1hcml6ZSBjYXBhYmlsaXR5IGlzIGF2YWlsYWJsZVxuXHRcdFx0XHRjb25zdCBlbnZpcm9ubWVudFNlcnZpY2UgPSBhcHBDb21wb25lbnQuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKTtcblx0XHRcdFx0aWYgKCFlbnZpcm9ubWVudFNlcnZpY2U/LmVudmlyb25tZW50Q2FwYWJpbGl0aWVzLlNtYXJ0U3VtbWFyaXplKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiU21hcnQgU3VtbWFyaXphdGlvbiB3YXMgbm90IHRyaWdnZXJlZCBiZWNhdXNlIFNtYXJ0U3VtbWFyaXplIGNhcGFiaWxpdHkgaXMgbm90IGF2YWlsYWJsZVwiKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBGaW5kIHRoZSBTdW1tYXJ5IGJ1dHRvblxuXHRcdFx0XHRjb25zdCBzdW1tYXJpemVCdXR0b24gPSB0aGlzLl9maW5kU3VtbWFyaXplQnV0dG9uKCk7XG5cblx0XHRcdFx0aWYgKHN1bW1hcml6ZUJ1dHRvbiAmJiBzdW1tYXJpemVCdXR0b24uZ2V0VmlzaWJsZSgpICYmIHN1bW1hcml6ZUJ1dHRvbi5nZXRFbmFibGVkKCkpIHtcblx0XHRcdFx0XHRzdW1tYXJpemVCdXR0b24uZmlyZVByZXNzKCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcblx0XHRcdFx0XHRcdFwiU21hcnQgU3VtbWFyaXphdGlvbiB3YXMgbm90IHRyaWdnZXJlZCBiZWNhdXNlIHRoZSBTdW1tYXJpemUgYnV0dG9uIGlzIGVpdGhlciBub3QgdmlzaWJsZSBvciBub3QgZW5hYmxlZCBvciBub3QgZm91bmQuXCJcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5jYXRjaCgoZXJyb3I6IHVua25vd24pID0+IHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmV0cmlldmluZyBzdGFydHVwIHBhcmFtZXRlcnMgb3IgdHJpZ2dlcmluZyBzbWFydCBzdW1tYXJ5OlwiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRoYW5kbGVycyA9IHtcblx0XHRvblByaW1hcnlBY3Rpb24oXG5cdFx0XHRvQ29udHJvbGxlcjogT2JqZWN0UGFnZUNvbnRyb2xsZXIsXG5cdFx0XHRvVmlldzogRkVWaWV3LFxuXHRcdFx0b0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0LFxuXHRcdFx0c0FjdGlvbk5hbWU6IHN0cmluZyxcblx0XHRcdG1QYXJhbWV0ZXJzOiB7XG5cdFx0XHRcdHBhcmFtZXRlclZhbHVlcz86IHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogdW5rbm93biB9W107XG5cdFx0XHRcdHNraXBQYXJhbWV0ZXJEaWFsb2c/OiBib29sZWFuO1xuXHRcdFx0XHRjb250ZXh0cz86IE9EYXRhVjRDb250ZXh0IHwgT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdFx0bW9kZWw/OiBPRGF0YU1vZGVsO1xuXHRcdFx0XHRyZXF1aXJlc05hdmlnYXRpb24/OiBib29sZWFuO1xuXHRcdFx0XHRsYWJlbD86IHN0cmluZztcblx0XHRcdFx0aXNOYXZpZ2FibGU/OiBib29sZWFuO1xuXHRcdFx0XHRlbnRpdHlTZXROYW1lPzogc3RyaW5nO1xuXHRcdFx0XHRpbnZvY2F0aW9uR3JvdXBpbmc/OiBzdHJpbmc7XG5cdFx0XHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcD86IHN0cmluZztcblx0XHRcdFx0Y29udHJvbElkPzogc3RyaW5nO1xuXHRcdFx0XHRiU3RhdGljQWN0aW9uPzogYm9vbGVhbjtcblx0XHRcdFx0YXBwbGljYWJsZUNvbnRleHRzPzogT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdFx0bm90QXBwbGljYWJsZUNvbnRleHRzPzogT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdFx0ZW5hYmxlQXV0b1Njcm9sbD86IGJvb2xlYW47XG5cdFx0XHRcdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbj86IHN0cmluZztcblx0XHRcdH0sXG5cdFx0XHRtQ29uZGl0aW9uczoge1xuXHRcdFx0XHRwb3NpdGl2ZUFjdGlvblZpc2libGU6IGJvb2xlYW47XG5cdFx0XHRcdHBvc2l0aXZlQWN0aW9uRW5hYmxlZDogYm9vbGVhbjtcblx0XHRcdFx0ZWRpdEFjdGlvblZpc2libGU6IGJvb2xlYW47XG5cdFx0XHRcdGVkaXRBY3Rpb25FbmFibGVkOiBib29sZWFuO1xuXHRcdFx0fVxuXHRcdCk6IHZvaWQge1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBJbnZva2VzIHRoZSBwYWdlIHByaW1hcnkgYWN0aW9uIG9uIHByZXNzIG9mIEN0cmwrRW50ZXIuXG5cdFx0XHQgKi9cblx0XHRcdGNvbnN0IGlWaWV3TGV2ZWwgPSBvQ29udHJvbGxlci5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS52aWV3TGV2ZWw7XG5cdFx0XHRpZiAobUNvbmRpdGlvbnMucG9zaXRpdmVBY3Rpb25WaXNpYmxlKSB7XG5cdFx0XHRcdGlmIChtQ29uZGl0aW9ucy5wb3NpdGl2ZUFjdGlvbkVuYWJsZWQpIHtcblx0XHRcdFx0XHRvQ29udHJvbGxlci5oYW5kbGVycy5vbkNhbGxBY3Rpb24ob1ZpZXcsIHNBY3Rpb25OYW1lLCBtUGFyYW1ldGVycyk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAobUNvbmRpdGlvbnMuZWRpdEFjdGlvblZpc2libGUpIHtcblx0XHRcdFx0aWYgKG1Db25kaXRpb25zLmVkaXRBY3Rpb25FbmFibGVkKSB7XG5cdFx0XHRcdFx0b0NvbnRyb2xsZXIuX2VkaXREb2N1bWVudCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGlWaWV3TGV2ZWwgPT09IDEgJiYgQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZShvVmlldykpIHtcblx0XHRcdFx0b0NvbnRyb2xsZXIuX3NhdmVEb2N1bWVudCgpO1xuXHRcdFx0fSBlbHNlIGlmIChDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKG9WaWV3KSkge1xuXHRcdFx0XHRvQ29udHJvbGxlci5fYXBwbHlEb2N1bWVudChvQ29udGV4dCk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIE1hbmFnZXMgdGhlIGNvbnRleHQgY2hhbmdlIGV2ZW50IG9uIHRoZSB0YWJsZXMuXG5cdFx0ICogVGhlIGZvY3VzIGlzIHNldCBpZiB0aGlzIGNoYW5nZSBpcyByZWxhdGVkIHRvIGFuIGVkaXRGbG93IGFjdGlvbiBhbmRcblx0XHQgKiBhbiBldmVudCBpcyBmaXJlZCBvbiB0aGUgb2JqZWN0UGFnZSBtZXNzYWdlQnV0dG9uLlxuXHRcdCAqIEBwYXJhbSB0aGlzIFRoZSBvYmplY3RQYWdlIGNvbnRyb2xsZXJcblx0XHQgKiBAcGFyYW0gZXZlbnQgVGhlIFVJNSBldmVudFxuXHRcdCAqL1xuXHRcdGFzeW5jIG9uVGFibGVDb250ZXh0Q2hhbmdlKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyLCBldmVudDogVUk1RXZlbnQ8e30sIFRhYmxlQVBJPik6IFByb21pc2U8dm9pZD4ge1xuXHRcdFx0Y29uc3QgdGFibGVBUEkgPSBldmVudC5nZXRTb3VyY2UoKTtcblx0XHRcdGNvbnN0IHRhYmxlID0gdGFibGVBUEkuY29udGVudDtcblx0XHRcdGNvbnN0IGN1cnJlbnRBY3Rpb25Qcm9taXNlID0gdGhpcy5lZGl0Rmxvdy5nZXRDdXJyZW50QWN0aW9uUHJvbWlzZSgpO1xuXHRcdFx0Y29uc3QgdGFibGVDb250ZXh0cyA9IHRoaXMuX2dldFRhYmxlQmluZGluZyh0YWJsZSk/LmdldEN1cnJlbnRDb250ZXh0cygpO1xuXG5cdFx0XHRpZiAoY3VycmVudEFjdGlvblByb21pc2UgJiYgdGFibGVDb250ZXh0cz8ubGVuZ3RoKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Y29uc3QgYWN0aW9uUmVzcG9uc2UgPSBhd2FpdCBjdXJyZW50QWN0aW9uUHJvbWlzZTtcblx0XHRcdFx0XHRpZiAoYWN0aW9uUmVzcG9uc2U/LmNvbnRyb2xJZCA9PT0gdGFibGUuZ2V0SWQoKSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgYWN0aW9uRGF0YSA9IGFjdGlvblJlc3BvbnNlLm9EYXRhO1xuXHRcdFx0XHRcdFx0Y29uc3Qga2V5cyA9IGFjdGlvblJlc3BvbnNlLmtleXM7XG5cdFx0XHRcdFx0XHRjb25zdCBuZXdJdGVtID0gdGFibGVDb250ZXh0cy5maW5kSW5kZXgoKHRhYmxlQ29udGV4dDogQ29udGV4dCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCB0YWJsZURhdGEgPSB0YWJsZUNvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBrZXlzLmV2ZXJ5KChrZXk6IHN0cmluZykgPT4gdGFibGVEYXRhW2tleV0gPT09IGFjdGlvbkRhdGFba2V5XSk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGlmIChuZXdJdGVtICE9PSAtMSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBkaWFsb2cgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0T3BlbkRpYWxvZ3MoKS5maW5kKChkaWFsb2cpID0+IGRpYWxvZy5kYXRhKFwiRnVsbFNjcmVlbkRpYWxvZ1wiKSAhPT0gdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdGlmIChkaWFsb2cpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBieSBkZXNpZ24sIGEgc2FwLm0uZGlhbG9nIHNldCB0aGUgZm9jdXMgdG8gdGhlIHByZXZpb3VzIGZvY3VzZWQgZWxlbWVudCB3aGVuIGNsb3NpbmcuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gd2Ugc2hvdWxkIHdhaXQgZm9yIHRoZSBkaWFsb2cgdG8gYmUgY2xvc2VkIGJlZm9yZSBzZXQgdGhlIGZvY3VzIHRvIGFub3RoZXIgZWxlbWVudFxuXHRcdFx0XHRcdFx0XHRcdGRpYWxvZy5hdHRhY2hFdmVudE9uY2UoXCJhZnRlckNsb3NlXCIsICgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdHRhYmxlLmZvY3VzUm93KG5ld0l0ZW0sIHRydWUpO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHRhYmxlLmZvY3VzUm93KG5ld0l0ZW0sIHRydWUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHRoaXMuZWRpdEZsb3cuZGVsZXRlQ3VycmVudEFjdGlvblByb21pc2UoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoYEFuIGVycm9yIG9jY3VycyB3aGlsZSBzY3JvbGxpbmcgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgSXRlbTogJHtlfWApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvLyBmaXJlIE1vZGVsQ29udGV4dENoYW5nZSBvbiB0aGUgbWVzc2FnZSBidXR0b24gd2hlbmV2ZXIgdGhlIHRhYmxlIGNvbnRleHQgY2hhbmdlc1xuXHRcdFx0dGhpcy5tZXNzYWdlQnV0dG9uLmZpcmVNb2RlbENvbnRleHRDaGFuZ2UoKTtcblx0XHR9LFxuXG5cdFx0YXN5bmMgb25DYWxsQWN0aW9uKFxuXHRcdFx0b1ZpZXc6IEZFVmlldyxcblx0XHRcdHNBY3Rpb25OYW1lOiBzdHJpbmcsXG5cdFx0XHRtUGFyYW1ldGVyczoge1xuXHRcdFx0XHRwYXJhbWV0ZXJWYWx1ZXM/OiB7IG5hbWU6IHN0cmluZzsgdmFsdWU6IHVua25vd24gfVtdO1xuXHRcdFx0XHRza2lwUGFyYW1ldGVyRGlhbG9nPzogYm9vbGVhbjtcblx0XHRcdFx0Y29udGV4dHM/OiBPRGF0YVY0Q29udGV4dCB8IE9EYXRhVjRDb250ZXh0W107XG5cdFx0XHRcdG1vZGVsPzogT0RhdGFNb2RlbDtcblx0XHRcdFx0cmVxdWlyZXNOYXZpZ2F0aW9uPzogYm9vbGVhbjtcblx0XHRcdFx0bGFiZWw/OiBzdHJpbmc7XG5cdFx0XHRcdGlzTmF2aWdhYmxlPzogYm9vbGVhbjtcblx0XHRcdFx0ZW50aXR5U2V0TmFtZT86IHN0cmluZztcblx0XHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nPzogc3RyaW5nO1xuXHRcdFx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA/OiBzdHJpbmc7XG5cdFx0XHRcdGNvbnRyb2xJZD86IHN0cmluZztcblx0XHRcdFx0YlN0YXRpY0FjdGlvbj86IGJvb2xlYW47XG5cdFx0XHRcdGFwcGxpY2FibGVDb250ZXh0cz86IE9EYXRhVjRDb250ZXh0W107XG5cdFx0XHRcdG5vdEFwcGxpY2FibGVDb250ZXh0cz86IE9EYXRhVjRDb250ZXh0W107XG5cdFx0XHRcdGVuYWJsZUF1dG9TY3JvbGw/OiBib29sZWFuO1xuXHRcdFx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24/OiBzdHJpbmc7XG5cdFx0XHRcdGRpc2FibGVTdHJpY3RIYW5kbGluZz86IGJvb2xlYW47XG5cdFx0XHR9XG5cdFx0KTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0XHRjb25zdCBvQ29udHJvbGxlciA9IG9WaWV3LmdldENvbnRyb2xsZXIoKSBhcyBPYmplY3RQYWdlQ29udHJvbGxlcjtcblxuXHRcdFx0Ly8gV2FpdCBmb3IgVkggdmFsdWVzIHRvIGJlIHJlc29sdmVkIGJlZm9yZSBjYWxsaW5nIHRoZSBhY3Rpb25cblx0XHRcdGF3YWl0IG9Db250cm9sbGVyLmVkaXRGbG93LnN5bmNUYXNrKCk7XG5cblx0XHRcdHJldHVybiBvQ29udHJvbGxlci5lZGl0Rmxvd1xuXHRcdFx0XHQuaW52b2tlQWN0aW9uKHNBY3Rpb25OYW1lLCBtUGFyYW1ldGVycylcblx0XHRcdFx0LnRoZW4ob0NvbnRyb2xsZXIuX3Nob3dNZXNzYWdlUG9wb3Zlci5iaW5kKG9Db250cm9sbGVyLCB1bmRlZmluZWQpKVxuXHRcdFx0XHQuY2F0Y2gob0NvbnRyb2xsZXIuX3Nob3dNZXNzYWdlUG9wb3Zlci5iaW5kKG9Db250cm9sbGVyKSk7XG5cdFx0fSxcblx0XHRvbkRhdGFQb2ludFRpdGxlUHJlc3NlZChcblx0XHRcdG9Db250cm9sbGVyOiBPYmplY3RQYWdlQ29udHJvbGxlcixcblx0XHRcdG9Tb3VyY2U6IENvbnRyb2wsXG5cdFx0XHRvTWFuaWZlc3RPdXRib3VuZDogUmVjb3JkPHN0cmluZywgTWFuaWZlc3RPdXRib3VuZEVudHJ5Pixcblx0XHRcdHNDb250cm9sQ29uZmlnOiBzdHJpbmcsXG5cdFx0XHRzQ29sbGVjdGlvblBhdGg6IHN0cmluZ1xuXHRcdCk6IHZvaWQge1xuXHRcdFx0b01hbmlmZXN0T3V0Ym91bmQgPSB0eXBlb2Ygb01hbmlmZXN0T3V0Ym91bmQgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKG9NYW5pZmVzdE91dGJvdW5kKSA6IG9NYW5pZmVzdE91dGJvdW5kO1xuXHRcdFx0Y29uc3Qgb1RhcmdldEluZm8gPSBvTWFuaWZlc3RPdXRib3VuZFtzQ29udHJvbENvbmZpZ10sXG5cdFx0XHRcdG9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHQgPSBvU291cmNlLmdldEJpbmRpbmdDb250ZXh0KCkhLFxuXHRcdFx0XHRzTWV0YVBhdGggPSBvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0XG5cdFx0XHRcdFx0LmdldE1vZGVsKClcblx0XHRcdFx0XHQuZ2V0TWV0YU1vZGVsKClcblx0XHRcdFx0XHQuZ2V0TWV0YVBhdGgob0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdFx0bGV0IGFTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBDb21tb25VdGlscy5nZXRTZW1hbnRpY09iamVjdE1hcHBpbmcob1RhcmdldEluZm8pLFxuXHRcdFx0XHRhTmF2aWdhdGlvbkRhdGEgPSBvQ29udHJvbGxlci5fZ2V0Q2hhcnRDb250ZXh0RGF0YShvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0LCBzQ29sbGVjdGlvblBhdGgpLFxuXHRcdFx0XHRhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnM7XG5cblx0XHRcdGFOYXZpZ2F0aW9uRGF0YSA9IGFOYXZpZ2F0aW9uRGF0YS5tYXAoZnVuY3Rpb24gKG9OYXZpZ2F0aW9uRGF0YTogdW5rbm93bikge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdGRhdGE6IG9OYXZpZ2F0aW9uRGF0YSxcblx0XHRcdFx0XHRtZXRhUGF0aDogc01ldGFQYXRoICsgKHNDb2xsZWN0aW9uUGF0aCA/IGAvJHtzQ29sbGVjdGlvblBhdGh9YCA6IFwiXCIpXG5cdFx0XHRcdH07XG5cdFx0XHR9KTtcblx0XHRcdGlmIChvVGFyZ2V0SW5mbyAmJiBvVGFyZ2V0SW5mby5wYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdGNvbnN0IG9QYXJhbXMgPSBvVGFyZ2V0SW5mby5wYXJhbWV0ZXJzICYmIG9Db250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24uZ2V0T3V0Ym91bmRQYXJhbXMob1RhcmdldEluZm8ucGFyYW1ldGVycyk7XG5cdFx0XHRcdGlmIChPYmplY3Qua2V5cyhvUGFyYW1zKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0YWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzID0gb1BhcmFtcztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly8gQ2hlY2sgaWYgaW1wbGljaXQgc2VtYW50aWMgb2JqZWN0IG1hcHBpbmcgaXMgbmVlZGVkXG5cdFx0XHRpZiAoYVNlbWFudGljT2JqZWN0TWFwcGluZy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0Y29uc3QgY3VzdG9tRGF0YSA9IG9Tb3VyY2UuZ2V0Q3VzdG9tRGF0YSgpLmZpbmQoKGRhdGEpID0+IGRhdGEuZ2V0S2V5KCkgPT09IFwiVmFsdWVQcm9wZXJ0eVBhdGhcIik7XG5cdFx0XHRcdGlmIChjdXN0b21EYXRhKSB7XG5cdFx0XHRcdFx0YVNlbWFudGljT2JqZWN0TWFwcGluZyA9IG9Db250cm9sbGVyLl9nZXRJbXBsaWNpdFNlbWFudGljT2JqZWN0TWFwcGluZ0ZvckRhdGFQb2ludHMoXG5cdFx0XHRcdFx0XHRjdXN0b21EYXRhLmdldFZhbHVlKCksXG5cdFx0XHRcdFx0XHRvVGFyZ2V0SW5mby5zZW1hbnRpY09iamVjdFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKG9UYXJnZXRJbmZvICYmIG9UYXJnZXRJbmZvLnNlbWFudGljT2JqZWN0ICYmIG9UYXJnZXRJbmZvLmFjdGlvbikge1xuXHRcdFx0XHRvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlKG9UYXJnZXRJbmZvLnNlbWFudGljT2JqZWN0LCBvVGFyZ2V0SW5mby5hY3Rpb24sIHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHM6IGFOYXZpZ2F0aW9uRGF0YSxcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdE1hcHBpbmc6IGFTZW1hbnRpY09iamVjdE1hcHBpbmcsXG5cdFx0XHRcdFx0YWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzOiBhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnNcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFRyaWdnZXJzIGFuIG91dGJvdW5kIG5hdmlnYXRpb24gd2hlbiBhIHVzZXIgY2hvb3NlcyB0aGUgY2hldnJvbi5cblx0XHQgKiBAcGFyYW0gb0NvbnRyb2xsZXJcblx0XHQgKiBAcGFyYW0gc091dGJvdW5kVGFyZ2V0IE5hbWUgb2YgdGhlIG91dGJvdW5kIHRhcmdldCAobmVlZHMgdG8gYmUgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QpXG5cdFx0ICogQHBhcmFtIG9Db250ZXh0IFRoZSBjb250ZXh0IHRoYXQgY29udGFpbnMgdGhlIGRhdGEgZm9yIHRoZSB0YXJnZXQgYXBwXG5cdFx0ICogQHBhcmFtIHNDcmVhdGVQYXRoIENyZWF0ZSBwYXRoIHdoZW4gdGhlIGNoZXZyb24gaXMgY3JlYXRlZC5cblx0XHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIGlzIHJlc29sdmVkIG9uY2UgdGhlIG5hdmlnYXRpb24gaXMgdHJpZ2dlcmVkICg/Pz8gbWF5YmUgb25seSBvbmNlIGZpbmlzaGVkPylcblx0XHQgKiBAZmluYWxcblx0XHQgKi9cblx0XHRhc3luYyBvbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQoXG5cdFx0XHRvQ29udHJvbGxlcjogT2JqZWN0UGFnZUNvbnRyb2xsZXIsXG5cdFx0XHRzT3V0Ym91bmRUYXJnZXQ6IHN0cmluZyxcblx0XHRcdG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCxcblx0XHRcdHNDcmVhdGVQYXRoOiBzdHJpbmdcblx0XHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRcdHJldHVybiBvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZChvQ29udHJvbGxlciwgc091dGJvdW5kVGFyZ2V0LCBvQ29udGV4dCwgc0NyZWF0ZVBhdGgpO1xuXHRcdH0sXG5cblx0XHRvbk5hdmlnYXRlQ2hhbmdlKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyLCBvRXZlbnQ6IFVJNUV2ZW50PHsgc3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24gfT4pOiB2b2lkIHtcblx0XHRcdC8vd2lsbCBiZSBjYWxsZWQgYWx3YXlzIHdoZW4gd2UgY2xpY2sgb24gYSBzZWN0aW9uIHRhYlxuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0dGhpcy5iU2VjdGlvbk5hdmlnYXRlZCA9IHRydWU7XG5cblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdENvbW1vblV0aWxzLmdldElzRWRpdGFibGUodGhpcy5nZXRWaWV3KCkpICYmXG5cdFx0XHRcdHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkuc2VjdGlvbkxheW91dCA9PT0gXCJUYWJzXCIgJiZcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiZXJyb3JOYXZpZ2F0aW9uU2VjdGlvbkZsYWdcIikgPT09IGZhbHNlXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29uc3Qgb1N1YlNlY3Rpb24gPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwic3ViU2VjdGlvblwiKTtcblx0XHRcdFx0dGhpcy5fdXBkYXRlRm9jdXNJbkVkaXRNb2RlKFtvU3ViU2VjdGlvbl0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0b25WYXJpYW50U2VsZWN0ZWQ6IGZ1bmN0aW9uICh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdH0sXG5cdFx0b25WYXJpYW50U2F2ZWQ6IGZ1bmN0aW9uICh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0Ly9UT0RPOiBTaG91bGQgcmVtb3ZlIHRoaXMgc2V0VGltZU91dCBvbmNlIFZhcmlhbnQgTWFuYWdlbWVudCBwcm92aWRlcyBhbiBhcGkgdG8gZmV0Y2ggdGhlIGN1cnJlbnQgdmFyaWFudCBrZXkgb24gc2F2ZVxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdH0sIDIwMDApO1xuXHRcdH0sXG5cdFx0bmF2aWdhdGVUb1N1YlNlY3Rpb246IGZ1bmN0aW9uIChvQ29udHJvbGxlcjogT2JqZWN0UGFnZUNvbnRyb2xsZXIsIHZEZXRhaWxDb25maWc6IHN0cmluZyB8IG9iamVjdCk6IHZvaWQge1xuXHRcdFx0Y29uc3Qgb0RldGFpbENvbmZpZyA9IHR5cGVvZiB2RGV0YWlsQ29uZmlnID09PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZSh2RGV0YWlsQ29uZmlnKSA6IHZEZXRhaWxDb25maWc7XG5cdFx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IG9Db250cm9sbGVyLmdldFZpZXcoKS5ieUlkKFwiZmU6Ok9iamVjdFBhZ2VcIikgYXMgT2JqZWN0UGFnZUxheW91dDtcblx0XHRcdGxldCBvU2VjdGlvbjtcblx0XHRcdGxldCBvU3ViU2VjdGlvbjtcblx0XHRcdGlmIChvRGV0YWlsQ29uZmlnLnNlY3Rpb25JZCkge1xuXHRcdFx0XHRvU2VjdGlvbiA9IG9Db250cm9sbGVyLmdldFZpZXcoKS5ieUlkKG9EZXRhaWxDb25maWcuc2VjdGlvbklkKSBhcyBPYmplY3RQYWdlU2VjdGlvbjtcblx0XHRcdFx0b1N1YlNlY3Rpb24gPSAoXG5cdFx0XHRcdFx0b0RldGFpbENvbmZpZy5zdWJTZWN0aW9uSWRcblx0XHRcdFx0XHRcdD8gb0NvbnRyb2xsZXIuZ2V0VmlldygpLmJ5SWQob0RldGFpbENvbmZpZy5zdWJTZWN0aW9uSWQpXG5cdFx0XHRcdFx0XHQ6IG9TZWN0aW9uICYmIG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkgJiYgb1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKVswXVxuXHRcdFx0XHQpIGFzIE9iamVjdFBhZ2VTdWJTZWN0aW9uO1xuXHRcdFx0fSBlbHNlIGlmIChvRGV0YWlsQ29uZmlnLnN1YlNlY3Rpb25JZCkge1xuXHRcdFx0XHRvU3ViU2VjdGlvbiA9IG9Db250cm9sbGVyLmdldFZpZXcoKS5ieUlkKG9EZXRhaWxDb25maWcuc3ViU2VjdGlvbklkKSBhcyBPYmplY3RQYWdlU3ViU2VjdGlvbjtcblx0XHRcdFx0b1NlY3Rpb24gPSBvU3ViU2VjdGlvbiAmJiAob1N1YlNlY3Rpb24uZ2V0UGFyZW50KCkgYXMgT2JqZWN0UGFnZVNlY3Rpb24pO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFvU2VjdGlvbiB8fCAhb1N1YlNlY3Rpb24gfHwgIW9TZWN0aW9uLmdldFZpc2libGUoKSB8fCAhb1N1YlNlY3Rpb24uZ2V0VmlzaWJsZSgpKSB7XG5cdFx0XHRcdGNvbnN0IHNUaXRsZSA9IGdldFJlc291cmNlTW9kZWwob0NvbnRyb2xsZXIpLmdldFRleHQoXG5cdFx0XHRcdFx0XCJDX1JPVVRJTkdfTkFWSUdBVElPTl9ESVNBQkxFRF9USVRMRVwiLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRvQ29udHJvbGxlci5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS5lbnRpdHlTZXRcblx0XHRcdFx0KTtcblx0XHRcdFx0TG9nLmVycm9yKHNUaXRsZSk7XG5cdFx0XHRcdE1lc3NhZ2VCb3guZXJyb3Ioc1RpdGxlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9PYmplY3RQYWdlLnNldFNlbGVjdGVkU2VjdGlvbihvU3ViU2VjdGlvbi5nZXRJZCgpKTtcblx0XHRcdFx0Ly8gdHJpZ2dlciBpYXBwIHN0YXRlIGNoYW5nZVxuXHRcdFx0XHRvT2JqZWN0UGFnZS5maXJlTmF2aWdhdGUoe1xuXHRcdFx0XHRcdHNlY3Rpb246IG9TZWN0aW9uLFxuXHRcdFx0XHRcdHN1YlNlY3Rpb246IG9TdWJTZWN0aW9uXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRjbG9zZUNvbGxhYm9yYXRpb25TdHJpcDogZnVuY3Rpb24gKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyKTogdm9pZCB7XG5cdFx0XHR0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpLnNldFByb3BlcnR5KFwiL3Nob3dDb2xsYWJvcmF0aW9uU3RyaXBcIiwgZmFsc2UpO1xuXHRcdH0sXG5cblx0XHRjbG9zZU9QTWVzc2FnZVN0cmlwOiBmdW5jdGlvbiAodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIpOiB2b2lkIHtcblx0XHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRcdGNvbnN0IGJJc0luRWRpdE1vZGUgPSBDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKHZpZXcpO1xuXHRcdFx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IHZpZXcuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKTtcblx0XHRcdGNvbnN0IG1lc3NhZ2VzdHJpcEludGVybmFsTW9kZWxDb250ZXh0ID0gaW50ZXJuYWxNb2RlbFxuXHRcdFx0XHQuYmluZENvbnRleHQodGhpcy5nZXRFeHRlbnNpb25BUEkoKS5fZ2V0TWVzc2FnZVN0cmlwQmluZGluZ0NvbnRleHRQYXRoKCkpXG5cdFx0XHRcdC5nZXRCb3VuZENvbnRleHQoKSE7XG5cdFx0XHQvLyBSZW1vdmUgY29udGV4dCBib3VuZCBtZXNzYWdlcyBhbmQgc2V0IHRoZSBwcm9wZXJ0eSB0byBmYWxzZSBmb3IgdGhlIGJhY2tlbmQgdHJhbnNpdGlvbiBtZXNzYWdlcyBpbiBlZGl0IG1vZGUuXG5cdFx0XHRpZiAoIWJJc0luRWRpdE1vZGUgJiYgbWVzc2FnZXN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJPUEJhY2tlbmRNZXNzYWdlVmlzaWJsZVwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRjb25zdCBjb250ZXh0Qm91bmRNZXNzYWdlcyA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKVxuXHRcdFx0XHRcdC5nZXREYXRhKClcblx0XHRcdFx0XHQuZmlsdGVyKFxuXHRcdFx0XHRcdFx0KG1lc3NhZ2U6IE1lc3NhZ2UpID0+XG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdID09PSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCkgJiYgbWVzc2FnZS5nZXRQZXJzaXN0ZW50KCkgPT09IHRydWVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoY29udGV4dEJvdW5kTWVzc2FnZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKGNvbnRleHRCb3VuZE1lc3NhZ2VzKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0bWVzc2FnZXN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJPUEJhY2tlbmRNZXNzYWdlVmlzaWJsZVwiLCBmYWxzZSk7XG5cdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLmhpZGVNZXNzYWdlKCk7XG5cdFx0fVxuXHR9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBPYmplY3RQYWdlQ29udHJvbGxlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUF5R0EsTUFBTUEsZ0JBQWdCLEdBQUdDLFNBQVMsQ0FBQ0QsZ0JBQWdCO0VBQ25ELE1BQU1FLHFCQUFxQixHQUFHRCxTQUFTLENBQUNFLHlCQUF5Qjs7RUFFakU7QUFDQTtBQUNBO0VBRkEsSUFJTUMsb0JBQW9CLElBQUFDLElBQUEsR0FEekJDLGNBQWMsQ0FBQyxrREFBa0QsQ0FBQyxFQUFBQyxLQUFBLEdBSWpFQyxjQUFjLENBQUNDLFdBQVcsQ0FBQyxFQUFBQyxLQUFBLEdBRzNCRixjQUFjLENBQUNHLEtBQUssQ0FBQ0MsUUFBUSxDQUFDQyxjQUFjLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBRzlDTixjQUFjLENBQUNPLGVBQWUsQ0FBQ0gsUUFBUSxDQUFDSSx1QkFBdUIsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHakVULGNBQWMsQ0FBQ1UsU0FBUyxDQUFDTixRQUFRLENBQUNPLGlCQUFpQixDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUdyRFosY0FBYyxDQUFDYSxjQUFjLENBQUNULFFBQVEsQ0FBQ1Usc0JBQXNCLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBRy9EZixjQUFjLENBQUNnQixxQkFBcUIsQ0FBQ1osUUFBUSxDQUFDYSw2QkFBNkIsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHN0VsQixjQUFjLENBQUNtQixvQkFBb0IsQ0FBQ2YsUUFBUSxDQUFDZ0IsNEJBQTRCLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBRzNFckIsY0FBYyxDQUNkc0IsNkJBQTZCLENBQUNsQixRQUFRLENBQUM7SUFDdENtQixpQkFBaUIsRUFBRSxTQUFBQSxDQUFBLEVBQStDO01BQ2pFLE1BQU1DLGlCQUFpQixHQUNyQixJQUFJLENBQUNDLE9BQU8sQ0FBQyxDQUFDLENBQUNDLGFBQWEsQ0FBQyxDQUFDLENBQTBCQyxpQkFBaUIsSUFDekUsSUFBSSxDQUFDRixPQUFPLENBQUMsQ0FBQyxDQUFDQyxhQUFhLENBQUMsQ0FBQyxDQUEwQkMsaUJBQWlCLENBQUMsQ0FBQztNQUM3RSxPQUFPSCxpQkFBaUIsR0FBRyxTQUFTLEdBQUdJLFNBQVM7SUFDakQ7RUFDRCxDQUFDLENBQ0YsQ0FBQyxFQUFBQyxNQUFBLEdBR0E3QixjQUFjLENBQUM4QixTQUFTLENBQUMxQixRQUFRLENBQUMyQixrQkFBa0IsQ0FBQyxDQUFDLEVBQUFDLE1BQUEsR0FHdERoQyxjQUFjLENBQ2RpQyxTQUFTLENBQUM3QixRQUFRLENBQUM7SUFDbEI4QixpQkFBaUIsRUFBRSxTQUFBQSxDQUFBLEVBQVk7TUFDOUIsT0FBTyxJQUFJO0lBQ1o7RUFDRCxDQUFDLENBQ0YsQ0FBQyxFQUFBQyxNQUFBLEdBMkJBQyxlQUFlLENBQUMsQ0FBQyxFQUFBQyxNQUFBLEdBQ2pCQyxjQUFjLENBQUMsQ0FBQyxFQUFBQyxNQUFBLEdBMnZCaEJILGVBQWUsQ0FBQyxDQUFDLEVBQUFJLE1BQUEsR0FDakJDLFVBQVUsQ0FBQ0MsaUJBQWlCLENBQUNDLEtBQUssQ0FBQyxFQUFBOUMsSUFBQSxDQUFBK0MsTUFBQSxJQUFBQyxPQUFBLDBCQUFBQyxlQUFBO0lBQUEsU0FBQWxELHFCQUFBO01BQUEsSUFBQW1ELEtBQUE7TUFBQSxTQUFBQyxJQUFBLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxFQUFBQyxJQUFBLE9BQUFDLEtBQUEsQ0FBQUosSUFBQSxHQUFBSyxJQUFBLE1BQUFBLElBQUEsR0FBQUwsSUFBQSxFQUFBSyxJQUFBO1FBQUFGLElBQUEsQ0FBQUUsSUFBQSxJQUFBSixTQUFBLENBQUFJLElBQUE7TUFBQTtNQUFBTixLQUFBLEdBQUFELGVBQUEsQ0FBQVEsSUFBQSxVQUFBSCxJQUFBO01BQUFJLDBCQUFBLENBQUFSLEtBQUEsaUJBQUFTLFdBQUEsRUFBQVQsS0FBQTtNQUFBUSwwQkFBQSxDQUFBUixLQUFBLFdBQUFVLFlBQUEsRUFBQVYsS0FBQTtNQUFBUSwwQkFBQSxDQUFBUixLQUFBLGNBQUFXLFlBQUEsRUFBQVgsS0FBQTtNQUFBUSwwQkFBQSxDQUFBUixLQUFBLGVBQUFZLFlBQUEsRUFBQVosS0FBQTtNQUFBUSwwQkFBQSxDQUFBUixLQUFBLG9CQUFBYSxZQUFBLEVBQUFiLEtBQUE7TUFBQVEsMEJBQUEsQ0FBQVIsS0FBQSwyQkFBQWMsWUFBQSxFQUFBZCxLQUFBO01BQUFRLDBCQUFBLENBQUFSLEtBQUEsMEJBQUFlLFlBQUEsRUFBQWYsS0FBQTtNQUFBUSwwQkFBQSxDQUFBUixLQUFBLDRCQUFBZ0IsWUFBQSxFQUFBaEIsS0FBQTtNQUFBUSwwQkFBQSxDQUFBUixLQUFBLGVBQUFpQixZQUFBLEVBQUFqQixLQUFBO01BQUFRLDBCQUFBLENBQUFSLEtBQUEsZUFBQWtCLGFBQUEsRUFBQWxCLEtBQUE7TUFBQUEsS0FBQSxDQS93QjVCbUIsa0NBQWtDLEdBQUcsS0FBSztNQUFBbkIsS0FBQSxDQVUxQ29CLGVBQWUsR0FBRyxLQUFLO01BQUFwQixLQUFBLENBTXZCcUIsY0FBYyxHQUFHLElBQUk7TUFBQXJCLEtBQUEsQ0F1bUQ3QnNCLFFBQVEsR0FBRztRQUNWQyxlQUFlQSxDQUNkQyxXQUFpQyxFQUNqQ0MsS0FBYSxFQUNiQyxRQUF3QixFQUN4QkMsV0FBbUIsRUFDbkJDLFdBaUJDLEVBQ0RDLFdBS0MsRUFDTTtVQUNQO0FBQ0g7QUFDQTtVQUNHLE1BQU1DLFVBQVUsR0FBR04sV0FBVyxDQUFDOUMsT0FBTyxDQUFDLENBQUMsQ0FBQ3FELFdBQVcsQ0FBQyxDQUFDLENBQUNDLFNBQVM7VUFDaEUsSUFBSUgsV0FBVyxDQUFDSSxxQkFBcUIsRUFBRTtZQUN0QyxJQUFJSixXQUFXLENBQUNLLHFCQUFxQixFQUFFO2NBQ3RDVixXQUFXLENBQUNGLFFBQVEsQ0FBQ2EsWUFBWSxDQUFDVixLQUFLLEVBQUVFLFdBQVcsRUFBRUMsV0FBVyxDQUFDO1lBQ25FO1VBQ0QsQ0FBQyxNQUFNLElBQUlDLFdBQVcsQ0FBQ08saUJBQWlCLEVBQUU7WUFDekMsSUFBSVAsV0FBVyxDQUFDUSxpQkFBaUIsRUFBRTtjQUNsQ2IsV0FBVyxDQUFDYyxhQUFhLENBQUMsQ0FBQztZQUM1QjtVQUNELENBQUMsTUFBTSxJQUFJUixVQUFVLEtBQUssQ0FBQyxJQUFJUyxXQUFXLENBQUNDLGFBQWEsQ0FBQ2YsS0FBSyxDQUFDLEVBQUU7WUFDaEVELFdBQVcsQ0FBQ2lCLGFBQWEsQ0FBQyxDQUFDO1VBQzVCLENBQUMsTUFBTSxJQUFJRixXQUFXLENBQUNDLGFBQWEsQ0FBQ2YsS0FBSyxDQUFDLEVBQUU7WUFDNUNELFdBQVcsQ0FBQ2tCLGNBQWMsQ0FBQ2hCLFFBQVEsQ0FBQztVQUNyQztRQUNELENBQUM7UUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtRQUNFLE1BQU1pQixvQkFBb0JBLENBQTZCQyxLQUE2QixFQUFpQjtVQUNwRyxNQUFNQyxRQUFRLEdBQUdELEtBQUssQ0FBQ0UsU0FBUyxDQUFDLENBQUM7VUFDbEMsTUFBTUMsS0FBSyxHQUFHRixRQUFRLENBQUNHLE9BQU87VUFDOUIsTUFBTUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDQyxRQUFRLENBQUNDLHVCQUF1QixDQUFDLENBQUM7VUFDcEUsTUFBTUMsYUFBYSxHQUFHLElBQUksQ0FBQ0MsZ0JBQWdCLENBQUNOLEtBQUssQ0FBQyxFQUFFTyxrQkFBa0IsQ0FBQyxDQUFDO1VBRXhFLElBQUlMLG9CQUFvQixJQUFJRyxhQUFhLEVBQUVqRCxNQUFNLEVBQUU7WUFDbEQsSUFBSTtjQUNILE1BQU1vRCxjQUFjLEdBQUcsTUFBTU4sb0JBQW9CO2NBQ2pELElBQUlNLGNBQWMsRUFBRUMsU0FBUyxLQUFLVCxLQUFLLENBQUNVLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQ2hELE1BQU1DLFVBQVUsR0FBR0gsY0FBYyxDQUFDSSxLQUFLO2dCQUN2QyxNQUFNQyxJQUFJLEdBQUdMLGNBQWMsQ0FBQ0ssSUFBSTtnQkFDaEMsTUFBTUMsT0FBTyxHQUFHVCxhQUFhLENBQUNVLFNBQVMsQ0FBRUMsWUFBcUIsSUFBSztrQkFDbEUsTUFBTUMsU0FBUyxHQUFHRCxZQUFZLENBQUNFLFNBQVMsQ0FBQyxDQUFDO2tCQUMxQyxPQUFPTCxJQUFJLENBQUNNLEtBQUssQ0FBRUMsR0FBVyxJQUFLSCxTQUFTLENBQUNHLEdBQUcsQ0FBQyxLQUFLVCxVQUFVLENBQUNTLEdBQUcsQ0FBQyxDQUFDO2dCQUN2RSxDQUFDLENBQUM7Z0JBQ0YsSUFBSU4sT0FBTyxLQUFLLENBQUMsQ0FBQyxFQUFFO2tCQUNuQixNQUFNTyxNQUFNLEdBQUdDLGVBQWUsQ0FBQ0MsY0FBYyxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxDQUFFSCxNQUFNLElBQUtBLE1BQU0sQ0FBQ0ksSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssSUFBSSxDQUFDO2tCQUMxRyxJQUFJSixNQUFNLEVBQUU7b0JBQ1g7b0JBQ0E7b0JBQ0FBLE1BQU0sQ0FBQ0ssZUFBZSxDQUFDLFlBQVksRUFBRSxNQUFNO3NCQUMxQzFCLEtBQUssQ0FBQzJCLFFBQVEsQ0FBQ2IsT0FBTyxFQUFFLElBQUksQ0FBQztvQkFDOUIsQ0FBQyxDQUFDO2tCQUNILENBQUMsTUFBTTtvQkFDTmQsS0FBSyxDQUFDMkIsUUFBUSxDQUFDYixPQUFPLEVBQUUsSUFBSSxDQUFDO2tCQUM5QjtrQkFDQSxJQUFJLENBQUNYLFFBQVEsQ0FBQ3lCLDBCQUEwQixDQUFDLENBQUM7Z0JBQzNDO2NBQ0Q7WUFDRCxDQUFDLENBQUMsT0FBT0MsQ0FBQyxFQUFFO2NBQ1hDLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDLDhEQUE4REYsQ0FBQyxFQUFFLENBQUM7WUFDN0U7VUFDRDtVQUNBO1VBQ0EsSUFBSSxDQUFDRyxhQUFhLENBQUNDLHNCQUFzQixDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUVELE1BQU03QyxZQUFZQSxDQUNqQlYsS0FBYSxFQUNiRSxXQUFtQixFQUNuQkMsV0FrQkMsRUFDa0I7VUFDbkIsTUFBTUosV0FBVyxHQUFHQyxLQUFLLENBQUM5QyxhQUFhLENBQUMsQ0FBeUI7O1VBRWpFO1VBQ0EsTUFBTTZDLFdBQVcsQ0FBQzBCLFFBQVEsQ0FBQytCLFFBQVEsQ0FBQyxDQUFDO1VBRXJDLE9BQU96RCxXQUFXLENBQUMwQixRQUFRLENBQ3pCZ0MsWUFBWSxDQUFDdkQsV0FBVyxFQUFFQyxXQUFXLENBQUMsQ0FDdEN1RCxJQUFJLENBQUMzRCxXQUFXLENBQUM0RCxtQkFBbUIsQ0FBQ0MsSUFBSSxDQUFDN0QsV0FBVyxFQUFFM0MsU0FBUyxDQUFDLENBQUMsQ0FDbEV5RyxLQUFLLENBQUM5RCxXQUFXLENBQUM0RCxtQkFBbUIsQ0FBQ0MsSUFBSSxDQUFDN0QsV0FBVyxDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUNEK0QsdUJBQXVCQSxDQUN0Qi9ELFdBQWlDLEVBQ2pDZ0UsT0FBZ0IsRUFDaEJDLGlCQUF3RCxFQUN4REMsY0FBc0IsRUFDdEJDLGVBQXVCLEVBQ2hCO1VBQ1BGLGlCQUFpQixHQUFHLE9BQU9BLGlCQUFpQixLQUFLLFFBQVEsR0FBR0csSUFBSSxDQUFDQyxLQUFLLENBQUNKLGlCQUFpQixDQUFDLEdBQUdBLGlCQUFpQjtVQUM3RyxNQUFNSyxXQUFXLEdBQUdMLGlCQUFpQixDQUFDQyxjQUFjLENBQUM7WUFDcERLLCtCQUErQixHQUFHUCxPQUFPLENBQUNRLGlCQUFpQixDQUFDLENBQUU7WUFDOURDLFNBQVMsR0FBR0YsK0JBQStCLENBQ3pDRyxRQUFRLENBQUMsQ0FBQyxDQUNWQyxZQUFZLENBQUMsQ0FBQyxDQUNkQyxXQUFXLENBQUNMLCtCQUErQixDQUFDTSxPQUFPLENBQUMsQ0FBQyxDQUFDO1VBQ3pELElBQUlDLHNCQUFzQixHQUFHL0QsV0FBVyxDQUFDZ0Usd0JBQXdCLENBQUNULFdBQVcsQ0FBQztZQUM3RVUsZUFBZSxHQUFHaEYsV0FBVyxDQUFDaUYsb0JBQW9CLENBQUNWLCtCQUErQixFQUFFSixlQUFlLENBQUM7WUFDcEdlLDhCQUE4QjtVQUUvQkYsZUFBZSxHQUFHQSxlQUFlLENBQUNHLEdBQUcsQ0FBQyxVQUFVQyxlQUF3QixFQUFFO1lBQ3pFLE9BQU87Y0FDTnBDLElBQUksRUFBRW9DLGVBQWU7Y0FDckJDLFFBQVEsRUFBRVosU0FBUyxJQUFJTixlQUFlLEdBQUcsSUFBSUEsZUFBZSxFQUFFLEdBQUcsRUFBRTtZQUNwRSxDQUFDO1VBQ0YsQ0FBQyxDQUFDO1VBQ0YsSUFBSUcsV0FBVyxJQUFJQSxXQUFXLENBQUNnQixVQUFVLEVBQUU7WUFDMUMsTUFBTUMsT0FBTyxHQUFHakIsV0FBVyxDQUFDZ0IsVUFBVSxJQUFJdEYsV0FBVyxDQUFDd0Ysc0JBQXNCLENBQUNDLGlCQUFpQixDQUFDbkIsV0FBVyxDQUFDZ0IsVUFBVSxDQUFDO1lBQ3RILElBQUlJLE1BQU0sQ0FBQ3RELElBQUksQ0FBQ21ELE9BQU8sQ0FBQyxDQUFDNUcsTUFBTSxHQUFHLENBQUMsRUFBRTtjQUNwQ3VHLDhCQUE4QixHQUFHSyxPQUFPO1lBQ3pDO1VBQ0Q7VUFDQTtVQUNBLElBQUlULHNCQUFzQixDQUFDbkcsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN4QyxNQUFNZ0gsVUFBVSxHQUFHM0IsT0FBTyxDQUFDNEIsYUFBYSxDQUFDLENBQUMsQ0FBQzdDLElBQUksQ0FBRUMsSUFBSSxJQUFLQSxJQUFJLENBQUM2QyxNQUFNLENBQUMsQ0FBQyxLQUFLLG1CQUFtQixDQUFDO1lBQ2hHLElBQUlGLFVBQVUsRUFBRTtjQUNmYixzQkFBc0IsR0FBRzlFLFdBQVcsQ0FBQzhGLDhDQUE4QyxDQUNsRkgsVUFBVSxDQUFDSSxRQUFRLENBQUMsQ0FBQyxFQUNyQnpCLFdBQVcsQ0FBQzBCLGNBQ2IsQ0FBQztZQUNGO1VBQ0Q7VUFFQSxJQUFJMUIsV0FBVyxJQUFJQSxXQUFXLENBQUMwQixjQUFjLElBQUkxQixXQUFXLENBQUMyQixNQUFNLEVBQUU7WUFDcEVqRyxXQUFXLENBQUN3RixzQkFBc0IsQ0FBQ1UsUUFBUSxDQUFDNUIsV0FBVyxDQUFDMEIsY0FBYyxFQUFFMUIsV0FBVyxDQUFDMkIsTUFBTSxFQUFFO2NBQzNGRSxrQkFBa0IsRUFBRW5CLGVBQWU7Y0FDbkNvQixxQkFBcUIsRUFBRXRCLHNCQUFzQjtjQUM3Q0ksOEJBQThCLEVBQUVBO1lBQ2pDLENBQUMsQ0FBQztVQUNIO1FBQ0QsQ0FBQztRQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtRQUNFLE1BQU1tQiw4QkFBOEJBLENBQ25DckcsV0FBaUMsRUFDakNzRyxlQUF1QixFQUN2QnBHLFFBQXdCLEVBQ3hCcUcsV0FBbUIsRUFDSDtVQUNoQixPQUFPdkcsV0FBVyxDQUFDd0Ysc0JBQXNCLENBQUNhLDhCQUE4QixDQUFDckcsV0FBVyxFQUFFc0csZUFBZSxFQUFFcEcsUUFBUSxFQUFFcUcsV0FBVyxDQUFDO1FBQzlILENBQUM7UUFFREMsZ0JBQWdCQSxDQUE2QkMsTUFBc0QsRUFBUTtVQUMxRztVQUNBLElBQUksQ0FBQ0MsZUFBZSxDQUFDLENBQUMsQ0FBQ0MsY0FBYyxDQUFDLENBQUM7VUFDdkMsSUFBSSxDQUFDQyxpQkFBaUIsR0FBRyxJQUFJO1VBRTdCLE1BQU1DLHFCQUFxQixHQUFHLElBQUksQ0FBQzNKLE9BQU8sQ0FBQyxDQUFDLENBQUNzSCxpQkFBaUIsQ0FBQyxVQUFVLENBQXlCO1VBQ2xHLElBQ0N6RCxXQUFXLENBQUNDLGFBQWEsQ0FBQyxJQUFJLENBQUM5RCxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQ3pDLElBQUksQ0FBQ0EsT0FBTyxDQUFDLENBQUMsQ0FBQ3FELFdBQVcsQ0FBQyxDQUFDLENBQUN1RyxhQUFhLEtBQUssTUFBTSxJQUNyREQscUJBQXFCLENBQUNFLFdBQVcsQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLEtBQUssRUFDeEU7WUFDRCxNQUFNQyxXQUFXLEdBQUdQLE1BQU0sQ0FBQ1EsWUFBWSxDQUFDLFlBQVksQ0FBQztZQUNyRCxJQUFJLENBQUNDLHNCQUFzQixDQUFDLENBQUNGLFdBQVcsQ0FBQyxDQUFDO1VBQzNDO1FBQ0QsQ0FBQztRQUNERyxpQkFBaUIsRUFBRSxTQUFBQSxDQUFBLEVBQTRDO1VBQzlELElBQUksQ0FBQ1QsZUFBZSxDQUFDLENBQUMsQ0FBQ0MsY0FBYyxDQUFDLENBQUM7UUFDeEMsQ0FBQztRQUNEUyxjQUFjLEVBQUUsU0FBQUEsQ0FBQSxFQUE0QztVQUMzRDtVQUNBQyxVQUFVLENBQUMsTUFBTTtZQUNoQixJQUFJLENBQUNYLGVBQWUsQ0FBQyxDQUFDLENBQUNDLGNBQWMsQ0FBQyxDQUFDO1VBQ3hDLENBQUMsRUFBRSxJQUFJLENBQUM7UUFDVCxDQUFDO1FBQ0RXLG9CQUFvQixFQUFFLFNBQUFBLENBQVV0SCxXQUFpQyxFQUFFdUgsYUFBOEIsRUFBUTtVQUN4RyxNQUFNQyxhQUFhLEdBQUcsT0FBT0QsYUFBYSxLQUFLLFFBQVEsR0FBR25ELElBQUksQ0FBQ0MsS0FBSyxDQUFDa0QsYUFBYSxDQUFDLEdBQUdBLGFBQWE7VUFDbkcsTUFBTUUsV0FBVyxHQUFHekgsV0FBVyxDQUFDOUMsT0FBTyxDQUFDLENBQUMsQ0FBQ3dLLElBQUksQ0FBQyxnQkFBZ0IsQ0FBcUI7VUFDcEYsSUFBSUMsUUFBUTtVQUNaLElBQUlYLFdBQVc7VUFDZixJQUFJUSxhQUFhLENBQUNJLFNBQVMsRUFBRTtZQUM1QkQsUUFBUSxHQUFHM0gsV0FBVyxDQUFDOUMsT0FBTyxDQUFDLENBQUMsQ0FBQ3dLLElBQUksQ0FBQ0YsYUFBYSxDQUFDSSxTQUFTLENBQXNCO1lBQ25GWixXQUFXLEdBQ1ZRLGFBQWEsQ0FBQ0ssWUFBWSxHQUN2QjdILFdBQVcsQ0FBQzlDLE9BQU8sQ0FBQyxDQUFDLENBQUN3SyxJQUFJLENBQUNGLGFBQWEsQ0FBQ0ssWUFBWSxDQUFDLEdBQ3RERixRQUFRLElBQUlBLFFBQVEsQ0FBQ0csY0FBYyxDQUFDLENBQUMsSUFBSUgsUUFBUSxDQUFDRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDL0M7VUFDMUIsQ0FBQyxNQUFNLElBQUlOLGFBQWEsQ0FBQ0ssWUFBWSxFQUFFO1lBQ3RDYixXQUFXLEdBQUdoSCxXQUFXLENBQUM5QyxPQUFPLENBQUMsQ0FBQyxDQUFDd0ssSUFBSSxDQUFDRixhQUFhLENBQUNLLFlBQVksQ0FBeUI7WUFDNUZGLFFBQVEsR0FBR1gsV0FBVyxJQUFLQSxXQUFXLENBQUNlLFNBQVMsQ0FBQyxDQUF1QjtVQUN6RTtVQUNBLElBQUksQ0FBQ0osUUFBUSxJQUFJLENBQUNYLFdBQVcsSUFBSSxDQUFDVyxRQUFRLENBQUNLLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQ2hCLFdBQVcsQ0FBQ2dCLFVBQVUsQ0FBQyxDQUFDLEVBQUU7WUFDckYsTUFBTUMsTUFBTSxHQUFHQyxnQkFBZ0IsQ0FBQ2xJLFdBQVcsQ0FBQyxDQUFDbUksT0FBTyxDQUNuRCxxQ0FBcUMsRUFDckM5SyxTQUFTLEVBQ1QyQyxXQUFXLENBQUM5QyxPQUFPLENBQUMsQ0FBQyxDQUFDcUQsV0FBVyxDQUFDLENBQUMsQ0FBQzZILFNBQ3JDLENBQUM7WUFDRC9FLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDMkUsTUFBTSxDQUFDO1lBQ2pCSSxVQUFVLENBQUMvRSxLQUFLLENBQUMyRSxNQUFNLENBQUM7VUFDekIsQ0FBQyxNQUFNO1lBQ05SLFdBQVcsQ0FBQ2Esa0JBQWtCLENBQUN0QixXQUFXLENBQUMvRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ25EO1lBQ0F3RixXQUFXLENBQUNjLFlBQVksQ0FBQztjQUN4QkMsT0FBTyxFQUFFYixRQUFRO2NBQ2pCYyxVQUFVLEVBQUV6QjtZQUNiLENBQUMsQ0FBQztVQUNIO1FBQ0QsQ0FBQztRQUVEMEIsdUJBQXVCLEVBQUUsU0FBQUEsQ0FBQSxFQUE0QztVQUNwRSxJQUFJLENBQUN4TCxPQUFPLENBQUMsQ0FBQyxDQUFDd0gsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDaUUsV0FBVyxDQUFDLHlCQUF5QixFQUFFLEtBQUssQ0FBQztRQUM1RSxDQUFDO1FBRURDLG1CQUFtQixFQUFFLFNBQUFBLENBQUEsRUFBNEM7VUFDaEUsTUFBTUMsSUFBSSxHQUFHLElBQUksQ0FBQzNMLE9BQU8sQ0FBQyxDQUFDO1VBQzNCLE1BQU00TCxhQUFhLEdBQUcvSCxXQUFXLENBQUNDLGFBQWEsQ0FBQzZILElBQUksQ0FBQztVQUNyRCxNQUFNRSxhQUFhLEdBQUdGLElBQUksQ0FBQ25FLFFBQVEsQ0FBQyxVQUFVLENBQUM7VUFDL0MsTUFBTXNFLGdDQUFnQyxHQUFHRCxhQUFhLENBQ3BERSxXQUFXLENBQUMsSUFBSSxDQUFDdkMsZUFBZSxDQUFDLENBQUMsQ0FBQ3dDLGtDQUFrQyxDQUFDLENBQUMsQ0FBQyxDQUN4RUMsZUFBZSxDQUFDLENBQUU7VUFDcEI7VUFDQSxJQUFJLENBQUNMLGFBQWEsSUFBSUUsZ0NBQWdDLENBQUNqQyxXQUFXLENBQUMseUJBQXlCLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDdkcsTUFBTXFDLG9CQUFvQixHQUFHQyxTQUFTLENBQUNDLGVBQWUsQ0FBQyxDQUFDLENBQ3REQyxPQUFPLENBQUMsQ0FBQyxDQUNUQyxNQUFNLENBQ0xDLE9BQWdCLElBQ2hCQSxPQUFPLENBQUNDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDeE0sT0FBTyxDQUFDLENBQUMsQ0FBQ3NILGlCQUFpQixDQUFDLENBQUMsRUFBRUssT0FBTyxDQUFDLENBQUMsSUFBSTRFLE9BQU8sQ0FBQ0UsYUFBYSxDQUFDLENBQUMsS0FBSyxJQUMzRyxDQUFDO1lBQ0YsSUFBSVAsb0JBQW9CLENBQUN6SyxNQUFNLEtBQUssQ0FBQyxFQUFFO2NBQ3RDMEssU0FBUyxDQUFDTyxjQUFjLENBQUNSLG9CQUFvQixDQUFDO1lBQy9DO1VBQ0Q7VUFDQUosZ0NBQWdDLENBQUNMLFdBQVcsQ0FBQyx5QkFBeUIsRUFBRSxLQUFLLENBQUM7VUFDOUUsSUFBSSxDQUFDakMsZUFBZSxDQUFDLENBQUMsQ0FBQ21ELFdBQVcsQ0FBQyxDQUFDO1FBQ3JDO01BQ0QsQ0FBQztNQUFBLE9BQUFyTCxLQUFBO0lBQUE7SUFBQXNMLGNBQUEsQ0FBQXpPLG9CQUFBLEVBQUFrRCxlQUFBO0lBQUEsSUFBQXdMLE1BQUEsR0FBQTFPLG9CQUFBLENBQUEyTyxTQUFBO0lBQUFELE1BQUEsQ0EzM0REckQsZUFBZSxHQUZmLFNBRUFBLGVBQWVBLENBQUN1RCxHQUFZLEVBQWdCO01BQzNDLElBQUlBLEdBQUcsRUFBRTtRQUNSO1FBQ0EsSUFBSSxDQUFDQywyQkFBMkIsR0FBRyxJQUFJLENBQUNBLDJCQUEyQixJQUFJLENBQUMsQ0FBQztRQUV6RSxJQUFJLENBQUMsSUFBSSxDQUFDQSwyQkFBMkIsQ0FBQ0QsR0FBRyxDQUFDLEVBQUU7VUFDM0MsSUFBSSxDQUFDQywyQkFBMkIsQ0FBQ0QsR0FBRyxDQUFDLEdBQUcsSUFBSUUsWUFBWSxDQUFDLElBQUksRUFBRUYsR0FBRyxDQUFDO1FBQ3BFO1FBQ0EsT0FBTyxJQUFJLENBQUNDLDJCQUEyQixDQUFDRCxHQUFHLENBQUM7TUFDN0MsQ0FBQyxNQUFNO1FBQ04sSUFBSSxDQUFDLElBQUksQ0FBQ0csWUFBWSxFQUFFO1VBQ3ZCLElBQUksQ0FBQ0EsWUFBWSxHQUFHLElBQUlELFlBQVksQ0FBQyxJQUFJLENBQUM7UUFDM0M7UUFDQSxPQUFPLElBQUksQ0FBQ0MsWUFBWTtNQUN6QjtJQUNELENBQUM7SUFBQUwsTUFBQSxDQUVETSxNQUFNLEdBQU4sU0FBQUEsTUFBTUEsQ0FBQSxFQUFTO01BQ2Q5TCxlQUFBLENBQUF5TCxTQUFBLENBQU1LLE1BQU0sQ0FBQXRMLElBQUE7TUFDWixNQUFNMEksV0FBVyxHQUFHLElBQUksQ0FBQzZDLDJCQUEyQixDQUFDLENBQUM7O01BRXREO01BQ0EsTUFBTXpELHFCQUFxQixHQUFHLElBQUksQ0FBQzBELGlCQUFpQixDQUFDLENBQUMsQ0FBQy9GLGlCQUFpQixDQUFDLFVBQVUsQ0FBeUI7TUFDNUdxQyxxQkFBcUIsRUFBRThCLFdBQVcsQ0FBQywyQkFBMkIsRUFBRTtRQUFFNkIsSUFBSSxFQUFFO01BQUssQ0FBQyxFQUFFbk4sU0FBUyxFQUFFLElBQUksQ0FBQztNQUNoR3dKLHFCQUFxQixFQUFFOEIsV0FBVyxDQUNqQyxhQUFhLEVBQ2I7UUFDQzhCLFVBQVUsRUFBRSxLQUFLO1FBQ2pCQyxLQUFLLEVBQUU7TUFDUixDQUFDLEVBQ0RyTixTQUFTLEVBQ1QsSUFDRCxDQUFDO01BQ0R3SixxQkFBcUIsRUFBRThCLFdBQVcsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDZ0Msc0JBQXNCLENBQUMsQ0FBQyxDQUFDO01BQ2hGOUQscUJBQXFCLEVBQUU4QixXQUFXLENBQUMsNEJBQTRCLEVBQUUsS0FBSyxDQUFDO01BQ3ZFLElBQUlsQixXQUFXLENBQUNtRCxvQkFBb0IsQ0FBQyxDQUFDLEVBQUU7UUFDdkM7UUFDQW5ELFdBQVcsQ0FBQ29ELFdBQVcsQ0FBQywyQkFBMkIsRUFBRSxJQUFJLENBQUNDLGdDQUFnQyxDQUFDakgsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ3ZHO01BQ0EsSUFBSSxDQUFDTixhQUFhLEdBQUcsSUFBSSxDQUFDckcsT0FBTyxDQUFDLENBQUMsQ0FBQ3dLLElBQUksQ0FBQyw4QkFBOEIsQ0FBa0I7TUFDekYsSUFBSSxDQUFDcUQsY0FBYyxHQUFHMUIsU0FBUyxDQUFDQyxlQUFlLENBQUMsQ0FBQyxDQUFDMEIsUUFBUSxDQUFDLEdBQUcsQ0FBQztNQUMvRCxJQUFJLENBQUNELGNBQWMsRUFBRUUsWUFBWSxDQUFDLElBQUksQ0FBQ0MsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDO01BQzlEckUscUJBQXFCLEVBQUU4QixXQUFXLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxFQUFFdEwsU0FBUyxFQUFFLElBQUksQ0FBQztNQUM1RXdKLHFCQUFxQixFQUFFOEIsV0FBVyxDQUFDLGlCQUFpQixFQUFFLElBQUksRUFBRXRMLFNBQVMsRUFBRSxJQUFJLENBQUM7TUFFNUUsSUFBSSxDQUFDOE4sZ0NBQWdDLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBQUFwQixNQUFBLENBRURxQixNQUFNLEdBQU4sU0FBQUEsTUFBTUEsQ0FBQSxFQUFTO01BQ2QsSUFBSSxJQUFJLENBQUNsQiwyQkFBMkIsRUFBRTtRQUNyQyxLQUFLLE1BQU1ELEdBQUcsSUFBSXZFLE1BQU0sQ0FBQ3RELElBQUksQ0FBQyxJQUFJLENBQUM4SCwyQkFBMkIsQ0FBQyxFQUFFO1VBQ2hFLElBQUksSUFBSSxDQUFDQSwyQkFBMkIsQ0FBQ0QsR0FBRyxDQUFDLEVBQUU7WUFDMUMsSUFBSSxDQUFDQywyQkFBMkIsQ0FBQ0QsR0FBRyxDQUFDLENBQUNvQixPQUFPLENBQUMsQ0FBQztVQUNoRDtRQUNEO1FBQ0EsT0FBTyxJQUFJLENBQUNuQiwyQkFBMkI7TUFDeEM7TUFDQSxJQUFJLElBQUksQ0FBQ0UsWUFBWSxFQUFFO1FBQ3RCLElBQUksQ0FBQ0EsWUFBWSxDQUFDaUIsT0FBTyxDQUFDLENBQUM7TUFDNUI7TUFDQSxPQUFPLElBQUksQ0FBQ2pCLFlBQVk7TUFFeEIsTUFBTWtCLGVBQWUsR0FBRyxJQUFJLENBQUMvSCxhQUFhLEdBQUcsSUFBSSxDQUFDQSxhQUFhLENBQUMrSCxlQUFlLEdBQUcsSUFBSTtNQUN0RixJQUFJQSxlQUFlLElBQUlBLGVBQWUsQ0FBQ0MsTUFBTSxDQUFDLENBQUMsRUFBRTtRQUNoREQsZUFBZSxDQUFDRSxLQUFLLENBQUMsQ0FBQztNQUN4QjtNQUNBO01BQ0EsTUFBTXRMLFFBQVEsR0FBRyxJQUFJLENBQUNoRCxPQUFPLENBQUMsQ0FBQyxDQUFDc0gsaUJBQWlCLENBQUMsQ0FBQztNQUNuRCxJQUFJdEUsUUFBUSxJQUFJQSxRQUFRLENBQUN1TCxXQUFXLENBQUMsQ0FBQyxFQUFFO1FBQ3ZDdkwsUUFBUSxDQUFDd0wsWUFBWSxDQUFDLEtBQUssQ0FBQztNQUM3QjtNQUVBLElBQUksQ0FBQ0Msa0JBQWtCLENBQUNDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7TUFFdEMsSUFBSSxDQUFDYixjQUFjLEVBQUVjLFlBQVksQ0FBQyxJQUFJLENBQUNYLGdCQUFnQixFQUFFLElBQUksQ0FBQztJQUMvRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUFuQixNQUFBLENBSUFtQixnQkFBZ0IsR0FBaEIsU0FBQUEsZ0JBQWdCQSxDQUFBLEVBQVM7TUFDeEIsSUFBSSxJQUFJLENBQUNZLGVBQWUsQ0FBQyxDQUFDLENBQUNDLFdBQVcsQ0FBQyxDQUFDLEVBQUU7UUFDekM7UUFDQTtNQUNEO01BRUEsTUFBTTNCLFlBQVksR0FBRyxJQUFJLENBQUMxRCxlQUFlLENBQUMsQ0FBQztNQUMzQyxNQUFNbUMsSUFBSSxHQUFHLElBQUksQ0FBQzNMLE9BQU8sQ0FBQyxDQUFDO01BQzNCLE1BQU04TyxRQUFRLEdBQUczQyxTQUFTLEVBQUVDLGVBQWUsQ0FBQyxDQUFDLENBQzNDQyxPQUFPLENBQUMsQ0FBQyxDQUNUQyxNQUFNLENBQUVDLE9BQWdCLElBQUs7UUFDN0IsT0FBT0EsT0FBTyxDQUFDQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLYixJQUFJLENBQUNyRSxpQkFBaUIsQ0FBQyxDQUFDLEVBQUVLLE9BQU8sQ0FBQyxDQUFDO01BQ3ZFLENBQUMsQ0FBQztNQUVILElBQUl1RixZQUFZLEVBQUU7UUFDakJBLFlBQVksQ0FBQzZCLGFBQWEsQ0FBQ0QsUUFBUSxFQUFFLFNBQVMsQ0FBQztNQUNoRDtJQUNELENBQUM7SUFBQWpDLE1BQUEsQ0FFRGxJLGdCQUFnQixHQUFoQixTQUFBQSxnQkFBZ0JBLENBQUNxSyxNQUFhLEVBQW9CO01BQ2pELE9BQU9BLE1BQU0sSUFBSUEsTUFBTSxDQUFDQyxhQUFhLENBQUMsQ0FBQztJQUN4Qzs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUFwQyxNQUFBLENBSVFxQyxrQ0FBa0MsR0FBMUMsU0FBUUEsa0NBQWtDQSxDQUFDQyxXQUFtQyxFQUFRO01BQ3JGLE1BQU1DLG9CQUFvQixHQUFHQSxDQUFDbEwsS0FBWSxFQUFFbUwscUJBQTJDLEtBQVc7UUFDakcsTUFBTUMsTUFBTSxHQUFHLENBQUMsR0FBR0QscUJBQXFCLENBQUNFLFNBQVMsQ0FBQyxDQUFDLEVBQUUsR0FBR0YscUJBQXFCLENBQUNHLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDL0YsSUFBSUYsTUFBTSxDQUFDN04sTUFBTSxLQUFLLENBQUMsRUFBRTtVQUN4QixNQUFNNEMsS0FBSyxHQUFHLElBQUksQ0FBQ29MLGtCQUFrQixDQUFDSCxNQUFNLENBQUMsQ0FBQyxDQUFvQixDQUFDO1VBQ25FLElBQUksQ0FBQ2pMLEtBQUssRUFBRTtZQUNYO1VBQ0Q7VUFDQSxNQUFNcUwsU0FBUyxHQUFHckwsS0FBSyxDQUFDc0wsR0FBRyxDQUFRLGtCQUFrQixDQUFDLElBQUt0TCxLQUFLLENBQUN1TCxPQUFPLENBQUMsQ0FBbUI7VUFDNUYsTUFBTXpMLFFBQVEsR0FBR0UsS0FBSyxDQUFDd0csU0FBUyxDQUFDLENBQUMsRUFBRThFLEdBQUcsQ0FBVyw4QkFBOEIsQ0FBQyxHQUM3RXRMLEtBQUssQ0FBQ3dHLFNBQVMsQ0FBQyxDQUFDLEdBQ2xCMUssU0FBUztVQUNaLElBQ0N1UCxTQUFTLEtBQ1JBLFNBQVMsRUFBRUMsR0FBRyxDQUFDLGdDQUFnQyxDQUFDLElBQUlELFNBQVMsRUFBRUMsR0FBRyxDQUFDLGdDQUFnQyxDQUFDLENBQUMsSUFDdEd4TCxRQUFRLEVBQUUwTCxrQkFBa0IsQ0FBQyxDQUFDLENBQUNDLE9BQU8sQ0FBQ0MsWUFBWSxLQUFLLE1BQU0sRUFDN0Q7WUFDRDtZQUNBVixxQkFBcUIsQ0FBQ1csYUFBYSxDQUFDLHlDQUF5QyxDQUFDO1lBQzlFWCxxQkFBcUIsQ0FBQ1ksV0FBVyxDQUFDLG9CQUFvQixFQUFFYixvQkFBb0IsRUFBRSxJQUFJLENBQUM7VUFDcEY7UUFDRDtNQUNELENBQUM7TUFDRCxLQUFLLElBQUljLGVBQWUsR0FBR2YsV0FBVyxDQUFDMU4sTUFBTSxHQUFHLENBQUMsRUFBRXlPLGVBQWUsSUFBSSxDQUFDLEVBQUVBLGVBQWUsRUFBRSxFQUFFO1FBQzNGLElBQUlmLFdBQVcsQ0FBQ2UsZUFBZSxDQUFDLENBQUNwRixVQUFVLENBQUMsQ0FBQyxFQUFFO1VBQzlDLE1BQU11RSxxQkFBcUIsR0FBR0YsV0FBVyxDQUFDZSxlQUFlLENBQUM7VUFDMUQ7VUFDQWIscUJBQXFCLENBQUMxQixXQUFXLENBQUMsb0JBQW9CLEVBQUUwQixxQkFBcUIsRUFBRUQsb0JBQW9CLEVBQUUsSUFBSSxDQUFDO1VBQzFHO1FBQ0Q7TUFDRDtJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBdkMsTUFBQSxDQUtRNEMsa0JBQWtCLEdBQTFCLFNBQVFBLGtCQUFrQkEsQ0FBQ1UsS0FBc0IsRUFBcUI7TUFDckUsSUFBSWhNLFFBQThCO01BQ2xDLE1BQU1pTSxXQUFXLEdBQUlOLE9BQWdCLElBQTJCO1FBQy9EO1FBQ0E7UUFDQSxJQUFJQSxPQUFPLENBQUNILEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSUcsT0FBTyxDQUFDaEssSUFBSSxDQUFDLDRCQUE0QixDQUFDLEVBQUU7VUFDN0UsT0FBT2dLLE9BQU8sQ0FBQ2hLLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztRQUN6QyxDQUFDLE1BQU0sSUFBSWdLLE9BQU8sQ0FBQ0gsR0FBRyxDQUFDLDhCQUE4QixDQUFDLEVBQUU7VUFDdkQsT0FBT0csT0FBTztRQUNmO01BQ0QsQ0FBQztNQUNELElBQUlLLEtBQUssQ0FBQ1IsR0FBRyxDQUFDLHNEQUFzRCxDQUFDLEVBQUU7UUFDdEUsTUFBTUcsT0FBTyxHQUFHSyxLQUFLLENBQUM3TCxPQUFPO1FBQzdCLElBQUl3TCxPQUFPLENBQUNILEdBQUcsQ0FBQyxrQ0FBa0MsQ0FBQyxFQUFFO1VBQ3BELE1BQU1VLFdBQVcsR0FBSVAsT0FBTyxDQUF3QlEsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFDdkUsTUFBTUMsbUJBQW1CLEdBQUdILFdBQVcsQ0FBQ0MsV0FBVyxDQUFDO1VBQ3BELElBQUlFLG1CQUFtQixFQUFFO1lBQ3hCcE0sUUFBUSxHQUFHb00sbUJBQW1CO1VBQy9CLENBQUMsTUFBTTtZQUNOLE1BQU1DLFdBQVcsR0FBSVYsT0FBTyxDQUF3QlcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkUsTUFBTUMsbUJBQW1CLEdBQUdOLFdBQVcsQ0FBQ0ksV0FBVyxDQUFDO1lBQ3BELElBQUlFLG1CQUFtQixFQUFFO2NBQ3hCdk0sUUFBUSxHQUFHdU0sbUJBQW1CO1lBQy9CO1VBQ0Q7UUFDRCxDQUFDLE1BQU07VUFDTnZNLFFBQVEsR0FBR2lNLFdBQVcsQ0FBQ04sT0FBTyxDQUFDO1FBQ2hDO1FBRUEsSUFBSTNMLFFBQVEsRUFBRTtVQUNiLE9BQU9BLFFBQVEsQ0FBQ0csT0FBTztRQUN4QjtNQUNEO01BQ0EsT0FBT25FLFNBQVM7SUFDakIsQ0FBQztJQUFBME0sTUFBQSxDQUVEOEQsaUJBQWlCLEdBQWpCLFNBQUFBLGlCQUFpQkEsQ0FBQSxFQUFTO01BQ3pCQyxjQUFjLENBQUM5RCxTQUFTLENBQUM2RCxpQkFBaUIsQ0FBQ0UsS0FBSyxDQUFDLElBQUksQ0FBQztNQUN0RDtNQUNBLElBQUksSUFBSSxDQUFDOU4sS0FBSyxDQUFDTSxXQUFXLENBQUMsQ0FBQyxFQUFFeU4seUJBQXlCLElBQUlDLFlBQVksQ0FBQ3RKLFlBQVksQ0FBQyxDQUFDLEtBQUt0SCxTQUFTLEVBQUU7UUFDckc0USxZQUFZLENBQUNDLFlBQVksQ0FBQyxJQUFJLENBQUNwQyxlQUFlLENBQUMsQ0FBQyxDQUFDbkgsWUFBWSxDQUFDLENBQUMsQ0FBQztNQUNqRTtJQUNELENBQUM7SUFBQW9GLE1BQUEsQ0FFRG9FLGdCQUFnQixHQUFoQixTQUFBQSxnQkFBZ0JBLENBQUEsRUFBUztNQUN4QixJQUFJOUIsV0FBbUM7TUFDdkMsSUFBSSxJQUFJLENBQUMvQiwyQkFBMkIsQ0FBQyxDQUFDLENBQUM4RCxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUU7UUFDMUQsTUFBTUMsUUFBUSxHQUFHLElBQUksQ0FBQy9ELDJCQUEyQixDQUFDLENBQUMsQ0FBQ2dFLFdBQVcsQ0FBQyxDQUFDO1FBQ2pFLEtBQUssTUFBTTlGLE9BQU8sSUFBSTZGLFFBQVEsRUFBRTtVQUMvQmhDLFdBQVcsR0FBRzdELE9BQU8sQ0FBQ1YsY0FBYyxDQUFDLENBQUM7VUFDdEMsSUFBSSxDQUFDc0Usa0NBQWtDLENBQUNDLFdBQVcsQ0FBQztRQUNyRDtNQUNELENBQUMsTUFBTTtRQUNOQSxXQUFXLEdBQUcsSUFBSSxDQUFDa0Msa0JBQWtCLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUNuQyxrQ0FBa0MsQ0FBQ0MsV0FBVyxDQUFDO01BQ3JEO0lBQ0QsQ0FBQztJQUFBdEMsTUFBQSxDQUVEeUUsZ0JBQWdCLEdBQWhCLFNBQUFBLGdCQUFnQkEsQ0FBQ3RPLFFBQXdCLEVBQXlDO01BQUEsSUFBdkNFLFdBQTBCLEdBQUExQixTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBckIsU0FBQSxHQUFBcUIsU0FBQSxNQUFHLENBQUMsQ0FBQztNQUN6RTtNQUNBLE1BQU0rUCxPQUFPLEdBQUcsSUFBSSxDQUFDQyxXQUFXLENBQUMsQ0FBQztRQUNqQ2pILFdBQVcsR0FBRyxJQUFJLENBQUM2QywyQkFBMkIsQ0FBQyxDQUFDO1FBQ2hEekQscUJBQXFCLEdBQUcsSUFBSSxDQUFDM0osT0FBTyxDQUFDLENBQUMsQ0FBQ3NILGlCQUFpQixDQUFDLFVBQVUsQ0FBeUI7UUFDNUZtSyxjQUFjLEdBQUcsSUFBSSxDQUFDelIsT0FBTyxDQUFDLENBQUMsQ0FBQ3dILFFBQVEsQ0FBQyxVQUFVLENBQUM7UUFDcERrSyxZQUFZLEdBQUcvSCxxQkFBcUIsQ0FBQ0UsV0FBVyxDQUFDLGFBQWEsQ0FBQztNQUNoRSxJQUFJOEgsZ0JBQWdCO01BQ3BCRCxZQUFZLENBQUNFLElBQUksQ0FBQyxPQUFPLENBQUM7TUFDMUIsSUFBSTFPLFdBQVcsQ0FBQzJPLE1BQU0sS0FBS0MsZ0JBQWdCLENBQUNDLGNBQWMsRUFBRTtRQUMzRCxJQUFJLENBQUNDLGlCQUFpQixDQUFDLENBQUM7TUFDekI7TUFDQSxNQUFNQyxTQUFTLEdBQUcxSCxXQUFXLENBQUNqRCxpQkFBaUIsQ0FBQyxDQUFtQjtNQUNuRSxJQUNDMkssU0FBUyxJQUNUQSxTQUFTLENBQUNDLGlCQUFpQixDQUFDLENBQUMsSUFDN0IsQ0FBQ1IsWUFBWSxDQUFDUyxJQUFJLENBQUNGLFNBQVMsQ0FBQ3pLLFFBQVEsQ0FBQyxDQUFDLENBQUMwSyxpQkFBaUIsQ0FBQ3ZMLElBQUksQ0FBQ3NMLFNBQVMsQ0FBQ3pLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNwRjtRQUNEO0FBQ0g7QUFDQTs7UUFFR3lLLFNBQVMsQ0FBQ0csVUFBVSxDQUFDLENBQUMsQ0FBQ0MsWUFBWSxDQUFDLENBQUM7TUFDdEM7O01BRUE7TUFDQTtNQUNBLEtBQUssTUFBTUMsSUFBSSxJQUFJZixPQUFPLEVBQUU7UUFDM0JJLGdCQUFnQixHQUFHVyxJQUFJLENBQUNDLGNBQWMsQ0FBQyxDQUFDO1FBQ3hDLElBQUlaLGdCQUFnQixFQUFFO1VBQ3JCQSxnQkFBZ0IsQ0FBQ2EsaUJBQWlCLENBQUMsSUFBSSxDQUFDO1FBQ3pDO01BQ0Q7O01BRUE7TUFDQSxNQUFNQyx3QkFBd0IsR0FBRyxTQUFBQSxDQUFBLEVBQWtCO1FBQ2xELElBQUksQ0FBRWxJLFdBQVcsQ0FBMENtSSxnQkFBZ0IsR0FBRyxDQUFDLElBQUksQ0FBQ3hQLFdBQVcsQ0FBQ3lQLGdCQUFnQixFQUFFO1VBQ2pIcEksV0FBVyxDQUFDYSxrQkFBa0IsQ0FBQyxJQUF5QixDQUFDO1FBQzFEO01BQ0QsQ0FBQztNQUNEYixXQUFXLENBQUN4RSxlQUFlLENBQUMsb0JBQW9CLEVBQUUwTSx3QkFBd0IsQ0FBQztNQUUzRSxNQUFNRyxtQkFBbUIsR0FBRztRQUMzQjNCLGdCQUFnQixFQUFFQSxDQUFBLEtBQVk7VUFDN0IsSUFBSSxJQUFJLENBQUNqUixPQUFPLENBQUMsQ0FBQyxDQUFDcUQsV0FBVyxDQUFDLENBQUMsRUFBRXdQLHFCQUFxQixFQUFFO1lBQ3hESix3QkFBd0IsQ0FBQyxDQUFDO1VBQzNCO1VBQ0FsSSxXQUFXLENBQUN1SSxtQkFBbUIsQ0FBQ0YsbUJBQW1CLENBQUM7UUFDckQ7TUFDRCxDQUFDO01BQ0RySSxXQUFXLENBQUN3SSxnQkFBZ0IsQ0FBQ0gsbUJBQW1CLENBQUM7O01BRWpEO01BQ0EsSUFBSSxDQUFDSSxxQkFBcUIsQ0FBQ2hRLFFBQVEsRUFBRXlPLGNBQWMsRUFBRXZPLFdBQVcsRUFBRStQLFdBQVcsQ0FBQztNQUU5RSxNQUFNQyxnQ0FBZ0MsR0FBRyxJQUFJLENBQUNDLG9DQUFvQyxDQUFDLENBQUM7TUFFcEYsSUFDQyxJQUFJLENBQUNDLDBCQUEwQixDQUFDLENBQUMsSUFDakM3SSxXQUFXLENBQUNtRCxvQkFBb0IsQ0FBQyxDQUFDLElBQ2xDd0YsZ0NBQWdDLElBQ2hDLElBQUksQ0FBQ3ZRLGNBQWMsRUFDbEI7UUFDRDtRQUNBNEgsV0FBVyxDQUFDOEksVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDL0JILGdDQUFnQyxDQUFDbk4sZUFBZSxDQUFDLFFBQVEsRUFBRSxZQUFZO1VBQ3RFLE1BQU11TixnQkFBZ0IsR0FBRyxJQUFJLENBQUNDLGFBQWEsQ0FBQyxDQUFDLENBQUN0TCxHQUFHLENBQUMsTUFBT2tJLEtBQUssSUFDN0RBLEtBQUssQ0FBQ3JGLFVBQVUsQ0FBQyxDQUFDLElBQUlxRixLQUFLLENBQUNxRCxVQUFVLEdBQUcsQ0FBQyxFQUFFN0QsR0FBRyxDQUFXLDhCQUE4QixDQUFDLEdBQ3JGUSxLQUFLLENBQUNxRCxVQUFVLENBQUMsQ0FBQyxDQUFjQSxVQUFVLENBQUMsQ0FBQyxDQUFDQyxXQUFXLENBQUMsQ0FBQyxHQUMzRCxJQUNKLENBQUM7VUFDRCxNQUFNQyxPQUFPLENBQUNDLEdBQUcsQ0FBQ0wsZ0JBQWdCLENBQUM7VUFDbkMvSSxXQUFXLENBQUM4SSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztVQUM5QixJQUFJLENBQUMxUSxjQUFjLEdBQUcsS0FBSztRQUM1QixDQUFDLENBQUM7TUFDSDtNQUVBLElBQUk0SCxXQUFXLENBQUNtRCxvQkFBb0IsQ0FBQyxDQUFDLEVBQUU7UUFDdkMsSUFBSSxDQUFDa0csc0JBQXNCLENBQUNySixXQUFXLENBQUM7TUFDekM7TUFFQSxJQUFJLElBQUksQ0FBQ3NKLFdBQVcsQ0FBQ0Msb0JBQW9CLENBQUMsQ0FBQyxJQUFJNVEsV0FBVyxDQUFDNlEsZUFBZSxFQUFFO1FBQzNFLE1BQU1oUixLQUFLLEdBQUcsSUFBSSxDQUFDL0MsT0FBTyxDQUFDLENBQUM7UUFDNUIsTUFBTWdVLGFBQWEsR0FBSWpSLEtBQUssQ0FBQzhILFNBQVMsQ0FBQyxDQUFDLENBQXdDb0osVUFBVSxDQUFDcEosU0FBUyxDQUFDLENBQUM7UUFDdEcsSUFBSW1KLGFBQWEsRUFBRTtVQUNsQixJQUFJLENBQUNILFdBQVcsQ0FBQ0ssZUFBZSxDQUFDLENBQUM7VUFDakNGLGFBQWEsQ0FBOENELGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRjtNQUNEO0lBQ0QsQ0FBQztJQUFBbEgsTUFBQSxDQUVPdUcsMEJBQTBCLEdBQWxDLFNBQVFBLDBCQUEwQkEsQ0FBQSxFQUFZO01BQzdDLElBQUksSUFBSWUsZUFBZSxDQUFDQyxNQUFNLENBQUNDLFFBQVEsQ0FBQ0MsTUFBTSxDQUFDLENBQUNDLEdBQUcsQ0FBQyxvQ0FBb0MsQ0FBQyxLQUFLLE1BQU0sRUFBRTtRQUNyRyxPQUFPLElBQUk7TUFDWjtNQUNBLE9BQU8sS0FBSztJQUNiLENBQUM7SUFBQTFILE1BQUEsQ0FFTzJILHFCQUFxQixHQUE3QixTQUFRQSxxQkFBcUJBLENBQUEsRUFBMkI7TUFDdkQsTUFBTUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDckgsMkJBQTJCLENBQUMsQ0FBQyxDQUFDc0gsc0JBQXNCLENBQUMsQ0FBQztNQUN0RixPQUFPRCxrQkFBa0IsR0FBR0UsVUFBVSxDQUFDQyxTQUFTLENBQUNILGtCQUFrQixDQUFDLEdBQUd0VSxTQUFTO0lBQ2pGOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUxDO0lBQUEwTSxNQUFBLENBTVFnSSx3QkFBd0IsR0FBaEMsU0FBUUEsd0JBQXdCQSxDQUFDQyxVQUE0QixFQUEwQjtNQUN0RixJQUFJQyxxQkFBcUI7TUFDekIsTUFBTUMsT0FBTyxHQUFHRixVQUFVLENBQUNHLGNBQWMsQ0FBQyxDQUFDLElBQUtILFVBQVUsQ0FBQ0csY0FBYyxDQUFDLENBQUMsQ0FBa0NDLFVBQVUsQ0FBQyxDQUFDO01BQ3pILElBQUlGLE9BQU8sRUFBRXZULE1BQU0sRUFBRTtRQUNwQnNULHFCQUFxQixHQUFHQyxPQUFPLENBQUNuUCxJQUFJLENBQUMsVUFBVWtELE1BQWUsRUFBRTtVQUMvRDtVQUNBO1VBQ0E7VUFDQSxJQUFJQSxNQUFNLENBQUM0RyxHQUFHLENBQXNCLHNDQUFzQyxDQUFDLEVBQUU7WUFDNUUsT0FBTzVHLE1BQU0sQ0FBQ3lLLFVBQVUsQ0FBQyxDQUFDLEVBQUUxSSxVQUFVLENBQUMsQ0FBQyxJQUFJLEtBQUs7VUFDbEQsQ0FBQyxNQUFNLElBQ04vQixNQUFNLENBQUM0RyxHQUFHLENBQVcscUJBQXFCLENBQUMsSUFDM0M1RyxNQUFNLENBQUM0RyxHQUFHLENBQWlCLGlDQUFpQyxDQUFDLElBQzdENUcsTUFBTSxDQUFDNEcsR0FBRyxDQUFxQiwyREFBMkQsQ0FBQyxFQUMxRjtZQUNEO1lBQ0E7WUFDQSxPQUFPNUcsTUFBTSxDQUFDK0IsVUFBVSxDQUFDLENBQUM7VUFDM0IsQ0FBQyxNQUFNLElBQUksQ0FBQy9CLE1BQU0sQ0FBQzRHLEdBQUcsQ0FBZ0IsMkJBQTJCLENBQUMsSUFBSSxDQUFDNUcsTUFBTSxDQUFDNEcsR0FBRyxDQUFnQixxQkFBcUIsQ0FBQyxFQUFFO1lBQ3hILE9BQU81RyxNQUFNLENBQUMrQixVQUFVLENBQUMsQ0FBQyxJQUFLL0IsTUFBTSxDQUFZb00sVUFBVSxDQUFDLENBQUM7VUFDOUQ7UUFDRCxDQUFDLENBQUM7TUFDSDtNQUNBLE9BQU9KLHFCQUFxQjtJQUM3Qjs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUFsSSxNQUFBLENBSUErRyxzQkFBc0IsR0FBdEIsU0FBQUEsc0JBQXNCQSxDQUE2QmtCLFVBQTRCLEVBQVE7TUFDdEYsTUFBTU0sU0FBUyxHQUFHTixVQUFVLENBQUMxRCxXQUFXLENBQUMsQ0FBQztNQUMxQyxNQUFNaUUsY0FBYyxHQUFHUCxVQUFVLENBQUM1RCxnQkFBZ0IsQ0FBQyxDQUFDO01BQ3BELElBQUlvRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7TUFDZixNQUFNMUosYUFBYSxHQUFHL0gsV0FBVyxDQUFDQyxhQUFhLENBQUMsSUFBSSxDQUFDOUQsT0FBTyxDQUFDLENBQUMsQ0FBQztNQUMvRCxNQUFNdVYsZUFBZSxHQUFHLElBQUksQ0FBQ3ZWLE9BQU8sQ0FBQyxDQUFDLENBQUNxRCxXQUFXLENBQUMsQ0FBQyxDQUFDd1AscUJBQXFCO01BQzFFLE1BQU0yQyxzQkFBc0IsR0FBRyxJQUFJLENBQUNyQyxvQ0FBb0MsQ0FBQyxDQUFDO01BQzFFLEtBQUssSUFBSXNDLFFBQVEsR0FBRyxDQUFDLEVBQUVBLFFBQVEsR0FBR0wsU0FBUyxDQUFDM1QsTUFBTSxFQUFFZ1UsUUFBUSxFQUFFLEVBQUU7UUFDL0QsTUFBTWhMLFFBQVEsR0FBRzJLLFNBQVMsQ0FBQ0ssUUFBUSxDQUFDO1FBQ3BDLE1BQU1DLFlBQVksR0FBR2pMLFFBQVEsQ0FBQ0csY0FBYyxDQUFDLENBQUM7UUFDOUMsS0FBSyxJQUFJK0ssV0FBVyxHQUFHLENBQUMsRUFBRUEsV0FBVyxHQUFHRCxZQUFZLENBQUNqVSxNQUFNLEVBQUVrVSxXQUFXLEVBQUUsRUFBRUwsS0FBSyxFQUFFLEVBQUU7VUFDcEY7O1VBRUEsTUFBTU0sOEJBQThCLEdBQ2xDLENBQUMsSUFBSSxDQUFDeEMsMEJBQTBCLENBQUMsQ0FBQyxLQUNqQ2tDLEtBQUssR0FBRyxDQUFDLElBQUtELGNBQWMsS0FBS0ksUUFBUSxHQUFHLENBQUMsSUFBS0EsUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDRixlQUFlLElBQUksQ0FBQzNKLGFBQWMsQ0FBRSxDQUFDLElBQzNHLElBQUksQ0FBQ3dILDBCQUEwQixDQUFDLENBQUMsS0FDL0IsQ0FBQ2lDLGNBQWMsSUFBSUcsc0JBQXNCO1VBQUs7VUFDOUMsQ0FBQ0gsY0FBYyxJQUFJLENBQUNHLHNCQUFzQixJQUFJRixLQUFLLEdBQUcsQ0FBRTtVQUFJO1VBQzVERCxjQUFjLEtBQUtJLFFBQVEsR0FBRyxDQUFDLElBQUtBLFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQ0YsZUFBZSxJQUFJLENBQUMzSixhQUFjLENBQUUsQ0FBRTtVQUNqRyxJQUFJZ0ssOEJBQThCLEVBQUU7WUFDbkMsTUFBTTlMLFdBQVcsR0FBRzRMLFlBQVksQ0FBQ0MsV0FBVyxDQUFDO1lBQzdDO1lBQ0E3TCxXQUFXLENBQUMwSSxpQkFBaUIsQ0FBQ3JTLFNBQVMsQ0FBQztZQUN4QyxNQUFNbVAsTUFBTSxHQUFHeEYsV0FBVyxDQUFDeUYsU0FBUyxDQUFDLENBQXNCO1lBQzNEO1lBQ0FELE1BQU0sQ0FBQ3VHLE9BQU8sQ0FBRTFGLEtBQUssSUFBS0EsS0FBSyxDQUFDcUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEQxSSxXQUFXLENBQUMwRixhQUFhLENBQUMsQ0FBQyxDQUFDcUcsT0FBTyxDQUFFQyxRQUFRLElBQUtBLFFBQVEsQ0FBQ3RELGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ25GMUksV0FBVyxDQUFDb0wsVUFBVSxDQUFDLENBQUMsQ0FBQ1csT0FBTyxDQUFFYixPQUFPLElBQUtBLE9BQU8sQ0FBQ3hDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1VBQy9FO1FBQ0Q7TUFDRDtJQUNELENBQUM7SUFBQTNGLE1BQUEsQ0FFRGtKLDBDQUEwQyxHQUExQyxTQUFBQSwwQ0FBMENBLENBQUNMLFlBQW9DLEVBQXlCO01BQ3ZHLElBQUlBLFlBQVksQ0FBQ2pVLE1BQU0sS0FBSyxDQUFDLEVBQUUsT0FBT3RCLFNBQVM7TUFDL0MsS0FBSyxNQUFNb0wsVUFBVSxJQUFJbUssWUFBWSxFQUFFO1FBQ3RDLE1BQU1NLE9BQU8sR0FBR3pLLFVBQVUsQ0FBQ2dFLFNBQVMsQ0FBQyxDQUF1QjtRQUU1RCxJQUFJeUcsT0FBTyxFQUFFO1VBQ1osS0FBSyxNQUFNQyxZQUFZLElBQUlELE9BQU8sRUFBRTtZQUNuQyxJQUFJQyxZQUFZLENBQUMzTyxpQkFBaUIsR0FBRyxDQUFDLEVBQUU7Y0FDdkMsSUFBSTRPLGVBQWU7Y0FFbkIsSUFBSUQsWUFBWSxDQUFDdEcsR0FBRyxDQUFPLHlCQUF5QixDQUFDLEVBQUU7Z0JBQ3REdUcsZUFBZSxHQUFHRCxZQUFZLENBQUNFLGlCQUFpQixDQUFDLENBQUM7Y0FDbkQsQ0FBQyxNQUFNLElBQUlGLFlBQVksQ0FBQ3pDLFVBQVUsSUFBSXlDLFlBQVksQ0FBQ3pDLFVBQVUsQ0FBQyxDQUFDLEVBQUU3RCxHQUFHLENBQU8seUJBQXlCLENBQUMsRUFBRTtnQkFDdEd1RyxlQUFlLEdBQUlELFlBQVksQ0FBQ3pDLFVBQVUsQ0FBQyxDQUFDLENBQVUyQyxpQkFBaUIsQ0FBQyxDQUFDO2NBQzFFLENBQUMsTUFBTSxJQUFJRixZQUFZLEVBQUV6QyxVQUFVLEdBQUcsQ0FBQyxFQUFFN0QsR0FBRyxDQUFVLDRCQUE0QixDQUFDLEVBQUU7Z0JBQ3BGdUcsZUFBZSxHQUFLRCxZQUFZLENBQUN6QyxVQUFVLENBQUMsQ0FBQyxDQUFhQSxVQUFVLENBQUMsQ0FBQyxDQUFVMkMsaUJBQWlCLENBQUMsQ0FBQztjQUNwRztjQUNBLElBQUlELGVBQWUsRUFBRTtnQkFDcEIsS0FBSyxNQUFNRSxhQUFhLElBQUlGLGVBQWUsRUFBRTtrQkFDNUMsTUFBTUcsYUFBYSxHQUFHRCxhQUFhLENBQUNFLGVBQWUsQ0FBQyxDQUFDO2tCQUNyRCxJQUFJRCxhQUFhLEVBQUU7b0JBQ2xCLEtBQUssTUFBTUUsV0FBVyxJQUFJRixhQUFhLEVBQUU7c0JBQ3hDLE1BQU1HLE9BQU8sR0FBR0QsV0FBVyxDQUFDRSxTQUFTLENBQUMsQ0FBZ0I7c0JBQ3RELE1BQU1DLFVBQVUsR0FBRyxJQUFJLENBQUNDLDBCQUEwQixDQUFDSCxPQUFPLENBQUM7c0JBQzNELElBQUlFLFVBQVUsRUFBRSxPQUFPQSxVQUFVO29CQUNsQztrQkFDRDtnQkFDRDtjQUNEO1lBQ0Q7VUFDRDtRQUNEO01BQ0Q7TUFFQSxPQUFPdlcsU0FBUztJQUNqQjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQTBNLE1BQUEsQ0FLQThKLDBCQUEwQixHQUExQixTQUFBQSwwQkFBMEJBLENBQUNDLE1BQW1CLEVBQXlCO01BQ3RFLElBQUksQ0FBQ0EsTUFBTSxJQUFJQSxNQUFNLENBQUNuVixNQUFNLEtBQUssQ0FBQyxFQUFFO01BRXBDLElBQUksQ0FBQ21WLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsV0FBVyxHQUFHLENBQUMsRUFBRTtNQUVoQyxJQUFJQyxPQUFPLEdBQUcsS0FBSztNQUVuQixJQUFJO1FBQ0gsSUFBSUYsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDakgsR0FBRyxDQUFDLCtCQUErQixDQUFDLEVBQUU7VUFDbkQsTUFBTW5DLEtBQUssR0FBSW9KLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBcUNHLGtCQUFrQixDQUFDLENBQUMsQ0FBQ0MsUUFBUSxDQUFDLENBQUM7VUFDNUZGLE9BQU8sR0FBR3RKLEtBQUssQ0FBQy9MLE1BQU0sS0FBSyxDQUFDO1FBQzdCLENBQUMsTUFBTTtVQUNOLE1BQU13VixLQUFLLEdBQUlMLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBZS9OLFFBQVEsQ0FBQyxDQUFDO1VBQ2pEaU8sT0FBTyxHQUFHLENBQUNHLEtBQUs7UUFDakI7TUFDRCxDQUFDLENBQUMsT0FBTzdRLEtBQUssRUFBRTtRQUNmRCxHQUFHLENBQUMrUSxLQUFLLENBQUMseUNBQXlDOVEsS0FBSyxFQUFFLENBQUM7TUFDNUQ7TUFFQSxPQUFPMFEsT0FBTyxHQUFHRixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUd6VyxTQUFTO0lBQ3ZDOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQTBNLE1BQUEsQ0FJQTdDLHNCQUFzQixHQUF0QixTQUFBQSxzQkFBc0JBLENBQUMwTCxZQUFvQyxFQUFRO01BQ2xFdkwsVUFBVSxDQUNULFlBQTRDO1FBQzNDO1FBQ0EsTUFBTUksV0FBVyxHQUFHLElBQUksQ0FBQzZDLDJCQUEyQixDQUFDLENBQUM7UUFDdEQsTUFBTStKLGVBQWUsR0FBRyxJQUFJLENBQUNwQiwwQ0FBMEMsQ0FBQ0wsWUFBWSxDQUFDO1FBQ3JGLElBQUkwQixhQUFhO1FBQ2pCLElBQUlELGVBQWUsRUFBRTtVQUNwQixJQUFJQSxlQUFlLENBQUN4SCxHQUFHLENBQUMsK0JBQStCLENBQUMsRUFBRTtZQUN6RHlILGFBQWEsR0FBSUQsZUFBZSxDQUFxQ0osa0JBQWtCLENBQUMsQ0FBQztVQUMxRixDQUFDLE1BQU07WUFDTkssYUFBYSxHQUNaRCxlQUFlLENBQ2Q3UyxPQUFPLENBQUMrUyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztVQUM5QjtRQUNELENBQUMsTUFBTTtVQUNORCxhQUFhLEdBQUcsSUFBSSxDQUFDNUMscUJBQXFCLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQ0ssd0JBQXdCLENBQUN0SyxXQUFXLENBQUM7UUFDM0Y7UUFDQSxJQUFJNk0sYUFBYSxFQUFFO1VBQ2xCLE1BQU1FLFNBQVMsR0FBR0YsYUFBYSxDQUFDRyxZQUFZLENBQUMsQ0FBMkI7VUFDeEVELFNBQVMsQ0FBQ0UsVUFBVSxHQUFHO1lBQUVDLE1BQU0sRUFBRTtVQUFLLENBQUM7VUFDdkMsSUFBSUwsYUFBYSxDQUFDekgsR0FBRyxDQUFDLDZCQUE2QixDQUFDLEVBQUU7WUFDckR5SCxhQUFhLEdBQUdBLGFBQWEsQ0FBQ3ZNLFNBQVMsQ0FBQyxDQUFDO1VBQzFDO1VBQ0F1TSxhQUFhLENBQUNNLEtBQUssQ0FBQ0osU0FBUyxDQUFDO1FBQy9CO01BQ0QsQ0FBQyxDQUFDM1EsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUNaLENBQUMsQ0FBQztNQUNILENBQUM7SUFDRjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQWtHLE1BQUEsQ0FLQXNHLG9DQUFvQyxHQUFwQyxTQUFBQSxvQ0FBb0NBLENBQUEsRUFBd0I7TUFDM0QsTUFBTXdFLGNBQWMsR0FBRyxJQUFJLENBQUN0RyxrQkFBa0IsQ0FBQyxDQUFDO01BQ2hELE1BQU11RyxZQUFZLEdBQUcsSUFBSSxDQUFDNVgsT0FBTyxDQUFDLENBQUMsQ0FBQ3dILFFBQVEsQ0FBQyxDQUFDO01BQzlDLE9BQU9tUSxjQUFjLENBQ25COVIsSUFBSSxDQUNIMEYsVUFBVSxJQUNUQSxVQUFVLENBQUM2RyxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQzlCeUYsV0FBVyxHQUFHLENBQUMsQ0FDaEIxRixJQUFJLENBQUUyRixPQUFPLElBQUtBLE9BQU8sQ0FBQ3RRLFFBQVEsQ0FBQyxDQUFDLEtBQUtvUSxZQUFZLENBQ3pELENBQUMsRUFDQ3hGLFVBQVUsQ0FBQyxTQUFTLENBQUM7SUFDekIsQ0FBQztJQUFBdkYsTUFBQSxDQUVEZSxnQ0FBZ0MsR0FBaEMsU0FBQUEsZ0NBQWdDQSxDQUFDckUsTUFBc0QsRUFBUTtNQUM5RixNQUFNTyxXQUFXLEdBQUdQLE1BQU0sQ0FBQ1EsWUFBWSxDQUFDLFlBQVksQ0FBQztNQUNyRCxNQUFNdUYsTUFBTSxHQUFHeEYsV0FBVyxDQUFDeUYsU0FBUyxDQUFDLENBQXNCO01BQzNERCxNQUFNLENBQUN1RyxPQUFPLENBQUUxRixLQUFLLElBQUtBLEtBQUssQ0FBQ3FDLGlCQUFpQixDQUFDclMsU0FBUyxDQUFDLENBQUM7TUFDN0QySixXQUFXLENBQUMwRixhQUFhLENBQUMsQ0FBQyxDQUFDcUcsT0FBTyxDQUFFQyxRQUFRLElBQUtBLFFBQVEsQ0FBQ3RELGlCQUFpQixDQUFDclMsU0FBUyxDQUFDLENBQUM7TUFDeEYySixXQUFXLENBQUNvTCxVQUFVLENBQUMsQ0FBQyxDQUFDVyxPQUFPLENBQUViLE9BQU8sSUFBS0EsT0FBTyxDQUFDeEMsaUJBQWlCLENBQUNyUyxTQUFTLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBQUEwTSxNQUFBLENBRURrTCx3QkFBd0IsR0FBeEIsU0FBQUEsd0JBQXdCQSxDQUFDL1UsUUFBd0IsRUFBUTtNQUN4RCxJQUFJLENBQUNnVixjQUFjLENBQUNDLHdCQUF3QixDQUFDLENBQUM7O01BRTlDO01BQ0EsTUFBTUMsT0FBTyxHQUFHQSxDQUFBLEtBQVk7UUFDM0IsTUFBTUMsVUFBVSxHQUFHQyxRQUFRLENBQUNDLEdBQUc7UUFDL0JDLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLENBQUM7UUFDZDtRQUNBO1FBQ0FwTyxVQUFVLENBQUMsTUFBTTtVQUNoQixJQUFJaU8sUUFBUSxDQUFDQyxHQUFHLEtBQUtGLFVBQVUsRUFBRTtZQUNoQyxJQUFJLENBQUNLLFFBQVEsQ0FBQ0MsdUJBQXVCLENBQUN6VixRQUFRLENBQUM7VUFDaEQ7UUFDRCxDQUFDLEVBQUUsR0FBRyxDQUFDO01BQ1IsQ0FBQztNQUVELElBQUksSUFBSSxDQUFDNEwsZUFBZSxDQUFDLENBQUMsQ0FBQzhKLGNBQWMsQ0FBQyxDQUFDLENBQUNDLHlCQUF5QixDQUFDLENBQUMsRUFBRTtRQUN4RTtRQUNBTCxPQUFPLENBQUNDLElBQUksQ0FBQyxDQUFDO01BQ2YsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUN2WSxPQUFPLENBQUMsQ0FBQyxDQUFDc0gsaUJBQWlCLENBQUMsQ0FBQyxFQUFFO1FBQy9DO1FBQ0EsSUFBSSxDQUFDc0gsZUFBZSxDQUFDLENBQUMsQ0FDcEJnSyxnQkFBZ0IsQ0FBQyxDQUFDLENBQ2xCQyxpQkFBaUIsQ0FBQzFZLFNBQVMsQ0FBQyxDQUM1QnNHLElBQUksQ0FBQ3lSLE9BQU8sQ0FBQyxDQUNidFIsS0FBSyxDQUFFVixDQUFDLElBQUs7VUFDYkMsR0FBRyxDQUFDMlMsT0FBTyxDQUFDLHFDQUFxQyxFQUFFNVMsQ0FBQyxDQUFDO1FBQ3RELENBQUMsQ0FBQztNQUNKLENBQUMsTUFBTTtRQUNOLE1BQU02UyxrQkFBa0IsR0FBSSxJQUFJLENBQUNuSyxlQUFlLENBQUMsQ0FBQyxFQUFFb0ssMEJBQTBCLENBQUMsQ0FBQyxFQUFFQyxlQUFlLENBQUMsQ0FBQyxFQUFFQyxXQUFXLEVBQzdHQyxPQUFPO1FBQ1ZDLEtBQUssQ0FBQ0MseUNBQXlDLENBQzlDbkIsT0FBTyxFQUNQb0IsUUFBUSxDQUFDeE0sU0FBUyxFQUNsQjlKLFFBQVEsRUFDUixJQUFJLEVBQ0osSUFBSSxFQUNKb1csS0FBSyxDQUFDRyxjQUFjLENBQUNDLGNBQWMsRUFDbkNyWixTQUFTLEVBQ1Q0WSxrQkFBa0IsR0FBRyxJQUFJLEdBQUc1WSxTQUM3QixDQUFDO01BQ0Y7SUFDRDs7SUFFQTtJQUFBO0lBQUEwTSxNQUFBLENBQ0E0TSxlQUFlLEdBQWYsU0FBQUEsZUFBZUEsQ0FBQ0MsbUJBQXdDLEVBQUV4VyxXQUFzQyxFQUFRO01BQ3ZHLE1BQU15SSxJQUFJLEdBQUcsSUFBSSxDQUFDM0wsT0FBTyxDQUFDLENBQUM7TUFDM0IsTUFBTXNELFNBQVMsR0FBR3FJLElBQUksRUFBRXRJLFdBQVcsQ0FBQyxDQUFDLEVBQUVDLFNBQVM7TUFDaEQsTUFBTWlILFdBQVcsR0FBRyxJQUFJLENBQUM2QywyQkFBMkIsQ0FBQyxDQUFDO01BQ3RELE1BQU1tRSxPQUFPLEdBQUcsSUFBSSxDQUFDQyxXQUFXLENBQUMsQ0FBQztNQUVsQyxJQUFJLENBQUNtSSxZQUFZLENBQUNDLHdCQUF3QixDQUFDLENBQUM7O01BRTVDO01BQ0E7TUFDQSxNQUFNQyxjQUFjLEdBQUd0UCxXQUFXLENBQUNqRCxpQkFBaUIsQ0FBQyxDQUFtQjtNQUV4RSxJQUFJd1MsV0FBeUIsR0FBRyxFQUFFO01BQ2xDdlAsV0FBVyxDQUFDNkcsV0FBVyxDQUFDLENBQUMsQ0FBQ3lFLE9BQU8sQ0FBQyxVQUFVcEwsUUFBMkIsRUFBRTtRQUN4RUEsUUFBUSxDQUFDRyxjQUFjLENBQUMsQ0FBQyxDQUFDaUwsT0FBTyxDQUFDLFVBQVUvTCxXQUFpQyxFQUFFO1VBQzlFZ1EsV0FBVyxHQUFHalcsV0FBVyxDQUFDa1csYUFBYSxDQUFDalEsV0FBVyxFQUFFZ1EsV0FBVyxDQUFDO1FBQ2xFLENBQUMsQ0FBQztNQUNILENBQUMsQ0FBQzs7TUFFRjtNQUNBO01BQ0E7TUFDQTtNQUNBOztNQUVBdkksT0FBTyxDQUFDc0UsT0FBTyxDQUFDLFVBQVU3RyxNQUFhLEVBQUU7UUFDeEMsTUFBTXJGLHFCQUFxQixHQUFHcUYsTUFBTSxDQUFDMUgsaUJBQWlCLENBQUMsVUFBVSxDQUFDO1FBQ2xFLElBQUlxQyxxQkFBcUIsRUFBRTtVQUMxQkEscUJBQXFCLENBQUM4QixXQUFXLENBQUMsMEJBQTBCLEVBQUUsQ0FBQyxDQUFDLENBQUM7VUFDakU5QixxQkFBcUIsQ0FBQzhCLFdBQVcsQ0FBQywyQkFBMkIsRUFBRSxDQUFDLENBQUMsQ0FBQztVQUVsRXFPLFdBQVcsR0FBR2pXLFdBQVcsQ0FBQ2tXLGFBQWEsQ0FBQy9LLE1BQU0sRUFBRThLLFdBQVcsQ0FBQzs7VUFFNUQ7VUFDQTtVQUNBO1VBQ0E7VUFDQSxNQUFNRSxnQkFBZ0IsR0FBR2hMLE1BQU0sQ0FBQ0MsYUFBYSxDQUFDLENBQUM7VUFDL0MsSUFBSStLLGdCQUFnQixFQUFFO1lBQ3JCLElBQUlDLFdBQVcsQ0FBQ0Msd0JBQXdCLENBQUNGLGdCQUFnQixDQUFDeFMsUUFBUSxDQUFDLENBQUMsQ0FBQ0MsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFO2NBQ3JGO2NBQ0N1UyxnQkFBZ0IsQ0FBc0RHLHVCQUF1QixDQUFDLEVBQUUsQ0FBQztZQUNuRztVQUNEO1VBQ0E7O1VBRUE7VUFDQTtVQUNBLE1BQU1oVyxRQUFRLEdBQUc2SyxNQUFNLENBQUNuRSxTQUFTLENBQUMsQ0FBYTtVQUMvQyxNQUFNdVAsNEJBQTRCLEdBQUdqVyxRQUFRLEdBQUcrQyxJQUFJLENBQUNDLEtBQUssQ0FBQ2hELFFBQVEsQ0FBQ2tXLGVBQWUsQ0FBQ0MscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUM7VUFFL0dDLGFBQWEsQ0FBQ0MsbUJBQW1CLENBQUM3USxxQkFBcUIsRUFBRXlRLDRCQUE0QixFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUM7VUFFbkdwTCxNQUFNLENBQUN5TCxjQUFjLENBQUMsQ0FBQztRQUN4QjtNQUNELENBQUMsQ0FBQztNQUNGO01BQ0EsTUFBTUMsZ0JBQWdCLEdBQUduUSxXQUFXLENBQUMwSyxjQUFjLENBQUMsQ0FBaUM7TUFDckYsSUFBSTBGLGlCQUErQixHQUFHLEVBQUU7TUFDeENBLGlCQUFpQixHQUFHOVcsV0FBVyxDQUFDa1csYUFBYSxDQUFDVyxnQkFBZ0IsRUFBRUMsaUJBQWlCLENBQUM7TUFDbEZiLFdBQVcsR0FBR0EsV0FBVyxDQUFDYyxNQUFNLENBQUNELGlCQUFpQixDQUFDO01BQ25EOVcsV0FBVyxDQUFDZ1gsc0NBQXNDLENBQUNmLFdBQVcsRUFBRSxJQUFJLENBQUM5WixPQUFPLENBQUMsQ0FBQyxDQUFDO01BRS9FLElBQUk4YSxNQUFrQjtRQUNyQkMsYUFBK0IsR0FBR3JILE9BQU8sQ0FBQ3NILE9BQU8sQ0FBQyxDQUFDOztNQUVwRDtNQUNBO0FBQ0Y7QUFDQTtNQUNFLE1BQU1DLHdCQUF3QixHQUFJak0sTUFBYSxJQUFXO1FBQ3pELE1BQU1rTSxRQUFRLEdBQUcsSUFBSSxDQUFDdlcsZ0JBQWdCLENBQUNxSyxNQUFNLENBQUM7VUFDN0NtTSx3QkFBd0IsR0FBRyxTQUFBQSxDQUFBLEVBQWtCO1lBQzVDQyxXQUFXLENBQUNDLHFCQUFxQixDQUNoQ3JNLE1BQU0sQ0FBQ3VELGNBQWMsQ0FBQyxDQUFDLEVBQ3ZCMkksUUFBUSxDQUFDdlQsT0FBTyxDQUFDLENBQUMsRUFDbEJ1VCxRQUFRLENBQUNJLFVBQVUsQ0FBQyxDQUFDLEVBQ3JCUixNQUFNLEVBQ05DLGFBQ0QsQ0FBQztVQUNGLENBQUM7UUFFRixJQUFJLENBQUNHLFFBQVEsRUFBRTtVQUNkL1UsR0FBRyxDQUFDQyxLQUFLLENBQUMsdUNBQXVDNEksTUFBTSxDQUFDakssS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1VBQ2xFO1FBQ0Q7UUFFQSxJQUFJbVcsUUFBUSxDQUFDSSxVQUFVLENBQUMsQ0FBQyxFQUFFO1VBQzFCSCx3QkFBd0IsQ0FBQyxDQUFDO1FBQzNCLENBQUMsTUFBTTtVQUNOLE1BQU1JLGNBQWMsR0FBRyxTQUFBQSxDQUFBLEVBQWtCO1lBQ3hDLElBQUlMLFFBQVEsQ0FBQ0ksVUFBVSxDQUFDLENBQUMsRUFBRTtjQUMxQkgsd0JBQXdCLENBQUMsQ0FBQztjQUMxQkQsUUFBUSxDQUFDdk0sWUFBWSxDQUFDNE0sY0FBYyxDQUFDO1lBQ3RDO1VBQ0QsQ0FBQztVQUNETCxRQUFRLENBQUNuTixZQUFZLENBQUN3TixjQUFjLENBQUM7UUFDdEM7TUFDRCxDQUFDO01BRUQsSUFBSTFCLGNBQWMsRUFBRTtRQUNuQmlCLE1BQU0sR0FBR2pCLGNBQWMsQ0FBQ3JTLFFBQVEsQ0FBQyxDQUFDOztRQUVsQztRQUNBdVQsYUFBYSxHQUFHLElBQUksQ0FBQ3ZXLFFBQVEsQ0FBQ2dYLHdCQUF3QixDQUFDM0IsY0FBYyxDQUFDOztRQUV0RTtRQUNBLElBQUksQ0FBQzRCLGtCQUFrQixDQUFDLENBQUM7O1FBRXpCO1FBQ0EsTUFBTVAsUUFBUSxHQUFJckIsY0FBYyxDQUFDekgsVUFBVSxJQUFJeUgsY0FBYyxDQUFDekgsVUFBVSxDQUFDLENBQUMsSUFBS3lILGNBQWM7O1FBRTdGO1FBQ0EsSUFBSSxJQUFJLENBQUM2QixjQUFjLEtBQUtSLFFBQVEsRUFBRTtVQUNyQ0EsUUFBUSxDQUFDdk4sV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUNuSixRQUFRLENBQUNtWCxlQUFlLEVBQUUsSUFBSSxDQUFDO1VBQzFFLElBQUksQ0FBQ0QsY0FBYyxHQUFHUixRQUFRO1FBQy9CO1FBRUEzSixPQUFPLENBQUNzRSxPQUFPLENBQUMsVUFBVTdHLE1BQWEsRUFBUTtVQUM5QztVQUNBNE0sVUFBVSxDQUFDQyxTQUFTLENBQUM3TSxNQUFNLENBQUMsQ0FDMUJ2SSxJQUFJLENBQUN3VSx3QkFBd0IsQ0FBQyxDQUM5QnJVLEtBQUssQ0FBQyxVQUFVa1YsTUFBZSxFQUFFO1lBQ2pDM1YsR0FBRyxDQUFDQyxLQUFLLENBQUMsK0NBQStDLEVBQUUwVixNQUFnQixDQUFDO1VBQzdFLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQzs7UUFFRjtRQUNDdlIsV0FBVyxDQUErRHdSLGdDQUFnQyxDQUFDLENBQUM7O1FBRTdHO1FBQ0F4QixhQUFhLENBQUN5Qix1Q0FBdUMsQ0FBQyxJQUFJLENBQUNoYyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBRXJFLElBQUksQ0FBQ2ljLHFCQUFxQixDQUFDLEVBQUUsQ0FBQztNQUMvQjtNQUNBO01BQ0E7TUFDQSxJQUFJM1ksU0FBUyxJQUFJQSxTQUFTLEtBQUssQ0FBQyxFQUFFO1FBQ2pDeVgsYUFBYSxFQUFFdFUsSUFBSSxDQUFDLE1BQU07VUFDekIsSUFBSSxDQUFDeVYsZUFBZSxDQUFDQyxvQkFBb0IsQ0FBQyxDQUFDO1VBRTNDO1FBQ0QsQ0FBQyxDQUFDO01BQ0g7TUFDQSxJQUFJLENBQUNDLDJCQUEyQixDQUFDbFosV0FBVyxFQUFFbVosb0JBQW9CLENBQUM7TUFDbkUsSUFBSSxDQUFDQyxpQ0FBaUMsQ0FBQyxDQUFDO01BRXhDLE1BQU1DLGFBQWEsR0FBRyxJQUFJLENBQUMzTixlQUFlLENBQUMsQ0FBQyxDQUFDNE4sa0JBQWtCLENBQUMsQ0FBQyxDQUFDRCxhQUFhLENBQUM1USxJQUFJLENBQUM7TUFDckYsSUFBSSxDQUFDOFEsU0FBUyxDQUFDQyxPQUFPLENBQUNILGFBQWEsQ0FBQztJQUN0Qzs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUExUCxNQUFBLENBSU1vUCxxQkFBcUIsR0FBM0IsZUFBTUEscUJBQXFCQSxDQUFDVSxLQUFvQixFQUFpQjtNQUNoRSxNQUFNLElBQUksQ0FBQ0Msb0JBQW9CLENBQUNDLHFCQUFxQixDQUFDRixLQUFLLENBQUM7TUFDNUQsSUFBSUEsS0FBSyxDQUFDbGIsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNyQixNQUFNcWIsVUFBVSxHQUFHLElBQUksQ0FBQ0Ysb0JBQW9CLENBQUNHLFdBQVcsQ0FBQ0osS0FBSyxDQUFDO1FBQy9ELE1BQU1LLFdBQVcsR0FBRyxJQUFJLENBQUNwTyxlQUFlLENBQUMsQ0FBQyxDQUFDN0osS0FBSyxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDNkosZUFBZSxDQUFDLENBQUMsQ0FDcEJxTyw4QkFBOEIsQ0FBQyxDQUFDLENBQ2hDQyw4QkFBOEIsQ0FBQ0osVUFBVSxFQUFFRSxXQUFXLEVBQUUsSUFBSSxDQUFDaGQsT0FBTyxDQUFDLENBQUMsQ0FBQytFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDakYsSUFBSSxDQUFDNkosZUFBZSxDQUFDLENBQUMsQ0FBQ3FPLDhCQUE4QixDQUFDLENBQUMsQ0FBQ0UsbUJBQW1CLENBQUMsQ0FBQztNQUM5RTtJQUNEOztJQUVBO0FBQ0Q7QUFDQSxPQUZDO0lBQUF0USxNQUFBLENBR0F5UCxpQ0FBaUMsR0FBakMsU0FBQUEsaUNBQWlDQSxDQUFBLEVBQVM7TUFDekMsTUFBTTNRLElBQUksR0FBRyxJQUFJLENBQUMzTCxPQUFPLENBQUMsQ0FBQztNQUMzQixNQUFNdUssV0FBVyxHQUFHLElBQUksQ0FBQzZDLDJCQUEyQixDQUFDLENBQUM7TUFDdEQsTUFBTWdRLG9CQUFvQixHQUFHelIsSUFBSSxDQUFDckUsaUJBQWlCLENBQUMsVUFBVSxDQUFDO01BQy9EOFYsb0JBQW9CLEVBQUUzUixXQUFXLENBQUMsY0FBYyxFQUFFO1FBQUUsR0FBRzJSLG9CQUFvQixFQUFFdlQsV0FBVyxDQUFDLGNBQWM7TUFBRSxDQUFDLENBQUM7TUFDM0csSUFBSXVULG9CQUFvQixFQUFFO1FBQ3hCN1MsV0FBVyxDQUFDMEssY0FBYyxDQUFDLENBQUMsRUFDMUJvSSxZQUFZLENBQUMsSUFBSSxFQUFHQyxJQUFhLElBQUtBLElBQUksQ0FBQzNOLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQ3RFa0csT0FBTyxDQUFFMEgsWUFBd0IsSUFBSztVQUN0Q0EsWUFBWSxDQUFDL0ssaUJBQWlCLENBQzdCNEssb0JBQW9CLENBQ2xCNVYsUUFBUSxDQUFDLENBQUMsQ0FDVnVFLFdBQVcsQ0FBQyxJQUFJLENBQUN2QyxlQUFlLENBQUMsQ0FBQyxDQUFDd0Msa0NBQWtDLENBQUMsQ0FBQyxDQUFDLENBQ3hFQyxlQUFlLENBQUMsQ0FBQyxFQUNuQixVQUNELENBQUM7UUFDRixDQUFDLENBQUM7UUFDSDtRQUNBLElBQUksQ0FBQytCLGdCQUFnQixDQUFDLENBQUM7TUFDeEI7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQW5CLE1BQUEsQ0FLQXVQLDJCQUEyQixHQUEzQixTQUFBQSwyQkFBMkJBLENBQUNvQixVQUE4QixFQUFRO01BQ2pFLE1BQU1DLGNBQWMsR0FBR0MsT0FBTyxDQUFDQyxvQkFBb0IsQ0FBQyxhQUFhLENBQUU7TUFFbkUsSUFBSSxJQUFJLENBQUNDLG9CQUFvQixFQUFFO1FBQzlCelIsU0FBUyxDQUFDTyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUNrUixvQkFBb0IsQ0FBQyxDQUFDO1FBQ3JELE9BQU8sSUFBSSxDQUFDQSxvQkFBb0I7TUFDakM7TUFFQSxJQUFJSixVQUFVLEVBQUU7UUFDZixJQUFJLENBQUNJLG9CQUFvQixHQUFHLElBQUlDLE9BQU8sQ0FBQztVQUN2Q3RSLE9BQU8sRUFBRWtSLGNBQWMsQ0FBQ3hTLE9BQU8sQ0FBQyxzQ0FBc0MsRUFBRSxDQUFDdVMsVUFBVSxDQUFDLENBQUM7VUFDckZNLElBQUksRUFBRUMsV0FBVyxDQUFDQyxXQUFXO1VBQzdCQyxNQUFNLEVBQUUsSUFBSSxDQUFDamUsT0FBTyxDQUFDLENBQUMsRUFBRXNILGlCQUFpQixDQUFDLENBQUMsRUFBRUssT0FBTyxDQUFDO1FBQ3RELENBQUMsQ0FBQztRQUNGd0UsU0FBUyxDQUFDK1IsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDTixvQkFBb0IsQ0FBQyxDQUFDO01BQ25EO0lBQ0QsQ0FBQztJQUFBL1EsTUFBQSxDQUlLc1IsV0FBVyxHQUZqQixlQUVNQSxXQUFXQSxDQUFDamIsV0FBZ0QsRUFBaUI7TUFDbEYsTUFBTWtiLFFBQVEsR0FBR0EsQ0FBQSxLQUFZO1FBQzVCO1FBQ0EsTUFBTTdULFdBQVcsR0FBRyxJQUFJLENBQUM2QywyQkFBMkIsQ0FBQyxDQUFDO1FBQ3RELE1BQU1pUixlQUFlLEdBQUcsQ0FBQ3hhLFdBQVcsQ0FBQ0MsYUFBYSxDQUFDLElBQUksQ0FBQzlELE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFFbEUsSUFBSXFlLGVBQWUsRUFBRTtVQUNwQixNQUFNQyxzQkFBc0IsR0FBRyxJQUFJLENBQUN6Six3QkFBd0IsQ0FBQ3RLLFdBQVcsQ0FBQztVQUN6RSxJQUFJK1Qsc0JBQXNCLEVBQUU7WUFDM0JBLHNCQUFzQixDQUFDNUcsS0FBSyxDQUFDLENBQUM7VUFDL0I7UUFDRCxDQUFDLE1BQU07VUFDTixNQUFNNkcsZ0JBQWdCLEdBQUc1SixVQUFVLENBQUM2SixjQUFjLENBQUNqVSxXQUFXLENBQUNrVSxrQkFBa0IsQ0FBQyxDQUFDLENBQWtDO1VBQ3JILElBQUlGLGdCQUFnQixFQUFFO1lBQ3JCLElBQUksQ0FBQ3ZVLHNCQUFzQixDQUFDdVUsZ0JBQWdCLENBQUMzVCxjQUFjLENBQUMsQ0FBQyxDQUFDO1VBQy9EO1FBQ0Q7TUFDRCxDQUFDO01BQ0QsTUFBTThULElBQUksR0FBRyxJQUFJLENBQUMxZSxPQUFPLENBQUMsQ0FBQyxDQUFDc0gsaUJBQWlCLENBQUMsQ0FBQztNQUMvQztNQUNBLElBQUksQ0FBQ3RILE9BQU8sQ0FBQyxDQUFDLENBQUN3SCxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUNpRSxXQUFXLENBQUMsY0FBYyxFQUFFaVQsSUFBSSxDQUFDOztNQUVyRTtNQUNBLE1BQU0zYixLQUFLLEdBQUcsSUFBSSxDQUFDL0MsT0FBTyxDQUFDLENBQUM7TUFDNUIsTUFBTTJKLHFCQUFxQixHQUFHNUcsS0FBSyxDQUFDdUUsaUJBQWlCLENBQUMsVUFBVSxDQUF5QjtNQUN6RixNQUFNcVgsZUFBZSxHQUFHNWIsS0FBSyxDQUFDdUUsaUJBQWlCLENBQUMsQ0FBQztNQUNqRDtNQUNBLElBQUlxWCxlQUFlLEVBQUU7UUFDcEIsTUFBTUMsYUFBYSxHQUFHM0UsV0FBVyxDQUFDQyx3QkFBd0IsQ0FBQ3lFLGVBQWUsQ0FBQ25YLFFBQVEsQ0FBQyxDQUFDLENBQUNDLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDckcsSUFBSSxDQUFDbVgsYUFBYSxFQUFFO1VBQ25CLE1BQU1DLGFBQWEsR0FBR2hiLFdBQVcsQ0FBQytLLGVBQWUsQ0FBQzdMLEtBQUssQ0FBQztVQUN4RCxNQUFNOGIsYUFBYSxDQUFDakcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDQyxpQkFBaUIsQ0FBQyxNQUFNLElBQUksQ0FBQ2Qsd0JBQXdCLENBQUM0RyxlQUFlLENBQUMsQ0FBQztRQUMvRztNQUNEO01BQ0E7TUFDQSxNQUFNRyxVQUFVLEdBQUdqYixXQUFXLENBQUNDLGFBQWEsQ0FBQyxJQUFJLENBQUM5RCxPQUFPLENBQUMsQ0FBQyxDQUFDO01BQzVELElBQUk4ZSxVQUFVLElBQUlILGVBQWUsRUFBRTtRQUNsQyxNQUFNLElBQUksQ0FBQ3pDLGVBQWUsQ0FBQzZDLDRCQUE0QixDQUFDLENBQUM7VUFBRUMsT0FBTyxFQUFFTDtRQUFnQixDQUFDLENBQUMsQ0FBQztNQUN4RjtNQUVBLElBQUl6YixXQUFXLEVBQUUrYixVQUFVLEVBQUU7UUFDNUJiLFFBQVEsQ0FBQyxDQUFDO01BQ1g7TUFDQXpVLHFCQUFxQixDQUFDOEIsV0FBVyxDQUFDLDRCQUE0QixFQUFFLEtBQUssQ0FBQztNQUN0RSxJQUFJLENBQUN5VCx5Q0FBeUMsQ0FBQyxDQUFDOztNQUVoRDtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQSxJQUFJLENBQUMsSUFBSSxDQUFDeGMsZUFBZSxJQUFJLENBQUN5YyxNQUFNLENBQUNDLE9BQU8sQ0FBQ0MsS0FBSyxFQUFFO1FBQ25ELE1BQU1DLFVBQVUsR0FBR3ZjLEtBQUssQ0FBQ3lILElBQUksQ0FBQyxxQ0FBcUMsQ0FBVztRQUM5RSxNQUFNK1UsZUFBZSxHQUFHQSxDQUFBLEtBQVk7VUFDbkMsSUFBSSxJQUFJLENBQUNDLGFBQWEsRUFBRUMsUUFBUSxDQUFDLENBQUMsRUFBRTtZQUNuQyxJQUFJLENBQUNELGFBQWEsQ0FBQ0UsTUFBTSxDQUFDLENBQUM7VUFDNUI7VUFDQUosVUFBVSxDQUFDSyxrQkFBa0IsQ0FBQyxTQUFTLEVBQUVKLGVBQWUsQ0FBQztVQUN6REQsVUFBVSxDQUFDSyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUVKLGVBQWUsQ0FBQztRQUN2RCxDQUFDO1FBRURELFVBQVUsRUFBRU0sa0JBQWtCLENBQUMsV0FBVyxFQUFFLE1BQVk7VUFDdkQsSUFBSSxDQUFDLElBQUksQ0FBQ0osYUFBYSxFQUFFQyxRQUFRLENBQUMsQ0FBQyxFQUFFO1lBQ3BDLElBQUksQ0FBQ0QsYUFBYSxHQUFHLElBQUksQ0FBQ3hmLE9BQU8sQ0FBQyxDQUFDLENBQUN3SCxRQUFRLENBQUMsQ0FBQyxDQUFDcVksSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUM1RDtZQUNBO1lBQ0FQLFVBQVUsQ0FBQ00sa0JBQWtCLENBQUMsU0FBUyxFQUFFTCxlQUFlLENBQUM7WUFDekRELFVBQVUsQ0FBQ00sa0JBQWtCLENBQUMsTUFBTSxFQUFFTCxlQUFlLENBQUM7VUFDdkQ7UUFDRCxDQUFDLENBQUM7UUFFRixJQUFJLENBQUM3YyxlQUFlLEdBQUcsSUFBSTtNQUM1QjtJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQW1LLE1BQUEsQ0FJQTNNLGlCQUFpQixHQUFqQixTQUFBQSxpQkFBaUJBLENBQUEsRUFBWTtNQUM1QixNQUFNeWUsZUFBZSxHQUFHLElBQUksQ0FBQzNlLE9BQU8sQ0FBQyxDQUFDLENBQUNzSCxpQkFBaUIsSUFBSSxJQUFJLENBQUN0SCxPQUFPLENBQUMsQ0FBQyxDQUFDc0gsaUJBQWlCLENBQUMsQ0FBQztNQUM5RixJQUFJdkgsaUJBQWlCLEdBQUcsS0FBSztNQUM3QixJQUFJNGUsZUFBZSxFQUFFO1FBQ3BCLE1BQU1DLGFBQWEsR0FBRzNFLFdBQVcsQ0FBQ0Msd0JBQXdCLENBQUN5RSxlQUFlLENBQUNuWCxRQUFRLENBQUMsQ0FBQyxDQUFDQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQ3JHLElBQUltWCxhQUFhLEVBQUU7VUFDbEI3ZSxpQkFBaUIsR0FBRzhELFdBQVcsQ0FBQ0MsYUFBYSxDQUFDLElBQUksQ0FBQzlELE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDOUQ7TUFDRDtNQUNBLE9BQU9ELGlCQUFpQjtJQUN6QixDQUFDO0lBQUE4TSxNQUFBLENBRURPLDJCQUEyQixHQUEzQixTQUFBQSwyQkFBMkJBLENBQUEsRUFBcUI7TUFDL0MsT0FBTyxJQUFJLENBQUM1QyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDbkMsQ0FBQztJQUFBcUMsTUFBQSxDQUVLaVQsd0JBQXdCLEdBQTlCLGVBQU1BLHdCQUF3QkEsQ0FBQSxFQUFvRztNQUNqSSxNQUFNdlYsV0FBVyxHQUFHLElBQUksQ0FBQzZDLDJCQUEyQixDQUFDLENBQUM7TUFDdEQsTUFBTTJTLG1CQUFtQixHQUFHeFYsV0FBVyxDQUFDN0IsYUFBYSxDQUFDLENBQUMsQ0FBQzdDLElBQUksQ0FBQyxVQUFVbWEsV0FBVyxFQUFFO1FBQ25GLE9BQU9BLFdBQVcsQ0FBQ3JYLE1BQU0sQ0FBQyxDQUFDLEtBQUssb0JBQW9CO01BQ3JELENBQUMsQ0FBQztNQUNGLE1BQU1zWCxzQkFBc0IsR0FBRzFWLFdBQVcsQ0FBQzdCLGFBQWEsQ0FBQyxDQUFDLENBQUM3QyxJQUFJLENBQUMsVUFBVW1hLFdBQVcsRUFBRTtRQUN0RixPQUFPQSxXQUFXLENBQUNyWCxNQUFNLENBQUMsQ0FBQyxLQUFLLHVCQUF1QjtNQUN4RCxDQUFDLENBQUM7TUFDRixNQUFNdVgsWUFBWSxHQUFJQyxXQUE2RCxJQUNsRnhlLEtBQUssQ0FBQ3llLElBQUksQ0FDVCxJQUFJQyxHQUFHLENBQ04sQ0FBQ0YsV0FBVyxFQUFFRyxLQUFLLElBQUksRUFBRSxFQUN2QmhVLE1BQU0sQ0FBRWlVLElBQUksSUFBSyxDQUFDQSxJQUFJLENBQUNDLEtBQUssQ0FBQyxDQUM3QnZZLEdBQUcsQ0FBRXNZLElBQUksSUFBS0EsSUFBSSxDQUFDRSxJQUFJLElBQUksRUFBRSxDQUFDLENBQzlCblUsTUFBTSxDQUFDb1UsT0FBTyxDQUNqQixDQUNELENBQUM7TUFDRixNQUFNQyxhQUFhLEdBQUdULFlBQVksQ0FBQ0gsbUJBQW1CLEVBQUVhLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztNQUNoRixNQUFNQyxnQkFBZ0IsR0FBR1gsWUFBWSxDQUFDRCxzQkFBc0IsRUFBRVcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO01BQ3RGLE1BQU1FLGNBQWMsR0FBRyxDQUFDLEdBQUdILGFBQWEsRUFBRSxHQUFHRSxnQkFBZ0IsQ0FBQztNQUM5RCxNQUFNRSxZQUFZLEdBQUcsSUFBSSxDQUFDblMsZUFBZSxDQUFDLENBQUM7TUFDM0MsTUFBTW9TLGtCQUFrQixHQUFHRCxZQUFZLENBQUNFLHFCQUFxQixDQUFDLENBQUM7TUFDL0QsTUFBTUMsaUJBQWlCLEdBQUdBLENBQUEsS0FBWTtRQUNyQ0Ysa0JBQWtCLENBQUNHLDZCQUE2QixDQUFDNVcsV0FBVyxDQUFDakQsaUJBQWlCLENBQUMsQ0FBQyxFQUFFSyxPQUFPLENBQUMsQ0FBVyxDQUFDO01BQ3ZHLENBQUM7TUFDRCxJQUFJLENBQUNzWSxzQkFBc0IsSUFBSUYsbUJBQW1CLEtBQUssQ0FBQyxJQUFJLENBQUN0ZCxrQ0FBa0MsRUFBRTtRQUNoR3NkLG1CQUFtQixFQUFFM04sVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFckUsWUFBWSxDQUFDbVQsaUJBQWlCLEVBQUUsSUFBSSxDQUFDO1FBQy9FakIsc0JBQXNCLEVBQUU3TixVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUVyRSxZQUFZLENBQUNtVCxpQkFBaUIsRUFBRSxJQUFJLENBQUM7UUFDbEYsSUFBSSxDQUFDemUsa0NBQWtDLEdBQUcsSUFBSTtNQUMvQztNQUNBLE1BQU0yZSxrQkFBa0IsR0FBRzdXLFdBQVcsQ0FBQ2pELGlCQUFpQixDQUFDLENBQUM7TUFDMUQsTUFBTStaLEtBQUssR0FBR0EsQ0FBQSxNQUErRjtRQUM1R0MsS0FBSyxFQUFFL1csV0FBVyxDQUFDekUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRTtRQUNoRHliLFFBQVEsRUFBRXhCLG1CQUFtQixFQUFFbFgsUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFO1FBQy9DMlksTUFBTSxFQUFFLEVBQUU7UUFDVkMsSUFBSSxFQUFFLEVBQUU7UUFDUkMsV0FBVyxFQUFFekIsc0JBQXNCLEVBQUVwWCxRQUFRLENBQUMsQ0FBQyxJQUFJO01BQ3BELENBQUMsQ0FBQztNQUNGO01BQ0EsSUFBSSxDQUFDdVksa0JBQWtCLElBQUlOLGNBQWMsQ0FBQ3JmLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDdkQsT0FBT2lTLE9BQU8sQ0FBQ3NILE9BQU8sQ0FBQ3FHLEtBQUssQ0FBQyxDQUFDLENBQUM7TUFDaEM7TUFDQSxNQUFNM04sT0FBTyxDQUFDQyxHQUFHLENBQUNtTixjQUFjLENBQUM3WSxHQUFHLENBQUMsTUFBTzBaLENBQUMsSUFBTVAsa0JBQWtCLENBQW9CUSxhQUFhLENBQUNELENBQUMsQ0FBQyxDQUFDL2EsS0FBSyxDQUFDLE1BQU16RyxTQUFTLENBQUMsQ0FBQyxDQUFDO01BQ2xJLE9BQU9raEIsS0FBSyxDQUFDLENBQUM7SUFDZixDQUFDO0lBQUF4VSxNQUFBLENBRURnVixtQkFBbUIsR0FBbkIsU0FBQUEsbUJBQW1CQSxDQUFDQyxVQUFvQixFQUFRO01BQy9DLE1BQU12WCxXQUFXLEdBQUcsSUFBSSxDQUFDNkMsMkJBQTJCLENBQUMsQ0FBQztRQUNyRGdJLFNBQVMsR0FBRzdLLFdBQVcsQ0FBQzZHLFdBQVcsQ0FBQyxDQUFDO1FBQ3JDMlEsZ0JBQWdCLEdBQUczTSxTQUFTLENBQUMzVCxNQUFNLEdBQUcsQ0FBQztRQUN2Q3VnQixRQUFRLEdBQUlGLFVBQVUsQ0FBQzFkLFNBQVMsQ0FBQyxDQUFDLENBQWlDNmQsVUFBVSxDQUFDLENBQUM7TUFDaEYsSUFBSUMsVUFBVTtRQUNiQyxxQkFBcUIsR0FBRzVYLFdBQVcsQ0FBQzZYLGNBQWMsQ0FBQyxJQUFJLENBQUM1WCxJQUFJLENBQUNELFdBQVcsQ0FBQ2tVLGtCQUFrQixDQUFDLENBQUUsQ0FBc0IsQ0FBQztNQUN0SCxJQUFJMEQscUJBQXFCLEtBQUssQ0FBQyxDQUFDLElBQUlKLGdCQUFnQixHQUFHLENBQUMsRUFBRTtRQUN6RCxJQUFJQyxRQUFRLEtBQUssU0FBUyxFQUFFO1VBQzNCLElBQUlHLHFCQUFxQixJQUFJSixnQkFBZ0IsR0FBRyxDQUFDLEVBQUU7WUFDbERHLFVBQVUsR0FBRzlNLFNBQVMsQ0FBQyxFQUFFK00scUJBQXFCLENBQUM7VUFDaEQ7UUFDRCxDQUFDLE1BQU0sSUFBSUEscUJBQXFCLEtBQUssQ0FBQyxFQUFFO1VBQ3ZDO1VBQ0FELFVBQVUsR0FBRzlNLFNBQVMsQ0FBQyxFQUFFK00scUJBQXFCLENBQUM7UUFDaEQ7UUFFQSxJQUFJRCxVQUFVLEVBQUU7VUFDZjNYLFdBQVcsQ0FBQ2Esa0JBQWtCLENBQUM4VyxVQUFVLENBQUM7VUFDMUNBLFVBQVUsQ0FBQ3hLLEtBQUssQ0FBQyxDQUFDO1FBQ25CO01BQ0Q7SUFDRCxDQUFDO0lBQUE3SyxNQUFBLENBRUR3VixvQkFBb0IsR0FBcEIsU0FBQUEsb0JBQW9CQSxDQUFBLEVBQVM7TUFDNUIsTUFBTTFZLHFCQUFxQixHQUFHLElBQUksQ0FBQzNKLE9BQU8sQ0FBQyxDQUFDLENBQUNzSCxpQkFBaUIsQ0FBQyxVQUFVLENBQXlCO01BQ2xHLE1BQU1nYixPQUFPLEdBQUcsSUFBSSxDQUFDdGlCLE9BQU8sQ0FBQyxDQUFDLENBQUMrRSxLQUFLLENBQUMsQ0FBQztNQUN0QzRFLHFCQUFxQixDQUFDOEIsV0FBVyxDQUFDLDZCQUE2QixFQUFFLEtBQUssQ0FBQztNQUN2RSxNQUFNOFcsb0JBQW9CLEdBQUksSUFBSSxDQUFDM1QsZUFBZSxDQUFDLENBQUMsQ0FBQ29LLDBCQUEwQixDQUFDLENBQUMsQ0FBQ0MsZUFBZSxDQUFDLENBQUMsQ0FBQ0MsV0FBVyxFQUM1R0MsT0FBTztNQUNWaE4sU0FBUyxDQUFDQyxlQUFlLENBQUMsQ0FBQyxDQUN6QkMsT0FBTyxDQUFDLENBQUMsQ0FDVHdKLE9BQU8sQ0FBQyxVQUFVMk0sUUFBaUIsRUFBUTtRQUMzQyxNQUFNQyxjQUFjLEdBQUdELFFBQVEsQ0FBQ0UsVUFBVSxJQUFJRixRQUFRLENBQUM1UyxPQUFPLENBQUMsQ0FBQyxLQUFLLE9BQU87UUFDNUUsTUFBTStTLGlCQUFpQixHQUFHSixvQkFBb0IsR0FDM0NFLGNBQWMsR0FDZEEsY0FBYyxJQUFJRCxRQUFRLENBQUNoVyxVQUFVLENBQUMsQ0FBQyxDQUFDMkYsSUFBSSxDQUFFOEwsTUFBTSxJQUFLQSxNQUFNLENBQUMyRSxRQUFRLENBQUNOLE9BQU8sQ0FBQyxDQUFDO1FBQ3JGLElBQUlLLGlCQUFpQixFQUFFO1VBQ3RCaFoscUJBQXFCLENBQUM4QixXQUFXLENBQUMsNkJBQTZCLEVBQUUsSUFBSSxDQUFDO1FBQ3ZFO01BQ0QsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUFBb0IsTUFBQSxDQUVEbkcsbUJBQW1CLEdBQW5CLFNBQUFBLG1CQUFtQkEsQ0FBQ21jLEdBQVksRUFBRUMsSUFBYyxFQUFXO01BQzFELElBQUlELEdBQUcsRUFBRTtRQUNSMWMsR0FBRyxDQUFDQyxLQUFLLENBQUN5YyxHQUFHLENBQUM7TUFDZjtNQUNBLE1BQU1FLFVBQVUsR0FBR2xmLFdBQVcsQ0FBQ0MsYUFBYSxDQUFDLElBQUksQ0FBQzlELE9BQU8sQ0FBQyxDQUFDLENBQUM7TUFDNUQsTUFBTWdoQixrQkFBa0IsR0FBRyxJQUFJLENBQUNwUyxlQUFlLENBQUMsQ0FBQyxDQUFDcVMscUJBQXFCLENBQUMsQ0FBQztNQUN6RSxNQUFNK0IsZUFBZSxHQUFHaEMsa0JBQWtCLENBQUNpQyxZQUFZLENBQUMsQ0FBQyxHQUN0RGpDLGtCQUFrQixDQUFDa0MsZ0JBQWdCLENBQUMsQ0FBQyxHQUNwQyxJQUFJLENBQUN0VSxlQUFlLENBQUMsQ0FBQyxDQUFDdVUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFrQkMsY0FBYyxDQUFDLENBQUM7TUFDL0UsSUFBSUwsVUFBVSxJQUFJLENBQUNDLGVBQWUsQ0FBQ3JULEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFO1FBQzVELE1BQU0wVCxjQUFjLEdBQUcsSUFBSSxDQUFDaGQsYUFBYTtVQUN4QytILGVBQWUsR0FBR2lWLGNBQWMsQ0FBQ2pWLGVBQWU7VUFDaERrVixZQUFZLEdBQUdsVixlQUFlLENBQUNnRSxVQUFVLENBQUMsT0FBTyxDQUFnQjtRQUVsRSxJQUFJa1IsWUFBWSxDQUFDQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDblYsZUFBZSxDQUFDQyxNQUFNLENBQUMsQ0FBQyxFQUFFO1VBQzlEZ1YsY0FBYyxDQUFDaFEsVUFBVSxDQUFDLElBQUksQ0FBQztVQUMvQjtVQUNBbEosVUFBVSxDQUFDLFlBQVk7WUFDdEJpRSxlQUFlLENBQUNvVixNQUFNLENBQUNILGNBQWMsQ0FBQztVQUN2QyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ047TUFDRDtNQUNBLE9BQU9QLElBQUk7SUFDWixDQUFDO0lBQUFqVyxNQUFBLENBRUtqSixhQUFhLEdBQW5CLGVBQU1BLGFBQWFBLENBQUEsRUFBNEI7TUFDOUMsTUFBTVosUUFBUSxHQUFHLElBQUksQ0FBQ2hELE9BQU8sQ0FBQyxDQUFDLENBQUNzSCxpQkFBaUIsQ0FBQyxDQUFDO01BQ25ELE1BQU13VCxNQUFNLEdBQUcsSUFBSSxDQUFDOWEsT0FBTyxDQUFDLENBQUMsQ0FBQ3dILFFBQVEsQ0FBQyxJQUFJLENBQUM7TUFDNUNpYyxVQUFVLENBQUM1RCxJQUFJLENBQUMvRSxNQUFNLENBQUM7TUFDdkIsT0FBTyxJQUFJLENBQUN0VyxRQUFRLENBQUNrZixZQUFZLENBQUM3UyxLQUFLLENBQUMsSUFBSSxDQUFDck0sUUFBUSxFQUFFLENBQUN4QixRQUFRLENBQUMsQ0FBQyxDQUFDMmdCLE9BQU8sQ0FBQyxZQUFZO1FBQ3RGRixVQUFVLENBQUMvRCxNQUFNLENBQUM1RSxNQUFNLENBQUM7TUFDMUIsQ0FBQyxDQUFDO0lBQ0g7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FOQztJQUFBak8sTUFBQSxDQU9BakUsOENBQThDLEdBQTlDLFNBQUFBLDhDQUE4Q0EsQ0FDN0NnYixZQUFvQixFQUNwQjlhLGNBQXNCLEVBQ3VCO01BQzdDLE9BQU8sQ0FDTjtRQUNDK2EsYUFBYSxFQUFFO1VBQ2RDLGFBQWEsRUFBRUY7UUFDaEIsQ0FBQztRQUNERyxzQkFBc0IsRUFBRWpiO01BQ3pCLENBQUMsQ0FDRDtJQUNGOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQVJDO0lBQUErRCxNQUFBLENBU01tWCxpQkFBaUIsR0FBdkIsZUFBTUEsaUJBQWlCQSxDQUFBLEVBQW9EO01BQzFFLE1BQU1sVSxPQUFPLEdBQUc2RSxVQUFVLENBQUNzUCxnQkFBZ0IsQ0FBQyxDQUFZO01BQ3hELE1BQU1qRixPQUFPLEdBQUdsUCxPQUFPLEVBQUV4SSxpQkFBaUIsQ0FBQyxDQUErQjtNQUUxRSxJQUFJLENBQUN3SSxPQUFPLElBQUksQ0FBQ2tQLE9BQU8sRUFBRTtRQUN6QixPQUFPN2UsU0FBUztNQUNqQjtNQUNBLElBQUkrakIsaUJBQWlCLEdBQUcsS0FBSztNQUM3QixJQUFJbEYsT0FBTyxDQUFDbUYsV0FBVyxDQUFDLENBQUMsRUFBRTtRQUMxQixJQUFJbkYsT0FBTyxDQUFDOU0saUJBQWlCLENBQUMsQ0FBQyxFQUFFO1VBQ2hDLE1BQU04TSxPQUFPLENBQUNvRixPQUFPLENBQUMsQ0FBQztRQUN4QixDQUFDLE1BQU07VUFDTkYsaUJBQWlCLEdBQUcsSUFBSTtRQUN6QjtNQUNEO01BQ0EsSUFBSSxDQUFDbE0sY0FBYyxDQUFDcU0sc0JBQXNCLENBQUN2VSxPQUFPLENBQUM7TUFDbkQsTUFBTXdVLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQ0MsdUJBQXVCLENBQUN2RixPQUFPLEVBQUVrRixpQkFBaUIsQ0FBQztNQUMxRSxJQUFJLENBQUNsTSxjQUFjLENBQUN3TSxZQUFZLENBQUM7UUFBRTFVO01BQVEsQ0FBQyxDQUFDO01BQzdDLE9BQU93VSxHQUFHO0lBQ1g7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BUkM7SUFBQXpYLE1BQUEsQ0FTTTBYLHVCQUF1QixHQUE3QixlQUFNQSx1QkFBdUJBLENBQUN2RixPQUF1QixFQUE4RTtNQUFBLElBQTVFa0YsaUJBQWlCLEdBQUExaUIsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQXJCLFNBQUEsR0FBQXFCLFNBQUEsTUFBRyxLQUFLO01BQy9FLE1BQU11ZixZQUFZLEdBQUcsSUFBSSxDQUFDblMsZUFBZSxDQUFDLENBQUM7TUFDM0M7TUFDQSxJQUFJLENBQUNvSixjQUFjLENBQUNDLHdCQUF3QixDQUFDLENBQUM7TUFDOUMsSUFBSSxDQUFDaU0saUJBQWlCLEVBQUU7UUFDdkIsTUFBTU8sa0JBQWtCLEdBQUcxRCxZQUFZLENBQUMyRCxxQkFBcUIsQ0FBQyxDQUFDO1FBQy9ELE1BQU1DLFVBQVUsR0FBR0Ysa0JBQWtCLENBQUNHLHdCQUF3QixDQUFDNUYsT0FBTyxDQUFDO1FBQ3ZFLE1BQU02RixpQkFBaUIsR0FBR0YsVUFBVSxHQUFHRixrQkFBa0IsQ0FBQ0ssK0JBQStCLENBQUNILFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDMUc7UUFDQSxJQUFJRSxpQkFBaUIsQ0FBQ3BqQixNQUFNLEVBQUU7VUFDN0IsTUFBTSxJQUFJLENBQUMrQyxRQUFRLENBQUMrQixRQUFRLENBQUMsQ0FBQztVQUM5QixPQUFPbU4sT0FBTyxDQUFDQyxHQUFHLENBQ2pCa1IsaUJBQWlCLENBQUM1YyxHQUFHLENBQUMsTUFBTzhjLFdBQVcsSUFBSyxJQUFJLENBQUNwTCxZQUFZLENBQUNxTCxrQkFBa0IsQ0FBQ0QsV0FBVyxFQUFFL0YsT0FBTyxDQUFDLENBQ3hHLENBQUM7UUFDRjtNQUNEO01BRUEsTUFBTWlHLGdCQUFnQixHQUFJLE1BQU1waEIsV0FBVyxDQUFDcWhCLGlCQUFpQixDQUM1RG5uQixnQkFBZ0IsQ0FBQ29uQixLQUFLLEVBQ3RCLElBQUksQ0FBQ25sQixPQUFPLENBQUMsQ0FBQyxFQUNkK2dCLFlBQ0QsQ0FBb0I7TUFDcEI7TUFDQSxJQUFJa0UsZ0JBQWdCLEVBQUU7UUFDckIsTUFBTSxJQUFJLENBQUN6Z0IsUUFBUSxDQUFDK0IsUUFBUSxDQUFDLENBQUM7UUFDOUIsT0FBTzZTLEtBQUssQ0FBQ2dNLHNCQUFzQixDQUFDSCxnQkFBZ0IsRUFBRWxFLFlBQVksRUFBRSxJQUFJLENBQUN0UyxrQkFBa0IsQ0FBQzRXLFdBQVcsQ0FBQyxDQUFDLENBQUM7TUFDM0c7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQU5DO0lBQUF4WSxNQUFBLENBT005SSxhQUFhLEdBQW5CLGVBQU1BLGFBQWFBLENBQUN1aEIsaUJBQTJCLEVBQWlCO01BQy9ELE1BQU10RyxPQUFPLEdBQUcsSUFBSSxDQUFDaGYsT0FBTyxDQUFDLENBQUMsQ0FBQ3NILGlCQUFpQixDQUFDLENBQUM7TUFDbEQsTUFBTWtaLEtBQUssR0FBRyxJQUFJLENBQUN4Z0IsT0FBTyxDQUFDLENBQUMsQ0FBQ3dILFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDMUMrZCxvQkFBd0QsR0FBRyxFQUFFO01BQzlEO01BQ0EsSUFBSUMseUJBQXlCLEdBQUcsS0FBSztNQUNyQy9CLFVBQVUsQ0FBQzVELElBQUksQ0FBQ1csS0FBSyxDQUFDO01BQ3RCLElBQUk7UUFDSCxJQUFJLElBQUksQ0FBQy9SLGtCQUFrQixDQUFDZ1gsc0JBQXNCLENBQUMsQ0FBQyxFQUFFO1VBQ3JELElBQUk7WUFDSCxNQUFNQyxZQUFZLEdBQUcsTUFBTSxJQUFJQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMzbEIsT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQzRsQixhQUFhLENBQUMsQ0FBQztZQUN6RjtZQUNBLElBQUlGLFlBQVksS0FBSyxRQUFRLEVBQUU7Y0FDOUI7WUFDRDtZQUNBO1lBQ0EsSUFBSUEsWUFBWSxLQUFLLFdBQVcsRUFBRTtjQUNqQyxJQUFJLENBQUNqWCxrQkFBa0IsQ0FBQ0MsVUFBVSxDQUFDLENBQUM7Y0FDcEMsTUFBTSxJQUFJLENBQUM4SixRQUFRLENBQUNDLHVCQUF1QixDQUFDdUcsT0FBTyxDQUFDO2NBQ3BEO1lBQ0Q7VUFDRCxDQUFDLENBQUMsT0FBTzZELEdBQUcsRUFBRTtZQUNiMWMsR0FBRyxDQUFDQyxLQUFLLENBQUMsb0RBQW9EeWMsR0FBRyxFQUFFLENBQUM7VUFDckU7UUFDRDtRQUVBLE1BQU0sSUFBSSxDQUFDcmUsUUFBUSxDQUFDK0IsUUFBUSxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDaUwsV0FBVyxDQUFDLENBQUMsQ0FBQ3FFLE9BQU8sQ0FBRXhSLEtBQVksSUFBSztVQUM1QyxNQUFNd2hCLFdBQVcsR0FBR3hoQixLQUFLLENBQUNrTyxjQUFjLENBQUMsQ0FBQztVQUMxQyxNQUFNdVQsWUFBWSxHQUFHLElBQUksQ0FBQ25oQixnQkFBZ0IsQ0FBQ04sS0FBSyxDQUFDO1VBQ2pELE1BQU0waEIsV0FBVyxHQUFHdmQsTUFBTSxDQUFDdEQsSUFBSSxDQUFFMmdCLFdBQVcsRUFBRXZlLGlCQUFpQixDQUFDLENBQUMsRUFBaUMvQixTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1VBQ3BILElBQUl3Z0IsV0FBVyxDQUFDelosTUFBTSxDQUFFN0csR0FBRyxJQUFLLENBQUNBLEdBQUcsQ0FBQ3VnQixVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQ3ZrQixNQUFNLEVBQUU7WUFDbEUrakIseUJBQXlCLEdBQUcsSUFBSTtZQUNoQ0Qsb0JBQW9CLENBQUMzVCxJQUFJLENBQ3hCLElBQUksQ0FBQ3BOLFFBQVEsQ0FDWHloQixjQUFjLENBQUNILFlBQVksRUFBRTtjQUM3QkksWUFBWSxFQUFFN2hCLEtBQUssQ0FBQ3lCLElBQUksQ0FBQyxjQUFjLENBQUM7Y0FDeEMrZixXQUFXLEVBQUVBLFdBQVc7Y0FDeEJNLFdBQVcsRUFBRTloQixLQUFLLENBQUN5QixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssTUFBTTtjQUNqRHNnQixlQUFlLEVBQUUsSUFBSSxDQUFDO1lBQ3ZCLENBQUMsQ0FBQyxDQUNEM2YsSUFBSSxDQUFDLE1BQU1xZixZQUFZLENBQzFCLENBQUM7VUFDRjtRQUNELENBQUMsQ0FBQztRQUNGLE1BQU1PLG1CQUFtQixHQUFHZixpQkFBNkQ7UUFDekYsTUFBTWdCLGNBQWMsR0FDbkJELG1CQUFtQixJQUFJLE9BQU9BLG1CQUFtQixJQUFJLFFBQVEsSUFBSUEsbUJBQW1CLENBQUNqaUIsU0FBUyxDQUFDLENBQUMsQ0FBQzZkLFVBQVUsQ0FBQyxDQUFDLEtBQUssTUFBTTtRQUV6SCxNQUFNc0UsUUFBUSxHQUFHLE1BQU03UyxPQUFPLENBQUNDLEdBQUcsQ0FBQzRSLG9CQUFvQixDQUFDO1FBQ3hEO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxJQUFJO1VBQ0gsTUFBTSxJQUFJLENBQUMvZ0IsUUFBUSxDQUFDZ2lCLFlBQVksQ0FBQ3hILE9BQU8sRUFBRTtZQUN6Q3lILDBCQUEwQixFQUFFakIseUJBQXlCO1lBQ3JEZSxRQUFRLEVBQUVBLFFBQXlDO1lBQ25EN2pCLGVBQWUsRUFBRSxJQUFJLENBQUNBLGVBQWU7WUFDckM0aUIsaUJBQWlCO1lBQ2pCZ0I7VUFDRCxDQUFDLENBQUM7UUFDSCxDQUFDLENBQUMsT0FBT2xnQixLQUFjLEVBQUU7VUFDeEI7VUFDQTtVQUNBO1VBQ0E7VUFDQSxJQUFJQSxLQUFLLEtBQUtzZ0IsNEJBQTRCLENBQUNDLFFBQVEsRUFBRTtZQUNwRCxJQUFJLENBQUNqZ0IsbUJBQW1CLENBQUNOLEtBQWUsQ0FBQztVQUMxQztVQUNBLE1BQU1BLEtBQUs7UUFDWjtNQUNELENBQUMsU0FBUztRQUNULElBQUlxZCxVQUFVLENBQUNoRSxRQUFRLENBQUNlLEtBQUssQ0FBQyxFQUFFO1VBQy9CaUQsVUFBVSxDQUFDL0QsTUFBTSxDQUFDYyxLQUFLLENBQUM7UUFDekI7TUFDRDtJQUNELENBQUM7SUFBQTNULE1BQUEsQ0FFSytaLGVBQWUsR0FBckIsZUFBTUEsZUFBZUEsQ0FBQzFqQixXQUFxQyxFQUEyQjtNQUNyRixNQUFNOGIsT0FBTyxHQUFHLElBQUksQ0FBQ2hmLE9BQU8sQ0FBQyxDQUFDLEVBQUVzSCxpQkFBaUIsQ0FBQyxDQUFDO01BQ25ELE1BQU11ZixZQUFZLEdBQUcsSUFBSSxDQUFDN21CLE9BQU8sQ0FBQyxDQUFDLENBQUN3SyxJQUFJLENBQUN0SCxXQUFXLENBQUMyakIsWUFBWSxDQUF1QixDQUFDLENBQUM7TUFDMUYsTUFBTUMsb0JBQW9CLEdBQUduUyxVQUFVLENBQUNzUCxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUVsZixLQUFLLENBQUMsQ0FBQztNQUNuRSxJQUFJZ2lCLHdCQUF3QixHQUFHLEtBQUs7TUFDcEMsSUFBSSxJQUFJLENBQUN0WSxrQkFBa0IsQ0FBQ2dYLHNCQUFzQixDQUFDLENBQUMsRUFBRTtRQUNyRCxJQUFJO1VBQ0gsTUFBTUMsWUFBWSxHQUFHLE1BQU0sSUFBSUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDM2xCLE9BQU8sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM0bEIsYUFBYSxDQUFDLENBQUM7VUFDMUY7VUFDQSxJQUFJRixZQUFZLEtBQUssUUFBUSxFQUFFO1lBQzlCO1VBQ0Q7VUFDQTtVQUNBLElBQUlBLFlBQVksS0FBSyxXQUFXLEVBQUU7WUFDakMsSUFBSSxDQUFDalgsa0JBQWtCLENBQUNDLFVBQVUsQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sSUFBSSxDQUFDOEosUUFBUSxDQUFDQyx1QkFBdUIsQ0FBQ3VHLE9BQU8sQ0FBQztZQUNwRDtVQUNEO1VBQ0E7VUFDQSxJQUFJMEcsWUFBWSxLQUFLLGtCQUFrQixFQUFFO1lBQ3hDcUIsd0JBQXdCLEdBQUcsSUFBSTtVQUNoQztRQUNELENBQUMsQ0FBQyxPQUFPbEUsR0FBRyxFQUFFO1VBQ2IxYyxHQUFHLENBQUNDLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQztRQUM1QztNQUNEO01BQ0EsTUFBTTRnQixrQkFBa0IsR0FDdkIsQ0FBQyxDQUFDLElBQUksQ0FBQ2huQixPQUFPLENBQUMsQ0FBQyxDQUFDd0gsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDcUMsV0FBVyxDQUFDb2QsZ0JBQWdCLENBQUNDLGdCQUFnQixDQUFDLElBQzdFLENBQUMsSUFBSSxDQUFDaG5CLGlCQUFpQixDQUFDLENBQUMsSUFBSThlLE9BQU8sQ0FBQ25WLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEtBQU07TUFDaEYsTUFBTXNkLFdBQXFCLEdBQUlDLGFBQTZCLElBQUs7UUFDaEU7UUFDQSxJQUFJTixvQkFBb0IsS0FBSzNtQixTQUFTLEVBQUU7VUFDdkN3VSxVQUFVLENBQUM2SixjQUFjLENBQUNzSSxvQkFBb0IsQ0FBQyxFQUFFcFAsS0FBSyxDQUFDLENBQUM7UUFDekQ7UUFDQSxPQUFPMFAsYUFBYTtNQUNyQixDQUFDO01BQ0QsSUFDRSxJQUFJLENBQUN4WSxlQUFlLENBQUMsQ0FBQyxFQUFFb0ssMEJBQTBCLENBQUMsQ0FBQyxFQUFFQyxlQUFlLENBQUMsQ0FBQyxFQUFFQyxXQUFXLEVBQWtCQyxPQUFPLElBQzlHNk4sa0JBQWtCLEVBQ2pCO1FBQ0QsT0FBTzVOLEtBQUssQ0FBQ0MseUNBQXlDLENBQ3JEOE4sV0FBVyxFQUNYN04sUUFBUSxDQUFDeE0sU0FBUyxFQUNsQmtTLE9BQU8sRUFDUCxJQUFJLEVBQ0osS0FBSyxFQUNMNUYsS0FBSyxDQUFDRyxjQUFjLENBQUNDLGNBQWMsRUFDbkMsSUFDRCxDQUFDO01BQ0Y7TUFDQSxPQUFPLElBQUksQ0FBQ2hWLFFBQVEsQ0FDbEI2aUIsY0FBYyxDQUFDckksT0FBTyxFQUFFO1FBQUVsUCxPQUFPLEVBQUUrVyxZQUFZO1FBQUVTLGtCQUFrQixFQUFFUDtNQUF5QixDQUFDLENBQUMsQ0FDaEd0Z0IsSUFBSSxDQUFFMmdCLGFBQWEsSUFBSztRQUN4QixPQUFPRCxXQUFXLENBQUNDLGFBQWEsQ0FBQztNQUNsQyxDQUFDLENBQUM7SUFDSixDQUFDO0lBQUF2YSxNQUFBLENBRUs3SSxjQUFjLEdBQXBCLGVBQU1BLGNBQWNBLENBQUNoQixRQUF3QixFQUFpQjtNQUM3RCxPQUFPLElBQUksQ0FBQ3dCLFFBQVEsQ0FBQytpQixhQUFhLENBQUN2a0IsUUFBUSxDQUFDLENBQUM0RCxLQUFLLENBQUMsTUFBTTtRQUN4RCxJQUFJLENBQUNGLG1CQUFtQixDQUFDLENBQUM7UUFDMUI7TUFDRCxDQUFDLENBQUM7SUFDSCxDQUFDO0lBQUFtRyxNQUFBLENBRUQ0TyxrQkFBa0IsR0FBbEIsU0FBQUEsa0JBQWtCQSxDQUFBLEVBQVM7TUFDMUIsTUFBTWxSLFdBQVcsR0FBRyxJQUFJLENBQUM2QywyQkFBMkIsQ0FBQyxDQUFDO01BQ3RELE1BQU1vYSxlQUFlLEdBQUdqZCxXQUFXLENBQUN6RSxJQUFJLENBQUMsaUJBQWlCLENBQUM7TUFDM0QsSUFBSTBoQixlQUFlLEtBQUssTUFBTSxJQUFJQSxlQUFlLEtBQUssSUFBSSxFQUFFO1FBQzNELE1BQU16RyxZQUFZLEdBQUdsZCxXQUFXLENBQUMrSyxlQUFlLENBQUMsSUFBSSxDQUFDNU8sT0FBTyxDQUFDLENBQUMsQ0FBQztRQUNoRTZELFdBQVcsQ0FBQzRqQix3QkFBd0IsQ0FBQ2xkLFdBQVcsRUFBRXdXLFlBQVksQ0FBQztNQUNoRTtJQUNELENBQUM7SUFBQWxVLE1BQUEsQ0FFRDZhLHdCQUF3QixHQUF4QixTQUFBQSx3QkFBd0JBLENBQUNDLGNBQXlCLEVBQUVDLFdBQWlDLEVBQUVDLFNBQW9CLEVBQUVDLFFBQWtCLEVBQVE7TUFDdEksS0FBSyxNQUFNQyxLQUFLLElBQUlKLGNBQWMsRUFBRTtRQUNuQyxJQUFJSyxRQUFRLEdBQUlELEtBQUssQ0FBY3ZVLFVBQVUsWUFBWThGLFFBQVEsR0FBSXlPLEtBQUssQ0FBY3ZVLFVBQVUsQ0FBQyxDQUFDLEdBQUdyVCxTQUFTO1FBQ2hILElBQUkybkIsUUFBUSxFQUFFO1VBQ2IsSUFBSUUsUUFBUSxFQUFFQyxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDdEMsTUFBTXphLEtBQUssR0FBR3dhLFFBQVEsQ0FBQ0MsY0FBYyxDQUFDLE9BQU8sQ0FBYztZQUMzRHphLEtBQUssQ0FBQ3FJLE9BQU8sQ0FBQyxVQUFVdkQsSUFBYSxFQUFFO2NBQ3RDLElBQUlBLElBQUksQ0FBQzNDLEdBQUcsQ0FBYSxxQkFBcUIsQ0FBQyxFQUFFO2dCQUNoRCxNQUFNdVksWUFBWSxHQUFHNVYsSUFBSSxDQUFDNlYsZUFBZSxDQUFDLENBQUM7Z0JBQzNDTixTQUFTLENBQUNqVyxJQUFJLENBQUNzVyxZQUFZLENBQUM7Y0FDN0I7WUFDRCxDQUFDLENBQUM7VUFDSDtRQUNELENBQUMsTUFBTTtVQUNOLElBQUlGLFFBQVEsSUFBSUEsUUFBUSxDQUFDclksR0FBRyxJQUFJcVksUUFBUSxDQUFDclksR0FBRyxDQUFxQixrQ0FBa0MsQ0FBQyxFQUFFO1lBQ3JHLE1BQU15WSxXQUFXLEdBQUdKLFFBQVEsQ0FBQzFYLGNBQWMsWUFBWWdKLFFBQVEsR0FBRzBPLFFBQVEsQ0FBQzFYLGNBQWMsQ0FBQyxDQUFDLEdBQUduUSxTQUFTO1lBQ3ZHLElBQUlpb0IsV0FBVyxJQUFJQSxXQUFXLENBQUMzbUIsTUFBTSxHQUFHLENBQUMsRUFBRTtjQUMxQ3VtQixRQUFRLEdBQUdJLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDMUI7VUFDRDtVQUNBO1VBQ0E7VUFDQSxJQUFJSixRQUFRLElBQUlBLFFBQVEsQ0FBQ3JZLEdBQUcsSUFBSXFZLFFBQVEsQ0FBQ3JZLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSXFZLFFBQVEsQ0FBQ2xpQixJQUFJLENBQUMsNEJBQTRCLENBQUMsRUFBRTtZQUMzR2tpQixRQUFRLEdBQUdBLFFBQVEsQ0FBQ2xpQixJQUFJLENBQUMsbUJBQW1CLENBQUM7VUFDOUM7VUFDQSxJQUFJa2lCLFFBQVEsSUFBSUEsUUFBUSxDQUFDclksR0FBRyxJQUFJcVksUUFBUSxDQUFDclksR0FBRyxDQUFXLDhCQUE4QixDQUFDLEVBQUU7WUFDdkYsTUFBTXlZLFdBQVcsR0FBR0osUUFBUSxDQUFDeFUsVUFBVSxZQUFZOEYsUUFBUSxHQUFHME8sUUFBUSxDQUFDeFUsVUFBVSxDQUFDLENBQUMsR0FBR3JULFNBQVM7WUFDL0YsSUFBSWlvQixXQUFXLElBQUlBLFdBQVcsQ0FBQ3pZLEdBQUcsSUFBSXlZLFdBQVcsQ0FBQ3pZLEdBQUcsQ0FBUSxrQkFBa0IsQ0FBQyxFQUFFO2NBQ2pGa1ksU0FBUyxDQUFDalcsSUFBSSxDQUFDd1csV0FBVyxDQUFDO1lBQzVCO1VBQ0Q7UUFDRDtNQUNEO0lBQ0QsQ0FBQztJQUFBdmIsTUFBQSxDQUVEd0Usa0JBQWtCLEdBQWxCLFNBQUFBLGtCQUFrQkEsQ0FBQSxFQUEyQjtNQUM1QyxNQUFNOUcsV0FBVyxHQUFHLElBQUksQ0FBQzZDLDJCQUEyQixDQUFDLENBQUM7TUFDdEQsSUFBSXNJLFlBQW9DLEdBQUcsRUFBRTtNQUM3Q25MLFdBQVcsQ0FBQzZHLFdBQVcsQ0FBQyxDQUFDLENBQUN5RSxPQUFPLENBQUMsVUFBVXBMLFFBQTJCLEVBQUU7UUFDeEVpTCxZQUFZLEdBQUdBLFlBQVksQ0FBQ2tGLE1BQU0sQ0FBQ25RLFFBQVEsQ0FBQ0csY0FBYyxDQUFDLENBQUMsQ0FBQztNQUM5RCxDQUFDLENBQUM7TUFDRixPQUFPOEssWUFBWTtJQUNwQixDQUFDO0lBQUE3SSxNQUFBLENBRUQwRyxhQUFhLEdBQWIsU0FBQUEsYUFBYUEsQ0FBQSxFQUFzQztNQUNsRCxJQUFJeUMsT0FBMEMsR0FBRyxFQUFFO01BQ25ELElBQUksQ0FBQzNFLGtCQUFrQixDQUFDLENBQUMsQ0FBQ3dFLE9BQU8sQ0FBQyxVQUFVL0wsV0FBaUMsRUFBRTtRQUM5RWtNLE9BQU8sR0FBR0EsT0FBTyxDQUFDNEUsTUFBTSxDQUFDOVEsV0FBVyxDQUFDeUYsU0FBUyxDQUFDLENBQXNDLENBQUM7TUFDdkYsQ0FBQyxDQUFDO01BQ0YsT0FBT3lHLE9BQU87SUFDZixDQUFDO0lBQUFuSixNQUFBLENBRUQyRSxXQUFXLEdBQVgsU0FBQUEsV0FBV0EsQ0FBQSxFQUFZO01BQ3RCLE1BQU1rRSxZQUFZLEdBQUcsSUFBSSxDQUFDckUsa0JBQWtCLENBQUMsQ0FBQztNQUM5QyxNQUFNRSxPQUFnQixHQUFHLEVBQUU7TUFDM0IsS0FBSyxJQUFJaEcsVUFBVSxHQUFHLENBQUMsRUFBRUEsVUFBVSxHQUFHbUssWUFBWSxDQUFDalUsTUFBTSxFQUFFOEosVUFBVSxFQUFFLEVBQUU7UUFDeEUsSUFBSSxDQUFDbWMsd0JBQXdCLENBQUNoUyxZQUFZLENBQUNuSyxVQUFVLENBQUMsQ0FBQ2dFLFNBQVMsQ0FBQyxDQUFDLEVBQUVtRyxZQUFZLENBQUNuSyxVQUFVLENBQUMsRUFBRWdHLE9BQU8sQ0FBQztRQUN0RyxJQUFJLENBQUNtVyx3QkFBd0IsQ0FBQ2hTLFlBQVksQ0FBQ25LLFVBQVUsQ0FBQyxDQUFDaUUsYUFBYSxDQUFDLENBQUMsRUFBRWtHLFlBQVksQ0FBQ25LLFVBQVUsQ0FBQyxFQUFFZ0csT0FBTyxDQUFDO01BQzNHO01BQ0EsT0FBT0EsT0FBTztJQUNmLENBQUM7SUFBQTFFLE1BQUEsQ0FFRHdiLFdBQVcsR0FBWCxTQUFBQSxXQUFXQSxDQUFBLEVBQVk7TUFDdEIsTUFBTTNTLFlBQVksR0FBRyxJQUFJLENBQUNyRSxrQkFBa0IsQ0FBQyxDQUFDO01BQzlDLE1BQU1pWCxPQUFnQixHQUFHLEVBQUU7TUFDM0IsS0FBSyxJQUFJL2MsVUFBVSxHQUFHLENBQUMsRUFBRUEsVUFBVSxHQUFHbUssWUFBWSxDQUFDalUsTUFBTSxFQUFFOEosVUFBVSxFQUFFLEVBQUU7UUFDeEUsSUFBSSxDQUFDbWMsd0JBQXdCLENBQUNoUyxZQUFZLENBQUNuSyxVQUFVLENBQUMsQ0FBQ2dFLFNBQVMsQ0FBQyxDQUFDLEVBQUVtRyxZQUFZLENBQUNuSyxVQUFVLENBQUMsRUFBRStjLE9BQU8sRUFBRSxJQUFJLENBQUM7UUFDNUcsSUFBSSxDQUFDWix3QkFBd0IsQ0FBQ2hTLFlBQVksQ0FBQ25LLFVBQVUsQ0FBQyxDQUFDaUUsYUFBYSxDQUFDLENBQUMsRUFBRWtHLFlBQVksQ0FBQ25LLFVBQVUsQ0FBQyxFQUFFK2MsT0FBTyxFQUFFLElBQUksQ0FBQztNQUNqSDtNQUNBLE9BQU9BLE9BQU87SUFDZixDQUFDO0lBQUF6YixNQUFBLENBRURtRixpQkFBaUIsR0FBakIsU0FBQUEsaUJBQWlCQSxDQUFBLEVBQVM7TUFDekIsSUFBSSxDQUFDdUIsYUFBYSxDQUFDLENBQUMsQ0FBQ3NDLE9BQU8sQ0FBQyxVQUFVMFMsTUFBdUMsRUFBUTtRQUNyRixNQUFNQyxRQUFRLEdBQUdELE1BQU0sQ0FBQy9VLFVBQVUsWUFBWThGLFFBQVEsSUFBSWlQLE1BQU0sQ0FBQy9VLFVBQVUsQ0FBQyxDQUFDO1FBQzdFLElBQUlnVixRQUFRLElBQUlBLFFBQVEsQ0FBQzdZLEdBQUcsSUFBSTZZLFFBQVEsQ0FBQzdZLEdBQUcsQ0FBcUIsa0NBQWtDLENBQUMsRUFBRTtVQUNyRyxJQUFJNlksUUFBUSxDQUFDQyxrQkFBa0IsWUFBWW5QLFFBQVEsRUFBRTtZQUNwRGtQLFFBQVEsQ0FBQ0Msa0JBQWtCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQztVQUMxQztRQUNEO01BQ0QsQ0FBQyxDQUFDO0lBQ0g7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTEM7SUFBQTViLE1BQUEsQ0FNQTlFLG9CQUFvQixHQUFwQixTQUFBQSxvQkFBb0JBLENBQUMyZ0IsYUFBc0IsRUFBRUMsVUFBa0IsRUFBYTtNQUMzRSxNQUFNQyxZQUFZLEdBQUdGLGFBQWEsQ0FBQ25qQixTQUFTLENBQUMsQ0FBQztNQUM5QyxJQUFJc2pCLGlCQUFpQixHQUFHLENBQUNELFlBQVksQ0FBQztNQUN0QyxJQUFJRixhQUFhLElBQUlDLFVBQVUsRUFBRTtRQUNoQyxJQUFJQyxZQUFZLENBQUNELFVBQVUsQ0FBQyxFQUFFO1VBQzdCRSxpQkFBaUIsR0FBR0QsWUFBWSxDQUFDRCxVQUFVLENBQUM7VUFDNUMsT0FBT0MsWUFBWSxDQUFDRCxVQUFVLENBQUM7VUFDL0JFLGlCQUFpQixDQUFDalgsSUFBSSxDQUFDZ1gsWUFBWSxDQUFDO1FBQ3JDO01BQ0Q7TUFDQSxPQUFPQyxpQkFBaUI7SUFDekI7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBaGMsTUFBQSxDQUtBaWMsa0JBQWtCLEdBQWxCLFNBQUFBLGtCQUFrQkEsQ0FBQ0MsUUFBZ0IsRUFBUTtNQUMxQyxJQUFJLElBQUksQ0FBQ3ZYLFdBQVcsSUFBSSxJQUFJLENBQUNBLFdBQVcsQ0FBQyxDQUFDLENBQUMvUCxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ3RELE1BQU04UCxPQUFPLEdBQUcsSUFBSSxDQUFDQyxXQUFXLENBQUMsQ0FBQztRQUNsQyxLQUFLLE1BQU1jLElBQUksSUFBSWYsT0FBTyxFQUFFO1VBQzNCeVgsYUFBYSxDQUFDQyxnQkFBZ0IsQ0FBQzNXLElBQUksRUFBRXlXLFFBQVEsQ0FBQztRQUMvQztNQUNEO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FOQztJQUFBbGMsTUFBQSxDQU9BcWMsc0JBQXNCLEdBQXRCLFNBQUFBLHNCQUFzQkEsQ0FDckJDLFlBQXFCLEVBQ3JCQyxZQUE4QixFQUM5QlQsVUFBa0IsRUFDOEM7TUFDaEUsSUFBSVUsV0FBc0IsR0FBRyxFQUFFO1FBQzlCQyxlQUFlLEdBQUcsRUFBRTtRQUNwQnRtQixRQUFRO1FBQ1J1bUIsYUFBcUI7UUFDckJDLFNBQVM7TUFFVixNQUFNQyxTQUFTLEdBQUdOLFlBQVksQ0FBQ3hoQixPQUFPLENBQUMsQ0FBQztNQUN4QyxNQUFNK2hCLFVBQVUsR0FBR1AsWUFBWSxJQUFJQSxZQUFZLENBQUMzaEIsUUFBUSxDQUFDLENBQUMsSUFBSTJoQixZQUFZLENBQUMzaEIsUUFBUSxDQUFDLENBQUMsQ0FBQ0MsWUFBWSxDQUFDLENBQUM7TUFDcEcsTUFBTWtpQixhQUFhLEdBQUdELFVBQVUsSUFBSUEsVUFBVSxDQUFDaGlCLFdBQVcsQ0FBQytoQixTQUFTLENBQUMsQ0FBQ0csT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7O01BRXpGO01BQ0EsSUFBSVIsWUFBWSxJQUFJQSxZQUFZLENBQUMzbkIsTUFBTSxFQUFFO1FBQ3hDdUIsUUFBUSxHQUFHb21CLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDMUJJLFNBQVMsR0FBR3htQixRQUFRLENBQUMyRSxPQUFPLENBQUMsQ0FBQztRQUM5QjRoQixhQUFhLEdBQUdHLFVBQVUsSUFBSUEsVUFBVSxDQUFDaGlCLFdBQVcsQ0FBQzhoQixTQUFTLENBQUMsQ0FBQ0ksT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7UUFFbkZSLFlBQVksQ0FBQ3ZULE9BQU8sQ0FBRWdVLGNBQThCLElBQVc7VUFDOUQsSUFBSWxCLFVBQVUsRUFBRTtZQUNmLE1BQU1FLGlCQUFpQixHQUFHLElBQUksQ0FBQzlnQixvQkFBb0IsQ0FBQzhoQixjQUFjLEVBQUVsQixVQUFVLENBQUM7WUFDL0UsSUFBSUUsaUJBQWlCLEVBQUU7Y0FDdEJRLFdBQVcsR0FBR1IsaUJBQWlCLENBQUM1Z0IsR0FBRyxDQUFDLFVBQVU2aEIsb0JBQTZCLEVBQUU7Z0JBQzVFLE9BQU87a0JBQ05DLFdBQVcsRUFBRUQsb0JBQW9CO2tCQUNqQzVlLFNBQVMsRUFBRSxHQUFHeWUsYUFBYSxJQUFJaEIsVUFBVTtnQkFDMUMsQ0FBQztjQUNGLENBQUMsQ0FBQztZQUNIO1VBQ0QsQ0FBQyxNQUFNO1lBQ05VLFdBQVcsQ0FBQ3pYLElBQUksQ0FBQztjQUNoQm1ZLFdBQVcsRUFBRUYsY0FBYyxDQUFDdGtCLFNBQVMsQ0FBQyxDQUFDO2NBQ3ZDMkYsU0FBUyxFQUFFcWU7WUFDWixDQUFDLENBQUM7VUFDSDtRQUNELENBQUMsQ0FBQztNQUNIO01BQ0FELGVBQWUsQ0FBQzFYLElBQUksQ0FBQztRQUNwQm1ZLFdBQVcsRUFBRVosWUFBWSxDQUFDNWpCLFNBQVMsQ0FBQyxDQUFDO1FBQ3JDMkYsU0FBUyxFQUFFeWU7TUFDWixDQUFDLENBQUM7TUFDRjtNQUNBTCxlQUFlLEdBQUcsSUFBSSxDQUFDaGhCLHNCQUFzQixDQUFDMGhCLG1CQUFtQixDQUFDVixlQUFlLEVBQUVLLGFBQWEsQ0FBQztNQUNqRyxNQUFNTSxZQUFZLEdBQUdwbUIsV0FBVyxDQUFDcW1CLGdDQUFnQyxDQUFDLElBQUlDLGdCQUFnQixDQUFDLENBQUMsRUFBRWIsZUFBZSxFQUFFLElBQUksQ0FBQ3RwQixPQUFPLENBQUMsQ0FBQyxDQUFDO01BQzFIcXBCLFdBQVcsR0FBRyxJQUFJLENBQUMvZ0Isc0JBQXNCLENBQUMwaEIsbUJBQW1CLENBQUNYLFdBQVcsRUFBRU0sYUFBYSxDQUFDO01BQ3pGLE9BQU87UUFDTlMsZ0JBQWdCLEVBQUVILFlBQVk7UUFDOUJJLFVBQVUsRUFBRWhCO01BQ2IsQ0FBQztJQUNGLENBQUM7SUFBQXhjLE1BQUEsQ0FFRFksc0JBQXNCLEdBQXRCLFNBQUFBLHNCQUFzQkEsQ0FBQSxFQUFhO01BQ2xDLE1BQU02YyxTQUFTLEdBQUcsSUFBSSxDQUFDdHFCLE9BQU8sQ0FBQyxDQUFDLENBQUNxRCxXQUFXLENBQUMsQ0FBQztRQUM3Q2tuQixlQUFlLEdBQUdELFNBQVMsQ0FBQ0Usb0JBQW9CO1FBQ2hEQyxlQUFlLEdBQUdGLGVBQWUsSUFBSS9oQixNQUFNLENBQUN0RCxJQUFJLENBQUNxbEIsZUFBZSxDQUFDO1FBQ2pFN1ksWUFBWSxHQUFHLENBQUMsY0FBYyxFQUFFLGtCQUFrQixFQUFFLGVBQWUsQ0FBQztNQUVyRSxJQUFJK1ksZUFBZSxJQUFJQSxlQUFlLENBQUNocEIsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNsRGdwQixlQUFlLENBQUM1VSxPQUFPLENBQUMsVUFBVTZVLElBQUksRUFBRTtVQUN2QyxNQUFNQyxjQUFjLEdBQUdKLGVBQWUsQ0FBQ0csSUFBSSxDQUFvQztVQUMvRSxJQUFJQyxjQUFjLENBQUNDLGNBQWMsS0FBSyxhQUFhLEVBQUU7WUFDcERsWixZQUFZLENBQUNFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztVQUN2QztRQUNELENBQUMsQ0FBQztNQUNIO01BQ0EsT0FBT0YsWUFBWTtJQUNwQjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FMQztJQUFBN0UsTUFBQSxDQU1BbUcscUJBQXFCLEdBQXJCLFNBQUFBLHFCQUFxQkEsQ0FBQ2dNLE9BQXVCLEVBQUVuVCxhQUF3QixFQUFFb0gsV0FBOEIsRUFBUTtNQUM5RyxNQUFNM1AsU0FBUyxHQUFHLElBQUksQ0FBQ3RELE9BQU8sQ0FBQyxDQUFDLENBQUNxRCxXQUFXLENBQUMsQ0FBQyxDQUFDQyxTQUFTO01BQ3hELElBQUlBLFNBQVMsR0FBRyxDQUFDLEVBQUU7UUFDbEIsTUFBTXVuQix1QkFBdUIsR0FBR2hmLGFBQWEsQ0FBQ2hDLFdBQVcsQ0FBQywwQkFBMEIsQ0FBQztRQUNyRixJQUFJZ2hCLHVCQUF1QixFQUFFO1VBQzVCLE1BQU1DLFlBQVksR0FBR0QsdUJBQXVCLENBQUN6WSxVQUFVLENBQUMsQ0FBQztVQUN6RCxJQUFJLENBQUMyWSxTQUFTLENBQUNDLFVBQVUsQ0FBQ0YsWUFBWSxFQUFFRCx1QkFBdUIsQ0FBQztVQUNoRWhmLGFBQWEsQ0FBQ0osV0FBVyxDQUFDLDBCQUEwQixFQUFFLElBQUksQ0FBQztRQUM1RCxDQUFDLE1BQU0sSUFBSXdILFdBQVcsRUFBRTtVQUN2QixJQUFJLENBQUM4WCxTQUFTLENBQUNDLFVBQVUsQ0FBQy9YLFdBQVcsRUFBRStMLE9BQU8sQ0FBQztRQUNoRDtNQUNEO0lBQ0QsQ0FBQztJQUFBblMsTUFBQSxDQUVEcVMseUNBQXlDLEdBQXpDLFNBQUFBLHlDQUF5Q0EsQ0FBQSxFQUFTO01BQ2pELE1BQU1uYyxLQUFLLEdBQUcsSUFBSSxDQUFDL0MsT0FBTyxDQUFDLENBQUM7TUFDNUIsTUFBTTJKLHFCQUFxQixHQUFHNUcsS0FBSyxDQUFDdUUsaUJBQWlCLENBQUMsVUFBVSxDQUF5QjtNQUN6RixNQUFNMmpCLFdBQVcsR0FBR3BuQixXQUFXLENBQUNxbkIsNkNBQTZDLENBQzVFbm9CLEtBQUssQ0FBQ00sV0FBVyxDQUFDLENBQUMsRUFDbkIsSUFBSSxDQUFDdUwsZUFBZSxDQUFDLENBQUMsQ0FBQ3VjLGlCQUFpQixDQUFDLENBQUMsQ0FBQ0MsWUFBWSxDQUFDLENBQ3pELENBQUM7TUFDRCxNQUFNQyxjQUFjLEdBQUcsSUFBSSxDQUFDemMsZUFBZSxDQUFDLENBQUMsQ0FBQ2dLLGdCQUFnQixDQUFDLENBQUM7TUFDaEUsTUFBTXVRLFlBQVksR0FBR3BtQixLQUFLLElBQUlBLEtBQUssQ0FBQ3VFLGlCQUFpQixDQUFDLENBQUM7TUFDdkRxQyxxQkFBcUIsQ0FBQzhCLFdBQVcsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLENBQUMsQ0FBQztNQUM5RCxJQUFJMGQsWUFBWSxFQUFFO1FBQ2pCQSxZQUFZLENBQ1Z2SCxhQUFhLENBQUMsQ0FBQyxDQUNmbmIsSUFBSSxDQUFDLFVBQVV4QixLQUFhLEVBQUU7VUFDOUIsT0FBT3FtQixVQUFVLENBQUNMLFdBQVcsRUFBRWhtQixLQUFLLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQ0QyQixLQUFLLENBQUMsVUFBVWtWLE1BQWUsRUFBRTtVQUNqQzNWLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDLGtEQUFrRCxFQUFFMFYsTUFBZ0IsQ0FBQztRQUNoRixDQUFDLENBQUM7TUFDSjs7TUFFQTtBQUNGO0FBQ0E7TUFDRSxTQUFTeVAsU0FBU0EsQ0FBQ3pQLE1BQWMsRUFBUTtRQUN4QzNWLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDMFYsTUFBTSxDQUFDO01BQ2xCO01BRUEsU0FBUzBQLG1CQUFtQkEsQ0FBQ0MsRUFBVSxFQUFFQyxlQUEwQyxFQUFRO1FBQzFGLE1BQU1DLE9BQU8sR0FBR0YsRUFBRTtRQUNsQjtRQUNBLElBQUlDLGVBQWUsSUFBSUEsZUFBZSxDQUFDanFCLE1BQU0sS0FBSyxDQUFDLElBQUlpcUIsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDRSxTQUFTLEVBQUU7VUFDcEZqaUIscUJBQXFCLENBQUM4QixXQUFXLENBQUMseUJBQXlCa2dCLE9BQU8sRUFBRSxFQUFFLElBQUksQ0FBQztRQUM1RTtNQUNEOztNQUVBO0FBQ0Y7QUFDQTtBQUNBO01BQ0UsU0FBU0wsVUFBVUEsQ0FDbEJPLGNBT0MsRUFDREMsU0FBaUIsRUFDVjtRQUNQLEtBQUssTUFBTS9lLEdBQUcsSUFBSThlLGNBQWMsRUFBRTtVQUNqQyxNQUFNRSxVQUFVLEdBQUdGLGNBQWMsQ0FBQzllLEdBQUcsQ0FBQztVQUN0QyxNQUFNMUUsT0FBZ0MsR0FBRyxDQUFDLENBQUM7VUFDM0MsTUFBTTJqQixLQUFLLEdBQUdqcEIsS0FBSyxDQUFDeUgsSUFBSSxDQUFDdUMsR0FBRyxDQUFDO1VBQzdCLElBQUksQ0FBQ2lmLEtBQUssRUFBRTtZQUNYO1lBQ0E7VUFDRDtVQUNBLE1BQU1DLFlBQVksR0FBR0QsS0FBSyxDQUFDMWtCLGlCQUFpQixDQUFDLENBQUM7VUFDOUMsTUFBTTRrQixTQUFpQixHQUFHRCxZQUFZLElBQUlBLFlBQVksQ0FBQzFtQixTQUFTLENBQUMsQ0FBQztVQUNsRSxJQUFJNG1CLGFBQXNDLEdBQUdDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRU4sU0FBUyxFQUFFSSxTQUFTLENBQTRCO1VBQ3ZHO1VBQ0EsSUFBSUgsVUFBVSxDQUFDN2lCLHFCQUFxQixFQUFFO1lBQ3JDLE1BQU10QixzQkFBc0IsR0FBR21rQixVQUFVLENBQUM3aUIscUJBQXFCO1lBQy9ELEtBQUssTUFBTW9KLElBQUksSUFBSTFLLHNCQUFzQixFQUFFO2NBQzFDLE1BQU15a0IsUUFBUSxHQUFHemtCLHNCQUFzQixDQUFDMEssSUFBSSxDQUFDO2NBQzdDLE1BQU1nYSxhQUFhLEdBQUdELFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBRSxlQUFlLENBQUM7Y0FDakUsTUFBTUUsZUFBZSxHQUFHRixRQUFRLENBQUMsd0JBQXdCLENBQUU7Y0FDM0QsSUFBSUMsYUFBYSxLQUFLQyxlQUFlLEVBQUU7Z0JBQ3RDLElBQUlKLGFBQWEsQ0FBQ0ssY0FBYyxDQUFDRixhQUFhLENBQUMsRUFBRTtrQkFDaEQsTUFBTUcsV0FBb0MsR0FBRyxDQUFDLENBQUM7a0JBQy9DQSxXQUFXLENBQUNGLGVBQWUsQ0FBQyxHQUFHSixhQUFhLENBQUNHLGFBQWEsQ0FBQztrQkFDM0RILGFBQWEsR0FBR0MsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFRCxhQUFhLEVBQUVNLFdBQVcsQ0FBNEI7a0JBQ2hGLE9BQU9OLGFBQWEsQ0FBQ0csYUFBYSxDQUFDO2dCQUNwQztjQUNEO1lBQ0Q7VUFDRDtVQUVBLElBQUlILGFBQWEsRUFBRTtZQUNsQixLQUFLLE1BQU16QixJQUFJLElBQUl5QixhQUFhLEVBQUU7Y0FDakMsSUFBSSxDQUFDekIsSUFBSSxDQUFDMUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMwRSxJQUFJLENBQUM5SCxRQUFRLENBQUMsZUFBZSxDQUFDLEVBQUU7Z0JBQzdEdmEsT0FBTyxDQUFDcWlCLElBQUksQ0FBQyxHQUFHeUIsYUFBYSxDQUFDekIsSUFBSSxDQUFDO2NBQ3BDO1lBQ0Q7VUFDRDtVQUNBO1VBQ0FXLGNBQWMsQ0FDWnFCLHFCQUFxQixDQUFDLENBQ3RCO1lBQ0N6TyxNQUFNLEVBQUU7Y0FDUG5WLGNBQWMsRUFBRWlqQixVQUFVLENBQUNqakIsY0FBYztjQUN6Q0MsTUFBTSxFQUFFZ2pCLFVBQVUsQ0FBQ2hqQjtZQUNwQixDQUFDO1lBQ0Q0akIsTUFBTSxFQUFFdGtCO1VBQ1QsQ0FBQyxDQUNELENBQUMsQ0FDRDVCLElBQUksQ0FBRW1tQixNQUFNLElBQUs7WUFDakIsT0FBT3BCLG1CQUFtQixDQUFDemUsR0FBRyxFQUFFNmYsTUFBTSxDQUFDO1VBQ3hDLENBQUMsQ0FBQyxDQUNEaG1CLEtBQUssQ0FBQzJrQixTQUFTLENBQUM7UUFDbkI7TUFDRDtJQUNELENBQUM7SUFBQTFlLE1BQUEsQ0FFRGdnQixvQkFBb0IsR0FBcEIsU0FBQUEsb0JBQW9CQSxDQUFBLEVBQXVCO01BQzFDLE1BQU0vWCxVQUFVLEdBQUcsSUFBSSxDQUFDMUgsMkJBQTJCLENBQUMsQ0FBQztNQUNyRCxNQUFNMGYsZUFBZSxHQUFHaFksVUFBVSxDQUFDRyxjQUFjLENBQUMsQ0FBaUM7TUFDbkYsTUFBTUQsT0FBTyxHQUFHOFgsZUFBZSxFQUFFNVgsVUFBVSxDQUFDLENBQUM7TUFDN0MsSUFBSTZYLGVBQW1DO01BRXZDLEtBQUssTUFBTWhrQixNQUFNLElBQUlpTSxPQUFPLEVBQUU7UUFDN0IsSUFBSWpNLE1BQU0sQ0FBQzRHLEdBQUcsQ0FBc0Isc0NBQXNDLENBQUMsRUFBRTtVQUM1RSxNQUFNcWQsTUFBTSxHQUFHamtCLE1BQU0sQ0FBQ3lLLFVBQVUsQ0FBQyxDQUF1QjtVQUN4RCxJQUFJd1osTUFBTSxJQUFJQSxNQUFNLENBQUNqb0IsS0FBSyxDQUFDLENBQUMsQ0FBQ2tvQixRQUFRLENBQUMscUJBQXFCLENBQUMsRUFBRTtZQUM3REYsZUFBZSxHQUFHQyxNQUFNO1lBQ3hCO1VBQ0Q7UUFDRDtNQUNEO01BRUEsT0FBT0QsZUFBZTtJQUN2Qjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FYQztJQUFBbGdCLE1BQUEsQ0FZQW9CLGdDQUFnQyxHQUFoQyxTQUFBQSxnQ0FBZ0NBLENBQUEsRUFBUztNQUN4QyxNQUFNOFMsWUFBWSxHQUFHLElBQUksQ0FBQ25TLGVBQWUsQ0FBQyxDQUFDO01BQzNDbVMsWUFBWSxFQUNUbU0sb0JBQW9CLENBQUMsQ0FBQyxFQUN0QnptQixJQUFJLENBQUUwbUIsYUFBZ0MsSUFBSztRQUM1QyxJQUFJLENBQUNBLGFBQWEsQ0FBQ0MsZUFBZSxJQUFJLENBQUNELGFBQWEsQ0FBQ0MsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDcEgsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1VBQzlGO1FBQ0Q7O1FBRUE7UUFDQSxNQUFNMWlCLFNBQVMsR0FBRyxJQUFJLENBQUN0RCxPQUFPLENBQUMsQ0FBQyxDQUFDcUQsV0FBVyxDQUFDLENBQUMsQ0FBQ0MsU0FBUztRQUN4RCxNQUFNK3BCLG9CQUFvQixHQUN6QkYsYUFBYSxDQUFDQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBR0UsUUFBUSxDQUFDSCxhQUFhLENBQUNDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQ0csS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNsSCxJQUFJQyxLQUFLLENBQUNILG9CQUFvQixDQUFDLElBQUkvcEIsU0FBUyxLQUFLK3BCLG9CQUFvQixFQUFFO1VBQ3RFO1FBQ0Q7O1FBRUE7UUFDQSxJQUFJdE0sWUFBWSxDQUFDME0sd0JBQXdCLENBQUMsQ0FBQyxLQUFLeHZCLHFCQUFxQixDQUFDeXZCLFVBQVUsRUFBRTtVQUNqRjNNLFlBQVksQ0FBQzRNLHdCQUF3QixDQUFDMXZCLHFCQUFxQixDQUFDMnZCLGdCQUFnQixDQUFDLENBQUMsQ0FBQztRQUNoRixDQUFDLE1BQU07VUFDTjtRQUNEOztRQUVBO1FBQ0EsTUFBTUMsa0JBQWtCLEdBQUc5TSxZQUFZLENBQUMvSCwwQkFBMEIsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQzZVLGtCQUFrQixFQUFFQyx1QkFBdUIsQ0FBQ0MsY0FBYyxFQUFFO1VBQ2hFNW5CLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDLDBGQUEwRixDQUFDO1VBQ3JHO1FBQ0Q7O1FBRUE7UUFDQSxNQUFNMm1CLGVBQWUsR0FBRyxJQUFJLENBQUNGLG9CQUFvQixDQUFDLENBQUM7UUFFbkQsSUFBSUUsZUFBZSxJQUFJQSxlQUFlLENBQUNqaUIsVUFBVSxDQUFDLENBQUMsSUFBSWlpQixlQUFlLENBQUM1WCxVQUFVLENBQUMsQ0FBQyxFQUFFO1VBQ3BGNFgsZUFBZSxDQUFDaUIsU0FBUyxDQUFDLENBQUM7VUFDM0I7UUFDRCxDQUFDLE1BQU07VUFDTjduQixHQUFHLENBQUNDLEtBQUssQ0FDUix1SEFDRCxDQUFDO1VBQ0Q7UUFDRDtNQUNELENBQUMsQ0FBQyxDQUNEUSxLQUFLLENBQUVSLEtBQWMsSUFBSztRQUMxQkQsR0FBRyxDQUFDQyxLQUFLLENBQUMsd0VBQXdFLEVBQUVBLEtBQWUsQ0FBQztNQUNyRyxDQUFDLENBQUM7SUFDSixDQUFDO0lBQUEsT0FBQWpJLG9CQUFBO0VBQUEsRUEzcURpQ3lTLGNBQWMsR0FBQTdPLFdBQUEsR0FBQWtzQix5QkFBQSxDQUFBN3NCLE9BQUEsQ0FBQTBMLFNBQUEsa0JBQUF4TyxLQUFBO0lBQUE0dkIsWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUFyc0IsWUFBQSxHQUFBaXNCLHlCQUFBLENBQUE3c0IsT0FBQSxDQUFBMEwsU0FBQSxZQUFBck8sS0FBQTtJQUFBeXZCLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBcHNCLFlBQUEsR0FBQWdzQix5QkFBQSxDQUFBN3NCLE9BQUEsQ0FBQTBMLFNBQUEsZUFBQWpPLEtBQUE7SUFBQXF2QixZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQW5zQixZQUFBLEdBQUErckIseUJBQUEsQ0FBQTdzQixPQUFBLENBQUEwTCxTQUFBLGdCQUFBOU4sS0FBQTtJQUFBa3ZCLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBbHNCLFlBQUEsR0FBQThyQix5QkFBQSxDQUFBN3NCLE9BQUEsQ0FBQTBMLFNBQUEscUJBQUEzTixLQUFBO0lBQUErdUIsWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUFqc0IsWUFBQSxHQUFBNnJCLHlCQUFBLENBQUE3c0IsT0FBQSxDQUFBMEwsU0FBQSw0QkFBQXhOLEtBQUE7SUFBQTR1QixZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQWhzQixZQUFBLEdBQUE0ckIseUJBQUEsQ0FBQTdzQixPQUFBLENBQUEwTCxTQUFBLDJCQUFBck4sS0FBQTtJQUFBeXVCLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBL3JCLFlBQUEsR0FBQTJyQix5QkFBQSxDQUFBN3NCLE9BQUEsQ0FBQTBMLFNBQUEsNkJBQUFsTixLQUFBO0lBQUFzdUIsWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUE5ckIsWUFBQSxHQUFBMHJCLHlCQUFBLENBQUE3c0IsT0FBQSxDQUFBMEwsU0FBQSxnQkFBQTFNLE1BQUE7SUFBQTh0QixZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQTdyQixhQUFBLEdBQUF5ckIseUJBQUEsQ0FBQTdzQixPQUFBLENBQUEwTCxTQUFBLGdCQUFBdk0sTUFBQTtJQUFBMnRCLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBSix5QkFBQSxDQUFBN3NCLE9BQUEsQ0FBQTBMLFNBQUEsc0JBQUFwTSxNQUFBLEVBQUFFLE1BQUEsR0FBQTRILE1BQUEsQ0FBQThsQix3QkFBQSxDQUFBbHRCLE9BQUEsQ0FBQTBMLFNBQUEsc0JBQUExTCxPQUFBLENBQUEwTCxTQUFBLEdBQUFtaEIseUJBQUEsQ0FBQTdzQixPQUFBLENBQUEwTCxTQUFBLGtCQUFBaE0sTUFBQSxFQUFBQyxNQUFBLEdBQUF5SCxNQUFBLENBQUE4bEIsd0JBQUEsQ0FBQWx0QixPQUFBLENBQUEwTCxTQUFBLGtCQUFBMUwsT0FBQSxDQUFBMEwsU0FBQSxHQUFBMUwsT0FBQSxNQUFBRCxNQUFBO0VBQUEsT0F3OERsQ2hELG9CQUFvQjtBQUFBIiwiaWdub3JlTGlzdCI6W119
|