@sapui5/sap.fe.macros 1.139.1 → 1.139.4
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/macros/.library +1 -1
- package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
- package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +8 -8
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +7 -7
- package/src/sap/fe/macros/filterBar/FilterBarAPI.js +5 -3
- package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +13 -3
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +4 -3
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +3 -2
- package/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +6 -2
- package/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +5 -1
- package/src/sap/fe/macros/library.js +1 -1
- package/src/sap/fe/macros/mdc/adapter/StateHelper.js +11 -1
- package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +16 -1
- package/src/sap/fe/macros/visualfilters/VisualFilter.js +20 -2
- package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +28 -6
|
@@ -447,7 +447,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/BindingToolki
|
|
|
447
447
|
}
|
|
448
448
|
};
|
|
449
449
|
_proto.getTitle = function getTitle() {
|
|
450
|
-
|
|
450
|
+
const titleControl = _jsx(Title, {
|
|
451
451
|
id: generate([this._contentId, "MeasureDimensionTitle"]),
|
|
452
452
|
text: this.measureDimensionTitle,
|
|
453
453
|
tooltip: this.toolTip,
|
|
@@ -455,6 +455,10 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/BindingToolki
|
|
|
455
455
|
level: "H3",
|
|
456
456
|
class: "sapUiTinyMarginEnd sapUiNoMarginBegin"
|
|
457
457
|
});
|
|
458
|
+
|
|
459
|
+
// Attach event delegates after the controls are rendered and view is available
|
|
460
|
+
this._attachTitleEventDelegates(titleControl);
|
|
461
|
+
return titleControl;
|
|
458
462
|
};
|
|
459
463
|
_proto.getUoMTitle = function getUoMTitle(showErrorExpression) {
|
|
460
464
|
if (this.UoMVisibility) {
|
|
@@ -530,6 +534,20 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/BindingToolki
|
|
|
530
534
|
}
|
|
531
535
|
}
|
|
532
536
|
|
|
537
|
+
/**
|
|
538
|
+
* Attaches mouseover and mouseout event delegates to the measure dimension title.
|
|
539
|
+
* This creates dynamic tooltips that combine measure titles with scale/UOM information.
|
|
540
|
+
* @param titlecontrol The title control to which event delegates are attached.
|
|
541
|
+
*/;
|
|
542
|
+
_proto._attachTitleEventDelegates = function _attachTitleEventDelegates(titlecontrol) {
|
|
543
|
+
titlecontrol.addEventDelegate({
|
|
544
|
+
onmouseover: _evt => {
|
|
545
|
+
const tooltip = titlecontrol.getTooltip();
|
|
546
|
+
titlecontrol.getDomRef()?.setAttribute("title", tooltip);
|
|
547
|
+
}
|
|
548
|
+
}, this);
|
|
549
|
+
}
|
|
550
|
+
|
|
533
551
|
/**
|
|
534
552
|
* Sets the enablement of the visual filter chart binding.
|
|
535
553
|
* @param enableBinding Boolean indicating whether to enable or disable the chart binding.
|
|
@@ -777,4 +795,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/BindingToolki
|
|
|
777
795
|
_exports = VisualFilter;
|
|
778
796
|
return _exports;
|
|
779
797
|
}, false);
|
|
780
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJWaXN1YWxGaWx0ZXIiLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsImltcGxlbWVudEludGVyZmFjZSIsIl9kZWMzIiwicHJvcGVydHkiLCJ0eXBlIiwiX2RlYzQiLCJfZGVjNSIsImV2ZW50IiwiX2RlYzYiLCJyZXF1aXJlZCIsIl9kZWM3IiwiX2RlYzgiLCJfZGVjOSIsIl9kZWMxMCIsIl9kZWMxMSIsIl9kZWMxMiIsIl9kZWMxMyIsIl9kZWMxNCIsIl9kZWMxNSIsIl9kZWMxNiIsIl9kZWMxNyIsIl9kZWMxOCIsIl9kZWMxOSIsIl9kZWMyMCIsIl9kZWMyMSIsIl9kZWMyMiIsIl9kZWMyMyIsIl9kZWMyNCIsIl9kZWMyNSIsIl9kZWMyNiIsIl9kZWMyNyIsIl9kZWMyOCIsIl9kZWMyOSIsIl9kZWMzMCIsIl9kZWMzMSIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQnVpbGRpbmdCbG9jayIsInByb3BzIiwib3RoZXJzIiwiX3RoaXMiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsIl9kZXNjcmlwdG9yMyIsIl9kZXNjcmlwdG9yNCIsIl9kZXNjcmlwdG9yNSIsIl9kZXNjcmlwdG9yNiIsIl9kZXNjcmlwdG9yNyIsIl9kZXNjcmlwdG9yOCIsIl9kZXNjcmlwdG9yOSIsIl9kZXNjcmlwdG9yMTAiLCJfZGVzY3JpcHRvcjExIiwiX2Rlc2NyaXB0b3IxMiIsIl9kZXNjcmlwdG9yMTMiLCJfZGVzY3JpcHRvcjE0IiwiX2Rlc2NyaXB0b3IxNSIsIl9kZXNjcmlwdG9yMTYiLCJfZGVzY3JpcHRvcjE3IiwiX2Rlc2NyaXB0b3IxOCIsIl9kZXNjcmlwdG9yMTkiLCJfZGVzY3JpcHRvcjIwIiwiX2Rlc2NyaXB0b3IyMSIsIl9kZXNjcmlwdG9yMjIiLCJfZGVzY3JpcHRvcjIzIiwiX2Rlc2NyaXB0b3IyNCIsIl9kZXNjcmlwdG9yMjUiLCJfZGVzY3JpcHRvcjI2IiwiX2Rlc2NyaXB0b3IyNyIsIl9kZXNjcmlwdG9yMjgiLCJfZGVzY3JpcHRvcjI5IiwiX2Rlc2NyaXB0b3IzMCIsImluUGFyYW1Db25kaXRpb25VcGRhdGVQZW5kaW5nIiwicmVuZGVyaW5nVXBkYXRlUGVuZGluZyIsIl9leHBvcnRzIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJvbk1ldGFkYXRhQXZhaWxhYmxlIiwiX293bmVyQ29tcG9uZW50IiwiZ3JvdXBJZCIsInBhdGgiLCJtZXRhUGF0aCIsIm93bmVyIiwiX2dldE93bmVyIiwiY29udGV4dFBhdGgiLCJwcmVwcm9jZXNzb3JDb250ZXh0IiwiZnVsbENvbnRleHRQYXRoIiwiY29udGV4dE9iamVjdFBhdGgiLCJnZXREYXRhTW9kZWxPYmplY3RGb3JNZXRhUGF0aCIsIl9yZXNvbHZlZENvbnRleHRQYXRoIiwiZW5kc1dpdGgiLCJtZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJkaWFnbm9zdGljcyIsImdldEFwcENvbXBvbmVudCIsImdldERpYWdub3N0aWNzIiwidmlld0RhdGEiLCJnZXRSb290Q29udHJvbGxlciIsImdldFZpZXciLCJnZXRWaWV3RGF0YSIsImNvbnZlcnRlckNvbnRleHQiLCJDb252ZXJ0ZXJDb250ZXh0IiwiY3JlYXRlQ29udmVydGVyQ29udGV4dEZvck1hY3JvIiwic3RhcnRpbmdFbnRpdHlTZXQiLCJuYW1lIiwibWVyZ2UiLCJjb250ZXh0TG9jYXRpb24iLCJNYW5pZmVzdFdyYXBwZXIiLCJhZ2dyZWdhdGlvbkhlbHBlciIsIkFnZ3JlZ2F0aW9uSGVscGVyIiwiZ2V0RW50aXR5VHlwZSIsImN1c3RvbUFnZ3JlZ2F0ZXMiLCJnZXRDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9ucyIsInB2QW5ub3RhdGlvbiIsInRhcmdldE9iamVjdCIsIm1lYXN1cmUiLCJ2aXN1YWxpemF0aW9ucyIsIlZpc3VhbGl6YXRpb25zIiwiZ2V0Q2hhcnRBbm5vdGF0aW9uIiwiYWdncmVnYXRpb25zIiwiY3VzdEFnZ01lYXN1cmUiLCJjaGFydEFubm90YXRpb24iLCJNZWFzdXJlcyIsImxlbmd0aCIsImZpbHRlciIsImN1c3RBZ2ciLCJxdWFsaWZpZXIiLCJ2YWx1ZSIsImdldEFnZ3JlZ2F0ZWRQcm9wZXJ0aWVzIiwiRHluYW1pY01lYXN1cmVzIiwiTG9nIiwid2FybmluZyIsImdldENvbnZlcnRlckNvbnRleHRGb3IiLCJnZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsIk5hbWUiLCJ0b1N0cmluZyIsImdldEFnZ3JlZ2F0ZWRQcm9wZXJ0eSIsInNvbWUiLCJjdXN0b21BZ2dyZWdhdGUiLCJkZWZhdWx0U2VsZWN0aW9uVmFyaWFudCIsImdldERlZmF1bHRTZWxlY3Rpb25WYXJpYW50IiwiY2hlY2tTZWxlY3Rpb25WYXJpYW50IiwiYWdncmVnYXRpb24iLCJnZXRBZ2dyZWdhdGVQcm9wZXJ0aWVzIiwiYWdncmVnYXRlUHJvcGVydGllcyIsInByb3BlcnR5QW5ub3RhdGlvbnMiLCIkdGFyZ2V0IiwiYW5ub3RhdGlvbnMiLCJhZ2dyZWdhdGFibGVQcm9wZXJ0eUFubm90YXRpb25zIiwiQWdncmVnYXRhYmxlUHJvcGVydHkiLCJjaGVja0lmVU9NSGFzQ3VzdG9tQWdncmVnYXRlIiwicHJvcGVydHlIaWRkZW4iLCJVSSIsIkhpZGRlbiIsImhpZGRlbk1lYXN1cmUiLCJ2YWx1ZU9mIiwiY2hhcnRUeXBlIiwiQ2hhcnRUeXBlIiwic2hvd1ZhbHVlSGVscEJ1dHRvbiIsImdldHNob3dWYWx1ZUhlbHBCdXR0b24iLCJkcmFmdFN1cHBvcnRlZCIsIk1vZGVsSGVscGVyIiwiaXNEcmFmdFN1cHBvcnRlZCIsImVycm9yTWVzc2FnZSIsImdldEVycm9yTWVzc2FnZSIsImNoYXJ0TWVhc3VyZSIsIm1lYXN1cmVEaW1lbnNpb25UaXRsZSIsIkludGVyYWN0aXZlQ2hhcnRIZWxwZXIiLCJnZXRNZWFzdXJlRGltZW5zaW9uVGl0bGUiLCJjb2xsZWN0aW9uIiwidG9vbFRpcCIsImdldFRvb2xUaXAiLCJyZW5kZXJMaW5lQ2hhcnQiLCJVb01WaXNpYmlsaXR5IiwiZ2V0VW9NVmlzaWJsaXR5Iiwic2hvd0Vycm9yIiwic2NhbGVVb01UaXRsZSIsImdldFNjYWxlVW9NVGl0bGUiLCJzb3J0T3JkZXIiLCJTb3J0T3JkZXIiLCJmaWx0ZXJDb3VudEJpbmRpbmciLCJnZXRmaWx0ZXJDb3VudEJpbmRpbmciLCJ2aWV3SWQiLCJnZXRQYWdlQ29udHJvbGxlciIsImdldElkIiwiX2NvbnRlbnRJZCIsImlkIiwic2VsZWN0aW9uVmFyaWFudCIsInNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwidW5kZWZpbmVkIiwiY29udGVudCIsImNyZWF0ZUNvbnRlbnQiLCJtZWFzdXJlcyIsImFnZ3JlZ2F0YWJsZVByb3BlcnR5TWVhc3VyZXMiLCJVT00iLCJnZXRVb00iLCJVb01IYXNDdXN0b21BZ2dyZWdhdGUiLCJ2aXN1YWxpemF0aW9uIiwic0Fubm90YXRpb25QYXRoIiwiZ2V0RW50aXR5VHlwZUFubm90YXRpb24iLCJhbm5vdGF0aW9uIiwic2V0U2hvd1ZhbHVlSGVscCIsImJTaG93VmFsdWVIZWxwIiwiaXNBIiwiZ2V0SXRlbXMiLCJvVmlzdWFsRmlsdGVyQ29udHJvbCIsImdldFZpc3VhbEZpbHRlckNvbnRyb2wiLCJnZXRDb250ZW50Iiwib0lubmVyQ29udHJvbCIsInNldFZpc2libGUiLCJzZXRQcm9wZXJ0eSIsInNldFZhbHVlSGVscEljb25TcmMiLCJzSWNvblNyYyIsInNldEljb24iLCJ2YWxpZENoYXJ0VHlwZSIsImVycm9yTWVzc2FnZVRpdGxlIiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJzRGltZW5zaW9uVHlwZSIsIkRpbWVuc2lvbnMiLCJpc1ZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcyIsIlNlbGVjdE9wdGlvbnMiLCJtdWx0aXBsZVNlbGVjdGlvbkFsbG93ZWQiLCJzZWxlY3RPcHRpb24iLCJQcm9wZXJ0eU5hbWUiLCJSYW5nZXMiLCJlcnJvciIsIm1hdGNoZWRBZ2dyZWdhdGUiLCJhZ2dyZWdhdGUiLCJJU09DdXJyZW5jeSIsInVuaXQiLCJVbml0IiwiZ2V0UmVxdWlyZWQiLCJfanN4IiwiTGFiZWwiLCJ0ZXh0Iiwid2lkdGgiLCJjaGlsZHJlbiIsImxheW91dERhdGEiLCJPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIiwicHJpb3JpdHkiLCJPdmVyZmxvd1Rvb2xiYXJQcmlvcml0eSIsIk5ldmVyT3ZlcmZsb3ciLCJnZXRUaXRsZSIsIlRpdGxlIiwiZ2VuZXJhdGUiLCJ0b29sdGlwIiwidGl0bGVTdHlsZSIsImxldmVsIiwiY2xhc3MiLCJnZXRVb01UaXRsZSIsInNob3dFcnJvckV4cHJlc3Npb24iLCJ2aXNpYmxlIiwiY29tcGlsZUV4cHJlc3Npb24iLCJpZkVsc2UiLCJyZXNvbHZlQmluZGluZ1N0cmluZyIsImdldFRvb2xCYXJTcGFjZXIiLCJUb29sYmFyU3BhY2VyIiwiZ2V0VmFsdWVIZWxwIiwiQnV0dG9uIiwiYXJpYUhhc1BvcHVwIiwiZW5hYmxlZCIsInByZXNzIiwiVmlzdWFsRmlsdGVyUnVudGltZSIsImZpcmVWYWx1ZUhlbHAiLCJjdXN0b21EYXRhIiwiQ3VzdG9tRGF0YSIsImdldFRvb2xiYXIiLCJPdmVyZmxvd1Rvb2xiYXIiLCJzdHlsZSIsIl9qc3hzIiwiX0ZyYWdtZW50IiwiX2hhbmRsZUluUGFyYW1zQ2hhcnRCaW5kaW5nRW5hYmxlbWVudCIsImNoYW5nZWRGaWx0ZXJGaWVsZFBhdGhzIiwiaW5QYXJhbWV0ZXJzIiwiZ2V0UHJvcGVydHkiLCJpblBhcmFtZXRlckxvY2FsRGF0YVByb3BlcnRpZXMiLCJtYXAiLCJpblBhcmFtZXRlciIsImxvY2FsRGF0YVByb3BlcnR5IiwidmZJblBhcmFtZXRlclVwZGF0ZUV4cGVjdGVkIiwiaW5jbHVkZXMiLCJfc2V0SW50ZXJuYWxVcGRhdGVQZW5kaW5nIiwic2V0RW5hYmxlQ2hhcnRCaW5kaW5nIiwiZW5hYmxlQmluZGluZyIsImFyZ3VtZW50cyIsImludGVybmFsVXBkYXRlUGVuZGluZyIsIm92ZXJhbGxFbmFibGVCaW5kaW5nIiwiY2hhcnRCaW5kaW5nIiwiZ2V0Q2hhcnRCaW5kaW5nIiwiaXNTdXNwZW5kZWQiLCJyZXN1bWUiLCJzdXNwZW5kIiwiY29uZGl0aW9uVXBkYXRlUGVuZGluZyIsImlzQmluZGluZ0VuYWJsZWRGb3JWaXN1YWxGaWx0ZXJFeHRlcm5hbGx5IiwiZW5hYmxlQ2hhcnRCaW5kaW5nIiwidXBkYXRlUGVuZGluZyIsImNvenlNb2RlIiwiZG9jdW1lbnQiLCJib2R5IiwiY2xhc3NMaXN0IiwiY29udGFpbnMiLCJvdmVyYWxsSGVpZ2h0IiwiY2hhcnRIZWlnaHQiLCJ2ZkNvbnRyb2xJZCIsIlZpc3VhbEZpbHRlckNvbnRyb2wiLCJoZWlnaHQiLCJpdGVtcyIsIlZCb3giLCJnZXRWaXN1YWxGaWx0ZXJDaGFydCIsIkJ1aWxkaW5nQmxvY2siLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlZpc3VhbEZpbHRlci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uUGF0aCwgUGF0aEFubm90YXRpb25FeHByZXNzaW9uIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEN1c3RvbUFnZ3JlZ2F0ZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQWdncmVnYXRpb25cIjtcbmltcG9ydCB0eXBlIHsgQWdncmVnYXRlZFByb3BlcnR5LCBBZ2dyZWdhdGVkUHJvcGVydHlUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9BbmFseXRpY3NcIjtcbmltcG9ydCB7IFNvcnRPcmRlclR5cGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUFubm90YXRpb25zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9FZG1fVHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlBbm5vdGF0aW9uc19NZWFzdXJlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvTWVhc3VyZXNfRWRtXCI7XG5pbXBvcnQgdHlwZSB7IENoYXJ0LCBEYXRhUG9pbnQsIExpbmVJdGVtLCBQcmVzZW50YXRpb25WYXJpYW50LCBTZWxlY3Rpb25WYXJpYW50IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgbWVyZ2UgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uLCBpZkVsc2UsIHJlc29sdmVCaW5kaW5nU3RyaW5nIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXZlbnQsIGltcGxlbWVudEludGVyZmFjZSwgcHJvcGVydHksIHR5cGUgUHJvcGVydGllc09mIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IFRlbXBsYXRlQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9UZW1wbGF0ZUNvbXBvbmVudFwiO1xuaW1wb3J0IEJ1aWxkaW5nQmxvY2sgZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL0J1aWxkaW5nQmxvY2tcIjtcbmltcG9ydCBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB7IEJhc2VNYW5pZmVzdFNldHRpbmdzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IE1hbmlmZXN0V3JhcHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFdyYXBwZXJcIjtcbmltcG9ydCB7IFBhZ2VDb250ZXh0UGF0aFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0U2VsZWN0aW9uVmFyaWFudCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9EYXRhVmlzdWFsaXphdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBQYXJhbWV0ZXJUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvTGlzdFJlcG9ydC9WaXN1YWxGaWx0ZXJzXCI7XG5pbXBvcnQgeyBBZ2dyZWdhdGlvbkhlbHBlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQWdncmVnYXRpb25cIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IHsgVmlld0RhdGEgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvVGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgRGlhZ25vc3RpY3MgZnJvbSBcInNhcC9mZS9jb3JlL3N1cHBvcnQvRGlhZ25vc3RpY3NcIjtcbmltcG9ydCB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBMYWJlbCBmcm9tIFwic2FwL20vTGFiZWxcIjtcbmltcG9ydCBPdmVyZmxvd1Rvb2xiYXIgZnJvbSBcInNhcC9tL092ZXJmbG93VG9vbGJhclwiO1xuaW1wb3J0IE92ZXJmbG93VG9vbGJhckxheW91dERhdGEgZnJvbSBcInNhcC9tL092ZXJmbG93VG9vbGJhckxheW91dERhdGFcIjtcbmltcG9ydCBUaXRsZSBmcm9tIFwic2FwL20vVGl0bGVcIjtcbmltcG9ydCBUb29sYmFyU3BhY2VyIGZyb20gXCJzYXAvbS9Ub29sYmFyU3BhY2VyXCI7XG5pbXBvcnQgVkJveCBmcm9tIFwic2FwL20vVkJveFwiO1xuaW1wb3J0IHsgT3ZlcmZsb3dUb29sYmFyUHJpb3JpdHkgfSBmcm9tIFwic2FwL20vbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IEN1c3RvbURhdGEgZnJvbSBcInNhcC91aS9jb3JlL0N1c3RvbURhdGFcIjtcbmltcG9ydCB7ICRDb250cm9sU2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL21kYy9Db250cm9sXCI7XG5pbXBvcnQgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBWaXN1YWxGaWx0ZXJDb250cm9sIH0gZnJvbSBcIi4uL2NvbnRyb2xzL2ZpbHRlcmJhci9WaXN1YWxGaWx0ZXJcIjtcbmltcG9ydCBJbnRlcmFjdGl2ZUNoYXJ0SGVscGVyIGZyb20gXCIuL0ludGVyYWN0aXZlQ2hhcnRIZWxwZXJcIjtcbmltcG9ydCBWaXN1YWxGaWx0ZXJSdW50aW1lIGZyb20gXCIuL1Zpc3VhbEZpbHRlclJ1bnRpbWVcIjtcbmltcG9ydCB7IGdldFZpc3VhbEZpbHRlckNoYXJ0IH0gZnJvbSBcIi4vZnJhZ21lbnRzL0ludGVyYWN0aXZlQ2hhcnRzXCI7XG4vKipcbiAqIEJ1aWxkaW5nIGJsb2NrIGZvciBjcmVhdGluZyBhIFZpc3VhbEZpbHRlciBiYXNlZCBvbiB0aGUgbWV0YWRhdGEgcHJvdmlkZWQgYnkgT0RhdGEgVjQuXG4gKiA8YnI+XG4gKiBBIENoYXJ0IGFubm90YXRpb24gaXMgcmVxdWlyZWQgdG8gYnJpbmcgdXAgYW4gaW50ZXJhY3RpdmUgY2hhcnRcbiAqXG4gKlxuICogVXNhZ2UgZXhhbXBsZTpcbiAqIDxwcmU+XG4gKiAmbHQ7bWFjcm9zOlZpc3VhbEZpbHRlclxuICogY29sbGVjdGlvbj1cIntlbnRpdHlTZXQmZ3Q7fVwiXG4gKiBjaGFydEFubm90YXRpb249XCJ7Y2hhcnRBbm5vdGF0aW9uJmd0O31cIlxuICogaWQ9XCJzb21lSURcIlxuICogZ3JvdXBJZD1cInNvbWVHcm91cElEXCJcbiAqIHRpdGxlPVwic29tZSBUaXRsZVwiXG4gKiAvJmd0O1xuICogPC9wcmU+XG4gKiBAcHJpdmF0ZVxuICogQGV4cGVyaW1lbnRhbFxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUubWFjcm9zLnZpc3VhbGZpbHRlcnMuVmlzdWFsRmlsdGVyXCIpXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWaXN1YWxGaWx0ZXIgZXh0ZW5kcyBCdWlsZGluZ0Jsb2NrPFZpc3VhbEZpbHRlckNvbnRyb2w+IHtcblx0QGltcGxlbWVudEludGVyZmFjZShcInNhcC51aS5jb3JlLklGb3JtQ29udGVudFwiKVxuXHRfX2ltcGxlbWVudHNfX3NhcF91aV9jb3JlX0lGb3JtQ29udGVudCA9IHRydWU7XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcImJvb2xlYW5cIlxuXHR9KVxuXHRzaG93VmFsdWVIZWxwITogYm9vbGVhbjtcblxuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCJcblx0fSlcblx0dmFsdWVIZWxwSWNvblNyYyE6IHN0cmluZztcblxuXHRAZXZlbnQoKVxuXHR2YWx1ZUhlbHBSZXF1ZXN0ITogRnVuY3Rpb247XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcInN0cmluZ1wiLFxuXHRcdHJlcXVpcmVkOiB0cnVlXG5cdH0pXG5cdGlkITogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIlxuXHR9KVxuXHR0aXRsZSA9IFwiXCI7XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcInN0cmluZ1wiLFxuXHRcdHJlcXVpcmVkOiB0cnVlXG5cdH0pXG5cdHB1YmxpYyBjb250ZXh0UGF0aCE6IHN0cmluZztcblxuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCIsXG5cdFx0cmVxdWlyZWQ6IHRydWVcblx0fSlcblx0cHVibGljIG1ldGFQYXRoITogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIlxuXHR9KVxuXHRvdXRQYXJhbWV0ZXI/OiBzdHJpbmc7XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcInN0cmluZ1wiXG5cdH0pXG5cdHZhbHVlbGlzdFByb3BlcnR5Pzogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIlxuXHR9KVxuXHRzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbj86IHN0cmluZztcblxuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwiYXJyYXlcIlxuXHR9KVxuXHRpblBhcmFtZXRlcnM/OiBQYXJhbWV0ZXJUeXBlW107XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcImJvb2xlYW5cIlxuXHR9KVxuXHRtdWx0aXBsZVNlbGVjdGlvbkFsbG93ZWQ/OiBib29sZWFuO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJib29sZWFuXCJcblx0fSlcblx0cmVxdWlyZWQ/OiBib29sZWFuO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJib29sZWFuXCJcblx0fSlcblx0c2hvd092ZXJsYXlJbml0aWFsbHk/OiBib29sZWFuO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJib29sZWFuXCJcblx0fSlcblx0cmVuZGVyTGluZUNoYXJ0PzogYm9vbGVhbjtcblxuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwiYXJyYXlcIlxuXHR9KVxuXHRyZXF1aXJlZFByb3BlcnRpZXM/OiBzdHJpbmdbXTtcblxuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCJcblx0fSlcblx0ZmlsdGVyQmFyRW50aXR5VHlwZT86IHN0cmluZztcblxuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwiYm9vbGVhblwiXG5cdH0pXG5cdHNob3dFcnJvcj86IGJvb2xlYW47XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcInN0cmluZ1wiXG5cdH0pXG5cdGNoYXJ0TWVhc3VyZT86IHN0cmluZztcblxuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwiYm9vbGVhblwiXG5cdH0pXG5cdFVvTUhhc0N1c3RvbUFnZ3JlZ2F0ZT86IGJvb2xlYW47XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcImJvb2xlYW5cIlxuXHR9KVxuXHRzaG93VmFsdWVIZWxwQnV0dG9uPzogYm9vbGVhbjtcblxuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwiYm9vbGVhblwiXG5cdH0pXG5cdGN1c3RvbUFnZ3JlZ2F0ZSA9IGZhbHNlO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIlxuXHR9KVxuXHRncm91cElkID0gXCIkYXV0by52aXN1YWxGaWx0ZXJzXCI7XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcInN0cmluZ1wiXG5cdH0pXG5cdGVycm9yTWVzc2FnZVRpdGxlPzogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIlxuXHR9KVxuXHRlcnJvck1lc3NhZ2U/OiBzdHJpbmc7XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcInN0cmluZ1wiXG5cdH0pXG5cdF9jb250ZW50SWQ/OiBzdHJpbmc7XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcImJvb2xlYW5cIlxuXHR9KVxuXHRkcmFmdFN1cHBvcnRlZD86IGJvb2xlYW47XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcImJvb2xlYW5cIlxuXHR9KVxuXHRpc1ZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlczogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogRW5hYmxlIG9yIGRpc2FibGUgY2hhcnQgYmluZGluZ1xuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwiYm9vbGVhblwiXG5cdH0pXG5cdGVuYWJsZUNoYXJ0QmluZGluZyA9IHRydWU7XG5cblx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXHQgKiBJbnRlcm5hbCBQcm9wZXJ0aWVzXG5cdCAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuXHRhZ2dyZWdhdGVQcm9wZXJ0aWVzOiBBZ2dyZWdhdGVkUHJvcGVydHlUeXBlIHwgdW5kZWZpbmVkO1xuXG5cdGNoYXJ0VHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdHBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHRtZWFzdXJlRGltZW5zaW9uVGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHR0b29sVGlwOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0VW9NVmlzaWJpbGl0eTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuXHRzY2FsZVVvTVRpdGxlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0ZmlsdGVyQ291bnRCaW5kaW5nOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0Y2hhcnRBbm5vdGF0aW9uPzogQ2hhcnQ7XG5cdF9yZXNvbHZlZENvbnRleHRQYXRoPzogc3RyaW5nO1xuXG5cdHNvcnRPcmRlcj86IFNvcnRPcmRlclR5cGVbXTtcblx0Y29sbGVjdGlvbj86IERhdGFNb2RlbE9iamVjdFBhdGg8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pjtcblx0c2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudCB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogRmxhZyB0byBpbmRpY2F0ZSBpZiB0aGUgaW4tcGFyYW1ldGVycyBhbmQgY29uZGl0aW9ucyB1cGRhdGUgaXMgcGVuZGluZy5cblx0ICovXG5cdHByaXZhdGUgaW5QYXJhbUNvbmRpdGlvblVwZGF0ZVBlbmRpbmcgPSBmYWxzZTtcblxuXHQvKipcblx0ICogSW5pdGlhbCByZW5kZXJpbmcgaXMgcGVuZGluZy5cblx0ICovXG5cdHByaXZhdGUgcmVuZGVyaW5nVXBkYXRlUGVuZGluZyA9IHRydWU7XG5cblx0Y29uc3RydWN0b3IocHJvcHM6ICRDb250cm9sU2V0dGluZ3MgJiBQcm9wZXJ0aWVzT2Y8VmlzdWFsRmlsdGVyQ29udHJvbD4sIG90aGVycz86ICRDb250cm9sU2V0dGluZ3MpIHtcblx0XHRzdXBlcihwcm9wcywgb3RoZXJzKTtcblx0fVxuXG5cdHB1YmxpYyBvbk1ldGFkYXRhQXZhaWxhYmxlKF9vd25lckNvbXBvbmVudDogVGVtcGxhdGVDb21wb25lbnQpOiB2b2lkIHtcblx0XHR0aGlzLmdyb3VwSWQgPSBcIiRhdXRvLnZpc3VhbEZpbHRlcnNcIjtcblx0XHR0aGlzLnBhdGggPSB0aGlzLm1ldGFQYXRoO1xuXHRcdGNvbnN0IG93bmVyID0gdGhpcy5fZ2V0T3duZXIoKTtcblx0XHR0aGlzLmNvbnRleHRQYXRoID0gdGhpcy5jb250ZXh0UGF0aCA/PyBvd25lcj8ucHJlcHJvY2Vzc29yQ29udGV4dD8uZnVsbENvbnRleHRQYXRoO1xuXHRcdGNvbnN0IGNvbnRleHRPYmplY3RQYXRoID0gdGhpcy5nZXREYXRhTW9kZWxPYmplY3RGb3JNZXRhUGF0aDxQcmVzZW50YXRpb25WYXJpYW50Pih0aGlzLm1ldGFQYXRoLCB0aGlzLmNvbnRleHRQYXRoKTtcblx0XHRpZiAodGhpcy5jb250ZXh0UGF0aCkge1xuXHRcdFx0dGhpcy5fcmVzb2x2ZWRDb250ZXh0UGF0aCA9IHRoaXMuY29udGV4dFBhdGguZW5kc1dpdGgoXCIvXCIpID8gdGhpcy5jb250ZXh0UGF0aCA6IHRoaXMuY29udGV4dFBhdGggKyBcIi9cIjtcblx0XHR9XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gdGhpcy5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbDtcblxuXHRcdGNvbnN0IGRpYWdub3N0aWNzID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKT8uZ2V0RGlhZ25vc3RpY3MoKSA/PyAoe30gYXMgRGlhZ25vc3RpY3MpO1xuXHRcdGNvbnN0IHZpZXdEYXRhID1cblx0XHRcdHRoaXMuX2dldE93bmVyKCk/LmdldFJvb3RDb250cm9sbGVyKCk/LmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpID8/ICh0aGlzLl9nZXRPd25lcigpPy5nZXRWaWV3RGF0YSgpIGFzIHVua25vd24gYXMgVmlld0RhdGEpO1xuXHRcdGNvbnN0IGNvbnZlcnRlckNvbnRleHQgPSBDb252ZXJ0ZXJDb250ZXh0LmNyZWF0ZUNvbnZlcnRlckNvbnRleHRGb3JNYWNybyhcblx0XHRcdGNvbnRleHRPYmplY3RQYXRoPy5zdGFydGluZ0VudGl0eVNldD8ubmFtZSBhcyBzdHJpbmcsXG5cdFx0XHRtZXRhTW9kZWwsXG5cdFx0XHRkaWFnbm9zdGljcyxcblx0XHRcdG1lcmdlLFxuXHRcdFx0Y29udGV4dE9iamVjdFBhdGg/LmNvbnRleHRMb2NhdGlvbixcblx0XHRcdG5ldyBNYW5pZmVzdFdyYXBwZXIodmlld0RhdGEgYXMgQmFzZU1hbmlmZXN0U2V0dGluZ3MsIHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkpXG5cdFx0KTtcblx0XHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0Y29uc3QgY3VzdG9tQWdncmVnYXRlcyA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zKCk7XG5cdFx0Y29uc3QgcHZBbm5vdGF0aW9uID0gY29udGV4dE9iamVjdFBhdGg/LnRhcmdldE9iamVjdDtcblx0XHRsZXQgbWVhc3VyZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHZpc3VhbGl6YXRpb25zID0gcHZBbm5vdGF0aW9uICYmIHB2QW5ub3RhdGlvbi5WaXN1YWxpemF0aW9ucztcblx0XHR0aGlzLmdldENoYXJ0QW5ub3RhdGlvbih2aXN1YWxpemF0aW9ucywgY29udmVydGVyQ29udGV4dCk7XG5cdFx0bGV0IGFnZ3JlZ2F0aW9uczogQWdncmVnYXRlZFByb3BlcnR5VHlwZVtdID0gW10sXG5cdFx0XHRjdXN0QWdnTWVhc3VyZSA9IFtdO1xuXG5cdFx0aWYgKHRoaXMuY2hhcnRBbm5vdGF0aW9uPy5NZWFzdXJlcz8ubGVuZ3RoKSB7XG5cdFx0XHRjdXN0QWdnTWVhc3VyZSA9IGN1c3RvbUFnZ3JlZ2F0ZXMuZmlsdGVyKChjdXN0QWdnKSA9PiB7XG5cdFx0XHRcdHJldHVybiBjdXN0QWdnLnF1YWxpZmllciA9PT0gdGhpcy5jaGFydEFubm90YXRpb24/Lk1lYXN1cmVzWzBdLnZhbHVlO1xuXHRcdFx0fSk7XG5cdFx0XHRtZWFzdXJlID0gY3VzdEFnZ01lYXN1cmUubGVuZ3RoID4gMCA/IGN1c3RBZ2dNZWFzdXJlWzBdLnF1YWxpZmllciA6IHRoaXMuY2hhcnRBbm5vdGF0aW9uLk1lYXN1cmVzWzBdLnZhbHVlO1xuXHRcdFx0YWdncmVnYXRpb25zID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0QWdncmVnYXRlZFByb3BlcnRpZXMoKVswXTtcblx0XHR9XG5cdFx0Ly8gaWYgdGhlcmUgYXJlIEFnZ3JlZ2F0ZWRQcm9wZXJ0eSBvYmplY3RzIGJ1dCBubyBkeW5hbWljIG1lYXN1cmVzLCByYXRoZXIgdGhlcmUgYXJlIHRyYW5zZm9ybWF0aW9uIGFnZ3JlZ2F0ZXMgZm91bmQgaW4gbWVhc3VyZXNcblx0XHRpZiAoXG5cdFx0XHRhZ2dyZWdhdGlvbnMgJiZcblx0XHRcdGFnZ3JlZ2F0aW9ucy5sZW5ndGggPiAwICYmXG5cdFx0XHQhdGhpcy5jaGFydEFubm90YXRpb24/LkR5bmFtaWNNZWFzdXJlcyAmJlxuXHRcdFx0Y3VzdEFnZ01lYXN1cmUubGVuZ3RoID09PSAwICYmXG5cdFx0XHR0aGlzLmNoYXJ0QW5ub3RhdGlvbj8uTWVhc3VyZXMgJiZcblx0XHRcdHRoaXMuY2hhcnRBbm5vdGF0aW9uPy5NZWFzdXJlcy5sZW5ndGggPiAwXG5cdFx0KSB7XG5cdFx0XHRMb2cud2FybmluZyhcblx0XHRcdFx0XCJUaGUgdHJhbnNmb3JtYXRpb25hbCBhZ2dyZWdhdGUgbWVhc3VyZXMgYXJlIGNvbmZpZ3VyZWQgYXMgQ2hhcnQuTWVhc3VyZXMgYnV0IHNob3VsZCBiZSBjb25maWd1cmVkIGFzIENoYXJ0LkR5bmFtaWNNZWFzdXJlcyBpbnN0ZWFkLiBQbGVhc2UgY2hlY2sgdGhlIFNBUCBIZWxwIGRvY3VtZW50YXRpb24gYW5kIGNvcnJlY3QgdGhlIGNvbmZpZ3VyYXRpb24gYWNjb3JkaW5nbHkuXCJcblx0XHRcdCk7XG5cdFx0fVxuXHRcdC8vaWYgdGhlIGNoYXJ0IGhhcyBkeW5hbWljIG1lYXN1cmVzLCBidXQgd2l0aCBubyBvdGhlciBjdXN0b20gYWdncmVnYXRlIG1lYXN1cmVzIHRoZW4gY29uc2lkZXIgdGhlIGR5bmFtaWMgbWVhc3VyZXNcblx0XHRpZiAodGhpcy5jaGFydEFubm90YXRpb24/LkR5bmFtaWNNZWFzdXJlcykge1xuXHRcdFx0aWYgKGN1c3RBZ2dNZWFzdXJlLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRtZWFzdXJlID0gY29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yPEFnZ3JlZ2F0ZWRQcm9wZXJ0eT4oXG5cdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgodGhpcy5jaGFydEFubm90YXRpb24uRHluYW1pY01lYXN1cmVzWzBdLnZhbHVlKVxuXHRcdFx0XHRcdClcblx0XHRcdFx0XHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpXG5cdFx0XHRcdFx0LnRhcmdldE9iamVjdD8uTmFtZS50b1N0cmluZygpO1xuXHRcdFx0XHRhZ2dyZWdhdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRBZ2dyZWdhdGVkUHJvcGVydHkoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdExvZy53YXJuaW5nKFxuXHRcdFx0XHRcdFwiVGhlIGR5bmFtaWMgbWVhc3VyZXMgaGF2ZSBiZWVuIGlnbm9yZWQgYXMgdmlzdWFsIGZpbHRlcnMgY2FuIGRlYWwgd2l0aCBvbmx5IDEgbWVhc3VyZSBhbmQgdGhlIGZpcnN0IChjdXN0b20gYWdncmVnYXRlKSBtZWFzdXJlIGRlZmluZWQgdW5kZXIgQ2hhcnQuTWVhc3VyZXMgaXMgY29uc2lkZXJlZC5cIlxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoXG5cdFx0XHRjdXN0b21BZ2dyZWdhdGVzLnNvbWUoZnVuY3Rpb24gKGN1c3RBZ2cpIHtcblx0XHRcdFx0cmV0dXJuIGN1c3RBZ2cucXVhbGlmaWVyID09PSBtZWFzdXJlO1xuXHRcdFx0fSlcblx0XHQpIHtcblx0XHRcdHRoaXMuY3VzdG9tQWdncmVnYXRlID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRjb25zdCBkZWZhdWx0U2VsZWN0aW9uVmFyaWFudCA9IGdldERlZmF1bHRTZWxlY3Rpb25WYXJpYW50KGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpKTtcblx0XHR0aGlzLmNoZWNrU2VsZWN0aW9uVmFyaWFudChkZWZhdWx0U2VsZWN0aW9uVmFyaWFudCk7XG5cdFx0Y29uc3QgYWdncmVnYXRpb24gPSB0aGlzLmdldEFnZ3JlZ2F0ZVByb3BlcnRpZXMoYWdncmVnYXRpb25zLCBtZWFzdXJlKTtcblx0XHRpZiAoYWdncmVnYXRpb24pIHtcblx0XHRcdHRoaXMuYWdncmVnYXRlUHJvcGVydGllcyA9IGFnZ3JlZ2F0aW9uO1xuXHRcdH1cblx0XHRjb25zdCBwcm9wZXJ0eUFubm90YXRpb25zID1cblx0XHRcdHZpc3VhbGl6YXRpb25zICYmIHRoaXMuY2hhcnRBbm5vdGF0aW9uPy5NZWFzdXJlcyAmJiB0aGlzLmNoYXJ0QW5ub3RhdGlvbj8uTWVhc3VyZXNbMF0/LiR0YXJnZXQ/LmFubm90YXRpb25zO1xuXHRcdGNvbnN0IGFnZ3JlZ2F0YWJsZVByb3BlcnR5QW5ub3RhdGlvbnMgPSBhZ2dyZWdhdGlvbj8uQWdncmVnYXRhYmxlUHJvcGVydHk/LiR0YXJnZXQ/LmFubm90YXRpb25zO1xuXHRcdHRoaXMuY2hlY2tJZlVPTUhhc0N1c3RvbUFnZ3JlZ2F0ZShjdXN0b21BZ2dyZWdhdGVzLCBwcm9wZXJ0eUFubm90YXRpb25zLCBhZ2dyZWdhdGFibGVQcm9wZXJ0eUFubm90YXRpb25zKTtcblx0XHRjb25zdCBwcm9wZXJ0eUhpZGRlbiA9IHByb3BlcnR5QW5ub3RhdGlvbnM/LlVJPy5IaWRkZW47XG5cdFx0Y29uc3QgaGlkZGVuTWVhc3VyZSA9IHByb3BlcnR5SGlkZGVuPy52YWx1ZU9mKCk7XG5cdFx0Y29uc3QgY2hhcnRUeXBlID0gdGhpcy5jaGFydEFubm90YXRpb24/LkNoYXJ0VHlwZTtcblx0XHR0aGlzLmNoYXJ0VHlwZSA9IGNoYXJ0VHlwZTtcblx0XHR0aGlzLnNob3dWYWx1ZUhlbHBCdXR0b24gPSB0aGlzLmdldHNob3dWYWx1ZUhlbHBCdXR0b24oY2hhcnRUeXBlLCBoaWRkZW5NZWFzdXJlKTtcblx0XHR0aGlzLmRyYWZ0U3VwcG9ydGVkID0gTW9kZWxIZWxwZXIuaXNEcmFmdFN1cHBvcnRlZChtZXRhTW9kZWwsIHRoaXMuY29udGV4dFBhdGgpO1xuXHRcdC8qKlxuXHRcdCAqIElmIHRoZSBtZWFzdXJlIG9mIHRoZSBjaGFydCBpcyBtYXJrZWQgYXMgJ2hpZGRlbicsIG9yIGlmIHRoZSBjaGFydCB0eXBlIGlzIGludmFsaWQsIG9yIGlmIHRoZSBkYXRhIHR5cGUgZm9yIHRoZSBsaW5lIGNoYXJ0IGlzIGludmFsaWQsXG5cdFx0ICogdGhlIGNhbGwgaXMgbWFkZSB0byB0aGUgSW50ZXJhY3RpdmVDaGFydFdpdGhFcnJvciBmcmFnbWVudCAodXNpbmcgZXJyb3ItbWVzc2FnZSByZWxhdGVkIEFQSXMsIGJ1dCBhdm9pZGluZyBiYXRjaCBjYWxscylcblx0XHQgKi9cblx0XHR0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGhpZGRlbk1lYXN1cmUsIG1lYXN1cmUpO1xuXHRcdHRoaXMuY2hhcnRNZWFzdXJlID0gbWVhc3VyZTtcblx0XHR0aGlzLm1lYXN1cmVEaW1lbnNpb25UaXRsZSA9IEludGVyYWN0aXZlQ2hhcnRIZWxwZXIuZ2V0TWVhc3VyZURpbWVuc2lvblRpdGxlKFxuXHRcdFx0dGhpcy5jaGFydEFubm90YXRpb24sXG5cdFx0XHR0aGlzLmN1c3RvbUFnZ3JlZ2F0ZSxcblx0XHRcdHRoaXMuYWdncmVnYXRlUHJvcGVydGllc1xuXHRcdCk7XG5cdFx0Y29uc3QgY29sbGVjdGlvbiA9IHRoaXMuZ2V0RGF0YU1vZGVsT2JqZWN0Rm9yTWV0YVBhdGg8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pih0aGlzLmNvbnRleHRQYXRoKTtcblx0XHR0aGlzLnRvb2xUaXAgPSBJbnRlcmFjdGl2ZUNoYXJ0SGVscGVyLmdldFRvb2xUaXAoXG5cdFx0XHR0aGlzLmNoYXJ0QW5ub3RhdGlvbixcblx0XHRcdGNvbGxlY3Rpb24sXG5cdFx0XHR0aGlzLnBhdGgsXG5cdFx0XHR0aGlzLmN1c3RvbUFnZ3JlZ2F0ZSxcblx0XHRcdHRoaXMuYWdncmVnYXRlUHJvcGVydGllcyxcblx0XHRcdHRoaXMucmVuZGVyTGluZUNoYXJ0XG5cdFx0KTtcblx0XHR0aGlzLlVvTVZpc2liaWxpdHkgPSBJbnRlcmFjdGl2ZUNoYXJ0SGVscGVyLmdldFVvTVZpc2libGl0eSh0aGlzLmNoYXJ0QW5ub3RhdGlvbiwgdGhpcy5zaG93RXJyb3IpO1xuXHRcdHRoaXMuc2NhbGVVb01UaXRsZSA9IEludGVyYWN0aXZlQ2hhcnRIZWxwZXIuZ2V0U2NhbGVVb01UaXRsZShcblx0XHRcdHRoaXMuY2hhcnRBbm5vdGF0aW9uLFxuXHRcdFx0Y29sbGVjdGlvbixcblx0XHRcdHRoaXMucGF0aCxcblx0XHRcdHRoaXMuY3VzdG9tQWdncmVnYXRlLFxuXHRcdFx0dGhpcy5hZ2dyZWdhdGVQcm9wZXJ0aWVzXG5cdFx0KTtcblx0XHR0aGlzLmNvbGxlY3Rpb24gPSBjb2xsZWN0aW9uO1xuXHRcdHRoaXMuc29ydE9yZGVyID0gcHZBbm5vdGF0aW9uPy5Tb3J0T3JkZXI7XG5cdFx0dGhpcy5maWx0ZXJDb3VudEJpbmRpbmcgPSBJbnRlcmFjdGl2ZUNoYXJ0SGVscGVyLmdldGZpbHRlckNvdW50QmluZGluZyh0aGlzLmNoYXJ0QW5ub3RhdGlvbik7XG5cdFx0Y29uc3Qgdmlld0lkID0gdGhpcy5nZXRQYWdlQ29udHJvbGxlcigpPy5nZXRWaWV3KCkuZ2V0SWQoKTtcblx0XHRpZiAodGhpcy5fY29udGVudElkKSB7XG5cdFx0XHR0aGlzLl9jb250ZW50SWQgPSBgJHt2aWV3SWR9LS0ke3RoaXMuX2NvbnRlbnRJZH1gO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5pZCkge1xuXHRcdFx0dGhpcy5fY29udGVudElkID0gYCR7dGhpcy5pZH0tY29udGVudGA7XG5cdFx0fVxuXHRcdHRoaXMuc2VsZWN0aW9uVmFyaWFudCA9IHRoaXMuc2VsZWN0aW9uVmFyaWFudEFubm90YXRpb25cblx0XHRcdD8gdGhpcy5nZXREYXRhTW9kZWxPYmplY3RGb3JNZXRhUGF0aDxTZWxlY3Rpb25WYXJpYW50Pih0aGlzLnNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uKT8udGFyZ2V0T2JqZWN0XG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHR0aGlzLmNvbnRlbnQgPSB0aGlzLmNyZWF0ZUNvbnRlbnQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVjayBpZiB0aGUgVW9NIGhhcyBjdXN0b20gYWdncmVnYXRlXG5cdCAqIEBwYXJhbSBjdXN0b21BZ2dyZWdhdGVzIC0gQ3VzdG9tIGFnZ3JlZ2F0ZXNcblx0ICogQHBhcmFtIHByb3BlcnR5QW5ub3RhdGlvbnMgLSBQcm9wZXJ0eSBhbm5vdGF0aW9uc1xuXHQgKiBAcGFyYW0gYWdncmVnYXRhYmxlUHJvcGVydHlBbm5vdGF0aW9ucyAtIEFnZ3JlZ2F0YWJsZSBwcm9wZXJ0eSBhbm5vdGF0aW9uc1xuXHQgKi9cblx0Y2hlY2tJZlVPTUhhc0N1c3RvbUFnZ3JlZ2F0ZShcblx0XHRjdXN0b21BZ2dyZWdhdGVzOiBBcnJheTxDdXN0b21BZ2dyZWdhdGU+LFxuXHRcdHByb3BlcnR5QW5ub3RhdGlvbnM6IFByb3BlcnR5QW5ub3RhdGlvbnMgfCB1bmRlZmluZWQsXG5cdFx0YWdncmVnYXRhYmxlUHJvcGVydHlBbm5vdGF0aW9ucz86IFByb3BlcnR5QW5ub3RhdGlvbnNcblx0KTogdm9pZCB7XG5cdFx0Y29uc3QgbWVhc3VyZXMgPSBwcm9wZXJ0eUFubm90YXRpb25zPy5NZWFzdXJlcztcblx0XHRjb25zdCBhZ2dyZWdhdGFibGVQcm9wZXJ0eU1lYXN1cmVzID0gYWdncmVnYXRhYmxlUHJvcGVydHlBbm5vdGF0aW9ucz8uTWVhc3VyZXM7XG5cdFx0Y29uc3QgVU9NID0gdGhpcy5nZXRVb00obWVhc3VyZXMsIGFnZ3JlZ2F0YWJsZVByb3BlcnR5TWVhc3VyZXMpO1xuXHRcdGlmIChcblx0XHRcdFVPTSAmJlxuXHRcdFx0Y3VzdG9tQWdncmVnYXRlcy5zb21lKGZ1bmN0aW9uIChjdXN0QWdnOiBDdXN0b21BZ2dyZWdhdGUpIHtcblx0XHRcdFx0cmV0dXJuIGN1c3RBZ2cucXVhbGlmaWVyID09PSBVT007XG5cdFx0XHR9KVxuXHRcdCkge1xuXHRcdFx0dGhpcy5Vb01IYXNDdXN0b21BZ2dyZWdhdGUgPSB0cnVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLlVvTUhhc0N1c3RvbUFnZ3JlZ2F0ZSA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGNoYXJ0IGFubm90YXRpb24uXG5cdCAqIEBwYXJhbSB2aXN1YWxpemF0aW9ucyBWaXN1YWxpemF0aW9uc1xuXHQgKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBDb252ZXJ0ZXIgY29udGV4dFxuXHQgKi9cblx0Z2V0Q2hhcnRBbm5vdGF0aW9uKFxuXHRcdHZpc3VhbGl6YXRpb25zOiBBcnJheTxBbm5vdGF0aW9uUGF0aDxDaGFydCB8IERhdGFQb2ludCB8IExpbmVJdGVtPj4gfCB1bmRlZmluZWQsXG5cdFx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuXHQpOiB2b2lkIHtcblx0XHRpZiAodmlzdWFsaXphdGlvbnMpIHtcblx0XHRcdGZvciAobGV0IHZpc3VhbGl6YXRpb24gb2YgdmlzdWFsaXphdGlvbnMpIHtcblx0XHRcdFx0Y29uc3Qgc0Fubm90YXRpb25QYXRoID0gdmlzdWFsaXphdGlvbiAmJiB2aXN1YWxpemF0aW9uLnZhbHVlO1xuXHRcdFx0XHR0aGlzLmNoYXJ0QW5ub3RhdGlvbiA9XG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbjxDaGFydD4oc0Fubm90YXRpb25QYXRoKSAmJlxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb248Q2hhcnQ+KHNBbm5vdGF0aW9uUGF0aCkuYW5ub3RhdGlvbjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgZmxhZyB0byBzaG93IG9yIGhpZGUgdGhlIHZhbHVlIGhlbHAgZm9yIHRoZSB2aXN1YWwgZmlsdGVyLlxuXHQgKiBAcGFyYW0gYlNob3dWYWx1ZUhlbHAgRmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gc2hvdyBvciBoaWRlIHRoZSB2YWx1ZSBoZWxwLlxuXHQgKi9cblx0c2V0U2hvd1ZhbHVlSGVscChiU2hvd1ZhbHVlSGVscDogYm9vbGVhbik6IHZvaWQge1xuXHRcdGlmICh0aGlzLmNvbnRlbnQ/LmlzQTxWaXN1YWxGaWx0ZXJDb250cm9sPihcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuZmlsdGVyYmFyLlZpc3VhbEZpbHRlclwiKSkge1xuXHRcdFx0aWYgKHRoaXMuY29udGVudD8uZ2V0SXRlbXMoKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNvbnN0IG9WaXN1YWxGaWx0ZXJDb250cm9sID0gdGhpcy5nZXRWaXN1YWxGaWx0ZXJDb250cm9sKCk7XG5cdFx0XHRcdG9WaXN1YWxGaWx0ZXJDb250cm9sPy5nZXRDb250ZW50KCkuc29tZShmdW5jdGlvbiAob0lubmVyQ29udHJvbDogQ29udHJvbCkge1xuXHRcdFx0XHRcdGlmIChvSW5uZXJDb250cm9sLmlzQTxCdXR0b24+KFwic2FwLm0uQnV0dG9uXCIpKSB7XG5cdFx0XHRcdFx0XHRvSW5uZXJDb250cm9sLnNldFZpc2libGUoYlNob3dWYWx1ZUhlbHApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRoaXMuc2V0UHJvcGVydHkoXCJzaG93VmFsdWVIZWxwXCIsIGJTaG93VmFsdWVIZWxwKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgc291cmNlIG9mIHRoZSB2YWx1ZSBoZWxwIGljb24uXG5cdCAqIEBwYXJhbSBzSWNvblNyYyBUaGUgc291cmNlIG9mIHRoZSB2YWx1ZSBoZWxwIGljb25cblx0ICovXG5cdHNldFZhbHVlSGVscEljb25TcmMoc0ljb25TcmM6IHN0cmluZyk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmNvbnRlbnQ/LmlzQTxWaXN1YWxGaWx0ZXJDb250cm9sPihcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuZmlsdGVyYmFyLlZpc3VhbEZpbHRlclwiKSkge1xuXHRcdFx0aWYgKHRoaXMuY29udGVudD8uZ2V0SXRlbXMoKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNvbnN0IG9WaXN1YWxGaWx0ZXJDb250cm9sID0gdGhpcy5nZXRWaXN1YWxGaWx0ZXJDb250cm9sKCk7XG5cdFx0XHRcdG9WaXN1YWxGaWx0ZXJDb250cm9sPy5nZXRDb250ZW50KCkuc29tZShmdW5jdGlvbiAob0lubmVyQ29udHJvbDogQ29udHJvbCkge1xuXHRcdFx0XHRcdGlmIChvSW5uZXJDb250cm9sLmlzQTxCdXR0b24+KFwic2FwLm0uQnV0dG9uXCIpKSB7XG5cdFx0XHRcdFx0XHRvSW5uZXJDb250cm9sLnNldEljb24oc0ljb25TcmMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRoaXMuc2V0UHJvcGVydHkoXCJ2YWx1ZUhlbHBJY29uU3JjXCIsIHNJY29uU3JjKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSB2aXN1YWwgZmlsdGVyIGNvbnRyb2wgZnJvbSB0aGUgY29udGVudC5cblx0ICogQHJldHVybnMgVGhlIHZpc3VhbCBmaWx0ZXIgY29udHJvbCBvciB1bmRlZmluZWQgaWYgbm90IGZvdW5kXG5cdCAqL1xuXHRnZXRWaXN1YWxGaWx0ZXJDb250cm9sKCk6IE92ZXJmbG93VG9vbGJhciB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHRoaXMuY29udGVudD8uaXNBPFZpc3VhbEZpbHRlckNvbnRyb2w+KFwic2FwLmZlLm1hY3Jvcy5jb250cm9scy5maWx0ZXJiYXIuVmlzdWFsRmlsdGVyXCIpKSB7XG5cdFx0XHRyZXR1cm4gKHRoaXMuY29udGVudD8uZ2V0SXRlbXMoKVswXSBhcyBWQm94KS5nZXRJdGVtcygpWzBdIGFzIE92ZXJmbG93VG9vbGJhcjtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBlcnJvciBtZXNzYWdlIGZvciBhIGhpZGRlbiBtZWFzdXJlLlxuXHQgKiBAcGFyYW0gaGlkZGVuTWVhc3VyZSBUaGUgaGlkZGVuIG1lYXN1cmUgb2JqZWN0XG5cdCAqIEBwYXJhbSBtZWFzdXJlIFRoZSBtZWFzdXJlIG5hbWVcblx0ICogQHJldHVybnMgVGhlIGVycm9yIG1lc3NhZ2UsIGlmIGFueVxuXHQgKi9cblx0Z2V0RXJyb3JNZXNzYWdlKGhpZGRlbk1lYXN1cmU6IE9iamVjdCB8IHVuZGVmaW5lZCwgbWVhc3VyZT86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IHZhbGlkQ2hhcnRUeXBlO1xuXHRcdGlmICh0aGlzLmNoYXJ0QW5ub3RhdGlvbikge1xuXHRcdFx0aWYgKHRoaXMuY2hhcnRBbm5vdGF0aW9uLkNoYXJ0VHlwZSA9PT0gXCJVSS5DaGFydFR5cGUvTGluZVwiIHx8IHRoaXMuY2hhcnRBbm5vdGF0aW9uLkNoYXJ0VHlwZSA9PT0gXCJVSS5DaGFydFR5cGUvQmFyXCIpIHtcblx0XHRcdFx0dmFsaWRDaGFydFR5cGUgPSB0cnVlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmFsaWRDaGFydFR5cGUgPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKCh0eXBlb2YgaGlkZGVuTWVhc3VyZSA9PT0gXCJib29sZWFuXCIgJiYgaGlkZGVuTWVhc3VyZSkgfHwgIXZhbGlkQ2hhcnRUeXBlIHx8IHRoaXMucmVuZGVyTGluZUNoYXJ0ID09PSBmYWxzZSkge1xuXHRcdFx0dGhpcy5zaG93RXJyb3IgPSB0cnVlO1xuXHRcdFx0dGhpcy5lcnJvck1lc3NhZ2VUaXRsZSA9XG5cdFx0XHRcdGhpZGRlbk1lYXN1cmUgfHwgIXZhbGlkQ2hhcnRUeXBlXG5cdFx0XHRcdFx0PyB0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiTV9WSVNVQUxfRklMVEVSU19FUlJPUl9NRVNTQUdFX1RJVExFXCIpXG5cdFx0XHRcdFx0OiB0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiTV9WSVNVQUxfRklMVEVSX0xJTkVfQ0hBUlRfSU5WQUxJRF9EQVRBVFlQRVwiKTtcblx0XHRcdGlmIChoaWRkZW5NZWFzdXJlKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiTV9WSVNVQUxfRklMVEVSX0hJRERFTl9NRUFTVVJFXCIsIFttZWFzdXJlXSk7XG5cdFx0XHR9IGVsc2UgaWYgKCF2YWxpZENoYXJ0VHlwZSkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIk1fVklTVUFMX0ZJTFRFUl9VTlNVUFBPUlRFRF9DSEFSVF9UWVBFXCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFRleHQoXCJNX1ZJU1VBTF9GSUxURVJfTElORV9DSEFSVF9VTlNVUFBPUlRFRF9ESU1FTlNJT05cIik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIERldGVybWluZXMgd2hldGhlciB0byBzaG93IHRoZSB2YWx1ZSBoZWxwIGJ1dHRvbiBmb3IgdGhlIHZpc3VhbCBmaWx0ZXIuXG5cdCAqXG5cdCAqIEBwYXJhbSBjaGFydFR5cGUgVGhlIHR5cGUgb2YgY2hhcnQgdXNlZCBpbiB0aGUgdmlzdWFsIGZpbHRlclxuXHQgKiBAcGFyYW0gaGlkZGVuTWVhc3VyZSBUaGUgaGlkZGVuIG1lYXN1cmUgb2JqZWN0XG5cdCAqIEByZXR1cm5zIEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gc2hvdyB0aGUgdmFsdWUgaGVscCBidXR0b25cblx0ICovXG5cdGdldHNob3dWYWx1ZUhlbHBCdXR0b24oY2hhcnRUeXBlPzogc3RyaW5nLCBoaWRkZW5NZWFzdXJlPzogT2JqZWN0KTogYm9vbGVhbiB7XG5cdFx0Y29uc3Qgc0RpbWVuc2lvblR5cGUgPVxuXHRcdFx0dGhpcy5jaGFydEFubm90YXRpb24/LkRpbWVuc2lvbnNbMF0gJiZcblx0XHRcdHRoaXMuY2hhcnRBbm5vdGF0aW9uPy5EaW1lbnNpb25zWzBdLiR0YXJnZXQgJiZcblx0XHRcdHRoaXMuY2hhcnRBbm5vdGF0aW9uLkRpbWVuc2lvbnNbMF0uJHRhcmdldC50eXBlO1xuXHRcdGlmIChzRGltZW5zaW9uVHlwZSA9PT0gXCJFZG0uRGF0ZVwiIHx8IHNEaW1lbnNpb25UeXBlID09PSBcIkVkbS5UaW1lXCIgfHwgc0RpbWVuc2lvblR5cGUgPT09IFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCIpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBoaWRkZW5NZWFzdXJlID09PSBcImJvb2xlYW5cIiAmJiBoaWRkZW5NZWFzdXJlKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSBlbHNlIGlmICghKGNoYXJ0VHlwZSA9PT0gXCJVSS5DaGFydFR5cGUvQmFyXCIgfHwgY2hhcnRUeXBlID09PSBcIlVJLkNoYXJ0VHlwZS9MaW5lXCIpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSBlbHNlIGlmICh0aGlzLnJlbmRlckxpbmVDaGFydCA9PT0gZmFsc2UgJiYgY2hhcnRUeXBlID09PSBcIlVJLkNoYXJ0VHlwZS9MaW5lXCIpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9IGVsc2UgaWYgKHRoaXMuaXNWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMgPT09IHRydWUpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyB0aGUgc2VsZWN0aW9uIHZhcmlhbnQgZm9yIHRoZSB2aXN1YWwgZmlsdGVyLlxuXHQgKlxuXHQgKiBAcGFyYW0gZGVmYXVsdFNlbGVjdGlvblZhcmlhbnQgVGhlIGRlZmF1bHQgc2VsZWN0aW9uIHZhcmlhbnQgdG8gYmUgY2hlY2tlZFxuXHQgKiBAcmV0dXJucyB2b2lkXG5cdCAqL1xuXHRjaGVja1NlbGVjdGlvblZhcmlhbnQoZGVmYXVsdFNlbGVjdGlvblZhcmlhbnQ/OiBTZWxlY3Rpb25WYXJpYW50KTogdm9pZCB7XG5cdFx0bGV0IHNlbGVjdGlvblZhcmlhbnQ7XG5cdFx0aWYgKHRoaXMuc2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24pIHtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnQgPSB0aGlzLmdldERhdGFNb2RlbE9iamVjdEZvck1ldGFQYXRoPFNlbGVjdGlvblZhcmlhbnQ+KHRoaXMuc2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24pPy50YXJnZXRPYmplY3Q7XG5cdFx0fVxuXHRcdGlmICghc2VsZWN0aW9uVmFyaWFudCAmJiBkZWZhdWx0U2VsZWN0aW9uVmFyaWFudCkge1xuXHRcdFx0c2VsZWN0aW9uVmFyaWFudCA9IGRlZmF1bHRTZWxlY3Rpb25WYXJpYW50O1xuXHRcdH1cblx0XHRpZiAoc2VsZWN0aW9uVmFyaWFudCAmJiBzZWxlY3Rpb25WYXJpYW50LlNlbGVjdE9wdGlvbnMgJiYgIXRoaXMubXVsdGlwbGVTZWxlY3Rpb25BbGxvd2VkKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHNlbGVjdE9wdGlvbiBvZiBzZWxlY3Rpb25WYXJpYW50LlNlbGVjdE9wdGlvbnMpIHtcblx0XHRcdFx0aWYgKHNlbGVjdE9wdGlvbi5Qcm9wZXJ0eU5hbWU/LnZhbHVlID09PSB0aGlzLmNoYXJ0QW5ub3RhdGlvbj8uRGltZW5zaW9uc1swXS52YWx1ZSkge1xuXHRcdFx0XHRcdGlmIChzZWxlY3RPcHRpb24uUmFuZ2VzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihcIk11bHRpcGxlIFNlbGVjdE9wdGlvbnMgZm9yIEZpbHRlckZpZWxkIGhhdmluZyBTaW5nbGVWYWx1ZSBBbGxvd2VkIEV4cHJlc3Npb25cIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgYWdncmVnYXRlIHByb3BlcnRpZXMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGFnZ3JlZ2F0aW9ucyBhbmQgbWVhc3VyZS5cblx0ICogQHBhcmFtIGFnZ3JlZ2F0aW9ucyBUaGUgbGlzdCBvZiBhZ2dyZWdhdGVkIHByb3BlcnRpZXNcblx0ICogQHBhcmFtIG1lYXN1cmUgVGhlIG9wdGlvbmFsIG1lYXN1cmUgdG8gZmlsdGVyIHRoZSBhZ2dyZWdhdGVkIHByb3BlcnRpZXNcblx0ICogQHJldHVybnMgVGhlIG1hdGNoaW5nIGFnZ3JlZ2F0ZWQgcHJvcGVydHksIGlmIGZvdW5kOyBvdGhlcndpc2UsIHVuZGVmaW5lZFxuXHQgKi9cblx0Z2V0QWdncmVnYXRlUHJvcGVydGllcyhhZ2dyZWdhdGlvbnM6IEFnZ3JlZ2F0ZWRQcm9wZXJ0eVR5cGVbXSwgbWVhc3VyZT86IHN0cmluZyk6IEFnZ3JlZ2F0ZWRQcm9wZXJ0eVR5cGUgfCB1bmRlZmluZWQge1xuXHRcdGxldCBtYXRjaGVkQWdncmVnYXRlOiBBZ2dyZWdhdGVkUHJvcGVydHlUeXBlIHwgdW5kZWZpbmVkO1xuXHRcdGlmICghYWdncmVnYXRpb25zKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGFnZ3JlZ2F0aW9ucy5zb21lKGZ1bmN0aW9uIChhZ2dyZWdhdGUpIHtcblx0XHRcdGlmIChhZ2dyZWdhdGUuTmFtZSA9PT0gbWVhc3VyZSkge1xuXHRcdFx0XHRtYXRjaGVkQWdncmVnYXRlID0gYWdncmVnYXRlO1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gbWF0Y2hlZEFnZ3JlZ2F0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIHVuaXQgb2YgbWVhc3VyZSAoVW9NKSBmb3IgdGhlIHZpc3VhbCBmaWx0ZXIuXG5cdCAqXG5cdCAqIEBwYXJhbSBtZWFzdXJlcyBUaGUgbWVhc3VyZXMgZm9yIHRoZSB2aXN1YWwgZmlsdGVyXG5cdCAqIEBwYXJhbSBhZ2dyZWdhdGFibGVQcm9wZXJ0eU1lYXN1cmVzIFRoZSBhZ2dyZWdhdGFibGUgcHJvcGVydHkgbWVhc3VyZXMgZm9yIHRoZSB2aXN1YWwgZmlsdGVyXG5cdCAqIEByZXR1cm5zIFRoZSB1bml0IG9mIG1lYXN1cmUgZm9yIHRoZSB2aXN1YWwgZmlsdGVyXG5cdCAqL1xuXHRnZXRVb00obWVhc3VyZXM/OiBQcm9wZXJ0eUFubm90YXRpb25zX01lYXN1cmVzLCBhZ2dyZWdhdGFibGVQcm9wZXJ0eU1lYXN1cmVzPzogUHJvcGVydHlBbm5vdGF0aW9uc19NZWFzdXJlcyk6IHN0cmluZyB7XG5cdFx0bGV0IElTT0N1cnJlbmN5ID0gbWVhc3VyZXM/LklTT0N1cnJlbmN5O1xuXHRcdGxldCB1bml0ID0gbWVhc3VyZXM/LlVuaXQ7XG5cdFx0aWYgKCFJU09DdXJyZW5jeSAmJiAhdW5pdCAmJiBhZ2dyZWdhdGFibGVQcm9wZXJ0eU1lYXN1cmVzKSB7XG5cdFx0XHRJU09DdXJyZW5jeSA9IGFnZ3JlZ2F0YWJsZVByb3BlcnR5TWVhc3VyZXMuSVNPQ3VycmVuY3k7XG5cdFx0XHR1bml0ID0gYWdncmVnYXRhYmxlUHJvcGVydHlNZWFzdXJlcy5Vbml0O1xuXHRcdH1cblx0XHRyZXR1cm4gKFxuXHRcdFx0KElTT0N1cnJlbmN5IGFzIHVua25vd24gYXMgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPHN0cmluZz4pPy5wYXRoIHx8XG5cdFx0XHQodW5pdCBhcyB1bmtub3duIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+KT8ucGF0aFxuXHRcdCk7XG5cdH1cblxuXHRnZXRSZXF1aXJlZCgpOiBzdHJpbmcge1xuXHRcdGlmICh0aGlzLnJlcXVpcmVkKSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8TGFiZWwgdGV4dD1cIlwiIHdpZHRoPVwiMC41cmVtXCIgcmVxdWlyZWQ9XCJ0cnVlXCI+XG5cdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdGxheW91dERhdGE6IDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIHByaW9yaXR5PXtPdmVyZmxvd1Rvb2xiYXJQcmlvcml0eS5OZXZlck92ZXJmbG93fSAvPlxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gXCJcIjtcblx0XHR9XG5cdH1cblxuXHRnZXRUaXRsZSgpOiBzdHJpbmcge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8VGl0bGVcblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0aGlzLl9jb250ZW50SWQsIFwiTWVhc3VyZURpbWVuc2lvblRpdGxlXCJdKX1cblx0XHRcdFx0dGV4dD17dGhpcy5tZWFzdXJlRGltZW5zaW9uVGl0bGV9XG5cdFx0XHRcdHRvb2x0aXA9e3RoaXMudG9vbFRpcH1cblx0XHRcdFx0dGl0bGVTdHlsZT1cIkg2XCJcblx0XHRcdFx0bGV2ZWw9XCJIM1wiXG5cdFx0XHRcdGNsYXNzPVwic2FwVWlUaW55TWFyZ2luRW5kIHNhcFVpTm9NYXJnaW5CZWdpblwiXG5cdFx0XHQ+PC9UaXRsZT5cblx0XHQpO1xuXHR9XG5cblx0Z2V0VW9NVGl0bGUoc2hvd0Vycm9yRXhwcmVzc2lvbjogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRpZiAodGhpcy5Vb01WaXNpYmlsaXR5KSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8VGl0bGVcblx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RoaXMuX2NvbnRlbnRJZCwgXCJTY2FsZVVvTVRpdGxlXCJdKX1cblx0XHRcdFx0XHR2aXNpYmxlPXtzaG93RXJyb3JFeHByZXNzaW9ufVxuXHRcdFx0XHRcdHRleHQ9e3RoaXMuc2NhbGVVb01UaXRsZX1cblx0XHRcdFx0XHR0aXRsZVN0eWxlPVwiSDZcIlxuXHRcdFx0XHRcdGxldmVsPVwiSDNcIlxuXHRcdFx0XHRcdHdpZHRoPXtcblx0XHRcdFx0XHRcdHRoaXMuc2NhbGVVb01UaXRsZVxuXHRcdFx0XHRcdFx0XHQ/IGNvbXBpbGVFeHByZXNzaW9uKGlmRWxzZShyZXNvbHZlQmluZGluZ1N0cmluZyh0aGlzLnNjYWxlVW9NVGl0bGUpLCBcIjQuMTVyZW1cIiwgdW5kZWZpbmVkKSlcblx0XHRcdFx0XHRcdFx0OiB1bmRlZmluZWRcblx0XHRcdFx0XHR9XG5cdFx0XHRcdD48L1RpdGxlPlxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0fVxuXHR9XG5cblx0Z2V0VG9vbEJhclNwYWNlcigpOiBzdHJpbmcge1xuXHRcdGlmICh0aGlzLnNob3dWYWx1ZUhlbHBCdXR0b24pIHtcblx0XHRcdHJldHVybiA8VG9vbGJhclNwYWNlcj48L1Rvb2xiYXJTcGFjZXI+O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gXCJcIjtcblx0XHR9XG5cdH1cblxuXHRnZXRWYWx1ZUhlbHAoc2hvd0Vycm9yRXhwcmVzc2lvbjogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRpZiAodGhpcy5zaG93VmFsdWVIZWxwQnV0dG9uKSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0aGlzLl9jb250ZW50SWQsIFwiVmlzdWFsRmlsdGVyVmFsdWVIZWxwQnV0dG9uXCJdKX1cblx0XHRcdFx0XHR0eXBlPVwiVHJhbnNwYXJlbnRcIlxuXHRcdFx0XHRcdGFyaWFIYXNQb3B1cD1cIkRpYWxvZ1wiXG5cdFx0XHRcdFx0dGV4dD17dGhpcy5maWx0ZXJDb3VudEJpbmRpbmd9XG5cdFx0XHRcdFx0ZW5hYmxlZD17c2hvd0Vycm9yRXhwcmVzc2lvbn1cblx0XHRcdFx0XHRwcmVzcz17KGV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRWaXN1YWxGaWx0ZXJSdW50aW1lLmZpcmVWYWx1ZUhlbHAoZXZlbnQpO1xuXHRcdFx0XHRcdH19XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0bGF5b3V0RGF0YTogPE92ZXJmbG93VG9vbGJhckxheW91dERhdGEgcHJpb3JpdHk9e092ZXJmbG93VG9vbGJhclByaW9yaXR5Lk5ldmVyT3ZlcmZsb3d9IC8+LFxuXHRcdFx0XHRcdFx0Y3VzdG9tRGF0YTogPEN1c3RvbURhdGEga2V5PXtcIm11bHRpcGxlU2VsZWN0aW9uQWxsb3dlZFwifSB2YWx1ZT17dGhpcy5tdWx0aXBsZVNlbGVjdGlvbkFsbG93ZWR9IC8+XG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gXCJcIjtcblx0XHR9XG5cdH1cblxuXHRnZXRUb29sYmFyKHNob3dFcnJvckV4cHJlc3Npb246IHN0cmluZyk6IE92ZXJmbG93VG9vbGJhciB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxPdmVyZmxvd1Rvb2xiYXIgc3R5bGU9XCJDbGVhclwiPlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGNvbnRlbnQ6IChcblx0XHRcdFx0XHRcdDw+XG5cdFx0XHRcdFx0XHRcdHt0aGlzLmdldFJlcXVpcmVkKCl9XG5cdFx0XHRcdFx0XHRcdHt0aGlzLmdldFRpdGxlKCl9XG5cdFx0XHRcdFx0XHRcdHt0aGlzLmdldFVvTVRpdGxlKHNob3dFcnJvckV4cHJlc3Npb24pfVxuXHRcdFx0XHRcdFx0XHR7dGhpcy5nZXRUb29sQmFyU3BhY2VyKCl9XG5cdFx0XHRcdFx0XHRcdHt0aGlzLmdldFZhbHVlSGVscChzaG93RXJyb3JFeHByZXNzaW9uKX1cblx0XHRcdFx0XHRcdDwvPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fX1cblx0XHRcdDwvT3ZlcmZsb3dUb29sYmFyPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyBpbnBhcmFtZXRlcnMgY2hhbmdlcyBkdXJpbmcgdGhlIGVuYWJsZW1lbnQgb2YgdGhlIHZpc3VhbCBmaWx0ZXIgY2hhcnQgYmluZGluZyBiYXNlZCBvbiB0aGUgY2hhbmdlZCBmaWx0ZXIgZmllbGQgcGF0aHMuXG5cdCAqXG5cdCAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgaW4tcGFyYW1ldGVycyBvZiB0aGUgdmlzdWFsIGZpbHRlciBhcmUgYWZmZWN0ZWQgYnkgdGhlIGNoYW5nZWQgZmlsdGVyIGZpZWxkIHBhdGhzLlxuXHQgKiBJZiBhbnkgb2YgdGhlIGluLXBhcmFtZXRlcnMgYXJlIGFmZmVjdGVkLCB3ZSBzZXRzIHRoIGludGVybmFsIGNvbmRpdGlvbiB1cGRhdGUgcGVuZGluZyBmbGFnIHRvIHRydWUuXG5cdCAqIFN1YnNlcXVlbnRseSwgdGhlIGNoYXJ0IGJpbmRpbmcgd2lsbCBiZSBlbmFibGVkIG9ubHkgYWZ0ZXIgdGhlIGNvbmRpdGlvbiBtb2RlbCBpcyB1cGRhdGVkIGZvciB0aGUgdmlzdWFsIGZpbHRlciB3aXRoIHRoZSBpbnBhcmFtZXRlciBzZWxlY3Rpb25zLlxuXHQgKiBAcGFyYW0gY2hhbmdlZEZpbHRlckZpZWxkUGF0aHMgQXJyYXkgb2YgY2hhbmdlZCBmaWx0ZXIgZmllbGQgcGF0aHMuXG5cdCAqL1xuXHRfaGFuZGxlSW5QYXJhbXNDaGFydEJpbmRpbmdFbmFibGVtZW50KGNoYW5nZWRGaWx0ZXJGaWVsZFBhdGhzOiBzdHJpbmdbXSk6IHZvaWQge1xuXHRcdGNvbnN0IGluUGFyYW1ldGVycyA9IHRoaXMuZ2V0UHJvcGVydHkoXCJpblBhcmFtZXRlcnNcIikuY3VzdG9tRGF0YSBhcyBQYXJhbWV0ZXJUeXBlW107XG5cdFx0Y29uc3QgaW5QYXJhbWV0ZXJMb2NhbERhdGFQcm9wZXJ0aWVzID0gaW5QYXJhbWV0ZXJzLm1hcCgoaW5QYXJhbWV0ZXIpID0+IGluUGFyYW1ldGVyLmxvY2FsRGF0YVByb3BlcnR5KTtcblx0XHRjb25zdCB2ZkluUGFyYW1ldGVyVXBkYXRlRXhwZWN0ZWQgPSBjaGFuZ2VkRmlsdGVyRmllbGRQYXRocy5zb21lKChwYXRoKSA9PiBpblBhcmFtZXRlckxvY2FsRGF0YVByb3BlcnRpZXMuaW5jbHVkZXMocGF0aCkpO1xuXHRcdGlmICh2ZkluUGFyYW1ldGVyVXBkYXRlRXhwZWN0ZWQpIHtcblx0XHRcdC8vIElmIHRoZSBpblBhcmFtZXRlcnMgb2YgdGhlIHZpc3VhbCBmaWx0ZXIgYXJlIGNoYW5nZWQoZGlmZlN0YXRlKSwgd2UgbmVlZCB0byB3YWl0IGZvciBjb25kaXRpb25zIG1vZGVsIHRvIGJlIHVwZGF0ZWQgZm9yIHRoZSB2aXN1YWwgZmlsdGVyIHRvIGZpbHRlciBjaGFydCBiaW5kaW5nLlxuXHRcdFx0dGhpcy5fc2V0SW50ZXJuYWxVcGRhdGVQZW5kaW5nKHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBlbmFibGVtZW50IG9mIHRoZSB2aXN1YWwgZmlsdGVyIGNoYXJ0IGJpbmRpbmcuXG5cdCAqIEBwYXJhbSBlbmFibGVCaW5kaW5nIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRvIGVuYWJsZSBvciBkaXNhYmxlIHRoZSBjaGFydCBiaW5kaW5nLlxuXHQgKiBAcGFyYW0gY2hhbmdlZEZpbHRlckZpZWxkUGF0aHMgQXJyYXkgb2YgY2hhbmdlZCBmaWx0ZXIgZmllbGQgcGF0aHMgdGhhdCBtYXkgYWZmZWN0IHRoZSBpbi1wYXJhbWV0ZXJzIG9mIHRoZSB2aXN1YWwgZmlsdGVyLlxuXHQgKi9cblx0c2V0RW5hYmxlQ2hhcnRCaW5kaW5nKGVuYWJsZUJpbmRpbmc6IGJvb2xlYW4sIGNoYW5nZWRGaWx0ZXJGaWVsZFBhdGhzOiBzdHJpbmdbXSA9IFtdKTogdm9pZCB7XG5cdFx0aWYgKGVuYWJsZUJpbmRpbmcgJiYgY2hhbmdlZEZpbHRlckZpZWxkUGF0aHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly8gSWYgaW5wYXJhbWV0ZXJzIGFyZSBjaGFuZ2VkLCB3ZSBuZWVkIHRvIHdhaXQgdGlsbCB0aGUgY29uZGl0aW9uIG1vZGVsIHRvIGJlIHVwZGF0ZWQgYmVmb3JlIHdlIHNlbmQgcmVzdW1lIHRoZSBiaW5kaW5nIHdpdGggdGhlIGlucGFyYW1ldGVyIHNlbGVjdGlvbnMgYXMgZmlsdGVycyB0byB0aGUgY2hhcnQgYmluZGluZyBhbmQgc2VuZCB0aGUgcmVxdWVzdC5cblx0XHRcdHRoaXMuX2hhbmRsZUluUGFyYW1zQ2hhcnRCaW5kaW5nRW5hYmxlbWVudChjaGFuZ2VkRmlsdGVyRmllbGRQYXRocyk7XG5cdFx0fVxuXG5cdFx0Ly8gVGhlIGJpbmRpbmcgaXMgZXhwZWN0ZWQgdG8gYmUgZW5hYmxlZCBvbmx5IHdoZW4gdmlzdWFsIGZpbHRlciBpcyByZWFkeVxuXHRcdC8vIDEuIGludGVybmFsbHkoaW5wYXJhbWV0ZXIgY29uZGl0aW9ucyBhcmUgdXBkYXRlZCBhbmQgdmlzdWFsIGZpbHRlciBpcyByZW5kZXJlZClcblx0XHQvLyAyLiBhbmQgZXh0ZXJuYWxseShlbmFibGVDaGFydEJpbmRpbmcpLiBMaWtlLCB4QXBwU3RhdGUgb3IgaUFwcFN0YXRlIGlzIGFwcGxpZWQgdG8gcGFyZW50IGZpbHRlciBiYXIuXG5cdFx0Y29uc3QgaW50ZXJuYWxVcGRhdGVQZW5kaW5nID0gdGhpcy5pblBhcmFtQ29uZGl0aW9uVXBkYXRlUGVuZGluZyB8fCB0aGlzLnJlbmRlcmluZ1VwZGF0ZVBlbmRpbmc7XG5cblx0XHRjb25zdCBvdmVyYWxsRW5hYmxlQmluZGluZyA9IGVuYWJsZUJpbmRpbmcgJiYgIWludGVybmFsVXBkYXRlUGVuZGluZztcblx0XHRjb25zdCBjaGFydEJpbmRpbmcgPSB0aGlzLmNvbnRlbnQ/LmdldENoYXJ0QmluZGluZygpO1xuXHRcdGlmIChjaGFydEJpbmRpbmcpIHtcblx0XHRcdGlmIChvdmVyYWxsRW5hYmxlQmluZGluZyAmJiBjaGFydEJpbmRpbmcuaXNTdXNwZW5kZWQoKSkge1xuXHRcdFx0XHRjaGFydEJpbmRpbmcucmVzdW1lKCk7XG5cdFx0XHR9IGVsc2UgaWYgKCFvdmVyYWxsRW5hYmxlQmluZGluZyAmJiAhY2hhcnRCaW5kaW5nLmlzU3VzcGVuZGVkKCkpIHtcblx0XHRcdFx0Y2hhcnRCaW5kaW5nLnN1c3BlbmQoKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5zZXRQcm9wZXJ0eShcImVuYWJsZUNoYXJ0QmluZGluZ1wiLCBlbmFibGVCaW5kaW5nLCB0cnVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBpbnRlcm5hbCB1cGRhdGUgcGVuZGluZyBmbGFncyBmb3IgdGhlIHZpc3VhbCBmaWx0ZXIuXG5cdCAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gbWFuYWdlIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgdmlzdWFsIGZpbHRlciwgc3BlY2lmaWNhbGx5IHdoZW4gdGhlIGluLXBhcmFtZXRlcnMgYW5kIHJlbmRlcmluZyB1cGRhdGVzIGFyZSBwZW5kaW5nLlxuXHQgKiBAcGFyYW0gY29uZGl0aW9uVXBkYXRlUGVuZGluZyBXaGV0aGVyIHRoZSBjb25kaXRpb24gdXBkYXRlIGlzIHBlbmRpbmcgb3Igbm90LiBEZWZhdWx0cyB0byB0aGUgY3VycmVudCBpblBhcmFtQ29uZGl0aW9uVXBkYXRlUGVuZGluZyBzdGF0ZS5cblx0ICogQHBhcmFtIHJlbmRlcmluZ1VwZGF0ZVBlbmRpbmcgV2hldGhlciB0aGUgcmVuZGVyaW5nIHVwZGF0ZSBpcyBwZW5kaW5nIG9yIG5vdC4gRGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgcmVuZGVyaW5nVXBkYXRlUGVuZGluZyBzdGF0ZS5cblx0ICovXG5cdF9zZXRJbnRlcm5hbFVwZGF0ZVBlbmRpbmcoXG5cdFx0Y29uZGl0aW9uVXBkYXRlUGVuZGluZyA9IHRoaXMuaW5QYXJhbUNvbmRpdGlvblVwZGF0ZVBlbmRpbmcsXG5cdFx0cmVuZGVyaW5nVXBkYXRlUGVuZGluZyA9IHRoaXMucmVuZGVyaW5nVXBkYXRlUGVuZGluZ1xuXHQpOiB2b2lkIHtcblx0XHQvLyBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGludGVybmFsbHkgYnkgdmlzdWFsIGZpbHRlciB0byBlbmFibGUgYW5kIGRpc2FibGUgYmluZGluZ3MuXG5cdFx0Y29uc3QgaXNCaW5kaW5nRW5hYmxlZEZvclZpc3VhbEZpbHRlckV4dGVybmFsbHkgPSB0aGlzLmVuYWJsZUNoYXJ0QmluZGluZztcblx0XHRjb25zdCBjaGFydEJpbmRpbmcgPSB0aGlzLmNvbnRlbnQ/LmdldENoYXJ0QmluZGluZygpO1xuXHRcdGNvbnN0IHVwZGF0ZVBlbmRpbmcgPSBjb25kaXRpb25VcGRhdGVQZW5kaW5nIHx8IHJlbmRlcmluZ1VwZGF0ZVBlbmRpbmc7XG5cdFx0aWYgKCF1cGRhdGVQZW5kaW5nICYmIGlzQmluZGluZ0VuYWJsZWRGb3JWaXN1YWxGaWx0ZXJFeHRlcm5hbGx5ICYmIGNoYXJ0QmluZGluZyAmJiBjaGFydEJpbmRpbmcuaXNTdXNwZW5kZWQoKSkge1xuXHRcdFx0Ly8gSW50ZXJuYWwgdXBkYXRlIGlzIGRvbmUsIGJpbmRpbmcgaXMgZW5hYmxlZCBleHRlcm5hbGx5LCBzbyByZXN1bWUgdGhlIGJpbmRpbmcuXG5cdFx0XHRjaGFydEJpbmRpbmcucmVzdW1lKCk7XG5cdFx0fSBlbHNlIGlmICh1cGRhdGVQZW5kaW5nICYmIGNoYXJ0QmluZGluZyAmJiAhY2hhcnRCaW5kaW5nLmlzU3VzcGVuZGVkKCkpIHtcblx0XHRcdC8vIEludGVybmFsIHVwZGF0ZSBpcyBwZW5kaW5nL2luIHByb2dyZXNzLCBzbyB3ZSBzdXNwZW5kIHRoZSBiaW5kaW5nLlxuXHRcdFx0Y2hhcnRCaW5kaW5nLnN1c3BlbmQoKTtcblx0XHR9XG5cdFx0Ly8gVXBkYXRlIHRoZSBpbnRlcm5hbCBmbGFncyBmb3IgY29uZGl0aW9uIGFuZCByZW5kZXJpbmcgdXBkYXRlIHBlbmRpbmcuXG5cdFx0dGhpcy5pblBhcmFtQ29uZGl0aW9uVXBkYXRlUGVuZGluZyA9IGNvbmRpdGlvblVwZGF0ZVBlbmRpbmc7XG5cdFx0dGhpcy5yZW5kZXJpbmdVcGRhdGVQZW5kaW5nID0gcmVuZGVyaW5nVXBkYXRlUGVuZGluZztcblx0fVxuXG5cdGNyZWF0ZUNvbnRlbnQoKTogVmlzdWFsRmlsdGVyQ29udHJvbCB7XG5cdFx0Y29uc3QgaWQgPSBnZW5lcmF0ZShbdGhpcy5wYXRoXSk7XG5cdFx0Y29uc3Qgc2hvd0Vycm9yRXhwcmVzc2lvbiA9IFwiez0gISR7aW50ZXJuYWw+XCIgKyBpZCArIFwiL3Nob3dFcnJvcn19XCI7XG5cdFx0Y29uc3QgY296eU1vZGUgPSBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucyhcInNhcFVpU2l6ZUNvenlcIik7XG5cdFx0Y29uc3Qgb3ZlcmFsbEhlaWdodCA9IGNvenlNb2RlID8gXCIxM3JlbVwiIDogXCIxMDAlXCI7XG5cdFx0Y29uc3QgY2hhcnRIZWlnaHQgPSBjb3p5TW9kZSA/IFwiMTAwJVwiIDogXCI3LjVyZW1cIjtcblx0XHRjb25zdCB2ZkNvbnRyb2xJZCA9IHRoaXMuX2NvbnRlbnRJZCA/IGdlbmVyYXRlKFt0aGlzLl9jb250ZW50SWRdKSA6IHVuZGVmaW5lZDtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PFZpc3VhbEZpbHRlckNvbnRyb2wgaWQ9e3ZmQ29udHJvbElkfSBoZWlnaHQ9e292ZXJhbGxIZWlnaHR9IHdpZHRoPVwiMjAuNXJlbVwiIGNsYXNzPVwic2FwVWlTbWFsbE1hcmdpbkJlZ2luRW5kXCI+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0Y3VzdG9tRGF0YTogPEN1c3RvbURhdGEga2V5PXtcImluZm9QYXRoXCJ9IHZhbHVlPXtnZW5lcmF0ZShbdGhpcy5wYXRoXSl9IC8+LFxuXHRcdFx0XHRcdGl0ZW1zOiAoXG5cdFx0XHRcdFx0XHQ8PlxuXHRcdFx0XHRcdFx0XHQ8VkJveCBoZWlnaHQ9XCIycmVtXCIgY2xhc3M9XCJzYXBVaVRpbnlNYXJnaW5Ub3BCb3R0b21cIj5cblx0XHRcdFx0XHRcdFx0XHR7dGhpcy5nZXRUb29sYmFyKHNob3dFcnJvckV4cHJlc3Npb24pfVxuXHRcdFx0XHRcdFx0XHQ8L1ZCb3g+XG5cdFx0XHRcdFx0XHRcdDxWQm94IGhlaWdodD17Y2hhcnRIZWlnaHR9IHdpZHRoPVwiMTAwJVwiPlxuXHRcdFx0XHRcdFx0XHRcdHtnZXRWaXN1YWxGaWx0ZXJDaGFydCh0aGlzKX1cblx0XHRcdFx0XHRcdFx0PC9WQm94PlxuXHRcdFx0XHRcdFx0PC8+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9WaXN1YWxGaWx0ZXJDb250cm9sPlxuXHRcdCk7XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUF5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFsQkEsSUFvQnFCQSxZQUFZLElBQUFDLElBQUEsR0FEaENDLGNBQWMsQ0FBQywwQ0FBMEMsQ0FBQyxFQUFBQyxLQUFBLEdBRXpEQyxrQkFBa0IsQ0FBQywwQkFBMEIsQ0FBQyxFQUFBQyxLQUFBLEdBRzlDQyxRQUFRLENBQUM7SUFDVEMsSUFBSSxFQUFFO0VBQ1AsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHREYsUUFBUSxDQUFDO0lBQ1RDLElBQUksRUFBRTtFQUNQLENBQUMsQ0FBQyxFQUFBRSxLQUFBLEdBR0RDLEtBQUssQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHUEwsUUFBUSxDQUFDO0lB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
|
|
798
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJWaXN1YWxGaWx0ZXIiLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsImltcGxlbWVudEludGVyZmFjZSIsIl9kZWMzIiwicHJvcGVydHkiLCJ0eXBlIiwiX2RlYzQiLCJfZGVjNSIsImV2ZW50IiwiX2RlYzYiLCJyZXF1aXJlZCIsIl9kZWM3IiwiX2RlYzgiLCJfZGVjOSIsIl9kZWMxMCIsIl9kZWMxMSIsIl9kZWMxMiIsIl9kZWMxMyIsIl9kZWMxNCIsIl9kZWMxNSIsIl9kZWMxNiIsIl9kZWMxNyIsIl9kZWMxOCIsIl9kZWMxOSIsIl9kZWMyMCIsIl9kZWMyMSIsIl9kZWMyMiIsIl9kZWMyMyIsIl9kZWMyNCIsIl9kZWMyNSIsIl9kZWMyNiIsIl9kZWMyNyIsIl9kZWMyOCIsIl9kZWMyOSIsIl9kZWMzMCIsIl9kZWMzMSIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQnVpbGRpbmdCbG9jayIsInByb3BzIiwib3RoZXJzIiwiX3RoaXMiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsIl9kZXNjcmlwdG9yMyIsIl9kZXNjcmlwdG9yNCIsIl9kZXNjcmlwdG9yNSIsIl9kZXNjcmlwdG9yNiIsIl9kZXNjcmlwdG9yNyIsIl9kZXNjcmlwdG9yOCIsIl9kZXNjcmlwdG9yOSIsIl9kZXNjcmlwdG9yMTAiLCJfZGVzY3JpcHRvcjExIiwiX2Rlc2NyaXB0b3IxMiIsIl9kZXNjcmlwdG9yMTMiLCJfZGVzY3JpcHRvcjE0IiwiX2Rlc2NyaXB0b3IxNSIsIl9kZXNjcmlwdG9yMTYiLCJfZGVzY3JpcHRvcjE3IiwiX2Rlc2NyaXB0b3IxOCIsIl9kZXNjcmlwdG9yMTkiLCJfZGVzY3JpcHRvcjIwIiwiX2Rlc2NyaXB0b3IyMSIsIl9kZXNjcmlwdG9yMjIiLCJfZGVzY3JpcHRvcjIzIiwiX2Rlc2NyaXB0b3IyNCIsIl9kZXNjcmlwdG9yMjUiLCJfZGVzY3JpcHRvcjI2IiwiX2Rlc2NyaXB0b3IyNyIsIl9kZXNjcmlwdG9yMjgiLCJfZGVzY3JpcHRvcjI5IiwiX2Rlc2NyaXB0b3IzMCIsImluUGFyYW1Db25kaXRpb25VcGRhdGVQZW5kaW5nIiwicmVuZGVyaW5nVXBkYXRlUGVuZGluZyIsIl9leHBvcnRzIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJvbk1ldGFkYXRhQXZhaWxhYmxlIiwiX293bmVyQ29tcG9uZW50IiwiZ3JvdXBJZCIsInBhdGgiLCJtZXRhUGF0aCIsIm93bmVyIiwiX2dldE93bmVyIiwiY29udGV4dFBhdGgiLCJwcmVwcm9jZXNzb3JDb250ZXh0IiwiZnVsbENvbnRleHRQYXRoIiwiY29udGV4dE9iamVjdFBhdGgiLCJnZXREYXRhTW9kZWxPYmplY3RGb3JNZXRhUGF0aCIsIl9yZXNvbHZlZENvbnRleHRQYXRoIiwiZW5kc1dpdGgiLCJtZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJkaWFnbm9zdGljcyIsImdldEFwcENvbXBvbmVudCIsImdldERpYWdub3N0aWNzIiwidmlld0RhdGEiLCJnZXRSb290Q29udHJvbGxlciIsImdldFZpZXciLCJnZXRWaWV3RGF0YSIsImNvbnZlcnRlckNvbnRleHQiLCJDb252ZXJ0ZXJDb250ZXh0IiwiY3JlYXRlQ29udmVydGVyQ29udGV4dEZvck1hY3JvIiwic3RhcnRpbmdFbnRpdHlTZXQiLCJuYW1lIiwibWVyZ2UiLCJjb250ZXh0TG9jYXRpb24iLCJNYW5pZmVzdFdyYXBwZXIiLCJhZ2dyZWdhdGlvbkhlbHBlciIsIkFnZ3JlZ2F0aW9uSGVscGVyIiwiZ2V0RW50aXR5VHlwZSIsImN1c3RvbUFnZ3JlZ2F0ZXMiLCJnZXRDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9ucyIsInB2QW5ub3RhdGlvbiIsInRhcmdldE9iamVjdCIsIm1lYXN1cmUiLCJ2aXN1YWxpemF0aW9ucyIsIlZpc3VhbGl6YXRpb25zIiwiZ2V0Q2hhcnRBbm5vdGF0aW9uIiwiYWdncmVnYXRpb25zIiwiY3VzdEFnZ01lYXN1cmUiLCJjaGFydEFubm90YXRpb24iLCJNZWFzdXJlcyIsImxlbmd0aCIsImZpbHRlciIsImN1c3RBZ2ciLCJxdWFsaWZpZXIiLCJ2YWx1ZSIsImdldEFnZ3JlZ2F0ZWRQcm9wZXJ0aWVzIiwiRHluYW1pY01lYXN1cmVzIiwiTG9nIiwid2FybmluZyIsImdldENvbnZlcnRlckNvbnRleHRGb3IiLCJnZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsIk5hbWUiLCJ0b1N0cmluZyIsImdldEFnZ3JlZ2F0ZWRQcm9wZXJ0eSIsInNvbWUiLCJjdXN0b21BZ2dyZWdhdGUiLCJkZWZhdWx0U2VsZWN0aW9uVmFyaWFudCIsImdldERlZmF1bHRTZWxlY3Rpb25WYXJpYW50IiwiY2hlY2tTZWxlY3Rpb25WYXJpYW50IiwiYWdncmVnYXRpb24iLCJnZXRBZ2dyZWdhdGVQcm9wZXJ0aWVzIiwiYWdncmVnYXRlUHJvcGVydGllcyIsInByb3BlcnR5QW5ub3RhdGlvbnMiLCIkdGFyZ2V0IiwiYW5ub3RhdGlvbnMiLCJhZ2dyZWdhdGFibGVQcm9wZXJ0eUFubm90YXRpb25zIiwiQWdncmVnYXRhYmxlUHJvcGVydHkiLCJjaGVja0lmVU9NSGFzQ3VzdG9tQWdncmVnYXRlIiwicHJvcGVydHlIaWRkZW4iLCJVSSIsIkhpZGRlbiIsImhpZGRlbk1lYXN1cmUiLCJ2YWx1ZU9mIiwiY2hhcnRUeXBlIiwiQ2hhcnRUeXBlIiwic2hvd1ZhbHVlSGVscEJ1dHRvbiIsImdldHNob3dWYWx1ZUhlbHBCdXR0b24iLCJkcmFmdFN1cHBvcnRlZCIsIk1vZGVsSGVscGVyIiwiaXNEcmFmdFN1cHBvcnRlZCIsImVycm9yTWVzc2FnZSIsImdldEVycm9yTWVzc2FnZSIsImNoYXJ0TWVhc3VyZSIsIm1lYXN1cmVEaW1lbnNpb25UaXRsZSIsIkludGVyYWN0aXZlQ2hhcnRIZWxwZXIiLCJnZXRNZWFzdXJlRGltZW5zaW9uVGl0bGUiLCJjb2xsZWN0aW9uIiwidG9vbFRpcCIsImdldFRvb2xUaXAiLCJyZW5kZXJMaW5lQ2hhcnQiLCJVb01WaXNpYmlsaXR5IiwiZ2V0VW9NVmlzaWJsaXR5Iiwic2hvd0Vycm9yIiwic2NhbGVVb01UaXRsZSIsImdldFNjYWxlVW9NVGl0bGUiLCJzb3J0T3JkZXIiLCJTb3J0T3JkZXIiLCJmaWx0ZXJDb3VudEJpbmRpbmciLCJnZXRmaWx0ZXJDb3VudEJpbmRpbmciLCJ2aWV3SWQiLCJnZXRQYWdlQ29udHJvbGxlciIsImdldElkIiwiX2NvbnRlbnRJZCIsImlkIiwic2VsZWN0aW9uVmFyaWFudCIsInNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwidW5kZWZpbmVkIiwiY29udGVudCIsImNyZWF0ZUNvbnRlbnQiLCJtZWFzdXJlcyIsImFnZ3JlZ2F0YWJsZVByb3BlcnR5TWVhc3VyZXMiLCJVT00iLCJnZXRVb00iLCJVb01IYXNDdXN0b21BZ2dyZWdhdGUiLCJ2aXN1YWxpemF0aW9uIiwic0Fubm90YXRpb25QYXRoIiwiZ2V0RW50aXR5VHlwZUFubm90YXRpb24iLCJhbm5vdGF0aW9uIiwic2V0U2hvd1ZhbHVlSGVscCIsImJTaG93VmFsdWVIZWxwIiwiaXNBIiwiZ2V0SXRlbXMiLCJvVmlzdWFsRmlsdGVyQ29udHJvbCIsImdldFZpc3VhbEZpbHRlckNvbnRyb2wiLCJnZXRDb250ZW50Iiwib0lubmVyQ29udHJvbCIsInNldFZpc2libGUiLCJzZXRQcm9wZXJ0eSIsInNldFZhbHVlSGVscEljb25TcmMiLCJzSWNvblNyYyIsInNldEljb24iLCJ2YWxpZENoYXJ0VHlwZSIsImVycm9yTWVzc2FnZVRpdGxlIiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJzRGltZW5zaW9uVHlwZSIsIkRpbWVuc2lvbnMiLCJpc1ZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcyIsIlNlbGVjdE9wdGlvbnMiLCJtdWx0aXBsZVNlbGVjdGlvbkFsbG93ZWQiLCJzZWxlY3RPcHRpb24iLCJQcm9wZXJ0eU5hbWUiLCJSYW5nZXMiLCJlcnJvciIsIm1hdGNoZWRBZ2dyZWdhdGUiLCJhZ2dyZWdhdGUiLCJJU09DdXJyZW5jeSIsInVuaXQiLCJVbml0IiwiZ2V0UmVxdWlyZWQiLCJfanN4IiwiTGFiZWwiLCJ0ZXh0Iiwid2lkdGgiLCJjaGlsZHJlbiIsImxheW91dERhdGEiLCJPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIiwicHJpb3JpdHkiLCJPdmVyZmxvd1Rvb2xiYXJQcmlvcml0eSIsIk5ldmVyT3ZlcmZsb3ciLCJnZXRUaXRsZSIsInRpdGxlQ29udHJvbCIsIlRpdGxlIiwiZ2VuZXJhdGUiLCJ0b29sdGlwIiwidGl0bGVTdHlsZSIsImxldmVsIiwiY2xhc3MiLCJfYXR0YWNoVGl0bGVFdmVudERlbGVnYXRlcyIsImdldFVvTVRpdGxlIiwic2hvd0Vycm9yRXhwcmVzc2lvbiIsInZpc2libGUiLCJjb21waWxlRXhwcmVzc2lvbiIsImlmRWxzZSIsInJlc29sdmVCaW5kaW5nU3RyaW5nIiwiZ2V0VG9vbEJhclNwYWNlciIsIlRvb2xiYXJTcGFjZXIiLCJnZXRWYWx1ZUhlbHAiLCJCdXR0b24iLCJhcmlhSGFzUG9wdXAiLCJlbmFibGVkIiwicHJlc3MiLCJWaXN1YWxGaWx0ZXJSdW50aW1lIiwiZmlyZVZhbHVlSGVscCIsImN1c3RvbURhdGEiLCJDdXN0b21EYXRhIiwiZ2V0VG9vbGJhciIsIk92ZXJmbG93VG9vbGJhciIsInN0eWxlIiwiX2pzeHMiLCJfRnJhZ21lbnQiLCJfaGFuZGxlSW5QYXJhbXNDaGFydEJpbmRpbmdFbmFibGVtZW50IiwiY2hhbmdlZEZpbHRlckZpZWxkUGF0aHMiLCJpblBhcmFtZXRlcnMiLCJnZXRQcm9wZXJ0eSIsImluUGFyYW1ldGVyTG9jYWxEYXRhUHJvcGVydGllcyIsIm1hcCIsImluUGFyYW1ldGVyIiwibG9jYWxEYXRhUHJvcGVydHkiLCJ2ZkluUGFyYW1ldGVyVXBkYXRlRXhwZWN0ZWQiLCJpbmNsdWRlcyIsIl9zZXRJbnRlcm5hbFVwZGF0ZVBlbmRpbmciLCJ0aXRsZWNvbnRyb2wiLCJhZGRFdmVudERlbGVnYXRlIiwib25tb3VzZW92ZXIiLCJfZXZ0IiwiZ2V0VG9vbHRpcCIsImdldERvbVJlZiIsInNldEF0dHJpYnV0ZSIsInNldEVuYWJsZUNoYXJ0QmluZGluZyIsImVuYWJsZUJpbmRpbmciLCJhcmd1bWVudHMiLCJpbnRlcm5hbFVwZGF0ZVBlbmRpbmciLCJvdmVyYWxsRW5hYmxlQmluZGluZyIsImNoYXJ0QmluZGluZyIsImdldENoYXJ0QmluZGluZyIsImlzU3VzcGVuZGVkIiwicmVzdW1lIiwic3VzcGVuZCIsImNvbmRpdGlvblVwZGF0ZVBlbmRpbmciLCJpc0JpbmRpbmdFbmFibGVkRm9yVmlzdWFsRmlsdGVyRXh0ZXJuYWxseSIsImVuYWJsZUNoYXJ0QmluZGluZyIsInVwZGF0ZVBlbmRpbmciLCJjb3p5TW9kZSIsImRvY3VtZW50IiwiYm9keSIsImNsYXNzTGlzdCIsImNvbnRhaW5zIiwib3ZlcmFsbEhlaWdodCIsImNoYXJ0SGVpZ2h0IiwidmZDb250cm9sSWQiLCJWaXN1YWxGaWx0ZXJDb250cm9sIiwiaGVpZ2h0IiwiaXRlbXMiLCJWQm94IiwiZ2V0VmlzdWFsRmlsdGVyQ2hhcnQiLCJCdWlsZGluZ0Jsb2NrIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJWaXN1YWxGaWx0ZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQW5ub3RhdGlvblBhdGgsUGF0aEFubm90YXRpb25FeHByZXNzaW9uIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEN1c3RvbUFnZ3JlZ2F0ZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQWdncmVnYXRpb25cIjtcbmltcG9ydCB0eXBlIHsgQWdncmVnYXRlZFByb3BlcnR5LEFnZ3JlZ2F0ZWRQcm9wZXJ0eVR5cGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0FuYWx5dGljc1wiO1xuaW1wb3J0IHsgU29ydE9yZGVyVHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnR5QW5ub3RhdGlvbnMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0VkbV9UeXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUFubm90YXRpb25zX01lYXN1cmVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9NZWFzdXJlc19FZG1cIjtcbmltcG9ydCB0eXBlIHsgQ2hhcnQsRGF0YVBvaW50LExpbmVJdGVtLFByZXNlbnRhdGlvblZhcmlhbnQsU2VsZWN0aW9uVmFyaWFudCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IG1lcmdlIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgeyBjb21waWxlRXhwcmVzc2lvbixpZkVsc2UscmVzb2x2ZUJpbmRpbmdTdHJpbmcgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLGV2ZW50LGltcGxlbWVudEludGVyZmFjZSxwcm9wZXJ0eSx0eXBlIFByb3BlcnRpZXNPZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBUZW1wbGF0ZUNvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVDb21wb25lbnRcIjtcbmltcG9ydCBCdWlsZGluZ0Jsb2NrIGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy9CdWlsZGluZ0Jsb2NrXCI7XG5pbXBvcnQgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgeyBCYXNlTWFuaWZlc3RTZXR0aW5ncyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCBNYW5pZmVzdFdyYXBwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RXcmFwcGVyXCI7XG5pbXBvcnQgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdFNlbGVjdGlvblZhcmlhbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vRGF0YVZpc3VhbGl6YXRpb25cIjtcbmltcG9ydCB0eXBlIHsgUGFyYW1ldGVyVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0xpc3RSZXBvcnQvVmlzdWFsRmlsdGVyc1wiO1xuaW1wb3J0IHsgQWdncmVnYXRpb25IZWxwZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0FnZ3JlZ2F0aW9uXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB7IFZpZXdEYXRhIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1RlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IERpYWdub3N0aWNzIGZyb20gXCJzYXAvZmUvY29yZS9zdXBwb3J0L0RpYWdub3N0aWNzXCI7XG5pbXBvcnQgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgTGFiZWwgZnJvbSBcInNhcC9tL0xhYmVsXCI7XG5pbXBvcnQgT3ZlcmZsb3dUb29sYmFyIGZyb20gXCJzYXAvbS9PdmVyZmxvd1Rvb2xiYXJcIjtcbmltcG9ydCBPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIGZyb20gXCJzYXAvbS9PdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhXCI7XG5pbXBvcnQgVGl0bGUgZnJvbSBcInNhcC9tL1RpdGxlXCI7XG5pbXBvcnQgVG9vbGJhclNwYWNlciBmcm9tIFwic2FwL20vVG9vbGJhclNwYWNlclwiO1xuaW1wb3J0IFZCb3ggZnJvbSBcInNhcC9tL1ZCb3hcIjtcbmltcG9ydCB7IE92ZXJmbG93VG9vbGJhclByaW9yaXR5IH0gZnJvbSBcInNhcC9tL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDdXN0b21EYXRhIGZyb20gXCJzYXAvdWkvY29yZS9DdXN0b21EYXRhXCI7XG5pbXBvcnQgeyAkQ29udHJvbFNldHRpbmdzIH0gZnJvbSBcInNhcC91aS9tZGMvQ29udHJvbFwiO1xuaW1wb3J0IE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgVmlzdWFsRmlsdGVyQ29udHJvbCB9IGZyb20gXCIuLi9jb250cm9scy9maWx0ZXJiYXIvVmlzdWFsRmlsdGVyXCI7XG5pbXBvcnQgSW50ZXJhY3RpdmVDaGFydEhlbHBlciBmcm9tIFwiLi9JbnRlcmFjdGl2ZUNoYXJ0SGVscGVyXCI7XG5pbXBvcnQgVmlzdWFsRmlsdGVyUnVudGltZSBmcm9tIFwiLi9WaXN1YWxGaWx0ZXJSdW50aW1lXCI7XG5pbXBvcnQgeyBnZXRWaXN1YWxGaWx0ZXJDaGFydCB9IGZyb20gXCIuL2ZyYWdtZW50cy9JbnRlcmFjdGl2ZUNoYXJ0c1wiO1xuLyoqXG4gKiBCdWlsZGluZyBibG9jayBmb3IgY3JlYXRpbmcgYSBWaXN1YWxGaWx0ZXIgYmFzZWQgb24gdGhlIG1ldGFkYXRhIHByb3ZpZGVkIGJ5IE9EYXRhIFY0LlxuICogPGJyPlxuICogQSBDaGFydCBhbm5vdGF0aW9uIGlzIHJlcXVpcmVkIHRvIGJyaW5nIHVwIGFuIGludGVyYWN0aXZlIGNoYXJ0XG4gKlxuICpcbiAqIFVzYWdlIGV4YW1wbGU6XG4gKiA8cHJlPlxuICogJmx0O21hY3JvczpWaXN1YWxGaWx0ZXJcbiAqIGNvbGxlY3Rpb249XCJ7ZW50aXR5U2V0Jmd0O31cIlxuICogY2hhcnRBbm5vdGF0aW9uPVwie2NoYXJ0QW5ub3RhdGlvbiZndDt9XCJcbiAqIGlkPVwic29tZUlEXCJcbiAqIGdyb3VwSWQ9XCJzb21lR3JvdXBJRFwiXG4gKiB0aXRsZT1cInNvbWUgVGl0bGVcIlxuICogLyZndDtcbiAqIDwvcHJlPlxuICogQHByaXZhdGVcbiAqIEBleHBlcmltZW50YWxcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLm1hY3Jvcy52aXN1YWxmaWx0ZXJzLlZpc3VhbEZpbHRlclwiKVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmlzdWFsRmlsdGVyIGV4dGVuZHMgQnVpbGRpbmdCbG9jazxWaXN1YWxGaWx0ZXJDb250cm9sPiB7XG5cdEBpbXBsZW1lbnRJbnRlcmZhY2UoXCJzYXAudWkuY29yZS5JRm9ybUNvbnRlbnRcIilcblx0X19pbXBsZW1lbnRzX19zYXBfdWlfY29yZV9JRm9ybUNvbnRlbnQgPSB0cnVlO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJib29sZWFuXCJcblx0fSlcblx0c2hvd1ZhbHVlSGVscCE6IGJvb2xlYW47XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcInN0cmluZ1wiXG5cdH0pXG5cdHZhbHVlSGVscEljb25TcmMhOiBzdHJpbmc7XG5cblx0QGV2ZW50KClcblx0dmFsdWVIZWxwUmVxdWVzdCE6IEZ1bmN0aW9uO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRyZXF1aXJlZDogdHJ1ZVxuXHR9KVxuXHRpZCE6IHN0cmluZztcblxuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCJcblx0fSlcblx0dGl0bGUgPSBcIlwiO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRyZXF1aXJlZDogdHJ1ZVxuXHR9KVxuXHRwdWJsaWMgY29udGV4dFBhdGghOiBzdHJpbmc7XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcInN0cmluZ1wiLFxuXHRcdHJlcXVpcmVkOiB0cnVlXG5cdH0pXG5cdHB1YmxpYyBtZXRhUGF0aCE6IHN0cmluZztcblxuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCJcblx0fSlcblx0b3V0UGFyYW1ldGVyPzogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIlxuXHR9KVxuXHR2YWx1ZWxpc3RQcm9wZXJ0eT86IHN0cmluZztcblxuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCJcblx0fSlcblx0c2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24/OiBzdHJpbmc7XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcImFycmF5XCJcblx0fSlcblx0aW5QYXJhbWV0ZXJzPzogUGFyYW1ldGVyVHlwZVtdO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJib29sZWFuXCJcblx0fSlcblx0bXVsdGlwbGVTZWxlY3Rpb25BbGxvd2VkPzogYm9vbGVhbjtcblxuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwiYm9vbGVhblwiXG5cdH0pXG5cdHJlcXVpcmVkPzogYm9vbGVhbjtcblxuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwiYm9vbGVhblwiXG5cdH0pXG5cdHNob3dPdmVybGF5SW5pdGlhbGx5PzogYm9vbGVhbjtcblxuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwiYm9vbGVhblwiXG5cdH0pXG5cdHJlbmRlckxpbmVDaGFydD86IGJvb2xlYW47XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcImFycmF5XCJcblx0fSlcblx0cmVxdWlyZWRQcm9wZXJ0aWVzPzogc3RyaW5nW107XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcInN0cmluZ1wiXG5cdH0pXG5cdGZpbHRlckJhckVudGl0eVR5cGU/OiBzdHJpbmc7XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcImJvb2xlYW5cIlxuXHR9KVxuXHRzaG93RXJyb3I/OiBib29sZWFuO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIlxuXHR9KVxuXHRjaGFydE1lYXN1cmU/OiBzdHJpbmc7XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcImJvb2xlYW5cIlxuXHR9KVxuXHRVb01IYXNDdXN0b21BZ2dyZWdhdGU/OiBib29sZWFuO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJib29sZWFuXCJcblx0fSlcblx0c2hvd1ZhbHVlSGVscEJ1dHRvbj86IGJvb2xlYW47XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcImJvb2xlYW5cIlxuXHR9KVxuXHRjdXN0b21BZ2dyZWdhdGUgPSBmYWxzZTtcblxuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCJcblx0fSlcblx0Z3JvdXBJZCA9IFwiJGF1dG8udmlzdWFsRmlsdGVyc1wiO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIlxuXHR9KVxuXHRlcnJvck1lc3NhZ2VUaXRsZT86IHN0cmluZztcblxuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCJcblx0fSlcblx0ZXJyb3JNZXNzYWdlPzogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIlxuXHR9KVxuXHRfY29udGVudElkPzogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJib29sZWFuXCJcblx0fSlcblx0ZHJhZnRTdXBwb3J0ZWQ/OiBib29sZWFuO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJib29sZWFuXCJcblx0fSlcblx0aXNWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXM6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cblx0LyoqXG5cdCAqIEVuYWJsZSBvciBkaXNhYmxlIGNoYXJ0IGJpbmRpbmdcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcImJvb2xlYW5cIlxuXHR9KVxuXHRlbmFibGVDaGFydEJpbmRpbmcgPSB0cnVlO1xuXG5cdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblx0ICogSW50ZXJuYWwgUHJvcGVydGllc1xuXHQgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cblx0YWdncmVnYXRlUHJvcGVydGllczogQWdncmVnYXRlZFByb3BlcnR5VHlwZSB8IHVuZGVmaW5lZDtcblxuXHRjaGFydFR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHRwYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0bWVhc3VyZURpbWVuc2lvblRpdGxlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0dG9vbFRpcDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdFVvTVZpc2liaWxpdHk6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cblx0c2NhbGVVb01UaXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdGZpbHRlckNvdW50QmluZGluZzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdGNoYXJ0QW5ub3RhdGlvbj86IENoYXJ0O1xuXHRfcmVzb2x2ZWRDb250ZXh0UGF0aD86IHN0cmluZztcblxuXHRzb3J0T3JkZXI/OiBTb3J0T3JkZXJUeXBlW107XG5cdGNvbGxlY3Rpb24/OiBEYXRhTW9kZWxPYmplY3RQYXRoPFBhZ2VDb250ZXh0UGF0aFRhcmdldD47XG5cdHNlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQgfCB1bmRlZmluZWQ7XG5cblx0LyoqXG5cdCAqIEZsYWcgdG8gaW5kaWNhdGUgaWYgdGhlIGluLXBhcmFtZXRlcnMgYW5kIGNvbmRpdGlvbnMgdXBkYXRlIGlzIHBlbmRpbmcuXG5cdCAqL1xuXHRwcml2YXRlIGluUGFyYW1Db25kaXRpb25VcGRhdGVQZW5kaW5nID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIEluaXRpYWwgcmVuZGVyaW5nIGlzIHBlbmRpbmcuXG5cdCAqL1xuXHRwcml2YXRlIHJlbmRlcmluZ1VwZGF0ZVBlbmRpbmcgPSB0cnVlO1xuXG5cdGNvbnN0cnVjdG9yKHByb3BzOiAkQ29udHJvbFNldHRpbmdzICYgUHJvcGVydGllc09mPFZpc3VhbEZpbHRlckNvbnRyb2w+LCBvdGhlcnM/OiAkQ29udHJvbFNldHRpbmdzKSB7XG5cdFx0c3VwZXIocHJvcHMsIG90aGVycyk7XG5cdH1cblxuXHRwdWJsaWMgb25NZXRhZGF0YUF2YWlsYWJsZShfb3duZXJDb21wb25lbnQ6IFRlbXBsYXRlQ29tcG9uZW50KTogdm9pZCB7XG5cdFx0dGhpcy5ncm91cElkID0gXCIkYXV0by52aXN1YWxGaWx0ZXJzXCI7XG5cdFx0dGhpcy5wYXRoID0gdGhpcy5tZXRhUGF0aDtcblx0XHRjb25zdCBvd25lciA9IHRoaXMuX2dldE93bmVyKCk7XG5cdFx0dGhpcy5jb250ZXh0UGF0aCA9IHRoaXMuY29udGV4dFBhdGggPz8gb3duZXI/LnByZXByb2Nlc3NvckNvbnRleHQ/LmZ1bGxDb250ZXh0UGF0aDtcblx0XHRjb25zdCBjb250ZXh0T2JqZWN0UGF0aCA9IHRoaXMuZ2V0RGF0YU1vZGVsT2JqZWN0Rm9yTWV0YVBhdGg8UHJlc2VudGF0aW9uVmFyaWFudD4odGhpcy5tZXRhUGF0aCwgdGhpcy5jb250ZXh0UGF0aCk7XG5cdFx0aWYgKHRoaXMuY29udGV4dFBhdGgpIHtcblx0XHRcdHRoaXMuX3Jlc29sdmVkQ29udGV4dFBhdGggPSB0aGlzLmNvbnRleHRQYXRoLmVuZHNXaXRoKFwiL1wiKSA/IHRoaXMuY29udGV4dFBhdGggOiB0aGlzLmNvbnRleHRQYXRoICsgXCIvXCI7XG5cdFx0fVxuXHRcdGNvbnN0IG1ldGFNb2RlbCA9IHRoaXMuZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWw7XG5cblx0XHRjb25zdCBkaWFnbm9zdGljcyA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk/LmdldERpYWdub3N0aWNzKCkgPz8gKHt9IGFzIERpYWdub3N0aWNzKTtcblx0XHRjb25zdCB2aWV3RGF0YSA9XG5cdFx0XHR0aGlzLl9nZXRPd25lcigpPy5nZXRSb290Q29udHJvbGxlcigpPy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSA/PyAodGhpcy5fZ2V0T3duZXIoKT8uZ2V0Vmlld0RhdGEoKSBhcyB1bmtub3duIGFzIFZpZXdEYXRhKTtcblx0XHRjb25zdCBjb252ZXJ0ZXJDb250ZXh0ID0gQ29udmVydGVyQ29udGV4dC5jcmVhdGVDb252ZXJ0ZXJDb250ZXh0Rm9yTWFjcm8oXG5cdFx0XHRjb250ZXh0T2JqZWN0UGF0aD8uc3RhcnRpbmdFbnRpdHlTZXQ/Lm5hbWUgYXMgc3RyaW5nLFxuXHRcdFx0bWV0YU1vZGVsLFxuXHRcdFx0ZGlhZ25vc3RpY3MsXG5cdFx0XHRtZXJnZSxcblx0XHRcdGNvbnRleHRPYmplY3RQYXRoPy5jb250ZXh0TG9jYXRpb24sXG5cdFx0XHRuZXcgTWFuaWZlc3RXcmFwcGVyKHZpZXdEYXRhIGFzIEJhc2VNYW5pZmVzdFNldHRpbmdzLCB0aGlzLmdldEFwcENvbXBvbmVudCgpKVxuXHRcdCk7XG5cdFx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdGNvbnN0IGN1c3RvbUFnZ3JlZ2F0ZXMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9ucygpO1xuXHRcdGNvbnN0IHB2QW5ub3RhdGlvbiA9IGNvbnRleHRPYmplY3RQYXRoPy50YXJnZXRPYmplY3Q7XG5cdFx0bGV0IG1lYXN1cmU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCB2aXN1YWxpemF0aW9ucyA9IHB2QW5ub3RhdGlvbiAmJiBwdkFubm90YXRpb24uVmlzdWFsaXphdGlvbnM7XG5cdFx0dGhpcy5nZXRDaGFydEFubm90YXRpb24odmlzdWFsaXphdGlvbnMsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdGxldCBhZ2dyZWdhdGlvbnM6IEFnZ3JlZ2F0ZWRQcm9wZXJ0eVR5cGVbXSA9IFtdLFxuXHRcdFx0Y3VzdEFnZ01lYXN1cmUgPSBbXTtcblxuXHRcdGlmICh0aGlzLmNoYXJ0QW5ub3RhdGlvbj8uTWVhc3VyZXM/Lmxlbmd0aCkge1xuXHRcdFx0Y3VzdEFnZ01lYXN1cmUgPSBjdXN0b21BZ2dyZWdhdGVzLmZpbHRlcigoY3VzdEFnZykgPT4ge1xuXHRcdFx0XHRyZXR1cm4gY3VzdEFnZy5xdWFsaWZpZXIgPT09IHRoaXMuY2hhcnRBbm5vdGF0aW9uPy5NZWFzdXJlc1swXS52YWx1ZTtcblx0XHRcdH0pO1xuXHRcdFx0bWVhc3VyZSA9IGN1c3RBZ2dNZWFzdXJlLmxlbmd0aCA+IDAgPyBjdXN0QWdnTWVhc3VyZVswXS5xdWFsaWZpZXIgOiB0aGlzLmNoYXJ0QW5ub3RhdGlvbi5NZWFzdXJlc1swXS52YWx1ZTtcblx0XHRcdGFnZ3JlZ2F0aW9ucyA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEFnZ3JlZ2F0ZWRQcm9wZXJ0aWVzKClbMF07XG5cdFx0fVxuXHRcdC8vIGlmIHRoZXJlIGFyZSBBZ2dyZWdhdGVkUHJvcGVydHkgb2JqZWN0cyBidXQgbm8gZHluYW1pYyBtZWFzdXJlcywgcmF0aGVyIHRoZXJlIGFyZSB0cmFuc2Zvcm1hdGlvbiBhZ2dyZWdhdGVzIGZvdW5kIGluIG1lYXN1cmVzXG5cdFx0aWYgKFxuXHRcdFx0YWdncmVnYXRpb25zICYmXG5cdFx0XHRhZ2dyZWdhdGlvbnMubGVuZ3RoID4gMCAmJlxuXHRcdFx0IXRoaXMuY2hhcnRBbm5vdGF0aW9uPy5EeW5hbWljTWVhc3VyZXMgJiZcblx0XHRcdGN1c3RBZ2dNZWFzdXJlLmxlbmd0aCA9PT0gMCAmJlxuXHRcdFx0dGhpcy5jaGFydEFubm90YXRpb24/Lk1lYXN1cmVzICYmXG5cdFx0XHR0aGlzLmNoYXJ0QW5ub3RhdGlvbj8uTWVhc3VyZXMubGVuZ3RoID4gMFxuXHRcdCkge1xuXHRcdFx0TG9nLndhcm5pbmcoXG5cdFx0XHRcdFwiVGhlIHRyYW5zZm9ybWF0aW9uYWwgYWdncmVnYXRlIG1lYXN1cmVzIGFyZSBjb25maWd1cmVkIGFzIENoYXJ0Lk1lYXN1cmVzIGJ1dCBzaG91bGQgYmUgY29uZmlndXJlZCBhcyBDaGFydC5EeW5hbWljTWVhc3VyZXMgaW5zdGVhZC4gUGxlYXNlIGNoZWNrIHRoZSBTQVAgSGVscCBkb2N1bWVudGF0aW9uIGFuZCBjb3JyZWN0IHRoZSBjb25maWd1cmF0aW9uIGFjY29yZGluZ2x5LlwiXG5cdFx0XHQpO1xuXHRcdH1cblx0XHQvL2lmIHRoZSBjaGFydCBoYXMgZHluYW1pYyBtZWFzdXJlcywgYnV0IHdpdGggbm8gb3RoZXIgY3VzdG9tIGFnZ3JlZ2F0ZSBtZWFzdXJlcyB0aGVuIGNvbnNpZGVyIHRoZSBkeW5hbWljIG1lYXN1cmVzXG5cdFx0aWYgKHRoaXMuY2hhcnRBbm5vdGF0aW9uPy5EeW5hbWljTWVhc3VyZXMpIHtcblx0XHRcdGlmIChjdXN0QWdnTWVhc3VyZS5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0bWVhc3VyZSA9IGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcjxBZ2dyZWdhdGVkUHJvcGVydHk+KFxuXHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKHRoaXMuY2hhcnRBbm5vdGF0aW9uLkR5bmFtaWNNZWFzdXJlc1swXS52YWx1ZSlcblx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKVxuXHRcdFx0XHRcdC50YXJnZXRPYmplY3Q/Lk5hbWUudG9TdHJpbmcoKTtcblx0XHRcdFx0YWdncmVnYXRpb25zID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0QWdncmVnYXRlZFByb3BlcnR5KCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRMb2cud2FybmluZyhcblx0XHRcdFx0XHRcIlRoZSBkeW5hbWljIG1lYXN1cmVzIGhhdmUgYmVlbiBpZ25vcmVkIGFzIHZpc3VhbCBmaWx0ZXJzIGNhbiBkZWFsIHdpdGggb25seSAxIG1lYXN1cmUgYW5kIHRoZSBmaXJzdCAoY3VzdG9tIGFnZ3JlZ2F0ZSkgbWVhc3VyZSBkZWZpbmVkIHVuZGVyIENoYXJ0Lk1lYXN1cmVzIGlzIGNvbnNpZGVyZWQuXCJcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKFxuXHRcdFx0Y3VzdG9tQWdncmVnYXRlcy5zb21lKGZ1bmN0aW9uIChjdXN0QWdnKSB7XG5cdFx0XHRcdHJldHVybiBjdXN0QWdnLnF1YWxpZmllciA9PT0gbWVhc3VyZTtcblx0XHRcdH0pXG5cdFx0KSB7XG5cdFx0XHR0aGlzLmN1c3RvbUFnZ3JlZ2F0ZSA9IHRydWU7XG5cdFx0fVxuXG5cdFx0Y29uc3QgZGVmYXVsdFNlbGVjdGlvblZhcmlhbnQgPSBnZXREZWZhdWx0U2VsZWN0aW9uVmFyaWFudChjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSk7XG5cdFx0dGhpcy5jaGVja1NlbGVjdGlvblZhcmlhbnQoZGVmYXVsdFNlbGVjdGlvblZhcmlhbnQpO1xuXHRcdGNvbnN0IGFnZ3JlZ2F0aW9uID0gdGhpcy5nZXRBZ2dyZWdhdGVQcm9wZXJ0aWVzKGFnZ3JlZ2F0aW9ucywgbWVhc3VyZSk7XG5cdFx0aWYgKGFnZ3JlZ2F0aW9uKSB7XG5cdFx0XHR0aGlzLmFnZ3JlZ2F0ZVByb3BlcnRpZXMgPSBhZ2dyZWdhdGlvbjtcblx0XHR9XG5cdFx0Y29uc3QgcHJvcGVydHlBbm5vdGF0aW9ucyA9XG5cdFx0XHR2aXN1YWxpemF0aW9ucyAmJiB0aGlzLmNoYXJ0QW5ub3RhdGlvbj8uTWVhc3VyZXMgJiYgdGhpcy5jaGFydEFubm90YXRpb24/Lk1lYXN1cmVzWzBdPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucztcblx0XHRjb25zdCBhZ2dyZWdhdGFibGVQcm9wZXJ0eUFubm90YXRpb25zID0gYWdncmVnYXRpb24/LkFnZ3JlZ2F0YWJsZVByb3BlcnR5Py4kdGFyZ2V0Py5hbm5vdGF0aW9ucztcblx0XHR0aGlzLmNoZWNrSWZVT01IYXNDdXN0b21BZ2dyZWdhdGUoY3VzdG9tQWdncmVnYXRlcywgcHJvcGVydHlBbm5vdGF0aW9ucywgYWdncmVnYXRhYmxlUHJvcGVydHlBbm5vdGF0aW9ucyk7XG5cdFx0Y29uc3QgcHJvcGVydHlIaWRkZW4gPSBwcm9wZXJ0eUFubm90YXRpb25zPy5VST8uSGlkZGVuO1xuXHRcdGNvbnN0IGhpZGRlbk1lYXN1cmUgPSBwcm9wZXJ0eUhpZGRlbj8udmFsdWVPZigpO1xuXHRcdGNvbnN0IGNoYXJ0VHlwZSA9IHRoaXMuY2hhcnRBbm5vdGF0aW9uPy5DaGFydFR5cGU7XG5cdFx0dGhpcy5jaGFydFR5cGUgPSBjaGFydFR5cGU7XG5cdFx0dGhpcy5zaG93VmFsdWVIZWxwQnV0dG9uID0gdGhpcy5nZXRzaG93VmFsdWVIZWxwQnV0dG9uKGNoYXJ0VHlwZSwgaGlkZGVuTWVhc3VyZSk7XG5cdFx0dGhpcy5kcmFmdFN1cHBvcnRlZCA9IE1vZGVsSGVscGVyLmlzRHJhZnRTdXBwb3J0ZWQobWV0YU1vZGVsLCB0aGlzLmNvbnRleHRQYXRoKTtcblx0XHQvKipcblx0XHQgKiBJZiB0aGUgbWVhc3VyZSBvZiB0aGUgY2hhcnQgaXMgbWFya2VkIGFzICdoaWRkZW4nLCBvciBpZiB0aGUgY2hhcnQgdHlwZSBpcyBpbnZhbGlkLCBvciBpZiB0aGUgZGF0YSB0eXBlIGZvciB0aGUgbGluZSBjaGFydCBpcyBpbnZhbGlkLFxuXHRcdCAqIHRoZSBjYWxsIGlzIG1hZGUgdG8gdGhlIEludGVyYWN0aXZlQ2hhcnRXaXRoRXJyb3IgZnJhZ21lbnQgKHVzaW5nIGVycm9yLW1lc3NhZ2UgcmVsYXRlZCBBUElzLCBidXQgYXZvaWRpbmcgYmF0Y2ggY2FsbHMpXG5cdFx0ICovXG5cdFx0dGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmdldEVycm9yTWVzc2FnZShoaWRkZW5NZWFzdXJlLCBtZWFzdXJlKTtcblx0XHR0aGlzLmNoYXJ0TWVhc3VyZSA9IG1lYXN1cmU7XG5cdFx0dGhpcy5tZWFzdXJlRGltZW5zaW9uVGl0bGUgPSBJbnRlcmFjdGl2ZUNoYXJ0SGVscGVyLmdldE1lYXN1cmVEaW1lbnNpb25UaXRsZShcblx0XHRcdHRoaXMuY2hhcnRBbm5vdGF0aW9uLFxuXHRcdFx0dGhpcy5jdXN0b21BZ2dyZWdhdGUsXG5cdFx0XHR0aGlzLmFnZ3JlZ2F0ZVByb3BlcnRpZXNcblx0XHQpO1xuXHRcdGNvbnN0IGNvbGxlY3Rpb24gPSB0aGlzLmdldERhdGFNb2RlbE9iamVjdEZvck1ldGFQYXRoPFBhZ2VDb250ZXh0UGF0aFRhcmdldD4odGhpcy5jb250ZXh0UGF0aCk7XG5cdFx0dGhpcy50b29sVGlwID0gSW50ZXJhY3RpdmVDaGFydEhlbHBlci5nZXRUb29sVGlwKFxuXHRcdFx0dGhpcy5jaGFydEFubm90YXRpb24sXG5cdFx0XHRjb2xsZWN0aW9uLFxuXHRcdFx0dGhpcy5wYXRoLFxuXHRcdFx0dGhpcy5jdXN0b21BZ2dyZWdhdGUsXG5cdFx0XHR0aGlzLmFnZ3JlZ2F0ZVByb3BlcnRpZXMsXG5cdFx0XHR0aGlzLnJlbmRlckxpbmVDaGFydFxuXHRcdCk7XG5cdFx0dGhpcy5Vb01WaXNpYmlsaXR5ID0gSW50ZXJhY3RpdmVDaGFydEhlbHBlci5nZXRVb01WaXNpYmxpdHkodGhpcy5jaGFydEFubm90YXRpb24sIHRoaXMuc2hvd0Vycm9yKTtcblx0XHR0aGlzLnNjYWxlVW9NVGl0bGUgPSBJbnRlcmFjdGl2ZUNoYXJ0SGVscGVyLmdldFNjYWxlVW9NVGl0bGUoXG5cdFx0XHR0aGlzLmNoYXJ0QW5ub3RhdGlvbixcblx0XHRcdGNvbGxlY3Rpb24sXG5cdFx0XHR0aGlzLnBhdGgsXG5cdFx0XHR0aGlzLmN1c3RvbUFnZ3JlZ2F0ZSxcblx0XHRcdHRoaXMuYWdncmVnYXRlUHJvcGVydGllc1xuXHRcdCk7XG5cdFx0dGhpcy5jb2xsZWN0aW9uID0gY29sbGVjdGlvbjtcblx0XHR0aGlzLnNvcnRPcmRlciA9IHB2QW5ub3RhdGlvbj8uU29ydE9yZGVyO1xuXHRcdHRoaXMuZmlsdGVyQ291bnRCaW5kaW5nID0gSW50ZXJhY3RpdmVDaGFydEhlbHBlci5nZXRmaWx0ZXJDb3VudEJpbmRpbmcodGhpcy5jaGFydEFubm90YXRpb24pO1xuXHRcdGNvbnN0IHZpZXdJZCA9IHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKT8uZ2V0VmlldygpLmdldElkKCk7XG5cdFx0aWYgKHRoaXMuX2NvbnRlbnRJZCkge1xuXHRcdFx0dGhpcy5fY29udGVudElkID0gYCR7dmlld0lkfS0tJHt0aGlzLl9jb250ZW50SWR9YDtcblx0XHR9IGVsc2UgaWYgKHRoaXMuaWQpIHtcblx0XHRcdHRoaXMuX2NvbnRlbnRJZCA9IGAke3RoaXMuaWR9LWNvbnRlbnRgO1xuXHRcdH1cblx0XHR0aGlzLnNlbGVjdGlvblZhcmlhbnQgPSB0aGlzLnNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uXG5cdFx0XHQ/IHRoaXMuZ2V0RGF0YU1vZGVsT2JqZWN0Rm9yTWV0YVBhdGg8U2VsZWN0aW9uVmFyaWFudD4odGhpcy5zZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbik/LnRhcmdldE9iamVjdFxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0dGhpcy5jb250ZW50ID0gdGhpcy5jcmVhdGVDb250ZW50KCk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2sgaWYgdGhlIFVvTSBoYXMgY3VzdG9tIGFnZ3JlZ2F0ZVxuXHQgKiBAcGFyYW0gY3VzdG9tQWdncmVnYXRlcyAtIEN1c3RvbSBhZ2dyZWdhdGVzXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eUFubm90YXRpb25zIC0gUHJvcGVydHkgYW5ub3RhdGlvbnNcblx0ICogQHBhcmFtIGFnZ3JlZ2F0YWJsZVByb3BlcnR5QW5ub3RhdGlvbnMgLSBBZ2dyZWdhdGFibGUgcHJvcGVydHkgYW5ub3RhdGlvbnNcblx0ICovXG5cdGNoZWNrSWZVT01IYXNDdXN0b21BZ2dyZWdhdGUoXG5cdFx0Y3VzdG9tQWdncmVnYXRlczogQXJyYXk8Q3VzdG9tQWdncmVnYXRlPixcblx0XHRwcm9wZXJ0eUFubm90YXRpb25zOiBQcm9wZXJ0eUFubm90YXRpb25zIHwgdW5kZWZpbmVkLFxuXHRcdGFnZ3JlZ2F0YWJsZVByb3BlcnR5QW5ub3RhdGlvbnM/OiBQcm9wZXJ0eUFubm90YXRpb25zXG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IG1lYXN1cmVzID0gcHJvcGVydHlBbm5vdGF0aW9ucz8uTWVhc3VyZXM7XG5cdFx0Y29uc3QgYWdncmVnYXRhYmxlUHJvcGVydHlNZWFzdXJlcyA9IGFnZ3JlZ2F0YWJsZVByb3BlcnR5QW5ub3RhdGlvbnM/Lk1lYXN1cmVzO1xuXHRcdGNvbnN0IFVPTSA9IHRoaXMuZ2V0VW9NKG1lYXN1cmVzLCBhZ2dyZWdhdGFibGVQcm9wZXJ0eU1lYXN1cmVzKTtcblx0XHRpZiAoXG5cdFx0XHRVT00gJiZcblx0XHRcdGN1c3RvbUFnZ3JlZ2F0ZXMuc29tZShmdW5jdGlvbiAoY3VzdEFnZzogQ3VzdG9tQWdncmVnYXRlKSB7XG5cdFx0XHRcdHJldHVybiBjdXN0QWdnLnF1YWxpZmllciA9PT0gVU9NO1xuXHRcdFx0fSlcblx0XHQpIHtcblx0XHRcdHRoaXMuVW9NSGFzQ3VzdG9tQWdncmVnYXRlID0gdHJ1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5Vb01IYXNDdXN0b21BZ2dyZWdhdGUgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBjaGFydCBhbm5vdGF0aW9uLlxuXHQgKiBAcGFyYW0gdmlzdWFsaXphdGlvbnMgVmlzdWFsaXphdGlvbnNcblx0ICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgQ29udmVydGVyIGNvbnRleHRcblx0ICovXG5cdGdldENoYXJ0QW5ub3RhdGlvbihcblx0XHR2aXN1YWxpemF0aW9uczogQXJyYXk8QW5ub3RhdGlvblBhdGg8Q2hhcnQgfCBEYXRhUG9pbnQgfCBMaW5lSXRlbT4+IHwgdW5kZWZpbmVkLFxuXHRcdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcblx0KTogdm9pZCB7XG5cdFx0aWYgKHZpc3VhbGl6YXRpb25zKSB7XG5cdFx0XHRmb3IgKGxldCB2aXN1YWxpemF0aW9uIG9mIHZpc3VhbGl6YXRpb25zKSB7XG5cdFx0XHRcdGNvbnN0IHNBbm5vdGF0aW9uUGF0aCA9IHZpc3VhbGl6YXRpb24gJiYgdmlzdWFsaXphdGlvbi52YWx1ZTtcblx0XHRcdFx0dGhpcy5jaGFydEFubm90YXRpb24gPVxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb248Q2hhcnQ+KHNBbm5vdGF0aW9uUGF0aCkgJiZcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uPENoYXJ0PihzQW5ub3RhdGlvblBhdGgpLmFubm90YXRpb247XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGZsYWcgdG8gc2hvdyBvciBoaWRlIHRoZSB2YWx1ZSBoZWxwIGZvciB0aGUgdmlzdWFsIGZpbHRlci5cblx0ICogQHBhcmFtIGJTaG93VmFsdWVIZWxwIEZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRvIHNob3cgb3IgaGlkZSB0aGUgdmFsdWUgaGVscC5cblx0ICovXG5cdHNldFNob3dWYWx1ZUhlbHAoYlNob3dWYWx1ZUhlbHA6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHRpZiAodGhpcy5jb250ZW50Py5pc0E8VmlzdWFsRmlsdGVyQ29udHJvbD4oXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLmZpbHRlcmJhci5WaXN1YWxGaWx0ZXJcIikpIHtcblx0XHRcdGlmICh0aGlzLmNvbnRlbnQ/LmdldEl0ZW1zKCkubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjb25zdCBvVmlzdWFsRmlsdGVyQ29udHJvbCA9IHRoaXMuZ2V0VmlzdWFsRmlsdGVyQ29udHJvbCgpO1xuXHRcdFx0XHRvVmlzdWFsRmlsdGVyQ29udHJvbD8uZ2V0Q29udGVudCgpLnNvbWUoZnVuY3Rpb24gKG9Jbm5lckNvbnRyb2w6IENvbnRyb2wpIHtcblx0XHRcdFx0XHRpZiAob0lubmVyQ29udHJvbC5pc0E8QnV0dG9uPihcInNhcC5tLkJ1dHRvblwiKSkge1xuXHRcdFx0XHRcdFx0b0lubmVyQ29udHJvbC5zZXRWaXNpYmxlKGJTaG93VmFsdWVIZWxwKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR0aGlzLnNldFByb3BlcnR5KFwic2hvd1ZhbHVlSGVscFwiLCBiU2hvd1ZhbHVlSGVscCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIHNvdXJjZSBvZiB0aGUgdmFsdWUgaGVscCBpY29uLlxuXHQgKiBAcGFyYW0gc0ljb25TcmMgVGhlIHNvdXJjZSBvZiB0aGUgdmFsdWUgaGVscCBpY29uXG5cdCAqL1xuXHRzZXRWYWx1ZUhlbHBJY29uU3JjKHNJY29uU3JjOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5jb250ZW50Py5pc0E8VmlzdWFsRmlsdGVyQ29udHJvbD4oXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLmZpbHRlcmJhci5WaXN1YWxGaWx0ZXJcIikpIHtcblx0XHRcdGlmICh0aGlzLmNvbnRlbnQ/LmdldEl0ZW1zKCkubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjb25zdCBvVmlzdWFsRmlsdGVyQ29udHJvbCA9IHRoaXMuZ2V0VmlzdWFsRmlsdGVyQ29udHJvbCgpO1xuXHRcdFx0XHRvVmlzdWFsRmlsdGVyQ29udHJvbD8uZ2V0Q29udGVudCgpLnNvbWUoZnVuY3Rpb24gKG9Jbm5lckNvbnRyb2w6IENvbnRyb2wpIHtcblx0XHRcdFx0XHRpZiAob0lubmVyQ29udHJvbC5pc0E8QnV0dG9uPihcInNhcC5tLkJ1dHRvblwiKSkge1xuXHRcdFx0XHRcdFx0b0lubmVyQ29udHJvbC5zZXRJY29uKHNJY29uU3JjKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR0aGlzLnNldFByb3BlcnR5KFwidmFsdWVIZWxwSWNvblNyY1wiLCBzSWNvblNyYyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgdmlzdWFsIGZpbHRlciBjb250cm9sIGZyb20gdGhlIGNvbnRlbnQuXG5cdCAqIEByZXR1cm5zIFRoZSB2aXN1YWwgZmlsdGVyIGNvbnRyb2wgb3IgdW5kZWZpbmVkIGlmIG5vdCBmb3VuZFxuXHQgKi9cblx0Z2V0VmlzdWFsRmlsdGVyQ29udHJvbCgpOiBPdmVyZmxvd1Rvb2xiYXIgfCB1bmRlZmluZWQge1xuXHRcdGlmICh0aGlzLmNvbnRlbnQ/LmlzQTxWaXN1YWxGaWx0ZXJDb250cm9sPihcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuZmlsdGVyYmFyLlZpc3VhbEZpbHRlclwiKSkge1xuXHRcdFx0cmV0dXJuICh0aGlzLmNvbnRlbnQ/LmdldEl0ZW1zKClbMF0gYXMgVkJveCkuZ2V0SXRlbXMoKVswXSBhcyBPdmVyZmxvd1Rvb2xiYXI7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgZXJyb3IgbWVzc2FnZSBmb3IgYSBoaWRkZW4gbWVhc3VyZS5cblx0ICogQHBhcmFtIGhpZGRlbk1lYXN1cmUgVGhlIGhpZGRlbiBtZWFzdXJlIG9iamVjdFxuXHQgKiBAcGFyYW0gbWVhc3VyZSBUaGUgbWVhc3VyZSBuYW1lXG5cdCAqIEByZXR1cm5zIFRoZSBlcnJvciBtZXNzYWdlLCBpZiBhbnlcblx0ICovXG5cdGdldEVycm9yTWVzc2FnZShoaWRkZW5NZWFzdXJlOiBPYmplY3QgfCB1bmRlZmluZWQsIG1lYXN1cmU/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGxldCB2YWxpZENoYXJ0VHlwZTtcblx0XHRpZiAodGhpcy5jaGFydEFubm90YXRpb24pIHtcblx0XHRcdGlmICh0aGlzLmNoYXJ0QW5ub3RhdGlvbi5DaGFydFR5cGUgPT09IFwiVUkuQ2hhcnRUeXBlL0xpbmVcIiB8fCB0aGlzLmNoYXJ0QW5ub3RhdGlvbi5DaGFydFR5cGUgPT09IFwiVUkuQ2hhcnRUeXBlL0JhclwiKSB7XG5cdFx0XHRcdHZhbGlkQ2hhcnRUeXBlID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHZhbGlkQ2hhcnRUeXBlID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICgodHlwZW9mIGhpZGRlbk1lYXN1cmUgPT09IFwiYm9vbGVhblwiICYmIGhpZGRlbk1lYXN1cmUpIHx8ICF2YWxpZENoYXJ0VHlwZSB8fCB0aGlzLnJlbmRlckxpbmVDaGFydCA9PT0gZmFsc2UpIHtcblx0XHRcdHRoaXMuc2hvd0Vycm9yID0gdHJ1ZTtcblx0XHRcdHRoaXMuZXJyb3JNZXNzYWdlVGl0bGUgPVxuXHRcdFx0XHRoaWRkZW5NZWFzdXJlIHx8ICF2YWxpZENoYXJ0VHlwZVxuXHRcdFx0XHRcdD8gdGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIk1fVklTVUFMX0ZJTFRFUlNfRVJST1JfTUVTU0FHRV9USVRMRVwiKVxuXHRcdFx0XHRcdDogdGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIk1fVklTVUFMX0ZJTFRFUl9MSU5FX0NIQVJUX0lOVkFMSURfREFUQVRZUEVcIik7XG5cdFx0XHRpZiAoaGlkZGVuTWVhc3VyZSkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIk1fVklTVUFMX0ZJTFRFUl9ISURERU5fTUVBU1VSRVwiLCBbbWVhc3VyZV0pO1xuXHRcdFx0fSBlbHNlIGlmICghdmFsaWRDaGFydFR5cGUpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFRleHQoXCJNX1ZJU1VBTF9GSUxURVJfVU5TVVBQT1JURURfQ0hBUlRfVFlQRVwiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiTV9WSVNVQUxfRklMVEVSX0xJTkVfQ0hBUlRfVU5TVVBQT1JURURfRElNRU5TSU9OXCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gc2hvdyB0aGUgdmFsdWUgaGVscCBidXR0b24gZm9yIHRoZSB2aXN1YWwgZmlsdGVyLlxuXHQgKlxuXHQgKiBAcGFyYW0gY2hhcnRUeXBlIFRoZSB0eXBlIG9mIGNoYXJ0IHVzZWQgaW4gdGhlIHZpc3VhbCBmaWx0ZXJcblx0ICogQHBhcmFtIGhpZGRlbk1lYXN1cmUgVGhlIGhpZGRlbiBtZWFzdXJlIG9iamVjdFxuXHQgKiBAcmV0dXJucyBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRvIHNob3cgdGhlIHZhbHVlIGhlbHAgYnV0dG9uXG5cdCAqL1xuXHRnZXRzaG93VmFsdWVIZWxwQnV0dG9uKGNoYXJ0VHlwZT86IHN0cmluZywgaGlkZGVuTWVhc3VyZT86IE9iamVjdCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHNEaW1lbnNpb25UeXBlID1cblx0XHRcdHRoaXMuY2hhcnRBbm5vdGF0aW9uPy5EaW1lbnNpb25zWzBdICYmXG5cdFx0XHR0aGlzLmNoYXJ0QW5ub3RhdGlvbj8uRGltZW5zaW9uc1swXS4kdGFyZ2V0ICYmXG5cdFx0XHR0aGlzLmNoYXJ0QW5ub3RhdGlvbi5EaW1lbnNpb25zWzBdLiR0YXJnZXQudHlwZTtcblx0XHRpZiAoc0RpbWVuc2lvblR5cGUgPT09IFwiRWRtLkRhdGVcIiB8fCBzRGltZW5zaW9uVHlwZSA9PT0gXCJFZG0uVGltZVwiIHx8IHNEaW1lbnNpb25UeXBlID09PSBcIkVkbS5EYXRlVGltZU9mZnNldFwiKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgaGlkZGVuTWVhc3VyZSA9PT0gXCJib29sZWFuXCIgJiYgaGlkZGVuTWVhc3VyZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gZWxzZSBpZiAoIShjaGFydFR5cGUgPT09IFwiVUkuQ2hhcnRUeXBlL0JhclwiIHx8IGNoYXJ0VHlwZSA9PT0gXCJVSS5DaGFydFR5cGUvTGluZVwiKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5yZW5kZXJMaW5lQ2hhcnQgPT09IGZhbHNlICYmIGNoYXJ0VHlwZSA9PT0gXCJVSS5DaGFydFR5cGUvTGluZVwiKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSBlbHNlIGlmICh0aGlzLmlzVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgdGhlIHNlbGVjdGlvbiB2YXJpYW50IGZvciB0aGUgdmlzdWFsIGZpbHRlci5cblx0ICpcblx0ICogQHBhcmFtIGRlZmF1bHRTZWxlY3Rpb25WYXJpYW50IFRoZSBkZWZhdWx0IHNlbGVjdGlvbiB2YXJpYW50IHRvIGJlIGNoZWNrZWRcblx0ICogQHJldHVybnMgdm9pZFxuXHQgKi9cblx0Y2hlY2tTZWxlY3Rpb25WYXJpYW50KGRlZmF1bHRTZWxlY3Rpb25WYXJpYW50PzogU2VsZWN0aW9uVmFyaWFudCk6IHZvaWQge1xuXHRcdGxldCBzZWxlY3Rpb25WYXJpYW50O1xuXHRcdGlmICh0aGlzLnNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uKSB7XG5cdFx0XHRzZWxlY3Rpb25WYXJpYW50ID0gdGhpcy5nZXREYXRhTW9kZWxPYmplY3RGb3JNZXRhUGF0aDxTZWxlY3Rpb25WYXJpYW50Pih0aGlzLnNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uKT8udGFyZ2V0T2JqZWN0O1xuXHRcdH1cblx0XHRpZiAoIXNlbGVjdGlvblZhcmlhbnQgJiYgZGVmYXVsdFNlbGVjdGlvblZhcmlhbnQpIHtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnQgPSBkZWZhdWx0U2VsZWN0aW9uVmFyaWFudDtcblx0XHR9XG5cdFx0aWYgKHNlbGVjdGlvblZhcmlhbnQgJiYgc2VsZWN0aW9uVmFyaWFudC5TZWxlY3RPcHRpb25zICYmICF0aGlzLm11bHRpcGxlU2VsZWN0aW9uQWxsb3dlZCkge1xuXHRcdFx0Zm9yIChjb25zdCBzZWxlY3RPcHRpb24gb2Ygc2VsZWN0aW9uVmFyaWFudC5TZWxlY3RPcHRpb25zKSB7XG5cdFx0XHRcdGlmIChzZWxlY3RPcHRpb24uUHJvcGVydHlOYW1lPy52YWx1ZSA9PT0gdGhpcy5jaGFydEFubm90YXRpb24/LkRpbWVuc2lvbnNbMF0udmFsdWUpIHtcblx0XHRcdFx0XHRpZiAoc2VsZWN0T3B0aW9uLlJhbmdlcy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJNdWx0aXBsZSBTZWxlY3RPcHRpb25zIGZvciBGaWx0ZXJGaWVsZCBoYXZpbmcgU2luZ2xlVmFsdWUgQWxsb3dlZCBFeHByZXNzaW9uXCIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGFnZ3JlZ2F0ZSBwcm9wZXJ0aWVzIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBhZ2dyZWdhdGlvbnMgYW5kIG1lYXN1cmUuXG5cdCAqIEBwYXJhbSBhZ2dyZWdhdGlvbnMgVGhlIGxpc3Qgb2YgYWdncmVnYXRlZCBwcm9wZXJ0aWVzXG5cdCAqIEBwYXJhbSBtZWFzdXJlIFRoZSBvcHRpb25hbCBtZWFzdXJlIHRvIGZpbHRlciB0aGUgYWdncmVnYXRlZCBwcm9wZXJ0aWVzXG5cdCAqIEByZXR1cm5zIFRoZSBtYXRjaGluZyBhZ2dyZWdhdGVkIHByb3BlcnR5LCBpZiBmb3VuZDsgb3RoZXJ3aXNlLCB1bmRlZmluZWRcblx0ICovXG5cdGdldEFnZ3JlZ2F0ZVByb3BlcnRpZXMoYWdncmVnYXRpb25zOiBBZ2dyZWdhdGVkUHJvcGVydHlUeXBlW10sIG1lYXN1cmU/OiBzdHJpbmcpOiBBZ2dyZWdhdGVkUHJvcGVydHlUeXBlIHwgdW5kZWZpbmVkIHtcblx0XHRsZXQgbWF0Y2hlZEFnZ3JlZ2F0ZTogQWdncmVnYXRlZFByb3BlcnR5VHlwZSB8IHVuZGVmaW5lZDtcblx0XHRpZiAoIWFnZ3JlZ2F0aW9ucykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRhZ2dyZWdhdGlvbnMuc29tZShmdW5jdGlvbiAoYWdncmVnYXRlKSB7XG5cdFx0XHRpZiAoYWdncmVnYXRlLk5hbWUgPT09IG1lYXN1cmUpIHtcblx0XHRcdFx0bWF0Y2hlZEFnZ3JlZ2F0ZSA9IGFnZ3JlZ2F0ZTtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIG1hdGNoZWRBZ2dyZWdhdGU7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSB1bml0IG9mIG1lYXN1cmUgKFVvTSkgZm9yIHRoZSB2aXN1YWwgZmlsdGVyLlxuXHQgKlxuXHQgKiBAcGFyYW0gbWVhc3VyZXMgVGhlIG1lYXN1cmVzIGZvciB0aGUgdmlzdWFsIGZpbHRlclxuXHQgKiBAcGFyYW0gYWdncmVnYXRhYmxlUHJvcGVydHlNZWFzdXJlcyBUaGUgYWdncmVnYXRhYmxlIHByb3BlcnR5IG1lYXN1cmVzIGZvciB0aGUgdmlzdWFsIGZpbHRlclxuXHQgKiBAcmV0dXJucyBUaGUgdW5pdCBvZiBtZWFzdXJlIGZvciB0aGUgdmlzdWFsIGZpbHRlclxuXHQgKi9cblx0Z2V0VW9NKG1lYXN1cmVzPzogUHJvcGVydHlBbm5vdGF0aW9uc19NZWFzdXJlcywgYWdncmVnYXRhYmxlUHJvcGVydHlNZWFzdXJlcz86IFByb3BlcnR5QW5ub3RhdGlvbnNfTWVhc3VyZXMpOiBzdHJpbmcge1xuXHRcdGxldCBJU09DdXJyZW5jeSA9IG1lYXN1cmVzPy5JU09DdXJyZW5jeTtcblx0XHRsZXQgdW5pdCA9IG1lYXN1cmVzPy5Vbml0O1xuXHRcdGlmICghSVNPQ3VycmVuY3kgJiYgIXVuaXQgJiYgYWdncmVnYXRhYmxlUHJvcGVydHlNZWFzdXJlcykge1xuXHRcdFx0SVNPQ3VycmVuY3kgPSBhZ2dyZWdhdGFibGVQcm9wZXJ0eU1lYXN1cmVzLklTT0N1cnJlbmN5O1xuXHRcdFx0dW5pdCA9IGFnZ3JlZ2F0YWJsZVByb3BlcnR5TWVhc3VyZXMuVW5pdDtcblx0XHR9XG5cdFx0cmV0dXJuIChcblx0XHRcdChJU09DdXJyZW5jeSBhcyB1bmtub3duIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+KT8ucGF0aCB8fFxuXHRcdFx0KHVuaXQgYXMgdW5rbm93biBhcyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248c3RyaW5nPik/LnBhdGhcblx0XHQpO1xuXHR9XG5cblx0Z2V0UmVxdWlyZWQoKTogc3RyaW5nIHtcblx0XHRpZiAodGhpcy5yZXF1aXJlZCkge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PExhYmVsIHRleHQ9XCJcIiB3aWR0aD1cIjAuNXJlbVwiIHJlcXVpcmVkPVwidHJ1ZVwiPlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRsYXlvdXREYXRhOiA8T3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSBwcmlvcml0eT17T3ZlcmZsb3dUb29sYmFyUHJpb3JpdHkuTmV2ZXJPdmVyZmxvd30gLz5cblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0fVxuXHR9XG5cblx0Z2V0VGl0bGUoKTogc3RyaW5nIHtcblx0XHRjb25zdCB0aXRsZUNvbnRyb2wgPSAoXG5cdFx0XHQ8VGl0bGVcblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0aGlzLl9jb250ZW50SWQsIFwiTWVhc3VyZURpbWVuc2lvblRpdGxlXCJdKX1cblx0XHRcdFx0dGV4dD17dGhpcy5tZWFzdXJlRGltZW5zaW9uVGl0bGV9XG5cdFx0XHRcdHRvb2x0aXA9e3RoaXMudG9vbFRpcH1cblx0XHRcdFx0dGl0bGVTdHlsZT1cIkg2XCJcblx0XHRcdFx0bGV2ZWw9XCJIM1wiXG5cdFx0XHRcdGNsYXNzPVwic2FwVWlUaW55TWFyZ2luRW5kIHNhcFVpTm9NYXJnaW5CZWdpblwiXG5cdFx0XHQ+PC9UaXRsZT5cblx0XHQpO1xuXG5cdFx0Ly8gQXR0YWNoIGV2ZW50IGRlbGVnYXRlcyBhZnRlciB0aGUgY29udHJvbHMgYXJlIHJlbmRlcmVkIGFuZCB2aWV3IGlzIGF2YWlsYWJsZVxuXHRcdHRoaXMuX2F0dGFjaFRpdGxlRXZlbnREZWxlZ2F0ZXModGl0bGVDb250cm9sKTtcblx0XHRyZXR1cm4gdGl0bGVDb250cm9sO1xuXHR9XG5cblx0Z2V0VW9NVGl0bGUoc2hvd0Vycm9yRXhwcmVzc2lvbjogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRpZiAodGhpcy5Vb01WaXNpYmlsaXR5KSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8VGl0bGVcblx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RoaXMuX2NvbnRlbnRJZCwgXCJTY2FsZVVvTVRpdGxlXCJdKX1cblx0XHRcdFx0XHR2aXNpYmxlPXtzaG93RXJyb3JFeHByZXNzaW9ufVxuXHRcdFx0XHRcdHRleHQ9e3RoaXMuc2NhbGVVb01UaXRsZX1cblx0XHRcdFx0XHR0aXRsZVN0eWxlPVwiSDZcIlxuXHRcdFx0XHRcdGxldmVsPVwiSDNcIlxuXHRcdFx0XHRcdHdpZHRoPXtcblx0XHRcdFx0XHRcdHRoaXMuc2NhbGVVb01UaXRsZVxuXHRcdFx0XHRcdFx0XHQ/IGNvbXBpbGVFeHByZXNzaW9uKGlmRWxzZShyZXNvbHZlQmluZGluZ1N0cmluZyh0aGlzLnNjYWxlVW9NVGl0bGUpLCBcIjQuMTVyZW1cIiwgdW5kZWZpbmVkKSlcblx0XHRcdFx0XHRcdFx0OiB1bmRlZmluZWRcblx0XHRcdFx0XHR9XG5cdFx0XHRcdD48L1RpdGxlPlxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0fVxuXHR9XG5cblx0Z2V0VG9vbEJhclNwYWNlcigpOiBzdHJpbmcge1xuXHRcdGlmICh0aGlzLnNob3dWYWx1ZUhlbHBCdXR0b24pIHtcblx0XHRcdHJldHVybiA8VG9vbGJhclNwYWNlcj48L1Rvb2xiYXJTcGFjZXI+O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gXCJcIjtcblx0XHR9XG5cdH1cblxuXHRnZXRWYWx1ZUhlbHAoc2hvd0Vycm9yRXhwcmVzc2lvbjogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRpZiAodGhpcy5zaG93VmFsdWVIZWxwQnV0dG9uKSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0aGlzLl9jb250ZW50SWQsIFwiVmlzdWFsRmlsdGVyVmFsdWVIZWxwQnV0dG9uXCJdKX1cblx0XHRcdFx0XHR0eXBlPVwiVHJhbnNwYXJlbnRcIlxuXHRcdFx0XHRcdGFyaWFIYXNQb3B1cD1cIkRpYWxvZ1wiXG5cdFx0XHRcdFx0dGV4dD17dGhpcy5maWx0ZXJDb3VudEJpbmRpbmd9XG5cdFx0XHRcdFx0ZW5hYmxlZD17c2hvd0Vycm9yRXhwcmVzc2lvbn1cblx0XHRcdFx0XHRwcmVzcz17KGV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRWaXN1YWxGaWx0ZXJSdW50aW1lLmZpcmVWYWx1ZUhlbHAoZXZlbnQpO1xuXHRcdFx0XHRcdH19XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0bGF5b3V0RGF0YTogPE92ZXJmbG93VG9vbGJhckxheW91dERhdGEgcHJpb3JpdHk9e092ZXJmbG93VG9vbGJhclByaW9yaXR5Lk5ldmVyT3ZlcmZsb3d9IC8+LFxuXHRcdFx0XHRcdFx0Y3VzdG9tRGF0YTogPEN1c3RvbURhdGEga2V5PXtcIm11bHRpcGxlU2VsZWN0aW9uQWxsb3dlZFwifSB2YWx1ZT17dGhpcy5tdWx0aXBsZVNlbGVjdGlvbkFsbG93ZWR9IC8+XG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gXCJcIjtcblx0XHR9XG5cdH1cblxuXHRnZXRUb29sYmFyKHNob3dFcnJvckV4cHJlc3Npb246IHN0cmluZyk6IE92ZXJmbG93VG9vbGJhciB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxPdmVyZmxvd1Rvb2xiYXIgc3R5bGU9XCJDbGVhclwiPlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGNvbnRlbnQ6IChcblx0XHRcdFx0XHRcdDw+XG5cdFx0XHRcdFx0XHRcdHt0aGlzLmdldFJlcXVpcmVkKCl9XG5cdFx0XHRcdFx0XHRcdHt0aGlzLmdldFRpdGxlKCl9XG5cdFx0XHRcdFx0XHRcdHt0aGlzLmdldFVvTVRpdGxlKHNob3dFcnJvckV4cHJlc3Npb24pfVxuXHRcdFx0XHRcdFx0XHR7dGhpcy5nZXRUb29sQmFyU3BhY2VyKCl9XG5cdFx0XHRcdFx0XHRcdHt0aGlzLmdldFZhbHVlSGVscChzaG93RXJyb3JFeHByZXNzaW9uKX1cblx0XHRcdFx0XHRcdDwvPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fX1cblx0XHRcdDwvT3ZlcmZsb3dUb29sYmFyPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyBpbnBhcmFtZXRlcnMgY2hhbmdlcyBkdXJpbmcgdGhlIGVuYWJsZW1lbnQgb2YgdGhlIHZpc3VhbCBmaWx0ZXIgY2hhcnQgYmluZGluZyBiYXNlZCBvbiB0aGUgY2hhbmdlZCBmaWx0ZXIgZmllbGQgcGF0aHMuXG5cdCAqXG5cdCAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgaW4tcGFyYW1ldGVycyBvZiB0aGUgdmlzdWFsIGZpbHRlciBhcmUgYWZmZWN0ZWQgYnkgdGhlIGNoYW5nZWQgZmlsdGVyIGZpZWxkIHBhdGhzLlxuXHQgKiBJZiBhbnkgb2YgdGhlIGluLXBhcmFtZXRlcnMgYXJlIGFmZmVjdGVkLCB3ZSBzZXRzIHRoIGludGVybmFsIGNvbmRpdGlvbiB1cGRhdGUgcGVuZGluZyBmbGFnIHRvIHRydWUuXG5cdCAqIFN1YnNlcXVlbnRseSwgdGhlIGNoYXJ0IGJpbmRpbmcgd2lsbCBiZSBlbmFibGVkIG9ubHkgYWZ0ZXIgdGhlIGNvbmRpdGlvbiBtb2RlbCBpcyB1cGRhdGVkIGZvciB0aGUgdmlzdWFsIGZpbHRlciB3aXRoIHRoZSBpbnBhcmFtZXRlciBzZWxlY3Rpb25zLlxuXHQgKiBAcGFyYW0gY2hhbmdlZEZpbHRlckZpZWxkUGF0aHMgQXJyYXkgb2YgY2hhbmdlZCBmaWx0ZXIgZmllbGQgcGF0aHMuXG5cdCAqL1xuXHRfaGFuZGxlSW5QYXJhbXNDaGFydEJpbmRpbmdFbmFibGVtZW50KGNoYW5nZWRGaWx0ZXJGaWVsZFBhdGhzOiBzdHJpbmdbXSk6IHZvaWQge1xuXHRcdGNvbnN0IGluUGFyYW1ldGVycyA9IHRoaXMuZ2V0UHJvcGVydHkoXCJpblBhcmFtZXRlcnNcIikuY3VzdG9tRGF0YSBhcyBQYXJhbWV0ZXJUeXBlW107XG5cdFx0Y29uc3QgaW5QYXJhbWV0ZXJMb2NhbERhdGFQcm9wZXJ0aWVzID0gaW5QYXJhbWV0ZXJzLm1hcCgoaW5QYXJhbWV0ZXIpID0+IGluUGFyYW1ldGVyLmxvY2FsRGF0YVByb3BlcnR5KTtcblx0XHRjb25zdCB2ZkluUGFyYW1ldGVyVXBkYXRlRXhwZWN0ZWQgPSBjaGFuZ2VkRmlsdGVyRmllbGRQYXRocy5zb21lKChwYXRoKSA9PiBpblBhcmFtZXRlckxvY2FsRGF0YVByb3BlcnRpZXMuaW5jbHVkZXMocGF0aCkpO1xuXHRcdGlmICh2ZkluUGFyYW1ldGVyVXBkYXRlRXhwZWN0ZWQpIHtcblx0XHRcdC8vIElmIHRoZSBpblBhcmFtZXRlcnMgb2YgdGhlIHZpc3VhbCBmaWx0ZXIgYXJlIGNoYW5nZWQoZGlmZlN0YXRlKSwgd2UgbmVlZCB0byB3YWl0IGZvciBjb25kaXRpb25zIG1vZGVsIHRvIGJlIHVwZGF0ZWQgZm9yIHRoZSB2aXN1YWwgZmlsdGVyIHRvIGZpbHRlciBjaGFydCBiaW5kaW5nLlxuXHRcdFx0dGhpcy5fc2V0SW50ZXJuYWxVcGRhdGVQZW5kaW5nKHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBBdHRhY2hlcyBtb3VzZW92ZXIgYW5kIG1vdXNlb3V0IGV2ZW50IGRlbGVnYXRlcyB0byB0aGUgbWVhc3VyZSBkaW1lbnNpb24gdGl0bGUuXG5cdCAqIFRoaXMgY3JlYXRlcyBkeW5hbWljIHRvb2x0aXBzIHRoYXQgY29tYmluZSBtZWFzdXJlIHRpdGxlcyB3aXRoIHNjYWxlL1VPTSBpbmZvcm1hdGlvbi5cblx0ICogQHBhcmFtIHRpdGxlY29udHJvbCBUaGUgdGl0bGUgY29udHJvbCB0byB3aGljaCBldmVudCBkZWxlZ2F0ZXMgYXJlIGF0dGFjaGVkLlxuXHQgKi9cblx0cHJpdmF0ZSBfYXR0YWNoVGl0bGVFdmVudERlbGVnYXRlcyh0aXRsZWNvbnRyb2w6IFRpdGxlKTogdm9pZCB7XG5cdFx0dGl0bGVjb250cm9sLmFkZEV2ZW50RGVsZWdhdGUoXG5cdFx0XHR7XG5cdFx0XHRcdG9ubW91c2VvdmVyOiAoX2V2dDogTW91c2VFdmVudCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHRvb2x0aXAgPSB0aXRsZWNvbnRyb2wuZ2V0VG9vbHRpcCgpIGFzIHN0cmluZztcblx0XHRcdFx0XHR0aXRsZWNvbnRyb2wuZ2V0RG9tUmVmKCk/LnNldEF0dHJpYnV0ZShcInRpdGxlXCIsIHRvb2x0aXApO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0dGhpc1xuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgZW5hYmxlbWVudCBvZiB0aGUgdmlzdWFsIGZpbHRlciBjaGFydCBiaW5kaW5nLlxuXHQgKiBAcGFyYW0gZW5hYmxlQmluZGluZyBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0byBlbmFibGUgb3IgZGlzYWJsZSB0aGUgY2hhcnQgYmluZGluZy5cblx0ICogQHBhcmFtIGNoYW5nZWRGaWx0ZXJGaWVsZFBhdGhzIEFycmF5IG9mIGNoYW5nZWQgZmlsdGVyIGZpZWxkIHBhdGhzIHRoYXQgbWF5IGFmZmVjdCB0aGUgaW4tcGFyYW1ldGVycyBvZiB0aGUgdmlzdWFsIGZpbHRlci5cblx0ICovXG5cdHNldEVuYWJsZUNoYXJ0QmluZGluZyhlbmFibGVCaW5kaW5nOiBib29sZWFuLCBjaGFuZ2VkRmlsdGVyRmllbGRQYXRoczogc3RyaW5nW10gPSBbXSk6IHZvaWQge1xuXHRcdGlmIChlbmFibGVCaW5kaW5nICYmIGNoYW5nZWRGaWx0ZXJGaWVsZFBhdGhzLmxlbmd0aCA+IDApIHtcblx0XHRcdC8vIElmIGlucGFyYW1ldGVycyBhcmUgY2hhbmdlZCwgd2UgbmVlZCB0byB3YWl0IHRpbGwgdGhlIGNvbmRpdGlvbiBtb2RlbCB0byBiZSB1cGRhdGVkIGJlZm9yZSB3ZSBzZW5kIHJlc3VtZSB0aGUgYmluZGluZyB3aXRoIHRoZSBpbnBhcmFtZXRlciBzZWxlY3Rpb25zIGFzIGZpbHRlcnMgdG8gdGhlIGNoYXJ0IGJpbmRpbmcgYW5kIHNlbmQgdGhlIHJlcXVlc3QuXG5cdFx0XHR0aGlzLl9oYW5kbGVJblBhcmFtc0NoYXJ0QmluZGluZ0VuYWJsZW1lbnQoY2hhbmdlZEZpbHRlckZpZWxkUGF0aHMpO1xuXHRcdH1cblxuXHRcdC8vIFRoZSBiaW5kaW5nIGlzIGV4cGVjdGVkIHRvIGJlIGVuYWJsZWQgb25seSB3aGVuIHZpc3VhbCBmaWx0ZXIgaXMgcmVhZHlcblx0XHQvLyAxLiBpbnRlcm5hbGx5KGlucGFyYW1ldGVyIGNvbmRpdGlvbnMgYXJlIHVwZGF0ZWQgYW5kIHZpc3VhbCBmaWx0ZXIgaXMgcmVuZGVyZWQpXG5cdFx0Ly8gMi4gYW5kIGV4dGVybmFsbHkoZW5hYmxlQ2hhcnRCaW5kaW5nKS4gTGlrZSwgeEFwcFN0YXRlIG9yIGlBcHBTdGF0ZSBpcyBhcHBsaWVkIHRvIHBhcmVudCBmaWx0ZXIgYmFyLlxuXHRcdGNvbnN0IGludGVybmFsVXBkYXRlUGVuZGluZyA9IHRoaXMuaW5QYXJhbUNvbmRpdGlvblVwZGF0ZVBlbmRpbmcgfHwgdGhpcy5yZW5kZXJpbmdVcGRhdGVQZW5kaW5nO1xuXG5cdFx0Y29uc3Qgb3ZlcmFsbEVuYWJsZUJpbmRpbmcgPSBlbmFibGVCaW5kaW5nICYmICFpbnRlcm5hbFVwZGF0ZVBlbmRpbmc7XG5cdFx0Y29uc3QgY2hhcnRCaW5kaW5nID0gdGhpcy5jb250ZW50Py5nZXRDaGFydEJpbmRpbmcoKTtcblx0XHRpZiAoY2hhcnRCaW5kaW5nKSB7XG5cdFx0XHRpZiAob3ZlcmFsbEVuYWJsZUJpbmRpbmcgJiYgY2hhcnRCaW5kaW5nLmlzU3VzcGVuZGVkKCkpIHtcblx0XHRcdFx0Y2hhcnRCaW5kaW5nLnJlc3VtZSgpO1xuXHRcdFx0fSBlbHNlIGlmICghb3ZlcmFsbEVuYWJsZUJpbmRpbmcgJiYgIWNoYXJ0QmluZGluZy5pc1N1c3BlbmRlZCgpKSB7XG5cdFx0XHRcdGNoYXJ0QmluZGluZy5zdXNwZW5kKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMuc2V0UHJvcGVydHkoXCJlbmFibGVDaGFydEJpbmRpbmdcIiwgZW5hYmxlQmluZGluZywgdHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgaW50ZXJuYWwgdXBkYXRlIHBlbmRpbmcgZmxhZ3MgZm9yIHRoZSB2aXN1YWwgZmlsdGVyLlxuXHQgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIG1hbmFnZSB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIHZpc3VhbCBmaWx0ZXIsIHNwZWNpZmljYWxseSB3aGVuIHRoZSBpbi1wYXJhbWV0ZXJzIGFuZCByZW5kZXJpbmcgdXBkYXRlcyBhcmUgcGVuZGluZy5cblx0ICogQHBhcmFtIGNvbmRpdGlvblVwZGF0ZVBlbmRpbmcgV2hldGhlciB0aGUgY29uZGl0aW9uIHVwZGF0ZSBpcyBwZW5kaW5nIG9yIG5vdC4gRGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgaW5QYXJhbUNvbmRpdGlvblVwZGF0ZVBlbmRpbmcgc3RhdGUuXG5cdCAqIEBwYXJhbSByZW5kZXJpbmdVcGRhdGVQZW5kaW5nIFdoZXRoZXIgdGhlIHJlbmRlcmluZyB1cGRhdGUgaXMgcGVuZGluZyBvciBub3QuIERlZmF1bHRzIHRvIHRoZSBjdXJyZW50IHJlbmRlcmluZ1VwZGF0ZVBlbmRpbmcgc3RhdGUuXG5cdCAqL1xuXHRfc2V0SW50ZXJuYWxVcGRhdGVQZW5kaW5nKFxuXHRcdGNvbmRpdGlvblVwZGF0ZVBlbmRpbmcgPSB0aGlzLmluUGFyYW1Db25kaXRpb25VcGRhdGVQZW5kaW5nLFxuXHRcdHJlbmRlcmluZ1VwZGF0ZVBlbmRpbmcgPSB0aGlzLnJlbmRlcmluZ1VwZGF0ZVBlbmRpbmdcblx0KTogdm9pZCB7XG5cdFx0Ly8gVGhpcyBtZXRob2QgaXMgdXNlZCB0byBpbnRlcm5hbGx5IGJ5IHZpc3VhbCBmaWx0ZXIgdG8gZW5hYmxlIGFuZCBkaXNhYmxlIGJpbmRpbmdzLlxuXHRcdGNvbnN0IGlzQmluZGluZ0VuYWJsZWRGb3JWaXN1YWxGaWx0ZXJFeHRlcm5hbGx5ID0gdGhpcy5lbmFibGVDaGFydEJpbmRpbmc7XG5cdFx0Y29uc3QgY2hhcnRCaW5kaW5nID0gdGhpcy5jb250ZW50Py5nZXRDaGFydEJpbmRpbmcoKTtcblx0XHRjb25zdCB1cGRhdGVQZW5kaW5nID0gY29uZGl0aW9uVXBkYXRlUGVuZGluZyB8fCByZW5kZXJpbmdVcGRhdGVQZW5kaW5nO1xuXHRcdGlmICghdXBkYXRlUGVuZGluZyAmJiBpc0JpbmRpbmdFbmFibGVkRm9yVmlzdWFsRmlsdGVyRXh0ZXJuYWxseSAmJiBjaGFydEJpbmRpbmcgJiYgY2hhcnRCaW5kaW5nLmlzU3VzcGVuZGVkKCkpIHtcblx0XHRcdC8vIEludGVybmFsIHVwZGF0ZSBpcyBkb25lLCBiaW5kaW5nIGlzIGVuYWJsZWQgZXh0ZXJuYWxseSwgc28gcmVzdW1lIHRoZSBiaW5kaW5nLlxuXHRcdFx0Y2hhcnRCaW5kaW5nLnJlc3VtZSgpO1xuXHRcdH0gZWxzZSBpZiAodXBkYXRlUGVuZGluZyAmJiBjaGFydEJpbmRpbmcgJiYgIWNoYXJ0QmluZGluZy5pc1N1c3BlbmRlZCgpKSB7XG5cdFx0XHQvLyBJbnRlcm5hbCB1cGRhdGUgaXMgcGVuZGluZy9pbiBwcm9ncmVzcywgc28gd2Ugc3VzcGVuZCB0aGUgYmluZGluZy5cblx0XHRcdGNoYXJ0QmluZGluZy5zdXNwZW5kKCk7XG5cdFx0fVxuXHRcdC8vIFVwZGF0ZSB0aGUgaW50ZXJuYWwgZmxhZ3MgZm9yIGNvbmRpdGlvbiBhbmQgcmVuZGVyaW5nIHVwZGF0ZSBwZW5kaW5nLlxuXHRcdHRoaXMuaW5QYXJhbUNvbmRpdGlvblVwZGF0ZVBlbmRpbmcgPSBjb25kaXRpb25VcGRhdGVQZW5kaW5nO1xuXHRcdHRoaXMucmVuZGVyaW5nVXBkYXRlUGVuZGluZyA9IHJlbmRlcmluZ1VwZGF0ZVBlbmRpbmc7XG5cdH1cblxuXHRjcmVhdGVDb250ZW50KCk6IFZpc3VhbEZpbHRlckNvbnRyb2wge1xuXHRcdGNvbnN0IGlkID0gZ2VuZXJhdGUoW3RoaXMucGF0aF0pO1xuXHRcdGNvbnN0IHNob3dFcnJvckV4cHJlc3Npb24gPSBcIns9ICEke2ludGVybmFsPlwiICsgaWQgKyBcIi9zaG93RXJyb3J9fVwiO1xuXHRcdGNvbnN0IGNvenlNb2RlID0gZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoXCJzYXBVaVNpemVDb3p5XCIpO1xuXHRcdGNvbnN0IG92ZXJhbGxIZWlnaHQgPSBjb3p5TW9kZSA/IFwiMTNyZW1cIiA6IFwiMTAwJVwiO1xuXHRcdGNvbnN0IGNoYXJ0SGVpZ2h0ID0gY296eU1vZGUgPyBcIjEwMCVcIiA6IFwiNy41cmVtXCI7XG5cdFx0Y29uc3QgdmZDb250cm9sSWQgPSB0aGlzLl9jb250ZW50SWQgPyBnZW5lcmF0ZShbdGhpcy5fY29udGVudElkXSkgOiB1bmRlZmluZWQ7XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PFZpc3VhbEZpbHRlckNvbnRyb2wgaWQ9e3ZmQ29udHJvbElkfSBoZWlnaHQ9e292ZXJhbGxIZWlnaHR9IHdpZHRoPVwiMjAuNXJlbVwiIGNsYXNzPVwic2FwVWlTbWFsbE1hcmdpbkJlZ2luRW5kXCI+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0Y3VzdG9tRGF0YTogPEN1c3RvbURhdGEga2V5PXtcImluZm9QYXRoXCJ9IHZhbHVlPXtnZW5lcmF0ZShbdGhpcy5wYXRoXSl9IC8+LFxuXHRcdFx0XHRcdGl0ZW1zOiAoXG5cdFx0XHRcdFx0XHQ8PlxuXHRcdFx0XHRcdFx0XHQ8VkJveCBoZWlnaHQ9XCIycmVtXCIgY2xhc3M9XCJzYXBVaVRpbnlNYXJnaW5Ub3BCb3R0b21cIj5cblx0XHRcdFx0XHRcdFx0XHR7dGhpcy5nZXRUb29sYmFyKHNob3dFcnJvckV4cHJlc3Npb24pfVxuXHRcdFx0XHRcdFx0XHQ8L1ZCb3g+XG5cdFx0XHRcdFx0XHRcdDxWQm94IGhlaWdodD17Y2hhcnRIZWlnaHR9IHdpZHRoPVwiMTAwJVwiPlxuXHRcdFx0XHRcdFx0XHRcdHtnZXRWaXN1YWxGaWx0ZXJDaGFydCh0aGlzKX1cblx0XHRcdFx0XHRcdFx0PC9WQm94PlxuXHRcdFx0XHRcdFx0PC8+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9WaXN1YWxGaWx0ZXJDb250cm9sPlxuXHRcdCk7XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUF5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFsQkEsSUFvQnFCQSxZQUFZLElBQUFDLElBQUEsR0FEaENDLGNBQWMsQ0FBQywwQ0FBMEMsQ0FBQyxFQUFBQyxLQUFBLEdBRXpEQyxrQkFBa0IsQ0FBQywwQkFBMEIsQ0FBQyxFQUFBQyxLQUFBLEdBRzlDQyxRQUFRLENBQUM7SUFDVEMsSUFBSSxFQUFFO0VBQ1AsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHREYsUUFBUSxDQUFDO0lBQ1RDLElBQUksRUFBRTtFQUNQLENBQUMsQ0FBQyxFQUFBRSxLQUFBLEdBR0RDLEtBQUssQ0FBQyxDQUFDLEVBQUFD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
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import type { AnnotationPath,
|
|
1
|
+
import type { AnnotationPath,PathAnnotationExpression } from "@sap-ux/vocabularies-types";
|
|
2
2
|
import type { CustomAggregate } from "@sap-ux/vocabularies-types/vocabularies/Aggregation";
|
|
3
|
-
import type { AggregatedProperty,
|
|
3
|
+
import type { AggregatedProperty,AggregatedPropertyType } from "@sap-ux/vocabularies-types/vocabularies/Analytics";
|
|
4
4
|
import { SortOrderType } from "@sap-ux/vocabularies-types/vocabularies/Common";
|
|
5
5
|
import type { PropertyAnnotations } from "@sap-ux/vocabularies-types/vocabularies/Edm_Types";
|
|
6
6
|
import type { PropertyAnnotations_Measures } from "@sap-ux/vocabularies-types/vocabularies/Measures_Edm";
|
|
7
|
-
import type { Chart,
|
|
7
|
+
import type { Chart,DataPoint,LineItem,PresentationVariant,SelectionVariant } from "@sap-ux/vocabularies-types/vocabularies/UI";
|
|
8
8
|
import Log from "sap/base/Log";
|
|
9
9
|
import merge from "sap/base/util/merge";
|
|
10
|
-
import { compileExpression,
|
|
11
|
-
import { defineUI5Class,
|
|
10
|
+
import { compileExpression,ifElse,resolveBindingString } from "sap/fe/base/BindingToolkit";
|
|
11
|
+
import { defineUI5Class,event,implementInterface,property,type PropertiesOf } from "sap/fe/base/ClassSupport";
|
|
12
12
|
import TemplateComponent from "sap/fe/core/TemplateComponent";
|
|
13
13
|
import BuildingBlock from "sap/fe/core/buildingBlocks/BuildingBlock";
|
|
14
14
|
import ConverterContext from "sap/fe/core/converters/ConverterContext";
|
|
@@ -617,7 +617,7 @@ export default class VisualFilter extends BuildingBlock<VisualFilterControl> {
|
|
|
617
617
|
}
|
|
618
618
|
|
|
619
619
|
getTitle(): string {
|
|
620
|
-
|
|
620
|
+
const titleControl = (
|
|
621
621
|
<Title
|
|
622
622
|
id={generate([this._contentId, "MeasureDimensionTitle"])}
|
|
623
623
|
text={this.measureDimensionTitle}
|
|
@@ -627,6 +627,10 @@ export default class VisualFilter extends BuildingBlock<VisualFilterControl> {
|
|
|
627
627
|
class="sapUiTinyMarginEnd sapUiNoMarginBegin"
|
|
628
628
|
></Title>
|
|
629
629
|
);
|
|
630
|
+
|
|
631
|
+
// Attach event delegates after the controls are rendered and view is available
|
|
632
|
+
this._attachTitleEventDelegates(titleControl);
|
|
633
|
+
return titleControl;
|
|
630
634
|
}
|
|
631
635
|
|
|
632
636
|
getUoMTitle(showErrorExpression: string): string {
|
|
@@ -718,6 +722,23 @@ export default class VisualFilter extends BuildingBlock<VisualFilterControl> {
|
|
|
718
722
|
}
|
|
719
723
|
}
|
|
720
724
|
|
|
725
|
+
/**
|
|
726
|
+
* Attaches mouseover and mouseout event delegates to the measure dimension title.
|
|
727
|
+
* This creates dynamic tooltips that combine measure titles with scale/UOM information.
|
|
728
|
+
* @param titlecontrol The title control to which event delegates are attached.
|
|
729
|
+
*/
|
|
730
|
+
private _attachTitleEventDelegates(titlecontrol: Title): void {
|
|
731
|
+
titlecontrol.addEventDelegate(
|
|
732
|
+
{
|
|
733
|
+
onmouseover: (_evt: MouseEvent) => {
|
|
734
|
+
const tooltip = titlecontrol.getTooltip() as string;
|
|
735
|
+
titlecontrol.getDomRef()?.setAttribute("title", tooltip);
|
|
736
|
+
}
|
|
737
|
+
},
|
|
738
|
+
this
|
|
739
|
+
);
|
|
740
|
+
}
|
|
741
|
+
|
|
721
742
|
/**
|
|
722
743
|
* Sets the enablement of the visual filter chart binding.
|
|
723
744
|
* @param enableBinding Boolean indicating whether to enable or disable the chart binding.
|
|
@@ -779,6 +800,7 @@ export default class VisualFilter extends BuildingBlock<VisualFilterControl> {
|
|
|
779
800
|
const overallHeight = cozyMode ? "13rem" : "100%";
|
|
780
801
|
const chartHeight = cozyMode ? "100%" : "7.5rem";
|
|
781
802
|
const vfControlId = this._contentId ? generate([this._contentId]) : undefined;
|
|
803
|
+
|
|
782
804
|
return (
|
|
783
805
|
<VisualFilterControl id={vfControlId} height={overallHeight} width="20.5rem" class="sapUiSmallMarginBeginEnd">
|
|
784
806
|
{{
|